本文档介绍了如何使用 Storage Transfer Service 将 Azure Blob Storage 或 Data Lake Storage Gen2 中的数据配置为事件驱动型转移到 Cloud Storage。事件驱动型转移会自动将新对象和更新后的对象从 Azure 容器转移到 Cloud Storage。 系统不会检测到对象删除操作;在来源中删除对象不会删除目标存储桶中的关联对象。
事件驱动型转移使用 Azure Event Grid 和 Azure Storage 队列来通知 Storage Transfer Service Azure 容器中的更改。当来源容器中发生新 Blob 创建等事件时,Azure Event Grid 会向配置的 Azure Storage 队列发送通知。Storage Transfer Service 会持续监控此队列,并根据收到的事件启动转移作业。
准备工作
按照说明授予目标 Cloud Storage 存储桶所需的权限:
创建 Azure Storage 队列
创建一个 Azure Storage 队列,用于接收来自 Azure Event Grid 的通知。
- 在 Azure 门户中,前往您的 Azure Storage 账号。
- 在左侧导航菜单的数据存储区下,选择队列。
- 点击 + 队列 以创建新队列。
- 为队列提供名称(例如
transfer-notifications),然后点击确定 。 - 创建完成后,检索 Azure 队列的地址。该地址通常采用以下格式:
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME。
为 Azure 队列启用 Azure Blob Storage 事件通知
将 Azure Event Grid 配置为向您创建的 Azure 队列发送 Blob Storage 事件的通知。
- 在 Azure 门户中,前往包含要监控的 Blob Storage 容器的存储账号。
- 在左侧导航菜单的 Blob 服务 下,选择 事件。
- 点击 + 事件订阅。
配置事件订阅:
- 事件订阅详情:
- 提供事件订阅名称 (例如
blob-transfer-events)。 - 提供系统主题名称 (例如
my-blob-events-topic)。
- 提供事件订阅名称 (例如
- 事件类型:
- 选择以下事件类型:
- 已创建 Blob
- 已创建目录
- 已重命名 Blob
- 已重命名目录
- Blob 层级已更改
- 选择以下事件类型:
- 端点详情:
- 端点类型:选择存储队列。
- 点击选择端点 ,然后选择您之前创建的 Azure 队列 。
过滤条件:
- 点击启用主题过滤 。
添加以下内容作为主题开头为 过滤条件,以将通知限制为特定容器:
/blobServices/default/containers/AZURE_CONTAINER_NAME/将 AZURE_CONTAINER_NAME 替换为 Blob Storage 容器的名称。
(可选)如需过滤容器中具有特定前缀的 Blob 的事件,请使用:
/blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX
- 事件订阅详情:
点击创建 。
设置对 Azure 队列的访问权限
Storage Transfer Service 需要有权访问 Azure 队列并读取其消息。您可以使用共享访问签名 (SAS) 令牌或联合身份进行身份验证。
SAS 令牌
按照使用 SAS 令牌进行身份验证的说明操作,并添加以下项:
- 允许的服务:Blob 和队列
- 允许的权限:读取、列出和处理
联合身份
按照使用联合身份进行身份验证的说明操作。除了授予应用对 Azure Storage 容器的访问权限之外,您还必须授予其对 Azure 队列的访问权限。为此,请为 Azure 队列的应用添加 Storage Queue Data Message Processor 角色。
使用事件流创建转移作业
配置 Azure 队列和事件通知后,使用事件流创建 Storage Transfer Service 作业。
创建后,转移作业将开始运行,且事件监听器会等待 Azure 队列上的通知。作业详情页面每小时显示一次操作,并包含每项作业转移的数据的详细信息。
Google Cloud 控制台
进入 Google Cloud 控制台中的创建转移作业 页面。
对于来源类型,选择 Azure Blob Storage 或 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 Storage 账号名称和容器名称。
- DESTINATION_BUCKET:您的目标 Cloud Storage 存储桶。
- 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。如果未指定,监听器会一直运行,直到转移作业被停用或删除为止。