You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## 🏷️ v2.0.0 - Integração da aplicação Kotlin com API Numbers (http://numbersapi.com/)
3
+
## 🏷️ v2.5.0 - Adição do Datadog Logs e Datadog APM no container da aplicação.
4
4
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.
5
+
Este projeto provisiona uma infraestrutura em Terraform pronta para realizar deployments com estratégia *blue/green* em serviços ECS Fargate, utilizando o AWS CodeDeploy. Agora, dividido em módulos, é possível criar apenas os componentes desejados, como apenas o CodeDeploy ou apenas o Application Load Balancer. Nesta nova versão, também é possível utilizar o Datadog para envio automático de logs e traces da aplicação, bastando definir a variável `enable_datadog = true` e ter um Secret do Secret Manager com os valores da API KEY.
6
6
7
-
A pasta `/app` contém uma aplicação básica em `Kotlin` com SPRING para testar o rollout e rollback do Canary. A aplicação obtem dois números aleatórios, soma o número e consulta informações de uma trivia através da API Numbers, uma API pública que permite consultas sem credenciais, também configurando um payload de log para uso durante a instrumentação do Datadog.
7
+
A pasta /app contém uma aplicação básica em Kotlin com SPRING para testar o rollout e rollback do Canary. A aplicação obtém dois números aleatórios, soma o número e consulta informações de uma trivia através da [API Numbers](http://numbersapi.com/). Os logs agora incluem payloads estruturados.
8
8
9
+
---
10
+
### 🌀 Dependências
11
+
```mermaid
12
+
flowchart TD
13
+
subgraph Entrypoint
14
+
ALB[Application Load Balancer]
15
+
end
16
+
17
+
subgraph ECS Cluster
18
+
ECS[ECS Fargate]
19
+
Service[ECS Service]
20
+
ECS --> Service
21
+
Service -->|Logs e APM| Datadog[(Datadog)]
22
+
end
23
+
24
+
subgraph CodeDeploy Stack
25
+
CodeDeploy[AWS CodeDeploy]
26
+
S3["S3: AppSpec e revisões"]
27
+
CodeDeploy --> S3
28
+
end
29
+
30
+
ALB --> TGBlue[Target Group Blue]
31
+
ALB --> TGGreen[Target Group Green]
32
+
33
+
Service --> TGBlue
34
+
Service --> TGGreen
35
+
36
+
TGBlue --> CodeDeploy
37
+
TGGreen --> CodeDeploy
38
+
```
39
+
40
+
> [!TIP]
41
+
> Também é possível utilizar o `terraform graph` para mapear as dependências explícitas da infraestrutura! [graph](graphviz.png)
9
42
43
+
---
10
44
### 📃 Payload da saída de log
11
45
```json
12
46
{
@@ -34,21 +68,23 @@ A pasta `/app` contém uma aplicação básica em `Kotlin` com SPRING para testa
34
68
35
69
```
36
70
./app
37
-
└──scripts
38
-
├── local_pull_ecr.sh
39
-
└── local_gradle_build.sh
71
+
└── scripts
72
+
├── local_pull_ecr.sh
73
+
└── local_gradle_build.sh
74
+
40
75
./infra
41
76
├── application-load-balancer
42
77
│ ├── application_load_balancer.tf
43
78
│ ├── listener.tf
44
79
│ ├── outputs.tf
45
80
│ ├── target_group.tf
46
81
│ └── variables.tf
47
-
├── codedeploy-scope
82
+
│
83
+
├── codedeploy
48
84
│ ├── appspec_template
49
85
│ │ └── appspec_sample_template.yaml
50
-
│ ├── code-deploy_application.tf
51
-
│ ├── code-deploy_deployment-group.tf
86
+
│ ├── code_deploy_application.tf
87
+
│ ├── code_deploy_deployment_group.tf
52
88
│ ├── data.tf
53
89
│ ├── local_appspec.tf
54
90
│ ├── local_deployment_group_force.tf
@@ -58,6 +94,7 @@ A pasta `/app` contém uma aplicação básica em `Kotlin` com SPRING para testa
58
94
│ ├── scripts
59
95
│ │ └── local_force_deploy.sh
60
96
│ └── variables.tf
97
+
│
61
98
├── ecs-service
62
99
│ ├── data.tf
63
100
│ ├── ecs_cluster.tf
@@ -68,58 +105,52 @@ A pasta `/app` contém uma aplicação básica em `Kotlin` com SPRING para testa
68
105
│ ├── service_autoscaling_target.tf
69
106
│ ├── service_task_definition.tf
70
107
│ └── variables.tf
108
+
│
71
109
└── example
72
110
├── data.tf
73
-
├── inventories
74
-
│ └── variables.tfvars
75
111
├── main.tf
76
112
├── outputs.tf
77
113
├── providers.tf
78
114
└── variables.tf
79
115
```
80
116
---
81
-
## 📜 Scripts auxiliares (`/app/scripts`)
117
+
## 📜 Scripts auxiliares (`./scripts`)
82
118
83
119
-`local_gradle_build.sh`: Compila o projeto com Gradle, gera o JAR, cria a imagem Docker e chama o local_pull_ecr.sh para versionar e enviar a imagem ao ECR.
84
120
-`local_pull_ecr.sh`: Autentica no ECR, busca a próxima versão disponível, cria uma nova tag baseada nela e faz o push da imagem Docker para o repositório.
121
+
-`local_force_deploy.sh` : Verifica se há um deployment em andamento no AWS CodeDeploy e, se não houver, faz upload do appspec.yaml para o S3 e inicia um novo deployment, removendo o arquivo local após o envio.
85
122
---
86
123
## 🔧 Componentes Principais
87
124
88
125
-**ECS Fargate**: Ambiente de execução para os containers.
89
126
-**Application Load Balancer (ALB)**: Balanceador com listener único na porta 8080.
90
127
-**Target Groups**: Criados dinamicamente para `blue` e `green`.
128
+
-**ECS Service**: Com a task_definition, faz o deploy do serviço com as configurações do Datadog.
91
129
-**AWS CodeDeploy**: Orquestra a troca de tráfego entre versões.
92
130
-**AppSpec**: Template para controlar o comportamento do deploy.
93
131
-**Scripts locais**: Sobrescrevem o appspec.yaml, forçam novos deploys de forma automática, buildam o Gradlew e executam o Docker para validação. Também permitem o pull automático para um ECR repository.
94
-
95
132
---
96
-
97
133
## 📋 Pré-requisitos
98
134
99
-
0. Conta AWS válida.
135
+
0. Conta AWS ativa.
100
136
1. Repositório ECR com imagem da aplicação.
101
-
2. Role com acesso ao ECS, CodeDeploy e ECR.
137
+
2. Role IAM com acesso ao ECS, CodeDeploy, ECR e Secret Manager.
102
138
3. Terraform instalado.
103
139
4. Shell bash para execução do Terraform (uso de recursos `local`).
104
-
140
+
5. Secret do Secret Manager com a API KEY do Datadog para envio do trace e logs.
105
141
---
106
142
107
143
## 📦 Como usar cada módulo
108
-
109
144
### 0. Altere a região
110
-
111
145
Por padrão, está `us-east-1` para compatibilidade com a conta free-tier.
Preencha o `variables.tfvars` com dados da sua conta, ou use `data` para busca dinâmica. Veja o diretório `example` para exemplos.
122
-
153
+
Preencha o `variables.tfvars` com dados da sua conta, ou use `data` para busca dinâmica. Veja o diretório `infra/example` para exemplo de como inserir as informações dinamicamente.
0 commit comments