1

不久前我开始使用 Terraform,我一直在开发一个 AWS 开发环境,我需要在其中放置 EKS 和 aurora-mysql 无服务器 RDS,并让它们相互交谈。

我在这里使用了很好的例子:

https://github.com/terraform-aws-modules/terraform-aws-eks/tree/master/examples/managed_node_groups

和这里:

https://github.com/terraform-aws-modules/terraform-aws-rds-aurora/tree/master/examples/serverless(这实际上是设置为建立一个 aurora-mysql 无服务器数据库,而不是宣传的 postgres,但是mysql 是我正在寻找的东西,干杯)。

到目前为止一切顺利,无服务器示例使用默认 VPC,这对于游戏来说很好。但我想:

1. 在与 EKS 相同的 VPC 中创建 RDS 以简化组网:

为此,我将 ....terraform-aws-rds-aurora/examples/serverless/main.tf 的内容添加到 ....terraform-aws-eks/examples/managed_node_groups/main.tf 并设置 tf将文件从 ....terraform-aws-rds-aurora 复制到一个文件夹,并将其设置为:

module "aurora" {
  source = "../../modules/aurora"

并替换:

data.aws_vpc.default.id

module.vpc.vpc_id

我得到了:

错误:创建 RDS 集群时出错:InvalidParameterValue:Aurora Serverless 不支持子网位于同一可用区的数据库子网组。选择具有不同可用区中子网的数据库子网组。状态码:400,请求 id:7d2e359f-6609-4dde-b63e-11a16d1efaf2 在 ../../modules/aurora/main.tf 第 33 行,资源“aws_rds_cluster”“this”:33:资源“aws_rds_cluster”“这个” {

公平是公平的,我阅读了一些内容并意识到我可能更喜欢 EKS 和 RDS 的不同 VPC,以便每个 VPC 都在 us-west-2 中的所有 AZ 上具有冗余。所以现在我尝试了-

  1. 为 RDS 创建新的 VPC:

我回到 ..../terraform-aws-rds-aurora/tree/master/examples/serverless/main.tf ,并设置:

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 2.6"

  name                 = "${var.env}-mysql-vpc"
  cidr                 = "172.16.0.0/16"
  azs                  = data.aws_availability_zones.available.names
  private_subnets      = ["172.16.7.0/24", "172.16.8.0/24", "172.16.9.0/24"]
  public_subnets       = ["172.16.10.0/24", "172.16.11.0/24", "172.16.12.0/24"]
  enable_nat_gateway   = true
  single_nat_gateway   = true
  enable_dns_hostnames = true
}

data "aws_vpc" "created" {
  id = module.vpc.vpc_id
}

data "aws_subnet_ids" "all" {
  vpc_id = data.aws_vpc.created.id
}

并得到了同样的信息!

我难住了。我不想为 RDS 使用默认 VPC,最终我想为安全/配置编辑 VPC。

我的问题是:

  1. EKS 和 RDS 在同一个 VPC 中同时存在是否可行且可行?

  2. 看到该示例在默认 VPC 上运行良好,我在为 RDS 创建 VPC 时缺少什么?

  3. Terraform 能否创建一个“空”VPC,然后极光模块将在其中创建子网?或者我有没有一种简单的方法来创建缺少的子网(同时为每个子网指定可用区)以及无服务器的其余 VPC 要求?

我意识到这介于 AWS 和 Terraform 之间,但会感谢您的帮助。

4

1 回答 1

1

感谢@mokugo-devops 的评论,我能够创建一个新的 VPC,其中每个子网都有不同的 AZ。但事实证明,EKS 和 Aurora Serverless 可以存在于同一个 VPC 中,我只需要为无服务器获取公共子网(由不同 AZ 中的 terraform-aws-modules/vpc/aws 创建),如下所示:

并让模块“aurora”像这样读取它们:

module "aurora" {
  source                = "../../modules/aurora"
  name                  = "aurora-serverless"
  engine                = "aurora"
  engine_mode           = "serverless"
  replica_scale_enabled = false
  replica_count         = 0
  backtrack_window = 10 # ignored in serverless

  subnets               = module.vpc.public_subnets
于 2020-05-25T07:22:21.697 回答