【问题标题】:Terraform For Publishing AWS Lambda Using S3 Metadata使用 S3 元数据发布 AWS Lambda 的 Terraform
【发布时间】:2022-01-28 05:50:53
【问题描述】:

我在尝试在 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".

我不确定“元数据”是否是原生 Terraform 地图数据类型。

【问题讨论】:

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


    【解决方案1】:

    应该是:

    source_code_hash = data.aws_s3_bucket_object.lambda.metadata.Sha256
    

    【讨论】:

    • 它确实有效!我原来的用户定义的密钥是'sha256',所以我不知道为什么我需要大写密钥。我没有找到提到这一点的文档。你知道我在哪里可以找到这个文档吗?
    • @superflux 您可以将整个data.aws_s3_bucket_object.lambda 输出到控制台,然后查看它的外观。
    猜你喜欢
    • 2016-06-15
    • 2019-02-26
    • 2016-09-30
    • 2021-02-28
    • 1970-01-01
    • 2021-05-19
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多