Démarrer avec Terraform Windows et Terraform EC2

Dans l’espace de l’infrastructure en tant que code (IaC), l’un des outils les plus utiles à émerger ces dernières années est Terraform de HashiCorp pour Windows. La possibilité de versionner l’infrastructure, d’automatiser la provision de ressources et d’exécuter sur différents fournisseurs de cloud est énorme pour tout workflow DevOps et d’automatisation.

Un cas d’utilisation pour Terraform est dans les pipelines CI/CD. Terraform vous permet de :

Mes dernières vidéos

  • créer un environnement de test
  • déployer une application
  • exécuter des tests d’intégration
  • détruire l’environnement de test

Toutes les étapes sont effectuées automatiquement. Et aucun centre de données n’est requis !

Prérequis

Cet article est un guide pas à pas pour mettre en place Terraform Windows. Si vous souhaitez suivre, assurez-vous d’avoir les prérequis suivants en place.

  • A Windows 10 device
  • Un compte AWS
  • Le CLI AWS installé et configuré sur cet appareil. Vous pouvez apprendre comment l’installer ici et comment le configurer ici.
  • (Facultatif) Visual Studio Code avec l’extension Terraform

Installation de l’application Terraform pour Windows.

Pour tirer parti de la puissance de Terraform, vous devez d’abord l’installer sur votre système d’exploitation de choix. Dans cet article, je vais me concentrer sur Windows. Mais sachez que Terraform peut fonctionner sur d’autres systèmes d’exploitation. Si vous n’utilisez pas Windows, consultez la documentation d’installation.

La méthode difficile

Si vous ne pouvez pas utiliser un gestionnaire de paquets ou si vous voulez comprendre comment fonctionne le processus d’installation, vous pouvez installer Terraform manuellement. Vous pouvez installer Terraform en téléchargeant le fichier binaire et en l’ajoutant au chemin d’accès système. Si cela vous semble intimidant, je vous assure qu’il existe une méthode plus facile que vous apprendrez dans la prochaine section.

  1. Téléchargez la version appropriée de Terraform depuis la page de téléchargement de HashiCorp. Dans mon cas, il s’agit de la version 64 bits pour Windows.
  2. Créez un dossier sur votre disque C:\ où vous pourrez placer l’exécutable Terraform. Je préfère placer les installateurs dans un sous-dossier (par exemple C:\tools) où vous pourrez mettre les binaires.
  3. Une fois le téléchargement terminé, cherchez-le dans l’Explorateur de fichiers. Extrayez le fichier zip dans le dossier que vous avez créé à l’étape 2.
  4. Ouvrez le menu Démarrer et tapez « environnement », la première chose qui apparaît devrait être l’option Modifier les variables d’environnement système. Cliquez dessus et vous devriez voir cette fenêtre.
System Properties

5. Cliquez sur Variables d’environnement… en bas et vous verrez ceci :

Windows environment variables

6. Sous la section inférieure où il est indiqué Variables système, trouvez celle appelée Path et cliquez sur Modifier. Vous verrez alors une liste des emplacements où trouver les binaires dont Windows pourrait avoir besoin pour une raison quelconque.

7. Cliquez sur Nouveau et ajoutez le chemin du dossier où se trouve terraform.exe en bas de la liste. Ça devrait ressembler à ceci une fois terminé.

Editing the system path

8. Cliquez sur OK sur chacun des menus que vous avez ouverts jusqu’à ce qu’il n’y en ait plus.

9. Pour vous assurer que Windows détecte le nouveau chemin, ouvrez une nouvelle invite de commande PowerShell et saisissez refreshenv.

10. Vérifiez que l’installation a été réussie en entrant terraform --version. S’il renvoie une version, vous êtes prêt à partir.

La méthode facile

Ouf, c’était beaucoup de travail ! Ce serait terrible de devoir le faire à chaque fois que vous devez installer un nouveau logiciel sur votre appareil. Utilisons plutôt un gestionnaire de packages. Il existe quelques gestionnaires de packages que vous pouvez utiliser pour installer Terraform sur Windows. Pour Windows, mon préféré est Chocolatey. Il rend l’installation, la suppression et la mise à jour des logiciels aussi simples qu’une commande d’une seule ligne, et Terraform ne fait pas exception à cela.

Pour installer Terraform avec Chocolatey, suivez les étapes suivantes :

  1. Ouvrez une invite de commande ou une invite PowerShell en tant qu’administrateur et installez Chocolatey à l’aide de la commande de leur page d’installation.
  2. Une fois cela terminé, exécutez choco install terraform. Si vous le souhaitez, vous pouvez également ajouter -y à la fin pour accepter automatiquement l’installation sur votre appareil.

Après l’exécution de cette commande, vous obtiendrez quelque chose comme ceci :

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3. Vérifiez que l’installation s’est déroulée avec succès en saisissant terraform --version.

La méthode Linux

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

Oui, et elle l’est toujours. Mais l’une des fonctionnalités de Windows 10 est le sous-système Windows pour Linux, ou WSL. Cela vous permet d’exécuter des commandes Linux sur Windows.

  1. Installez WSL. Je ne vais pas expliquer ici comment installer et configurer WSL, mais si vous souhaitez suivre et que vous ne l’avez pas déjà configuré. Une vidéo TechSnips que j’ai réalisée sur ce sujet est disponible ci-dessous.

2. Dans votre shell WSL, exécutez la commande apt-get install unzip. Vous en aurez besoin pour extraire les binaires Terraform ultérieurement.

