English English French French Spanish Spanish German German
Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

10 meilleures pratiques Terraform pour un meilleur provisionnement de l'infrastructure

Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Parlons de certaines des meilleures pratiques à suivre lors de l'utilisation de Terraform.

Terraform est un open-source très populaire IaC (infrastructure as code) outil pour définir et provisionner l'infrastructure complète.

Bien que Terraform ait été lancé en 2014, l'adoption de cet outil s'est développée à l'échelle mondiale. De plus en plus de développeurs apprendre Terraform déployer une infrastructure dans leur organisation.

Si vous avez commencé à utiliser Terraform, vous devez adopter les meilleures pratiques pour un meilleur provisionnement de l'infrastructure de production.

Si vous êtes un débutant, regardez ceci Terraform pour les débutants l'article.

Structuring

Lorsque vous travaillez sur un grand projet d'infrastructure de production en utilisant Terraform, vous devez suivre une structure de répertoires appropriée pour prendre en charge les complexités pouvant survenir dans le projet. Il serait préférable que vous disposiez de répertoires distincts à des fins différentes.

Par exemple, si vous utilisez terraform dans des environnements de développement, de préparation et de production, ayez des répertoires séparés pour chacun d'eux.

geekflare@geekflare:~$ tree terraform_project/
terraform_project/
├── dev
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── modules
│ ├── ec2
│ │ ├── ec2.tf
│ │ └── main.tf
│ └── vpc
│ ├── main.tf
│ └── vpc.tf
├── prod
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── stg
├── main.tf
├── outputs.tf
└── variables.tf

6 directories, 13 files

Même les configurations de terraform devraient être séparées car, après un certain temps, les configurations d'une infrastructure en croissance deviendront complexes.

Par exemple - vous pouvez écrire tous vos codes terraform (modules, ressources, variables, sorties) dans le main.tf lui-même, mais avoir des codes terraform séparés pour les variables et les sorties le rend plus lisible et plus facile à comprendre.

Naming Convention

Les conventions de dénomination sont utilisées dans Terraform pour rendre les choses facilement compréhensibles.

Par exemple, supposons que vous souhaitiez créer trois espaces de travail différents pour différents environnements dans un projet. Donc, plutôt que de les nommer env1, en2, env3, vous devriez les appeler comme dev, étape, poussée. D'après le nom lui-même, il devient assez clair qu'il existe trois espaces de travail différents pour chaque environnement.

Des conventions similaires pour les ressources, les variables, les modules, etc. doivent également être suivies. Le nom de la ressource dans Terraform doit commencer par un nom de fournisseur suivi d'un trait de soulignement et d'autres détails.

Par exemple, le nom de la ressource pour créer un objet terraform pour une table de routage dans AWS serait aws_route_table.

Donc, si vous suivez correctement les conventions de dénomination, il sera plus facile de comprendre même les codes complexes.

Use Shared Modules

Il est fortement recommandé d'utiliser les modules officiels Terraform disponibles. Pas besoin de réinventer un module qui existe déjà. Cela économise beaucoup de temps et de douleur. Registre Terraform a beaucoup de modules facilement disponibles. Apportez des modifications aux modules existants selon les besoins.

En outre, chaque module doit se concentrer sur un seul aspect de l'infrastructure, comme la création d'un Instance AWS EC2, configuration de la base de données MySQL, etc.

Par exemple, si vous souhaitez utiliser AWS VPC dans votre code terraform, vous pouvez utiliser - VPC simple

module "vpc_example_simple-vpc" {
source
= "terraform-aws-modules/vpc/aws//examples/simple-vpc"
version = "2.48.0"
}

Latest Version

La communauté de développement Terraform est très active et la publication de nouvelles fonctionnalités est fréquente. Il est recommandé de rester sur la dernière version de Terraform comme dans le cas d'une nouvelle version majeure. Vous pouvez facilement passer à la dernière version.

Si vous sautez plusieurs versions majeures, la mise à niveau deviendra très complexe.

cours terraform -v commande pour vérifier une nouvelle mise à jour.

geekflare@geekflare:~$ terraform -v
Terraform v0.11.14
Your version of Terraform is out of date! The latest version
is 0.12.0. You can update by downloading from www.terraform.io/downloads.html

Backup System State

Sauvegardez toujours les fichiers d'état de Terraform.

Ces fichiers gardent une trace des métadonnées et des ressources de l'infrastructure. Par défaut, ces fichiers appelés comme terraform.tfstate sont stockés localement dans le répertoire de l'espace de travail.

Sans ces fichiers, Terraform ne pourra pas déterminer quelles ressources sont déployées sur l'infrastructure. Il est donc essentiel d'avoir une sauvegarde du fichier d'état. Par défaut, un fichier avec un nom terraform.tfstate.backup sera créé pour conserver une sauvegarde du fichier d'état.

geekflare@geekflare:~$ tree terraform_demo/
terraform_demo/
├── awsec2.tf
├── terraform.tfstate
└── terraform.tfstate.backup
0 directories, 3 files

Si vous souhaitez stocker un fichier d'état de sauvegarde dans un autre emplacement, utilisez -backup flag dans la commande terraform et indiquez le chemin de l'emplacement.

