おはようございます、YASUです。
前に、Lambdaのバージョンとエイリアスを整理しました。DVAの勉強を進めると、API Gatewayの「ステージ変数」が、そのエイリアスと組み合わせて出てきます。ステージ変数の意味が分かりにくかったので、シンプルに整理しました。
目次
結論
ステージ変数は、API Gatewayのステージごとに設定できる、名前と値のペアです。これを使うと、同じAPIの設定のまま、dev用とprod用で、接続先のLambdaのエイリアスを切り替えられます。
ステージとは
ステージは、APIをデプロイして公開する、環境の単位です。betaやprodなど、名前を付けて、複数のステージを作れます。ステージごとに、別々のURLでAPIを呼び出します。
ステージ変数とは
ステージ変数は、ステージごとに設定する、名前と値のペアです。自分なりのイメージでは、ステージごとに持たせる「環境変数」です。設定した変数は、${stageVariables.変数名}という形で参照します。API Gatewayは、実行時に、呼び出されたステージの値に置き換えてくれます。
使い道
- HTTP統合の接続先URL:ステージごとに、別のバックエンドに接続する
- Lambda関数やエイリアス:ステージごとに、別のLambdaを呼び出す
- マッピングテンプレート:ステージごとに、別のDynamoDBのテーブル名などを渡す
Lambdaのエイリアスを切り替える例
統合のLambda関数の指定に、ステージ変数を使います。
arn:aws:lambda:リージョン:アカウントID:function:MyFunction:${stageVariables.lambdaAlias}
devステージ → lambdaAlias = dev
prodステージ → lambdaAlias = prod
こうすると、API Gatewayの設定を1つにしたまま、devステージはdevのエイリアス、prodステージはprodのエイリアスを、呼び出せます。前に整理した、エイリアスの付け替えと組み合わせると、環境の切り替えが、かなりすっきりします。
気をつけたい点
- Lambdaの呼び出し許可が必要:ステージ変数でLambdaを指定した場合は、その関数(エイリアスを含む)に、API Gatewayから呼び出す許可を、
add-permissionで設定する必要がある。設定しないと、500 Internal Server Errorになる。前に整理した、Lambdaの「呼び出し権限」の話と、つながる部分 - 機密情報は入れない:ステージ変数は、認証情報や秘密のデータの保存には向かない。そういう値は、Secrets Managerなどに預ける
まとめ
- ステージは、APIを公開する環境の単位で、ステージ変数は、ステージごとの名前と値のペア
- 参照は
${stageVariables.変数名}で、実行時にステージの値に置き換わる - Lambdaのエイリアスを切り替えれば、dev用とprod用を、1つのAPIで使い分けられる
- Lambdaを指定した場合は、呼び出し許可の設定が必要で、機密情報は入れない
エイリアスとステージ変数が、1つにつながって、環境の切り替えの仕組みがすっきり分かりました。それでは、また明日!

コメント