Page 1 sur 1

Initiation

Publié : 15 nov. 2023, 10:14
par cyril
Qu’est-ce que Terraform ?

Terraform est un outil d'infrastructure en tant que code qui vous permet de créer, de modifier et de versionner des ressources cloud et sur site en toute sécurité et efficacement.

HashiCorp Terraform est un outil d'infrastructure en tant que code qui vous permet de définir des ressources cloud et sur site dans des fichiers de configuration lisibles par l'homme que vous pouvez versionner, réutiliser et partager. Vous pouvez ensuite utiliser un workflow cohérent pour provisionner et gérer l’ensemble de votre infrastructure tout au long de son cycle de vie. Terraform peut gérer des composants de bas niveau tels que les ressources de calcul, de stockage et de réseau, ainsi que des composants de haut niveau tels que les entrées DNS et les fonctionnalités SaaS.

Comment fonctionne Terraform ?

Terraform crée et gère des ressources sur les plateformes cloud et d'autres services via leurs interfaces de programmation d'applications (API). Les fournisseurs permettent à Terraform de fonctionner avec pratiquement n'importe quelle plate-forme ou service doté d'une API accessible.

Image

HashiCorp et la communauté Terraform ont déjà rédigé des milliers de fournisseurs pour gérer de nombreux types différents de ressources et de services. Vous pouvez trouver tous les fournisseurs accessibles au public sur le registre Terraform , notamment Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog et bien d'autres.

Le flux de travail principal de Terraform se compose de trois étapes :

Écrire : vous définissez des ressources, qui peuvent concerner plusieurs fournisseurs et services cloud. Par exemple, vous pouvez créer une configuration pour déployer une application sur des machines virtuelles dans un réseau Virtual Private Cloud (VPC) avec des groupes de sécurité et un équilibreur de charge.

Plan : Terraform crée un plan d'exécution décrivant l'infrastructure qu'il va créer, mettre à jour ou détruire en fonction de l'infrastructure existante et de votre configuration.

Appliquer : après approbation, Terraform effectue les opérations proposées dans le bon ordre, en respectant toutes les dépendances de ressources. Par exemple, si vous mettez à jour les propriétés d'un VPC et modifiez le nombre de machines virtuelles dans ce VPC, Terraform recréera le VPC avant de mettre à l'échelle les machines virtuelles.

Image

Gérer n’importe quelle infrastructure

Trouvez des fournisseurs pour la plupart des plates-formes et services que vous utilisez déjà dans le registre Terraform . Vous pouvez également écrire le vôtre . Terraform adopte une approche immuable de l'infrastructure , réduisant la complexité de la mise à niveau ou de la modification de vos services et de votre infrastructure.

Suivez votre infrastructure

Terraform génère un plan et vous demande votre approbation avant de modifier votre infrastructure. Il garde également une trace de votre infrastructure réelle dans un fichier d'état , qui fait office de source de vérité pour votre environnement. Terraform utilise le fichier d'état pour déterminer les modifications à apporter à votre infrastructure afin qu'elle corresponde à votre configuration.

Automatiser les modifications

Les fichiers de configuration Terraform sont déclaratifs, ce qui signifie qu'ils décrivent l'état final de votre infrastructure. Vous n'avez pas besoin d'écrire des instructions étape par étape pour créer des ressources car Terraform gère la logique sous-jacente. Terraform crée un graphique de ressources pour déterminer les dépendances des ressources et crée ou modifie des ressources non dépendantes en parallèle. Cela permet à Terraform de provisionner efficacement les ressources.

Standardiser les configurations

Terraform prend en charge des composants de configuration réutilisables appelés modules qui définissent des collections d'infrastructures configurables, permettant ainsi de gagner du temps et d'encourager les meilleures pratiques. Vous pouvez utiliser des modules accessibles au public à partir du registre Terraform ou écrire les vôtres.

Collaborer

