API Gateway+AWSLambdaで開発・本番のバージョン管理
API Gatewayで本番・開発それぞれにエンドポイントを用意して
実行するAWS Lambda関数を切り替える方法です。
以下のように開発(dev)では常に最新バージョンを参照し、
本番(prod)では特定のバージョンを参照するような想定です。
https://xxx.execute-api.ap-northeast-1.amazonaws.com/prod/app/print
https://xxx.execute-api.ap-northeast-1.amazonaws.com/dev/app/print
サンプルAWS Lambda関数の作成
単純にバージョン番号を返すだけの関数を作成します。
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps("this function is version 1.")
}
関数を作成しただけではバージョンは作成されないので
バージョンを発行します。
「バージョンタブ」 → 「新しいバージョンを発行」でバージョン1を発行します。
バージョン1のARNは以下のようになります。最後の「1」がバージョンです。
arn:aws:lambda:ap-northeast-1:xxx:function:funcname:1
AWS Lambdaのエイリアス作成
エイリアスを作成し、エンドポイントを切り替えれるようにします。
devとprodの2つのエイリアスを作成し、バージョンを紐付けます。
devは最新バージョン、prodは「1」に紐付けます。
エイリアス名 | バージョン |
---|---|
dev | $LATEST |
prod | 1 |
API GatewayでAWS Lambdaエイリアスとの紐付け
Lambdaと関連付けているメソッドのページから「統合リクエスト」へ移動します。
「Lambda関数」の項目で鉛筆マークを押して編集します。
関数名の後ろに:${stageVariables.alias}を付けて保存します。
「stageVariables」はステージ変数になり、実際の設定はこのあと行います。
保存すると権限を追加するためのスクリプトが生成され、
ポップアップで表示されるのでスクリプトを控えておきます。
控えたスクリプトの中で${stageVariables.alias}の部分を
任意の値に置き換えてCLIで実行します。
今回の場合、dev, prodを用意するので、それぞれに置き換えて
2回CLIを実行します。
prodとdevのステージを作成し、デプロイを行います。
デプロイ後にステージ変数を追加します。
これで先程設定した${stageVariables.alias}の値が
設定した値で置き換わるようになります。
対象ステージ | ステージ変数名 | ステージ変数の値 |
---|---|---|
dev | alias | dev |
prod | alias | prod |
テスト
Lambda関数の実装を以下のように更新してデプロイします。
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps("this function is version 2.")
}
devとprodそれぞれのエンドポイントを叩いてレスポンスが変わることを確認。
curl https://xxx.execute-api.ap-northeast-1.amazonaws.com/dev/app/print
curl https://xxx.execute-api.ap-northeast-1.amazonaws.com/prod/app/print
参考
AWS Lambdaを新機能バージョニングとエイリアスでBlue-Green Deploymentする #reinvent
以上
Author And Source
この問題について(API Gateway+AWSLambdaで開発・本番のバージョン管理), 我々は、より多くの情報をここで見つけました https://qiita.com/cloud-solution/items/81be9921fb7c0b74ea69著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .