こんにちは、サービス開発部のくればやしです。
今回は、AWS SAM CLI(以下SAM CLI)で実行環境の環境変数をテンプレート内で展開する方法を解説します。
解説
例えば別のIaCツールである Serverless Framework の場合は以下のようにテンプレートファイルの中で指定するだけで参照が可能になります。
provider: environment: API_KEY: ${env:API_KEY}
SAM CLIの場合は、一度 Parameters として外部から入力される値として定義した上で、参照する必要があるため、例えば以下のように定義したうえで、
Parameters: ApiKey: # 英数字のみ(アンダースコア不可) Type: String NoEcho: true Globals: Function: Environment: Variables: API_KEY: !Ref ApiKey
sam deploy コマンド時にパラメータとして渡す必要があります。
sam deploy --parameter-overrides ApiKey=$ApiKey
設定ファイル( samconfig.toml )内でもパラメータを定義することは可能ですが、この時は環境変数を参照することは出来ず、固定値しか設定できないため注意が必要です。
例えば、samconfig.toml 内で、以下のように記述するとCloudFormationテンプレートには $ApiKey という文字列が展開されてしまいます。
parameter_overrides = "ApiKey=$ApiKey"
したがって、GitHub Actions等のCI/CDでのデプロイを考える場合は、デプロイスクリプトの中の sam deploy コマンドのパラメータとして環境変数を渡す必要があるということになります。
まとめ
まとめると、
- SAM CLIで実行環境の環境変数を適用するにはテンプレート内で Parameters 指定した上で、コマンドのパラメータとして渡す必要がある
- 設定ファイル(
samconfig.toml)で定義しておくことは出来ない
ということになります。どなたかの一助になれば幸いです。
関連リンク
SAM deploy doesn't set environment variables · Issue #1163 · aws/aws-sam-cli https://github.com/aws/aws-sam-cli/issues/1163#issuecomment-1232171064
紅林輝(くればやしあきら)(サービス開発部) 記事一覧
サービス開発部所属。2015年にサーバーワークスにJOIN。クラウドインテグレーション部を経て、現在はCloud Automatorの開発に従事。ドラクエ部。推しナンバーはⅤ、推しモンスターはクックルー。