本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用和事件自动将事件驱动的备份从 Amazon S3 备份 CodeCommit 到 Amazon S CodeBuild 3 CloudWatch
由 Kirankumar Chandrashekar 创作 () AWS
环境:生产 | 技术: DevOps; 存储和备份 | 工作负载:所有其他工作负载 |
AWS服务:亚马逊 S3;亚马逊 CloudWatch;AWS CodeBuild;AWS CodeCommit |
Summary
在 Amazon Web Services (AWS) 云上,您可以使用AWS CodeCommit 托管基于 Git 的安全存储库。 CodeCommit 是一项完全托管的源代码控制服务。但是,如果 CodeCommit 存储库被意外删除,其内容也会被删除并且无法恢复
此模式描述了在对 CodeCommit 存储库进行更改后,如何自动将存储库备份到亚马逊简单存储服务 (Amazon S3) 存储桶。如果稍后删除了 CodeCommit 存储库,则此备份策略将为您提供 point-in-time恢复选项。
先决条件和限制
先决条件
一个活动的 AWS 账户。
现有 CodeCommit 存储库,可根据您的要求配置用户访问权限。有关更多信息,请参阅 CodeCommit 文档AWS CodeCommit中的设置。
用于上传 CodeCommit 备份的 S3 存储桶。
限制
这种模式会自动备份您的所有 CodeCommit 存储库。如果您想备份单个 CodeCommit 存储库,则必须修改 Amazon Event CloudWatch s 规则。
架构
下图说明了此模式的工作流。
工作流程由以下步骤组成:
代码被推送到 CodeCommit 存储库。
CodeCommit 存储库会将存储库更改通知 CloudWatch 事件(例如,
git push
命令)。CloudWatch 事件调用AWS CodeBuild 并向其发送 CodeCommit 存储库信息。
CodeBuild 克隆整个 CodeCommit 存储库并将其打包成.zip 文件。
CodeBuild 将.zip 文件上传到 S3 存储桶。
技术堆栈
CloudWatch 活动
CodeBuild
CodeCommit
Amazon S3
工具
Amazon CloudWatch Ev CloudWatch ents — Events 提供近乎实时的系统事件流,这些事件描述了AWS资源的变化。
AWS CodeBuild— CodeBuild 是一项完全托管的持续集成服务,用于编译源代码、运行测试和生成随时可以部署的软件包。
AWS CodeCommit— CodeCommit 是一项完全托管的源代码控制服务,用于托管基于 Git 的安全存储库。
AWSIdent@@ ity and Access Management (IAM) — IAM 是一项网络服务,可帮助您安全地控制对AWS资源的访问。
Amazon S3 – Amazon Simple Storage Service (Amazon S3) 是一项面向互联网的存储服务。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
创建 CodeBuild 服务角色。 | 登录AWS管理控制台并打开IAM控制台。选择 Role(角色),然后选择 Create role(创建角色)。为创建服务角色 CodeBuild 以克隆 CodeCommit 存储库、将文件上传到 S3 存储桶以及向 Amazon 发送日志 CloudWatch。有关更多信息,请参阅 CodeBuild 文档中的创建 CodeBuild 服务角色。 | 云管理员 |
创建 CodeBuild 项目。 | 在 CodeBuild 控制台上,选择创建 CodeBuild 项目。使用 “其他信息” 部分中的 | 云管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
为 CloudWatch 活动创建IAM角色。 | 在IAM控制台上,选择角色并为 CloudWatch 事件创建IAM角色。有关这方面的更多信息,请参阅IAM文档中的CloudWatch 事件IAM角色。 重要:您必须为该IAM角色添加 CloudWatch 活动 | 云管理员 |
创建 CloudWatch 事件规则。 |
重要:此 CloudWatch 事件规则描述了所有 CodeCommit 仓库中的更改。如果要备份单个 CodeCommit 存储库或使用单独的 S3 存储桶进行不同的存储库备份,则必须修改 CloudWatch 事件规则。 | 云管理员 |
相关资源
创建 CodeBuild 项目
创建和配置 CloudWatch 事件规则
其他信息
CodeBuild buildspec.yml 模板
version: 0.2 phases: install: commands: - pip install git-remote-codecommit build: commands: - env - git clone -b $REFERENCE_NAME codecommit::$REPO_REGION://$REPOSITORY_NAME - dt=$(date '+%d-%m-%Y-%H:%M:%S'); - echo "$dt" - zip -yr $dt-$REPOSITORY_NAME-backup.zip ./ - aws s3 cp $dt-$REPOSITORY_NAME-backup.zip s3:// #substitute a valid S3 Bucket Name here
CloudWatch 活动规则
{ "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ] } }
CloudWatch 事件规则目标的示例输入转换器
输入路径:
{"referenceType":"$.detail.referenceType","region":"$.region","repositoryName":"$.detail.repositoryName","account":"$.account","referenceName":"$.detail.referenceName"}
输入模板(请根据需要填写值):
{ "environmentVariablesOverride": [ { "name": "REFERENCE_NAME", "value": "" }, { "name": "REFERENCE_TYPE", "value": "" }, { "name": "REPOSITORY_NAME", "value": "" }, { "name": "REPO_REGION", "value": "" }, { "name": "ACCOUNT_ID", "value": "" } ] }