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:
Veuillez aider! Comment puis-je augmenter le délai d'expiration?
Merci!
À 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.
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
En décembre/2017, la valeur maximale est toujours de 29 secondes, mais devrait pouvoir personnaliser la valeur du délai d'expiration.
Cela peut être défini dans "demande d'intégration" de chaque méthode dans APIGateway.
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/
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
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