排查AWS CloudFormation创建公网可访问Postgres数据库的问题
排查AWS CloudFormation模板导致Postgres无法本地访问的常见问题
检查数据库实例的公有可访问性配置
确认模板中RDS实例的PubliclyAccessible属性是否设为true。如果是false,实例仅能在VPC内部访问,本地无法连接。模板中对应配置应该类似:DBInstance: Type: AWS::RDS::DBInstance Properties: PubliclyAccessible: true验证安全组入站规则
确保关联RDS实例的安全组允许来自任意IP(0.0.0.0/0)的Postgres默认端口(5432)的入站流量。模板中安全组配置需包含:RDSSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow Postgres access SecurityGroupIngress: - IpProtocol: tcp FromPort: 5432 ToPort: 5432 CidrIp: 0.0.0.0/0注意:如果是IPv6环境,还需添加
CidrIpv6: ::/0的规则。确认子网与路由表配置
- 检查RDS实例所在的子网是否为公有子网(即子网关联的路由表包含指向Internet网关的路由条目)。模板中路由表配置应类似:
PublicRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC PublicRoute: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway - 确保RDS实例的子网组包含至少一个公有子网,且子网已关联上述公有路由表。
- 检查RDS实例所在的子网是否为公有子网(即子网关联的路由表包含指向Internet网关的路由条目)。模板中路由表配置应类似:
核对数据库连接参数
- 确认本地使用的端点是RDS实例的公有DNS名称(可在AWS控制台RDS实例详情中查看),而非私有IP。
- 检查模板中设置的
MasterUsername、MasterUserPassword是否正确,本地连接时输入的凭证是否匹配。 - 确认数据库实例的
DBName(如果指定)是否存在,连接时需指定正确的数据库名称。
检查网络ACL配置
VPC的网络ACL需允许入站的5432端口流量和出站的任意端口流量(用于返回连接响应)。模板中网络ACL规则应包含:PublicNetworkACL: Type: AWS::EC2::NetworkAcl Properties: VpcId: !Ref VPC InboundPostgresRule: Type: AWS::EC2::NetworkAclEntry Properties: NetworkAclId: !Ref PublicNetworkACL RuleNumber: 100 Protocol: 6 # TCP RuleAction: allow Egress: false CidrBlock: 0.0.0.0/0 PortRange: From: 5432 To: 5432 OutboundAllRule: Type: AWS::EC2::NetworkAclEntry Properties: NetworkAclId: !Ref PublicNetworkACL RuleNumber: 100 Protocol: -1 # All RuleAction: allow Egress: true CidrBlock: 0.0.0.0/0验证RDS实例状态
确认RDS实例已处于available状态,未处于创建中、维护或故障状态。可通过AWS控制台或aws rds describe-db-instances命令查看。
内容的提问来源于stack exchange,提问作者Juraj Zovinec
相关产品推荐
相关产品推荐

