使用和事件自动将事件驱动的备份从 Amazon S3 备份 CodeCommit 到 Amazon S CodeBuild 3 CloudWatch - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用和事件自动将事件驱动的备份从 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 规则。

架构

下图说明了此模式的工作流。

AWS Cloud architecture showing Git push workflow from Users to S3 bucket via CodeCommit and CodeBuild.

工作流程由以下步骤组成:

  1. 代码被推送到 CodeCommit 存储库。

  2. CodeCommit 存储库会将存储库更改通知 CloudWatch 事件(例如,git push命令)。

  3. CloudWatch 事件调用AWS CodeBuild 并向其发送 CodeCommit 存储库信息。

  4. CodeBuild 克隆整个 CodeCommit 存储库并将其打包成.zip 文件。

  5. 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 项目。使用 “其他信息” 部分中的buildspec.yml模板创建 CodeBuild 项目。有关本故事的帮助,请参阅 CodeBuild 文档中的创建构建项目。 

云管理员
任务描述所需技能
为 CloudWatch 活动创建IAM角色。

在IAM控制台上,选择角色并为 CloudWatch 事件创建IAM角色。有关这方面的更多信息,请参阅IAM文档中的CloudWatch 事件IAM角色

重要:您必须为该IAM角色添加 CloudWatch 活动codebuild:StartBuild权限。

云管理员
创建 CloudWatch 事件规则。
  1. 在 CloudWatch 控制台上,选择事件,然后选择规则。选择创建规则,然后使用其他信息部分中的 CloudWatch 事件规则。这将创建一条规则,用于监听 CodeCommit 存储库中的事件更改(例如git pushgit commit命令)。有关更多信息,请参阅AWS CodePipeline 文档中的为 CodeCommit 来源创建 CloudWatch 事件规则

  2. 选择目标,选择主题,然后选择配置输入。选择输入转换器,然后使用其他信息部分中的输入路径和输入模板。这样可以确保您的 CodeCommit 存储库详细信息被解析并作为环境变量发送到 CodeBuild 项目。有关更多信息,请参阅 CloudWatch 文档中的输入变压器教程。 

  3. 选择配置详细信息,输入规则的名称和描述。选择 Create rule(创建规则)。

重要:此 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": "" } ] }