【CloudFormation/SAM】デプロイ時の環境変数を参照する方法

記事タイトルとURLをコピーする

こんにちは、サービス開発部のくればやしです。

今回は、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の開発に従事。ドラクエ部。推しナンバーはⅤ、推しモンスターはクックルー。