@maestro-ai/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -0
- package/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -0
- package/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -0
- package/content/guides/Checklist Mestre de Entrega.md +68 -0
- package/content/guides/Gates de Qualidade.md +209 -0
- package/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -0
- package/content/guides/Guia de Chaos Engineering.md +267 -0
- package/content/guides/Guia de Debugging com IA.md +135 -0
- package/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -0
- package/content/guides/Guia de Migrations Zero-Downtime.md +311 -0
- package/content/guides/Guia de Multi-tenancy.md +368 -0
- package/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -0
- package/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -0
- package/content/guides/Guia de SLOs e Error Budgets.md +315 -0
- package/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -0
- package/content/guides/Rules base.md +90 -0
- package/content/prompts/README.md +203 -0
- package/content/prompts/acessibilidade/analise-acessibilidade.md +257 -0
- package/content/prompts/apis/design-api-rest.md +303 -0
- package/content/prompts/apis/idempotencia.md +254 -0
- package/content/prompts/apis/versionamento.md +313 -0
- package/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -0
- package/content/prompts/arquitetura/clean-architecture.md +151 -0
- package/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -0
- package/content/prompts/arquitetura/ddd-cqrs.md +176 -0
- package/content/prompts/arquitetura/modelo-dominio.md +207 -0
- package/content/prompts/arquitetura/multi-tenancy.md +235 -0
- package/content/prompts/database/migrations-zero-downtime.md +192 -0
- package/content/prompts/database/otimizacao-queries.md +296 -0
- package/content/prompts/desenvolvimento/code-review.md +301 -0
- package/content/prompts/desenvolvimento/gerar-servico.md +271 -0
- package/content/prompts/devops/docker-compose.md +336 -0
- package/content/prompts/devops/feature-flags.md +374 -0
- package/content/prompts/devops/kubernetes-deploy.md +460 -0
- package/content/prompts/devops/pipeline-cicd.md +358 -0
- package/content/prompts/devops/terraform-iac.md +502 -0
- package/content/prompts/escalabilidade/analise-performance.md +240 -0
- package/content/prompts/escalabilidade/analise-performance.txt +94 -0
- package/content/prompts/escalabilidade/caching.md +255 -0
- package/content/prompts/observabilidade/chaos-testing.md +237 -0
- package/content/prompts/observabilidade/estrategia-observabilidade.md +263 -0
- package/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -0
- package/content/prompts/observabilidade/slos.md +215 -0
- package/content/prompts/produto/discovery-inicial.md +203 -0
- package/content/prompts/produto/discovery-inicial.txt +33 -0
- package/content/prompts/requisitos/refinar-requisitos.md +232 -0
- package/content/prompts/requisitos/refinar-requisitos.txt +40 -0
- package/content/prompts/seguranca/analise-seguranca.md +243 -0
- package/content/prompts/seguranca/pentest-checklist.md +333 -0
- package/content/prompts/seguranca/rate-limiting.md +356 -0
- package/content/prompts/seguranca/revisao-lgpd.md +227 -0
- package/content/prompts/seguranca/threat-modeling.md +224 -0
- package/content/prompts/testes/contract-testing.md +340 -0
- package/content/prompts/testes/gerar-testes-unitarios.md +474 -0
- package/content/prompts/testes/testes-e2e.md +460 -0
- package/content/prompts/testes/testes-integracao.md +418 -0
- package/content/prompts/testes/testes-performance.md +458 -0
- package/content/prompts/ux/gerar-ui-stitch.md +151 -0
- package/content/skills/api-patterns/SKILL.md +81 -0
- package/content/skills/api-patterns/api-style.md +42 -0
- package/content/skills/api-patterns/auth.md +24 -0
- package/content/skills/api-patterns/documentation.md +26 -0
- package/content/skills/api-patterns/graphql.md +41 -0
- package/content/skills/api-patterns/rate-limiting.md +31 -0
- package/content/skills/api-patterns/response.md +37 -0
- package/content/skills/api-patterns/rest.md +40 -0
- package/content/skills/api-patterns/scripts/api_validator.py +211 -0
- package/content/skills/api-patterns/security-testing.md +122 -0
- package/content/skills/api-patterns/trpc.md +41 -0
- package/content/skills/api-patterns/versioning.md +22 -0
- package/content/skills/app-builder/SKILL.md +75 -0
- package/content/skills/app-builder/agent-coordination.md +71 -0
- package/content/skills/app-builder/feature-building.md +53 -0
- package/content/skills/app-builder/project-detection.md +34 -0
- package/content/skills/app-builder/scaffolding.md +118 -0
- package/content/skills/app-builder/tech-stack.md +40 -0
- package/content/skills/app-builder/templates/SKILL.md +39 -0
- package/content/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/content/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/content/skills/architecture/SKILL.md +55 -0
- package/content/skills/architecture/context-discovery.md +43 -0
- package/content/skills/architecture/examples.md +94 -0
- package/content/skills/architecture/pattern-selection.md +68 -0
- package/content/skills/architecture/patterns-reference.md +50 -0
- package/content/skills/architecture/trade-off-analysis.md +77 -0
- package/content/skills/bash-linux/SKILL.md +199 -0
- package/content/skills/behavioral-modes/SKILL.md +242 -0
- package/content/skills/brainstorming/SKILL.md +163 -0
- package/content/skills/brainstorming/dynamic-questioning.md +350 -0
- package/content/skills/clean-code/SKILL.md +201 -0
- package/content/skills/code-review-checklist/SKILL.md +109 -0
- package/content/skills/database-design/SKILL.md +52 -0
- package/content/skills/database-design/database-selection.md +43 -0
- package/content/skills/database-design/indexing.md +39 -0
- package/content/skills/database-design/migrations.md +48 -0
- package/content/skills/database-design/optimization.md +36 -0
- package/content/skills/database-design/orm-selection.md +30 -0
- package/content/skills/database-design/schema-design.md +56 -0
- package/content/skills/database-design/scripts/schema_validator.py +172 -0
- package/content/skills/deployment-procedures/SKILL.md +241 -0
- package/content/skills/doc.md +177 -0
- package/content/skills/documentation-templates/SKILL.md +194 -0
- package/content/skills/frontend-design/SKILL.md +396 -0
- package/content/skills/frontend-design/animation-guide.md +331 -0
- package/content/skills/frontend-design/color-system.md +311 -0
- package/content/skills/frontend-design/decision-trees.md +418 -0
- package/content/skills/frontend-design/motion-graphics.md +306 -0
- package/content/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/content/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/content/skills/frontend-design/typography-system.md +345 -0
- package/content/skills/frontend-design/ux-psychology.md +541 -0
- package/content/skills/frontend-design/visual-effects.md +383 -0
- package/content/skills/game-development/2d-games/SKILL.md +119 -0
- package/content/skills/game-development/3d-games/SKILL.md +135 -0
- package/content/skills/game-development/SKILL.md +167 -0
- package/content/skills/game-development/game-art/SKILL.md +185 -0
- package/content/skills/game-development/game-audio/SKILL.md +190 -0
- package/content/skills/game-development/game-design/SKILL.md +129 -0
- package/content/skills/game-development/mobile-games/SKILL.md +108 -0
- package/content/skills/game-development/multiplayer/SKILL.md +132 -0
- package/content/skills/game-development/pc-games/SKILL.md +144 -0
- package/content/skills/game-development/vr-ar/SKILL.md +123 -0
- package/content/skills/game-development/web-games/SKILL.md +150 -0
- package/content/skills/geo-fundamentals/SKILL.md +156 -0
- package/content/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/content/skills/i18n-localization/SKILL.md +154 -0
- package/content/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/content/skills/intelligent-routing/SKILL.md +334 -0
- package/content/skills/lint-and-validate/SKILL.md +45 -0
- package/content/skills/lint-and-validate/scripts/lint_runner.py +172 -0
- package/content/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/content/skills/mcp-builder/SKILL.md +176 -0
- package/content/skills/mobile-design/SKILL.md +394 -0
- package/content/skills/mobile-design/decision-trees.md +516 -0
- package/content/skills/mobile-design/mobile-backend.md +491 -0
- package/content/skills/mobile-design/mobile-color-system.md +420 -0
- package/content/skills/mobile-design/mobile-debugging.md +122 -0
- package/content/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/content/skills/mobile-design/mobile-navigation.md +458 -0
- package/content/skills/mobile-design/mobile-performance.md +767 -0
- package/content/skills/mobile-design/mobile-testing.md +356 -0
- package/content/skills/mobile-design/mobile-typography.md +433 -0
- package/content/skills/mobile-design/platform-android.md +666 -0
- package/content/skills/mobile-design/platform-ios.md +561 -0
- package/content/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/content/skills/mobile-design/touch-psychology.md +537 -0
- package/content/skills/nextjs-best-practices/SKILL.md +203 -0
- package/content/skills/nodejs-best-practices/SKILL.md +333 -0
- package/content/skills/parallel-agents/SKILL.md +175 -0
- package/content/skills/performance-profiling/SKILL.md +143 -0
- package/content/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/content/skills/plan-writing/SKILL.md +152 -0
- package/content/skills/powershell-windows/SKILL.md +167 -0
- package/content/skills/python-patterns/SKILL.md +441 -0
- package/content/skills/react-patterns/SKILL.md +198 -0
- package/content/skills/red-team-tactics/SKILL.md +199 -0
- package/content/skills/seo-fundamentals/SKILL.md +129 -0
- package/content/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/content/skills/server-management/SKILL.md +161 -0
- package/content/skills/systematic-debugging/SKILL.md +109 -0
- package/content/skills/tailwind-patterns/SKILL.md +269 -0
- package/content/skills/tdd-workflow/SKILL.md +149 -0
- package/content/skills/testing-patterns/SKILL.md +178 -0
- package/content/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/content/skills/vulnerability-scanner/SKILL.md +276 -0
- package/content/skills/vulnerability-scanner/checklists.md +121 -0
- package/content/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/content/skills/webapp-testing/SKILL.md +187 -0
- package/content/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/content/specialists/Especialista em Acessibilidade.md +266 -0
- package/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -0
- package/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -0
- package/content/specialists/Especialista em Arquitetura de Software.md +177 -0
- package/content/specialists/Especialista em Banco de Dados.md +260 -0
- package/content/specialists/Especialista em Contrato de API.md +172 -0
- package/content/specialists/Especialista em Dados e Analytics com IA.md +246 -0
- package/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -0
- package/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -0
- package/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -0
- package/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -0
- package/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -0
- package/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -0
- package/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -0
- package/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -0
- package/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -0
- package/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -0
- package/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -0
- package/content/specialists/Especialista em Observabilidade.md +415 -0
- package/content/specialists/Especialista em Performance e Escalabilidade.md +373 -0
- package/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -0
- package/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -0
- package/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -0
- package/content/specialists/Especialista em UX Design.md +453 -0
- package/content/specialists/INDEX.md +43 -0
- package/content/templates/PRD.md +165 -0
- package/content/templates/README.md +65 -0
- package/content/templates/adr.md +103 -0
- package/content/templates/arquitetura.md +279 -0
- package/content/templates/backlog.md +185 -0
- package/content/templates/checklist-seguranca.md +180 -0
- package/content/templates/contexto.md +120 -0
- package/content/templates/criterios-aceite.md +99 -0
- package/content/templates/design-banco.md +270 -0
- package/content/templates/design-doc.md +240 -0
- package/content/templates/feature.md +88 -0
- package/content/templates/historia-backend.md +84 -0
- package/content/templates/historia-frontend.md +75 -0
- package/content/templates/historia-usuario.md +125 -0
- package/content/templates/mapa-navegacao.md +133 -0
- package/content/templates/matriz-rastreabilidade.md +121 -0
- package/content/templates/modelo-dominio.md +219 -0
- package/content/templates/plano-testes.md +199 -0
- package/content/templates/prototipo-stitch.md +138 -0
- package/content/templates/requisitos.md +162 -0
- package/content/templates/slo-sli.md +197 -0
- package/content/workflows/README-MCP.md +363 -0
- package/content/workflows/brainstorm.md +113 -0
- package/content/workflows/create.md +59 -0
- package/content/workflows/debug.md +103 -0
- package/content/workflows/deploy.md +176 -0
- package/content/workflows/enhance.md +63 -0
- package/content/workflows/mcp-debug.md +506 -0
- package/content/workflows/mcp-feature.md +385 -0
- package/content/workflows/mcp-gate.md +413 -0
- package/content/workflows/mcp-next.md +388 -0
- package/content/workflows/mcp-refactor.md +600 -0
- package/content/workflows/mcp-start.md +304 -0
- package/content/workflows/mcp-status.md +400 -0
- package/content/workflows/orchestrate.md +237 -0
- package/content/workflows/plan.md +89 -0
- package/content/workflows/preview.md +81 -0
- package/content/workflows/status.md +86 -0
- package/content/workflows/test.md +144 -0
- package/content/workflows/ui-ux-pro-max.md +296 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.js +138 -0
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.js +50 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/package.json +48 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
# Prompt: Infrastructure as Code com Terraform
|
|
2
|
+
|
|
3
|
+
> **Quando usar**: Provisionar infraestrutura em cloud de forma reproduzível
|
|
4
|
+
> **Especialista**: [DevOps e Infraestrutura](../../02-especialistas/Especialista%20em%20DevOps%20e%20Infraestrutura.md)
|
|
5
|
+
> **Nível**: Médio a Complexo
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Fluxo de Contexto
|
|
10
|
+
|
|
11
|
+
Antes de usar este prompt, tenha em mãos:
|
|
12
|
+
- `docs/CONTEXTO.md` - Entendimento do projeto
|
|
13
|
+
- `docs/05-arquitetura/arquitetura.md` - Arquitetura e requisitos de infra
|
|
14
|
+
|
|
15
|
+
Após gerar, salve o resultado em:
|
|
16
|
+
- `infra/terraform/` - Diretório com módulos
|
|
17
|
+
- `infra/terraform/environments/` - Configs por ambiente
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Prompt Completo
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Atue como especialista em Terraform e Infrastructure as Code.
|
|
25
|
+
|
|
26
|
+
## Contexto do Projeto
|
|
27
|
+
|
|
28
|
+
[COLE O CONTEÚDO DE docs/CONTEXTO.md]
|
|
29
|
+
|
|
30
|
+
## Cloud Provider
|
|
31
|
+
|
|
32
|
+
- Provider: [AWS/GCP/Azure]
|
|
33
|
+
- Região principal: [região]
|
|
34
|
+
- Multi-região: [Sim/Não]
|
|
35
|
+
|
|
36
|
+
## Recursos Necessários
|
|
37
|
+
|
|
38
|
+
### Computação
|
|
39
|
+
- [ ] VMs/EC2 instances
|
|
40
|
+
- [ ] Containers (ECS/EKS/GKE/AKS)
|
|
41
|
+
- [ ] Serverless (Lambda/Cloud Functions)
|
|
42
|
+
- [ ] Auto Scaling Groups
|
|
43
|
+
|
|
44
|
+
### Banco de Dados
|
|
45
|
+
- [ ] PostgreSQL managed (RDS/Cloud SQL/Azure DB)
|
|
46
|
+
- [ ] MySQL managed
|
|
47
|
+
- [ ] MongoDB managed
|
|
48
|
+
- [ ] Redis managed
|
|
49
|
+
- [ ] ElasticSearch
|
|
50
|
+
|
|
51
|
+
### Rede
|
|
52
|
+
- [ ] VPC dedicada
|
|
53
|
+
- [ ] Subnets (públicas/privadas)
|
|
54
|
+
- [ ] Load Balancer
|
|
55
|
+
- [ ] CDN
|
|
56
|
+
- [ ] VPN/Direct Connect
|
|
57
|
+
|
|
58
|
+
### Storage
|
|
59
|
+
- [ ] Object Storage (S3/GCS/Blob)
|
|
60
|
+
- [ ] File Storage
|
|
61
|
+
- [ ] Block Storage
|
|
62
|
+
|
|
63
|
+
### Segurança
|
|
64
|
+
- [ ] IAM roles/policies
|
|
65
|
+
- [ ] Security Groups
|
|
66
|
+
- [ ] WAF
|
|
67
|
+
- [ ] Secrets Manager
|
|
68
|
+
- [ ] KMS
|
|
69
|
+
|
|
70
|
+
### Observabilidade
|
|
71
|
+
- [ ] CloudWatch/Cloud Monitoring
|
|
72
|
+
- [ ] Logs centralizados
|
|
73
|
+
|
|
74
|
+
## Ambientes
|
|
75
|
+
|
|
76
|
+
- [ ] Development
|
|
77
|
+
- [ ] Staging
|
|
78
|
+
- [ ] Production
|
|
79
|
+
|
|
80
|
+
## Requisitos
|
|
81
|
+
|
|
82
|
+
- State backend: [S3/GCS/Terraform Cloud]
|
|
83
|
+
- Módulos: [monolítico/modularizado]
|
|
84
|
+
- Tagging strategy: [padrão de tags]
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Sua Missão
|
|
89
|
+
|
|
90
|
+
Gere código Terraform organizado:
|
|
91
|
+
|
|
92
|
+
### 1. Estrutura de Diretórios
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
infra/terraform/
|
|
96
|
+
├── modules/
|
|
97
|
+
│ ├── vpc/
|
|
98
|
+
│ │ ├── main.tf
|
|
99
|
+
│ │ ├── variables.tf
|
|
100
|
+
│ │ └── outputs.tf
|
|
101
|
+
│ ├── database/
|
|
102
|
+
│ ├── compute/
|
|
103
|
+
│ └── security/
|
|
104
|
+
├── environments/
|
|
105
|
+
│ ├── dev/
|
|
106
|
+
│ │ ├── main.tf
|
|
107
|
+
│ │ ├── terraform.tfvars
|
|
108
|
+
│ │ └── backend.tf
|
|
109
|
+
│ ├── staging/
|
|
110
|
+
│ └── prod/
|
|
111
|
+
├── versions.tf
|
|
112
|
+
└── README.md
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 2. Provider e Versões
|
|
116
|
+
|
|
117
|
+
```hcl
|
|
118
|
+
# versions.tf
|
|
119
|
+
terraform {
|
|
120
|
+
required_version = ">= 1.5.0"
|
|
121
|
+
|
|
122
|
+
required_providers {
|
|
123
|
+
aws = {
|
|
124
|
+
source = "hashicorp/aws"
|
|
125
|
+
version = "~> 5.0"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
provider "aws" {
|
|
131
|
+
region = var.aws_region
|
|
132
|
+
|
|
133
|
+
default_tags {
|
|
134
|
+
tags = {
|
|
135
|
+
Project = var.project_name
|
|
136
|
+
Environment = var.environment
|
|
137
|
+
ManagedBy = "terraform"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 3. Backend Configuration
|
|
144
|
+
|
|
145
|
+
```hcl
|
|
146
|
+
# environments/prod/backend.tf
|
|
147
|
+
terraform {
|
|
148
|
+
backend "s3" {
|
|
149
|
+
bucket = "[project]-terraform-state"
|
|
150
|
+
key = "prod/terraform.tfstate"
|
|
151
|
+
region = "[region]"
|
|
152
|
+
encrypt = true
|
|
153
|
+
dynamodb_table = "[project]-terraform-lock"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 4. Módulo VPC
|
|
159
|
+
|
|
160
|
+
```hcl
|
|
161
|
+
# modules/vpc/main.tf
|
|
162
|
+
resource "aws_vpc" "main" {
|
|
163
|
+
cidr_block = var.vpc_cidr
|
|
164
|
+
enable_dns_hostnames = true
|
|
165
|
+
enable_dns_support = true
|
|
166
|
+
|
|
167
|
+
tags = {
|
|
168
|
+
Name = "${var.project_name}-vpc"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
resource "aws_subnet" "public" {
|
|
173
|
+
count = length(var.public_subnet_cidrs)
|
|
174
|
+
vpc_id = aws_vpc.main.id
|
|
175
|
+
cidr_block = var.public_subnet_cidrs[count.index]
|
|
176
|
+
availability_zone = var.azs[count.index]
|
|
177
|
+
|
|
178
|
+
map_public_ip_on_launch = true
|
|
179
|
+
|
|
180
|
+
tags = {
|
|
181
|
+
Name = "${var.project_name}-public-${count.index + 1}"
|
|
182
|
+
Type = "public"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
resource "aws_subnet" "private" {
|
|
187
|
+
count = length(var.private_subnet_cidrs)
|
|
188
|
+
vpc_id = aws_vpc.main.id
|
|
189
|
+
cidr_block = var.private_subnet_cidrs[count.index]
|
|
190
|
+
availability_zone = var.azs[count.index]
|
|
191
|
+
|
|
192
|
+
tags = {
|
|
193
|
+
Name = "${var.project_name}-private-${count.index + 1}"
|
|
194
|
+
Type = "private"
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
resource "aws_internet_gateway" "main" {
|
|
199
|
+
vpc_id = aws_vpc.main.id
|
|
200
|
+
|
|
201
|
+
tags = {
|
|
202
|
+
Name = "${var.project_name}-igw"
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
resource "aws_nat_gateway" "main" {
|
|
207
|
+
count = var.enable_nat_gateway ? 1 : 0
|
|
208
|
+
allocation_id = aws_eip.nat[0].id
|
|
209
|
+
subnet_id = aws_subnet.public[0].id
|
|
210
|
+
|
|
211
|
+
tags = {
|
|
212
|
+
Name = "${var.project_name}-nat"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
resource "aws_eip" "nat" {
|
|
217
|
+
count = var.enable_nat_gateway ? 1 : 0
|
|
218
|
+
domain = "vpc"
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```hcl
|
|
223
|
+
# modules/vpc/variables.tf
|
|
224
|
+
variable "project_name" {
|
|
225
|
+
type = string
|
|
226
|
+
description = "Nome do projeto"
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
variable "vpc_cidr" {
|
|
230
|
+
type = string
|
|
231
|
+
default = "10.0.0.0/16"
|
|
232
|
+
description = "CIDR block da VPC"
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
variable "public_subnet_cidrs" {
|
|
236
|
+
type = list(string)
|
|
237
|
+
default = ["10.0.1.0/24", "10.0.2.0/24"]
|
|
238
|
+
description = "CIDRs das subnets públicas"
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
variable "private_subnet_cidrs" {
|
|
242
|
+
type = list(string)
|
|
243
|
+
default = ["10.0.10.0/24", "10.0.11.0/24"]
|
|
244
|
+
description = "CIDRs das subnets privadas"
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
variable "azs" {
|
|
248
|
+
type = list(string)
|
|
249
|
+
description = "Availability zones"
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
variable "enable_nat_gateway" {
|
|
253
|
+
type = bool
|
|
254
|
+
default = true
|
|
255
|
+
description = "Habilitar NAT Gateway"
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
```hcl
|
|
260
|
+
# modules/vpc/outputs.tf
|
|
261
|
+
output "vpc_id" {
|
|
262
|
+
value = aws_vpc.main.id
|
|
263
|
+
description = "ID da VPC"
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
output "public_subnet_ids" {
|
|
267
|
+
value = aws_subnet.public[*].id
|
|
268
|
+
description = "IDs das subnets públicas"
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
output "private_subnet_ids" {
|
|
272
|
+
value = aws_subnet.private[*].id
|
|
273
|
+
description = "IDs das subnets privadas"
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 5. Módulo Database
|
|
278
|
+
|
|
279
|
+
```hcl
|
|
280
|
+
# modules/database/main.tf
|
|
281
|
+
resource "aws_db_subnet_group" "main" {
|
|
282
|
+
name = "${var.project_name}-db-subnet"
|
|
283
|
+
subnet_ids = var.subnet_ids
|
|
284
|
+
|
|
285
|
+
tags = {
|
|
286
|
+
Name = "${var.project_name}-db-subnet"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
resource "aws_security_group" "db" {
|
|
291
|
+
name = "${var.project_name}-db-sg"
|
|
292
|
+
description = "Security group for RDS"
|
|
293
|
+
vpc_id = var.vpc_id
|
|
294
|
+
|
|
295
|
+
ingress {
|
|
296
|
+
from_port = 5432
|
|
297
|
+
to_port = 5432
|
|
298
|
+
protocol = "tcp"
|
|
299
|
+
security_groups = var.allowed_security_groups
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
egress {
|
|
303
|
+
from_port = 0
|
|
304
|
+
to_port = 0
|
|
305
|
+
protocol = "-1"
|
|
306
|
+
cidr_blocks = ["0.0.0.0/0"]
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
resource "aws_db_instance" "main" {
|
|
311
|
+
identifier = "${var.project_name}-db"
|
|
312
|
+
engine = "postgres"
|
|
313
|
+
engine_version = var.postgres_version
|
|
314
|
+
instance_class = var.instance_class
|
|
315
|
+
allocated_storage = var.allocated_storage
|
|
316
|
+
max_allocated_storage = var.max_allocated_storage
|
|
317
|
+
|
|
318
|
+
db_name = var.database_name
|
|
319
|
+
username = var.master_username
|
|
320
|
+
password = var.master_password
|
|
321
|
+
|
|
322
|
+
db_subnet_group_name = aws_db_subnet_group.main.name
|
|
323
|
+
vpc_security_group_ids = [aws_security_group.db.id]
|
|
324
|
+
|
|
325
|
+
multi_az = var.multi_az
|
|
326
|
+
publicly_accessible = false
|
|
327
|
+
storage_encrypted = true
|
|
328
|
+
deletion_protection = var.environment == "prod" ? true : false
|
|
329
|
+
skip_final_snapshot = var.environment != "prod"
|
|
330
|
+
|
|
331
|
+
backup_retention_period = var.backup_retention_days
|
|
332
|
+
backup_window = "03:00-04:00"
|
|
333
|
+
maintenance_window = "Mon:04:00-Mon:05:00"
|
|
334
|
+
|
|
335
|
+
performance_insights_enabled = true
|
|
336
|
+
|
|
337
|
+
tags = {
|
|
338
|
+
Name = "${var.project_name}-db"
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
lifecycle {
|
|
342
|
+
prevent_destroy = false # Mudar para true em prod
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### 6. Arquivo de Variáveis por Ambiente
|
|
348
|
+
|
|
349
|
+
```hcl
|
|
350
|
+
# environments/prod/terraform.tfvars
|
|
351
|
+
project_name = "myapp"
|
|
352
|
+
environment = "prod"
|
|
353
|
+
aws_region = "us-east-1"
|
|
354
|
+
|
|
355
|
+
# VPC
|
|
356
|
+
vpc_cidr = "10.0.0.0/16"
|
|
357
|
+
public_subnet_cidrs = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
|
|
358
|
+
private_subnet_cidrs = ["10.0.10.0/24", "10.0.11.0/24", "10.0.12.0/24"]
|
|
359
|
+
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
|
|
360
|
+
|
|
361
|
+
# Database
|
|
362
|
+
instance_class = "db.t3.medium"
|
|
363
|
+
allocated_storage = 50
|
|
364
|
+
max_allocated_storage = 200
|
|
365
|
+
multi_az = true
|
|
366
|
+
backup_retention_days = 7
|
|
367
|
+
|
|
368
|
+
# Compute
|
|
369
|
+
instance_type = "t3.medium"
|
|
370
|
+
min_size = 2
|
|
371
|
+
max_size = 10
|
|
372
|
+
desired_capacity = 2
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### 7. Main Entry Point
|
|
376
|
+
|
|
377
|
+
```hcl
|
|
378
|
+
# environments/prod/main.tf
|
|
379
|
+
module "vpc" {
|
|
380
|
+
source = "../../modules/vpc"
|
|
381
|
+
|
|
382
|
+
project_name = var.project_name
|
|
383
|
+
vpc_cidr = var.vpc_cidr
|
|
384
|
+
public_subnet_cidrs = var.public_subnet_cidrs
|
|
385
|
+
private_subnet_cidrs = var.private_subnet_cidrs
|
|
386
|
+
azs = var.azs
|
|
387
|
+
enable_nat_gateway = true
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
module "database" {
|
|
391
|
+
source = "../../modules/database"
|
|
392
|
+
|
|
393
|
+
project_name = var.project_name
|
|
394
|
+
environment = var.environment
|
|
395
|
+
vpc_id = module.vpc.vpc_id
|
|
396
|
+
subnet_ids = module.vpc.private_subnet_ids
|
|
397
|
+
allowed_security_groups = [module.compute.app_security_group_id]
|
|
398
|
+
|
|
399
|
+
instance_class = var.instance_class
|
|
400
|
+
allocated_storage = var.allocated_storage
|
|
401
|
+
max_allocated_storage = var.max_allocated_storage
|
|
402
|
+
multi_az = var.multi_az
|
|
403
|
+
backup_retention_days = var.backup_retention_days
|
|
404
|
+
|
|
405
|
+
database_name = "${var.project_name}_${var.environment}"
|
|
406
|
+
master_username = "admin"
|
|
407
|
+
master_password = var.db_password # De variável sensível
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### 8. Comandos Úteis
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
# Inicializar
|
|
415
|
+
cd environments/prod
|
|
416
|
+
terraform init
|
|
417
|
+
|
|
418
|
+
# Planejar
|
|
419
|
+
terraform plan -out=tfplan
|
|
420
|
+
|
|
421
|
+
# Aplicar
|
|
422
|
+
terraform apply tfplan
|
|
423
|
+
|
|
424
|
+
# Ver estado
|
|
425
|
+
terraform state list
|
|
426
|
+
|
|
427
|
+
# Destruir (cuidado!)
|
|
428
|
+
terraform destroy
|
|
429
|
+
|
|
430
|
+
# Formatar código
|
|
431
|
+
terraform fmt -recursive
|
|
432
|
+
|
|
433
|
+
# Validar
|
|
434
|
+
terraform validate
|
|
435
|
+
|
|
436
|
+
# Importar recurso existente
|
|
437
|
+
terraform import module.vpc.aws_vpc.main vpc-12345
|
|
438
|
+
```
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Exemplo de Uso
|
|
444
|
+
|
|
445
|
+
```text
|
|
446
|
+
Atue como especialista em Terraform.
|
|
447
|
+
|
|
448
|
+
## Contexto
|
|
449
|
+
|
|
450
|
+
SaaS de gestão financeira para PMEs.
|
|
451
|
+
|
|
452
|
+
## Cloud Provider
|
|
453
|
+
|
|
454
|
+
- AWS
|
|
455
|
+
- Região: sa-east-1
|
|
456
|
+
- Multi-região: Não (por enquanto)
|
|
457
|
+
|
|
458
|
+
## Recursos
|
|
459
|
+
|
|
460
|
+
### Computação
|
|
461
|
+
- [x] ECS Fargate
|
|
462
|
+
|
|
463
|
+
### Banco
|
|
464
|
+
- [x] PostgreSQL RDS (Multi-AZ em prod)
|
|
465
|
+
- [x] Redis ElastiCache
|
|
466
|
+
|
|
467
|
+
### Rede
|
|
468
|
+
- [x] VPC dedicada
|
|
469
|
+
- [x] ALB público
|
|
470
|
+
- [x] Subnets públicas e privadas
|
|
471
|
+
|
|
472
|
+
### Segurança
|
|
473
|
+
- [x] IAM roles
|
|
474
|
+
- [x] Security Groups
|
|
475
|
+
- [x] Secrets Manager
|
|
476
|
+
|
|
477
|
+
## Ambientes
|
|
478
|
+
|
|
479
|
+
- [x] staging
|
|
480
|
+
- [x] prod
|
|
481
|
+
|
|
482
|
+
## Requisitos
|
|
483
|
+
|
|
484
|
+
- State no S3 com lock DynamoDB
|
|
485
|
+
- Módulos reutilizáveis
|
|
486
|
+
- Tags: Project, Environment, Team, CostCenter
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## Checklist Pós-Geração
|
|
492
|
+
|
|
493
|
+
- [ ] Estrutura de diretórios organizada
|
|
494
|
+
- [ ] Backend remoto configurado (S3 + DynamoDB)
|
|
495
|
+
- [ ] Providers versionados
|
|
496
|
+
- [ ] Módulos com variables e outputs
|
|
497
|
+
- [ ] Separação por ambiente (tfvars)
|
|
498
|
+
- [ ] Tags padrão aplicadas
|
|
499
|
+
- [ ] Outputs para recursos importantes
|
|
500
|
+
- [ ] README com instruções
|
|
501
|
+
- [ ] .gitignore configurado (*.tfstate, .terraform/)
|
|
502
|
+
- [ ] Sensitive variables marcadas
|