ただメモができるだけのブラウザアプリ「TextArea」はこちらw

API Gateway不要!? Lambda関数URLでのAPI構築について考える

Lambda関数URLの使い方!!

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関数をウェブリクエストに対応させることができます。

主な特徴

  1. 直接アクセス可能: Lambda関数に対して直接HTTPリクエストを送信可能なURLが生成されます。
  2. 簡易な設定: API Gatewayを設定する必要がなく、簡単にHTTPエンドポイントを作成できます。
  3. セキュリティ設定: IAM(Identity and Access Management)ポリシーを使用して、アクセス制御を行うことができます。

Lambda関数URLの利点

Lambda関数URLを使用することによる利点は次のとおりです。

  1. 簡単なセットアップ: API Gatewayを使用せずにLambda関数を呼び出すため、API Gatewayのセットアップと管理の手間が省けます。Lambda関数URLは、Lambda関数を公開するための単一のエンドポイントです。
  1. 遅延の低減: API Gatewayを経由せずにLambda関数を直接呼び出すため、API Gatewayによる遅延がなくなります。これにより、リクエストとレスポンスの処理が高速化されます。
  1. コストの削減: Lambda関数URLを使用することでAPI Gatewayのコストを削減することができます。

次はAPI Gatewayについて記載していきます。

API Gatewayとは

API Gatewayは、APIの作成、デプロイ、管理を簡単に行えるツールです。API Gatewayを利用することで、RESTful APIやWebSocket APIを構築し、バックエンドサービスにアクセスするためのエンドポイントを提供することができます。

主な特徴

  1. API作成とデプロイ: APIのエンドポイントを簡単に作成し、デプロイできます。これにより、フロントエンドとバックエンドの間でデータをやり取りするためのインターフェースを構築できます。
  2. トラフィック管理: スロットリング(リクエスト制限)、キャッシング、モニタリングなどのトラフィック管理機能を提供します。
  3. セキュリティ: IAMポリシー、Cognito、APIキー、OAuth 2.0などを使った認証・認可をサポートし、APIのセキュリティを強化します。
  4. 統合: Lambda関数、EC2、DynamoDB、S3などのAWSサービス、さらにはオンプレミスのシステムとも統合できます。
  5. スケーラビリティと可用性: 自動スケーリングと高可用性が保証されており、大規模なトラフィックにも対応可能です。

API Gatewayの利点

API Gatewayの利点は次のとおりです。

  1. セキュリティ: API Gatewayは、APIの認証や承認を行うためのセキュリティ機能を提供します。APIキー、IAMロール、カスタム認証などを使用して、APIのアクセスを制御することができます。
    1. アクセス制御: API Gatewayは、APIのエンドポイントへのアクセス制御を行うための機能を提供します。IP制限、ユーザー認証、アクセスポリシーなどを使用して、APIの使用を管理することができます。これにより、APIの不正利用や過度の負荷を防ぐことができます。

    それでは、次にLambda関数とAPI GatewayでどのようにAPIを構築すれば良いか記載していきます。

      どのようにLambdaのAPIを構築すればいいか

      LambdaのAPIは

      • Lambda関数URLを使用
      • API Gatewayを使用してLambdaを実行

      などいろいろな構築方法があります。実際に構築方法を5つ紹介し、それぞれ特徴やメリットとデメリットについて記載していきます。

      方式使用するAWSサービス概要
      API Gateway×LambdaAPI Gateway

      Lambda

      最もオーソドックスな方式

      API Gatewayの利点を活かせる

      API Gatewayのタイムアウトの上限は29 秒(上限緩和申請可能)なので、29秒以上の処理はエラーとなる

      API Gateway×Step Functions×LambdaAPI Gateway

      Step Functions

      Lambda

      API Gatewayの利点を活かせる

      API Gatewayのタイムアウトの上限の29 秒(上限緩和申請可能)を超えた処理を実行できる

      Lambda関数URLLambdaLambda関数URLのエンドポイントURLにアクセスすることで簡単にLambdaを実行できる

      簡単にLambda実行できるので、セキュリティ面が懸念

      タイムアウトはLambdaのタイムアウトの15分

      CloudFront×Lambda関数URLCloudFront

      Lambda

      CloudfrontのOAC を利用して Lambda関数URLを実行する

      Lambda関数URLの実行をCloudFront経由のみに絞れる(CloudFront経由以外はエラーにできる)

      CloudFrontのWAF設定等を活かせる

      タイムアウトはCloudFrontのタイムアウトの60秒(上限緩和申請可能)

      Lambda関数URL(署名付きURL化)LambdaS3の署名付き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に、タイムアウトの上限は、引き上げ可能となりました。詳細は以下の記事をご参照ください。

      AWS API Gatewayの統合タイムアウト制限の29秒が、30秒以上に引き上げ可能になった
      Amazon API Gatewayの統合タイムアウト制限を従来の29秒から延長できるようになりました。統合タイムアウトは29秒のままだけど、引き上げは可能になったよということです。

      メリット

      最もオーソドックスな方式のため、実装難易度が低い

      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

      CloudfrontのOAC を利用した Lambdaの 関数URL実行を試してみた | DevelopersIO
      Cloudfront OAC が Lambda関数URLをサポート。 オリジンのLambda関数URLが第三者により直接実行される事を簡単に回避できるようになりました。

      Lambda関数URL(署名付きURL化)

      使用するAWSサービス

      Lambda

      概要

      S3の署名付きURLと同じことをLambdaの関数URLでやるイメージ

      署名付きURLの場合のみLambdaを実行可能

      タイムアウトはLambdaのタイムアウトの15分

      メリット

      実装難易度が低い

      比較的に安全にLambdaを実行できる。(署名付きURLを持っている場合のみLambdaを実行できる)

      タイムアウトはLambdaのタイムアウトの15分

      デメリット

      署名付きURLを発行する仕組みが別途必要

      構築方法参照URL

      実はLambdaの関数URLは署名付きURL化できるよ、29秒の壁も越えられるよ、という話 - Qiita
      この記事を2行でS3の署名付きURLと同じことが、Lambdaの関数URLにもできますLambdaの署名付きURLを使えば、APIGatewayの29秒タイムアウトを超えてLambdaを実行でき…

      どのサービスを使えばよいか

      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」が良いと思われます。

      スポンサーリンク
      AWS
      フォローする
      さゆフィクション