Fondamentaux OpenTofu¶
Providers, resources, data sources, variables et outputs : les briques de base de l'IaC.
Qu'est-ce qu'OpenTofu¶
OpenTofu est un fork open source de Terraform, maintenu par la Linux Foundation. Il utilise le langage HCL pour décrire l'infrastructure de manière declarative. OpenTofu est compatible avec les providers et modules Terraform existants.
Workflow¶
tofu init # Telecharger les providers et initialiser le backend
tofu plan # Previsualiser les changements
tofu apply # Appliquer les changements
tofu destroy # Supprimer toutes les ressources
Providers¶
Les providers sont des plugins qui permettent à OpenTofu d'interagir avec les APIs des services cloud et outils.
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 5.0"
}
}
}
provider "google" {
project = var.project_id
region = "europe-west1"
}
Bloc terraform
OpenTofu utilise le bloc terraform (pas opentofu) pour la compatibilité avec l'écosystème Terraform existant.
Resources¶
Une resource représenté un objet d'infrastructure a créer et gérer.
resource "google_compute_instance" "webserver" {
name = "webserver-01"
machine_type = "e2-medium"
zone = "europe-west1-b"
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
network_interface {
network = "default"
access_config {} # IP publique
}
tags = ["http-server"]
}
Data sources¶
Les data sources permettent de lire des informations existantes sans les gérer.
data "google_compute_image" "debian" {
family = "debian-12"
project = "debian-cloud"
}
resource "google_compute_instance" "webserver" {
# ...
boot_disk {
initialize_params {
image = data.google_compute_image.debian.self_link
}
}
}
Variables¶
# variables.tf
variable "project_id" {
type = string
description = "ID du projet GCP"
}
variable "environment" {
type = string
default = "dev"
validation {
condition = contains(["dev", "staging", "prod"], var.environment)
error_message = "Environment doit etre dev, staging ou prod."
}
}
variable "instance_count" {
type = number
default = 1
}
Fichier de valeurs :
Outputs¶
Les outputs exposent des valeurs après tofu apply.
# outputs.tf
output "instance_ip" {
value = google_compute_instance.webserver.network_interface[0].access_config[0].nat_ip
description = "IP publique du serveur web"
}
output "instance_name" {
value = google_compute_instance.webserver.name
}
Locals¶
Les locals sont des valeurs calculees internes.
locals {
common_tags = {
environment = var.environment
managed_by = "opentofu"
project = var.project_id
}
name_prefix = "${var.project_id}-${var.environment}"
}
Structure de projet recommandee¶
mon-projet/
├── main.tf # Resources principales
├── variables.tf # Declarations de variables
├── outputs.tf # Outputs
├── providers.tf # Configuration des providers
├── terraform.tfvars # Valeurs (gitignore si sensible)
└── versions.tf # Contraintes de version
Installation¶
Pour les autres méthodes, consultez la documentation officielle.