Um conjunto de modelos de Terraform usados para provisionar pilhas de aplicativos na AWS ECS Fargate.
NOTA : Sugerimos nos afastar deste modelo para nossa versão modular mais recente. Este repo ainda receberá atualizações para manter a compatibilidade à medida que o Terraform e os provedores da AWS evoluem, mas a maioria dos recursos mais recentes será implementada no módulo. Você pode encontrar o módulo aqui: https://github.com/warnermedia/terraform-ecs-pargate-module

Os modelos são projetados para serem personalizados. Os componentes opcionais podem ser removidos simplesmente excluindo o arquivo .tf .
Os modelos são usados para gerenciar preocupações de infraestrutura e, como tal, os modelos implantam uma imagem de back -end padrão. Recomendamos o uso da CLI da Fargate para gerenciar preocupações de aplicativos, como implantar as imagens de aplicativos e variáveis de ambiente no topo dessa infraestrutura. A CLI da Fargate pode ser usada para implantar aplicativos do seu laptop ou nos pipelines CI/CD.
Esses componentes são compartilhados por todos os ambientes.
| Nome | Descrição | Opcional |
|---|---|---|
| main.tf | Provedor da AWS, saída | |
| state.tf | Back -end do balde S3 para armazenar o estado remoto da Terraform | |
| Ecr.tf | Repositório de ECR para aplicação (todos os ambientes compartilham) |
Esses componentes são para um ambiente específico. Deve haver um diretório correspondente para cada ambiente necessário.
| Nome | Descrição | Opcional |
|---|---|---|
| main.tf | Terform Remote State, provedor da AWS, saída | |
| ecs.tf | Cluster ECS, serviço, definição de tarefas, ecstaskexecutionRole, grupo de logs CloudWatch | |
| lb.tf | ALB, Grupo Target, S3 Bucket para logs de acesso | |
| nsg.tf | Nsg para alb e tarefa | |
| lb-http.tf | Ouvinte http, regra NSG. Exclua apenas se https | Sim |
| lb-https.tf | Ouvinte https, regra NSG. Exclua apenas se http | Sim |
| Dashboard.tf | Painel de CloudWatch: CPU, memória e métricas relacionadas a HTTP | Sim |
| Role.tf | Função do aplicativo para contêiner | Sim |
| cicd.tf | Usuário do IAM que pode ser usado por sistemas CI/CD | Sim |
| Autoscala-perf.tf | Escala automática baseada em desempenho | Sim |
| Autoscala-time.tf | Escala automática baseada no tempo | Sim |
| logs-logzio.tf | Loges de contêineres de navios para logz.io | Sim |
| SecretsManager.tf | Adicione um gerente de segredos em segredo com uma chave CMK KMS. Também fornece a função de aplicativo e o acesso à função de definição de tarefa do ECS para ler segredos do Secrets Manager | Sim |
| Secrets-sidecar.tf | Adiciona uma configuração de definição de tarefas para implantar seu aplicativo junto com um contêiner Sidecar que grava seu gerente de segredos em segredo em um arquivo. Observe que isso depende de optar por secretsmanager.tf . | Sim |
| ssm-parameters.tf | Adicione uma tecla CMK KMS para uso com o SSM Parameter Store. Também fornece acesso à função de definição de tarefa do ECS para ler segredos do Parâmetro Store. | Sim |
| ECS-EVENT-STREAM.TF | Adicione um painel de log de eventos ECS | Sim |
Normalmente, o Terraform base só precisará ser executado uma vez e, em seguida, deve precisar apenas de alterações com pouca frequência. Depois que a base é construída, cada ambiente pode ser construído.
# Move into the base directory
$ cd base
# Sets up Terraform to run
$ terraform init
# Executes the Terraform run
$ terraform apply
# Now, move into the dev environment
$ cd ../env/dev
# Sets up Terraform to run
$ terraform init
# Executes the Terraform run
$ terraform apply
terraform apply ) A base gerada .tfstate não é armazenada no balde de estado remoto S3. Verifique se a base .tfstate está verificada no seu repositório de infraestrutura. O Terraform padrão .gitignore gerado pelo GitHub ignorará todos os arquivos .tfstate ; Você precisará modificar isso!
Como alternativa, você pode usar a CLI da Fargate-Create para novos projetos de andaime com base nesse modelo.
instalar
curl -s get-fargate-create.turnerlabs.io | sh Crie um arquivo VARS de entrada ( terraform.tfvars )
# app/env to scaffold
app = " my-app "
environment = " dev "
internal = true
container_port = " 8080 "
replicas = " 1 "
health_check = " /health "
region = " us-east-1 "
aws_profile = " default "
saml_role = " admin "
vpc = " vpc-123 "
private_subnets = " subnet-123,subnet-456 "
public_subnets = " subnet-789,subnet-012 "
tags = {
application = " my-app "
environment = " dev "
team = " my-team "
customer = " my-customer "
contact-email = " [email protected] "
}$ fargate-create -f terraform.tfvarsReadme base
Ambiente dev readme
Instale o gancho de pré-compromisso que verifica o código do Terraform para a formatação
ln -s ../../pre-commit.sh .git/hooks/pre-commit