背景:
我有一个用于分配 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 设置为默认值,但我遇到了同样的问题。