📝

API Gateway の統合タイムアウトが Lambda オーソライザーに適用されるかどうかを確認してみた

に公開

Lambda オーソライザーには適用されませんでした。

検証手順

API Gateway Lambda オーソライザーを使用する - Amazon API Gateway
上記ドキュメントのコードをもとに Lambda オーソライザー用の関数を作成しました。
ハンドラー関数内で 4 秒のスリープ処理を追記してあります。
また、Lambda 関数のタイムアウトは 5 秒に設定しました。

index.js
exports.handler = async function (event, context, callback) {
  await new Promise(resolve => setTimeout(resolve, 4000));
  var token = event.authorizationToken;
  switch (token) {
    case 'allow':
      callback(null, generatePolicy('user', 'Allow', event.methodArn));
      break;
    case 'deny':
      callback(null, generatePolicy('user', 'Deny', event.methodArn));
      break;
    case 'unauthorized':
      callback("Unauthorized");   // Return a 401 Unauthorized response
      break;
    default:
      callback("Error: Invalid token"); // Return a 500 Invalid token response
  }
};

// Help function to generate an IAM policy
var generatePolicy = function (principalId, effect, resource) {
  var authResponse = {};

  authResponse.principalId = principalId;
  if (effect && resource) {
    var policyDocument = {};
    policyDocument.Version = '2012-10-17';
    policyDocument.Statement = [];
    var statementOne = {};
    statementOne.Action = 'execute-api:Invoke';
    statementOne.Effect = effect;
    statementOne.Resource = resource;
    policyDocument.Statement[0] = statementOne;
    authResponse.policyDocument = policyDocument;
  }

  // Optional output with custom properties of the String, Number or Boolean type.
  authResponse.context = {
    "stringKey": "stringval",
    "numberKey": 123,
    "booleanKey": true
  };
  return authResponse;
}

統合用の Lambda 関数はデフォルトコードで作成しました。
API Gateway の統合リクエストのタイムアウトは 3 秒に設定しました。

トークンのソースに authorizationToken を指定して Lambda オーソライザーを作成しました。

オーソライザーのテストでトークンの値に allow を入力してテストし、ポリシーが返却されることを核にします。

API のメソッドリクエストにオーソライザーを指定します。

API をデプロイします。

以下のコマンドで API Gateway の URL にアクセスし、統合された Lambda のレスポンスを取得できることを確認します。

$ curl -X GET "API Gateway の URL" -H "authorizationToken: allow"
{"statusCode":200,"body":"\"Hello from Lambda!\""}

API Gateway の統合タイムアウトは 3 秒、オーソライザーの処理はスリープによって 4 秒以上かかりますが、統合された Lambda からレスポンスを取得できました。
以上より、API Gateway の統合タイムアウトが Lambda オーソライザーには適用されないことを確認できました。

なお、Lambda オーソライザーがタイムアウトした場合には 500 エラーが返却され、API Gateway の 5XXError メトリクスがカウントされていました。

まとめ

今回は API Gateway の統合タイムアウトが Lambda オーソライザーに適用されるかどうかを確認してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion