Terraform如何内联变量配置GCP CE启动脚本(无需模板文件)
Terraform内联配置GCP Compute Engine启动脚本变量方法
直接使用Terraform原生的字符串内插语法即可实现,完全不需要依赖外部模板文件,正确写法如下:
metadata_startup_script = "filemage init --email ${var.email} --reset"
关键注意事项:
- Terraform双引号字符串内的变量引用必须使用
${ 表达式 }格式,你之前写的$var.email是Shell变量语法,Terraform不会做替换,会原样传入实例,最终执行时会因为Shell找不到var变量导致传入的邮箱参数为空。 - 上述写法会在Terraform执行plan/apply阶段,直接把
var.email的实际值拼接到启动脚本字符串中,再作为元数据传递给GCP,全程不需要额外的模板渲染步骤。 - 如果你的启动脚本里同时存在需要在实例内部运行时才解析的Shell原生变量(比如
$HOME、$HOSTNAME这类),只需要给对应的$符号加转义写成$$即可,Terraform会把$$转义为单个$保留到最终脚本里,不会做提前解析,示例:
metadata_startup_script = "filemage init --email ${var.email} --reset && echo Deployed on host $$HOSTNAME >> /var/log/filemage-install.log"
内容的提问来源于stack exchange,提问作者Kitteh
相关产品推荐
相关产品推荐

