API Gateway | さゆフィクション http://it.kensan.net aws wordpress などなどゆるーく書いてます Thu, 06 Jun 2024 00:31:13 +0000 ja hourly 1 https://wordpress.org/?v=6.7.1 https://it.kensan.net/wp-content/uploads/2023/03/cropped-icon-32x32.png API Gateway | さゆフィクション http://it.kensan.net 32 32 AWS API Gatewayの統合タイムアウト制限の29秒が、30秒以上に引き上げ可能になった https://it.kensan.net/amazon-api-gateway-limit-29.html Wed, 05 Jun 2024 04:44:34 +0000 http://35.78.77.41/it/?p=2023 AWS API Gatewayの統合タイムアウト制限の29秒が、30秒以上に引き上げ可能になったようです。

以下の記事に詳細記載されています。

Amazon API Gateway integration timeout limit increase beyond 29 seconds - AWS
Discover more about what's new at AWS with Amazon API Gateway integration timeout limit increase beyond 29 seconds

以下要約です。

  • タイムアウト延長: 以前の29秒からそれ以上に設定可能。
  • 対象API: リージョナルREST APIおよびプライベートREST API。
  • 使用例: Generative AIなど、長時間処理を必要とするワークロードに対応。
  • 追加費用: 追加費用なしで利用可能。
  • 制限: アカウントレベルでクォータ制限の調整が必要。

要するに、統合タイムアウトは29秒のままだけど、30秒以上に引き上げは可能になったよということです。

Service Quotasを確認すると以下の通り、統合タイムアウトが、アカウントレベルでの引き上げリクエスト可能になっています。

 

]]>
API Gateway不要!? Lambda関数URLでのAPI構築について考える https://it.kensan.net/lambdafunctionurl-api-gateway.html Sat, 25 May 2024 04:03:57 +0000 http://35.78.183.95/it/?p=1944

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×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に、タイムアウトの上限は、引き上げ可能となりました。詳細は以下の記事をご参照ください。

      https://it.kensan.net/it/amazon-api-gateway-limit-29.html

      メリット

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

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

      ]]>
      API Gateway(REST API)とLambda(Python)でBOM付きUTF8なCSVをレスポンスする方法 https://it.kensan.net/api-gateway-lambdapython-bom-utf8-csv.html Thu, 19 Oct 2023 18:51:22 +0000 http://3.113.9.194/it/?p=1741 API Gateway(REST API)とLambda(Python)の構成で、LambdaでBOM付きUTF8のCSVを作成して、API Gateway経由でCSVをレスポンスする方法を記載します。

      BOM付きUTF8とすることで外字が文字化けしないCSVをAPI Gateway経由でダウンロードできます。

      やること

      AWSの構成はAPI GatewayとLambda
      使用する言語はPython
      外字が文字化けしないCSVをダンロードできるようにする
      →BOM付きUTF8とすることで文字化け対策ができます。

      Lambdaの作成

      以下のソースコードでLambdaを作成します。

      
      
      def lambda_handler(event, context):
          body_str = """column1,column2
      "㐂","昱"
      """
          return {
              'statusCode': 200,
              'isBase64Encoded': True,
              'headers': {
                  'Access-Control-Allow-Origin': '*',
                  'Access-Control-Allow-Credentials': True,
                  'Content-Type': "application/vnd.ms-excel",
                  'Content-disposition': "attachment; filename=hoge.csv" # CSVファイル名を指定
              },
              'body': f'\ufeff{body_str}' # BOMを設定
          }
      
      

      「body_str」がレスポンスするCSVの中身になりますので適宜調整します。

      次はAPI Gatewayです

      API Gatewayの設定

      REST APIを新規作成します。特に気にする設定項目はないので、とにかくREST APIを作成です。

      次にメソッドを追加します。このとき、以下の画面のように「Lambda プロキシ統合の使用」にチェックを入れておきます。

      API-Gatewayメソッド追加

      API-Gatewayメソッド追加

      Lambda プロキシ統合の使用」にチェックを入れないと、Lambdaで返却したJSONがそのままレスポンスボディとして返却され、CSVではなく、ヘッダ情報を含んだJSONがレスポンスされてしまう現象にハマります。

      最後にAPIをデプロイします。

      動作確認

      API GatewayのステージからURLを確認し、ブラウザでアクセスします。

      この時、メソッドやパスは、作成したAPI Gatewayに沿ったものを設定する必要があります。

      URLにアクセスするとCSVダウンロードができ、文字化けもしていないかと思います。

      まとめ

      API Gateway(REST API)とLambda(Python)の構成で、CSVダウンロードできました!

      Lambdaにはリクエストとレスポンスの上限サイズとして、それぞれ 6 MBが上限という制限があります。6MB以上のCSVはLambdaではレスポンスできないということです。

      大きいCSVファイルを扱うには、LambdaでCSVを作成して、S3に保存して、ユーザーにはS3のデータをダウンロードしてもらった方が良さそうですね。

      ]]>