Trasferire tutti i container in un account di archiviazione Azure

Storage Transfer Service può trasferire i dati da tutti i container all'interno di un singolo account di archiviazione Microsoft Azure in un unico job di trasferimento. In questo modo si semplifica il flusso di lavoro per casi d'uso come l'importazione di log distribuiti su più container.

Configura un trasferimento per tutti i container

Per trasferire tutti i container all'interno di un account di archiviazione, specifica il container di origine come * (un singolo asterisco) nell'oggetto API pubblica AzureBlobStorageData o come https://AZURE_ACCOUNT_NAME.blob.core.windows.net/* quando specifichi l'origine in un comando gcloud.

La specifica di una cartella di origine o di path non è supportata per i trasferimenti multicontainer. Consulta Filtrare i container e gli oggetti da trasferire per specificare i percorsi utilizzando i prefissi.

Quando viene eseguito il job di trasferimento, Storage Transfer Service esegue prima una query su Azure per ottenere un elenco aggiornato di tutti i container nell'account di archiviazione specificato. Quindi, per ogni contenitore trovato, crea una cartella corrispondente nella destinazione e trasferisce i dati del contenitore in questa nuova cartella.

gcloud

Il seguente comando crea un job di trasferimento che trasferisce tutti i container dall'account di archiviazione Azure specificato a un bucket Cloud Storage.

gcloud transfer jobs create \
  https://AZURE_ACCOUNT_NAME.blob.core.windows.net/* \
  gs://GCS_BUCKET_NAME \
  --source-creds-file="PATH_TO_AZURE_SAS_FILE" \
  --project="PROJECT_ID"

Dove:

  • AZURE_ACCOUNT_NAME: il nome del tuo account Azure Storage.
  • GCS_BUCKET_NAME: il nome del bucket Cloud Storage di destinazione.
  • PATH_TO_AZURE_SAS_FILE: il percorso locale di un file di testo contenente il token SAS di Azure a livello di account. Ad esempio: ~/.azure/sas_token.txt. Il token SAS deve essere creato a livello di account di archiviazione con Servizio, Contenitore e Oggetto selezionati per Tipi di risorse consentiti. Per maggiori dettagli, consulta Configurare l'accesso a un'origine: Microsoft Azure Storage.
  • PROJECT_ID: l'ID del progetto Google Cloud proprietario del trasferimento.

REST

Per creare questo trasferimento con l'API REST, invia una richiesta POST all'endpoint https://storagetransfer.googleapis.com/v1/transferJobs.

Corpo della richiesta:

{
  "description": "Transfer all containers from my Azure account",
  "projectId": "PROJECT_ID",
  "status": "ENABLED",
  "transferSpec": {
    "azureBlobStorageDataSource": {
      "storageAccount": "AZURE_ACCOUNT_NAME",
      "container": "*",
      "azureCredentials": {
        "sasToken": "AZURE_SAS_TOKEN"
      }
    },
    "gcsDataSink": {
      "bucketName": "GCS_BUCKET_NAME"
    }
  }
}

Dove:

  • PROJECT_ID: l'ID del progetto Google Cloud proprietario del trasferimento.
  • AZURE_ACCOUNT_NAME: il nome del tuo account Azure Storage.
  • AZURE_SAS_TOKEN: La stringa completa del token SAS a livello di account, ad esempio ?sv=2020-08-04&ss=bfqt&srt=sco&.... Il token SAS deve essere creato a livello di account di archiviazione con Servizio, Contenitore e Oggetto selezionati per Tipi di risorse consentiti. Per maggiori dettagli, consulta Configurare l'accesso a un'origine: Microsoft Azure Storage.
  • GCS_BUCKET_NAME: il nome del bucket Cloud Storage di destinazione.

Libreria client

Questo esempio utilizza la libreria client Python google-cloud-storage-transfer per creare un trasferimento.

from google.cloud import storage_transfer_v1

def create_transfer_all_azure_containers(
    project_id: str,
    description: str,
    azure_storage_account: str,
    azure_sas_token: str,
    gcs_sink_bucket: str,
):
    """Creates a transfer job from all containers in an Azure account to Cloud Storage."""

    client = storage_transfer_v1.StorageTransferServiceClient()

    transfer_job_request = storage_transfer_v1.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer_v1.TransferJob.Status.ENABLED,
                "transfer_spec": {
                    "azure_blob_storage_data_source": {
                        "storage_account": azure_storage_account,
                        "container": "*",  # Wildcard for all containers
                        "azure_credentials": {"sas_token": azure_sas_token},
                    },
                    "gcs_data_sink": {"bucket_name": gcs_sink_bucket},
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transfer job: {result.name}")

if __name__ == "__main__":
    create_transfer_all_azure_containers(
        project_id="PROJECT_ID",
        description="All-containers transfer from Azure",
        azure_storage_account="AZURE_ACCOUNT_NAME",
        azure_sas_token="AZURE_SAS_TOKEN",
        gcs_sink_bucket="GCS_BUCKET_NAME",
    )

Dove:

  • PROJECT_ID: l'ID del progetto Google Cloud proprietario del trasferimento.
  • AZURE_ACCOUNT_NAME: il nome del tuo account Azure Storage.
  • AZURE_SAS_TOKEN: La stringa completa del token SAS a livello di account, ad esempio ?sv=2020-08-04&ss=bfqt&srt=sco&.... Il token SAS deve essere creato a livello di account di archiviazione con Servizio, Contenitore e Oggetto selezionati per Tipi di risorse consentiti. Per maggiori dettagli, consulta Configurare l'accesso a un'origine: Microsoft Azure Storage.
  • GCS_BUCKET_NAME: il nome del bucket Cloud Storage di destinazione.

Per saperne di più sulla creazione dei trasferimenti e sulle opzioni disponibili, consulta Crea trasferimenti.

Filtrare i container e gli oggetti da trasferire

Puoi utilizzare i prefissi o un file manifest per controllare quali container e oggetti sono inclusi nel trasferimento.

Filtra per prefisso

Per trasferire container specifici o percorsi specifici all'interno dei container, fornisci un elenco includePrefixes o excludePrefixes. Quando il campo container è *, il primo segmento di ogni percorso del prefisso viene trattato come nome del container. In questo modo puoi specificare percorsi diversi per container diversi all'interno dello stesso job. Per applicare un prefisso a tutti i container nell'account di archiviazione, utilizza * come primo segmento, ad esempio */PREFIX.

Ad esempio, per trasferire tutto da container-a, nonché gli oggetti sotto un percorso specifico in container-b, imposta i prefissi di inclusione come segue:

"transferSpec": {
  ...
  "azureBlobStorageDataSource": {
    "storageAccount": "my-azure-account",
    "container": "*"
  },
  "objectConditions": {
    "includePrefixes": [
      "container-a",
      "container-b/logs/2025/"
    ]
  },
  ...
}

Questa configurazione:

  • Trasferisce tutti gli oggetti da container-a.
  • Trasferisce tutti gli oggetti nel percorso logs/2025/ da container-b.
  • Ignora tutti gli altri container nell'account di archiviazione.

Per trasferire tutti gli oggetti nel percorso logs/2025/ da ogni contenitore nell'account di archiviazione, specifica "*/logs/2025/" in includePrefixes.

Per saperne di più sui prefissi da includere ed escludere, consulta la sezione Filtrare per prefisso.

Filtrare utilizzando un manifest

Per utilizzare un file manifest per un trasferimento multiconteiner, il percorso di ogni oggetto elencato nel file CSV manifest deve iniziare con il nome del contenitore.

Ad esempio:

container-a/photos/photo1.jpg
container-a/photos/photo2.jpg
container-c/archive.zip

Per ulteriori dettagli sui file manifest, consulta Trasferire file o oggetti specifici utilizzando un manifest.

Trasferimenti basati su eventi

I trasferimenti basati su eventi da Azure sono supportati per le configurazioni multi contenitore.

Per ottenere prestazioni ottimali ed evitare l'elaborazione non necessaria degli eventi, configura il filtro eventi in Azure per specificare quali container devono attivare gli eventi. Senza un filtro, gli eventi verranno generati per tutti gli aggiornamenti dei contenitori all'interno dell'account di archiviazione.

Per maggiori dettagli, vedi Trasferimenti basati su eventi da Azure Blob Storage.

Quote API Azure

Il trasferimento da molti container può aumentare il numero di richieste API effettuate ad Azure. Gli account Azure Storage hanno limiti di frequenza delle richieste, in genere circa 20.000 richieste al secondo. Se hai un numero molto elevato di container, Storage Transfer Service potrebbe limitare il processo di elencazione per rimanere entro questi limiti.