如何从EC2 :: Instance访问RDS :: DbInstance?

时间:2017-07-07 21:59:05

标签: amazon-rds amazon-cloudformation amazon-vpc

我目前正在使用Cloud Formation部署我部署的堆栈,其中包括:

  • A VPC
  • 创建的VPC内的子网
  • 创建的子网内的EC2实例
  • RDS Postgres数据库

起初我无法连接到DBInstance,因为它没有正确配置的SecurityGroup。

当我尝试创建SecurityGroup时,部署失败,因为正在不同的VPC上创建DBInstance和SecurityGroup。

但我无法在Cloud Formation上的任何RDS相关资源上找到属性来调整将在哪个VPC中创建数据库。搜索,我找到了创建DBSubnetGroup的替代方法。

但是为了使用DBSubnetGroup,我需要至少有两个子网(因为它需要覆盖至少2个可用区)。我希望避免在另一个AZ上创建一个空子网,只是为了使其工作。

有更好的选择吗?什么是让我的EC2实例仅使用Cloud Formation访问我的DBInstance的最简单方法?

1 个答案:

答案 0 :(得分:2)

如果您不想使用 DBSubnetGroup 方式,则创建RDS实例的唯一可能性是使用默认VPC。如果未指定DBSubnetGroup,则将在默认VPC中创建RDS实例。

现在,您的EC2实例有两种方式可以访问RDS实例。

  1. 让您的RDS实例可公开访问。确保您拥有严密的SecurityGroup配置以拒绝攻击的可能性。然后EC2实例应该能够访问数据库实例。

  2. 将公开标记为false。将默认VPC与使用VPC对等连接创建的VPC连接。我推荐这种方式,因为您的RDS实例无法公开访问,您可以完成工作。

  3. 除此之外,你已经提到了

      

    但是为了使用DBSubnetGroup,我需要至少有两个子网(因为它需要覆盖至少2个可用区)。我希望避免在另一个AZ上创建一个空子网,只是为了使其工作。

    RDS不会这样做。当您指定MultiAZ = true并拥有DBSubnetGroup时,在您的RDS模板中,DBInstance的副本将保留在另一个可用于不同AZ的子网中。当主节点关闭时,此副本节点将启动并充当主节点。记住这一点,我强烈建议您在创建RDS实例时使用DBSubnetGroup。

    更多阅读材料here

    希望这会有所帮助。