使用Terraform无法发布Lambda新版本的问题求助
问题分析与解决方案
你的Lambda版本未按预期更新,核心问题出在source_code_hash的配置上:你拼接了uuid()函数,这个函数每次执行terraform apply都会生成全新值,导致Terraform判定Lambda函数需要销毁重建,而非在现有函数基础上更新代码并发布新版本。新创建的Lambda函数版本会从V1重新开始,因此看不到版本递增。
以下是两种针对性解决方案:
方案1:仅当代码变更时发布新版本(推荐)
移除uuid(),让source_code_hash只反映实际代码包的哈希值,确保只有代码真的变化时才触发更新:
source_code_hash = var.source_code_hash
配合publish=true,每次代码哈希变化时,Terraform会自动在原函数基础上发布新的版本(如V2、V3...)。
注意:var.source_code_hash需要正确计算代码包的哈希,建议用filebase64sha256(var.filename)生成,确保代码内容变化时哈希值同步更新。
方案2:强制每次apply都发布新版本
如果确实需要每次执行terraform apply都发布新版本,不要用uuid()(会触发资源替换),可以通过以下两种方式实现:
- 使用
timestamp()配合哈希处理,避免资源替换:
source_code_hash = "${var.source_code_hash}-${base64sha256(timestamp())}"
- 引入手动控制的版本变量,每次apply前手动递增:
variable "version" { type = string description = "手动控制的版本号,用于触发Lambda更新" } source_code_hash = "${var.source_code_hash}-${var.version}"
以上两种方式都会触发Lambda代码更新,配合publish=true发布新版本,且不会销毁重建原有函数资源。
内容的提问来源于stack exchange,提问作者Mohammed Noman Razvi
相关产品推荐
相关产品推荐

