CodeBuild のスクリプトを組み立てるとき、修正のたびに GitHub にプッシュしてブラウザで動作確認をすると待ち時間が長くて辛いので、CircleCI のようにローカル環境でビルドを実行する方法を調べました。手順は AWS CodeBuild エージェントを使用してビルドをローカルで実行 - AWS CodeBuild に書かれていますが、わりとよく変わるので、2024 年 7 月時点の手順をまとめておきます。
目次
- AWS CodeBild の Docker イメージを ECR からプルする
- local agent image を DockerHub からプルする
- codebuild_build.sh をダウンロードする
- buildspec.yml を記載する
- ビルドを実行
- 環境変数を利用する
AWS CodeBild の Docker イメージを ECR からプルする
ビルドイメージの設定方法 にある手順で CodeBuild の Docker イメージを ECR からプルします。
docker pull public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:5.0
local agent image を DockerHub からプルする
aws/aws-codebuild-docker-images/local_builds にある手順で local agent image を ECR からプルします。
x86_64 バージョン。
docker pull public.ecr.aws/codebuild/local-builds:latest
ARM バージョン。Mac はこちらですね。
docker pull public.ecr.aws/codebuild/local-builds:aarch64
codebuild_build.sh をダウンロードする
aws/aws-codebuild-docker-images/codebuild_build.sh を PATH が通ったディレクトリにダウンロードし、実行権限をつけます。ここでは /usr/local/bin/codebuild_build.sh
にダウンロードしています。
$ curl -sSk -o /usr/local/bin/codebuild_build.sh https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh
$ chmod +x /usr/local/bin/codebuild_build.sh
buildspec.yml を記載する
CodeBuild のビルド仕様に関するリファレンス - AWS CodeBuild を参考に buildspec.yml を記載します。今回の例では docker version
コマンドを実行しています。
buildspec.yml
Version: 0.2
phases:
build:
commands:
- docker version
ビルドを実行
codebuild_build.sh
を実行します。-i
(ビルド環境イメージ)オプションと -a
(アーティファクト) オプションが必須です。アーティファクトのディレクトリは自動で作成されます。詳しくはヘルプをご確認ください。
codebuild_build.sh -i public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:5.0 -a artifact_output
実行結果です。docker version
コマンドが実行されていることが分かります。
...
agent-1 | [Container] 2024/07/30 03:21:35.175484 Entering phase BUILD
agent-1 | [Container] 2024/07/30 03:21:35.176773 Running command docker version
agent-1 | Client:
agent-1 | Version: 23.0.6
agent-1 | API version: 1.42
agent-1 | Go version: go1.19.9
agent-1 | Git commit: ef23cbc
agent-1 | Built: Fri May 5 21:13:15 2023
agent-1 | OS/Arch: linux/amd64
agent-1 | Context: default
agent-1 |
agent-1 | Server: Docker Desktop 4.31.0 (153195)
agent-1 | Engine:
agent-1 | Version: 26.1.4
agent-1 | API version: 1.45 (minimum version 1.24)
agent-1 | Go version: go1.21.11
agent-1 | Git commit: de5c9cf
agent-1 | Built: Wed Jun 5 11:29:12 2024
agent-1 | OS/Arch: linux/arm64
agent-1 | Experimental: false
agent-1 | containerd:
agent-1 | Version: 1.6.33
agent-1 | GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
agent-1 | runc:
agent-1 | Version: 1.1.12
agent-1 | GitCommit: v1.1.12-0-g51d5e94
agent-1 | docker-init:
agent-1 | Version: 0.19.0
agent-1 | GitCommit: de40ad0
agent-1 |
agent-1 | [Container] 2024/07/30 03:21:35.382484 Phase complete: BUILD State: SUCCEEDED
...
環境変数を利用する
ビルドで環境変数を利用したい場合は、環境変数が書かれたファイルを作成して -e
オプションで渡すことができます。
$AWS_ACCOUNT_ID
や $AWS_DEFAULT_REGION
など、AWS 上では自動で値が入っているのに、ローカルだと入っていないものもあるので、必要に応じて自分で渡します。
環境変数を書いたファイルを作り
AWS_ACCOUNT_ID=123456789012
AWS_DEFAULT_REGION=ap-northeast-1
-e
オプションでファイルを渡します。
$ codebuild_build.sh -i public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:5.0 -a artifact_output -e codebuild_local.env