[SEO 副标题]
本指南演示如何在 AWS 环境中安全传输 Amazon Simple Storage Service(Amazon S3)对象和 Amazon Elastic Container Registry(Amazon ECR)映像。通过直观的用户界面,您可以轻松创建和管理 AWS 分区(aws、aws-cn、aws-us-gov)之间以及从其他云提供商到 AWS 的各种类型的传输任务。本指南提供可扩展且可跟踪的数据传输,简化了在环境之间移动 Amazon S3 对象和 Amazon ECR 映像的过程。
请注意:如果您在由北京光环新网科技股份有限公司运营的 AWS(北京)区域或者宁夏西云数据科技有限公司运营的 AWS(宁夏)区域部署此解决方案,则需要提供具有 ICP Recordal 的域,才能访问 Web 控制台。
Web 控制台是创建和管理所有数据传输作业的核心位置。每种数据类型(例如,Amazon S3 或 Amazon ECR)都是数据传输解决方案的插件,并封装为 AWS CloudFormation 模板,托管在 AWS 拥有的 Amazon S3 存储桶中。当您创建传输任务时,AWS Lambda 函数会启动 AWS CloudFormation 模板,并且每个任务的状态都会存储并显示在 DynamoDB 表中。
截至目前,该解决方案支持两个数据传输插件:Amazon S3 插件和 Amazon ECR 插件。
架构图

-
概览
-
Amazon ECR 传输选项
-
Amazon S3 传输选项
-
概览
-
此架构图说明了如何保护、扩展和跟踪 Amazon S3 对象和 Amazon ECR 映像的数据传输。
第 1 步
Amazon Simple Storage Service(Amazon S3)存储静态 Web 资产(例如,前端 UI),这些资产可通过 Amazon CloudFront 获得。第 2 步
AWS AppSync GraphQL 提供后端 API。第 3 步
用户通过 Amazon Cognito 用户池(在 AWS 标准区域)或 OpenID Connect 提供商(在 AWS 中国区域)进行身份验证,例如 Authing 或 Auth0。第 4 步
AWS AppSync 运行 AWS Lambda 来调用后端 API。第 5 步
Lambda 启动 AWS Step Functions 工作流程,该工作流程使用 AWS CloudFormation 来启动、停止或删除 Amazon Elastic Container Registry(Amazon ECR)或 Amazon S3 插件模板。第 6 步
由 AWS 托管的集中式 S3 存储桶将托管插件模板。
第 7 步
该解决方案还预置了一个 Amazon Elastic Container Service(Amazon ECS)集群,该集群运行插件模板使用的容器映像,并且容器映像托管在 Amazon ECR 中。第 8 步
Amazon DynamoDB 存储数据传输任务信息。 -
Amazon ECR 传输选项
-
此架构图说明了如何运行 Amazon ECR 插件以传输来自其他容器注册表的容器映像。
第 1 步
Amazon EventBridge 规则会定期运行 Step Functions 工作流程(默认情况下每天运行一次)。第 2 步
Step Functions 调用 Lambda 以从源中检索映像列表。
第 3 步
Lambda 将列出源 Amazon ECR 中的所有存储库内容,或者从 AWS System Manager 的功能 Parameter Store 获取存储的映像列表。第 4 步
传输任务将在 AWS Fargate 中运行,最大并发数为 10。如果传输任务因某种原因失败,将自动重试三次。第 5 步
每项任务都会使用 skopeo 将映像复制到目标 Amazon ECR 注册表中。第 6 步
复制完成后,状态(成功或失败)将被记录到 DynamoDB 中以便进行跟踪。 -
Amazon S3 传输选项
-
此架构图说明了如何运行 Amazon S3 插件,以将对象从其源传输到 S3 存储桶中。
第 1 步
基于时间的 EventBridge 规则每小时启动一次 Lambda 函数。
第 2 步
Lambda 使用启动模板在 Amazon Elastic Compute Cloud(Amazon EC2)中启动数据比较作业(JobFinder)。第 3 步
该作业会列出源和目标 S3 存储桶中的所有对象,并在对象之间进行比较以确定应传输哪些对象。第 4 步
Amazon EC2 会针对每个要传输的对象向 Amazon Simple Queue Service(Amazon SQS)发送一条消息。还可以支持 Amazon S3 事件消息,以实现更实时的数据传输。每当将对象上传到源存储桶时,事件消息都会发送到同一 Amazon SQS 队列。第 5 步
在 Amazon EC2 中运行的 JobWorker 节点会使用 Amazon SQS 中的消息,并将对象从源存储桶传输到目标存储桶。您可以使用自动扩缩组来控制要根据业务需求传输数据的 EC2 实例的数量。
第 6 步
DynamoDB 会存储一条包含每个对象传输状态的记录。
第 7 步
EC2 实例将根据 Amazon SQS 消息从源存储桶获取(下载)对象。
第 8 步
EC2 实例将根据 Amazon SQS 消息将对象放置(上传)到目标存储桶。
第 9 步
当 JobWorker 节点首次识别大文件(默认阈值为 1GB)时,将启动在 Amazon EC2 中运行的分段上传任务。然后会将相应的 UploadId 传送到 Step Functions,后者将调用计划的定期任务。Step Functions 每分钟都会验证与 UploadId 相关的分布式分片是否在整个集群中成功传输
第 10 步
如果所有分片均已成功传输,Amazon EC2 会在 Amazon S3 中调用 CompleteMultipartUpload API 以完成分片的整合。否则,任何无效的分片都将被丢弃。
Well-Architected 支柱

