CodePipeline で CodeBuild へ環境変数を渡し、上書きすることで CodeBuild を再利用する
CodeBuild を再利用し、不要に作成しない様にした話です。
terraform で buildspec を管理してみる
- buildspec.yml - 1 
 2
 3
 4
 5
 6
 7
 version: 0.2
 env:
 variables:
 FOO: "${foo}"
 ...
- codebuild.tf - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13- data "template_file" "buildspec" { 
 template = file("buildspec.yml")
 vars = {
 foo = "foo"
 }
 }
 resource "aws_codebuild_project" "foo" {
 source {
 type = "CODEPIPELINE"
 buildspec = data.template_file.buildspec.rendered
 }
terraform apply 実行し CodeBuild を作成すると、環境変数 FOO=foo が設定されます。
CodePipeline で CodeBuild の環境変数を上書き
CodeBuild の処理内容は同じだが、環境変数だけ変えたい場合に有効です
| 1 | resource "aws_codepipeline" "moge" { | 
これで CodePipeline を実行した場合、 FOO=moge が指定され、見事上書きされてます。
例題
${repository_url} に nginx の ECR リポジトリを代入すると Nginx のイメージビルド & ECR プッシュの処理をする CodeBuild が作れます。
| 1 | 
 | 
CodePipeline で環境変数 REPOSITORY_URL=123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/fluentd と指定すると fluentd イメージをビルド & ECR push ができます。
結論
無闇に CodeBuild を作成することなかれ
以上
参考になれば幸いです。
参考
環境変数の指定の仕方は以下参考にしました。
CodePipeline で CodeBuild へ環境変数を渡し、上書きすることで CodeBuild を再利用する
https://kenzo0107.github.io/2020/03/30/2020-03-31-buildspec-env/