【问题标题】:rds replica error when creating in different vpc with terraform failing在 terraform 失败的不同 vpc 中创建时出现 rds 副本错误
【发布时间】:2021-11-06 12:58:39
【问题描述】:

我正在尝试通过 terraform 在不同区域创建 rds 数据库的只读副本。我可以通过 AWS 控制台实现,但是通过 Terraform (0.14.10) 应用时,应用失败并显示以下内容:

错误:创建数据库实例时出错:无效参数组合:数据库实例和 EC2 安全组位于不同的 VPC 中。数据库实例在 vpc-xxx,EC2 安全组在 vpc-yyy

TF 块:

resource "aws_db_instance" "replica" {
   count                  = var.enable_peering_read_replica ? 1 : 0
   name                   = db-replica
   identifier             = db-replica
   replicate_source_db    = source-db
   instance_class         = "db.t3.small"
   apply_immediately      = true
   publicly_accessible    = false
   skip_final_snapshot    = true
   vpc_security_group_ids = [aws_security_group.peering_sg.id]
}

对于 replicate_source_db,我使用了 arn 和 db 名称,但仍然出现相同的错误。

【问题讨论】:

  • 完整的资源代码和确切的错误信息是什么?
  • 更新了 TF 源码和完全错误
  • 您必须提供完整的 vpc 代码和您的安全组

标签: terraform amazon-rds amazon-vpc


【解决方案1】:

错误消息很清楚:您的数据库和安全组位于不同的 VPC。这意味着您无法关联它们。您的安全组aws_security_group.peering_sg.id(未显示定义)必须与您的数据库位于相同的 VPC 中。

【讨论】:

  • 它允许我通过控制台执行此操作,即在不同的 vpc 中选择安全组,这是必需的,因为副本需要在不同的 vpc 中。
  • 我已经能够通过 tf 部署所需的资源(新的 vpc、vpc 对等体、子网和安全组),然后通过控制台在此 vpc 中创建只读副本。但是通过 terraform 失败,但值与通过控制台执行时相同
  • @einonsy 您必须提供所有相关的 TF 代码。它显然与 AWS 控制台中的不同。
【解决方案2】:

这是一个棘手的问题,让我受了很多苦。即使周围有许多与此类似的线程,也没有一个能引导我找到完整的解决方案。 完整的解释如下。有两种可能的情况:

  1. 数据库副本将在与源数据库相同的区域中创建。
  2. 数据库副本将在与源数据库不同的区域中创建。

场景 2 是这篇文章的重点,也是我想要介绍的。这些是事实:

  • 对于 replicate_source_db,指定一个有效的数据库实例 ARN。 AWS Doc
  • db_subnet_group_name:数据库实例将在与数据库子网组关联的 VPC 中创建。如果未指定,它将在默认 VPC 或 EC2 Classic(如果可用)中创建。使用只读副本时,仅当源数据库指定另一个 AWS 区域中的实例时才应指定它。 db_instance module doc
  • 最后但同样重要的是,即使正确设置了上述选项,只读副本也会在默认 VPC 中创建。为什么?答案是,还有另一个对实现预期目标至关重要的配置 cross_region_replica。此属性的默认值为 false,这是我所有困惑的原因。我们需要将其设置为 true。

有关真正有效的完整示例,请查看Same region exampleDifferent region example

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2014-09-04
    • 2021-12-18
    • 2021-03-02
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2018-11-17
    相关资源
    最近更新 更多