はじめに
インプルの矢島です。
最近AWSについてよく勉強しているので、今回は、AWS LambdaのHTTP接続する2つの方法を比較・解説します。
LambdaをHTTP接続する方法は2つあります。1つ目が一般的であるAPI Gateway と Lambdaを連携させる方法です。2つ目が2022年4月から新しくLambdaに機能追加された関数URLを有効にする方法です。
構築手順の比較
LambdaをHTTP接続する2つの手段の設定手順をご紹介します。
API Gateway + Lambda
最初に、従来からのやり方であるAPI GatewayをトリガーにしてLambdaに接続する手順をご紹介します。
Lambda関数を作成
Lambdaのコンソール画面から、新しい関数を作成します。関数名は任意で大丈夫です。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-19.06.08.png?resize=1084%2C774&ssl=1)
API Gatewayを作成
API Gatewayのコンソール画面より、APIの作成します。
色々選択できますが、REST APIを選択します。(REST APIとはHTTP APIよりも多くの機能をサポートしています。詳細はこちら)
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-19.36.57.png?resize=949%2C838&ssl=1)
以下の画像のようにAPIの作成をします。API名は任意で大丈夫です。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-19.39.50.png?resize=1164%2C638&ssl=1)
次にアクセスするメソッドを作成します。「アクション」より「メソッドの作成」を押下してください。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.01.59.png?resize=259%2C341&ssl=1)
作成ができたら、GETメソッドを選択します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.02.10.png?resize=226%2C108&ssl=1)
GETを選択したら、セットアップします。
・統合タイプをLambda関数に選択して、Lambda関数を選択
・Lambda関数を先ほど作成したLambda関数名を入力
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.03.59-1.png?resize=940%2C531&ssl=1)
GETメソッドでLambdaが呼ばれるようになりました。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.05.34.png?resize=947%2C602&ssl=1)
先ほど作成したLambda関数を開くと、API Gatewayがトリガーで追加されていました。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.12.29.png?resize=1062%2C486&ssl=1)
まだ、このままではHTTP接続できないため、外部で公開されるようにデプロイする必要があります。
「アクション」より「APIのデプロイ」を選択します。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.23.56.png?resize=349%2C452&ssl=1)
デプロイされるステージは新しいステージを選択します。ステージ名は任意で大丈夫です。
※ステージ名とはurlの際に、リソースの前のパスとなります。開発環境と本番環境などで分けて管理する時に使用します。(例、https://{URL} /{ステージ名}/{リソース} )
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.24.24.png?resize=643%2C424&ssl=1)
作成すると、以下の画面が表示されます。
URLを押下すると、Lambda関数の結果が送信されます。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.24.57-1.png?resize=896%2C691&ssl=1)
URLを押下すると以下の通り、Lambdaの結果が返ってきました。HTTP接続成功です。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-06-14.25.11.png?resize=564%2C141&ssl=1)
Lambda Function URLs (2022年4月〜)
次に、2022年4月からの機能提供されたLambda Function URLsの有効化の手順について解説します。
Lambdaのコンソール画面より、新しい関数の作成をします。関数名は任意で大丈夫です。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-13.44.34.png?resize=1045%2C828&ssl=1)
詳細設定時に関数URLにチェックをいれます。(今回は認証タイプはNone)
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-13.44.51.png?resize=1035%2C780&ssl=1)
作成後、分かりやすいように、コードソースから返却する値を変更してデプロイしました。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-13.47.39.png?resize=1055%2C380&ssl=1)
関数URLのURLを押下すると、作成した関数の結果が表示されます。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-13.47.48-1.png?resize=510%2C287&ssl=1)
無事表示されました!
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-05-18.45.36.png?resize=425%2C79&ssl=1)
料金の比較
まず、Lambdaの従量課金はどちらの方法も発生します。
API Gateway(REST API) に関しては、APIコール数に応じて、料金がかかります。ただし、API Gateway は、最大 12 か月間で1 か月あたり 100 万回の API コールを無料利用できます。
Lambda URLの有効化は追加費用なしでご利用いただけます。
特性の比較
API Gateway + Lambdaは、以下の優位性があります。
- WAFを使用できる
- API Keyによる認証
- カスタムドメイン
- リクエストの検証
Lambda URLは、以下の優位性があります。
- 最大15分の処理を実行できる(API Gatewayは30秒)
- 構築が簡単
公式によると、API Gatewayの上記で紹介した機能を必要としない、単一機能のマイクロサービスを実装する時に最適とのことです。例えば、フォームバリデータ、モバイル決済処理、広告掲載、機械学習推論などを実装する場合などが考えられるようです。
まとめ
API GatewayとLambda Function URLsそれぞれ、適切なユースケースがあることが分かりました。
まだ、API Gatewayの方が自由度は高そうですが、Lambda Function URLsは構築がとても簡単でよさそうです。
私自身もAWSを勉強する良い機会になりました~
これからも学習した内容を続けて発信していけたらと思います。