使用和事件將事件驅動的備份自動化 CodeCommit 到 Amazon S3 CodeBuild CloudWatch - AWS 方案指引

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

使用和事件將事件驅動的備份自動化 CodeCommit 到 Amazon S3 CodeBuild CloudWatch

創建者基蘭庫馬爾錢德拉什卡 (AWS)

環境:生產

技術: DevOps;儲存與備份

工作負載:所有其他工作

AWS 服務:Amazon S3; Amazon CloudWatch; AWS CodeBuild; AWS CodeCommit

Summary

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

此模式說明如何在對儲存 CodeCommit 庫進行變更後,自動將存放庫備份到 Amazon 簡單儲存服務 (Amazon S3) 儲存貯體。如果稍後刪除 CodeCommit 儲存區域,此備份策略會提供 point-in-time 復原選項。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 根據您的需求配置了用戶訪問的現有 CodeCommit 存儲庫。如需詳細資訊,請參閱文件 CodeCommit中的設定 CodeCommit AWS。 

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

限制

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

架構

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

工作流程由以下步驟組成:

  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 活動 — CloudWatch 活動提供近乎即時的系統事件串流,描述 AWS 資源的變更。

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

  • AWS CodeCommit — CodeCommit 是一種完全受管的原始檔控制服務,可託管安全的 Git 儲存庫。 

  • AWS Identity and Access Management (IAM) — IAM 是一種 Web 服務,可協助您安全地控制 AWS 資源的存取。

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) 是互聯網的存儲。

史诗

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

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

雲端管理員
創建一個 CodeBuild 項目。

在 CodeBuild 主控台上,選擇 [建立 CodeBuild 專案]。使用 [其他資訊] 區段中的buildspec.yml範本建立 CodeBuild 專案。如需此故事的說明,請參閱 CodeBuild 文件中的建立組建專案。 

雲端管理員
任務描述所需技能
為 CloudWatch 事件建立 IAM 角色。

在 IAM 主控台上,選擇「角色」,然後為 CloudWatch 事件建立 IAM 角色。如需有關這方面的詳細資訊,請參閱 IAM 文件中的CloudWatch 活動 IAM 角色。

重要:您必須為 CloudWatch 事件的 IAM 角色新增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 構建規格的 .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": "" } ] }