Terraform GCP 启动脚本本地文件而不是内联文件
Posted
技术标签:
【中文标题】Terraform GCP 启动脚本本地文件而不是内联文件【英文标题】:Terraform GCP startup script local file instead of inline 【发布时间】:2020-01-01 02:17:51 【问题描述】:网上有很多示例展示了如何在使用 Terraform 部署在 GCP/GCE 上的 VM 上运行启动脚本,但它们都使用内联启动脚本,所有启动脚本代码都包含在 terraform compute.tf 文件中。这可以通过启动脚本的单行或多行的
我意识到我可以编写一个包装脚本,将一个 compute.tf 和一个单独的启动文件组合成一个单独的 compute.tf,然后运行 terraform,但我正在寻找更直接的路径,假设存在的话。
谢谢。
【问题讨论】:
【参考方案1】:要在 GCE VM 声明中引用文件,只需使用 file function 从您选择的文件中读取内容。例如:
resource “google_compute_instance” “default”
…
metadata_startup_script = “$file(“/path/to/your/file”)”
同样,您还可以使用template_file 数据源对模板文件执行令牌替换,然后在您的 GCE VM 声明中引用已解析的文件内容。例如:
data “template_file” “default”
template = “$file(“/path/to/your/file”)”
vars =
address = “some value“
resource “google_compute_instance” “default”
…
metadata_startup_script = “$data.template_file.default.rendered”
参考资料:
https://www.terraform.io/docs/providers/google/r/compute_instance.html https://www.terraform.io/docs/configuration-0-11/interpolation.html#file-path- https://www.terraform.io/docs/providers/template/d/file.html【讨论】:
执行此操作时如何查看metadata_startup_script
的输出?目前脚本是用这种语法执行的,但我没有看到任何脚本输出/错误
无论启动脚本是如何提供的(无论是内联还是使用文件函数),脚本都会在 GCE VM 上执行,因此您将在serial port output 或通过在 Stackdriver 中检查其日志或访问 VM 并读取日志 directly。【参考方案2】:
通过登录实例并运行重新运行自定义启动脚本。
sudo google_metadata_script_runner --script-type startup
还要启用完整调试,请执行此操作
sudo DEBUG=1 google_metadata_script_runner
【讨论】:
调试在最后使用“--debug”:sudo DEBUG=1 google_metadata_script_runner --script-type startup --debug以上是关于Terraform GCP 启动脚本本地文件而不是内联文件的主要内容,如果未能解决你的问题,请参考以下文章
在 terraform 文件而不是 env 变量中为 Terraform 提供凭据
在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源