AWS Lambda: Tâche timed out
Il nous a été demandé pour mon projet d'école pour écrire du code Java qui s'exécute dans AWS Lambda. Il est censé obtenir le code source de l'Url et ensuite télécharger à partir d'un compartiment S3. Le code Java doit être en cours d'exécution sur AWS Lambda.
- Je obtenir le code source de la variable Chaîne de caractères en Java. Puis j'ai boucle while qui essaie d'écrire la Chaîne de caractères dans un fichier dans le répertoire /tmp. Ensuite, le fichier est téléchargé à S3.
Tout fonctionne, mais je suis coincé avec une URL spécifique. J'ai suivi le problème à ce point:
try {
BufferedWriter out = new BufferedWriter(new FileWriter("/tmp/url.txt"));
out.write(source_code); //Replace with the string
//you are trying to write
out.close();
}
catch (IOException e) {
System.out.println("Exception ");
}
Le plus étrange, c'est que quand je test le code en local, tout fonctionne. Le fichier est créé dans le répertoire /tmp sur mon ordinateur, puis il est transféré à un compartiment S3. Cependant, lorsque j'exécute le code dans Lambda, j'obtiens l'erreur suivante:
Task timed out after 15.00 seconds
Aucune idée pourquoi Lambda n'arrive pas à écrire le fichier dans son répertoire temp dans ce cas précis et il travaille avec les autres?
- Ne ceci de l'aide à tous? (Juste un coup de feu dans l'obscurité, je ne sais pas vraiment)
Vous devez vous connecter pour publier un commentaire.
Amazon Lambda est conçu pour être utilisé comme un événement piloté par le système qui répond aux événements. Le flux est:
Lambda fonctions sont limitées à un maximum les temps d'exécution de 15 minutes (cela a été récemment augmenté à partir de l'original 5 minutes de délai d'attente). La limite réelle est configurée lorsque la fonction Lambda est créé. La limite est en place parce que les Lambda fonctions sont censé être petit et rapide plutôt que d'être les grandes applications.
Votre message d'erreur dit
Task timed out after 15.00 seconds
. Cela signifie que AWS intentionnellement arrêté la tâche une fois qu'il atteint un moment de l'exécution de 15 secondes. Il n'a rien à voir avec ce que la fonction a été fait à l'époque, ni le fichier en cours de traitement.À corriger: Augmenter le paramètre de délai d'attente sur la page de configuration de votre fonction Lambda.
/tmp
après que vous avez téléchargé, ou vous serez à court d'espace. Il serait bon de log de la taille du fichier avant de le télécharger, donc, si elle échoue, vous aurez une idée de ce qu'il était en train de faire.Dans mon cas, lorsque la tâche a bien fonctionné au niveau local, mais expiré sur Lambda, c'était parce que j'avais besoin d'augmenter la Mémoire allouée pour le Lambda instance.
Il semble que vous avez configuré le délai d'attente de 15 secondes.Vous pouvez augmenter le délai d'attente comme décrit dans cette capture d'écran délai d'attente de configuration et comme par lambda paramètres de temps vous permettent d'exécuter est de 15 minutes. Espérons que cette aide!
J'ai résolu le problème en plaçant le AWS SDK à l'extérieur du corps de la fonction:
JS:
Pour ceux en cours d'exécution dans ce problème de délai d'attente lors de l'utilisation de
async
, notez que le motif est différent pour le gestionnaire pour async fonctions.Au lieu de
c'est
Tout d'abord, pourquoi écrire dans /tmp/? Vous écrivez à l'endroit même où la fonction Lambda est arriver exécuté?
Cependant, une meilleure chose à faire, si vous voulez écrire une chaîne de caractères comme un S3 fichier, puis vous pouvez créer un S3Object et écrire directement à AWS S3. Voici un post qui montre un exemple: https://stackoverflow.com/a/29844224/358013