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

Kei*_*ley 14 startup google-cloud-platform terraform

网上有很多例子展示了如何在部署在 GCP/GCE 上的虚拟机上使用 Terraform 运行启动脚本,但它们都使用内联启动脚本,所有启动脚本代码都包含在 terraform compute.tf 文件中。这可以通过启动脚本的单行或多行的 <<SCRIPT[script code]SCRIPT 来完成。我还没有找到一个示例来展示如何将启动脚本参数分配给本地磁盘上的另一个文件,可能与 compute.tf 位于同一目录中。用数百行启动脚本将compute.tf 弄得一团糟。没有更好的方法来做到这一点吗?

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

谢谢你。

gly*_*ing 16

要在 GCE VM 声明中引用文件,只需使用file 函数从所选文件中读取内容。例如:

resource “google_compute_instance” “default” {
  …
  metadata_startup_script = “${file(“/path/to/your/file”)}”
}
Run Code Online (Sandbox Code Playgroud)

同样,您还可以使用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}”
}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 无论启动脚本是如何提供的(无论是内联还是使用文件函数),脚本都会在 GCE VM 上执行,因此您将在 [串行端口输出](https://cloud.google.com) 中看到其输出/compute/docs/instances/viewing-serial-port-output)或通过在 Stackdriver 中检查其日志或通过访问虚拟机并[直接]读取日志(https://cloud.google.com/compute/docs/startupscript #重新运行脚本)。 (4认同)

小智 5

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

sudo google_metadata_script_runner --script-type startup
Run Code Online (Sandbox Code Playgroud)

并且要启用完整调试,请执行以下操作

sudo DEBUG=1 google_metadata_script_runner
Run Code Online (Sandbox Code Playgroud)