Storage Transfer Service 可以侦听 AWS 中的事件通知,以自动将来源位置中添加或更新的数据转移到 Cloud Storage 存储桶中。 详细了解事件驱动型转移的优势 。
事件驱动型转移会侦听 Amazon S3 事件通知 发送到 Amazon SQS,以了解源存储桶中的对象何时已修改 或添加。系统不会检测到对象删除操作;在来源中删除对象不会删除目标存储桶中的关联对象。
事件驱动型转移始终使用 Cloud Storage 存储桶作为目标。
准备工作
按照说明授予对目标 Cloud Storage 存储桶的必要权限:
创建 SQS 队列
在 AWS 控制台中,转到 Simple Queue Service 页面。
点击创建队列 。
为此队列输入名称 。
在访问权限政策 部分中,选择高级 。此时会显示一个 JSON 对象。
标准 AWS 区域
{ "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 GovCloud 区域
{ "Version": "2008-10-17", "Id": "\_\_default\_policy\_ID", "Statement": [ { "Sid": "\_\_owner\_statement", "Effect": "Allow", "Principal": { "AWS": "01234567890" }, "Action": [ "SQS:*" ], "Resource": "arn:aws-us-gov:sqs:us-gov-west-1:01234567890:test" } ] }
复制
AWS和Resource的值。这些值对于每个项目都是唯一的。将上一步中的特定
AWS和Resource值粘贴到以下 JSON 代码段中:标准 AWS 区域
{ "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": "arn:aws:s3:::S3_BUCKET_NAME" } } } ] }
AWS GovCloud 区域
{ "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": "arn:aws-us-gov:s3:::S3_BUCKET_NAME" } } } ] }
将 S3_BUCKET_NAME 替换为 S3 来源存储桶的名称。
复制此已完成的 JSON 代码段,并使用它替换访问权限政策 部分中显示的 JSON。
点击创建队列 。
完成后,记下队列的 Amazon 资源名称 (ARN)。
在 S3 存储桶上启用通知
在 AWS 控制台中,转到 S3 页面。
在存储桶列表中,选择您的源存储桶。
选择属性标签页。
在事件通知 部分,点击创建事件通知 。
为此事件指定一个名称。
在事件类型 部分,选择所有对象创建事件 。
选择 SQS 队列 作为目标 ,然后选择为此转移作业创建的队列。
点击保存更改。
配置权限
按照 “配置对来源的访问权限:Amazon S3” 中的说明创建访问密钥 ID 和密钥或 Federated Identity 角色。
按照说明操作时,请在系统要求您指定 自定义角色或 自定义信任政策时使用以下 JSON:
标准 AWS 区域
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::S3_BUCKET_NAME", "arn:aws:s3:::S3_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
创建后,请记下以下信息:
- 对于用户,请记下访问密钥 ID 和密钥。
- 对于 Federated Identity 角色,请记下 Amazon 资源名称 (ARN),
其格式如下:
arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
AWS GovCloud 区域
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws-us-gov:s3:::S3_BUCKET_NAME", "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
创建后,请记下以下信息:
- 对于用户,请记下访问密钥 ID 和密钥。
- 对于 Federated Identity 角色,请记下 Amazon 资源名称 (ARN),
其格式如下:
arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
创建转移作业
您可以使用 REST API 或 Google Cloud 控制台创建基于事件的 转移作业。
Cloud 控制台
进入 Google Cloud 控制台中的创建转移作业 页面。
选择 Amazon S3 作为来源类型,并选择 Cloud Storage 作为目标。
选择事件驱动型作为时间安排模式,然后点击下一步。
输入您的 S3 存储桶名称。 存储分区名称是其在 AWS 管理控制台中显示的名称。 例如
my-aws-bucket。选择身份验证方法,然后输入您在上一部分中创建并记下的所需信息。
输入您之前创建的 Amazon SQS 队列 ARN。它采用以下格式之一:
- 对于标准 AWS 区域:
arn:aws:sqs:AWS_REGION:AWS_ACCOUNT:AWS_QUEUE_NAME - 对于 AWS GovCloud 区域:
arn:aws-us-gov:sqs:AWS_REGION:AWS_ACCOUNT:AWS_QUEUE_NAME
- 对于标准 AWS 区域:
(可选)定义任何过滤条件,然后点击下一步 。
选择目标 Cloud Storage 存储桶以及可选的路径。
(可选)输入转移的开始时间和结束时间。如果您未指定时间,转移作业将立即开始,并一直运行到手动停止为止。
指定任何转移选项。如需了解详情,请参阅 创建转移作业页面。
点击创建 。
创建后,转移作业将开始运行,且事件监听器会等待 SQS 队列上的通知。作业详情页面每小时显示一次操作,并包含每项作业转移的数据的详细信息。
REST
如需使用 REST API 创建事件驱动型转移作业,请将以下 JSON 对象发送到 transferJobs.create 端点:
{ "description": "DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec": { "awsS3DataSource": { "bucketName": "S3_BUCKET_NAME", "roleArn": "AWS_ROLE_ARN" }, "gcsDataSink": { "bucketName": "GCS_BUCKET_NAME" } }, "eventStream": { "name": "AWS_QUEUE_ARN", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
上述 JSON 中的占位符使用以下值:
- DESCRIPTION 是转移作业的说明。
- PROJECT_ID 是创建转移作业的 Google Cloud 云项目的 ID。
- S3_BUCKET_NAME 是 Amazon S3 来源存储桶的名称。
- AWS_ROLE_ARN 是您
创建的 Federated Identity 角色的 ARN。例如,对于标准 AWS 区域,为
arn:aws:iam::1234567891011:role/aws-role-name;对于 AWS GovCloud 区域,为arn:aws-us-gov:iam::1234567891011:role/aws-role-name。 - GCS_BUCKET_NAME 是 Cloud Storage 目标 存储桶的名称。
- AWS_QUEUE_ARN 是 SQS 队列的 ARN。例如,对于标准 AWS 区域,为
arn:aws:sqs:us-east-1:1234567891011:s3-notification-queue;对于 AWS GovCloud 区域,为arn:aws-us-gov:sqs:us-gov-east-1:1234567890:event-queue。
eventStreamStartTime 和 eventStreamExpirationTime 是可选的。如果省略了开始时间,则转移作业会立即开始;如果省略了结束时间,则转移作业会一直持续,直到手动停止为止。
客户端库
Go
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Go API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Java API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Node.js API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Python API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。