使用Storage Transfer Service 事件驱动型 — 将AWS S3迁移到 GCP Cloud Storage

前情提要

Storage Transfer Service能帮助我们做什么

  • 简化从不同数据源到 Google Cloud Storage 的数据迁移。
  • 自动化和可配置的数据传输。
  • 安全可靠的数据传输。

主要步骤

  • 在 AWS Identity and Access Management (IAM) 中创建访问密钥
  • 在 GCP 创建服务账号和服务账号密钥
  • 在 AWS 创建 SQS 服务
  • 配置转移作业的相关配置
  • 启动并监控 Storage Transfer Service 传输作业

事前检查

  • Storage Transfer Service 配置核对
  • 成本估算和预算评估。

环境准备

一、创建访问密钥

1.进入aws控制台页面,点击右上角设置,选择"安全凭证"

2.点击"创建访问密钥"

3.选择使用案例

4.点击"创建访问密钥"

5.下载密钥CSV文件

二、创建gcp 服务账号并创建密钥

1.进入GCP IAM控制台界面,点击"服务账号"

2.点击创建服务账号

3.输入服务账号名称、服务账号描述,点击"创建并继续"

4.为服务账号附加 "Storage Transfer Admin" 角色,然后点击"继续" 再点击"完成"

5.创建服务账号密钥,进入到服务账号权限,点击"密钥"、"添加键"、"创建新密钥",将密钥文件下载到电脑。

三、创建 AWS SQS

1.进入AWS SQS 控制台,点击创建队列

2.修改访问策略,点击"高级"

将以下json 复制粘贴到策略

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| { "Version": "2012-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "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。

3.点击创建队列。

四、在S3 存储桶上启用通知。

1.在 AWS 控制台中,转到 S3 页面。选择您的源存储桶,选择属性标签页。

2.在事件通知部分,点击创建事件通知。

3.为此事件指定名称。

4.在事件类型部分中,选择所有对象创建事件。

5.选择 SQS 队列作为目标,然后选择您为此转移创建的队列,保存更改。

五、使用python配置Storage Transfer Service 传输作业,并开始作业传输。

1.安装所需要的包:google-cloud-storage-transfer、google-auth

|-------------------------------------------------------------------|
| pip install google-cloud-storage-transfer pip install google-auth |

2.使用以下代码

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| from google.cloud import storage_transfer from google.oauth2 import service_account def create_event_driven_aws_transfer( ): """Create an event driven transfer between two GCS buckets that tracks an AWS SQS queue""" credentials = service_account.Credentials.from_service_account_file("YOUR_SERVICE_ACCOUNT_FILE") client = storage_transfer.StorageTransferServiceClient(credentials=credentials) # The ID of the Google Cloud Platform Project that owns the job project_id = 'PROJECT_ID' # A description of this job description = 'DESCRIPTION' # AWS S3 source bucket name source_s3_bucket = 'S3_BUCKET_NAME' # Google Cloud Storage destination bucket name sink_gcs_bucket = 'GCP_BUCKET_NAME' # The ARN of the SQS queue to subscribe to pubsub_id = 'SQS_ARN' # AWS Access Key ID. Should be accessed via environment variable for security purposes. aws_access_key_id = 'ACCESS_KEY_ID' # AWS Secret Access Key. Should be accessed via environment variable for security purposes. aws_secret_access_key = 'SECRET_ACCESS_KEY' transfer_job_request = storage_transfer.CreateTransferJobRequest( { "transfer_job": { "project_id": project_id, "description": description, "status": storage_transfer.TransferJob.Status.ENABLED, "transfer_spec": { "aws_s3_data_source": { "bucket_name": source_s3_bucket, "aws_access_key": { "access_key_id": aws_access_key_id, "secret_access_key": aws_secret_access_key, }, }, "gcs_data_sink": { "bucket_name": sink_gcs_bucket, }, }, "event_stream": { "name": pubsub_id, }, }, }, ) result = client.create_transfer_job(transfer_job_request) print(f"Created transferJob: {result.name}") create_event_driven_aws_transfer() |

运行代码后,显示Created transferJob 表示作业成功创建

注意事项

  1. Glacier 对象在传输的之前需要将对象先还原后再进行传输
  2. 事件驱动传输会监听 发送到Amazon SQS 的 Amazon S3 事件通知, 以了解源存储桶中的对象何时被修改或添加。不会检测对象删除;删除源中的对象不会删除目标存储桶中的相关对象。
相关推荐
※※冰馨※※44 分钟前
【C++】通过 Git 访问阿里云 Codeup 仓库
git·阿里云·云计算
摇滚侠1 小时前
JAVA 项目教程《苍穹外卖-番外篇-阿里云对象存储》,微信小程序项目,前后端分离,从开发到部署
阿里云·云计算
小仓桑16 小时前
【Agent智能体项目实战一】阿里云通义千问兼容 OpenAI 接口实现 AI 对话
人工智能·阿里云·云计算·agent
AI周红伟17 小时前
周红伟:豆包大模型的尽头是直播间,豆包开启AI购物内测 电商平台加码“一句话购物”
人工智能·阿里云·云计算·腾讯云·openclaw
威联通安全存储18 小时前
某大型食品饮料企业:基于威联通 TS-h1290FX 的中央数据管控与合规实践
大数据·人工智能·云计算
大树8818 小时前
国产液冷产业链的突破:应对龙虾大模型等终端算力需求激增的倒逼效应
科技·ai·云计算
亚林瓜子19 小时前
linux账号强制密码过期导致私钥文件登录异常问题——(current) UNIX password:
linux·运维·服务器·ssh·aws·ec2·chage
未来之窗软件服务21 小时前
阿里云 page-agent 核心逻辑梳理[AI人工智能(六十一)]—东方仙盟
人工智能·阿里云·云计算·仙盟创梦ide·东方仙盟
武汉唯众智创21 小时前
云计算大数据实训平台:从私有云到容器化的教学实现|原理+实操+踩坑+性能全解析
大数据·人工智能·云计算·云计算实训室·大数据实训室·职校云计算大数据实训室建设·职校实训室建设
不吃香菜kkk、1 天前
夜莺n9e+监控K8s集群+自定义监控页面
运维·云原生·云计算