Tengo la siguiente configuración de AWS Terraform:
# S3 bucket for Lambda code upload resource "aws_s3_bucket" "ada-upload" { bucket = "ada-upload" acl = "private" } # uploading zipped lambda code to S3 resource "aws_s3_bucket_object" "lambda_code_upload" { bucket = aws_s3_bucket.ada-upload.bucket key = "dist.zip" source = "dist.zip" etag = filemd5("dist.zip") } # creating lambda function resource "aws_lambda_function" "ada-lambda-function" { function_name = "ada-lambda-function" s3_bucket = aws_s3_bucket.ada-upload.bucket s3_key = "dist.zip" memory_size = 1024 timeout = 900 runtime = "provided" source_code_hash = base64sha256("dist.zip") } Básicamente, crea un depósito S3, carga el código allí y luego crea un Lambda a partir de ese código. El código es una aplicación .NET 3.1 independiente, trae su propio tiempo de ejecución, por lo que el Zip es bastante grande, lleva algo de tiempo cargarlo. Lambda esperará a que se cree el depósito S3, pero no esperará a que el código termine de cargarse. Entonces, cuando ejecuto el script inicialmente, obtendré S3 key "dist.zip" doesn't exist . Cuando vuelvo a ejecutar el script, dado que el zip ya está allí, la función se creó correctamente.
¿Hay alguna manera de garantizar que Lambda comience a crear solo cuando el código termine de cargarse?
Descargo de responsabilidad: la respuesta de @ydaetskcoR es correcta y debe aceptarla. Sin embargo, otro enfoque sería modificar la función lambda de la siguiente manera:
resource "aws_lambda_function" "ada-lambda-function" { function_name = "ada-lambda-function" s3_bucket = aws_s3_bucket.ada-upload.bucket s3_key = "dist.zip" memory_size = 1024 timeout = 900 runtime = "provided" source_code_hash = base64sha256("dist.zip") depends_on = [ aws_s3_bucket_object.lambda_code_upload, ] }Esto obligará a terraform a esperar primero a que el objeto se cargue en el depósito antes de iniciar la lambda.