CodeBuild および Events を使用して、 から Amazon S3 CodeCommit への CloudWatch イベント駆動型バックアップを自動化する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CodeBuild および Events を使用して、 から Amazon S3 CodeCommit への CloudWatch イベント駆動型バックアップを自動化する

作成者: Kirankumar Chandrashekar (AWS)

環境:本稼働

テクノロジー: DevOps; ストレージとバックアップ

ワークロード:その他すべてのワークロード

AWS サービス: Amazon S3、Amazon CloudWatch、AWS CodeBuild、AWS CodeCommit

[概要]

アマゾン ウェブ サービス (AWS) クラウドでは、AWS を使用して、セキュアな Git ベースのリポジトリを CodeCommit ホストできます。 はフルマネージド型のソースコントロールサービス CodeCommit です。ただし、 CodeCommit リポジトリが誤って削除された場合、その内容も削除され、 を復元することはできません。 

このパターンでは、 CodeCommit リポジトリに変更を加えた後に、リポジトリを Amazon Simple Storage Service (Amazon S3) バケットに自動的にバックアップする方法について説明します。 CodeCommit リポジトリが後で削除された場合、このバックアップ戦略では point-in-time リカバリオプションが提供されます。

前提条件と制限

前提条件

  • アクティブな AWS アカウント。

  • ユーザーアクセスが要件に従って設定された既存の CodeCommit リポジトリ。詳細については、 CodeCommit ドキュメントの「AWS のセットアップ CodeCommit」を参照してください。 

  • CodeCommit バックアップをアップロードするための S3 バケット。 

制約事項

  • このパターンは、すべての CodeCommit リポジトリを自動的にバックアップします。個々の CodeCommit リポジトリをバックアップする場合は、Amazon CloudWatch Events ルールを変更する必要があります。

アーキテクチャ

次の図は、このパターンのワークフローを図解したものです。

ワークフローは、以下の手順で構成されます。

  1. コードは CodeCommit リポジトリにプッシュされます。

  2. CodeCommit リポジトリは、リポジトリの変更 (git pushコマンドなど) を CloudWatch イベントに通知します。

  3. CloudWatch イベントは AWS を呼び出し CodeBuild 、 CodeCommit リポジトリ情報を送信します。

  4. CodeBuild CodeCommit リポジトリ全体をクローンし、.zip ファイルにパッケージ化します。

  5. CodeBuild は .zip ファイルを S3 バケットにアップロードします。

テクノロジースタック

  • CloudWatch イベント

  • CodeBuild

  • CodeCommit

  • Amazon S3

ツール

  • Amazon CloudWatch Events – CloudWatch イベントは、AWS リソースの変更を記述するシステムイベントのほぼリアルタイムのストリームを提供します。

  • AWS CodeBuild – は、ソースコードをコンパイルし、テストを実行し、すぐにデプロイできるソフトウェアパッケージを生成するフルマネージドの継続的統合サービス CodeBuild です。 

  • AWS CodeCommit – は、セキュアな Git ベースのリポジトリをホストするフルマネージド型のソースコントロールサービス CodeCommit です。 

  • AWS Identity and Access Management (IAM) は、IMS は AWS リソースへのアクセスのセキュアな制御に役立つ Web サービスです。

  • Amazon S3」— Amazon Simple Storage Service (Amazon S3)は、インターネット用のストレージです。

エピック

タスク説明必要なスキル
CodeBuild サービスロールを作成します。

AWS マネジメントコンソールにサインインし、IAM コンソールを開きます。[Roles (ロール)]、[Create role (ロールの作成)] の順に選択します。のサービスロールを作成して CodeBuild 、 CodeCommit リポジトリのクローンを作成し、ファイルを S3 バケットにアップロードし、ログを Amazon に送信します CloudWatch。詳細については、 CodeBuild ドキュメントの CodeBuild 「サービスロールの作成」を参照してください。

クラウド管理者
CodeBuild プロジェクトを作成します。

CodeBuild コンソールで、 CodeBuild プロジェクトの作成 を選択します。「追加情報」セクションのbuildspec.ymlテンプレートを使用して CodeBuild プロジェクトを作成します。このストーリーについては、 CodeBuild ドキュメントの「ビルドプロジェクトの作成」を参照してください。 

クラウド管理者
タスク説明必要なスキル
CloudWatch イベントの IAM ロールを作成します。

IAM コンソールで、ロールを選択し、 CloudWatch イベントの IAM ロールを作成します。詳細については、IAM ドキュメントの「IAM CloudWatch ロールのイベント」を参照してください。

重要: CloudWatch イベントの IAM ロールにアクセスcodebuild:StartBuild許可を追加する必要があります。

クラウド管理者
CloudWatch イベントルールを作成します。
  1. CloudWatch コンソールで、イベント を選択し、ルール を選択します。「ルールの作成」を選択し、「追加情報」セクションの CloudWatch 「イベント」ルールを使用します。これにより、 CodeCommit リポジトリ内のイベントの変更 ( git pushgit commit コマンドなど) をリッスンするルールが作成されます。詳細については、AWS ドキュメントの CodeCommit 「ソースの CloudWatch イベントルールを作成する」を参照してください。 CodePipeline

  2. [Targets (ターゲット)] 、[Topic (トピック)] を選択してから、[Configure input (入力の設定)] を選択します。[Input transformer (入力トランスフォーマー)] を選択し、追加情報セクションの入力パスと入力テンプレートを使用します。これにより、 CodeCommit リポジトリの詳細が解析され、環境変数として CodeBuild プロジェクトに送信されます。詳細については、 CloudWatch ドキュメントの「Input Transformer」チュートリアルを参照してください。 

  3. [Configure details (詳細の設定)] を選択し、ルールの名前と説明を入力します。[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": "" } ] }