-
Notifications
You must be signed in to change notification settings - Fork 396
038. Implementa Terraform para gerenciar o Postgres
Esse momento do projeto foi muito massaaaaa. Fiz um sprint de estudo no Terraform e apliquei isso nesse PR. Com ele, nós subimos duas instâncias de Postgres, uma no ambiente de staging, e outra em production, onde tudo isso é organizado pelos arquivos de declaração do Terraform.
O massa é que foi usado módulos e eles encapsulam vários serviços e maluquisses de configuração da AWS, para por exemplo para subir um Postgres que seja público. Nesse caso, não é somente subir uma instância do RDS... você precisa criar subets, subnet groups, fazer associações nas route tables, é cheio de detalhes, e encapsular tudo isso num módulo é muito importante para você ter a mesma "topologia" entre os ambientes.
Então para cada ambiente, basta declarar qual serviço que você quer usar (por enquanto VPC e RDS) e o Terraform respeita e sobe tudo. Fiquei super seguro durante o processo, porque tive que destruir os ambientes diversas vezes ao longo dos testes.
Outro benefício de ter a abstração por módulos foi, por exemplo, poder usar toda a mesma topologia mas customizar os requisitos para cada ambiente, então para o ambiente de staging podemos escolher um banco mais fraco, numa região mais barata e sem backups. Já para produção, o contrário. Olha que massa
Staging:
module "database" {
source = "../modules/database"
environment = var.environment
vpc_id = module.vpc.vpc_id
vpc_cidr_block = module.vpc.vpc_cidr_block
route_table_id = module.vpc.route_table_id
// As customizações começam aqui:
engine_version = "14.1"
instance_class = "db.t4g.micro"
allocated_storage = 20
max_allocated_storage = 21
backup_retention_period = 0
skip_final_snapshot = true
deletion_protection = false
delete_automated_backups = true
}
Produção:
module "database" {
source = "../modules/database"
environment = var.environment
vpc_id = module.vpc.vpc_id
vpc_cidr_block = module.vpc.vpc_cidr_block
route_table_id = module.vpc.route_table_id
// As customizações começam aqui:
engine_version = "14.1"
instance_class = "db.t4g.micro"
allocated_storage = 20
max_allocated_storage = 100
backup_retention_period = 7
skip_final_snapshot = false
deletion_protection = true
delete_automated_backups = false
}