本文說明如何使用 Storage Transfer Service,設定從 Azure Blob 儲存體或 Data Lake Storage Gen2 到 Cloud Storage 的事件驅動資料移轉作業。事件驅動型轉移作業會自動將 Azure 容器中的新物件和更新物件轉移至 Cloud Storage。系統不會偵測物件刪除作業;刪除來源中的物件不會一併刪除目標值區中的相關聯物件。
事件驅動型移轉會使用 Azure 事件方格和 Azure 儲存體佇列,將 Azure 容器的變更通知 Storage 移轉服務。當來源容器中發生新 Blob 建立等事件時,Azure 事件方格會將通知傳送至已設定的 Azure 儲存體佇列。Storage 移轉服務會持續監控這個佇列,並根據收到的事件啟動轉移作業。
事前準備
按照操作說明,在目的地 Cloud Storage 值區中授予必要權限:
建立 Azure 儲存體佇列
建立 Azure 儲存空間佇列,接收來自 Azure 事件方格的通知。
- 在 Azure 入口網站中,前往您的 Azure 儲存體帳戶。
- 在左側導覽選單中,選取「資料儲存」下方的「佇列」。
- 按一下「+ 佇列」即可建立新佇列。
- 為佇列命名 (例如
transfer-notifications),然後按一下「確定」。 - 建立完成後,請擷取 Azure 佇列的位址。地址通常會採用以下格式:
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME。
為 Azure 佇列啟用 Azure Blob 儲存體事件通知
設定 Azure 事件方格,將 Blob 儲存空間事件的通知傳送至您建立的 Azure 佇列。
- 在 Azure 入口網站中,前往包含要監控的 Blob 儲存體容器的儲存體帳戶。
- 在左側導覽選單中,選取「Blob 服務」下方的「事件」。
- 按一下「+ Event Subscription」(+ 事件訂閱)。
設定事件訂閱項目:
- 事件訂閱詳細資料:
- 提供「事件訂閱項目名稱」 (例如
blob-transfer-events)。 - 提供「系統主題名稱」 (例如
my-blob-events-topic)。
- 提供「事件訂閱項目名稱」 (例如
- 事件類型:
- 選取下列事件類型:
- Blob 建立時間
- 已建立目錄
- Blob 已重新命名
- 已重新命名目錄
- Blob 層級已變更
- 選取下列事件類型:
- 端點詳細資料:
- 端點類型:選取「儲存空間佇列」。
- 按一下「選取端點」,然後選取先前建立的 Azure 佇列。
「Filters」:
- 按一下「啟用主旨篩選功能」。
新增以下內容做為「主旨開頭為」篩選器,將通知限制為特定容器:
/blobServices/default/containers/AZURE_CONTAINER_NAME/將 AZURE_CONTAINER_NAME 替換為 Blob 儲存空間容器名稱。
(選用) 如要篩選容器中具有特定前置字元的 Blob 事件,請使用:
/blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX
- 事件訂閱詳細資料:
點選「建立」。
設定 Azure 佇列的存取權
Storage 移轉服務需要存取 Azure 佇列並讀取訊息的權限。您可以使用共用存取簽章 (SAS) 權杖或同盟身分驗證。
SAS 權杖
請按照使用 SAS 權杖進行驗證的操作說明,並加入下列項目:
- 允許的服務:Blob 和佇列
- 允許的權限:讀取、列出及處理
聯合身分識別
請按照操作說明使用聯合身分驗證。除了授予應用程式 Azure 儲存體容器的存取權,您也必須授予應用程式 Azure 佇列的存取權。如要這麼做,請將「儲存體佇列資料訊息處理器」角色新增至 Azure 佇列的應用程式。
建立含有事件串流的移轉工作
設定 Azure 佇列和事件通知後,請使用事件串流建立 Storage Transfer Service 工作。
建立完成後,轉移工作就會開始執行,事件監聽器則會等待 Azure 佇列的通知。工作詳細資料頁面每小時會顯示一項作業,並包含每項工作傳輸的資料詳細資料。
Google Cloud 控制台
前往 Google Cloud 控制台的「建立移轉工作」頁面。
在「來源類型」部分,選取「Azure Blob 儲存體或 Data Lake Storage Gen2」。
在「目的地類型」部分,選取「Google Cloud Storage」。
在「排程模式」中,選取「事件觸發」。
在「事件串流名稱」欄位中,輸入 Azure 佇列的位址。
如常完成建立轉移工作的其餘步驟,包括來源和目的地詳細資料,以及驗證。
視需要輸入轉移的開始和結束時間。如果未指定時間,系統會立即開始轉移,並持續執行直到手動停止。
Google Cloud CLI
如要使用 gcloud CLI 建立事件驅動的傳輸作業,請使用 gcloud transfer jobs create 指令搭配 --event-stream-name 旗標:
gcloud transfer jobs create \
https://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/AZURE_CONTAINER_NAME \
gs://DESTINATION_BUCKET \
--source-creds-file=SOURCE_CREDS_FILE \
--event-stream-name=AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME \
--event-stream-starts=EVENT_STREAM_STARTS \
--event-stream-expires=EVENT_STREAM_EXPIRES
將預留位置替換為實際值:
- AZURE_STORAGE_ACCOUNT_NAME 和 AZURE_CONTAINER_NAME: 您的 Azure Blob 儲存體帳戶名稱和容器名稱。
- DESTINATION_BUCKET:目的地 Cloud Storage bucket。
- SOURCE_CREDS_FILE:本機檔案的相對路徑,其中包含 SAS 權杖或聯邦身分識別設定。
- AZURE_QUEUE_NAME:Azure 佇列的名稱。
- EVENT_STREAM_STARTS:開始監聽事件的時間,格式為 %Y-%m-%dT%H:%M:%S%z 日期時間 (例如
2020-04-12T06:42:12+04:00)。如未設定,工作會在成功提交建立工作指令後開始執行,並監聽事件。 - EVENT_STREAM_EXPIRES:何時停止監聽事件。如果未設定,工作會持續執行,直到手動停止為止。
如需支援的完整欄位清單,請參閱gcloud transfer jobs create參考資料。
REST API
使用 TransferJob Proto 定義事件驅動的轉移工作:
{
"description": "Test Azure to GCS transfer via event stream.",
"project_id": "PROJECT_ID",
"transfer_spec": {
"azure_blob_storage_data_source": {
"storage_account": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"federated_identity_config": {
"client_id": "CLIENT_ID",
"tenant_id": "TENANT_ID"
}
},
"gcs_data_sink": {
"bucket_name": "DESTINATION_BUCKET"
},
"object_conditions": {
// optional object conditions (include_prefixes, etc)
},
"transfer_options": {}
},
"event_stream": {
"name": "AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME",
"event_stream_start_time": EVENT_STREAM_START_TIME,
"event_stream_expiration_time": EVENT_STREAM_EXPIRATION_TIME
},
"status": "ENABLED"
}
開始和到期時間欄位為選填:
event_stream_start_time:開始監聽事件的時間,格式為YYYY-MM-DDTHH:MM:SSZ。如未指定,監聽器會立即啟動。event_stream_expiration_time:事件串流監聽器到期時間,格式為YYYY-MM-DDTHH:MM:SSZ。如未指定,接聽程式會持續運作,直到轉移工作停用或刪除為止。