Un ensemble de modèles Terraform utilisés pour provisionner des piles d'applications Web sur AWS ECS Fargate.
Remarque : Nous vous suggérons de nous éloigner de ce modèle à notre nouvelle version modulaire. Ce dépôt recevra toujours des mises à jour pour maintenir la compatibilité en tant que terraform et les fournisseurs AWS évoluent, mais la plupart des fonctionnalités plus récentes seront implémentées dans le module. Vous pouvez trouver le module ici: https://github.com/warmermedia/terraform-ecs-fargate-module

Les modèles sont conçus pour être personnalisés. Les composants facultatifs peuvent être supprimés en supprimant simplement le fichier .tf .
Les modèles sont utilisés pour gérer les problèmes d'infrastructure et, en tant que tels, les modèles déploient une image Docker backend par défaut. Nous vous recommandons d'utiliser la CLI Fargate pour gérer des problèmes d'application tels que le déploiement de vos images d'application réelles et des variables d'environnement en plus de cette infrastructure. La CLI Fargate peut être utilisée pour déployer des applications à partir de votre ordinateur portable ou dans des pipelines CI / CD.
Ces composants sont partagés par tous les environnements.
| Nom | Description | Facultatif |
|---|---|---|
| main.tf | Fournisseur AWS, sortie | |
| state.tf | Backend S3 pour le stockage de l'état distant de Terraform | |
| ecr.tf | Référentiel ECR pour l'application (tous les environnements partagent) |
Ces composants sont pour un environnement spécifique. Il devrait y avoir un répertoire correspondant pour chaque environnement nécessaire.
| Nom | Description | Facultatif |
|---|---|---|
| main.tf | État à distance TerRform, fournisseur AWS, sortie | |
| ECS.TF | Cluster ECS, service, définition de tâche, EcstaskexecutionRole, groupe de journaux CloudWatch | |
| lb.tf | Alb, groupe cible, seau S3 pour les journaux d'accès | |
| nsg.tf | NSG pour alb et tâche | |
| lb-http.tf | Écouteur HTTP, règle NSG. Supprimer si https uniquement | Oui |
| lb-https.tf | Écouteur HTTPS, règle NSG. Supprimer si http uniquement | Oui |
| tableau de bord.tf | Tableau de bord CloudWatch: CPU, mémoire et mesures liées à HTTP | Oui |
| rôle.tf | Rôle de l'application pour le conteneur | Oui |
| cicd.tf | IAm utilisateur qui peut être utilisé par les systèmes CI / CD | Oui |
| Autoscale-perf.tf | Échelle automatique basée sur les performances | Oui |
| Autoscale-time.tf | Échelle automatique basée sur le temps | Oui |
| logs-logzio.tf | Navires Journaux des conteneurs à Logz.io | Oui |
| secretsmanager.tf | Ajoutez un secret Secrets Manager avec une touche CMK KMS. Donne également l'accès au rôle de l'application et de la définition de la tâche ECS à lire les secrets de Secrets Manager | Oui |
| secrets-sidecar.tf | Ajoute une configuration de définition de tâche pour le déploiement de votre application avec un conteneur Sidecar qui écrit votre secret Secrets Manager dans un fichier. Notez que cela dépend de l'adoption de secretsmanager.tf . | Oui |
| ssm-parameters.tf | Ajoutez une touche CMK KMS à utiliser avec le magasin de paramètres SSM. Donne également l'accès au rôle de définition de la tâche ECS aux secrets de lecture du magasin de paramètres. | Oui |
| ecs-event-stream.tf | Ajouter un tableau de bord en journal des événements ECS | Oui |
En règle générale, le Terraform de base ne devra être exécuté qu'une seule fois, et ne doit ensuite avoir besoin que des changements très rarement. Une fois la base construite, chaque environnement peut être construit.
# 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 ) La base générée .tfstate n'est pas stockée dans le seau S3 à l'état distant. Assurez-vous que la base .tfstate est vérifiée dans votre dépôt d'infrastructure. Le terraform par défaut .gitignore généré par GitHub ignorera tous les fichiers .tfstate ; Vous devrez modifier cela!
Alternativement, vous pouvez utiliser la CLI de création de Fargate pour échafauner de nouveaux projets en fonction de ce modèle.
installer
curl -s get-fargate-create.turnerlabs.io | sh Créer un fichier VARS d'entrée ( 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 de base
Environment dev Readme
Installez le crochet pré-engagement qui vérifie le code Terraform pour la mise en forme
ln -s ../../pre-commit.sh .git/hooks/pre-commit