Neu: PostScale -- E-Mail-API für transaktionale, eingehende und maskierte Adressen. PostScale

    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:

    1. Terraform installiert (Version 1.0 oder neuer) - Terraform herunterladen
    2. Ein DNScale-Konto mit einem API-Schlüssel - API-Schlüssel erhalten
    3. 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 init

    Ihre 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

    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.