web-dev-qa-db-ja.com

Amazon APIゲートウェイのタイムアウト

APIゲートウェイに問題があります。いくつかのAPIメソッドを作成しましたが、10秒より長く動作する場合があり、Amazonは504エラーを返します。以下はスクリーンショットです。

enter image description here

助けてください!タイムアウトを増やすにはどうすればよいですか?

ありがとう!

28

現在、Lambda呼び出しまたはHTTP統合のデフォルトの制限は、 http://docs.aws.Amazon.com/apigatewayに従って、30sです/latest/developerguide/limits.html この制限は構成できません。

15
Ran

少なくとも今は、タイムアウトを増やすことはできません。エンドポイントは10秒以内に完了する必要があります。エンドポイントの速度の改善に取り組む必要があります。

http://docs.aws.Amazon.com/apigateway/latest/developerguide/limits.html

12
E.J. Brennan

2017年12月現在、最大値は29秒のままですが、タイムアウト値をカスタマイズできるはずです。

https://aws.Amazon.com/about-aws/whats-new/2017/11/customize-integration-timeouts-in-Amazon-api-gateway/

これは、APIGatewayの各メソッドの「統合要求」で設定できます。

8
myouji

Lambda関数は最大時間後にタイムアウトします。 5分のAPI Gatewayリクエストは29秒後にタイムアウトします。それを変更することはできませんが、非同期実行パターンを使用して回避することができます。

https://joarleymoraes.com/serverless-long-running-http-requests/

3
joarleymoraes

タイムアウトを増やすことはできませんが、作業が分割される可能性がある場合は、ラムダをリンクできます。

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

2
CamHart

タイムアウトは減らすことができますが、29秒を超えて増やすことはできません。メソッドのバックエンドは、29秒前に応答を返す必要があります。そうしないと、APIゲートウェイは504タイムアウトエラーをスローします。

あるいは、上記のいくつかの回答で提案されているように、リクエストが正常に受信され、バックエンドがその後の処理を続行することを意味するステータスコード202(Accepted)を送信するようにバックエンドを変更できます。もちろん、回避策を実装する前にユースケースとその要件を考慮する必要があります

1