やりたいこと↓。
1つのLambda関数を作成し、それぞれのエイリアスを、各ステージにデプロイする。
大まかな手順は以下のとおりです。
1.Lambdaで新しいバージョンを発行する。
2.Lambdaでエイリアスを作成し、紐づける。
3.APIGatewayでステージ変数を参照する設定をする。
4.Lambda関数に権限を追加する。
5.ステージ変数を追加する。
それではやってみます。
#1.Lambdaで新しいバージョンを発行する。#
#2.Lambdaでエイリアスを作成し、紐づける。#
「dev」→「バージョン:$LATEST」
「ops」→「バージョン:1」
と同じように2つ作成します。
「dev」→「バージョン:$LATEST」のLambda関数は何かしら、変更を加えておいた方が後から動作を確認しやすいかと思います。
#3.APIGatewayでステージ変数を参照する設定をする。#
Lambda関数に後ろに、:${stageVariables.alias}
をつけます。
#4.Lambda関数に権限を追加する。#
$ aws lambda add-permission --function-name arn:aws:lambda:ap-northeast-1:123456789012:function:mylambda:dev --source-arn arn:aws:execute-api:ap-northeast-1:123456789012:79knnfwq4f/*/GET/ --principal apigateway.amazonaws.com --statement-id 48be8170-282c-42c6-bf64-000000000000 --action lambda:InvokeFunction
{
"Statement": "{\"Sid\":\"48be8170-282c-42c6-bf64-36c6a9a3d95c\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:ap-northeast-1:123456789012:function:mylambda:dev\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:ap-northeast-1:123456789012:79knnfwq4f/*/GET/\"}}}"
}
$ aws lambda add-permission --function-name arn:aws:lambda:ap-northeast-1:123456789012:function:mylambda:ops --source-arn arn:aws:execute-api:ap-northeast-1:123456789012:79knnfwq4f/*/GET/ --principal apigateway.amazonaws.com --statement-id 48be8170-282c-42c6-bf64-000000000000 --action lambda:InvokeFunction
"Statement": "{\"Sid\":\"48be8170-282c-42c6-bf64-36c6a9a3d95c\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:ap-northeast-1:123456789012:function:mylambda:ops\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:ap-northeast-1:123456789012:79knnfwq4f/*/GET/\"}}}"
}
#5.ステージ変数を追加する。#
「dev」と「ops」2つにステージを作成し[ステージ変数]を設定します。
[ステージ変数]がない場合は「$LATEST」でアクセスされますが
これで、それぞれのAPIへアクセスすると、1つのLambda関数がそれぞれのステージにデプロイすることができました。