Étant donné que votre configuration est écrite dans un fichier, vous pouvez la valider dans un système de contrôle de version (VCS) et utiliser Terraform Cloud pour gérer efficacement les flux de travail Terraform entre les équipes. Terraform Cloud exécute Terraform dans un environnement cohérent et fiable et fournit un accès sécurisé aux données d'état et secrètes partagées, des contrôles d'accès basés sur les rôles, un registre privé pour le partage des modules et des fournisseurs, et bien plus encore.

Installation

Windows

Vous pouvez installer WSL 2 qui vous permettra d’utiliser les commande Linux sous windows via la documentation suivante : https://learn.microsoft.com/fr-fr/windows/wsl/install

Ou vous pouvez installer le binaire :

Commencez par télécharger l’exécutable pour architecture Windows sur cette page :

https://www.terraform.io/downloads.html

Pour d’autres OS, suivez les instructions données sur le site.

1) Une fois l’exécutable téléchargé, décompressez l’archive et placez l’exécutable dans un dossier

C:\HashiCorp\Terraform

2) Ensuite, ajoutez le dossier au PATH de votre système depuis l’invite de commande :

Code : Tout sélectionner

Setx /M PATH ”%PATH%;C:\HashiCorp\Terraform”  
3) Quittez l’outil cmd et relancez-le pour vérifier que vos modifications ont été prises en compte, en testant la commande :

Code : Tout sélectionner

terraform -help  
Linux

Pour installer Terraform, recherchez-le package approprié pour votre système et téléchargez-le sous forme d'archive zip.

Après avoir téléchargé Terraform, décompressez-le package. Terraform fonctionne comme un seul binaire nommé terraform. Tous les autres fichiers du package peuvent être supprimés en toute sécurité et Terraform fonctionnera toujours.

Enfin, assurez-vous que le terraform le binaire est disponible sur votre PATH. Ce processus diffère en fonction de votre système d'exploitation.

Imprimez une liste d'emplacements séparés par deux points dans votre PATH.

Code : Tout sélectionner

 echo $PATH 
Déplacez le binaire Terraform vers l'un des emplacements répertoriés. Cette commande suppose que le binaire se trouve actuellement dans votre dossier de téléchargements et que votre PATHcomprend /usr/local/bin, mais vous pouvez le personnaliser si vos emplacements sont différents.

Code : Tout sélectionner

 mv ~/Downloads/terraform /usr/local/bin/ 
Vérifier l'installation

Vérifiez que l'installation a fonctionné en ouvrant une nouvelle session de terminal et en répertoriant les sous-commandes disponibles de Terraform.

Code : Tout sélectionner

 terraform -help 

Code : Tout sélectionner

Usage: terraform [-version] [-help] <command> [args] 

 

The available commands for execution are listed below. 

The most common, useful commands are shown first, followed by 

less common or more advanced commands. If you're just getting 

started with Terraform, stick with the common commands. For the 

other commands, please read the help and docs before usage. 

#... 
Ajoutez n'importe quelle sous-commande à terraform -helppour en savoir plus sur ce qu'il fait et les options disponibles.

Code : Tout sélectionner

 terraform -help plan 
Construire des infrastructures

Une fois Terraform installé, vous êtes prêt à créer votre première infrastructure.

Dans ce didacticiel, vous allez provisionner une instance EC2 sur Amazon Web Services (AWS). Les instances EC2 sont des machines virtuelles exécutées sur AWS et un composant commun de nombreux projets d’infrastructure.


Conditions préalables

Pour suivre ce tutoriel vous aurez besoin de :
  • La Terraforme CLI (1.2.0+) installé.
  • L' AWS CLI installée.
  • Compte AWS et associé informations d'identification qui vous permettent de créer des ressources. (Contactez-nous par mail itec-lab-aws@itec.fr ou via le formulaire si vous n’en avez pas)
Pour utiliser vos informations d'identification IAM pour authentifier le fournisseur Terraform AWS, définissez le AWS_ACCESS_KEY_ID variable d'environnement.

Code : Tout sélectionner

 export AWS_ACCESS_KEY_ID= 
Maintenant, définissez votre clé secrète.

