【问题标题】:AWS Lambda doesn't wait for code to be uploaded to S3 bucket in Terraform scriptAWS Lambda 不会等待代码上传到 Terraform 脚本中的 S3 存储桶
【发布时间】:2020-06-04 17:58:11
【问题描述】:

我有以下 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 存储桶,在那里上传代码,然后从该代码创建一个 Lambda。代码是自包含的 .NET 3.1 应用程序,它自带运行时,所以 Zip 相当大,上传需要一些时间。 Lambda 将等待 S3 存储桶创建,但不会等待代码完成上传。所以当我最初运行脚本时,我会得到S3 key "dist.zip" doesn't exist 错误。当我重新运行脚本时 - 因为 zip 已经存在 - 函数创建成功。

有没有办法确保 Lambda 仅在代码完成上传后才开始创建?

【问题讨论】:

  • 使用s3_key = aws_s3_bucket_object.lambda_code_upload.key
  • @ydaetskcoR 事后看来这应该很明显,该死! ;-) 谢谢,您能否将其添加为答案,以便我接受?

标签: amazon-web-services amazon-s3 aws-lambda terraform terraform-provider-aws


【解决方案1】:

免责声明:@ydaetskcoR 的答案是正确的,您应该接受它。但是,另一种方法是修改 lambda 函数,如下所示:

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 在启动 lambda 之前先等待对象上传到存储桶中。

【讨论】:

  • Terraform 的一个核心功能是计算相关资源的依赖关系图。当您使用 S3 对象资源的属性时,Terraform 知道 S3 对象需要存在才能使用该属性。在这种情况下没有理由使用depends_on。根据terraform.io/docs/configuration/resources.html,使用depends_on应该只是万不得已
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2021-05-06
  • 2018-04-25
  • 1970-01-01
相关资源
最近更新 更多