Para un proyecto en el que estoy trabajando, es necesario desplegar un archivo de texto grande que se actualiza diariamente y está disponible en una URL de cliente específica, y almacenarlo en AWS S3 que luego activa el procesamiento posterior del archivo (los detalles no son importantes) .
Estaba pensando en hacer que la descarga y la tienda en S3 se realizaran mediante un AWS Lambda activado cada 24 horas por CloudWatch, lo que funcionaría, pero hay un problema: el archivo tiene un tamaño de 36 MB y lo sirve un host que acelera las descargas a 100 kB/ s (fuera de mi control). Esto significa que se necesitan al menos 360 s (es decir, 6 minutos) para descargar completamente el archivo. Sin embargo, las funciones de AWS Lambda tienen un límite superior de 300 s de tiempo de ejecución, lo que hace que sea imposible usarlas para esta tarea, ya que Lambda agota el tiempo de espera y se cierra antes de que el archivo se descargue por completo.
Estoy buscando sugerencias de formas de trabajar alrededor del límite de tiempo de ejecución de 300 s de AWS Lambda para lograr este objetivo.
Siempre que me limite a AWS, la única alternativa que veo es configurar un trabajo cron en una instancia de EC2, pero eso parece costoso / excesivo, especialmente si termino sin necesitar un EC2 siempre activo para cualquier otra cosa.
¡Gracias!
Haría que Lambda activara una pequeña instancia EC2 que ejecuta el trabajo de copia. Podría tener una AMI personalizada para la instancia EC2 o un script de inicio en la nube que configura todo. Deje que el programa del EC2 se ejecute durante un rato y recuerde que se le factura una hora, independientemente del tiempo que necesite. Pero si todo el proceso tarda 15 minutos (ya que no hay forma de garantizar la congestión del tráfico) y está utilizando un t2.nano, se le facturó USD $ 0,006 (6 décimas de centavo) más algunas E/S y, probable, espacio EBS. Estaría dispuesto a apostar que gastaría muy poco.
Una vez que el trabajo finaliza, finaliza la instancia EC2 en la que se está ejecutando.
Me doy cuenta de que esto es un poco complicado: CloudWatch activa Lambda, que activa EC2. Pero CloudWatch por sí solo no podrá hacer lo que necesita para EC2.