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

How to make RDS::DbInstance accessible from EC2::Instance?

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

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

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

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

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

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

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

现在您的EC2实例可以通过两种方式访问​​RDS实例。

  1. 让您的 RDS 实例可公开访问。确保您具有严格的安全组配置以拒绝攻击的可能性。那么EC2实例应该可以访问数据库实例了。

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

除此之外,您还提到了

But in order to use a DBSubnetGroup, I need to have at least two subnets (because it needs to cover at least 2 Availability Zones). I wish to avoid creating an empty subnet on another AZ just to make this work.

RDS 不是这样工作的。当您在 RDS 模板中指定 MultiAZ = true 并具有 DBSubnetGroup 时,您的 DBInstance 的副本将在不同 AZ 中可用的另一个子网中维护。当您的主节点出现故障时,此副本节点会出现并充当主节点。牢记这一点,我强烈建议您在创建 RDS 实例时使用 DBSubnetGroup。

更多阅读内容here

希望这对您有所帮助。