如何在每次运行Terraform时生成新的随机数字或随机字符串
Terraform每次运行生成新random_integer随机值的解决方案
默认情况下random_integer资源生成的值会持久化存储在Terraform状态文件中,只要资源配置未发生变更,Terraform就不会重建该资源,因此会一直复用首次生成的数值,你可以通过以下三种方式调整行为:
方案1:强制重建资源
每次执行apply前标记资源需要重建,即可生成新的随机值:- 旧版本Terraform:先执行
terraform taint random_integer.你的资源名,再执行terraform apply - Terraform 0.15.2及以上版本:直接执行单条命令
terraform apply -replace="random_integer.你的资源名"
该方案的优势是你可以自主控制什么时候需要生成新随机值,不会每次运行都强制变更。
- 旧版本Terraform:先执行
方案2:配置keepers参数自动触发重建
给random_integer资源添加keepers参数,绑定每次运行都会变化的属性,Terraform检测到属性变更就会自动重建资源生成新值,示例配置:resource "random_integer" "example" { min = 1 max = 1000 keepers = { # 绑定时间戳,每次运行配置都会变化触发重建 run_timestamp = timestamp() } }注意:该配置会导致每次执行
terraform plan都会提示需要重建该随机数资源,所有依赖该随机值的关联资源也会同步触发重建,如果你不希望影响其他关联资源不推荐使用该方案。方案3:使用external数据源生成临时随机值
如果你不需要把随机值持久化存入状态文件,可以调用本地命令临时生成,每次运行都会自动获取新值,示例配置:data "external" "random_num" { program = ["sh", "-c", "echo \"{\\\"num\\\": $RANDOM}\""] } # 取值方法:data.external.random_num.result.num该方式生成的随机值不会存入状态文件,仅当前运行生效。
内容的提问来源于stack exchange,提问作者Zoltan75
相关产品推荐
相关产品推荐