Code : Tout sélectionner

 export AWS_SECRET_ACCESS_KEY= 


Ce didacticiel fournira des ressources éligibles au titre d' AWS. niveau gratuit .


Écrire la configuration

L'ensemble de fichiers utilisés pour décrire l'infrastructure dans Terraform est appelé de Terraforme Configuration . Vous écrirez votre première configuration pour définir un seul Instance AWS EC2.

Chaque configuration Terraform doit se trouver dans son propre répertoire de travail. Créer un répertoire pour votre configuration.

Code : Tout sélectionner

 mkdir learn-terraform-aws-instance 
Accédez au répertoire.

Code : Tout sélectionner

 cd learn-terraform-aws-instance 
Créez un fichier pour définir votre infrastructure.

Code : Tout sélectionner

 touch main.tf 
Ouvrir main.tf dans votre éditeur de texte, collez la configuration ci-dessous et enregistrez le fichier.

Conseil

L'ID AMI utilisé dans cette configuration est spécifique au us-west-2région. Si vous souhaitez utiliser une autre région, consultez la Section de dépannage pour obtenir des conseils.

Code : Tout sélectionner

terraform { 

  required_providers { 

    aws = { 

      source  = "hashicorp/aws" 

      version = "~> 4.16" 

    } 

  } 

 

  required_version = ">= 1.2.0" 

} 

 

provider "aws" { 

  region  = "us-west-2" 

} 

 

resource "aws_instance" "app_server" { 

  ami           = "ami-830c94e3" 

  instance_type = "t2.micro" 

 

  tags = { 

    Name = "ExampleAppServerInstance" 

  } 

} 
Il s'agit d'une configuration complète que vous pouvez déployer avec Terraform. Le les sections suivantes examinent chaque bloc de cette configuration plus en détail détail.

Bloc Terraforme

Le bloc terraform {} contient les paramètres Terraform, y compris les éléments requis fournisseurs que Terraform utilisera pour provisionner votre infrastructure. Pour chaque fournisseur, l'attribut source définit un nom d'hôte facultatif, un espace de noms et le fournisseur. Terraform installe les fournisseurs à partir de Terraform Registre par défaut. Dans cet exemple configuration, la source aws du fournisseur est définie dans hashicorp/aws, lequel est un raccourci pour registry.terraform.io/hashicorp/aws.

Vous pouvez également définir une contrainte de version pour chaque fournisseur défini dans le bloc required_providers. L'attribut version est facultatif, mais nous recommandons de l'utiliser pour contraindre la version du fournisseur afin que Terraform n’installe pas une version du fournisseur qui ne fonctionne pas avec votre configuration. Si vous ne spécifiez pas de version du fournisseur, Terraform téléchargera automatiquement la version la plus récente lors de l'initialisation.

Pour en savoir plus, référencez la source du fournisseur documentation .

Fournisseurs

Le block provider configure le fournisseur spécifié, dans ce cas aws. UN supplier est un plugin que Terraform utilise pour créer et gérer vos ressources.

Vous pouvez utiliser plusieurs blocs de fournisseur dans votre configuration Terraform pour gérer des ressources provenant de différents fournisseurs. Vous pouvez même utiliser différents fournisseurs ensemble. Par exemple, vous pouvez transmettre l'adresse IP de votre instance AWS EC2 à une ressource de surveillance de DataDog.

Ressources

Utiliser des blocs resource pour définir les composants de votre infrastructure. Une ressource Il peut s'agir d'un composant physique ou virtuel tel qu'une instance EC2, ou d'un ressource logique telle qu'une application Heroku.

Les blocs de ressources ont deux chaînes avant le bloc : le type de ressource et le nom de la ressource. Dans cet exemple, le type de ressource est aws_instance et le nom est app_server. Le préfixe du type correspond au nom du fournisseur. Dans l’exemple de configuration, Terraform gère les ressources aws_instance avec le fournisseur aws. Ensemble, le type de ressource et le nom de la ressource forment un identifiant unique pour la ressource. Par exemple, l'ID de votre instance EC2 est aws_instance.app_server.

