Storage Transfer Service 可以在单个转移作业中转移单个 Microsoft Azure Storage 账号中所有容器的数据。这简化了工作流程,可用于处理分布在多个容器中的日志等使用情形。
为所有容器配置转移
如需转移存储账号中的所有容器,请在 AzureBlobStorageData 公共 API 对象中将源容器指定为 *(单个星号),或者在 gcloud 命令中指定源时将源容器指定为 https://AZURE_ACCOUNT_NAME.blob.core.windows.net/*。
对于多容器转移,不支持指定源文件夹或 path。请参阅过滤要转移的容器和对象,了解如何改用前缀指定路径。
当转移作业运行时,Storage Transfer Service 会先查询 Azure,以获取指定存储账号中所有容器的更新列表。然后,对于找到的每个容器,它会在目标位置创建一个对应的文件夹,并将容器的数据转移到该新文件夹中。
gcloud
以下命令会创建一个转移作业,将指定 Azure Storage 账号中的所有容器转移到 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"
其中:
- AZURE_ACCOUNT_NAME:Azure Storage 账号的名称。
- GCS_BUCKET_NAME:目标 Cloud Storage 存储桶的名称。
- PATH_TO_AZURE_SAS_FILE:包含账号级 Azure SAS 令牌的文本文件的本地路径。例如:
~/.azure/sas_token.txt。SAS 令牌必须在存储账号级层创建,并且在允许的资源类型中选择服务、容器和对象。如需了解详情,请参阅配置对来源的访问权限:Microsoft Azure Storage。 - PROJECT_ID:拥有相应转移的 Google Cloud 项目 ID。
REST
如需使用 REST API 创建此转移,请向 https://storagetransfer.googleapis.com/v1/transferJobs 端点发出 POST 请求。
请求正文:
{
"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"
}
}
}
其中:
- PROJECT_ID:拥有相应转移的 Google Cloud 项目 ID。
- AZURE_ACCOUNT_NAME:Azure Storage 账号的名称。
- AZURE_SAS_TOKEN:完整的账号级 SAS 令牌字符串,例如
?sv=2020-08-04&ss=bfqt&srt=sco&...。SAS 令牌必须在存储账号级层创建,并为允许的资源类型选择服务、容器和对象。如需了解详情,请参阅配置对来源的访问权限:Microsoft Azure Storage。 - GCS_BUCKET_NAME:目标 Cloud Storage 存储桶的名称。
客户端库
此示例使用 google-cloud-storage-transfer Python 客户端库创建转移作业。
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",
)
其中:
- PROJECT_ID:拥有相应转移的 Google Cloud 项目 ID。
- AZURE_ACCOUNT_NAME:Azure Storage 账号的名称。
- AZURE_SAS_TOKEN:完整的账号级 SAS 令牌字符串,例如
?sv=2020-08-04&ss=bfqt&srt=sco&...。SAS 令牌必须在存储账号级层创建,并为允许的资源类型选择服务、容器和对象。如需了解详情,请参阅配置对来源的访问权限:Microsoft Azure Storage。 - GCS_BUCKET_NAME:目标 Cloud Storage 存储桶的名称。
如需详细了解如何创建转移作业以及可用的选项,请参阅创建转移作业。
过滤要转移的容器和对象
您可以使用前缀或清单文件来控制转移中包含哪些容器和对象。
按前缀过滤
如需转移特定容器或容器内的特定路径,请提供 includePrefixes 或 excludePrefixes 列表。如果容器字段为 *,则每个前缀路径的第一个段会被视为容器名称。这样,您就可以为同一作业中的不同容器指定不同的路径。
若要将前缀应用于存储账号中的所有容器,请使用 * 作为第一个段,例如 */PREFIX。
例如,如需转移 container-a 中的所有内容以及 container-b 中特定路径下的对象,请按如下方式设置包含前缀:
"transferSpec": {
...
"azureBlobStorageDataSource": {
"storageAccount": "my-azure-account",
"container": "*"
},
"objectConditions": {
"includePrefixes": [
"container-a",
"container-b/logs/2025/"
]
},
...
}
此配置:
- 转移
container-a中的所有对象。 - 从
container-b转移logs/2025/路径下的所有对象。 - 跳过存储账号中的所有其他容器。
如需转移存储账号中每个容器内 logs/2025/ 路径下的所有对象,请在 includePrefixes 中指定 "*/logs/2025/"。
如需详细了解包含和排除前缀,请参阅按前缀过滤。
使用清单进行过滤
如需使用清单文件进行多容器转移,清单 CSV 文件中列出的每个对象的路径都必须以容器的名称开头。
例如:
container-a/photos/photo1.jpg
container-a/photos/photo2.jpg
container-c/archive.zip
如需详细了解清单文件,请参阅使用清单转移特定文件或对象。
事件驱动型转移
对于多容器配置,支持从 Azure 进行事件驱动型转移。
为获得最佳性能并避免不必要的事件处理,请在 Azure 中配置事件过滤条件,以指定哪些容器应触发事件。如果没有过滤条件,系统会针对存储账号中的所有容器更新生成事件。
如需了解详情,请参阅从 Azure Blob Storage 进行事件驱动型转移。
Azure API 配额
从多个容器进行转移可能会增加向 Azure 发出的 API 请求数量。Azure 存储账号具有请求速率限制,通常约为每秒 20,000 个请求。如果您有大量容器,Storage Transfer Service 可能会限制列出过程,以保持在这些限制范围内。