Terraform中Lambda的source_code_hash基于S3时间戳无法更新状态缓存
Terraform配置AWS Lambda时source_code_hash无法更新的问题与解决办法
背景
用Terraform配置AWS Lambda,希望检测到代码变更时自动更新Lambda代码,因此采用source_code_hash属性。构建流程会将源码打包为zip上传至S3存储桶,通过S3对象的最后修改时间触发重新部署。
问题
部署变更时,source_code_hash始终无法更新。Terraform计划显示将其更新为b0IwKd/Fk38A+R20lGIWwCWP6p9UKmAmwns0it2J4qA=,但状态中始终保持为b2+fXCsSQrxTJq5RonkDz8KhyOt8ICJYZGSsHkygrvY=,每次执行apply都会重复提示相同变更。
尝试的配置
试过以下几种source_code_hash赋值方式:
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")
初始Terraform配置如下:
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) ... }
解决方案
最终通过上传sha256.txt文件至S3存储桶,读取该文件内容生成source_code_hash解决问题。注意文件需带.txt后缀,否则data.aws_s3_object.this.body会返回null。
内容的提问来源于stack exchange,提问作者Istvan
相关产品推荐
相关产品推荐

