使用 S3 元数据发布 AWS Lambda 的 Terraform

Terraform For Publishing AWS Lambda Using S3 Metadata

我在尝试引用 Amazon S3 上的 zip 文件上的用户定义元数据字段时遇到了一些问题。我正在尝试使用此元数据字段来帮助 Terraform 检测 zip 文件是否已更改,以便我可以发布新版本的 Lambda 函数。

这些是 S3 上的元数据字段:

System defined  Content-Type    application/zip
User defined    x-amz-meta-sha256   241461f66ba6bec6418679888f9c8b5210c1f183aabfe86d1cc2ab71cdffdcfc

这是我的 Terraform 配置:

data "aws_s3_bucket_object" "lambda" {
  bucket = "bucket"
  key    = "lambda/lambda.zip"
}

resource "aws_lambda_function" "lambda" {
  function_name = "lambda_name"
  s3_bucket = "bucket"
  s3_key = "lambda/lambda.zip"
  source_code_hash = "${data.aws_s3_bucket_object.lambda.metadata.x-amz-meta-sha256}"
  handler = "index.handler"
  runtime = "nodejs14.x"
  publish = true
  role = aws_iam_role.lambda_exec.arn
  vpc_config {
    subnet_ids = "subnet_ids"
    security_group_ids = "security_group_ids"
  }
}

我在尝试 运行 'terraform plan':

时遇到了这个错误
Error: Missing map element

  on ../../../modules/lambda/main.tf line 14, in resource "aws_lambda_function" "lambda":
  14:   source_code_hash = "${data.aws_s3_bucket_object.lambda.metadata.x-amz-meta-sha256}"
    ├────────────────
    │ data.aws_s3_bucket_object.lambda.metadata is map of string with 1 element

This map does not have an element with the key "x-amz-meta-sha256".

我不确定 'metadata' 是否是原生 Terraform 地图数据类型。

应该是:

source_code_hash = data.aws_s3_bucket_object.lambda.metadata.Sha256