Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🏗️
DevOps 25 min avance

Infrastructure as Code avec Terraform

Sommaire

## Contexte et enjeux

L'infrastructure comme code (IaC) est une approche moderne de gestion des infrastructures informatiques qui utilise du code source pour définir, configurer et déployer les ressources cloud et on-premises. L'utilisation de Terraform comme outil IaC permet aux équipes DevOps de rendre leurs infrastructures plus dynamiques, répétables et faciles à gérer. Dans un environnement où les applications sont en constante évolution, l'IaC devient essentiel pour garantir la disponibilité, la sécurité et l'évolutivité des systèmes.

L'un des principaux avantages de l'IaC est sa capacité à permettre la mise en œuvre de pratiques d'infrastructure qui sont difficiles ou impossibles avec des méthodes traditionnelles. Par exemple, les ressources peuvent être créées et gérées par le biais du code source, ce qui facilite le suivi des changements, le test et la réplication de l'environnement. De plus, l'IaC permet une meilleure collaboration entre les équipes DevOps et les opérateurs d'infrastructure, en rendant la gestion des infrastructures plus transparente et prévisible.

## Concepts clés

### 1. Infrastructure comme Code (IaC)

L'Infrastructure as Code est un concept de gestion des systèmes qui permet de définir l'état souhaité de l'environnement informatique à travers du code source. Cela peut inclure le déploiement de machines virtuelles, la configuration des serveurs, la mise en place des réseaux et bien plus encore.

### 2. Terraform

Terraform est un outil open-source développé par HashiCorp pour permettre l'infrastructure comme code. Il utilise des fichiers de configuration écrits dans le langage HCL (HashiCorp Configuration Language) pour définir les ressources à déployer et leur état souhaité.

### 3. Provider

Un provider est un composant qui permet à Terraform d'intéragir avec une plateforme cloud spécifique, comme AWS, Azure ou Google Cloud Platform. Chaque provider a ses propres ressources et commandes spécifiques pour gérer les ressources associées.

### 4. State File

Le state file est un fichier JSON qui stocke l'état actuel des ressources déployées par Terraform. Il permet à Terraform de reconnaître les modifications apportées aux ressources et de mettre à jour l'infrastructure en conséquence.

### 5. Variables

Les variables sont utilisées dans le code Terraform pour rendre les fichiers de configuration plus flexibles et réutilisables. Elles peuvent être définies directement dans le fichier de configuration ou passées comme arguments lors de l'exécution de la commande `terraform apply`.

### 6. Outputs

Les outputs permettent d'afficher des informations sur l'état de l'infrastructure une fois que Terraform a terminé son exécution. Elles sont utiles pour récupérer les adresses IP des machines virtuelles, les noms de domaine des serveurs web, etc.

### 7. Modules

Les modules permettent de diviser le code Terraform en petits morceaux réutilisables et modulaires. Ils facilitent la gestion complexe de grands projets IaC et favorisent la collaboration entre les équipes DevOps.

## Guide pratique pas à pas

### 1. Installation de Terraform

Avant de pouvoir utiliser Terraform, il faut d'abord l'installer sur votre système. Vous pouvez télécharger le binaire depuis le site officiel de HashiCorp et suivre les instructions pour l'installer.

