AWS Lambda не ожидает загрузки кода в корзину S3 в скрипте Terraform - PullRequest
1 голос
/ 20 февраля 2020

У меня есть следующее 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")
}

По сути, он создает корзину S3, загружает туда код, а затем создает лямбду из этого кода. Код является автономным. NET 3.1 приложением, он имеет собственную среду выполнения, поэтому Zip довольно большой, для загрузки требуется некоторое время. Лямбда будет ждать создания корзины S3, но не будет ждать окончания загрузки кода. Поэтому, когда я запускаю скрипт изначально, я получаю ошибку S3 key "dist.zip" doesn't exist. Когда я перезапускаю скрипт - поскольку zip уже существует - функция успешно создана.

Есть ли способ обеспечить начало создания Lambda только после завершения загрузки кода?

1 Ответ

0 голосов
/ 21 февраля 2020

Отказ от ответственности: @ydaetskcoR ответ правильный, и вы должны принять его. Однако другой подход заключается в изменении лямбда-функции следующим образом:

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,
  ]
}

Это заставит terraform сначала дождаться загрузки объекта в корзину перед запуском лямбды.

...