Terraform部署AWS Lambda Go项目source_code_hash异常问题咨询
问题:Terraform部署AWS Lambda Go项目时source_code_hash不一致的问题
现象
第一次构建时,Terraform计划输出如下:
# module.api_cloneChallenge.aws_lambda_function.api_service will be updated in-place ~ resource "aws_lambda_function" "api_service" { id = "gs-dev-api-cloneChallenge" ~ last_modified = "2023-05-18T07:56:00.000+0000" -> (known after apply) ~ source_code_hash = "hjmfsj2XzbEKUUIlEm/Qs9DnjOVbEaIngtySBVVZ/qk=" -> "dn01BTEl9sqcIWsXGaa0FBxworrCawR9cDnpcSNcUyo=" tags = { "Layer" = "API" "Name" = "gs-dev-api-cloneChallenge" "OperationID" = "cloneChallenge" "Stage" = "dev" } # (16 unchanged attributes hidden) # (2 unchanged blocks hidden) }
此时新的source_code_hash值为dn01BTEl9sqcIWsXGaa0FBxworrCawR9cDnpcSNcUyo=,但第二次构建时,Terraform计划显示的原有source_code_hash值完全不同:
# module.api_cloneChallenge.aws_lambda_function.api_service will be updated in-place ~ resource "aws_lambda_function" "api_service" { id = "gs-dev-api-cloneChallenge" ~ last_modified = "2023-05-18T08:25:48.000+0000" -> (known after apply) ~ source_code_hash = "xgzR2ARivgWErotmKxpRdCEptOYZGTtevVvyQV8Gbbs=" -> "k1s1s3QgzyZhLn1vvKxszs3N5bII5eR8WKt2N4grgIQ=" tags = { "Layer" = "API" "Name" = "gs-dev-api-cloneChallenge" "OperationID" = "cloneChallenge" "Stage" = "dev" } # (16 unchanged attributes hidden) # (2 unchanged blocks hidden) }
当前配置
我在Terraform中通过以下方式计算哈希:
value = filebase64sha256(data.external.makefile_package.result.binary_path)
由于使用zip文件时,即使采用确定性压缩,GitHub Actions每次构建的哈希仍不同,因此我直接计算二进制文件的SHA256哈希。此外我还尝试使用修改文件的最后提交哈希,结果同样:Terraform计划中显示的哈希值与部署后tfstate文件中的值完全不同。
疑问
我发现source_code_hash的值始终与AWS上的SHA256哈希一致,请问:
- 为什么会出现这种哈希不一致的情况?
- 能否自定义
source_code_hash的值?
内容的提问来源于stack exchange,提问作者FrancMo
相关产品推荐
相关产品推荐

