CodeBuildでSSMパラメーターストアやSecrets Managerでパラメーターを参照する


CodeBuildの環境情報を外部に出す

AWSを利用したCI/CDで、ビルドが必要な場合に利用することになるCodeBuild。
CodeBuildで行われるビルドの詳細設定はbuildspec.yamlというファイルに記述することになります。
ビルドの設定を書く際には参照する他リソースのarnや、アクセスキー等の情報が必要となるケースがあります。
しかし通常のプログラムと同様に、環境情報を直接ファイルに書くのは、セキュリティや水平展開の面でアンチパターンとなります[1]。
そこでCodeBuildはenvパラメーターの中で外部から環境情報を読み込むことができます。
ここで設定できる環境情報はCodeBuild自体に設定された値も参照できますが、SSMパラメーターストアやSecretsManagerからも直接読み込めます。

buildspec.yaml
env:
  parameter-store:
    ssm_parameter: "[パラメーターの名前]"
  secrets-manager:
    secret_parameter: "[シークレットの名前]:[シークレットのキー]"

phases:
  pre_build:
    commands:
      - PARAM1=${ssm_parameter}
      - PARAM2=${secret_parameter}
      #以下省略.どちらの値もログ出力では***になる.

またIAMロールに対応するサービス(今回であればパラメーターストアとシークレットマネージャー)の読み込みポリシーをアタッチするのを忘れずに。ないと権限がないとエラーが出てきます。
(ただこの時の権限エラーは、何の権限がないか出てくれるので非常にわかりやすいです。)

余談ですがパラメーター名にハイフンを含めないようにしましょう。
シェルスクリプトはハイフンを用いたパラメーター名を使うことができないです。
これでひっかかった

その他のbuildspec.yamlの詳細な記述については公式ドキュメント[2]が参考になるかと思います。

参考

[1]https://qiita.com/yusukaaay/items/7ae2df0b0e9cc66ac572

[2]https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-spec-ref.html#build-spec.env.parameter-store