Terraform - 仅在发生更改时发布 Lambda

问题描述 投票:0回答:1

我在 Terraform 中配置 AWS Lambda 功能时遇到问题。现在,以下配置有效,因此即使我没有对其进行任何更改,功能部署每次都会顺利进行。这是因为生成的

source_code_hash
与之前的不同。

您是否知道如何做得更好,以便 terraform 检测代码中的更改,并且只有当它发现它们时才进行部署?

data "archive_file" "parser_service" {
  type = "zip"

  source_dir  = "${path.module}/xxx"
  output_path = "${path.module}/xxx.zip"
}

resource "aws_s3_object" "s3_object" {
  bucket = var.lambda_bucket
  key    = "lambda_parser_${var.node_env}.zip"
  source = "${path.module}/lambda_parser_${var.node_env}.zip"

  etag = filemd5(data.archive_file.parser_service.output_path)
}

resource "aws_lambda_function" "parser_function" {
  function_name = var.lambda_name
  handler       = "xxx/main.handler"
  role          = var.iam_role
  runtime       = var.runtime
  memory_size   = var.memory_size
  timeout       = var.timeout

  s3_bucket = var.lambda_bucket
  s3_key    = aws_s3_object.s3_object.key

  source_code_hash = filemd5("${path.module}/lambda_parser_${var.node_env}.zip")

  depends_on = [aws_s3_object.s3_object]
}

感谢您的帮助! #编辑

我正在尝试使用:

source_code_hash = aws_s3_object.s3_object.etag

但是当我运行 terraform apply 时它会生成此错误:

provider "registry.terraform.io/hashicorp/aws" produced an invalid new value for .source_code_hash: was 
│ cty.StringVal("ea34c83724a7cac5009bd03cb2388a33"), but now cty.StringVal("ce4f3d0e888dddf1d20d1dbeb36938e8-10").
amazon-web-services aws-lambda terraform devops
1个回答
0
投票

您可以从

output_base64sha256
数据的
archive_file
输出属性获取哈希值,然后在
aws_lambda_function
定义中使用它:

source_code_hash = data.archive_file.parser_service.output_base64sha256

此外,由于您的

aws_lambda_file
已经引用了
aws_s3_object
资源,因此
depends_on
块是多余的。

© www.soinside.com 2019 - 2024. All rights reserved.