```bash
wget https://releases.hashicorp.com/terraform/1.2.7/terraform_1.2.7_linux_amd64.zip
unzip terraform_1.2.7_linux_amd64.zip -d /usr/local/bin/

2. Configuration de votre Provider

Pour utiliser Terraform avec une plateforme cloud spécifique, vous devez configurer le provider approprié dans votre fichier main.tf. Voici un exemple pour AWS :

provider "aws" {
  region = "us-west-2"
}

3. Création d'une Instance EC2

Voici un exemple de code Terraform pour créer une instance EC2 sur AWS :

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

4. Application du code Terraform

Une fois que votre fichier de configuration est prêt, vous pouvez appliquer les modifications en utilisant la commande terraform apply. Terraform va créer ou mettre à jour les ressources pour qu'elles correspondent à l'état défini dans le fichier.

terraform init
terraform apply

5. Gestion des variables

Vous pouvez définir des variables directement dans le fichier de configuration ou passer des valeurs lors de l'exécution de la commande terraform apply. Voici un exemple :

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

Lors de l'exécution de la commande terraform apply, vous pouvez passer une valeur pour cette variable :

terraform apply -var='ami_id=ami-0c55b159cbfafe1f0'

6. Utilisation des outputs

Après avoir appliqué le code Terraform, vous pouvez récupérer des informations sur l'état de l'infrastructure en utilisant les outputs. Voici un exemple :

output "instance_public_ip" {
  value = aws_instance.example.public_ip
}

Vous pouvez afficher cette information en utilisant la commande terraform output :

terraform apply
terraform output instance_public_ip

7. Utilisation des modules

Les modules permettent de diviser le code Terraform en petits morceaux réutilisables et modulaires. Voici un exemple de module pour créer une instance EC2 :

modules/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

main.tf

module "ec2_instance" {
  source = "./modules/ec2"

  ami_id = var.ami_id
}

8. Utilisation des variables et outputs de modules

Vous pouvez utiliser les variables et outputs des modules comme dans n'importe quel fichier Terraform. Voici un exemple :

module "ec2_instance" {
  source = "./modules/ec2"

  ami_id = var.ami_id
}

output "instance_public_ip" {
  value = module.ec2_instance.instance_public_ip
}

9. Utilisation des providers multiples

Vous pouvez utiliser plusieurs providers dans un même fichier Terraform pour gérer différentes plateformes cloud. Voici un exemple :

provider "aws" {
  region = "us-west-2"
}

provider "azure" {
  subscription_id = "your-subscription-id"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

resource "azurerm_virtual_machine" "example" {
  name                  = "myvm"
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

10. Utilisation des outputs de providers multiples

Vous pouvez utiliser les outputs des providers multiples comme dans n'importe quel fichier Terraform. Voici un exemple :

provider "aws" {
  region = "us-west-2"
}

provider "azure" {
  subscription_id = "your-subscription-id"
}

output "aws_instance_public_ip" {
  value = aws_instance.example.public_ip
}

output "azurerm_virtual_machine_public_ip" {
  value = azurerm_public_ip.example.ip_address
}

11. Utilisation des providers multiples avec des variables

Vous pouvez utiliser des variables pour définir les valeurs des providers multiples. Voici un exemple :

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

provider "aws" {
  region = var.aws_region
}

provider "azure" {
  subscription_id = var.azure_subscription_id
}

12. Utilisation des providers multiples avec des outputs

Vous pouvez utiliser les outputs des providers multiples comme dans n'importe quel fichier Terraform. Voici un exemple :

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

provider "aws" {
  region = var.aws_region
}

provider "azure" {
  subscription_id = var.azure_subscription_id
}

output "aws_instance_public_ip" {
  value = aws_instance.example.public_ip
}

output "azurerm_virtual_machine_public_ip" {
  value = azurerm_public_ip.example.ip_address
}

13. Utilisation des providers multiples avec des modules

Vous pouvez utiliser les providers multiples en utilisant des modules. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name
}

14. Utilisation des providers multiples avec des outputs de modules

Vous pouvez utiliser les outputs des providers multiples comme dans n'importe quel fichier Terraform. Voici un exemple :

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

15. Utilisation des providers multiples avec des variables et outputs de modules

Vous pouvez utiliser les variables et outputs des providers multiples comme dans n'importe quel fichier Terraform. Voici un exemple :

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

output "aws_instance_public_ip" {
  value = module.aws_ec2_instance.instance_public_ip
}

output "azurerm_virtual_machine_public_ip" {
  value = module.azure_vm.public_ip
}

16. Utilisation des providers multiples avec des modules et des variables

Vous pouvez utiliser les providers multiples en utilisant des modules et des variables. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

17. Utilisation des providers multiples avec des outputs de modules et des variables

Vous pouvez utiliser les outputs des providers multiples comme dans n'importe quel fichier Terraform. Voici un exemple :

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

output "aws_instance_public_ip" {
  value = module.aws_ec2_instance.instance_public_ip
}

output "azurerm_virtual_machine_public_ip" {
  value = module.azure_vm.public_ip
}

18. Utilisation des providers multiples avec des modules et des variables et des outputs

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

19. Utilisation des providers multiples avec des modules et des variables et des outputs de modules

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

20. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

21. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables et des outputs

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables et des outputs. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

22. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables et des outputs de modules

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables et des outputs de modules. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

23. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables et des outputs de modules et des variables

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables et des outputs de modules et des variables. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

24. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables et des outputs de modules et des variables et des outputs

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables et des outputs de modules et des variables et des outputs. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

25. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables et des outputs de modules et des variables et des outputs de modules

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables et des outputs de modules et des variables et des outputs de modules. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {
    azurerm = azurerm
  }
}

26. Utilisation des providers multiples avec des modules et des variables et des outputs de modules et des variables et des outputs de modules et des variables et des outputs de modules et des variables

Vous pouvez utiliser les providers multiples en utilisant des modules, des variables et des outputs de modules et des variables et des outputs de modules et des variables et des outputs de modules et des variables. Voici un exemple :

modules/aws/ec2/main.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = "t2.micro"

  tags = {
    Name = "MyInstance"
  }
}

modules/aws/ec2/variables.tf

variable "ami_id" {
  description = "AMI ID to use for the instance"
}

variable "instance_type" {
  default     = "t2.micro"
  description = "Type of instance to create"
}

modules/azure/virtual_machine/main.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

resource "azurerm_virtual_machine" "example" {
  name                  = var.vm_name
  resource_group_name   = "myResourceGroup"
  location              = "westus"
  size                  = "Standard_DS1_v2"
  admin_username        = "adminuser"
  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

modules/azure/virtual_machine/variables.tf

variable "vm_name" {
  description = "Name of the virtual machine"
}

variable "size" {
  default     = "Standard_DS1_v2"
  description = "Size of the VM to create"
}

main.tf

variable "aws_region" {
  description = "AWS region to use"
}

variable "azure_subscription_id" {
  description = "Azure subscription ID to use"
}

module "aws_ec2_instance" {
  source = "./modules/aws/ec2"

  ami_id = var.ami_id

  providers = {
    aws = aws
  }
}

module "azure_vm" {
  source = "./modules/azure/virtual_machine"

  vm_name = var.vm_name

  providers = {

Un projet tech a lancer ?

Besoin d'un accompagnement ? Decrivez votre projet pour des recommandations.

Recevoir des conseils

Questions frequentes

Qu'est-ce que Terraform ?
Terraform est un outil d'infrastructure en tant que code qui permet aux équipes DevOps de définir, planifier et mettre en œuvre l'infrastructure logicielle en utilisant des fichiers de configuration déclaratifs.
Comment installer Terraform sur mon système ?
Pour installer Terraform sur votre système, vous pouvez suivre les instructions officielles du site web Terraform. Généralement, cela implique d'utiliser un gestionnaire de paquets comme Homebrew pour macOS ou apt pour Linux.
Quels sont les avantages de l'utilisation d'IaC avec Terraform ?
Les avantages du développement en tant que code avec Terraform incluent une meilleure gestion de la configuration, la possibilité de versionner l'infrastructure et des scripts réutilisables. Cela améliore la productionnalité et facilite le déploiement en continu.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.