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