【CodePipeline】既存のCodeBuildをCodePipelineに連携
本記事の伝えたいこと
Git→CodePipeline→CodeBuildを連携する際に躓いたことを記載する。
記事を書いた時点は、CICDの実務経験0。
Code系のサービスも今回の自主学習で初めて触る。
- CodePipelineのIAMポリシー
- 既にGitーCodeBuild間で連携していた際に必要となるCodeBuildの設定変更(CodeBuildのソースプロバイダーの設定変更)
やりたいこと(ゴール)
GitのmainリポジトリにtfファイルがPUSHした際、自動でCodeBuildの実行(Terraform Apply)する。
元々GitにtfファイルをPUSH後、CodeBuildをTerraformを手動実行していた
変更前の構成
Github→CodeBuild(手動実行)
変更後の構成
Github→CodePipeline(トリガーはmainリポジトリ)→CodeBuild(PipeLineによる自動実行)
※CodeBuildは変更前のリソースを使用(新規に作るのが手間なため)
前提
- CodeBuildは作成済み ※私用アカウントのためplan→auto-approve→applyを一気に実行するビルドプロジェクトとなる
- Gitにtfファイル、buildspec.ymlは格納済み
CodePipelineの構築
事前準備
CodePipeline用のIAMロールの作成
以下のポリシーをCodePipeline用ロールにアタッチ
※自分のアカウントで動かすため、権限は緩めで設定
- AWSCodePipeline_FullAccess(arn:aws:iam::aws:policy/AWSCodePipeline_FullAccess)
- Git連携用権限(codestar-connections)、CodeBuild連携用権限(codebuild)、S3アーティファクトストアへの書き込み権限 ★躓いたポイント後述に記載★
{
"Statement": [
{
"Action": [
"codestar-connections:UseConnection",
"s3:PutObject",
"codebuild:StartBuild",
"codebuild:BatchGetBuilds"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
],
"Version": "2012-10-17"
}
GitHub接続用のCodeStarConnectionsの作成
-
任意の接続名を入力し、Githubに接続を押下
-
新しいアプリをインストールするを押下 ※キャプチャ取得漏れ
-
連携先のGitアカウント、リポジトリを選択
-
GithubのOTPを入力 ※Githubで設定していた場合
CodePipeline構築
-
今回は自前のCodeBuildを呼び出したいため、作成オプションは「カスタムパイプラインを構築する」を選択。DeploymentにAWS への Terraform のデプロイがあった時間あるときに検証する。
-
任意のPipeLine名入力。サービスロールはCodePipeline用のIAMロールで作成したものを使用。
-
ソースステージはtfファイルが格納されたGitを選択するため、「接続」は上記で作成したCodeStarConnectionsを選択する。Gitはmainブランチしかないため、「デフォルトブランチ」とする。
-
「その他のビルドプロバイダー」はCodeBuildを選択し、プロジェクト名は事前に作成していたCodeBuildを選択。
-
テスト、デプロイステージは使用しないので省略し、CodePipelineの構築完了
構築完了したけど…?
躓いたポイント1
- CodePipeline構築後、CodePipeLine→CodeBuildが実行されが中々CodePipeline(ソースの実行)が終わらない…
→CloudTrailを見た結果、こちらのポリシーが不足したため、ロールに追加。
→CodePipeLineからCodeBuildを実行するまでは完了!
躓いたポイント2
-
GitHubに新しくtfファイルをPUSHしたが、terraform applyされない…。
→CodePipelineとCodeBuildそれぞれのGithubのコミットIDが違う
→CodeBuild側が古い(最後手動でビルドした際の)コミットIDとなっていた
→CodeBuildがCodePipelineのコミットIDが受け取れていないのが原因と判明
の赤枠箇所
※画面キャプチャ取得漏れのため、CodeBuildのソースプロバイダー修正後の画面 -
早速コンソール画面でCodeBuildのソースプロバイダーのをGithubからCodePipelineに変更しようとしたが…選択肢にない……。
-
コンソール画面の仕様か不明だが、コンソール画面で変更できないため、ローカル端末から以下CLIコマンドでソースプロバイダーをGitHubからCodePipelineに変更
aws codebuild update-project --region <ビルドプロジェクトがあるリージョン> --name <ビルドプロジェクト名> --source type=**CODEPIPELINE** --artifacts type=**CODEPIPELINE**
CICDの構築完了!
これでGithubのmainにPUSHさえすれば、自動でterraform -applyするCICDもどきの構築完了。
実務未経験ですが、CICDっぽいものが作れました。
Discussion