Storage Transfer Service 可以侦听 AWS 或 Google Cloud 中的事件通知,以自动转移在来源位置添加或更新的数据。支持从 AWS S3 或 Cloud Storage 到 Cloud Storage 的事件驱动型转移。
事件驱动的转移会侦听发送到 Amazon SQS for AWS S3 来源的 Amazon S3 事件通知。Cloud Storage 来源向 Pub/Sub 订阅发送通知。
事件驱动型转移的优势
由于事件驱动的转移作业会侦听源存储桶的变化,因此更新会近乎实时地复制到目标位置。Storage Transfer Service 不需要对来源执行列出操作,从而节省时间和金钱。
用例包括:
事件驱动型分析:将数据从 AWS 复制到 Cloud Storage 以执行分析和处理。
Cloud Storage 复制:在 Cloud Storage 存储桶之间启用自动异步对象复制。
使用 Storage Transfer Service 的事件驱动型转移与 Cloud Storage 的增强型复制和默认复制不同,它会在其他存储桶中创建数据的副本。
这具有以下优势:
- 将开发和生产数据保存在单独的命名空间中。
- 共享数据但不提供对原始存储桶的访问权限。
- 备份到其他大洲或双区域和多区域存储未涵盖的区域。
DR/HA 设置:在数分钟内将对象从来源复制到备份目标位置:
- 跨云备份:在 Cloud Storage 上创建 AWS S3 备份的副本。
- 跨区域或跨项目备份:在其他区域或项目中创建 Cloud Storage 存储桶的副本。
实时迁移:事件驱动型转移可以支持停机时间较短(停机时间为数分钟)的迁移,作为一次性批量迁移的后续步骤。
设置从 Cloud Storage 进行的事件驱动型转移
配置权限
找到项目的 Storage Transfer Service 服务代理的名称:
前往
googleServiceAccounts.get
参考页面。系统会打开标题为试用此方法的交互式面板。
在该面板的请求参数下,输入您的项目 ID。您在此处指定的项目必须是您用于管理 Storage Transfer Service 的项目,该项目可能与来源存储桶的项目不同。
点击执行。
服务代理的电子邮件地址会作为
accountEmail
的值返回。复制此值。服务代理的电子邮件地址采用
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
格式。将
Pub/Sub Subscriber
角色授予 Storage Transfer Service 服务代理。Cloud 控制台
按照通过 Google Cloud 控制台控制访问权限中的说明,向 Storage Transfer Service 服务授予
Pub/Sub Subscriber
角色。可以在主题、订阅或项目级层授予该角色。gcloud
CLI按照设置政策中的说明添加以下绑定:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com" }
配置 Pub/Sub
请确保您已满足将 Pub/Sub 与 Cloud Storage 搭配使用的前提条件。
配置适用于 Cloud Storage 的 Pub/Sub 通知:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME
为该主题创建拉取订阅:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME --ack-deadline=300
创建转移作业
您可以使用 REST API 或 Cloud 控制台创建基于事件的转移作业。
Cloud 控制台
转到 Google Cloud 控制台中的创建转移作业页面。
选择 Cloud Storage 作为来源和目的地。
选择存储桶及其中的文件夹(可选),以用作来源和目标。
在转移作业执行模式屏幕中,选择事件驱动。
使用以下格式输入订阅名称:
projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
(可选)输入转移作业的开始时间和结束时间。如果未指定时间,转移作业将立即开始运行,直到手动停止为止。
指定任何转移选项。如需了解详情,请参阅创建转移作业页面。 无法将事件驱动的转移作业配置为从来源删除文件。
点击创建。
创建后,转移作业将开始运行,且事件监听器会等待 Pub/Sub 订阅上的通知。作业详情页面每小时显示一次操作,并包含每项作业转移的数据的详细信息。
REST
如需使用 REST API 创建事件驱动型转移作业,请将以下 JSON 对象发送到 transferJobs.create 端点:
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "gcsDataSource" { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
eventStreamStartTime
和 eventStreamExpirationTime
是可选的。如果省略开始时间,转移作业会立即启动;如果省略结束时间,转移作业将继续运行,直到手动停止。
设置来自 AWS S3 的事件驱动型转移作业
创建 SQS 队列
来自 AWS S3 的事件驱动型转移使用来自 Amazon Simple Queue Service (SQS) 的通知来了解源存储桶中的对象何时已修改或添加。
在 AWS 控制台中,转到 Simple Queue Service 页面。
点击创建队列。
输入此队列的名称。
在访问权限政策部分中,选择高级。此时会显示一个 JSON 对象:
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Allow", "Principal": { "AWS": "01234567890" }, "Action": [ "SQS:*" ], "Resource": "arn:aws:sqs:us-west-2:01234567890:test" } ] }
AWS
和Resource
的值对于每个项目都是唯一的。将您的特定
AWS
和Resource
值从显示的 JSON 复制到以下 JSON 代码段:{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "RESOURCE", "Condition": { "StringEquals": { "aws:SourceAccount": "AWS" }, "ArnLike": { "aws:SourceArn": "S3_BUCKET_ARN" } } } ] }
上述 JSON 中的占位符值采用以下格式:
- AWS 是表示 Amazon Web Services 项目的数值。例如
"aws:SourceAccount": "1234567890"
。 - RESOURCE 是标识此队列的 Amazon Resource Number (ARN)。例如
"Resource": "arn:aws:sqs:us-west-2:01234567890:test"
。 - S3_BUCKET_ARN 是标识源存储桶的 ARN。例如
"aws:SourceArn": "arn:aws:s3:::example-aws-bucket"
。您可以从 AWS 控制台的存储桶详情页面的属性标签页中找到存储桶的 ARN。
- AWS 是表示 Amazon Web Services 项目的数值。例如
将访问权限政策部分中显示的 JSON 替换为上面更新后的 JSON。
点击创建队列。
完成后,记下队列的 Amazon 资源名称 (ARN)。ARN 的格式如下:
arn:aws:sqs:us-east-1:1234567890:event-queue"
在 S3 存储桶上启用通知
在 AWS 控制台中,转到 S3 页面。
在存储桶列表中,选择您的源存储桶。
选择属性标签页。
在事件通知部分,点击创建事件通知。
指定此事件的名称。
在事件类型部分中,选择所有对象创建事件。
在目标位置部分,选择 SQS 队列,然后选择您为此转移作业创建的队列。
点击保存更改。
配置权限
按照“配置对来源的访问权限:Amazon S3”中的说明创建访问密钥 ID 和密钥或 Federated Identity 角色。
将自定义权限 JSON 替换为以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME", "arn:aws:s3:::AWS_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
创建后,请记下以下信息:
- 对于用户,请记下访问密钥 ID 和密钥。
- 对于 Federated Identity 角色,请记下 Amazon 资源名称 (ARN),其格式为
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
。
创建转移作业
您可以使用 REST API 或 Cloud 控制台创建基于事件的转移作业。
Cloud 控制台
转到 Google Cloud 控制台中的创建转移作业页面。
选择 Amazon S3 作为来源类型,选择 Cloud Storage 作为目标。
输入您的 S3 存储桶名称。
选择您的身份验证方法,然后输入您在上一部分中创建并记下的请求信息。
选择目标 Cloud Storage 存储桶以及可选的路径。
在转移作业执行模式屏幕中,选择事件驱动。
输入 Amazon SQS 队列 ARN。
(可选)输入转移作业的开始时间和结束时间。如果未指定时间,转移作业将立即开始运行,并一直运行,直到手动停止。
指定任何转移选项。如需了解详情,请参阅创建转移作业页面。 无法将事件驱动的转移作业配置为从来源删除文件。
点击创建。
创建后,转移作业将开始运行,且事件监听器会等待 SQS 队列中的通知。作业详情页面每小时显示一次操作,并包含每项作业转移的数据的详细信息。
REST
如需使用 REST API 创建事件驱动型转移作业,请将以下 JSON 对象发送到 transferJobs.create 端点:
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "awsS3DataSource" { "bucketName": "AWS_SOURCE_NAME", "roleArn": "arn:aws:iam::1234567891011:role/role_for_federated_auth" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "arn:aws:sqs:us-east-1:1234567891011:s3-notification-queue", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
eventStreamStartTime
和 eventStreamExpirationTime
是可选的。如果省略开始时间,转移作业会立即启动;如果省略结束时间,转移作业将继续运行,直到手动停止。