来自 S3 对象时间戳的 Terraform lambda source_code_hash 不会在状态缓存中更新

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

背景

我有一个用于分配 AWS Lambda 的 Terraform 配置。我希望它在检测到更改时自动更新代码。为此,我使用了 source_code_hash 属性,如下所示。

作为构建过程的一部分,我压缩所有源代码并将其上传到 S3 存储桶。

我使用 S3 对象的最后修改时间来触发构建以重新部署更改。

问题

当我部署更改时,

source_code_hash
属性永远不会更新。在 terraform 计划中,它声明它将更新值是
b0IwKd/Fk38A+R20lGIWwCWP6p9UKmAmwns0it2J4qA=
,但它总是被设置为
b2+fXCsSQrxTJq5RonkDz8KhyOt8ICJYZGSsHkygrvY=
.

类似问题

地形配置

data "aws_s3_object" "this" {
  bucket = var.s3_bucket
  key    = var.s3_key
}

resource "aws_lambda_function" "this" {
  s3_bucket        = var.s3_bucket
  s3_key           = var.s3_key
  source_code_hash = base64sha256(data.aws_s3_object.this.last_modified)
  ...
}

Terraform 应用输出第一次运行

# aws_lambda_function.this will be updated in-place
  ~ resource "aws_lambda_function" "this" {
      ~ source_code_hash               = "b2+fXCsSQrxTJq5RonkDz8KhyOt8ICJYZGSsHkygrvY=" -> "b0IwKd/Fk38A+R20lGIWwCWP6p9UKmAmwns0it2J4qA="
      ...
    }
Plan: 0 to add, 1 to change, 0 to destroy.

Terraform 应用输出第二次运行

# aws_lambda_function.this will be updated in-place
  ~ resource "aws_lambda_function" "this" {
      ~ source_code_hash               = "b2+fXCsSQrxTJq5RonkDz8KhyOt8ICJYZGSsHkygrvY=" -> "b0IwKd/Fk38A+R20lGIWwCWP6p9UKmAmwns0it2J4qA="
      ...
    }
Plan: 0 to add, 1 to change, 0 to destroy.

我尝试将源代码哈希设置为以下值:

  • source_code_hash = base64encode(sha256(data.aws_s3_object.this.last_modified))
  • source_code_hash = "${base64sha256(data.aws_s3_object.this.last_modified)}"
  • source_code_hash = base64sha256("${data.aws_s3_object.this.last_modified}")
  • source_code_hash = base64sha256("Wed, 15 Mar 2023 21:08:25 GMT")

我认为问题在于

source_code_hash
如何在 Terraform 状态内部存储。

我将 base64sha256 设置为默认值,但我遇到了同样的问题。

amazon-web-services aws-lambda hash terraform terraform-provider-aws
© www.soinside.com 2019 - 2024. All rights reserved.