はじめに
AWS CodeBuild では、デフォルトで buildspec.yml
というファイル名にビルド等の手続きを記載します。
buildspec.yml
は基本的に Git で管理されることが多いように思いますが、何度もリモートリポジトリへの Push を行って CodeBuild の動作確認をするのは非常に面倒です。
本記事ではコマンドの試行錯誤を容易にする CodeBuild 環境の構築方法をご紹介します。
まずは体験していただき、そのあとで仕組みを解説していきます。
3分で試す
CodeBuild プロジェクトを CloudFormation で作成
マネジメントコンソールにログインした状態で、以下リンクをクリックしてください。CloudFormation のクイックリンクになっています。
設定値は全てデフォルトのまま、AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。
にチェックを入れて スタックを作成
ボタンをクリックするとスタックの作成が開始されます。
手元の環境では30秒ほどで構築が完了しました。
CodeBuild プロジェクトの開始、環境へのログイン
CloudShell を起動し、以下コマンドで CodeBuild ジョブを開始します。
$ aws --no-cli-pager codebuild start-build --project-name codebuild-sandbox --debug-session-enabled --query 'build.id' --output text | cut -d':' -f2 | awk '{print "codebuild:"$1}' codebuild:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
codebuild:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
のようなID が出力されるのでコピーしておきます。
以下コマンドで開始した CodeBuild 環境に Session Manager でログインします。
$ aws ssm start-session --target <コピーした ID>
手順は以上です!
今、ログインしている環境は先程作成した CodeBuild 環境内ですので、 buildspec.yml
に記載したい手続きを試行しましょう!
試行が終わったら、codebuild-resume
コマンドを実行してビルド処理を継続・終了させるのを忘れずに。
解説
先程作成した CloudFormation スタックの内容は以下の通りです。(テンプレートはこちら)
CodeBuild プロジェクトとそれにアタッチする IAM Role が含まれています。IAM Role には AWS マネージドポリシーの PowerUserAccess
をアタッチしています。必要に応じて調整してください。
ポイントはテンプレートに埋め込んだ BuildSpec です。codebuild-breakpoint
を記載することで、ビルド手続きにブレイクポイントを置いてデバッグが可能な状態としています。詳細は
以下ドキュメントをご参照ください。
また、CodeBuild 環境はスタック構築時のパラメーター BuildImage
で以下のマネージドイメージから選択可能です。
パラメーター | イメージ |
---|---|
AL2.x86-64.Standard.5.0 | aws/codebuild/amazonlinux2-x86_64-standard:5.0 |
Ubuntu.x86-64.7.0 | aws/codebuild/standard:7.0 |
AL2.arm64.Standard.3.0 | aws/codebuild/amazonlinux2-aarch64-standard:3.0 |
まとめ
デバッグ用 CodeBuild 環境の構築についてご紹介しました。
CodeBuild のマネージドイメージは、Public ECR で公開されているので手元での起動も出来そうですが、筆者の環境ではすんなり行かなかったこと、また誰にでも再現可能な方法を考えてこのテンプレートを用意しました。どなたかのお役に立てば幸いです。
2024-03-26 追記 公式ドキュメントにローカルでの実行方法が記載されていることを同僚に教えてもらいました。こちらの方法も状況に応じてお試しください。 docs.aws.amazon.com
なお、出所の不明な CloudFormation クイックリンクはテンプレートの内容を事前に確認するようにしましょう。(悪意のあるリソースが含まれていることが無いとも言えません)