Introduction
Cloud DNS de Google Cloud Platform permet de gérer des zones DNS publiques et privées de manière scalable. Dans ce tutoriel, vous apprendrez à automatiser entièrement la création de zones et d'enregistrements via Terraform. L'approche Infrastructure as Code garantit la reproductibilité et réduit les erreurs manuelles. Nous partirons d'une configuration basique pour arriver à un setup production-ready incluant des politiques de routage. Ce guide s'adresse aux développeurs et ingénieurs DevOps ayant déjà une expérience avec GCP et Terraform.
Prérequis
- Compte Google Cloud avec facturation activée
- Terraform 1.7+ installé
- gcloud CLI configuré et authentifié
- Connaissances de base en DNS et Terraform
Initialisation du projet Terraform
mkdir cloud-dns-terraform && cd cloud-dns-terraform
terraform initNous créons un dossier dédié et initialisons Terraform pour télécharger les providers nécessaires.
Configuration du provider GCP
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 5.0"
}
}
}
provider "google" {
project = var.project_id
region = "europe-west1"
}Le provider Google est configuré avec la variable project_id. Toujours verrouiller la version du provider pour éviter les breaking changes.
Création de la zone DNS
resource "google_dns_managed_zone" "primary" {
name = "learni-zone"
dns_name = "learni.dev."
description = "Zone DNS principale pour learni.dev"
labels = {
environment = "production"
managed_by = "terraform"
}
}Cette ressource crée une zone DNS publique. Le nom dns_name doit se terminer par un point. Les labels facilitent le filtrage dans la console GCP.
Ajout d'enregistrements A et CNAME
resource "google_dns_record_set" "www" {
managed_zone = google_dns_managed_zone.primary.name
name = "www.learni.dev."
type = "A"
ttl = 300
rrdatas = ["34.120.12.45"]
}
resource "google_dns_record_set" "app" {
managed_zone = google_dns_managed_zone.primary.name
name = "app.learni.dev."
type = "CNAME"
ttl = 300
rrdatas = ["www.learni.dev."]
}Chaque enregistrement est géré indépendamment. Utilisez toujours le format FQDN avec le point final pour éviter les erreurs de résolution.
Variables et outputs
variable "project_id" {
description = "ID du projet GCP"
type = string
}
output "name_servers" {
value = google_dns_managed_zone.primary.name_servers
description = "Serveurs de noms à configurer chez le registrar"
}Les outputs permettent de récupérer facilement les name servers à déléguer chez votre registrar DNS.
Bonnes pratiques
- Toujours versionner les configurations Terraform dans Git
- Utiliser des workspaces pour séparer les environnements
- Activer les logs d'audit DNS sur GCP
- Définir des TTL raisonnables (300s en dev, 3600s en prod)
- Ajouter des labels systématiquement pour le tagging des ressources
Erreurs courantes à éviter
- Oublier le point final dans les noms DNS (erreur de résolution)
- Ne pas déléguer les name servers chez le registrar
- Utiliser des TTL trop bas en production (coûts élevés)
- Modifier manuellement les enregistrements dans la console GCP
Pour aller plus loin
Découvrez nos formations avancées sur l'infrastructure cloud pour approfondir Terraform et Google Cloud DNS.