3. Téléchargez Terraform en exécutant la commande wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip. N’oubliez pas de remplacer la version et l’architecture par celle qui correspond le mieux à votre appareil. Vous pouvez trouver la liste complète des versions de Terraform ici.

4. Exécutez unzip terraform_0.12.6_linux_amd64.zip terraform pour décompresser le contenu du fichier zip dans un dossier appelé terraform.

5. Une fois le fichier ZIP décompressé, vous devrez le déplacer quelque part accessible par le chemin système. Heureusement, Linux dispose d’un dossier auquel les utilisateurs peuvent ajouter des binaires par défaut. Déplacez le binaire Terraform là-bas en exécutant mv terraform /usr/local/bin/. Le dossier /usr/local/bin est déjà défini dans votre chemin système.

6. Vérifiez que l’installation a réussi en exécutant terraform --version.

Automatisation d’une instance EC2 Terraform AWS

Maintenant que vous avez installé Terraform, vous pouvez commencer à l’utiliser. Dans cet article, je vais démontrer la construction d’une instance EC2 Terraform AWS simple. Mais sachez que Terraform peut provisionner des centaines de types d’infrastructure différents.

Pour commencer, vous aurez d’abord besoin d’un répertoire pour exécuter les scripts EC2 Terraform à partir. Il est important d’avoir un répertoire séparé pour chaque environnement. Au moment où j’écris ceci, Terraform n’a pas de moyen de filtrer ce qu’il exécute. Il exécutera chaque script dans votre répertoire de travail actuel.

Configuration d’un script TF

  1. Dans votre invite de commande ou console PowerShell exécutée en tant qu’administrateur, exécutez mkdir hello-terraform puis cd ./hello-terraform
  2. Une fois que vous avez un répertoire, vous aurez besoin d’un script Terraform. Voici un exemple que vous pouvez utiliser. Il s’agit d’un script Terraform typique utilisant le fournisseur AWS pour créer une instance AWS ressource.

Si vous souhaitez l’intégralité du script, copiez-le ci-dessous. Si vous voulez comprendre ce que fait ce script, continuez à lire en dessous.

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3.   Enregistrez le script ci-dessus sous le nom de main.tf dans votre répertoire de travail.

Comprendre les scripts TF

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

Avant de continuer, regardez le bloc ci-dessous et ce qu’il déclare.

#Terraform HCL

Ce bloc indique à Terraform EC2 quel fournisseur utiliser. Il existe des fournisseurs pour tous les principaux fournisseurs de cloud, ainsi que pour certains fournisseurs sur site. Si vous êtes plus avancé et que vous savez comment écrire du Golang, vous pouvez également écrire votre propre fournisseur.

Ce bloc indique à Terraform d’utiliser le fournisseur AWS et les clés d’accès dans le fichier ~/.aws/credentials sous le nom de profil default. Ce fichier est créé lorsque vous configurez l’AWS CLI avec la commande aws config comme indiqué dans les prérequis.

Il est également intéressant de noter que ~/ est une abréviation pour le répertoire de l’utilisateur actuel. Si vous venez d’un environnement Windows, cela équivaut à $env:USERPROFILE ou %USERPROFILE%. Mais Terraform ne prend pas en charge cette notation au moment de la rédaction.

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

Le bloc suivant décrit une instance EC2 Terraform et comment la construire. Si vous regardez la documentation Terraform pour aws_instance, vous verrez que certains paramètres sont obligatoires et d’autres sont facultatifs. Dans ce cas, les paramètres obligatoires sont l’ID de l’AMI (ami-07d0cf3af28718ef8) pour Ubuntu 18.04 LTS et t2.micro pour le type d’instance.

En passant un bloc de balises avec la clé Name et la valeur HelloTerraform, cette balise sera également attribuée à l’instance créée. C’est facultatif.

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  Construction de l'instance AWS Terraform EC2 : Test
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

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

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Maintenant que le script est configuré, appelez-le en exécutant terraform init depuis votre répertoire de travail. Cela téléchargera toutes les dépendances et le fournisseur dans un dossier nommé .terraform. Si tout se passe bien, vous devriez obtenir quelque chose comme ceci :

Avant d’apporter des modifications, Terraform EC2 vous permet de voir ce qui sera créé en exécutant terraform plan. Voici ce que cela affichera :

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# aws_instance.ubuntu sera créé

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Construction de l’instance AWS EC2 : Création

Maintenant, vous êtes prêt à l’exécuter vous-même en exécutant terraform apply. Vous verrez ci-dessous une sortie similaire à terraform plan, mais avec une invitation supplémentaire pour confirmer que vous souhaitez réellement appliquer ces modifications.

Une fois que vous avez saisi « oui », Terraform EC2 commencera à provisionner l’instance Terraform EC2 en appelant les APIs AWS avec la clé d’accès de votre fichier de credentials. Cela peut prendre un certain temps. Une fois terminé, vous verrez quelque chose comme ci-dessous :

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: 

Destruction de l’instance AWS EC2

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

Une fois que vous avez terminé avec l’environnement de test, vous pouvez détruire l’instance.

Dans votre console cmd/PowerShell, tapez terraform destroy. Comme la commande apply, vous verrez une liste des ressources que Terraform va détruire, puis une invite avant de les détruire réellement.

Une fois que vous avez saisi oui, Terraform EC2 commencera à détruire l’instance et confirmera quand elle sera terminée.

Source:
https://adamtheautomator.com/terraform-windows/