Terraform, EKS и aurora-mysql serverless RDS - подсети в одной зоне доступа

Я начал с Terraform некоторое время назад, и я работал над средой разработки AWS, где мне нужно установить EKS и бессерверную RDS aurora-mysql, и заставить их общаться друг с другом.

Я использовал здесь отличные примеры:

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. Создайте RDS в том же VPC, что и EKS, чтобы упростить работу в сети:

С этой целью я добавил содержимое.... 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, идентификатор запроса: 7d2e359f-6609-4dde-b63e-11a16d1efaf2 в../../modules/aurora/main.tf строке 33, в ресурсе "aws_rds_cluster" "this": 33: resource "aws_rds_cluster" " этот" {

честно, честно, я прочитал некоторые и понял, что я мог бы предпочесть другой VPC для EKS и RDS, чтобы каждый из них имел избыточность во всех зонах доступности в us-west-2. Итак, теперь я попробовал -

  1. Создание нового VPC для RDS:

Я вернулся к.... / 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
}

и получил такое же сообщение!

Я в тупике. Я не хочу использовать VPC по умолчанию для RDS, и в конце концов я хочу отредактировать VPC для безопасности / конфигураций.

Мои вопросы:

  1. Возможно ли и практично ли совместное использование EKS и RDS в одном VPC?

  2. Видя, что пример отлично работает с VPC по умолчанию, чего мне не хватает при создании VPC для RDS?

  3. Может ли Terraform создать "пустой" VPC, а модуль aurora будет создавать в нем подсети? Или есть простой способ затем создать недостающие подсети (указав зону доступности для каждой) и остальные требования VPC для бессерверных?

Я понимаю, что это находится между AWS и Terraform, но буду признателен за вашу помощь.

1 ответ

Благодаря комментариям @mokugo-DevOps я смог создать новый VPC, в котором каждая подсеть имела свою зону доступности. Но, как оказалось, EKS и Aurora Serverless могут жить в одном и том же VPC, мне просто нужно было получить только общедоступные подсети (которые создаются 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
Другие вопросы по тегам