使用Terraform创建的AWS EC2实例访问公网IP提示连接被拒绝
问题根因
- 安全组SSH端口配置错误:当前配置开放的是2端口,SSH默认端口为22,该问题会导致你无法远程登陆实例排查问题
- Apache服务未正确安装启动:
user_data中执行apt install apache2时未添加-y参数,安装过程会卡在交互确认环节,导致Apache没有安装成功,没有进程监听80端口,因此访问公网IP会提示连接被拒绝 - 没有显式启用Apache服务:即使安装完成,部分Ubuntu镜像默认不会自动启动Apache,建议在user_data中显式添加启动和开机自启的命令
修复方案
1. 修复安全组配置
把aws_security_group.allow_web资源里的SSH入站规则修改为:
ingress { description = "SSH" from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] }
2. 修复user_data脚本
修改aws_instance.web-server-instance里的user_data为:
user_data = <<-EOF #! /bin/bash sudo apt update -y sudo apt install apache2 -y sudo systemctl start apache2 sudo systemctl enable apache2 sudo bash -c 'echo your very first web server > /var/www/html/index.html' EOF
额外优化建议
生产环境不建议直接在Terraform配置文件里明文写AWS访问密钥,可以通过环境变量、AWS本地配置文件或者IAM角色的方式传递,避免密钥泄露风险。
内容的提问来源于stack exchange,提问作者kanhaiyakumar
相关产品推荐
相关产品推荐

