我正在尝试从同一VPC中的EC2实例连接到RDS实例。
EC2和RDS实例都具有“默认”安全组,该安全组允许来自具有相同安全组的其他实例的入站流量。
入站规则:
出站规则允许所有流量:
我的RDS终结点的端口是5432。从EC2实例来看,nslookup成功,但是telnet没有。
[ec2-user@ip-172-31-23-123 ~]$ nslookup <my-rds-endpoint>
Server: 172.31.0.2
Address: 172.31.0.2#53
Non-authoritative answer:
Name: <my-rds-endpoint>
Address: 172.31.34.64
[ec2-user@ip-172-31-23-123 ~]$ telnet <my-rds-endpoint> 5432
Trying 172.31.34.64...
telnet: connect to address 172.31.34.64: Connection timed out
我还应该尝试什么?
此外,telnet命令尽管使EC2处于“运行”状态,但通常会使EC2无响应并且无法通过SSH进入。我正在使用带有AMI ami-097834fcb3081f51a的t2.medium现货实例,但已将其复制为多个实例和实例类型。
这种设置的正常配置是:
App-SG
)使用的RDS-SG
)允许从App-SG
通过端口5432(Postgres)进行入站访问即,RDS-SG
应在入站规则中专门引用App-SG
。这样,可以单独控制对每个层的访问,而不是将它们“置于”同一安全组中。 (资源实际上并未“进入”安全组。相反,安全组规则分别适用于与该安全组关联的所有实例。)
Amazon RDS数据库应该已经以Publicly Accessible = No
启动,这将导致数据库的DNS名称解析为私有IP地址。如果将其设置为Yes
,则流量将离开VPC,然后重新进入,这是不希望的。
要确认数据库是否正常运行,请通过SQL客户端(例如psql
)进行连接。这比使用Telnet更适合测试连接。