LoginSignup
5
5

More than 3 years have passed since last update.

AWS SAM CLIでLambdaの環境変数を切り替える

Last updated at Posted at 2021-01-30

目的

ローカル、ステージング、本番環境でLambdaの環境変数を切り替えたい。

ローカルで環境変数を設定してみる

ヘルプに大体書いてある。

$sam local invoke --help

-n オプションで環境変数ファイルを指定するとある。

vars.json

{
  "Parameters": {
    "ApiHost1": "http://hogehoge.com"
  }
}

template.yaml

Globals:
  Function:
    Timeout: 3
    Environment:
      Variables:
        ApiHost1:

app.js

exports.lambdaHandler = async (event, context) => {
  try {
    console.log("process.env.ApiHost1", process.env.ApiHost1);
...

コンソールで実行

$sam local invoke HelloWorldFunction -n vars.json

成功。
コンソールに出力された。

デプロイ先環境ごとに切り替え

ヘルプを見てみる。

$sam deploy --help

--config-env オプションで環境名を指定。デフォルト環境は'default'
samconfig.tomlに環境ごとにパラメータを指定。
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

parameter_overridesというのがある。

以下のデプロイでできたsamconfig.tomlにparameter_overridesを追記してみる。
https://qiita.com/pino2/items/fd994534e94e6b4928f3

sam local invoke コマンドに効かせたい時は、これをヘッダにする。
[default.local_invoke.parameters]

samconfig.toml

version = 0.1
[default]
[default.deploy]
[default.deploy.parameters]
...
[default.local_invoke.parameters]
parameter_overrides = "ApiHost1=http://hoge.com ApiHost2=http://fuga.com"

テンプレートはパラメータを参照するように修正

template.yaml

Globals:
  Function:
    Timeout: 3
    Environment:
      Variables:
        ApiHost1: !Ref ApiHost1
        ApiHost2: !Ref ApiHost2

app.js

exports.lambdaHandler = async (event, context) => {
  try {
    console.log("process.env.ApiHost1", process.env.ApiHost1);
    console.log("process.env.ApiHost2", process.env.ApiHost2);
...

実行

$sam local invoke HelloWorldFunction

コンソールに表示された。

INFO    process.env.ApiHost1 http://hoge.com
INFO    process.env.ApiHost2 http://fuga.com

本番とステージング用設定追記

samconfig.toml

[staging.deploy.parameters]
...
parameter_overrides = "ApiHost1=http://staging.hoge.com ApiHost2=http://staging.fuga.com"
[production.deploy.parameters]
...
parameter_overrides = "ApiHost1=http://prod.hoge.com ApiHost2=http://prod.fuga.com"

template.yamlにParametersを書かないとエラーになった。

Parameters:
  ApiHost1:
    Type: String
  ApiHost2:
    Type: String

Globals:
  Function:
    Timeout: 3
    Environment:
      Variables:
        ApiHost1: !Ref ApiHost1
        ApiHost2: !Ref ApiHost2

環境は本番を指定してデプロイ実施してみる。

$sam deploy --config-env production

template.yamlにOutputを書いていると
コンソールにエンドポイントURLが出力されるので、そのパスにアクセス。
Lamdbaのconsole.logはCloudWatchLogsに出力されるので確認。
ちゃんと設定した値が表示された。

5
5
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
5
5