###目的
ローカル、ステージング、本番環境で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に出力されるので確認。
ちゃんと設定した値が表示された。