Nos han pedido para mi proyecto escolar que escribamos un código Java que se ejecute en AWS Lambda. Se supone que debe obtener el código fuente de las URL específicas y luego cargarlo en un bucket de S3. El código Java debe ejecutarse en AWS Lambda.
Obtengo el código fuente a la variable String en Java. Luego tengo un bucle while que intenta escribir el String en un archivo en el directorio /tmp. A continuación, el archivo se carga en S3.
Todo funciona, pero me quedo atascado con una URL específica. He rastreado el problema hasta este punto:
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 ");
}
Lo más raro es que cuando pruebo el código en local, todo funciona. El archivo se crea en el directorio /tmp de mi ordenador y luego se sube a un bucket de S3. Sin embargo, cuando ejecuto el código en Lambda, obtengo el siguiente error:
Task timed out after 15.00 seconds
Alguna idea de por qué Lambda falla al escribir el archivo en su directorio temp en este caso concreto y funciona con otros?
Amazon Lambda está diseñado para ser utilizado como un sistema impulsado por eventos que responde a eventos. El flujo es:
**Las funciones Lambda están limitadas a un tiempo máximo de ejecución de 15 minutos (recientemente se ha incrementado desde los 5 minutos originales) El límite real se configura cuando se crea la función Lambda. El límite existe porque las funciones Lambda están pensadas para ser pequeñas y rápidas en lugar de ser grandes aplicaciones.
Tu mensaje de error dice Task timed out after 15.00 seconds
. Esto significa que AWS intencionadamente detuvo la tarea una vez que alcanzó un tiempo de ejecución de 15 segundos. No tiene nada que ver con lo que la función estaba haciendo en ese momento, ni con el archivo que estaba siendo procesado.
Para solucionarlo: Aumenta el tiempo de espera en la página de configuración de tu función Lambda.
En primer lugar, ¿por qué escribir en /tmp/? ¿Escribes en la misma ubicación donde se ejecuta la función Lambda?
Sin embargo, una cosa mejor que hacer es, si desea escribir una cadena como un archivo de S3 a continuación, puede crear un S3Object y escribir directamente a AWS S3. Aquí'hay un post que muestra un ejemplo: https://stackoverflow.com/a/29844224/358013