AWS CodeBuild をローカル環境で実行する(2024年7月版)

2019年7月14日

AWS CodeBuild

CodeBuild のスクリプトを組み立てるとき、修正のたびに GitHub にプッシュしてブラウザで動作確認をすると待ち時間が長くて辛いので、CircleCI のようにローカル環境でビルドを実行する方法を調べました。手順は AWS CodeBuild エージェントを使用してビルドをローカルで実行 - AWS CodeBuild に書かれていますが、わりとよく変わるので、2024 年 7 月時点の手順をまとめておきます。

目次

  1. AWS CodeBild の Docker イメージを ECR からプルする
  2. local agent image を DockerHub からプルする
  3. codebuild_build.sh をダウンロードする
  4. buildspec.yml を記載する
  5. ビルドを実行
  6. 環境変数を利用する

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

-技術ブログ
-