0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

buildspec.ymlで動的にアカウントIDを変更する方法

Posted at

はじめに

CodeBuildではbuildspec.ymlを利用してビルドを行う。
本記事では、buildspec.ymlにアカウントIDを変数として利用する方法を説明する。

対象者

  • buildspec.yml内にアカウントIDをハードコードしてしまっている方
  • マルチプロジェクトで同じbuildspec.ymlを利用したい人

問題点

CodeBuildにはビルド環境の環境変数として予約されているものがある。
ビルド環境の環境変数 - AWS CodeBuild (amazon.com)

しかし、アカウントID(AWSマネジメントコンソール右上から確認)は環境変数として定義されていない。

私の所属チームでは、プロジェクト毎にアカウントIDを確認し、buildspec.yml内にハードコードしていた。

ハードコードしてしまうと同じbuildspec.ymlを使い回す事ができずに、アカウントが異なる環境上で作業を行う際に都度修正を行う必要が生じてしまう。

解決策

アカウントIDを環境変数としてbuildspec.yml内に定義する。定義の際は手動で入力するのではなく、AWS側で予約されている環境変数を利用する。

コマンド

buildspec.yml内の「pre_build」フェーズで以下のコマンドを記述する。

ACCOUNT_IDを環境変数として定義
- export ACCOUNT_ID=$CODEBUILD_BUILD_ARN && IFS=':' && set -- ${ACCOUNT_ID} && ACCOUNT_ID=$5

フェーズ詳細については下記で確認していただきたい。
ビルド使用(buildspec)に関するリファレンス

説明

CodeBuildで定義済みの「CODEBUILD_BUILD_ARN」という環境変数を「:」で分割して配列にいれ、配列の5番目の値をACCOUNT_IDに代入している。

「CODEBUILD_BUILD_ARN」はビルドのARNを表しており、以下のような構成となっている。

CODEBUILD_BUILD_ARN
arn:aws:codebuild:region-ID:account-ID:build/build-ID

この設定により、以降のbuildspec.yml内ではACOUNT_IDを環境変数として利用することができる。

ACCOUNT_ID変数利用例(ECR)
- aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com

おわりに

本記事ではbuildspec.yml内でアカウントIDを環境変数として設定する方法を説明した。
この方法ではアカウントが異なる環境で同じbuildspec.ymlファイルを利用した場合でも修正を加えることなく利用することができる。

別の方法としては、Cloudformationのymlテンプレートで環境変数として渡すこともできるので、別の記事で紹介したいと思う。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?