APIゲートウェイに問題があります。いくつかのAPIメソッドを作成しましたが、10秒より長く動作する場合があり、Amazonは504エラーを返します。以下はスクリーンショットです。
助けてください!タイムアウトを増やすにはどうすればよいですか?
ありがとう!
現在、Lambda呼び出しまたはHTTP統合のデフォルトの制限は、 http://docs.aws.Amazon.com/apigatewayに従って、30sです/latest/developerguide/limits.html この制限は構成できません。
少なくとも今は、タイムアウトを増やすことはできません。エンドポイントは10秒以内に完了する必要があります。エンドポイントの速度の改善に取り組む必要があります。
http://docs.aws.Amazon.com/apigateway/latest/developerguide/limits.html
2017年12月現在、最大値は29秒のままですが、タイムアウト値をカスタマイズできるはずです。
これは、APIGatewayの各メソッドの「統合要求」で設定できます。
Lambda関数は最大時間後にタイムアウトします。 5分のAPI Gatewayリクエストは29秒後にタイムアウトします。それを変更することはできませんが、非同期実行パターンを使用して回避することができます。
https://joarleymoraes.com/serverless-long-running-http-requests/
タイムアウトを増やすことはできませんが、作業が分割される可能性がある場合は、ラムダをリンクできます。
Aws SDKを使用する:
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: 'us-west-2' //change to your region
});
lambda.invoke({
FunctionName: 'name_of_your_lambda_function',
Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
if (error) {
context.done('error', error);
}
if(data.Payload){
context.succeed(data.Payload)
}
});
ソース: AWS Lambda関数は別の関数を呼び出すことができます AWSドキュメント: http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
タイムアウトは減らすことができますが、29秒を超えて増やすことはできません。メソッドのバックエンドは、29秒前に応答を返す必要があります。そうしないと、APIゲートウェイは504タイムアウトエラーをスローします。
あるいは、上記のいくつかの回答で提案されているように、リクエストが正常に受信され、バックエンドがその後の処理を続行することを意味するステータスコード202(Accepted)を送信するようにバックエンドを変更できます。もちろん、回避策を実装する前にユースケースとその要件を考慮する必要があります