通过Terraform创建的AWS EC2实例无法连接互联网问题求助
EC2实例公网访问及网络连接故障排查求助
我用以下Terraform配置创建了一台AWS Linux EC2实例,关联默认VPC、默认公有子网和默认公有IGW。但现在遇到两个问题:
- 访问实例公网URL时,Hello World网页无法打开
- SSH登录实例后执行
ping google.com操作失败
已尝试将用户数据脚本放入单独文件引用、更换AMI及数据脚本,均未解决问题,求指点解决方向。
Terraform配置代码
resource "aws_instance" "instance_1" { ami = "ami-05548f9cecf47b442" instance_type = "t2.micro" security_groups = [aws_security_group.instances.name] key_name = var.ssh_key user_data = <<-EOF #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<h1>Hello World $(hostname -f)</h1>" > /var/www/html/index.html EOF } resource "aws_security_group" "instances" { name = var.instance_security_group } resource "aws_security_group_rule" "allow_http_inbound" { type = "ingress" from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] security_group_id = aws_security_group.instances.id } resource "aws_security_group_rule" "allow_ssh_inbound" { type = "ingress" from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] security_group_id = aws_security_group.instances.id }
已尝试的排查操作
- 将用户数据脚本放入单独文件并引用(无效)
- 使用其他AMI及数据脚本(无效)
排查方向建议
1. 补充安全组出站规则
当前配置仅设置了入站规则,未允许任何出站流量,这会直接导致实例无法访问外部网络(如yum更新、ping外网),也会影响服务依赖的外部请求。添加以下出站规则:
resource "aws_security_group_rule" "allow_all_outbound" { type = "egress" from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] security_group_id = aws_security_group.instances.id }
2. 确认实例公有IP状态
- 登录AWS控制台查看实例详情,确认"公有IPv4地址"已分配;默认公有子网中的实例通常自动分配,但如果未分配,可尝试重启实例,或手动绑定弹性IP
- 检查实例的"网络接口"详情,确认公有IP已关联
3. 验证子网路由表配置
进入AWS控制台的VPC服务,找到实例所在公有子网对应的路由表,确认存在目标为0.0.0.0/0、下一跳为默认IGW的路由条目,这条路由是实例访问公网的关键
4. 检查用户数据执行日志
SSH登录实例后,查看用户数据的执行日志,确认脚本是否正常执行:
cat /var/log/cloud-init-output.log
重点查看yum安装、httpd启动步骤是否有报错(如权限不足、网络超时导致包无法下载等)
5. 检查网络ACL配置
默认VPC的网络ACL通常允许所有入站和出站流量,但如果有自定义修改,需确认:
- 入站规则允许80、22端口的流量,同时允许Ephemeral端口范围(通常1024-65535)的响应流量
- 出站规则允许所有必要的流量(如80、443用于yum更新,ICMP用于ping)
内容的提问来源于stack exchange,提问作者GM_
相关产品推荐
相关产品推荐

