如何使 RDS::DbInstance 可从 EC2::Instance 访问?
How to make RDS::DbInstance accessible from EC2::Instance?
我目前正在使用 Cloud Formation 来部署堆栈,其中包括:
- VPC
- 创建的 VPC 内的子网
- 创建的子网中的 EC2 实例
- 一个 RDS Postgres 数据库
起初我无法连接到 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实例。
让您的 RDS 实例可公开访问。确保您具有严格的安全组配置以拒绝攻击的可能性。那么EC2实例应该可以访问数据库实例了。
将可公开访问标记为 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
希望这对您有所帮助。
我目前正在使用 Cloud Formation 来部署堆栈,其中包括:
- VPC
- 创建的 VPC 内的子网
- 创建的子网中的 EC2 实例
- 一个 RDS Postgres 数据库
起初我无法连接到 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实例。
让您的 RDS 实例可公开访问。确保您具有严格的安全组配置以拒绝攻击的可能性。那么EC2实例应该可以访问数据库实例了。
将可公开访问标记为
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
希望这对您有所帮助。