お久しぶりです。(ほ)です。

 

Serverless の流行に乗り遅れまいと AWS LambdaとAPI Gateway を触っていたのですが、
10月くらいから、Lambda function の作成時の仕様が変わったようです。

何が変わったのか?

一言でいうと、Lambda function を作った瞬間、API Gateway で新しいリソースがdeployされます。

「な…何を言っているのかわからねーと思うが、俺も何をされたのかわからなかった」

ジャン=ピエール・ポルナレフ

まさに、こんな感じです。
最初はいつもより設定項目が少ないなーなんて思っていた程度だったのですが、API Gateway の設定をしようとしたら見覚えのないリソースが追加されていて本当に驚きました。

どんな手順で発生するのか

1. API Gateway を作る

まず、LambdaのTriggerとなるAPIを作っておきます。
今回は ***demo というAPI に dev というステージがあります。(その他のリソースなどは気にしないでください。)

2. Lambda functionを作る(Trigger設定)

次に、Lambda function を作ります。
このとき、Triggerに API Gateway を選択します。作成時に blueprint で “microservice-http-endpoint” を選択すると自動で設定されています。

3. Lambda functionを作る(Lambda function 設定)

Lambda functionに名前を付けます。今回、Lambda function の名前は “lambda-function-name” としました。

その他の項目を埋めて Next ボタンを押すと、Lambda function の出来上がりです。

4. API Gateway の確認

あら不思議、先ほど作成した “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側から行った方が無難だと思います。