API Gateway の統合タイムアウトが Lambda オーソライザーに適用されるかどうかを確認してみた
Lambda オーソライザーには適用されませんでした。
検証手順
API Gateway Lambda オーソライザーを使用する - Amazon API Gateway
上記ドキュメントのコードをもとに Lambda オーソライザー用の関数を作成しました。
ハンドラー関数内で 4 秒のスリープ処理を追記してあります。
また、Lambda 関数のタイムアウトは 5 秒に設定しました。
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