Les blocs de ressources contiennent des arguments que vous utilisez pour configurer la ressource. Les arguments peuvent inclure des éléments tels que la taille des machines, les noms d'images disque ou les ID de VPC. Référence de nos prestataires répertorie les arguments obligatoires et facultatifs pour chaque ressource. Pour votre EC2 instance, l'exemple de configuration définit l'ID AMI sur une image Ubuntu et l'instance type t2.micro, qui est éligible à l'offre gratuite d'AWS. Il définit également une balise pour donner un nom à l'instance.

Initialiser le répertoire

Lorsque vous créez une nouvelle configuration ou extrayez une configuration existante à partir du contrôle de version - vous devez initialiser le répertoire avec terraform init.

L'initialisation d'un répertoire de configuration télécharge et installe les fournisseurs définis dans la configuration, qui dans ce cas est le fournisseur aws.



Initialisez le répertoire.

Code : Tout sélectionner

 terraform init 

Code : Tout sélectionner

Initializing the backend... 

 

Initializing provider plugins... 

- Finding hashicorp/aws versions matching "~> 4.16"... 

- Installing hashicorp/aws v4.17.0... 

- Installed hashicorp/aws v4.17.0 (signed by HashiCorp) 

 

Terraform has created a lock file .terraform.lock.hcl to record the provider 

selections it made above. Include this file in your version control repository 

so that Terraform can guarantee to make the same selections by default when 

you run "terraform init" in the future. 

 

Terraform has been successfully initialized! 

 

You may now begin working with Terraform. Try running "terraform plan" to see 

any changes that are required for your infrastructure. All Terraform commands 

should now work. 

 

If you ever set or change modules or backend configuration for Terraform, 

rerun this command to reinitialize your working directory. If you forget, other 

commands will detect it and remind you to do so if necessary. 
Terraform télécharge le fournisseur aws et l'installe dans un emplacement caché sous-répertoire de votre répertoire de travail actuel, nommé .terraform. La commande terraform init affiche quelle version du fournisseur a été installée. Terraform crée également un fichier de verrouillage nommé .terraform.lock.hcl qui spécifie les versions exactes du fournisseur utilisé, afin que vous puissiez contrôler quand vous souhaitez mettre à jour les fournisseurs utilisés pour votre projet.

Formater et valider la configuration

Nous vous recommandons d'utiliser un formatage cohérent dans tous vos fichiers de configuration. La commande terraform fmt met automatiquement à jour les configurations dans le courant répertoire pour plus de lisibilité et de cohérence.

Formatez votre configuration. Terraform affichera les noms des fichiers qu'il modifie, le cas échéant. Dans ce cas, votre fichier de configuration était déjà formaté correctement, donc Terraform ne renverra aucun nom de fichier.

Code : Tout sélectionner

 terraform fmt 
Vous pouvez également vous assurer que votre configuration est syntaxiquement valide et en interne cohérent en utilisant la commande terraform validate.

Validez votre configuration. L'exemple de configuration fourni ci-dessus est valide, donc Terraform renverra un message de réussite.

Code : Tout sélectionner

 terraform validate 

Code : Tout sélectionner

Success! The configuration is valid. 


Créer une infrastructure

Appliquez maintenant la configuration avec la commande terraform apply. Terraform va afficher une sortie similaire à celle illustrée ci-dessous. Nous avons tronqué certains des sorties pour économiser de l'espace.

Code : Tout sélectionner

 terraform apply 


Terraform used the selected providers to generate the following execution plan.

Resource actions are indicated with the following symbols:

Code : Tout sélectionner

  + create 

 

