LoginSignup
7
9

More than 3 years have passed since last update.

ステージごとにAPIを作成することなく 各ステージごとにバックエンドポイントを振りわける

Last updated at Posted at 2020-01-07

やりたいこと↓。
1つのLambda関数を作成し、それぞれのエイリアスを、各ステージにデプロイする。

大まかな手順は以下のとおりです。

1.Lambdaで新しいバージョンを発行する。
2.Lambdaでエイリアスを作成し、紐づける。
3.APIGatewayでステージ変数を参照する設定をする。
4.Lambda関数に権限を追加する。
5.ステージ変数を追加する。

それではやってみます。

1.Lambdaで新しいバージョンを発行する。

「新しいバージョンを発行」
image.png

「バージョン:1」を作成しておきます。
image.png

2.Lambdaでエイリアスを作成し、紐づける。

「エイリアスの作成」
image.png

「dev」→「バージョン:$LATEST」
「ops」→「バージョン:1」
 と同じように2つ作成します。
image.png

「dev」→「バージョン:$LATEST」のLambda関数は何かしら、変更を加えておいた方が後から動作を確認しやすいかと思います。

3.APIGatewayでステージ変数を参照する設定をする。

Lambda関数に後ろに、:${stageVariables.alias}をつけます。
image.png

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つにステージを作成し[ステージ変数]を設定します。
image.png

[ステージ変数]がない場合は「$LATEST」でアクセスされますが
これで、それぞれのAPIへアクセスすると、1つのLambda関数がそれぞれのステージにデプロイすることができました。

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