Terraform GCP启动脚本本地文件而不是内联

时间:2019-08-27 21:28:16

标签: google-cloud-platform terraform startup

在线上有许多示例,展示了如何在使用Terraform部署在GCP / GCE上的VM上运行启动脚本,但是它们都使用内联启动脚本,并且所有启动脚本代码都包含在terraform compute.tf文件中。对于启动脚本,可以用一行来完成;对于多行,可以使用<< SCRIPT [脚本代码] SCRIPT来完成。我还没有找到一个示例,该示例显示了一种将启动脚本参数分配给本地磁盘上另一个文件的方法,该文件可能与compute.tf位于同一目录中。数百行启动脚本会使compute.tf混乱不堪。没有更好的方法吗?

我意识到我可以编写一个包装脚本,将一个compute.tf和一个单独的启动文件组合到一个单独的compute.tf中,然后运行terraform,但是我正在寻找一条更直接的路由,假设存在。

谢谢。

2 个答案:

答案 0 :(得分:3)

要在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}”
}

参考文献:

答案 1 :(得分:1)

通过登录实例并运行来重新运行自定义启动脚本。

new (new (new (new (new (new (new (new Magic())))))))

还要启用完全调试,请执行此操作

sudo google_metadata_script_runner --script-type startup