为什么userdata在我的Terraform代码中不起作用?

问题描述

我正在使用Terraform,并尝试使用用户日期执行bash脚本。下面是我的代码:

    resource "aws_instance" "web_server" {
  ami           = var.centos
  instance_type = var.instance-type
  subnet_id     = aws_subnet.private.id
  private_ip    = var.web-private-ip
  associate_public_ip_address = true

  user_data = <<-EOF
          #!/bin/bash 
          yum install httpd -y
          echo "hello world" > /var/www/html/index.html
          yum update -y
          systemctl start httpd
          firewall-cmd --zone=public --permanent --add-service=http
          firewall-cmd --zone=public --permanent --add-service=https
          firewall-cmd --reload
          EOF
}

但是,当我导航到公共IP时,我看不到“ hello world”消息,也没有从服务器获得响应。我在这里缺少什么吗?我尝试直接通过aws控制台,但那里的用户数据不成功。

解决方法

验证了我在centos实例上的用户数据,并且您的脚本是正确。但是,该问题可能是由于两件事造成的:

  1. subnet_id = aws_subnet.private.id这表明您已将实例放置在专用子网中。要通过Internet连接到您的实例,它必须位于公共子网

  2. 没有指定vpc_security_group_ids,这导致使用VPC中的默认SG,默认情况下,该SG的互联网流量被阻止。

我也不知道您想对private_ip = var.web-private-ip做些什么。令人困惑。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...