Je recommande de prendre un « Stacks » approche basée pour votre projet Terraform afin que vous puissiez configurer et gérer le « Stacks » et l'État à distance par l'espace de travail (aka Environnement). Cela limite le rayon d'action de vos modifications du point de vue du risque, simplifie le flux de travail et fournit également une base de code plus propre et plus facile à maintenir.
Qu'est-ce qui rendra votre journée encore meilleure?
- Un design objectivement simple qui vous permet de raisonner sur la plate-forme et ses parties mobiles. (aka Stacks)
- Une implémentation qui vous offre de la flexibilité tout en limitant les risques de changements. (alias Limiter le rayon de souffle)
- Une solution qui offre de la valeur aujourd'hui et continue de s'améliorer tout en créant une dynamique à long terme. (Aka modèles, workflow)
Voici une liste rapide des bonnes pratiques
Gérer "Etat" séparément pour "Stacks" à travers "Workspaces"
Mettre en oeuvre « Stacks "pour une" configuration "cohérente à travers" Workspaces "
Gardez-le objectif et simple avec de bons" Patterns "et" Workflow ".
Exemple Terraform projet en utilisant une approche fondée sur Stacks
/
/scripts
<shell scripts>
<terraform wrapper functions>
/stacks
/application_1 # Provisions Application 1 and its dependencies
/application_2 # Provisions Application 2 and its dependencies
/application_n # Provisions Application N and its dependencies
backend.tf # Remote State
data.tf # Data Sources
stack.tf # Stack Variables and Defaults
aws_resource.tf
...
...
/network # Provisions VPC, Subnets, Route Tables, Route53 Zones
/security # Provisions Security Groups, Network ACLs, IAM Resources
/storage # Provisions Storage Resources like S3, EFS, CDN
global.tf # Global Variables
dev.tfvars # Development Environment Variables
tst.tfvars # Testing Environment Variables
stg.tfvars # Staging Environment Variables
prd.tfvars # Production Environment Variables
terraform.sh # Wrapper Script for Executing Terraform (Workflow)
Quelques réflexions plus
À mesure que votre mise en œuvre se développe, il est beaucoup plus simple d'intégrer les exigences futures en piles existantes ou comme de nouvelles piles si elles sont une dépendance partagée. Terraform permet l'utilisation de l'état distant en tant que source de données. Configuration de votre propre sortie Les variables par pile rendent la configuration et l'utilisation des attributs de ressources exportées beaucoup plus propres. La configuration de votre projet pour que vous puissiez définir des variables et des valeurs par défaut raisonnables au niveau de la pile vous permet de les remplacer au niveau de l'espace de travail pour répondre aux exigences des différents environnements tels que Dev, Test, Production, etc. tout en gardant la configuration cohérente et l'état distant géré séparément par environnement.
Voici quelques-unes des pratiques que nous avons développées et déployées dans notre équipe pour améliorer notre expérience de travail avec Terraform pour gérer notre plate-forme AWS.
À la votre!
Remerciements Fermin; Je voulais spécifiquement éviter d'utiliser toute forme de wrapper; J'ai déjà la configuration de la ferme de dossier/lien symbolique, mais c'était afin que je puisse avoir différents ensembles de modules (qui ont implémenté la même interface) effectuez l'opération. Dans ce cas, notre matériel AWS a été factorisé, donc il pourrait être implémenté avec l'équivalent d'Azure ou de GCE. Les espaces de travail sont essentiellement la version 0.10 de ce que l'on appelait les environnements dans les versions précédentes. Si la terraform 0.10.0 avait un moyen de refléter le nom de l'espace de travail qui serait utile, mais je ne le pense pas. –
J'ai les étapes Octopus dans le pipeline de déploiement, donc je ne le vois pas comme un wrapper en soi. Vous ne savez pas exactement ce que vous entendez par différents modules avec la même interface - les mêmes exigences de paramètre, mais l'implémentation bascule entre Azure/AWS? – Fermin