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. Итак, теперь я попробовал -
- Создание нового 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 для безопасности / конфигураций.
Мои вопросы:
Возможно ли и практично ли совместное использование EKS и RDS в одном VPC?
Видя, что пример отлично работает с VPC по умолчанию, чего мне не хватает при создании VPC для RDS?
Может ли 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