【问题标题】:Terraform GCP startup script local file instead of inlineTerraform GCP 启动脚本本地文件而不是内联文件
【发布时间】:2020-01-01 02:17:51
【问题描述】:

网上有很多示例展示了如何在使用 Terraform 部署在 GCP/GCE 上的 VM 上运行启动脚本,但它们都使用内联启动脚本,所有启动脚本代码都包含在 terraform compute.tf 文件中。这可以通过启动脚本的单行或多行的

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

谢谢。

【问题讨论】:

    标签: google-cloud-platform terraform startup


    【解决方案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}”
    }
    

    参考资料:

    【讨论】:

    • 执行此操作时如何查看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
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2021-08-19
    • 2011-06-15
    • 1970-01-01
    • 2013-11-19
    • 2020-03-15
    • 2019-06-18
    • 2015-04-13
    相关资源
    最近更新 更多