嗨,EC2 实例已创建,但作为 userdata.sh 一部分的命令未执行。当我通过 putty 手动连接到 EC2 时,我发现 nginx 未安装在 EC2 实例中。为了验证脚本是否正在执行,我添加了回显消息,但是当我运行 terraform 应用程序时,命令提示符中没有显示任何输出。如何验证用户数据是否被执行?
我已经在 C 驱动器中安装了 Terraform,下面的脚本存在于同一个文件夹 C:/Terraform/userdata.sh、C:/Terraform/main.tf 中,我尝试将路径指定为 ${file("./userdata.sh"(}",但它仍然不起作用。
请指教,因为我只是在学习地形。谢谢。
#!/bin/bash -v
echo "userdata-start"
sudo apt-get update -y
sudo apt-get install -y nginx > /tmp/nginx.log
sudo service nginx start
echo "userdata-end"
这在我的地形程序 [main.tf] 中被调用,如下所示:
# resource "template_file" "user_data" {
# template = "userdata.sh"
# }
data "template_file" "user_data" {
template = "${file("userdata.sh")}"
}
resource "aws_instance" "web" {
instance_type = "t2.micro"
ami = "ami-5e8bb23b"
key_name = "sptest"
vpc_security_group_ids = ["${aws_security_group.default.id}"]
subnet_id = "${aws_subnet.tf_test_subnet.id}"
user_data = "${data.template_file.user_data.template}"
#user_data = "${template_file.user_data.rendered}"
#user_data = "${file("userdata.sh")}"
#user_data = "${file("./userdata.sh")}"
tags {
Name = "tf-example-ec2"
}
}
我可以看到您发布的代码存在一个问题,user_data变量应该像
user_data = "${data.template_file.user_data.rendered}"
此外,作为建议,我建议您尝试在脚本中创建日志文件以检查已执行的所有步骤。了解脚本是否运行也将使您受益。
我们代码中的一个示例,您可以根据自己的标准对其进行修改
logdir=/var/log
logfile=${logdir}/mongo_setup.log
exec >> $logfile 2>&1
希望这有帮助。
为什么这么复杂?
user_data = file("user_data.sh")
此文件必须存在于项目的其他tf.files
附近。 这就足够了
只是一个替代,创建包含内容的variable.tf
variable "script" {
default = <<-EOF
#!/bin/bash -v
echo "userdata-start"
sudo apt-get update -y
sudo apt-get install -y nginx > /tmp/nginx.log
sudo service nginx start
echo "userdata-end"
EOF
}
在 user_data = var.script 和 检查 Apache 2 状态是否sudo systemctl status nginx