web-dev-qa-db-fra.com

Délai d'expiration de la passerelle Amazon API

J'ai un problème avec la passerelle API. J'ai fait quelques méthodes API, parfois elles fonctionnent plus longtemps que 10 secondes et Amazon renvoie une erreur 504. Voici la capture d'écran ci-dessous:

enter image description here

Veuillez aider! Comment puis-je augmenter le délai d'expiration?

Merci!

28

À l'heure actuelle, la limite par défaut pour l'invocation Lambda ou l'intégration HTTP est 30s selon http://docs.aws.Amazon.com/apigateway /latest/developerguide/limits.html et cette limite n'est pas configurable.

15
Ran

Vous ne pouvez pas augmenter le délai d'attente, du moins pas maintenant. Vos points de terminaison doivent se terminer en 10 secondes ou moins. Vous devez travailler sur l'amélioration de la vitesse de vos terminaux.

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

12
E.J. Brennan

En décembre/2017, la valeur maximale est toujours de 29 secondes, mais devrait pouvoir personnaliser la valeur du délai d'expiration.

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

Cela peut être défini dans "demande d'intégration" de chaque méthode dans APIGateway.

8
myouji

Les fonctions lambda expireront après un max. de 5 min; Les requêtes API Gateway expireront après 29 secondes. Vous ne pouvez pas changer cela, mais vous pouvez le contourner avec un modèle d'exécution asynchrone, j'ai écrit un article de blog sur:

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

3
joarleymoraes

Bien que vous ne puissiez pas augmenter le délai d'expiration, vous pouvez lier les lambda ensemble si le travail peut être divisé.

Utilisation du 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)
  }
});

Source: ne fonction AWS Lambda peut-elle en appeler une autre Documentation AWS: http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

2
CamHart

Les délais d'attente peuvent être réduits mais ne peuvent pas être augmentés de plus de 29 secondes. Le backend de votre méthode doit renvoyer une réponse avant 29 secondes, sinon la passerelle API générera une erreur de temporisation de 504.

Alternativement, comme suggéré dans certaines réponses ci-dessus, vous pouvez modifier le backend pour envoyer le code d'état 202 (Accepté), ce qui signifie que la demande a été reçue avec succès et le backend continue ensuite le traitement. Bien sûr, nous devons considérer le cas d'utilisation et ses exigences avant de mettre en œuvre la solution de contournement

1
Mitayshh Dhaggai