AWS Lambdaを使ってサーバーレスでWeb APIを作る場合、Lambdaの呼び出し元としてAPI Gateway (API GW) もしくはApplication Load Balancer (ALB) のどちらかを選択することになる。この選択基準となる両者の違いを整理した。
API Gateway特有の機能
プロトコル・ポート番号
- API GWは443番でのHTTPS (TLS 1.2) のみをサポートする。(VPC Endpoint経由での呼び出しはできるが、この場合でもHTTPSのみとなる。)
- ALBは任意のポート番号でのHTTP/HTTPS(TLSバージョンも選択肢がある)をサポートする。
実行可能時間(タイムアウト時間)
- API GWは最長29秒までと制約が厳しい。
- ALBはLambdaのタイムアウトまで(最大15分)処理を続けることができる。
リクエスト・レスポンスサイズ
-
API GWでは、Lambdaの最大ペイロードサイズ(6MB)が上限となる。
- ペイロードサイズはLambdaのリクエスト・レスポンスとなるため、ヘッダやBase64エンコードされたボディを含む合計値となる。
- API GW自体の最大ペイロードサイズは10MBとなる。
-
ALBでは、リクエストボディは最大1MB(超過時は413エラー)、レスポンスボディも最大1MB(超過時は502エラー)となる。
Request Event(参考)
- evt.headers (Request)
- API GWでは大文字小文字を区別した状態で設定するが、ALBではヘッダ名は小文字化された状態で設定する。
- evt.queryStringParameters (Request)
- クエリストリングが指定されない場合、API GWは
null
を設定するが、ALBは{}
を設定する。 - クエリストリングのキー・バリューについて、API GatewayはURLデコードされた状態で設定するが、ALBはデコード前の状態で設定する。
- クエリストリングが指定されない場合、API GWは
- evt.multiValueHeaders / evt.multiValueQueryStringParameters (Request)
- API GWではデフォルトで設定されるが、ALBでは設定で有効化する必要がある。
Response Event(参考)
- ALBではstatusDescription、isBase64Encoded、headers(Multi Value Headerを有効化している場合はmultiValueHeder)の指定が必須となる。
コスト
- 一定のリクエスト頻度までであれば、時間課金があるALBよりも実行回数による課金であるAPI GWの方が安いが、大量のリクエストを受ける場合はALBの方が安くなる。(参考)
参考
-
Amazon Web Services ブログ
-
Amazon API GatewayがLambda関数をトリガするために使用するパラメータとALBのパラメータとの間には、多くのオーバーラップと共通性があります。
としか記述されていない。
-
- API Gateway vs Application Load Balancer—Technical Details
-
API Gateway vs. ALB - 持田システム
- 実行可能処理時間と返却可能レスポンスサイズの違いについて解説されている。