Skip to content

Commit f3a5aa2

Browse files
committed
docs: new version - v1.5.0 - module alb, ecs service, codedeploy
1 parent 7b510b1 commit f3a5aa2

File tree

1 file changed

+108
-60
lines changed

1 file changed

+108
-60
lines changed

README.md

Lines changed: 108 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,152 @@
11
# ecs-fargate-kotlin-canary-datadog
22

3-
## 🏷️ v.1.0.0 - Canary Blue/Green Deployment com ECS e CodeDeploy via Terraform
3+
## 🏷️ v1.5.0 - Modularização na criação do Load Balancer, ECS Service e CodeDeploy
44

5-
Este projeto provisiona uma infraestrutura completa para realizar deployments com estratégia *blue/green* em serviços ECS Fargate, utilizando AWS CodeDeploy.
5+
Este projeto provisiona uma infraestrutura completa para realizar deployments com estratégia *blue/green* em serviços ECS Fargate, utilizando AWS CodeDeploy. Agora, dividido em módulos, é possível criar apenas os componentes que desejar, como apenas o CodeDeploy ou apenas o Application Load Balancer.
66

7-
A pasta /app contém uma aplicação básica em `Kotlin` (SEM SPRING) para testar o rollout e rollback do Canary.
7+
A pasta `/app` contém uma aplicação básica em `Kotlin` (SEM SPRING) para testar o rollout e rollback do Canary.
88

99
---
10+
1011
## 📂 Estrutura de Pastas
1112

1213
```
13-
.
14-
├── infra/
15-
│ ├── codedeploy/
16-
│ │ └── appspec_sample_template.yaml # Exemplo de AppSpec para CodeDeploy
17-
│ │
18-
│ ├── inventories/
19-
│ │ └── variables.tfvars # Variáveis de entrada (valores)
20-
│ │
21-
│ ├── application_load_balancer.tf # Recurso ALB
22-
│ ├── code-deploy_application.tf # CodeDeploy App
23-
│ ├── code-deploy_deployment-group.tf # CodeDeploy Deployment Group
24-
│ ├── data.tf # Data sources (VPC, subnets, etc.)
25-
│ ├── ecs_cluster.tf # ECS Cluster
26-
│ ├── ecs_service.tf # Serviço ECS com suporte a blue/green
27-
│ ├── force-deploy.sh # Script para forçar deploy automático
28-
│ ├── listener.tf # ALB Listener (porta 80)
29-
│ ├── local_appspec.tf # AppSpec gerado dinamicamente
30-
│ ├── local_deployment_group_force.tf # Lógica para forçar novo deploy
31-
│ ├── locals.tf # Definições locais reutilizáveis
32-
│ ├── log_group.tf # CloudWatch Log Group
33-
│ ├── outputs.tf # Outputs do projeto
34-
│ ├── providers.tf # Providers e backends
35-
│ ├── s3_revision_object.tf # Upload do AppSpec para S3
36-
│ ├── service_autoscaling_target.tf # Configuração de auto scaling
37-
│ ├── service_task_definition.tf # Task Definition do ECS
38-
│ └── target_group.tf # Target Groups blue e green
14+
./infra
15+
├── application-load-balancer
16+
│ ├── application_load_balancer.tf
17+
│ ├── listener.tf
18+
│ ├── outputs.tf
19+
│ ├── target_group.tf
20+
│ └── variables.tf
21+
├── codedeploy-scope
22+
│ ├── appspec_template
23+
│ │ └── appspec_sample_template.yaml
24+
│ ├── code-deploy_application.tf
25+
│ ├── code-deploy_deployment-group.tf
26+
│ ├── data.tf
27+
│ ├── local_appspec.tf
28+
│ ├── local_deployment_group_force.tf
29+
│ ├── locals.tf
30+
│ ├── outputs.tf
31+
│ ├── s3_revision_object.tf
32+
│ ├── scripts
33+
│ │ └── force-deploy.sh
34+
│ └── variables.tf
35+
├── ecs-service
36+
│ ├── data.tf
37+
│ ├── ecs_cluster.tf
38+
│ ├── ecs_service.tf
39+
│ ├── locals.tf
40+
│ ├── log_group.tf
41+
│ ├── outputs.tf
42+
│ ├── service_autoscaling_target.tf
43+
│ ├── service_task_definition.tf
44+
│ └── variables.tf
45+
└── example
46+
├── data.tf
47+
├── inventories
48+
│ └── variables.tfvars
49+
├── main.tf
50+
├── outputs.tf
51+
├── providers.tf
52+
└── variables.tf
3953
```
4054

4155
---
56+
4257
## 🔧 Componentes Principais
4358

4459
- **ECS Fargate**: Ambiente de execução para os containers.
45-
- **Application Load Balancer (ALB)**: Balanceador com listener único na porta 80.
60+
- **Application Load Balancer (ALB)**: Balanceador com listener único na porta 8080.
4661
- **Target Groups**: Criados dinamicamente para `blue` e `green`.
4762
- **AWS CodeDeploy**: Orquestra a troca de tráfego entre versões.
4863
- **AppSpec**: Template para controlar o comportamento do deploy.
49-
- **Scripts locais**: Sobrescrevendo o arquivo appspec.yaml do CodeDeploy e forçando novos deploys diretamente no terminal.
64+
- **Scripts locais**: Sobrescrevem o appspec.yaml e forçam novos deploys de forma automática.
65+
5066
---
51-
## 📋 Pré requisitos
52-
0. Possuir um conta AWS.
53-
1. Ter um repositório ECR com uma imagem dockerizada de aplicação.
54-
2. Ter role com acessos para o com ECS, CodeDeploy e ECR.
55-
3. Possuir o binário do Terraform instalado em sua máquina.
56-
4. Executar o Terraform um shell bash. (Para o funcionamento dos resource local)
67+
68+
## 📋 Pré-requisitos
69+
70+
0. Conta AWS válida.
71+
1. Repositório ECR com imagem da aplicação.
72+
2. Role com acesso ao ECS, CodeDeploy e ECR.
73+
3. Terraform instalado.
74+
4. Shell bash para execução do Terraform (uso de recursos `local`).
75+
5776
---
5877

