Lambda関数URLで、HTTPリクエストを介して直接Lambda関数を呼び出すことが可能になりました。
これまで、Lambda関数をAPI経由で実行するためにはAPI Gatewayを使用する必要がありました。しかし、Lambda関数URLの登場により、API Gatewayを使わずにLambda関数を直接実行できるようになりました。
Lambda関数URLを使うと、API Gatewayのセットアップや管理の手間を省けます。また、API Gatewayが引き起こす遅延やコストも削減できます。
ただし、API Gatewayには多くの利点もあります。
この記事では、Lambda関数URLの利用方法とその利点、注意点について詳しく解説します。Lambda関数とAPI Gatewayのどちらを選ぶか迷っている方は、ぜひ参考にしてください。
Lambda関数URLとは
Lambda関数URLは、Lambdaで提供される機能の一つで、直接HTTPリクエストを受け取ることができるエンドポイントURLをLambda関数に対して自動的に生成するものです。
この機能により、API Gatewayなどの中間サービスを使用せずに、簡単にLambda関数をウェブリクエストに対応させることができます。
主な特徴
- 直接アクセス可能: Lambda関数に対して直接HTTPリクエストを送信可能なURLが生成されます。
- 簡易な設定: API Gatewayを設定する必要がなく、簡単にHTTPエンドポイントを作成できます。
- セキュリティ設定: IAM(Identity and Access Management)ポリシーを使用して、アクセス制御を行うことができます。
Lambda関数URLの利点
Lambda関数URLを使用することによる利点は次のとおりです。
- 簡単なセットアップ: API Gatewayを使用せずにLambda関数を呼び出すため、API Gatewayのセットアップと管理の手間が省けます。Lambda関数URLは、Lambda関数を公開するための単一のエンドポイントです。
- 遅延の低減: API Gatewayを経由せずにLambda関数を直接呼び出すため、API Gatewayによる遅延がなくなります。これにより、リクエストとレスポンスの処理が高速化されます。
- コストの削減: Lambda関数URLを使用することでAPI Gatewayのコストを削減することができます。
次はAPI Gatewayについて記載していきます。
API Gatewayとは
API Gatewayは、APIの作成、デプロイ、管理を簡単に行えるツールです。API Gatewayを利用することで、RESTful APIやWebSocket APIを構築し、バックエンドサービスにアクセスするためのエンドポイントを提供することができます。
主な特徴
- API作成とデプロイ: APIのエンドポイントを簡単に作成し、デプロイできます。これにより、フロントエンドとバックエンドの間でデータをやり取りするためのインターフェースを構築できます。
- トラフィック管理: スロットリング(リクエスト制限)、キャッシング、モニタリングなどのトラフィック管理機能を提供します。
- セキュリティ: IAMポリシー、Cognito、APIキー、OAuth 2.0などを使った認証・認可をサポートし、APIのセキュリティを強化します。
- 統合: Lambda関数、EC2、DynamoDB、S3などのAWSサービス、さらにはオンプレミスのシステムとも統合できます。
- スケーラビリティと可用性: 自動スケーリングと高可用性が保証されており、大規模なトラフィックにも対応可能です。
API Gatewayの利点
API Gatewayの利点は次のとおりです。
- セキュリティ: API Gatewayは、APIの認証や承認を行うためのセキュリティ機能を提供します。APIキー、IAMロール、カスタム認証などを使用して、APIのアクセスを制御することができます。
- アクセス制御: API Gatewayは、APIのエンドポイントへのアクセス制御を行うための機能を提供します。IP制限、ユーザー認証、アクセスポリシーなどを使用して、APIの使用を管理することができます。これにより、APIの不正利用や過度の負荷を防ぐことができます。
それでは、次にLambda関数とAPI GatewayでどのようにAPIを構築すれば良いか記載していきます。
どのようにLambdaのAPIを構築すればいいか
LambdaのAPIは
- Lambda関数URLを使用
- API Gatewayを使用してLambdaを実行
などいろいろな構築方法があります。実際に構築方法を5つ紹介し、それぞれ特徴やメリットとデメリットについて記載していきます。
方式 | 使用するAWSサービス | 概要 |
API Gateway×Lambda | API Gateway Lambda | 最もオーソドックスな方式 API Gatewayの利点を活かせる API Gatewayのタイムアウトの上限は29 秒(上限緩和申請可能)なので、29秒以上の処理はエラーとなる |
API Gateway×Step Functions×Lambda | API Gateway Step Functions Lambda | API Gatewayの利点を活かせる API Gatewayのタイムアウトの上限の29 秒(上限緩和申請可能)を超えた処理を実行できる |
Lambda関数URL | Lambda | Lambda関数URLのエンドポイントURLにアクセスすることで簡単にLambdaを実行できる 簡単にLambda実行できるので、セキュリティ面が懸念 タイムアウトはLambdaのタイムアウトの15分 |
CloudFront×Lambda関数URL | CloudFront Lambda | CloudfrontのOAC を利用して Lambda関数URLを実行する Lambda関数URLの実行をCloudFront経由のみに絞れる(CloudFront経由以外はエラーにできる) CloudFrontのWAF設定等を活かせる タイムアウトはCloudFrontのタイムアウトの60秒(上限緩和申請可能) |
Lambda関数URL(署名付きURL化) | Lambda | S3の署名付きURLと同じことを、Lambdaの関数URLでやるイメージ 署名付きURLの場合のみLambdaを実行可能 タイムアウトはLambdaのタイムアウトの15分 |
5つのAPI実行方式の詳細
API Gateway×Lambda
使用するAWSサービス
API Gateway
Lambda
概要
最もオーソドックスな方式
API Gatewayの利点を活かせる
API Gatewayのタイムアウトの上限は29 秒(上限緩和申請可能)なので、29秒以上の処理はエラーとなる
2024.6.4に、タイムアウトの上限は、引き上げ可能となりました。詳細は以下の記事をご参照ください。
メリット
最もオーソドックスな方式のため、実装難易度が低い
API Gatewayの利点を活かせる
デメリット
API Gatewayのタイムアウトの上限は29 秒(上限緩和申請可能)なので、29秒以上の処理はエラーとなる
API Gatewayのコストがかかる
API Gateway×Step Functions×Lambda
使用するAWSサービス
API Gateway
Step Functions
Lambda
概要
API Gatewayの利点を活かせる
API Gatewayのタイムアウトの上限の29 秒(上限緩和申請可能)を超えた処理を実行できる
メリット
API Gatewayの利点を活かせる
API Gatewayのタイムアウトの上限の29 秒(上限緩和申請可能)を超えた処理を実行できる。基本的にLambdaのタイムアウトの上限15分までは実行可能。
Step Functionsの機能を活かせる。Lambdaを複数呼び出したり
デメリット
API Gateway/Step Funcstionsのコストがかかる
Step Funcstionsが入る分、実装難易度が高い
Lambda関数URL
使用するAWSサービス
Lambda
概要
Lambda関数URLのエンドポイントURLにアクセスすることで簡単にLambdaを実行できる
簡単にLambda実行できるので、セキュリティ面が懸念
タイムアウトはLambdaのタイムアウトの15分
メリット
実装難易度が低い
API Gatewayのタイムアウトの上限の29 秒(上限緩和申請可能)を超えた処理を実行できる。Lambdaのタイムアウトの上限15分までは実行可能。
デメリット
セキュリティ面が懸念。独自に対策する必要がある
CloudFront×Lambda関数URL
使用するAWSサービス
CloudFront
Lambda
概要
CloudfrontのOAC を利用して Lambda関数URLを実行する想定
Lambda関数URLの実行をCloudFront経由のみに絞れる(CloudFront経由以外はエラーにできる)
CloudFrontのWAF設定等を活かせる
タイムアウトはCloudFrontのタイムアウトの60秒(上限緩和申請可能)
メリット
実装難易度が低い
CloudFrontのWAF設定等を活かせる
デメリット
タイムアウトはCloudFrontのタイムアウトの60秒(上限緩和申請可能)
構築方法参照URL
Lambda関数URL(署名付きURL化)
使用するAWSサービス
Lambda
概要
S3の署名付きURLと同じことをLambdaの関数URLでやるイメージ
署名付きURLの場合のみLambdaを実行可能
タイムアウトはLambdaのタイムアウトの15分
メリット
実装難易度が低い
比較的に安全にLambdaを実行できる。(署名付きURLを持っている場合のみLambdaを実行できる)
タイムアウトはLambdaのタイムアウトの15分
デメリット
署名付きURLを発行する仕組みが別途必要
構築方法参照URL
どのサービスを使えばよいか
29秒以内に処理が終わる場合
以下のいずれかを選択するのが良いかと思われます。
- API Gateway×Lambda
- CloudFront×Lambda関数URL
API GateWayの機能を活かしたい場合は「API Gateway×Lambda」を選択しましょ
30秒〜60秒以内に処理が終わる場合
実装難易度とセキュリティ面から「CloudFront×Lambda関数URL」が良いと思われます。
1分〜15分処理に時間がかかる場合
以下のいずれかを選択するのが良いかと思われます。
- API Gateway×Step Functions×Lambda
- Lambda関数URL(署名付きURL化)
API GateWayの機能を活かしたいか、Step Functionsの実装コストをどう捉えるかを検討して、上記の中から選択するのが良いと思います。
テスト用にとにかく簡単に動かしたい
実装難易度の面から「Lambda関数URL」が良いと思われます。