feat(vpc): optional NAT strategy and no-default-route private subnets - #314
Open
alissonrosa-lang wants to merge 1 commit into
Open
feat(vpc): optional NAT strategy and no-default-route private subnets#314alissonrosa-lang wants to merge 1 commit into
alissonrosa-lang wants to merge 1 commit into
Conversation
Adds nat_strategy variable (default per_public_subnet, preserving current behavior and resource addresses) with a referenced_only option that creates NAT Gateways only for public subnets referenced by a private subnet nat_key. Also allows nat_key = "" for private subnets with no default route (egress via VPC endpoints only).
Contributor
Author
|
Evidências de validação local (nota: o CircleCI não reportou checks neste PR — detalhes no fim):
Comportamento a destacar no modo Nota sobre o CI: o job |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivação
O módulo
vpccria hoje 1 NAT Gateway por subnet pública, incondicionalmente (aws_nat_gateway.thiscomfor_each = local.public_subnets), e a validação devar.subnetsobriga toda subnet privada a referenciar umnat_key. Na prática, isso induz o padrão "1 NAT por AZ" mesmo quando o tráfego não justifica, e impede o desenho "subnet privada sem rota default" (egress somente via VPC endpoints), cada vez mais comum em arquiteturas serverless.Caso real — conta Escale Data - Prod (950509508909)
Durante a revisão de custos de ago/2026 encontramos exatamente esse padrão em produção: 4 NAT Gateways (1 por AZ). Medição de 7 dias via CloudWatch:
100% do tráfego flui por um único NAT. Os outros 3 custam ~US$ 32,85/mês cada em horas provisionadas (+ 3 EIPs): ~US$ 98/mês (~US$ 1.180/ano) sem função alguma.
O que muda
nat_strategy(string, default"per_public_subnet"):per_public_subnet(default) — comportamento idêntico ao atual;referenced_only— cria NAT/EIP apenas para subnets públicas referenciadas pelonat_keyde ao menos uma subnet privada (elimina NATs ociosos por construção).nat_keyaceita""em subnets privadas — a subnet fica sem rota default (padrão para cargas que saem só por VPC endpoints). Aaws_route.private_internetsimplesmente não é criada para essas subnets.Compatibilidade retroativa (garantias)
for_each: comnat_strategy = "per_public_subnet"(default),local.nat_subnets == local.public_subnets—terraform plané no-op para consumidores existentes. Nenhum NAT/EIP é destruído ou recriado (recriação de NAT = nova EIP = quebra de whitelists externas).var.subnets— nada deoptional(), sem exigência de versão nova de Terraform.nat_keypreenchido, por força da validação antiga) passam na validação nova sem alteração.terraform fmt -checketerraform validateOK.Exemplo de uso novo
Pós-merge
Sugerimos criar uma tag de release (ex.:
v1.1.0): a última tag do repo (v1.0.0) é de jan/2025 e anterior à criação deste módulo (#275, jan/2026) — hoje não há como pinar omodules/vpcpor tag, o que força consumidores a apontarmasterou SHA.Contexto
Mudança motivada pela criação da infra do projeto data-platform (contas novas dev/prd), que usará este módulo. Feliz em ajustar o que o time preferir — inclusive dividir em dois PRs (estratégia de NAT /
nat_keyvazio) se facilitar o review.