Terraform will perform the following actions: 

 

   

 aws_instance.app_server will be created 

  + resource "aws_instance" "app_server" { 

      + ami                          = "ami-830c94e3" 

      + arn                          = (known after apply) 

#... 

 

Plan: 1 to add, 0 to change, 0 to destroy. 

 

Do you want to perform these actions? 

  Terraform will perform the actions described above. 

  Only 'yes' will be accepted to approve. 

 

  Enter a value: 
Conseil

Si votre configuration ne s'applique pas, vous avez peut-être personnalisé votre région ou supprimé votre VPC par défaut. Se référer au section de dépannage de ce didacticiel pour aide.

Avant d'appliquer des modifications, Terraform affiche le plan d'exécution qui décrit les actions que Terraform entreprendra afin de modifier votre infrastructure adaptée à la configuration.

Le format de sortie est similaire au format diff généré par des outils tels que Git. La sortie a un +près de aws_instance.app_server, ce qui signifie que Terraform va créer cette ressource. En dessous, il montre les attributs qui seront ensemble. Lorsque la valeur affichée est (known after apply), cela signifie que la valeur ne sera pas connue tant que la ressource n'est pas créée. Par exemple, AWS attribue Amazon Resource Names (ARN) aux instances lors de leur création, Terraform ne peut donc pas connaître la valeur de l’attribut arn jusqu'à ce que vous appliquiez la modification et le fournisseur renvoie cette valeur à partir de l'API AWS.

Terraform va maintenant faire une pause et attendre votre approbation avant de continuer. Si quoi que ce soit dans le plan semble incorrect ou dangereux, vous pouvez abandonner ici en toute sécurité avant Terraform modifie votre infrastructure.

Dans ce cas, le plan est acceptable, alors tapez yes à l'invite de confirmation pour procéder. L'exécution du plan prendra quelques minutes puisque Terraform attend l'instance EC2 soit disponible.

Code : Tout sélectionner

  Enter a value: yes 

 

aws_instance.app_server: Creating... 

aws_instance.app_server: Still creating... [10s elapsed] 

aws_instance.app_server: Still creating... [20s elapsed] 

aws_instance.app_server: Still creating... [30s elapsed] 

aws_instance.app_server: Creation complete after 36s [id=i-01e03375ba238b384] 

 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed. 
Vous avez maintenant créé une infrastructure à l'aide de Terraform ! Visitez l' EC2 console et trouvez votre nouvelle instance EC2.

Note

Selon le bloc fournisseur aws, votre instance a été créée dans la région us-west-2. Assurez-vous que votre console AWS est définie sur cette région.

Inspecter l'état

Lorsque vous avez appliqué votre configuration, Terraform a écrit les données dans un fichier appelé terraform.tfstate. Terraform stocke les identifiants et les propriétés des ressources qu'il gère dans ce fichier, afin qu'il puisse mettre à jour ou détruire ces ressources avant.

Le fichier d'état Terraform est le seul moyen par lequel Terraform peut suivre les ressources qu'il utilise, gère et contient souvent des informations sensibles, vous devez donc stocker votre fichier d’état en toute sécurité et restreindre l'accès aux seuls membres de l'équipe de confiance qui doivent gérer vos infrastructures. En production, nous vous recommandons de stocker votre état à distance avec Terraform Cloud ou Terraform Entreprise. Terraform prend également en charge plusieurs autres back-ends que vous pouvez utiliser pour stocker et gérer votre état.

Inspectez l’état actuel en utilisant terraform show.

Code : Tout sélectionner

 terraform show 

Code : Tout sélectionner

 aws_instance.app_server: 

resource "aws_instance" "app_server" { 

    ami                          = "ami-830c94e3" 

    arn                          = "arn:aws:ec2:us-west-2:561656980159:instance/i-01e03375ba238b384" 

    associate_public_ip_address  = true 

    availability_zone            = "us-west-2c" 

    cpu_core_count               = 1 

    cpu_threads_per_core         = 1 

    disable_api_termination      = false 

    ebs_optimized                = false 

    get_password_data            = false 

    hibernation                  = false 

    id                           = "i-01e03375ba238b384" 

    instance_state               = "running" 

    instance_type                = "t2.micro" 

    ipv6_address_count           = 0 

    ipv6_addresses               = [] 

    monitoring                   = false 

    primary_network_interface_id = "eni-068d850de6a4321b7" 

    private_dns                  = "ip-172-31-0-139.us-west-2.compute.internal" 

    private_ip                   = "172.31.0.139" 

    public_dns                   = "ec2-18-237-201-188.us-west-2.compute.amazonaws.com" 

    public_ip                    = "18.237.201.188" 

    secondary_private_ips        = [] 

    security_groups              = [ 

        "default", 

    ] 

    source_dest_check            = true 

    subnet_id                    = "subnet-31855d6c" 

    tags                         = { 

        "Name" = "ExampleAppServerInstance" 

    } 

    tenancy                      = "default" 

    vpc_security_group_ids       = [ 

        "sg-0edc8a5a", 

    ] 

 

    credit_specification { 

        cpu_credits = "standard" 

    } 

 

    enclave_options { 

        enabled = false 

    } 

 

    metadata_options { 

        http_endpoint               = "enabled" 

        http_put_response_hop_limit = 1 

        http_tokens                 = "optional" 

    } 

 

    root_block_device { 

        delete_on_termination = true 

        device_name           = "/dev/sda1" 

        encrypted             = false 

        iops                  = 0 

        tags                  = {} 

        throughput            = 0 

        volume_id             = "vol-031d56cc45ea4a245" 

        volume_size           = 8 

        volume_type           = "standard" 

    } 

} 
Lorsque Terraform a créé cette instance EC2, il a également rassemblé les métadonnées de la ressource à partir du Fournisseur AWS et écrit les métadonnées dans le fichier d'état. Dans les didacticiels ultérieurs, vous modifierez votre configuration pour référencer ces valeurs à configurer d'autres ressources et valeurs de sortie.

Gestion manuelle de l'état

Terraform a une commande intégrée appelée terraform state pour gerer l’état avancé. Utilisez la sous-commande list pour lister l'état des ressources de votre projet.

Code : Tout sélectionner

 terraform state list 

Code : Tout sélectionner

aws_instance.app_server 
Dépannage

Si terraform validate a été acceptée et votre apply est en echéc, vous pourriez peut-être rencontrer l’une de ces erreurs courantes.
  • Si vous utilisez une région autre que us-west-2, vous devrez également changer votre ami, puisque les ID AMI sont spécifiques à la région. Choisissez un ID AMI spécifique à votre région en suivant ces instructions , et modifier main.tf avec cet identifiant. Puis réexécutez terraform apply.
  • Si vous n'avez pas de VPC par défaut dans votre compte AWS dans la bonne région, accédez au tableau de bord AWS VPC dans l'interface utilisateur Web, créez un nouveau VPC dans votre région et associez un sous-réseau et un groupe de sécurité à ce VPC. Ajoutez ensuite le ID du groupe de sécurité ( vpc_security_group_ids) et l'ID de sous-réseau ( subnet_id) arguments pour votre aws_instance ressource et remplacez les valeurs par celles de votre nouveau groupe de sécurité et sous-réseau.

Code : Tout sélectionner

     resource "aws_instance" "app_server" { 

       ami                    = "ami-830c94e3" 

       instance_type          = "t2.micro" 

    +  vpc_security_group_ids = ["sg-0077..."] 

    +  subnet_id              = "subnet-923a..." 

     } 
Enregistrez les modifications dans main.tf, et réexécutez terraform apply.

N'oubliez pas d'ajouter ces lignes à votre configuration pour les didacticiels ultérieurs. Pour plus d'informations, consultez ceci document d'AWS sur l'utilisation des VPC.

Prochaines étapes

Maintenant que vous avez créé votre première infrastructure à l'aide de Terraform, continuez le prochain tutoriel pour modifier votre Infrastructure.

Pour plus de détails sur les concepts utilisés dans ce tutoriel :

Découvrez le langage de configuration Terraform dans le Documentation Terraform .

En savoir plus sur les fournisseurs Terraform .

Trouvez des exemples d'autres utilisations de Terraform dans la section cas d'utilisation de la documentation .

Lisez la documentation du fournisseur AWS pour en savoir plus sur l'authentification AWS.

Pour plus d'informations sur le terraform state commande et sous-commandes pour déplacer ou supprimer des ressources de l'état, voir la CLI statedocumentation des commandes .

Changer d'infrastructure

Dans le dernier tutoriel, vous avez créé votre première infrastructure avec Terraform : a une seule instance EC2 sur AWS. Dans ce tutoriel, vous allez modifier cette ressource, et Apprenez à appliquer des modifications à vos projets Terraform.

Les infrastructures sont en constante évolution, et Terraform vous aide gérer ce changement. Au fur et à mesure que vous changez de configuration Terraform, Terraform construit un un plan d'exécution qui ne modifie que ce qui est nécessaire pour atteindre l'état souhaité.

Lors de l'utilisation de Terraform dans la production, nous vous recommandons d'utiliser un système de contrôle de version pour gérer vos fichiers de configuration, et stocker votre état dans un backend hébergé comme Terraform Cloud ou Terraform Enterprise.

Configuration

Maintenant, mettez à jour l’ ami de votre instance. Modifier la aws_instance.app_server une ressource sous le bloc de fournisseurs dans main.tf en remplaçant l'identifiant actuel de l'AMI avec un nouveau.

Astuce

L'extrait ci-dessous est formaté comme un diff pour vous montrer sur quelles parties de votre configuration vous devez appliquer les changements. Remplacer le contenu affiché en rouge avec le contenu affiché en vert, en laissant de côté les signes + et -.


Note

Le nouvel ID AMI utilisé dans cette configuration est spécifique à la région us-west-2. Si vous travaillez dans une autre région, assurez-vous de sélectionner un IAM approprié pour cette région en suivant ces instructions.

Code : Tout sélectionner

 resource "aws_instance" "app_server" { 

-  ami           = "ami-830c94e3" 

+  ami           = "ami-08d70e59c07c61a3a" 

   instance_type = "t2.micro" 

 } 
Cette mise à jour modifie l'AMI en un Ubuntu 16.04 AMI. Le fournisseur AWS sait que il ne peut pas changer l'AMI d'une instance après sa création, donc Terraform détruira l'ancien et en créera un nouveau.

Appliquer les modifications

Après avoir changé la configuration, lancez la commande terraform apply pour voir à nouveau comment Terraform appliquera cette modification aux ressources existantes.

Code : Tout sélectionner

 terraform apply 

Code : Tout sélectionner

 aws_instance.app_server must be replaced 

-/+ resource "aws_instance" "app_server" { 

      ~ ami                          = "ami-830c94e3" -> "ami-08d70e59c07c61a3a" # forces replacement 

      ~ arn                          = "arn:aws:ec2:us-west-2:561656980159:instance/i-01e03375ba238b384" -> (known after apply) 

#... 

 

Plan: 1 to add, 0 to change, 1 to destroy. 

 

Do you want to perform these actions? 

  Terraform will perform the actions described above. 

  Only 'yes' will be accepted to approve. 

 

  Enter a value: 
Le préfixe -/+signifie que Terraform détruira et recréera la ressource, plutôt que de le mettre à jou. Terraform peut mettre à jour certains attributs en place (indiqué avec le ~préfixe), mais changer l'AMI pour une instance EC2 nécessite de le recréer. Terraform gère ces détails pour vous, et le plan d'exécution affiche ce que Terraform fera.

En outre, le plan d'exécution montre que le changement de l'AMI est ce qui force Terraform à remplacer l'instance. En utilisant ces informations, vous pouvez ajuster vos changements afin d'éviter les mises à jour destructrices si nécessaire.

Encore une fois, Terraform demande l'approbation du plan d'exécution avant procédure. Répondre yes pour exécuter les étapes prévues.

Code : Tout sélectionner

  Enter a value: yes 

 

aws_instance.app_server: Destroying... [id=i-01e03375ba238b384] 

aws_instance.app_server: Still destroying... [id=i-01e03375ba238b384, 10s elapsed] 

aws_instance.app_server: Still destroying... [id=i-01e03375ba238b384, 20s elapsed] 

aws_instance.app_server: Still destroying... [id=i-01e03375ba238b384, 30s elapsed] 

aws_instance.app_server: Still destroying... [id=i-01e03375ba238b384, 40s elapsed] 

aws_instance.app_server: Destruction complete after 42s 

aws_instance.app_server: Creating... 

aws_instance.app_server: Still creating... [10s elapsed] 

aws_instance.app_server: Still creating... [20s elapsed] 

aws_instance.app_server: Still creating... [30s elapsed] 

aws_instance.app_server: Still creating... [40s elapsed] 

aws_instance.app_server: Creation complete after 50s [id=i-0fd4a35969bd21710] 

 

Apply complete! Resources: 1 added, 0 changed, 1 destroyed. 
Comme l'indique le plan d'exécution, Terraform a d'abord détruit l'existant et a ensuite créé un nouveau à sa place. Vous pouvez utiliser terraform show pour que Terraform imprime de nouveau les nouvelles valeurs associées à cette instance.

Détruire l'infrastructure

Vous avez maintenant créé et mis à jour une instance EC2 sur AWS avec Terraform. Dans ce tutoriel, vous utiliserez Terraform pour détruire cette infrastructure.

Une fois que vous n'avez plus besoin de l'infrastructure, vous voudrez peut-être la détruire pour réduire les risque lié a la sécurité et vos coûts . Par exemple, vous pouvez enlever un environnement de service de production, ou la gestion d'environnements de courte durée comme la construction ou le test de système. Outre la construction et la modification des infrastructures, Terraform peut détruire ou recréer l'infrastructure qu'il gère.

Destroy

La commande terraform destroy met fin aux ressources gérées par votre projet Terraform. Cette commande est l'inverse de terraform apply en ce qu'il met fin toutes les ressources spécifiées dans votre état Terraform. Il ne détruit pas les ressources qui fonctionnent ailleurs et qui ne sont pas gérées par l'actuel projet Terraform.



Détruisez les ressources que vous avez créées.

Code : Tout sélectionner

 terraform destroy 
T

Code : Tout sélectionner

erraform used the selected providers to generate the following execution plan. 

Resource actions are indicated with the following symbols: 

  - destroy 

 

Terraform will perform the following actions: 

 

   

 aws_instance.app_server will be destroyed 

  - resource "aws_instance" "app_server" { 

      - ami                          = "ami-08d70e59c07c61a3a" -> null 

      - arn                          = "arn:aws:ec2:us-west-2:561656980159:instance/i-0fd4a35969bd21710" -> null 

#... 

 

Plan: 0 to add, 0 to change, 1 to destroy. 

 

Do you really want to destroy all resources? 

  Terraform will destroy all your managed infrastructure, as shown above. 

  There is no undo. Only 'yes' will be accepted to confirm. 

 

  Enter a value: 
Le préfixe - indique que l'instance sera détruite. Comme pour s'appliquer, Terraform montre son plan d'exécution et attend l'approbation avant de faire tout modifications.

Répondre yes pour exécuter ce plan et détruire l'infrastructure.

Code : Tout sélectionner

  Enter a value: yes 

 

aws_instance.app_server: Destroying... [id=i-0fd4a35969bd21710] 

aws_instance.app_server: Still destroying... [id=i-0fd4a35969bd21710, 10s elapsed] 

aws_instance.app_server: Still destroying... [id=i-0fd4a35969bd21710, 20s elapsed] 

aws_instance.app_server: Still destroying... [id=i-0fd4a35969bd21710, 30s elapsed] 

aws_instance.app_server: Destruction complete after 31s 

 

Destroy complete! Resources: 1 destroyed. 
Comme avec apply, Terraform détermine l'ordre pour détruire vos ressources. Dans ce cas, Terraform a identifié une seule instance sans autre dépendance, donc il a détruit l'instance. Dans les cas plus complexes, avec les multiples ressources, Terraform les détruira dans un ordre approprié pour respecter les dépendances.