AWS

【AWS】LambdaをHTTP接続する2つの方法(①API Gateway + Lambda, ②Lambda Function URLs)

AWS
この記事は約4分で読めます。

はじめに

インプルの矢島です。

最近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のコンソール画面から、新しい関数を作成します。関数名は任意で大丈夫です。

API Gatewayを作成

API Gatewayのコンソール画面より、APIの作成します。

色々選択できますが、REST APIを選択します。(REST APIとはHTTP APIよりも多くの機能をサポートしています。詳細はこちら

以下の画像のようにAPIの作成をします。API名は任意で大丈夫です。

次にアクセスするメソッドを作成します。「アクション」より「メソッドの作成」を押下してください。

作成ができたら、GETメソッドを選択します。

GETを選択したら、セットアップします。
・統合タイプをLambda関数に選択して、Lambda関数を選択
・Lambda関数を先ほど作成したLambda関数名を入力

GETメソッドでLambdaが呼ばれるようになりました。

先ほど作成したLambda関数を開くと、API Gatewayがトリガーで追加されていました。

まだ、このままではHTTP接続できないため、外部で公開されるようにデプロイする必要があります。
「アクション」より「APIのデプロイ」を選択します。

デプロイされるステージは新しいステージを選択します。ステージ名は任意で大丈夫です。

※ステージ名とはurlの際に、リソースの前のパスとなります。開発環境と本番環境などで分けて管理する時に使用します。(例、https://{URL} /{ステージ名}/{リソース} )

作成すると、以下の画面が表示されます。
URLを押下すると、Lambda関数の結果が送信されます。

URLを押下すると以下の通り、Lambdaの結果が返ってきました。HTTP接続成功です。

Lambda Function URLs (2022年4月〜)

次に、2022年4月からの機能提供されたLambda Function URLsの有効化の手順について解説します。
Lambdaのコンソール画面より、新しい関数の作成をします。関数名は任意で大丈夫です。

詳細設定時に関数URLにチェックをいれます。(今回は認証タイプはNone)

作成後、分かりやすいように、コードソースから返却する値を変更してデプロイしました。

関数URLのURLを押下すると、作成した関数の結果が表示されます。

無事表示されました!

料金の比較

まず、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を勉強する良い機会になりました~
これからも学習した内容を続けて発信していけたらと思います。

参考