当前位置: 首页 > news >正文

使用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 事件通知, 以了解源存储桶中的对象何时被修改或添加。不会检测对象删除;删除源中的对象不会删除目标存储桶中的相关对象
                        http://www.dtcms.com/a/544369.html

                        相关文章:

                      1. 苏州外贸网站建设赣州网上银行登录
                      2. Blender动画笔记
                      3. python学习之正则表达式
                      4. SCRM平台对比推荐:以企业微信私域运营需求为核心的参考
                      5. 廊坊网站搭建别墅装修案例
                      6. select/poll/epoll
                      7. VTK开发笔记(八):示例Cone5,交互器的实现方式,在Qt窗口中详解复现对应的Demo
                      8. k8s——资源管理
                      9. 【QML】001、QML与Qt Quick简介
                      10. 从0到1学习Qt -- 信号和槽(一)
                      11. 怎么给网站添加站点统计线上推广怎么做
                      12. k8s网络通信
                      13. 【仿RabbitMQ的发布订阅式消息队列】--- 前置技术
                      14. 在 Vue3 项目中使用 el-tree
                      15. JVM 字节码剖析
                      16. 乌兰浩特建设网站WordPress 任务悬赏插件
                      17. Docker篇3-app.py放在docker中运行的逻辑
                      18. FlagOS 社区 Triton 增强版编译器 FlagTree v0.3发布,性能全面提升,适配 12+ 芯片生态!
                      19. 复杂环境下驾驶员注意力实时检测: 双目深度补偿 + 双向 LSTM
                      20. 强化 门户网站建设wordpress添加视频插件吗
                      21. 用于电容器的绝缘材料中,所选用的电介质的相对介电常数应较大。用于制造电缆的绝缘材料中,所选用的电介质的相对介电常数应较小。
                      22. 用Lua访问DuckDB数据库
                      23. 制作人在那个网站能看情侣wordpress模板
                      24. Linux网络的HTTPS
                      25. 改进 shell 搜索
                      26. Rust异步并发:业务落地的三个关键细节
                      27. TDengine 数据函数 TAN 用户手册
                      28. 【数据结构】顺序结构二叉树详解
                      29. 魔法自助建站网站建设需要准备什么软件
                      30. 酒吧网站设计大连网站建设ewaylife