从 Azure Blob Storage 或 Data Lake Storage Gen2 进行的事件驱动型转移

本文档介绍了如何使用 Storage Transfer Service 将数据从 Azure Blob 存储或 Data Lake Storage Gen2 迁移到 Cloud Storage。事件驱动型转移会自动将 Azure 容器中的新对象和更新的对象转移到 Cloud Storage。 系统不会检测到对象删除操作;在源存储分区中删除对象不会删除目标存储分区中的关联对象。

事件驱动型转移使用 Azure Event Grid 和 Azure Storage 队列来通知 Storage Transfer Service Azure 容器中的更改。当源容器中发生新 Blob 创建等事件时,Azure Event Grid 会向配置的 Azure 存储队列发送通知。Storage Transfer Service 会持续监控此队列,并根据收到的事件启动转移。

准备工作

按照说明向目标 Cloud Storage 存储分区授予所需权限:

创建 Azure 存储队列

创建一个 Azure Storage 队列,用于接收来自 Azure Event Grid 的通知。

  1. 在 Azure 门户中,前往您的 Azure 存储账号。
  2. 在左侧导航菜单的数据存储下,选择队列
  3. 点击 + 队列以创建新队列。
  4. 为队列提供名称(例如,transfer-notifications),然后点击确定
  5. 创建完成后,检索 Azure 队列的地址。该地址通常采用以下格式:AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME

为 Azure 队列启用 Azure Blob Storage 事件通知

配置 Azure Event Grid,以将 Blob 存储事件的通知发送到您创建的 Azure 队列。

  1. 在 Azure 门户中,导航到包含要监控的 Blob 存储容器的存储账号。
  2. 在左侧导航菜单的 Blob 服务下,选择事件
  3. 点击 + 事件订阅
  4. 配置事件订阅:

    • 活动订阅详细信息
      • 提供事件订阅名称(例如,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

  5. 点击创建

设置对 Azure 队列的访问权限

Storage Transfer Service 需要有权访问 Azure 队列并读取其中的消息。您可以使用共享访问签名 (SAS) 令牌或联合身份进行身份验证。

SAS 令牌

按照使用 SAS 令牌进行身份验证的说明操作,并添加以下项:

  • 允许的服务:Blob 和队列
  • 允许的权限:读取、列出和处理

联合身份

按照说明使用联合身份进行身份验证。除了授予应用对 Azure Storage 容器的访问权限之外,您还必须授予其对 Azure 队列的访问权限。为此,请为 Azure 队列向应用添加 Storage Queue Data Message Processor 角色。

创建包含事件流的转移作业

配置 Azure 队列和事件通知后,创建包含事件流的存储空间传输服务作业。

创建后,转移作业将开始运行,且事件监听器会等待 Azure 队列上的通知。作业详情页面每小时显示一次操作,并包含每项作业转移的数据的详细信息。

Google Cloud 控制台

  1. 前往 Google Cloud 控制台中的创建转移作业页面。

    前往创建转移作业

  2. 对于来源类型,选择 Azure Blob Storage 或 Data Lake Storage Gen2

  3. 目标类型中,选择 Google Cloud Storage

  4. 对于时间安排模式,请选择事件驱动型

  5. 事件流名称字段中,输入 Azure 队列的地址。

  6. 像创建转移作业一样,正常完成剩余步骤,包括源和目标位置详细信息以及身份验证。

    (可选)输入转移的开始时间和结束时间。如果您未指定时间,转移作业会立即开始,并一直运行到手动停止为止。

Google Cloud CLI

如需使用 gcloud CLI 创建事件驱动型转移作业,请使用带有 --event-stream-name 标志的 gcloud transfer jobs create 命令:

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_NAMEAZURE_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。如果未指定,监听器将继续运行,直到转移作业被停用或删除。