Caricamenti di flussi di dati

Cloud Storage supporta lo streaming dei dati in un bucket senza richiedere che i dati vengano prima salvati in un file. Questa funzionalità è utile quando vuoi caricare dati, ma non conosci le dimensioni finali all'inizio del caricamento, ad esempio quando generi i dati di caricamento da un processo o quando comprimi un oggetto al volo.

Utilizzare la convalida del checksum durante lo streaming

Poiché un checksum può essere fornito solo nella richiesta iniziale di un caricamento, spesso non è fattibile utilizzare la convalida del checksum di Cloud Storage durante lo streaming. Ti consigliamo di utilizzare sempre la convalida del checksum, che puoi eseguire manualmente al termine di un caricamento in streaming. Tuttavia, la convalida al termine del trasferimento significa che tutti i dati danneggiati sono accessibili durante il tempo necessario per confermare il danneggiamento e rimuoverli.

Se hai bisogno della convalida del checksum prima del completamento del caricamento e che i dati diventino accessibili, non devi utilizzare un caricamento in streaming. Devi utilizzare un'opzione di caricamento diversa che esegua la convalida del checksum prima di finalizzare l'oggetto.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per lo streaming dei caricamenti, chiedi all'amministratore di concederti uno dei seguenti ruoli:

  • Per i caricamenti che includono un blocco della conservazione degli oggetti, chiedi all' amministratore di concederti il ruolo IAM Amministratore oggetti Storage (roles/storage.objectAdmin) per il bucket.

  • In tutti gli altri casi, chiedi all'amministratore di concederti il ruolo IAM Utente oggetti Storage (roles/storage.objectUser) per il bucket.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per lo streaming dei caricamenti in Cloud Storage. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

  • storage.objects.create
  • storage.objects.delete
    • Questa autorizzazione è necessaria solo per i caricamenti che sovrascrivono un oggetto esistente.
  • storage.objects.list
    • Questa autorizzazione è necessaria solo per utilizzare Google Cloud CLI per eseguire le istruzioni riportate in questa pagina.
  • storage.objects.setRetention
    • Questa autorizzazione è necessaria solo per i caricamenti che includono un blocco della conservazione degli oggetti.

Puoi ottenere queste autorizzazioni anche con altri ruoli predefiniti o ruoli personalizzati.

Per informazioni sulla concessione dei ruoli nei bucket, consulta Impostare e gestire i criteri IAM nei bucket.

Eseguire lo streaming di un caricamento

Gli esempi riportati di seguito mostrano come eseguire un caricamento in streaming da un processo a un oggetto Cloud Storage:

Console

La Google Cloud console non supporta i caricamenti in streaming. Utilizza invece gcloud CLI.

Riga di comando

  1. Invia i dati tramite pipe al comando gcloud storage cp e utilizza un trattino per l'URL di origine:

    PROCESS_NAME | gcloud storage cp - gs://BUCKET_NAME/OBJECT_NAME

    Dove:

    • PROCESS_NAME è il nome del processo da cui stai raccogliendo i dati. Ad esempio, collect_measurements.
    • BUCKET_NAME è il nome del bucket contenente l'oggetto. Ad esempio, my_app_bucket.
    • OBJECT_NAME è il nome dell'oggetto creato dai dati. Ad esempio, data_measurements.

Librerie client

C++

Per saperne di più, consulta la documentazione di riferimento dell'APIC++ di Cloud Storage.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name, int desired_line_count) {
  std::string const text = "Lorem ipsum dolor sit amet";
  gcs::ObjectWriteStream stream =
      client.WriteObject(bucket_name, object_name);

  for (int lineno = 0; lineno != desired_line_count; ++lineno) {
    // Add 1 to the counter, because it is conventional to number lines
    // starting at 1.
    stream << (lineno + 1) << ": " << text << "\n";
  }

  stream.Close();

  StatusOr<gcs::ObjectMetadata> metadata = std::move(stream).metadata();
  if (!metadata) throw std::move(metadata).status();
  std::cout << "Successfully wrote to object " << metadata->