Storage 移轉服務可透過單一移轉工作,從單一 Microsoft Azure 儲存體帳戶中的所有容器移轉資料。這可簡化工作流程,例如擷取分散在多個容器中的記錄。
為所有容器設定轉移作業
如要轉移儲存空間帳戶中的所有容器,請在 AzureBlobStorageData 公用 API 物件中,將來源容器指定為 * (單一星號),或在 gcloud 指令中指定來源時,將來源容器指定為 https://AZURE_ACCOUNT_NAME.blob.core.windows.net/*。
多容器轉移作業不支援指定來源資料夾或 path。請參閱「篩選要轉移的容器和物件」,改用前置字串指定路徑。
執行移轉工作時,Storage 移轉服務 會先查詢 Azure,取得指定儲存體帳戶中所有容器的最新清單。然後,系統會為找到的每個容器在目的地建立對應資料夾,並將容器的資料轉移至該新資料夾。
gcloud
下列指令會建立移轉作業,將指定 Azure 儲存空間帳戶中的所有容器移至 Cloud Storage bucket。
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 儲存體帳戶的名稱。
- GCS_BUCKET_NAME:目的地 Cloud Storage bucket 的名稱。
- PATH_TO_AZURE_SAS_FILE:含有帳戶層級 Azure SAS 權杖的文字檔本機路徑。例如:
~/.azure/sas_token.txt。SAS 權杖必須在儲存空間帳戶層級建立,並為「允許的資源類型」選取「服務」、「容器」和「物件」。詳情請參閱「設定來源存取權:Microsoft Azure 儲存空間」。 - 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 儲存體帳戶的名稱。
- AZURE_SAS_TOKEN:完整的帳戶層級 SAS 權杖字串,例如
?sv=2020-08-04&ss=bfqt&srt=sco&...。SAS 權杖必須在儲存空間帳戶層級建立,並選取「允許的資源類型」的「服務」、「容器」和「物件」。詳情請參閱「設定來源存取權:Microsoft Azure 儲存空間」。 - GCS_BUCKET_NAME:目的地 Cloud Storage bucket 的名稱。
用戶端程式庫
本範例使用 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 儲存體帳戶的名稱。
- AZURE_SAS_TOKEN:完整的帳戶層級 SAS 權杖字串,例如
?sv=2020-08-04&ss=bfqt&srt=sco&...。SAS 權杖必須在儲存空間帳戶層級建立,並選取「允許的資源類型」的「服務」、「容器」和「物件」。詳情請參閱「設定來源存取權:Microsoft Azure 儲存空間」。 - GCS_BUCKET_NAME:目的地 Cloud Storage bucket 的名稱。
如要進一步瞭解如何建立轉移作業和可用選項,請參閱「建立轉移作業」。
篩選要轉移的容器和物件
您可以使用前置字串或資訊清單檔案,控管要將哪些容器和物件納入移轉作業。
按照前置字串篩選
如要轉移容器或容器內的特定路徑,請提供 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 Blob 儲存空間進行事件導向移轉」。
Azure API 配額
從多個容器轉移資料可能會增加對 Azure 提出的 API 要求數量。Azure 儲存體帳戶有要求速率限制,通常約為每秒 20,000 個要求。如果容器數量非常多,Storage 移轉服務可能會節流列出程序,以維持在這些限制內。