お久しぶりです。(ほ)です。
Serverless の流行に乗り遅れまいと AWS LambdaとAPI Gateway を触っていたのですが、
10月くらいから、Lambda function の作成時の仕様が変わったようです。
一言でいうと、Lambda function を作った瞬間、API Gateway で新しいリソースがdeployされます。
「な…何を言っているのかわからねーと思うが、俺も何をされたのかわからなかった」
ジャン=ピエール・ポルナレフ
まさに、こんな感じです。
最初はいつもより設定項目が少ないなーなんて思っていた程度だったのですが、API Gateway の設定をしようとしたら見覚えのないリソースが追加されていて本当に驚きました。
まず、LambdaのTriggerとなるAPIを作っておきます。
今回は ***demo というAPI に dev というステージがあります。(その他のリソースなどは気にしないでください。)
![](/blog/entry/1967/main/02/teaserItems1/01/binaryNodeName/APIGateway_before-300x221.png)
次に、Lambda function を作ります。
このとき、Triggerに API Gateway を選択します。作成時に blueprint で “microservice-http-endpoint” を選択すると自動で設定されています。
![](/blog/entry/1967/main/03/teaserItems1/01/binaryNodeName/Lambda_apigateway_open-300x184.png)
Lambda functionに名前を付けます。今回、Lambda function の名前は “lambda-function-name” としました。
![](/blog/entry/1967/main/04/teaserItems1/01/binaryNodeName/Lambda_code1-300x112.png)
その他の項目を埋めて Next ボタンを押すと、Lambda function の出来上がりです。
![](/blog/entry/1967/main/04/teaserItems1/02/binaryNodeName/Lambda_created-300x112.png)
あら不思議、先ほど作成した “lambda-function-name” と同名のリソースが出来ているじゃないですか。
しかも “DELETE”, “GET”, “HEAD”, “OPTION”, “PATCH”, “POST”, “PUT”の7種のメソッドが作られた状態でdeployされています。
![](/blog/entry/1967/main/05/teaserItems1/00/binaryNodeName/APIGateway_deploy-300x267.png)
仕様変更前までは、Lambda function 作成時に Trigger となるAPI Gatewayの設定項目として下記が可能でした。
- API name
- Resource name(仕様変更で設定できなくなった)
- Method(仕様変更で設定できなくなった)
- Deployment stage
![](/blog/entry/1967/main/05/teaserItems1/03/binaryNodeName/Old_Lambda-300x221.png)
しかし、設定できるのが API Name と Deployment statge だけになったためにこのような仕様に変わったようです。
いきなり deploy はちょっと怖いので、Lambda function の Trigger設定はAPI Gateway側から行った方が無難だと思います。