当您在云中构建系统时,AWS Well-Architected Framework 可以帮助您了解所做决策的利弊。框架的六大支柱使您能够学习设计和操作可靠、安全、高效、经济高效且可持续的系统的架构最佳实践。使用 AWS 管理控制台中免费提供的 AWS Well-Architected Tool,您可以通过回答每个支柱的一组问题,根据这些最佳实践来检查您的工作负载。
上面的架构图是按照 Well-Architected 最佳实践创建的解决方案示例。要做到完全的良好架构,您应该遵循尽可能多的 Well-Architected 最佳实践。
-
卓越运营
Step Functions 提供可靠、可扩展且容错的工作流程管理系统,有助于确保可靠地执行数据传输任务。Amazon ECS 和 Amazon ECR 简化了容器化组件的部署和管理,从而提高了运营效率。这些服务支持 DevOps 最佳实践,促进持续改进和自动化的文化,同时减少管理基础设施和数据传输工作流程所需的运营开销和手动工作。
-
安全性
Amazon Cognito 和 OpenID Connect 提供商帮助确保只有获得授权的用户才能访问和管理数据传输任务。AWS AppSync 提供了一个安全的 GraphQL 接口,用于与后端 API 进行交互,防止未经授权的访问。DynamoDB 为数据传输任务详细信息提供安全存储,并提供静态加密选项。这些服务提供全面的端到端安全工作流程,用于管理 AWS 分区和外部云提供商之间的数据传输,保护敏感数据免遭未经授权的访问或篡改。
-
可靠性
Amazon ECS 和 Amazon ECR 为运行和管理基于容器的组件提供了一种高度可用且可扩展的方式。Amazon Simple Notification Service(Amazon SNS)提供可靠的通知机制。这些服务确保您可以利用 Amazon ECS 和 Amazon ECR 等容器化服务的可扩展性和高可用性,可靠且一致地预置和管理数据传输所需的基础设施。
-
性能效率
Lambda 提供无服务器、可扩展且高性能的计算服务来运行后端组件。DynamoDB 提供快速且可扩展的 NoSQL 数据库,用于存储数据传输任务信息,并提供低延迟访问。CloudFront 通过缓存和提供来自全球边缘站点网络的静态资产,提高了 Web 界面的性能和响应能力。这些服务利用无服务器和托管 AWS 服务固有的性能和可扩展性优势,降低了运营开销,同时确保本指南能够在不影响性能的情况下处理不断增加的工作负载。
-
成本优化
Lambda 和无服务器架构允许按需、即用即付计算资源,从而无需始终可用的服务器基础设施。DynamoDB 提供按请求付费的 NoSQL 数据库服务,这意味着您只需为所消耗的资源付费,而不会产生预置和维护数据库的费用。Amazon SNS 和 Amazon SQS 提供经济高效的无服务器通知,而 Fargate 上的 Amazon ECS 则能够为容器提供按需基础设施。这种无服务器方法有助于降低与管理和扩展基础设施相关的运营成本和开销。
-
可持续性
与持续运行的本地服务器相比,使用 Lambda、Amazon SQS 和 DynamoDB 的无服务器设计旨在减少碳足迹。Step Functions、Amazon SNS 和 Amazon SQS 支持无服务器通知,而 Fargate 上的 Amazon ECS 则为容器提供按需基础设施。这些无服务器和云原生服务使您能够高效地扩展基础设施,减少所需的资源和相关的碳足迹(与本地服务器相比),并优化资源利用率。
免责声明
示例代码;软件库;命令行工具;概念验证;模板;或其他相关技术(包括由我方人员提供的任何前述项)作为 AWS 内容按照《AWS 客户协议》或您与 AWS 之间的相关书面协议(以适用者为准)向您提供。您不应将这些 AWS 内容用在您的生产账户中,或用于生产或其他关键数据。您负责根据特定质量控制规程和标准测试、保护和优化 AWS 内容,例如示例代码,以使其适合生产级应用。部署 AWS 内容可能会因创建或使用 AWS 可收费资源(例如,运行 Amazon EC2 实例或使用 Amazon S3 存储)而产生 AWS 费用。
本指南中提及第三方服务或组织并不意味着 Amazon 或 AWS 与第三方之间存在认可、赞助或从属关系。AWS 的指南是一个技术起点,您可以在部署架构时自定义与第三方服务的集成。