架构图
下图展示的是使用默认参数部署本解决方案在亚马逊云科技中构建的环境。
解决方案架构图
本解决方案在您的亚马逊云科技账户中部署AWS CloudFormation模板并完成以下设置。
- 静态Web资源(前端用户界面)存储在Amazon S3中,并通过Amazon CloudFront提供静态资源的分发。
- 通过AWS AppSync GraphQL提供后端API。
- 如果部署在全球区域,用户通过Amazon Cognito用户池进行身份验证;如果部署在中国区域,用户通过OpenID Connect供应商进行身份验证,例如Authing、Auth0等。
- AWS AppSync通过运行AWS Lambda来调用后端API。
- AWS Lambda启动AWS Step Functions工作流,该工作流使用AWS CloudFormation启动或停止/删除ECR或S3插件模板。
- 插件模板集中托管于Amazon S3存储桶中。
- 预置的一个Amazon ECS集群运行插件模板使用的容器镜像,并且容器镜像托管在Amazon ECR中。
- 数据传输任务的信息存储在Amazon DynamoDB中。
您可以在完成解决方案的部署后,使用AWS WAF对CloudFront或AppSync进行保护。
注意
如果您在由光环新网运营的亚马逊云科技中国(北京)区域或由西云数据运营的亚马逊云科技中国(宁夏)区域部署本解决方案,您需要预先准备具有ICP记录的域,然后才能访问网页控制台。
网页控制台用于集中创建和管理所有数据传输任务。每种数据类型(例如,Amazon S3或Amazon ECR)都是插件,并打包为AWS CloudFormation模板,托管在Amazon S3存储桶中。当您创建传输任务时,AWS Lambda函数会启动AWS CloudFormation模板,并且每个任务的状态都会存储并显示在Amazon DynamoDB表中。
截至本次发布版本,该解决方案支持两个数据传输插件:Amazon S3插件和Amazon ECR插件。
Amazon S3插件
Amazon S3插件架构图
使用Amazon S3插件的工作流程如下:
- Event Bridge规则定时触发AWS Lambda 函数,默认每小时运行一次。
- AWS Lambda 将使用启动模板在 Amazon EC2 中启动数据比较作业 (JobFinder)。
- 该任务列出源和目标存储桶中的所有对象,进行比较并确定传输对象。
- Amazon EC2 为每一个需要传输的对象发送一条消息到 Amazon SQS 队列中。同时该方案还支持Amazon S3事件消息,以实现更实时的数据传输;每当有对象上传到源存储桶时,事件消息就会被发送到同一个 Amazon SQS 队列。
- 在Amazon EC2中运行的JobWorker使用 Amazon SQS 中的消息,并将对象从源存储桶传输到目标存储桶。该方案将使用Auto Scaling Group来控制 Amazon EC2 实例的数量,并根据业务需要传输数据。
- 每个对象的传输状态记录存储在Amazon DynamoDB中。
- Amazon EC2实例将根据SQS消息从源存储桶中获取(下载)对象。
- Amazon EC2实例将根据SQS消息将对象放入(上传)到目标存储桶。
- 当工作节点首次识别到一个大文件(默认阈值为1 GB)时,将启动在Amazon EC2上运行的分段上传任务。然后将相应的 UploadId 传递给 Step Functions,触发一个定期的重复任务。此 Step Functions 会每隔1分钟进行周期性检查,以验证与 UploadId 相关的分布式分片是否成功传输到整个集群。
- 如果所有分片都成功传输,Amazon EC2 将调用 Amazon S3 的 CompleteMultipartUpload API 来完成分片的合并。如果发现任何分片无效,它们将被丢弃。
注意
如果对象(或对象的一部分)传输失败,JobWorker释放队列中的消息,待消息在队列中可见后再次传输对象(默认可见性超时设置为15分钟)。如果传输失败达到 5 次,消息将发送到死信队列,同时还将发送通知警报。
Amazon ECR插件
Amazon ECR插件架构图
使用Amazon ECR插件的工作流程如下:
- EventBridge规则定期运行AWS Step Functions工作流,默认每天运行一次。
- AWS Step Functions调用AWS Lambda从源检索镜像列表。
- AWS Lambda将列出源Amazon ECR中的所有存储库内容,或从System Manager Parameter Store获取存储的镜像列表。
- 传输任务将在Fargate内并发运行,最大并发数为10。如果传输任务失败,它将自动重试3次。
- 每个任务使用skopeo将镜像复制到目标ECR中。
- 复制完成后,状态(成功或失败)会记录到Amazon DynamoDB中以进行跟踪。