59-
## 📦 Como usar
78+
## 📦 Como usar cada módulo
6079

6180
### 0. Altere a região
62-
Nativamente, está adicionada a region `us-east-1` devido a orquestração na conta free-tier.
6381

64-
### 1. Configure variáveis
65-
Preencha `variables.tfvars` com os valores da sua conta AWS, nomes de cluster, etc.
82+
Por padrão, está `us-east-1` para compatibilidade com a conta free-tier.
83+
84+
### 1. Adicione os módulos desejados
85+
86+
```hcl
87+
terraform {
88+
source = "git::https://github.com/dalfinha/ecs-fargate-kotlin-canary-datadog.git//infra/application-load-balancer?ref=develop"
89+
}
90+
```
91+
92+
Preencha o `variables.tfvars` com dados da sua conta, ou use `data` para busca dinâmica. Veja o diretório `example` para exemplos.
93+
94+
### 2. Inicialize e aplique
6695

67-
### 2. Inicialize, valide as configurações e aplique
6896
```bash
69-
cd ./infra
7097
terraform init
7198
terraform validate
7299
terraform plan
73100
terraform apply -var-file="variables.tfvars"
74101
```
102+
103+
Ou:
104+
105+
```bash
106+
terraform apply -var-file="inventories/variables.tfvars"
107+
```
108+
75109
---
76110

77111
## 📌 Observações
78112

79-
- Só é possível ter **um listener por porta** no ALB. A inteligência de alternar entre `blue` e `green` é do **CodeDeploy**.
113+
- Só pode haver **um listener por porta** no ALB.
114+
- A troca entre `blue` e `green` é gerenciada pelo **CodeDeploy**.
80115
- O listener padrão aponta inicialmente para o `blue`.
81-
- O `AppSpec` é gerado localmente via `.yaml` e excluído LOCAL após um novo deployment ser realizado via terminal.
82-
- Um novo deploy é na execução do terraform local. Caso a aplicação já tenha um deployment em execução, o comando para execução de um novo deploy é ignorado.
116+
- O `AppSpec` é gerado e excluído localmente após o deploy.
117+
- Um novo deploy ocorre via execução local do Terraform.
118+
- Módulos são independentes, mas exigem dependências previamente criadas. Em situações de reuso, garanta que a infraestrutura seja compatível,
119+
83120
---
84121

85122
## ⌨️ Próximos passos
86123

87-
### 🏷️v1.5.0 - Integração da aplicação Kotlin com API externa
124+
### ✅ v1.0.0
125+
Canary Blue/Green Deployment com ECS e CodeDeploy via Terraform
88126

89-
- [ ] Remoção dos logs da aplicação de soma aleatória.
90-
- [ ] Diminuir o intervalo entre as somas aleatórias.
91-
- [ ] Incluir a API Numbers ([http://numbersapi.com/](http://numbersapi.com/#42)).
92-
- [ ] Formatar log da API Numbers na aplicação.
127+
### ✅ v1.5.0
128+
Modularização na criação do Load Balancer, ECS Service e CodeDeploy
93129

94-
### 🏷️v2.0.0 - Monitoramento com Datadog APM
130+
### 🏷️ v2.0.0
131+
Integração da aplicação Kotlin com API externa
132+
133+
- [ ] Remoção dos logs da aplicação de soma aleatória
134+
- [ ] Diminuir intervalo entre somas aleatórias
135+
- [ ] Incluir API Numbers ([http://numbersapi.com/](http://numbersapi.com/#42))
136+
- [ ] Formatar log da API Numbers
137+
138+
### 🏷️ v2.5.0
139+
Monitoramento com Datadog APM
140+
141+
- [ ] Criar role com políticas do Datadog (ECS)
142+
- [ ] Instrumentar ECS com Datadog
143+
- [ ] Adicionar `DD_API_KEY` como env var
144+
- [ ] Criar secrets no Terraform
145+
- [ ] Validar ingestão de logs e APM
146+
- [ ] Taguear serviço ECS com Terraform
95147

96-
- [ ] Criar role com políticas do Datadog (ECS)
97-
- [ ] Instrumentar o Datadog no ECS
98-
- [ ] Incluir `DD_API_KEY` como env var na task definition
99-
- [ ] Criar secrets para o Datadog
100-
- [ ] Validar ingestão de logs e APM
101-
- [ ] Taguear serviço ECS com Terraform
102148
---
103-
## ❌ Falhas ao executar?
104-
Abra uma issue! Assim que possível aplicamos a correção. Contribuições são bem vindas!
149+
150+
## ❌ Falhas ao executar?
151+
152+
Abra uma **issue**! Correções e contribuições são bem-vindas.

0 commit comments

Comments
 (0)