Un conjunto de plantillas de Terraform utilizadas para aprovisionar las pilas de aplicaciones web en AWS ECS Fargate.
Nota : Sugerimos alejarse de esta plantilla a nuestra nueva versión modular. Este repositorio aún recibirá actualizaciones para mantener la compatibilidad como Terraform y los proveedores de AWS evolucionan, pero la mayoría de las características más nuevas se implementarán en el módulo. Puede encontrar el módulo aquí: https://github.com/warnermedia/terraform-ecs-fargate-module

Las plantillas están diseñadas para ser personalizadas. Los componentes opcionales se pueden eliminar simplemente eliminando el archivo .tf .
Las plantillas se utilizan para gestionar las preocupaciones de infraestructura y, como tal, las plantillas implementan una imagen de back -end predeterminada. Recomendamos utilizar la CLI de Fargate para administrar las preocupaciones de aplicaciones, como implementar sus imágenes de aplicación reales y variables de entorno además de esta infraestructura. La Fargate CLI se puede usar para implementar aplicaciones desde su computadora portátil o en tuberías CI/CD.
Estos componentes son compartidos por todos los entornos.
| Nombre | Descripción | Opcional |
|---|---|---|
| Main.tf | Proveedor de AWS, salida | |
| estado.tf | Backend de cubos S3 para almacenar el estado remoto de Terraform | |
| ecr.tf | Repositorio ECR para la aplicación (todos los entornos comparten) |
Estos componentes son para un entorno específico. Debe haber un directorio correspondiente para cada entorno que sea necesario.
| Nombre | Descripción | Opcional |
|---|---|---|
| Main.tf | Terrform Remote State, proveedor de AWS, salida | |
| ECS.TF | Cluster ECS, servicio, definición de tareas, ESTASKEXECUCIONROLE, GRUPO DE LOG | |
| lb.tf | Alb, grupo objetivo, cubo S3 para registros de acceso | |
| nsg.tf | NSG para Alb y tarea | |
| lb-http.tf | HTTP Oyente, Regla NSG. Eliminar si solo https | Sí |
| lb-https.tf | HTTPS oyente, regla NSG. Eliminar si solo http | Sí |
| tablero de control.tf | Panel de CloudWatch: CPU, memoria y métricas relacionadas con HTTP | Sí |
| rol.tf | Rol de aplicación para contenedor | Sí |
| cicd.tf | Usuario de IAM que puede ser utilizado por los sistemas CI/CD | Sí |
| AutoScale-Perf.tf | Escala automotriz basada en el rendimiento | Sí |
| AutoScale-Time.tf | Escalado automático basado en el tiempo | Sí |
| logs-logzio.tf | Enviar registros de contenedores a Logz.io | Sí |
| secretsmanager.tf | Agregue un secreto de Secrets Manager con una clave CMK KMS. También ofrece acceso a roles de tarea de roles y tareas de la ECS para leer secretos de Secrets Manager | Sí |
| secretos-sidecar.tf | Agrega una configuración de definición de tarea para implementar su aplicación junto con un contenedor Sidecar que escriba el secreto de su Secrets Manager en un archivo. Tenga en cuenta que esto depende de optar a secretsmanager.tf . | Sí |
| ssm-parameters.tf | Agregue una tecla CMK KMS para usar con el almacén de parámetros SSM. También ofrece acceso a roles de definición de tarea de ECS a secretos de lectura en la tienda de parámetros. | Sí |
| ECS-Event-stream.tf | Agregar un tablero de registro de eventos ECS | Sí |
Por lo general, la base Terraform solo deberá ejecutarse una vez, y luego solo debe necesitar cambios con mucha frecuencia. Después de construir la base, cada entorno se puede construir.
# 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 inicial) La base generada .tfstate no se almacena en el cubo de estado remoto S3. Asegúrese de que la base .tfstate se verifique en su repositorio de infraestructura. El Terraform .gitignore , GitHub, ignorará todos los archivos .tfstate ; ¡Tendrás que modificar esto!
Alternativamente, puede usar la CLI de creación de fargate para andamios nuevos proyectos basados en esta plantilla.
instalar
curl -s get-fargate-create.turnerlabs.io | sh Cree un archivo 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
Medio ambiente dev ReadMe
Instale el gancho previo al contrato que verifica el código Terraform para el formato
ln -s ../../pre-commit.sh .git/hooks/pre-commit