Skip to content

docs(infra): descoberta + IaC do RDS Proxy compartilhado, aguardando aprovação (M2-03)#149

Open
cstipkovic wants to merge 2 commits into
developfrom
feat/M2-03-rds-proxy-mysql
Open

docs(infra): descoberta + IaC do RDS Proxy compartilhado, aguardando aprovação (M2-03)#149
cstipkovic wants to merge 2 commits into
developfrom
feat/M2-03-rds-proxy-mysql

Conversation

@cstipkovic

Copy link
Copy Markdown
Member

Resumo

Fase 0 (descoberta, somente leitura) do RDS Proxy executada contra a conta AWS real, mais o CloudFormation (infra/rds-proxy.yml) e o runbook (docs/runbooks/rds-proxy.md) prontos. Esta PR não deploya nada — é IaC + documentação aguardando aprovação humana em pontos específicos.

Achados da descoberta (Fase 0)

  • Identificador real de dev mudou de dev-mysql (citado na doc legado) para mysql-dev-instance — mesmo cluster (ckkqlpl6ei1d), aparentemente renomeado.
  • Ambas as VPCs (dev vpc-f6d5a291, prod vpc-1cb84078) são VPCs default, com subnets públicas e uma única route table por VPC — não há NAT Gateway existente.
  • Security Groups do RDS (mysql-anywahre dev / mysql-anywhere prod) liberam 3306 para 0.0.0.0/0 — achado de segurança pré-existente, fora do escopo desta issue (não alterado).
  • prod-mysql compartilha VPC com influentia-prod-mysql — confirma o banco compartilhado com outro projeto citado na doc.

Decisão de arquitetura pendente

Criar o NAT Gateway necessário exigiria alterar a rota de uma tabela compartilhada por toda a VPC (afetando outros recursos, inclusive o banco do InfluentIA em prod). Duas opções levantadas no runbook, sem decisão tomada — pendente de aprovação do engenheiro-chefe.

O que foi escrito (código apenas, não executado)

  • infra/rds-proxy.yml — stack CloudFormation separada (role, security groups com regras cruzadas via recursos standalone para evitar dependência circular, RDS Proxy com MaxConnectionsPercent: 25, regra de ingress aditiva no SG do RDS). Validado com aws cloudformation validate-template.
  • docs/runbooks/rds-proxy.md — descoberta completa, SQL da Fase 1 (usuário adserverless_app), comandos de deploy documentados, checklist de validação, rollback.
  • serverless.yml — bloco custom.vpc comentado, documentando o bloqueio.
  • docs/MATRIZ-PARIDADE.md — linha D01 atualizada.

O que NÃO foi feito (intencional)

  • Criação do usuário MySQL adserverless_app (tarefa manual do engenheiro-chefe)
  • Secrets Manager
  • Deploy do CloudFormation
  • Regra de Security Group real no RDS
  • vpc: ativo nas Lambdas (bloqueado pela decisão de NAT/subnets)

Como testar

aws cloudformation validate-template --template-body file://infra/rds-proxy.yml --region us-east-1
npx serverless print --stage dev
npx serverless print --stage prod

Refs #77

🤖 Gerado com Claude Code

…aprovação (M2-03)

Fase 0 (somente leitura) executada contra a conta AWS real: descobre que o
identificador de dev mudou de dev-mysql para mysql-dev-instance, que ambas
as VPCs (dev/prod) são VPCs default com subnets públicas e uma ÚNICA route
table por VPC (sem NAT existente), e que os Security Groups do RDS
('mysql-anywahre'/'mysql-anywhere') liberam 3306 para 0.0.0.0/0 — exposição
pré-existente, fora do escopo desta issue.

Isso muda o plano original: criar um NAT Gateway exigiria alterar a rota de
uma tabela compartilhada por toda a VPC (que também hospeda o
influentia-prod-mysql em prod), afetando outros projetos. Documentado como
decisão de arquitetura pendente de aprovação do engenheiro-chefe.

Adiciona infra/rds-proxy.yml (CloudFormation parametrizado e validado via
aws cloudformation validate-template: role, security groups com regras
cruzadas quebrando dependência circular, RDS Proxy com MaxConnectionsPercent
25, regra de ingress aditiva no SG do RDS) e docs/runbooks/rds-proxy.md com
toda a descoberta, SQL da Fase 1 e checklist de validação.

NÃO EXECUTADO: criação de usuário MySQL (tarefa manual do engenheiro-chefe),
Secrets Manager, deploy do CloudFormation, alteração de Security Group real,
vpc: nas Lambdas (deixado comentado no serverless.yml, bloqueado pela
decisão de NAT/subnets).

Refs #77

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@cstipkovic cstipkovic requested a review from fabiomagnoni as a code owner July 10, 2026 20:53
…roxy (M2-03)

Aprovado: subnets novas dedicadas (Opção 1 do runbook) em vez de alterar a
route table compartilhada por toda a VPC. Adiciona
infra/vpc-lambda-network.yml (stack separada e aditiva: 2 subnets por stage
em CIDR livre 172.31.48.0/24 e 172.31.49.0/24, route table própria, NAT
Gateway próprio na subnet pública existente reaproveitada) — nenhum recurso
pré-existente da VPC é modificado.

Atualiza o bloco custom.vpc (ainda comentado) no serverless.yml com os
Fn::ImportValue reais dos exports das duas stacks, corrigindo um bug: o
export original de subnetIds era uma string única separada por vírgula
(Fn::ImportValue não faz split em lista), agora exportadas individualmente
(LambdaSubnet1Id/LambdaSubnet2Id).

Ambos os templates validados via aws cloudformation validate-template.
Ainda NÃO deployado — aguarda Fases 1 (usuário MySQL) e 2 (Secrets Manager).

Refs #77

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant