当我想在模板中使用 metadata_startup_script 时,如果我在一行中使用命令,它可以正常工作,但在传递一行或即使我想使用一些 html 时,它也不能正常工作,并且我会遇到错误(terraform 中的多行并使用新行,如果我想将它引用到本地 bash 脚本,例如 metadata_startup_script =“${file(“startup.sh”)}”它可以工作,但是当实例出现时,当我 ssh 到它时,我的 appache 没有安装在机器中,所以我的启动脚本不起作用,但我有模板!那是什么问题,有人知道吗?
答案1
正如你提到的,你可以在模板中看到脚本,我建议你检查一下控制台并检查你的脚本是否可见,如果是,请检查串行控制台检查您的脚本未运行的原因。这可能是由于输入错误或缺少确认/同意。
为了重现您的问题,我正在关注文档现在设置我的main.tf
如下:
metadata_startup_script = "${file("file-name-with-full-path")}"
在该文件中,我将启动脚本设置如下:
#! /bin/bash
………...
sudo apt update
wait 60
sudo apt install apache2 -y
wait 60
sudo systemctl start apache2
wait 60
sudo systemctl status apache2
创建虚拟机后,我可以看到 apache 正在我的实例中运行。
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled;
vendor preset: enabled)
Active: active (running) since Fri 2020-05-15 13:5
4:45 UTC; 10s ago
Main PID: 2338 (apache2)
Tasks: 55 (limit: 4915)
CGroup: /system.slice/apache2.service
├─2338 /usr/sbin/apache2 -k start
├─2340 /usr/sbin/apache2 -k start
└─2341 /usr/sbin/apache2 -k start
May 15 13:54:45 terra-test-2 systemd[1]: Starting The Apache HTT
P Server...
May 15 13:54:45 terra-test-2 systemd[1]: Started The Apache HTTP
Server.
答案2
这与我的文本编辑器有关,我使用的是 VSC,所以我使用这种方式,因为 VSC 无法读取,即使文件中只有一个 CRLF,上述设置也将被忽略,整个文件将转换为 CRLF。您首先需要将所有 CRLF 转换为 LF,然后才能在 Visual Studio Code 中打开它。