AWS Lambdaに新機能 Function URLs が追加されました。
簡単にいうとAPI Gatewayなしに、HTTPSでのリクエストを受け付けられるようになるものです。
API Gatewayなしで簡単になったよ!わーい!! ではなく、今までできなかった何ができるようになったのかを真面目に考えてみました。
Function URLsの認証
Function URLの認証はIAM認証あり
と認証なし
(パブリックアクセス)の二通りがあります。
IAM認証が使える環境であれば、以前からCLIやSDKを使ってLambdaを直接呼び出すことができました。
aws lambda invoke \
--function-name <value> \
<outfile>
また、cURLでもバージョン7.75.0から--aws-sigv4
というオプションが追加されており、IAM認証の情報があればCLIやSDKがなくてもhttpsアクセスでLambdaを呼び出すことができます。
curl \
-XPOST \
"https://lambda.ap-northeast-1.amazonaws.com/2015-03-31/functions/<function-name>/invocations" \
-H "Content-Type: application/json" \
-d '{ "key": "value" }' \
--aws-sigv4 "aws:amz:ap-northeast-1:lambda" \
--user "${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}"
IAM認証が使える環境であればFunction URLsの登場以前からできることは変わらないということになります。
そのため、Function URLsの存在意義は 「API Gatewayなし」「認証なし」でLambdaを呼び出せるところ だと思います。
API Gatewayの仕様制限の回避
API Gatewayの最大の制限は30秒でタイムアウトだと思います。
これを回避するためにはSQSを介して非同期化するなどの対策が必要でした。
API Gatewayを介さずにLambdaを呼べるとこの制約がなくなり、 30秒以上かかる処理を同期 で返却できるということになります。
Function URLsのユースケース
以上のことから、Function URLsが活用できる場面は、 認証が不要で30秒以上処理に時間がかかり同期的に結果を返す必要がある ではないかと考えました。🤔🤔
ただ、具体的にどんな場面かが思いつきませんでした。😥😥
AWSのブログでは、API Gatewayの高度な機能を必要としないときという表現がされているため、もしかすると 不特定多数のアクセスがあるような場合のコスト削減 が主なメリットなのかもしれません。
最後にAWSブログで紹介されている具体的なユースケースと私なりの考察を記載して終わりにします。
ユースケース | Function URLs利用のメリット |
---|---|
Webhookハンドラ | 大量のアクセスあり 認証は独自 処理時間は短い API Gatewayの利用料削減に期待 |
フォームバリデータ | 大量のアクセスあり 認証なし 処理時間は極端に短い API Gatewayの利用料削減に期待 |
モバイル決済処理 | 大量のアクセスあり 認証は独自 処理時間が30秒を超える可能性あり 30秒以上かかるとAPIはエラーを返却するが内部処理は成功するような不一致ケースが出てしまう。同期で正しくレスポンスを返却することに期待(もしかするとこのユースケースが最有力?)🤔🤔 |
広告掲載 | 大量のアクセスあり 認証なし 処理時間は極端に短い API Gatewayの利用料削減に期待 |
機械学習による推論 | アクセス頻度は低い 処理時間が30秒を超える可能性あり 処理に30秒以上かかる場合の動作改善に期待 |