DNS verwalten mit Terraform
Erfahren Sie, wie Sie Ihre DNS-Zonen und -Einträge als Infrastructure as Code mit dem DNScale Terraform Provider verwalten.
Die DNS-Verwaltung über Code bringt dieselben Vorteile wie Infrastructure as Code überall sonst: Versionskontrolle, Peer-Review, automatisierte Deployments und reproduzierbare Umgebungen. Der DNScale Terraform Provider ermöglicht die Verwaltung von Zonen, Einträgen und DNSSEC-Konfiguration mit HashiCorp Terraform.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- Terraform installiert (Version 1.0 oder neuer) - Terraform herunterladen
- Ein DNScale-Konto mit einem API-Schlüssel - API-Schlüssel erhalten
- Grundlegende Vertrautheit mit Terraform-Konzepten (Provider, Ressourcen, State)
Provider-Installation
Der DNScale-Provider ist in der Terraform Registry veröffentlicht. Fügen Sie ihn zu Ihrer Terraform-Konfiguration hinzu:
terraform {
required_providers {
dnscale = {
source = "dnscaleou/dnscale"
version = "~> 1.0"
}
}
}
provider "dnscale" {
api_key = var.dnscale_api_key
# Optional: api_url defaults to https://api.dnscale.eu
}Erstellen Sie eine Variablendatei, um Ihren API-Schlüssel sicher zu verwalten:
# variables.tf
variable "dnscale_api_key" {
description = "DNScale API key"
type = string
sensitive = true
}Setzen Sie den API-Schlüssel über eine Umgebungsvariable:
export TF_VAR_dnscale_api_key="your-api-key-here"
terraform initIhre erste Zone erstellen
Eine DNS-Zone repräsentiert eine Domain, die Sie verwalten möchten. Erstellen Sie eine mit der dnscale_zone-Ressource:
resource "dnscale_zone" "example" {
name = "example.com"
region = "eu"
}
output "zone_id" {
value = dnscale_zone.example.id
}
output "nameservers" {
value = dnscale_zone.example.nameservers
}Führen Sie terraform apply aus, um die Zone zu erstellen. Die Ausgabe zeigt Ihnen die zugewiesenen Nameserver — aktualisieren Sie diese bei Ihrem Domain-Registrar, um das DNS-Hosting zu aktivieren.
DNS-Einträge verwalten
A-Einträge
Ihre Domain auf eine IPv4-Adresse verweisen:
resource "dnscale_record" "www" {
zone_id = dnscale_zone.example.id
name = "www"
type = "A"
content = "192.0.2.1"
ttl = 3600
}
# Apex-Domain (Root)
resource "dnscale_record" "apex" {
zone_id = dnscale_zone.example.id
name = ""
type = "A"
content = "192.0.2.1"
ttl = 3600
}AAAA-Einträge
IPv6-Unterstützung hinzufügen:
resource "dnscale_record" "www_ipv6" {
zone_id = dnscale_zone.example.id
name = "www"
type = "AAAA"
content = "2001:db8::1"
ttl = 3600
}CNAME-Einträge
Aliase für Subdomains erstellen:
resource "dnscale_record" "blog" {
zone_id = dnscale_zone.example.id
name = "blog"
type = "CNAME"
content = "example.github.io."
ttl = 3600
}MX-Einträge
E-Mail-Zustellung konfigurieren:
resource "dnscale_record" "mx_primary" {
zone_id = dnscale_zone.example.id
name = ""
type = "MX"
content = "mail.example.com."
ttl = 3600
priority = 10
}
resource "dnscale_record" "mx_backup" {
zone_id = dnscale_zone.example.id
name = ""
type = "MX"
content = "mail2.example.com."
ttl = 3600
priority = 20
}TXT-Einträge
SPF-, DKIM- oder Verifizierungseinträge hinzufügen:
# SPF-Eintrag
resource "dnscale_record" "spf" {
zone_id = dnscale_zone.example.id
name = ""
type = "TXT"
content = "v=spf1 include:_spf.google.com ~all"
ttl = 3600
}
# Domain-Verifizierung
resource "dnscale_record" "verification" {
zone_id = dnscale_zone.example.id
name = ""
type = "TXT"
content = "google-site-verification=abc123..."
ttl = 3600
}DNSSEC aktivieren
Sichern Sie Ihre Zone mit DNSSEC, indem Sie Signierungsschlüssel erstellen:
# Key Signing Key (KSK)
resource "dnscale_dnssec_key" "ksk" {
zone_id = dnscale_zone.example.id
key_type = "ksk"
algorithm = 13
bits = 256
active = true
published = true
}
# Zone Signing Key (ZSK)
resource "dnscale_dnssec_key" "zsk" {
zone_id = dnscale_zone.example.id
key_type = "zsk"
algorithm = 13
bits = 256
active = true
published = true
}Nach dem Anwenden rufen Sie den DS-Eintrag ab, um ihn beim Registrar zu konfigurieren:
output "ds_record" {
value = dnscale_dnssec_key.ksk.ds
}Data Sources verwenden
Bestehende Ressourcen abfragen, ohne sie zu verwalten:
Alle Zonen auflisten
data "dnscale_zones" "all" {}
output "all_zones" {
value = data.dnscale_zones.all.zones
}Einträge in einer Zone auflisten
data "dnscale_records" "all" {
zone_id = dnscale_zone.example.id
}
# Filtern nach bestimmten Einträgen
output "a_records" {
value = [for r in data.dnscale_records.all.records : r if r.type == "A"]
}DNSSEC-Status prüfen
data "dnscale_dnssec_status" "check" {
zone_id = dnscale_zone.example.id
}
output "dnssec_enabled" {
value = data.dnscale_dnssec_status.check.enabled
}Bestehende Ressourcen importieren
Haben Sie bereits Zonen in DNScale konfiguriert? Importieren Sie sie in Terraform:
# Eine Zone importieren
terraform import dnscale_zone.existing <zone-id>
# Einen Eintrag importieren
terraform import dnscale_record.existing <zone-id>/<record-id>
# Einen DNSSEC-Schlüssel importieren
terraform import dnscale_dnssec_key.existing <zone-id>/<key-id>IDs finden Sie im DNScale-Dashboard oder über die API.
Best Practices
Variablen für Wiederverwendbarkeit nutzen
variable "domain" {
description = "Domain name to manage"
type = string
}
variable "web_servers" {
description = "List of web server IPs"
type = list(string)
}
resource "dnscale_zone" "main" {
name = var.domain
region = "eu"
}
resource "dnscale_record" "web" {
count = length(var.web_servers)
zone_id = dnscale_zone.main.id
name = "www"
type = "A"
content = var.web_servers[count.index]
ttl = 300
}Mit Modulen organisieren
Wiederverwendbare Module für gängige Muster erstellen:
# modules/website-dns/main.tf
resource "dnscale_zone" "zone" {
name = var.domain
region = var.region
}
resource "dnscale_record" "apex" {
zone_id = dnscale_zone.zone.id
name = ""
type = "A"
content = var.server_ip
ttl = var.ttl
}
resource "dnscale_record" "www" {
zone_id = dnscale_zone.zone.id
name = "www"
type = "CNAME"
content = "${var.domain}."
ttl = var.ttl
}Workspaces für Umgebungen verwenden
terraform workspace new staging
terraform workspace new production
# Zwischen Umgebungen wechseln
terraform workspace select staging
terraform apply -var-file="staging.tfvars"State remote speichern
Für Team-Zusammenarbeit verwenden Sie Remote State:
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "dns/terraform.tfstate"
region = "eu-west-1"
}
}Vollständiges Beispiel
Hier ist eine vollständige Konfiguration für eine typische Website:
terraform {
required_providers {
dnscale = {
source = "dnscaleou/dnscale"
version = "~> 1.0"
}
}
}
provider "dnscale" {
api_key = var.dnscale_api_key
}
variable "dnscale_api_key" {
type = string
sensitive = true
}
# Zone erstellen
resource "dnscale_zone" "main" {
name = "mywebsite.com"
region = "eu"
}
# Website-Einträge
resource "dnscale_record" "apex" {
zone_id = dnscale_zone.main.id
name = ""
type = "A"
content = "203.0.113.50"
ttl = 3600
}
resource "dnscale_record" "www" {
zone_id = dnscale_zone.main.id
name = "www"
type = "CNAME"
content = "mywebsite.com."
ttl = 3600
}
# E-Mail-Konfiguration
resource "dnscale_record" "mx" {
zone_id = dnscale_zone.main.id
name = ""
type = "MX"
content = "aspmx.l.google.com."
ttl = 3600
priority = 1
}
resource "dnscale_record" "spf" {
zone_id = dnscale_zone.main.id
name = ""
type = "TXT"
content = "v=spf1 include:_spf.google.com ~all"
ttl = 3600
}
# DNSSEC aktivieren
resource "dnscale_dnssec_key" "ksk" {
zone_id = dnscale_zone.main.id
key_type = "ksk"
algorithm = 13
bits = 256
active = true
published = true
}
resource "dnscale_dnssec_key" "zsk" {
zone_id = dnscale_zone.main.id
key_type = "zsk"
algorithm = 13
bits = 256
active = true
published = true
}
# Ausgaben
output "nameservers" {
value = dnscale_zone.main.nameservers
}
output "ds_record" {
value = dnscale_dnssec_key.ksk.ds
}Nächste Schritte
- Durchstöbern Sie die Provider-Dokumentation für die vollständige API-Referenz
- Erfahren Sie mehr über die von DNScale unterstützten DNS-Eintragstypen
- Verstehen Sie DNS-Zonen und wie sie funktionieren
- Erkunden Sie Zonen-Import-Methoden für die Migration vorhandener DNS-Konfigurationen
Fazit
Der DNScale Terraform Provider bringt Infrastructure-as-Code-Prinzipien in die DNS-Verwaltung. Versionieren Sie Ihre DNS-Änderungen, automatisieren Sie Deployments über Umgebungen hinweg und pflegen Sie Konsistenz in Ihrer Infrastruktur. Ob Sie eine einzelne Domain oder Hunderte verwalten — Terraform bietet die Werkzeuge, um es zuverlässig und skalierbar zu tun.