## 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 = {