La plupart du temps, plusieurs développeurs travailleront sur un projet. Ainsi, pour leur donner accès au fichier d'état, il doit être stocké à un emplacement distant à l'aide d'un terraform_remote_state la source de données.

L'exemple suivant effectuera une sauvegarde sur S3.

data "terraform_remote_state" "vpc" {
backend = "s3"
config = {
bucket = “s3-terraform-bucket”
key = “vpc/terraform.tfstate"
region = “us-east-1”
   }
}

Lock State File

Il peut y avoir plusieurs scénarios dans lesquels plusieurs développeurs essaient d'exécuter la configuration terraform en même temps. Cela peut entraîner la corruption du fichier d'état terraform ou même la perte de données. Le mécanisme de verrouillage permet d'éviter de tels scénarios. Il s'assure qu'à la fois, une seule personne exécute les configurations terraform et qu'il n'y a pas de conflit.

Voici un exemple de verrouillage du fichier d'état, qui se trouve à un emplacement distant à l'aide de DynamoDB.

resource “aws_dynamodb_table” “terraform_state_lock” {
name = “terraform-locking”
read_capacity = 3
write_capacity = 3
hash_key = “LockingID”

attribute {
name = “LockingID”
type = “S”
   }

}
terraform {
backend “s3” {
bucket = “s3-terraform-bucket”
key = “vpc/terraform.tfstate”
region = “us-east-2”
dynamodb_table = “terraform-locking”
   }
}

Lorsque plusieurs utilisateurs tentent d'accéder au fichier d'état, le nom de la base de données DynamoDB et la clé primaire seront utilisés pour le verrouillage de l'état et le maintien de la cohérence.

Notes: pas tous le verrouillage du support backend.

Use self Variable

self variable est un type spécial de variable qui est utilisé lorsque vous ne connaissez pas la valeur de la variable avant de déployer une infrastructure.

Supposons que vous souhaitiez utiliser l'adresse IP d'une instance qui ne sera déployée qu'après la commande terraform apply, afin que vous ne connaissiez pas l'adresse IP tant qu'elle n'est pas opérationnelle.

Dans de tels cas, vous utilisez des variables self et la syntaxe pour les utiliser est self.ATTRIBUTE. Donc, dans ce cas, vous utiliserez self.ipv4_address en tant que variable auto pour obtenir l'adresse IP de l'instance. Ces variables ne sont autorisées que sur les blocs de connexion et d'approvisionnement de la configuration de terraform.

connection {
host = self.ipv4_address
type = "ssh"
user = var.users[2]
private_key = file(var.private_key_path)
}

Minimize Blast Radius

Le rayon de l'explosion n'est rien d'autre que la mesure des dégâts qui peuvent survenir si les choses ne se passent pas comme prévu.

Par exemple, si vous déployez certaines configurations terraform sur l'infrastructure et que la configuration n'est pas appliquée correctement, quel sera le montant des dommages causés à l'infrastructure.

Ainsi, pour minimiser le rayon de souffle, il est toujours suggéré de pousser quelques configurations sur l'infrastructure à la fois. Ainsi, si quelque chose ne va pas, les dommages à l'infrastructure seront minimes et peuvent être corrigés rapidement. Déployer de nombreuses configurations à la fois est très risqué.

Use var-file

Dans terraform, vous pouvez créer un fichier avec l'extension <em>.</em>tfvars et passez ce fichier à la commande terraform apply en utilisant -var-file drapeau. Cela vous aide à transmettre les variables que vous ne souhaitez pas mettre dans le code de configuration de terraform.

Il est toujours suggéré de passer des variables pour un mot de passe, une clé secrète, etc. localement via -var-fichier plutôt que de l'enregistrer dans des configurations terraform ou sur un système de contrôle de version à distance.

Par exemple, si vous souhaitez lancer une instance ec2 à l'aide de terraform, vous pouvez passer la clé d'accès et la clé secrète à l'aide de -var-fichier

Créer un fichier terraform.tfvars et mettez les clés dans ce fichier.

geekflare@geekflare:~$ gedit terraform.tfvars

access_key = "AKIATYWSDFYU5DUDJI5F"
secret_key = "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"

Maintenant, utilisez ce fichier var dans la commande terraform.

geekflare@geekflare:~$ terraform apply -var-file=/home/geekflare/terraform.tfvars

User Docker

Lorsque vous exécutez une tâche de génération de pipeline CI / CD, il est suggéré d'utiliser docker conteneurs. Terraform fournit des conteneurs Docker officiels qui peuvent être utilisés. Si vous changez le CI / CD serveur, vous pouvez facilement passer l'infrastructure à l'intérieur d'un conteneur.

Avant de déployer l'infrastructure sur l'environnement de production, vous pouvez également tester l'infrastructure sur les conteneurs docker, qui sont très faciles à déployer. En combinant Terraform et Docker, vous obtenez une infrastructure portable, réutilisable et répétable.

Conclusion

J'espère que ces bonnes pratiques vous aideront à écrire de meilleures configurations Terraform. Allez-y et commencez à les implémenter dans vos projets terraform pour de meilleurs résultats.

Merci à nos commanditaires
Plus de bonnes lectures sur le Cloud Computing
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder