Transférer tous les conteneurs d'un compte de stockage Azure

Le service de transfert de stockage peut transférer les données de tous les conteneurs d'un même compte Microsoft Azure Storage dans un seul job de transfert. Cela simplifie le workflow pour les cas d'utilisation tels que l'ingestion de journaux répartis sur plusieurs conteneurs.

Configurer un transfert pour tous les conteneurs

Pour transférer tous les conteneurs d'un compte de stockage, spécifiez le conteneur source sous la forme * (un seul astérisque) dans l'objet d'API publique AzureBlobStorageData ou sous la forme https://AZURE_ACCOUNT_NAME.blob.core.windows.net/* lorsque vous spécifiez la source dans une commande gcloud.

Il n'est pas possible de spécifier un dossier source ni path pour les transferts multiconteneurs. Consultez Filtrer les conteneurs et les objets à transférer pour spécifier des chemins d'accès à l'aide de préfixes.

Lorsque le job de transfert s'exécute, le service de transfert de stockage interroge d'abord Azure pour obtenir une liste à jour de tous les conteneurs du compte de stockage spécifié. Ensuite, pour chaque conteneur trouvé, il crée un dossier correspondant à la destination et transfère les données du conteneur dans ce nouveau dossier.

gcloud

La commande suivante crée un job de transfert qui transfère tous les conteneurs du compte Azure Storage spécifié vers 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"

Où :

  • AZURE_ACCOUNT_NAME : nom de votre compte Azure Storage.
  • GCS_BUCKET_NAME : nom du bucket Cloud Storage de destination.
  • PATH_TO_AZURE_SAS_FILE : chemin d'accès local à un fichier texte contenant votre jeton Azure SAS au niveau du compte. Exemple : ~/.azure/sas_token.txt. Le jeton SAP doit être créé au niveau du compte de stockage, avec Service, Conteneur et Objet sélectionnés pour Types de ressources autorisés. Pour en savoir plus, consultez Configurer l'accès à une source : Microsoft Azure Storage.
  • PROJECT_ID : ID du projet Google Cloud propriétaire du transfert.

REST

Pour créer ce transfert avec l'API REST, envoyez une requête POST au point de terminaison https://storagetransfer.googleapis.com/v1/transferJobs.

Request Body (Corps de la requête) :

{
  "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"
    }
  }
}

Où :

  • PROJECT_ID : ID du projet Google Cloud propriétaire du transfert.
  • AZURE_ACCOUNT_NAME : nom de votre compte Azure Storage.
  • AZURE_SAS_TOKEN : chaîne complète du jeton SAS au niveau du compte, par exemple ?sv=2020-08-04&ss=bfqt&srt=sco&.... Le jeton SAP doit être créé au niveau du compte de stockage, avec les options Service, Conteneur et Objet sélectionnées pour Types de ressources autorisés. Pour en savoir plus, consultez Configurer l'accès à une source : Microsoft Azure Storage.
  • GCS_BUCKET_NAME : nom du bucket Cloud Storage de destination.

Bibliothèque cliente

Cet exemple utilise la bibliothèque cliente Python google-cloud-storage-transfer pour créer un transfert.

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",
    )

Où :

  • PROJECT_ID : ID du projet Google Cloud propriétaire du transfert.
  • AZURE_ACCOUNT_NAME : nom de votre compte Azure Storage.
  • AZURE_SAS_TOKEN : chaîne complète du jeton SAP au niveau du compte, par exemple ?sv=2020-08-04&ss=bfqt&srt=sco&.... Le jeton SAP doit être créé au niveau du compte de stockage, avec les options Service, Conteneur et Objet sélectionnées pour Types de ressources autorisés. Pour en savoir plus, consultez Configurer l'accès à une source : Microsoft Azure Storage.
  • GCS_BUCKET_NAME : nom du bucket Cloud Storage de destination.

Pour en savoir plus sur la création de transferts et les options disponibles, consultez Créer des transferts.

Filtrer les conteneurs et les objets à transférer

Vous pouvez utiliser des préfixes ou un fichier manifeste pour contrôler les conteneurs et les objets inclus dans le transfert.

Filtrer par préfixe

Pour transférer des conteneurs ou des chemins d'accès spécifiques dans des conteneurs, fournissez une liste includePrefixes ou excludePrefixes. Lorsque le champ du conteneur est *, le premier segment de chaque chemin de préfixe est traité comme le nom du conteneur. Cela vous permet de spécifier différents chemins pour différents conteneurs au sein d'un même job. Pour appliquer un préfixe à tous les conteneurs du compte de stockage, utilisez * comme premier segment, par exemple */PREFIX.

Par exemple, pour transférer tous les éléments de container-a ainsi que les objets situés sous un chemin d'accès spécifique dans container-b, définissez les préfixes à inclure comme suit :

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

Cette configuration :

  • Transfère tous les objets depuis container-a.
  • Transfère tous les objets situés sous le chemin d'accès logs/2025/ depuis container-b.
  • Ignore tous les autres conteneurs du compte de stockage.

Pour transférer tous les objets sous le chemin d'accès logs/2025/ de chaque conteneur du compte de stockage, spécifiez "*/logs/2025/" dans includePrefixes.

Pour en savoir plus sur les préfixes d'inclusion et d'exclusion, consultez Filtrer par préfixe.

Filtrer à l'aide d'un fichier manifeste

Pour utiliser un fichier manifeste pour un transfert multiconteneur, le chemin d'accès de chaque objet listé dans votre fichier CSV manifeste doit commencer par le nom du conteneur.

Exemple :

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

Pour en savoir plus sur les fichiers manifestes, consultez Transférer des fichiers ou objets spécifiques à l'aide d'un fichier manifeste.

Transferts basés sur des événements

Les transferts basés sur des événements depuis Azure sont compatibles avec les configurations multiconteneurs.

Pour optimiser les performances et éviter le traitement inutile d'événements, configurez votre filtre d'événements dans Azure afin de spécifier les conteneurs qui doivent déclencher des événements. Sans filtre, des événements seront générés pour toutes les mises à jour de conteneurs dans le compte de stockage.

Pour en savoir plus, consultez Transferts basés sur des événements depuis Azure Blob Storage.

Quotas d'API Azure

Le transfert depuis de nombreux conteneurs peut augmenter le nombre de requêtes API envoyées à Azure. Les comptes Azure Storage sont soumis à des limites de débit de requêtes, généralement d'environ 20 000 requêtes par seconde. Si vous avez un très grand nombre de conteneurs, le service de transfert de stockage peut limiter le processus de listage pour respecter ces limites.