命名例
dev-myservice-api-codebuild
ソース設定
今回はGitHub Organization内のprivate repositoryから取得。
personal access tokenで取得していたが、terraform化する時にsource.auth
がOAUTHしか指定出来なかったのでterraformではauth
項目を設定せずにAWSコンソール上でpersonal access tokenを保存した。
personal access tokenは個人アカウントではなく、organization共用のアカウントを作ってそのユーザで生成したものを使う。
環境
ビルドをカスタムイメージ上で行って実行用イメージをECRなどにpushする場合、docker in dockerよりもDockerのマルチステージビルドで行ったほうが色々楽だった。
ECRにpushする時にdocker in dockerだとAWS CLIのインストールから認証まで面倒を見ないといけないが、AWSが提供しているマネージドイメージであればbuildspec.yml内でAWS CLIが利用できるのでCodeBuildからECRへのログインが簡単になる。
あとビルドイメージ用のECRリポジトリを用意しなくてよくなる。
動作させるサブネットを指定する時はプライベートサブネット。
VPC設定が正しいかどうかを「VPC設定の確認」というボタンで検証できるのでいちいちビルドしなくてもよい。
buildspec.yml内で利用する環境変数も設定出来る。
Buildspec
CodeBuild標準はプロジェクトルート/buildspec.yml
というファイルを置いておけば勝手に読み込んでくれるが、dev/stg/prdのような環境毎にファイルを分けることも出来る。
プロジェクトルート/codebuild/${env}-buildspec.yml
のようなディレクトリとファイルを作成している場合、CodeBuildのbuildspec名指定でどのファイルを読み込むか指定できる。
今回は環境毎にbuildspec.ymlを分けたが、基本的に一緒なのでbuildspec.yml自体は1つで各動作は環境変数で変更するようにしたほうが良さそう。
ビルド開始時にビルドするブランチを指定出来るが忘れることもありそうなので、buildspec.ymlでcheckoutする。(ビルド開始時のデフォルト設定も出来るようにしてほしい…)
アーティファクト
成果物をS3に配置することも出来る。
今回はビルドしたイメージをECRにpushしたので使わない。(pushはbuildspec.yml内で行う)
ログ
ビルド時のログを意図的に出力するようにしないと確認できないので設定する
ビルド開始
GitHubなどから取得している場合ソースバージョンが指定できる。
ブランチやタグなどが指定出来、developブランチはそのままdevelop
と入力すればブランチが切り替わる。
buildspecでcheckoutするようにしているので普段は入力しなくてもいいが、buildspec.yml自体の変更がある時は明示しないといけない。