使用代碼構建和 CloudWatch 察事件自動化從 CodeCommit 到 Amazon S3 的事件驅動備份 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用代碼構建和 CloudWatch 察事件自動化從 CodeCommit 到 Amazon S3 的事件驅動備份

由基蘭庫瑪 ‧ 錢德拉瑟卡 (AWS) 創作

環境:生產

技能:DevOps 作業;儲存與備份

工作負載:所有其他工作負載

AWS 服務:Amazon S3; Amazon CloudWatch; AWS CodeBuild 碼生成;

Summary

在 Amazon Web Services (AWS) Cloud,您可以使用 AWS CodeCommit 託管安全的 GitCommit。CodeCommit 是全受管原始碼控制服務。但是,如果意外刪除 CodeCommit 存放庫,其內容也會被刪除,並且無法還原。 

此模式描述了如何在儲存庫變更之後,自動備份 CodeCommit 存儲庫至 Amazon Simple Storage Service (Amazon S3) 儲存貯體。如果稍後刪除 CodeCommit 存放庫,此備份策略會提供您時間點復原選項。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 現有的 CodeCommit 存放庫,根據您的需求設定使用者存取權限。如需詳細資訊,請參閱「」設定 AWS CodeCommit在 CodeCommit 文檔中。 

  • 用於上傳程式 CodeCommit 備份的 S3 儲存貯體。 

限制

  • 此模式會自動備份您所有的 CodeCommit 存放庫。如果您想要備份個別的 CodeCommit 存放庫,您必須修改 Amazon CloudWatch Events 規則。

Architecture

下圖說明此模式的工作流程。

工作流程包含下列步驟:

  1. 代碼被推送到一個 CodeCommit 存儲庫。

  2. 程式 CodeCommit 存放庫會通知有關存放庫變更的事件 (例如,git push命令)。

  3. CloudWatch 事件會叫用 AWS CodeBuild,並將它傳送給程式碼提交存放庫資訊。

  4. CodeBuild 會複製整個 CodeCommit 存儲庫,並將其封裝到 .zip 檔案。

  5. CodeBuild 會上傳 .zip 檔案至 S3 儲存貯體。

技術堆疊

  • CloudWatch Events

  • CodeBuild

  • CodeCommit

  • Amazon S3

Tools

  • Amazon CloudWatch Events— CloudWatch Events 會將近乎即時的系統事件串流,傳送到 AWS 資源中的變更。

  • AWS CodeBuild— CodeBuild 是全受管的持續整合服務,可編譯原始碼、執行測試,並產生可立即部署的軟體套件。 

Epics

任務描述所需技能
建立 CodeBuild 服務角色。

登入 AWS 管理主控台,並開啟 IAM 主控台。選擇角色,然後選擇建立角色。為 CodeBuild 建立服務角色,以複製 CodeCommit 存放庫、將檔案上傳到 S3 儲存貯體,並將日誌傳送到 Amazon CloudWatch。如需詳細資訊,請參閱「」建立 CodeBuild 服務角色在 CodeBuild 文檔中。

Cloud 管理員
創建一個 CodeBuild 項目。

在 CodeBuild 控制台上,選擇建立 CodeBuild 專案。使用建置規格 .yml 範本建立 CodeBuild 專案其他資訊區段。如需此故事的協助,請參閱建立組建專案在 CodeBuild 文檔中。 

Cloud 管理員
任務描述所需技能
為 CloudWatch Events 建立 IAM 角色。

在 IAM 主控台,選擇角色,為 CloudWatch Events 建立 IAM 角色。如需此項目的詳細資訊,請參閱CloudWatch Events IAM 角色在 IAM 文件中。

重要:您必須新增codebuild:StartBuildIAM 角 CloudWatch 的許可。

Cloud 管理員
建立 CloudWatch Events 規則。

在 CloudWatch 主控台,選擇活動,然後選擇規則。選擇建立規則,並使用其他資訊區段。這會建立偵聽事件變更的規則 (例如git pushgit commit命令)在您的 CodeCommit 存儲庫中。如需詳細資訊,請參閱「」為 CodeCommit 來源建立 CloudWatch Events 規則在 AWS 代碼管道文檔中。

選擇Targets (目標)中,選擇主題,然後選擇設定輸入。選擇輸入變壓器,並使用輸入路徑和輸入範本其他資訊區段。這可確保您的 CodeCommit 存儲庫詳細信息被解析並作為環境變量發送到 CodeBuild 項目。如需詳細資訊,請參閲 。輸入變壓器自學課程在文檔中。 

選擇設定詳細資訊,輸入規則名稱和描述。選擇 Create rule (建立規則)

重要:此 CloudWatch 事件規則描述了所有程式 CodeCommit 存放庫中的變更。如果您要備份個別的 CodeCommit 存放庫或針對不同的存放庫備份使用個別的 S3 儲存貯體,則必須修改 CloudWatch 事件規則。

Cloud 管理員

建立 CodeBuild 專案

建立和設定 CloudWatch Events 規則

其他資訊

CodeBuild 建立規格 .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 -r $dt-$REPOSITORY_NAME-backup.zip ./ - aws s3 cp $dt-$REPOSITORY_NAME-backup.zip s3:// #substitute a valid S3 Bucket Name here

CloudWatch Events 規則

{ "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ] } }

CloudWatch Events 規則目標的輸入轉換器範例

輸入路徑:

{"referenceType":"$.detail.referenceType","region":"$.region","repositoryName":"$.detail.repositoryName","account":"$.account","referenceName":"$.detail.referenceName"}

輸入範本:

  {"environmentVariablesOverride": [       {           "name": "REFERENCE_NAME",           "value": <referenceName>        },       {           "name": "REFERENCE_TYPE",           "value": <referenceType>        },       {           "name": "REPOSITORY_NAME",           "value": <repositoryName>        },       {           "name": "REPO_REGION",           "value": <region>        },        {           "name": "ACCOUNT_ID",           "value": <account>        } ]}