user_data中的命令未在terraform中执行

Smi*_*Smi 5 terraform terraform-template-file terraform-provider-aws

您好EC2实例已创建,但作为userdata.sh一部分的命令未得到执行。当我通过腻子手动连接到EC2时,我发现EC2实例中未安装nginx。为了验证脚本是否正在执行,我添加了echo消息,但是当我运行terraform apply时,命令提示符中未显示任何输出。如何验证用户数据是否正在执行?

我已经在C驱动器中安装了Terraform,并且以下脚本位于同一文件夹C:/Terraform/userdata.sh、C:/Terraform/main.tf中,我尝试给出的路径为$ {file(“ ./ userdata.sh”) }”,但仍然无法正常工作。

请指教,因为我正在学习terraform。谢谢。

#!/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"
Run Code Online (Sandbox Code Playgroud)

这在我的terraform程序[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"
}
} 
Run Code Online (Sandbox Code Playgroud)

Sor*_*tta 5

我可以看到您发布的代码有一个问题,user_data变量应该像

user_data = "${data.template_file.user_data.rendered}"
Run Code Online (Sandbox Code Playgroud)

此外,作为建议,我建议您尝试在脚本中创建一个日志文件,以检查所有步骤均已执行。知道脚本是否完全运行也将使您受益。

我们代码中的一个示例,您可以根据自己的标准进行修改

logdir=/var/log
logfile=${logdir}/mongo_setup.log
exec >> $logfile 2>&1
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • 你不需要单独的日志文件,cloud-init 已经在 `/var/log/cloud-init-output.log` 下记录了东西。用户数据也以 root 身份运行,因此您不需要 sudo。 (3认同)
  • 您能提及您的整个解决方案并将其标记为答案吗? (2认同)