CodePipeline(+CodeBuild) で fargate に自動デプロイを設定した時のメモ
2022年8月26日
参考
前提
- GitHub を使用するので GitHub リポジトリが作成されている事。
- ECR のリポジトリが作成されている事。
- ECS 上にコンテナが作成されている事。
手順
- ビルドプロジェクトを作成する
- CodeBuild で作成された ロールに ECR の権限のポリシーを付与する
- buildspec.yml を作成する
- CodePipeline を作成する
CodeBuild を作成する
- プロジェクト作成を開始
- 「CodeBuild」の「開始方法」をクリックする。
- 「プロジェクトの作成」をクリックする。
- プロジェクトの設定
- 「プロジェクト名」に「hoge-project」と入力する。
- ソース
- 環境
- 「環境イメージ」で「マネージド型イメージ」を選択する。
- 「オペレーティングシステム」で「Amazon Linux 2」を選択する。
- 「ランタイム」で「Standard」を選択する。
- 「イメージ」で最新のバージョンを選択する。
- 「イメージのバージョン」で最新のバージョンを選択する。
- 「環境タイプ」で「Linux」を選択する。
- 「特権付与」にチェックを付ける。
- サービスロール未作成の場合は「サービスロール」で「新しいサービスロール」を選択する。
- 追加設定 > 環境変数
- AWS_DEFAULT_REGION → ap-northeast-1(aws のリージョン)
- IMAGE_REPO_NAME → repository_name(ECR で設定済みのもの)
- CONTAINER_NAME → container_name(ECS で設定済みのもの)
- IMAGE_TAG → latest
- AWS_ACCOUNT_ID → 12345678
- Buildspec
- 「ビルド仕様」で「buildspec ファイルを使用する」を選択する。
- アーティファクト
- 「ビルドプロジェクトを作成する」をクリックする。
CodeBuild で作成された ロールに ECR の権限のポリシーを付与する
- IAM
- IAM の「ロール」をクリックする。
- 検索欄に「codebuild」と入力する。
- 上記手順で作成したサービスロールの名前が表示されるのでロール名をクリックする。
- 「許可を追加」をクリックし「ポリシーをアタッチ」をクリックする。
- 「その他の許可ポリシー」の検索欄に「ContainerRegistryPowerUser」と入力して検索する。
- 「AmazonEC2ContainerRegistryPowerUser」にチェックをつけ「ポリシーをアタッチ」をクリックする。
buildspec.yml を作成する
- リポジトリ最上位の階層 buildspec.yml ファイルを作成し次のコードを記載する。
version: 0.2
phases:
pre_build:
commands:
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
build:
commands:
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG -f dockerfile.production .
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
- printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
- artifacts の箇所以外基本は ECR の「プッシュコマンドの表示」と同じです。
- artifacts.json が吐き出され、これを元に「新しいリビジョンの作成」が行われるようです。
- 上記は自分用にカスタマイズして「-f dockerfile.production」と dockerfile を指定してしまっているので参考にする方は要注意です。
CodePipeline を作成する
- パイプラインの作成開始
- パイプラインの設定
- 「パイプライン名」に「hoge-pipeline」と入力する。
- 「サービスロール」で「新しいサービスロール」を選択する。
- 「次に」をクリックする。
- ソース
- GitHub に接続する
- 「ソースプロバイダー」で「GitHub(バージョン 2)」を選択する。
- 「GitHub に接続する」をクリックする。
- 接続名にリポジトリ名を入力する。
- 「新しいアプリをインストールする」をクリックする。
- 「Only select repositories」を選択し、対象のリポジトリを選択する。
- 「install」をクリックする。
- 「接続」をクリックする。
- 「リポジトリ名」に accountname/repositoryname の入力する。
- 「ブランチ名」で対象のブランチを選択する。
- 「検出オプションを変更する」はチェックが付いたままにする。
- 「出力アーティファクト形式」は「CodePipeline のデフォルト」が選択されたままにする。
- 「次に」をクリックする。
- 構築する - オプショナル
- 「プロバイダーを構築する」で「AWS CodeBuild」を選択する。
- 「プロジェクト名」に「hoge-project」と入力する。
- 「ビルドタイプ」で「単一ビルド」を選択する。
- 「次に」をクリックする。
- デプロイステージを追加する
- 「デプロイプロバイダー」で「Amazon ECS」を選択する。
- 「クラスター名」で対象のクラスターを選択する。
- 「サービス名」で対象のサービス名を選択する。
- 「イメージ定義ファイル - オプショナル」は CodeBuild 時に作成されるので空欄のままにしておく。
- 「次に」をクリックして「パイプラインを作成する」をクリックする。
ディスカッション
コメント一覧
まだ、コメントがありません