Alle Container in einem Azure Storage-Konto übertragen

Mit Storage Transfer Service können Daten aus allen Containern in einem einzelnen Microsoft Azure Storage-Konto in einem einzelnen Übertragungsjob übertragen werden. Das vereinfacht den Workflow für Anwendungsfälle wie das Erfassen von Logs, die auf mehrere Container verteilt sind.

Übertragung für alle Container konfigurieren

Wenn Sie alle Container in einem Speicherkonto übertragen möchten, geben Sie den Quellcontainer als * (ein einzelnes Sternchen) im öffentlichen API-Objekt AzureBlobStorageData oder als https://AZURE_ACCOUNT_NAME.blob.core.windows.net/* an, wenn Sie die Quelle in einem gcloud-Befehl angeben.

Die Angabe eines Quellordners oder path wird für Übertragungen mit mehreren Containern nicht unterstützt. Unter Zu übertragende Container und Objekte filtern finden Sie Informationen dazu, wie Sie stattdessen Pfade mit Präfixen angeben.

Wenn der Übertragungsjob ausgeführt wird, fragt der Storage Transfer Service zuerst Azure ab, um eine aktualisierte Liste aller Container im angegebenen Speicherkonto zu erhalten. Anschließend wird für jeden gefundenen Container ein entsprechender Ordner am Zielort erstellt und die Daten des Containers werden in diesen neuen Ordner übertragen.

gcloud

Mit dem folgenden Befehl wird ein Übertragungsjob erstellt, mit dem alle Container aus dem angegebenen Azure Storage-Konto in einen Cloud Storage-Bucket übertragen werden.

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"

Wobei:

  • AZURE_ACCOUNT_NAME: Der Name Ihres Azure Storage-Kontos.
  • GCS_BUCKET_NAME: Der Name des Cloud Storage-Ziel-Buckets.
  • PATH_TO_AZURE_SAS_FILE: Der lokale Pfad zu einer Textdatei, die Ihr Azure SAS-Token auf Kontoebene enthält. Beispiel: ~/.azure/sas_token.txt Das SAS-Token muss auf Speicherkontoebene erstellt werden. Dabei müssen Dienst, Container und Objekt für Zulässige Ressourcentypen ausgewählt sein. Weitere Informationen finden Sie unter Zugriff auf eine Quelle konfigurieren: Microsoft Azure Storage.
  • PROJECT_ID: Die Google Cloud-Projekt-ID des Projekts, zu dem der Transfer gehört.

REST

Wenn Sie diesen Transfer mit der REST API erstellen möchten, senden Sie eine POST-Anfrage an den Endpunkt https://storagetransfer.googleapis.com/v1/transferJobs.

Anfragetext:

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

Wobei:

  • PROJECT_ID: Die Google Cloud-Projekt-ID des Projekts, zu dem der Transfer gehört.
  • AZURE_ACCOUNT_NAME: Der Name Ihres Azure Storage-Kontos.
  • AZURE_SAS_TOKEN: Der vollständige SAS-Tokenstring auf Kontoebene, z. B. ?sv=2020-08-04&ss=bfqt&srt=sco&.... Das SAS-Token muss auf Speicherkontoebene erstellt werden. Für Zulässige Ressourcentypen müssen Dienst, Container und Objekt ausgewählt sein. Weitere Informationen finden Sie unter Zugriff auf eine Quelle konfigurieren: Microsoft Azure Storage.
  • GCS_BUCKET_NAME: Der Name des Cloud Storage-Ziel-Buckets.

Clientbibliothek

In diesem Beispiel wird die Python-Clientbibliothek google-cloud-storage-transfer verwendet, um eine Übertragung zu erstellen.

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

Wobei:

  • PROJECT_ID: Die Google Cloud-Projekt-ID des Projekts, zu dem der Transfer gehört.
  • AZURE_ACCOUNT_NAME: Der Name Ihres Azure Storage-Kontos.
  • AZURE_SAS_TOKEN: Der vollständige SAS-Tokenstring auf Kontoebene, z. B. ?sv=2020-08-04&ss=bfqt&srt=sco&.... Das SAS-Token muss auf Speicherkontoebene erstellt werden. Für Zulässige Ressourcentypen müssen Dienst, Container und Objekt ausgewählt sein. Weitere Informationen finden Sie unter Zugriff auf eine Quelle konfigurieren: Microsoft Azure Storage.
  • GCS_BUCKET_NAME: Der Name des Cloud Storage-Ziel-Buckets.

Weitere Informationen zum Erstellen von Übertragungen und zu den verfügbaren Optionen finden Sie unter Übertragungen erstellen.

Zu übertragende Container und Objekte filtern

Mit Präfixen oder einer Manifestdatei können Sie steuern, welche Container und Objekte in die Übertragung einbezogen werden.

Nach Präfix filtern

Wenn Sie bestimmte Container oder bestimmte Pfade innerhalb von Containern übertragen möchten, geben Sie eine includePrefixes- oder excludePrefixes-Liste an. Wenn das Containerfeld * ist, wird das erste Segment jedes Präfixpfads als Containername behandelt. So können Sie für verschiedene Container im selben Job unterschiedliche Pfade angeben. Wenn Sie ein Präfix auf alle Container im Speicherkonto anwenden möchten, verwenden Sie * als erstes Segment, z. B. */PREFIX.

Wenn Sie beispielsweise alles aus container-a sowie Objekte unter einem bestimmten Pfad in container-b übertragen möchten, legen Sie die einzuschließenden Präfixe so fest:

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

Diese Konfiguration:

  • Überträgt alle Objekte aus container-a.
  • Überträgt alle Objekte unter dem Pfad logs/2025/ aus container-b.
  • Überspringt alle anderen Container im Speicherkonto.

Wenn Sie alle Objekte unter dem Pfad logs/2025/ aus jedem Container im Speicherkonto übertragen möchten, geben Sie "*/logs/2025/" in includePrefixes an.

Weitere Informationen zu Ein- und Ausschlusspräfixen finden Sie unter Nach Präfix filtern.

Mit einem Manifest filtern

Wenn Sie eine Manifestdatei für eine Übertragung mit mehreren Containern verwenden möchten, muss der Pfad für jedes Objekt, das in der CSV-Manifestdatei aufgeführt ist, mit dem Namen des Containers beginnen.

Beispiel:

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

Weitere Informationen zu Manifestdateien finden Sie unter Bestimmte Dateien oder Objekte mithilfe eines Manifests übertragen.

Ereignisgesteuerte Übertragungen

Ereignisgesteuerte Übertragungen von Azure werden für Konfigurationen mit mehreren Containern unterstützt.

Um die beste Leistung zu erzielen und unnötige Ereignisverarbeitung zu vermeiden, konfigurieren Sie Ihren Ereignisfilter in Azure, um anzugeben, welche Container Ereignisse auslösen sollen. Ohne Filter werden Ereignisse für alle Containeraktualisierungen im Speicherkonto generiert.

Weitere Informationen finden Sie unter Ereignisgesteuerte Übertragungen aus Azure Blob Storage.

Azure-API-Kontingente

Wenn Sie Daten aus vielen Containern übertragen, kann sich die Anzahl der API-Anfragen an Azure erhöhen. Für Azure Storage-Konten gelten Ratenlimits für Anfragen, in der Regel etwa 20.000 Anfragen pro Sekunde. Wenn Sie eine sehr große Anzahl von Containern haben, kann der Storage Transfer Service den Auflistungsprozess drosseln, um diese Limits einzuhalten.