buildspec.yml 作成のためのコマンド試行用 CodeBuild 環境をサクッと用意する

記事タイトルとURLをコピーする

はじめに

AWS CodeBuild では、デフォルトで buildspec.yml というファイル名にビルド等の手続きを記載します。

docs.aws.amazon.com

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 を記載することで、ビルド手続きにブレイクポイントを置いてデバッグが可能な状態としています。詳細は 以下ドキュメントをご参照ください。

docs.aws.amazon.com

また、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 で公開されているので手元での起動も出来そうですが、筆者の環境ではすんなり行かなかったこと、また誰にでも再現可能な方法を考えてこのテンプレートを用意しました。どなたかのお役に立てば幸いです。

なお、出所の不明な CloudFormation クイックリンクはテンプレートの内容を事前に確認するようにしましょう。(悪意のあるリソースが含まれていることが無いとも言えません)