本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用和事件將事件驅動的備份自動化 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 活動規則。
架構
下圖說明此模式的工作流程。
工作流程由以下步驟組成:
代碼被推送到一個 CodeCommit 存儲庫。
CodeCommit 存放庫會通知有關存放庫變更的 CloudWatch 事件 (例如,
git push
指令)。CloudWatch 事件會叫用 AWS, CodeBuild 並將 CodeCommit 儲存庫資訊傳送給它。
CodeBuild 克隆整個 CodeCommit 存儲庫並將其打包到 .zip 文件中。
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 專案]。使用 [其他資訊] 區段中的 | 雲端管理員 |
任務 | 描述 | 所需技能 |
---|---|---|
為 CloudWatch 事件建立 IAM 角色。 | 在 IAM 主控台上,選擇「角色」,然後為 CloudWatch 事件建立 IAM 角色。如需有關這方面的詳細資訊,請參閱 IAM 文件中的CloudWatch 活動 IAM 角色。 重要:您必須為 CloudWatch 事件的 IAM 角色新增 | 雲端管理員 |
建立 CloudWatch 事件規則。 |
重要事項:此 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": "" } ] }