Terraform配置验证报错:Variables not allowed 问题求助
解决Terraform变量默认值引用资源属性的报错问题
错误原因
Terraform中变量的default字段仅允许使用字面量或其他变量引用,不能引用资源(如random_id.rand.hex)的属性。这是因为Terraform的执行顺序是先处理变量定义,再创建资源,变量解析阶段资源还未生成,自然无法获取其属性值。
解决方案
方案1:直接在输出中引用资源属性
如果只是需要输出随机值,完全不需要通过变量中转,直接在output里引用random_id.rand.hex即可:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "5.58.0" } random = { source = "hashicorp/random" version = "3.6.2" } } } provider "aws" { region = "eu-north-1" } provider "random" {} resource "random_id" "rand" { byte_length = 8 } output "balti" { value = random_id.rand.hex }
方案2:用Local值复用随机值
如果需要在多个地方复用这个随机值,使用locals代替变量即可——Local值的解析时机晚于资源创建,能够正确引用资源属性:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "5.58.0" } random = { source = "hashicorp/random" version = "3.6.2" } } } provider "aws" { region = "eu-north-1" } provider "random" {} resource "random_id" "rand" { byte_length = 8 } locals { random_num = random_id.rand.hex } output "balti" { value = local.random_num }
执行terraform apply后,就能在输出中得到随机生成的十六进制字符串了。
内容的提问来源于stack exchange,提问作者Duo Lingo
相关产品推荐
相关产品推荐

