Verwendung von Terraform mit DigitalOcean

Einführung

Terraform ist ein Tool zum organisierten Aufbau und Management der Infrastruktur. Es kann verwendet werden, um DigitalOcean-Tröpfchen und DNS-Einträge zu verwalten, zusätzlich zu einer Vielzahl von Diensten, die von anderen Anbietern angeboten werden. Es wird über eine benutzerfreundliche Befehlszeilenschnittstelle gesteuert und kann von Ihrem Desktop oder einem Remote-Server ausgeführt werden.

Terraform liest Konfigurationsdateien, in denen die Komponenten beschrieben werden, aus denen sich Ihre Anwendungsumgebung oder Ihr Rechenzentrum zusammensetzt. Basierend auf der Konfiguration wird ein Ausführungsplan erstellt, der beschreibt, wie der gewünschte Status erreicht wird. Der Plan wird dann ausgeführt, um die Infrastruktur aufzubauen. Wenn Änderungen an der Konfiguration vorgenommen werden, kann Terraform inkrementelle Pläne generieren und ausführen, um die vorhandene Infrastruktur in den neu beschriebenen Zustand zu versetzen.

In diesem Tutorial zeigen wir Ihnen, wie Sie mit Terraform eine einfache Infrastruktur erstellen, die aus zwei Nginx-Servern besteht, die von einem HAProxy-Server lastverteilt werden (siehe Abbildung unten). Dies soll Ihnen den Einstieg in Terraform erleichtern und Ihnen eine Vorstellung davon geben, wie Sie eine auf DigitalOcean basierende Infrastruktur verwalten und bereitstellen können, die Ihren eigenen Anforderungen entspricht.

Werfen wir einen Blick auf das, was Sie benötigen, um diesem Tutorial zu folgen.

Voraussetzungen

DigitalOcean-Konto

Da sich dieses Tutorial auf die Verwendung des DigitalOcean-Anbieters von Terraform konzentriert, benötigen Sie ein gültiges DigitalOcean-Konto. Wenn Sie noch keinen haben, register here.

DigitalOcean-API-Token

Generieren Sie ein persönliches Zugriffstoken über das DigitalOcean-Bedienfeld. Anweisungen dazu finden Sie unter folgendem Link: How to Generate aPersonalAccessToken.

Exportieren Sie in jedem Terminal, in dem Sie Terraform ausführen, Ihr DigitalOcean Personal Access Token:

export DO_PAT=

Terraform verwendet dieses Token, um sich bei der DigitalOcean-API zu authentifizieren und Ihr Konto zu steuern. Halte das privat!

Fügen Sie der DigitalOcean Cloud einen SSH-Schlüssel ohne Kennwort hinzu

Wenn Sie Ihrem DigitalOcean-Konto noch keinen SSH-Schlüssel ohne Kennwort hinzugefügt haben, folgen Sie dazu https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets [dieses Tutorial].

Angenommen, Ihr privater Schlüssel befindet sich unter "+ ~ / .ssh / id_rsa +". Verwenden Sie den folgenden Befehl, um den MD5-Fingerabdruck Ihres öffentlichen Schlüssels abzurufen:

ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub | awk '{print $2}'

Dadurch wird etwa Folgendes ausgegeben:

md5:

Sie müssen diesen Fingerabdruck abzüglich des Präfixes "+ md5: +" angeben, wenn Sie Terraform wie folgt ausführen (wobei Sie alle hervorgehobenen Wörter durch die entsprechenden Werte ersetzen):

terraform plan \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Nachdem die Voraussetzungen nicht mehr gegeben sind, installieren wir Terraform!

Installieren Sie Terraform

  • Hinweis: * Dieses Tutorial wurde mit Terraform 0.1.1 geschrieben.

Terraform ist sehr einfach zu installieren und kann auf Ihrem Desktop oder einem Remote-Server ausgeführt werden. Hier sind die Schritte:

[[1-download-terraform]] ===== 1. Laden Sie Terraform herunter

Laden Sie das entsprechende Paket für Ihr Betriebssystem und Ihre Architektur herunter: Download Terraform

[[2-extract-terraform]] ===== 2. Terraform extrahieren

Extrahieren Sie das soeben heruntergeladene Paket in ein Verzeichnis Ihrer Wahl.

Wenn Sie es nach + ~ / Downloads + heruntergeladen haben, können Sie die folgenden Befehle ausführen, um es zu extrahieren:

mkdir -p
unzip ~/Downloads/terraform_0.1.1_darwin_amd64.zip -d

Dadurch wird das Paket in das Verzeichnis "+ opt / terraform / +" in Ihrem Ausgangsverzeichnis entarchiviert.

[[3-add-path-to-profile]] ===== 3. Pfad zum Profil hinzufügen

Der letzte Schritt ist das Hinzufügen des bin-Verzeichnisses von Terraform, + ~ / opt / terraform / bin +, zu Ihrer PATH-Umgebungsvariablen für den einfachen Zugriff.

Wenn Sie beispielsweise bash als Shell verwenden, können Sie den Pfad zu Ihrem + .bash_profile + hinzufügen. Öffnen Sie Ihr Profil zur Bearbeitung:

vi ~/.bash_profile

Fügen Sie am Ende der Datei die folgende Zeile hinzu, um den Pfad von Terraform an Ihren PATH anzuhängen:

export PATH=$PATH:

Speichern und schließen.

Jetzt können alle Ihre neuen Bash-Sessions den Befehl + terraform + finden. Wenn Sie den neuen Pfad in Ihre aktuelle Sitzung laden möchten, geben Sie Folgendes ein:

. .bash_profile

Überprüfen Sie die Terraform-Installation

Um zu überprüfen, ob Sie Terraform korrekt installiert haben, führen Sie es aus. Führen Sie in einem Terminal Terraform aus:

terraform

Wenn Ihr Pfad ordnungsgemäß eingerichtet ist, wird eine Ausgabe angezeigt, die der folgenden ähnelt:

Available commands are:
   apply      Builds or changes infrastructure
   graph      Create a visual graph of Terraform resources
   output     Read an output from a state file
   plan       Generate and show an execution plan
   refresh    Update local state file against real resources
   show       Inspect Terraform state or plan
   version    Prints the Terraform version

Dies sind die Befehle, die Terraform akzeptiert. Ihr Brief wird hier beschrieben, aber wir werden später erfahren, wie man sie benutzt.

Nachdem Terraform installiert ist, schreiben wir eine Konfiguration, um unsere Infrastruktur zu beschreiben.

Konfigurationsverzeichnis erstellen

Der erste Schritt zum Aufbau einer Infrastruktur mit Terraform besteht darin, ein Verzeichnis zu erstellen, in dem unsere Konfigurationsdateien für ein bestimmtes Projekt gespeichert werden. Der Name des Verzeichnisses spielt keine Rolle, aber wir werden "loadbalance" für das Beispiel verwenden (Sie können den Namen jederzeit ändern):

mkdir

Terraform-Konfigurationen sind Textdateien, die mit der Dateierweiterung "+ .tf +" enden. Sie sind für Menschen lesbar und unterstützen Kommentare. Terraform unterstützt auch Konfigurationsdateien im JSON-Format, die hier jedoch nicht behandelt werden. Terraform liest alle Konfigurationsdateien in Ihrem Arbeitsverzeichnis deklarativ, sodass die Reihenfolge der Ressourcen- und Variablendefinitionen keine Rolle spielt. Ihre gesamte Infrastruktur kann in einer einzigen Konfigurationsdatei vorhanden sein. In diesem Lernprogramm werden unsere Konfigurationsdateien jedoch nach Ressourcen getrennt.

Ändern Sie Ihr aktuelles Verzeichnis in das neu erstellte Verzeichnis:

cd

Von nun an gehen wir davon aus, dass es sich bei Ihrem Arbeitsverzeichnis um das handelt, in das wir gerade gewechselt haben. Wenn Sie eine neue Terminalsitzung starten, müssen Sie in das Verzeichnis wechseln, das Ihre Terraform-Konfiguration enthält.

Falls du stecken bleibst

Wenn Sie nicht weiterkommen und Terraform nicht wie erwartet funktioniert, können Sie zunächst die Datei + terraform.tfstate + löschen und die erstellten Ressourcen manuell löschen (z. B. über das Control Panel oder ein anderes API-Tool wie Tugboat).

Möglicherweise möchten Sie auch die Protokollierung auf stdout aktivieren, damit Sie sehen können, was Terraform versucht. Führen Sie dazu den folgenden Befehl aus:

export TF_LOG=1

Wenn Sie keine funktionierende Konfiguration erstellen können, finden Sie die vollständigen Konfigurationsdateien in folgendem GitHub-Gist: Configuration Files.

Fahren wir mit der Erstellung einer Terraform-Konfiguration fort.

Anbieterkonfiguration erstellen

Terraform unterstützt eine Vielzahl von Dienstleistern durch die mitgelieferten „Provider“. Wir sind an einem DigitalOcean-Anbieter interessiert, mit dem Terraform mit der DigitalOcean-API interagieren wird, um unsere Infrastruktur aufzubauen. Der erste Schritt zur Verwendung des DigitalOcean-Anbieters besteht darin, ihn mit den richtigen Anmeldeinformationsvariablen zu konfigurieren. Machen wir das jetzt.

Erstellen Sie eine Datei mit dem Namen "+ provider.tf +":

vi provider.tf

Fügen Sie der Datei die folgenden Zeilen hinzu:

variable "do_token" {}
variable "pub_key" {}
variable "pvt_key" {}
variable "ssh_fingerprint" {}

provider "digitalocean" {
 token = "${var.do_token}"
}

Speichern und schließen. Hier ist eine Aufschlüsselung der ersten vier Zeilen:

  • * Variable "do_token" *: Ihr DigitalOcean Personal Access Token

  • * Variable "pub_key" *: Position des öffentlichen Schlüssels, damit er in neuen Droplets installiert werden kann

  • * Variable "pvt_key" *: Speicherort des privaten Schlüssels, damit Terraform eine Verbindung zu neuen Tröpfchen herstellen kann

  • * Variable "ssh_fingerprint" *: Fingerabdruck des SSH-Schlüssels

In den folgenden Zeilen werden die Anmeldeinformationen für Ihr DigitalOcean-Konto angegeben, indem der Variablen do_token ein "Token" zugewiesen wird. Wir werden die Werte dieser Variablen in Terraform übergeben, wenn wir es ausführen.

Die offizielle Terraform-Dokumentation des DigitalOcean-Anbieters finden Sie hier: DigitalOcean Provider.

DigitalOcean Resources

Jeder Anbieter hat seine eigenen Spezifikationen, die im Allgemeinen der API seines jeweiligen Dienstanbieters zugeordnet sind. Beim DigitalOcean-Anbieter können drei Arten von Ressourcen definiert werden:

  • * digitalocean_domain *: DNS-Domäneneinträge

  • * digitalocean_droplet *: Tröpfchen (d. h. VPS oder Server)

  • * digitalocean_record *: DNS-Einträge

Beginnen wir mit der Erstellung eines Droplets, in dem ein Nginx-Server ausgeführt wird.

Beschreiben des ersten Nginx-Servers

Erstellen Sie eine neue Terraform-Konfigurationsdatei mit dem Namen "+ www-1.tf +":

vi www-1.tf

Fügen Sie die folgenden Zeilen ein, um die Droplet-Ressource zu definieren:

resource "digitalocean_droplet" "www-1" {
   image = "ubuntu-14-04-x64"
   name = "www-1"
   region = "nyc2"
   size = "512mb"
   private_networking = true
   ssh_keys = [
     "${var.ssh_fingerprint}"
   ]

In der obigen Konfiguration definiert die erste Zeile eine digitalocean_droplet-Ressource mit dem Namen "www-1". Die restlichen Zeilen geben die Attribute des Droplets an, auf die über die DigitalOcean-API zugegriffen werden kann. Alles andere ist ziemlich selbsterklärend, daher werden wir nicht jede Zeile erklären. Außerdem sammelt Terraform eine Vielzahl von Informationen über das Droplet, z. B. seine öffentlichen und privaten IP-Adressen, die von anderen Ressourcen in Ihrer Konfiguration verwendet werden können.

Wenn Sie sich fragen, welche Argumente für eine Droplet-Ressource erforderlich oder optional sind, lesen Sie bitte die offizielle Terraform-Dokumentation: DigitalOcean Droplet Specification.

Nun richten wir eine "+ Verbindung +" ein, mit der Terraform über SSH eine Verbindung zum Server herstellen kann. Fügen Sie am Ende der Datei die folgenden Zeilen ein:

 connection {
     user = "root"
     type = "ssh"
     private_key = "${file(var.pvt_key)}"
     timeout = "2m"
 }

Diese Zeilen beschreiben, wie Terraform eine Verbindung zum Server herstellen soll, falls etwas über SSH bereitgestellt werden soll (beachten Sie die Verwendung der privaten Schlüsselvariablen).

Nachdem wir die Verbindung eingerichtet haben, können wir den "remote-exec" -Provisioner konfigurieren. Wir werden das Remote-Exec-Provisioner verwenden, um Nginx zu installieren. Fügen Sie dazu der Konfiguration die folgenden Zeilen hinzu:

 provisioner "remote-exec" {
   inline = [
     "export PATH=$PATH:/usr/bin",
     # install nginx
     "sudo apt-get update",
     "sudo apt-get -y install nginx"
   ]
 }
}

Speichern und schließen.

Beachten Sie, dass die Zeichenfolgen im inline-Array die Befehle sind, die der root zur Installation von Nginx ausführt.

Führen Sie Terraform aus, um Nginx Server zu erstellen

Derzeit beschreibt Ihre Terraform-Konfiguration einen einzelnen Nginx-Server. Probieren wir es aus.

Initialisieren Sie zuerst Terraform für Ihr Projekt. Dies liest Ihre Konfigurationsdateien und installiert die Plugins für Ihren Provider:

terraform init

Sie sehen diese Ausgabe:

OutputInitializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...                                                           - Downloading plugin for provider "digitalocean" (0.1.2)...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.digitalocean: version = "~> 0.1"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other                                                          commands will detect it and remind you to do so if necessary.

Führen Sie als nächstes den folgenden Befehl + terraform plan + aus, um zu sehen, was Terraform versucht, um die von Ihnen beschriebene Infrastruktur aufzubauen (d. H. siehe Ausführungsplan). Sie müssen die Werte aller unten aufgeführten Variablen angeben:

terraform plan \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Wenn alle Variablen korrekt eingestellt sind, sollten mehrere Ausgabezeilen angezeigt werden, einschließlich der folgenden Zeilen:

Refreshing Terraform state prior to plan...
...
+ digitalocean_droplet.www-1
...

Die grüne Zeile "+ digitalocean_droplet.www-1 +" bedeutet, dass Terraform eine neue Droplet-Ressource mit dem Namen "www-1" und den darauf folgenden Details erstellt. Genau das wollen wir, also führen wir den Plan aus. Führen Sie den folgenden Befehl ` terraform apply +` aus, um den aktuellen Plan auszuführen. Geben Sie auch hier alle Werte für die folgenden Variablen an:

terraform apply \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Sie sollten eine Ausgabe sehen, die die folgenden Zeilen enthält (der Kürze halber abgeschnitten):

digitalocean_droplet.www-1: Creating...
...

digitalocean_droplet.www-1: Provisioning with 'remote-exec'...
digitalocean_droplet.www-1: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
...

Zu diesem Zeitpunkt hat Terraform ein neues Droplet mit dem Namen "+ www-1 +" erstellt und Nginx darauf installiert. Wenn Sie die öffentliche IP-Adresse Ihres neuen Droplets aufrufen, wird der Begrüßungsbildschirm von Nginx angezeigt.

Beschreiben des zweiten Nginx-Servers

Nachdem Sie einen Nginx-Server beschrieben haben, ist es sehr einfach, einen zweiten hinzuzufügen. Kopieren Sie einfach die ursprüngliche Konfigurationsdatei und ersetzen Sie den Namen (und den Hostnamen) der Droplet-Ressource.

Sie können dies manuell tun oder + sed + verwenden, um alle Instanzen von + www-1 + durch + www-2 + (es gibt zwei) zu ersetzen und eine neue Datei zu erstellen. Hier ist der Befehl "+ sed +", um dies zu tun:

sed 's/www-1/www-2/g' www-1.tf > www-2.tf

Wenn Sie nun + terraform plan + oder + terraform apply + erneut ausführen, wird der neue Plan angezeigt bzw. ausgeführt. Da wir bereits wissen, dass Terraform nur ein weiteres Nginx-Tröpfchen erstellt, speichern wir das einfach für später.

Lassen Sie uns jetzt unser HAProxy-Droplet konfigurieren.

Beschreiben von HAProxy Server

Erstellen Sie eine neue Terraform-Konfigurationsdatei mit dem Namen "+ haproxy-www.tf +":

vi haproxy-www.tf

Fügen Sie die folgenden Zeilen ein, um das neue Tröpfchen zu beschreiben. Der erste Teil ist identisch mit den Beschreibungen der Nginx-Tröpfchen, mit der Ausnahme, dass er einen anderen Namen hat: "haproxy-www".

resource "digitalocean_droplet" "haproxy-www" {
   image = "ubuntu-16-04-x64"
   name = "haproxy-www"
   region = "nyc2"
   size = "512mb"
   private_networking = true
   ssh_keys = [
     "${var.ssh_fingerprint}"
   ]

Fügen Sie die folgenden Verbindungsinformationen ein (ebenfalls identisch mit den Nginx-Tröpfchen):

 connection {
     user = "root"
     type = "ssh"
     private_key = "${file(var.pvt_key)}"
     timeout = "2m"
 }

Nachdem wir die Verbindung eingerichtet haben, können wir den "remote-exec" -Provisioner konfigurieren. Wir werden den Remote-Exec-Provisioner verwenden, um HAProxy zu installieren und zu konfigurieren. Fügen Sie dazu der Konfiguration die folgenden Zeilen hinzu:

 provisioner "remote-exec" {
   inline = [
     "export PATH=$PATH:/usr/bin",
     # install haproxy 1.5
     "sudo add-apt-repository -y ppa:vbernat/haproxy-1.5",
     "sudo apt-get update",
     "sudo apt-get -y install haproxy",

     # download haproxy conf
     "sudo wget https://gist.githubusercontent.com/thisismitch/91815a582c27bd8aa44d/raw/8fc59b7cb88a2be9b802cd76288ca1c2ea957dd9/haproxy.cfg -O /etc/haproxy/haproxy.cfg",

     # replace ip address variables in haproxy conf to use droplet ip addresses
     "sudo sed -i 's/HAPROXY_PUBLIC_IP//g' /etc/haproxy/haproxy.cfg",
     "sudo sed -i 's/WWW_1_PRIVATE_IP//g' /etc/haproxy/haproxy.cfg",
     "sudo sed -i 's/WWW_2_PRIVATE_IP//g' /etc/haproxy/haproxy.cfg",

     # restart haproxy to load changes
     "sudo service haproxy restart"
   ]
 }
}

Speichern und schließen.

Auch hier sind die Zeichenfolgen im inline-Array Befehle, die root ausführt, um HAProxy zu installieren und zu konfigurieren. Nach der Installation von HAProxy wird eine sample haproxy.cfg file heruntergeladen. Zu diesem Zeitpunkt ersetzt der Befehl + sed + bestimmte Zeichenfolgen in der HAProxy-Konfigurationsdatei durch die entsprechenden IP-Adressen der einzelnen Tröpfchen, indem Terraform-Variablen verwendet werden (oben rot hervorgehoben), sodass HAProxy sofort zur Ausführung bereit ist es wird bereitgestellt. Zuletzt wird HAProxy neu gestartet, um die Konfigurationsänderungen zu laden.

In einem praktischeren Fall verfügen Sie möglicherweise über eine eigene haproxy.cfg-Datei auf Ihrem Terraform-System, die Sie mit dem Provisioner "file" auf Ihren Server kopieren können.

Unser HAProxy-Server wird nun beschrieben, aber wir müssen Terraform ausführen, um ihn zu erstellen.

Führen Sie Terraform aus, um HAProxy Server zu erstellen

Derzeit werden in Ihrer Terraform-Konfiguration zwei Nginx-Server und ein HAProxy-Server beschrieben. Lasst uns

Führen Sie den Befehl + terraform plan + erneut aus, um den neuen Ausführungsplan anzuzeigen:

terraform plan \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Sie sollten mehrere Ausgabezeilen sehen, einschließlich der folgenden Zeilen:

...
digitalocean_droplet.www-1: Refreshing state... (ID: 2236747)
...
+ digitalocean_droplet.haproxy-www
...
+ digitalocean_droplet.www-2
...

Dies bedeutet, dass das www-1-Tröpfchen bereits vorhanden ist und Terraform die haproxy-www- und www-2-Tröpfchen erstellt. Führen Sie "+ terraform apply +" aus, um die restlichen Komponenten zu erstellen:

terraform apply \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Sie sollten eine Ausgabe sehen, die die folgenden Zeilen enthält (der Kürze halber abgeschnitten):

digitalocean_droplet.www-2: Creating...
...
digitalocean_droplet.www-2: Provisioning with 'remote-exec'...
digitalocean_droplet.www-2: Creation complete
...
digitalocean_droplet.haproxy-www: Creating...
...
digitalocean_droplet.haproxy-www: Provisioning with 'remote-exec'...
digitalocean_droplet.haproxy-www: Creation complete
...
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
...

Zu diesem Zeitpunkt hat Terraform einen neuen Nginx-Server und einen neuen HAProxy-Server erstellt. Wenn Sie die öffentliche IP-Adresse von haproxy-www aufrufen, sollte ein Nginx-Begrüßungsbildschirm angezeigt werden (da HAProxy den Lastenausgleich für die beiden Nginx-Server vornimmt).

  • Ihre Einrichtung ist abgeschlossen! * Der Rest des Tutorials enthält Informationen zum Konfigurieren von DNS-Domänen und zum Aufzeichnen von Ressourcen mit Terraform sowie Informationen zur Verwendung der anderen Terraform-Befehle.

Erstellen von DNS-Domänen und -Datensätzen

Wie bereits erwähnt, kann Terraform auch DNS-Domänen erstellen und Domänen aufzeichnen. Wenn Sie beispielsweise Ihre Domain "+ example.com +" auf Ihren neu erstellten HAProxy-Server verweisen möchten, können Sie dafür eine Terraform-Konfiguration erstellen. * Hinweis: * Verwenden Sie Ihren eigenen, eindeutigen Domain-Namen. Andernfalls schlägt dieser Schritt fehl (d. H. Verwenden Sie nicht "example.com" oder andere Einträge, die bereits im DigitalOcean-DNS vorhanden sind.

Erstellen Sie eine neue Datei, um Ihr DNS zu beschreiben:

vi

Fügen Sie die folgende Domain-Ressource ein:

# Create a new domain record
resource "digitalocean_domain" "default" {
  name = ""
  ip_address = "${digitalocean_droplet.haproxy-www.ipv4_address}"
}

Und während wir gerade dabei sind, fügen wir einen CNAME-Eintrag hinzu, der auf ".example.com" bis "example.com" verweist:

resource "digitalocean_record" "CNAME-www" {
 domain = "${digitalocean_domain.default.name}"
 type = "CNAME"
 name = "www"
 value = "@"
}

Speichern und schließen.

Um die DNS-Einträge hinzuzufügen, führen Sie "+ terraform plan " gefolgt von " terraform apply +" wie bei den anderen Ressourcen aus.

Andere Terraform-Befehle

Terraform verfügt über mehrere andere Befehle, die zuvor noch nicht behandelt wurden. Daher werden wir die meisten hier behandeln.

Status anzeigen

Terraform aktualisiert die Statusdatei jedes Mal, wenn ein Plan ausgeführt oder der Status aktualisiert wird. Beachten Sie, dass Ihre Statusdatei veraltet ist, wenn Sie Ihre Infrastruktur außerhalb von Terraform ändern.

Verwenden Sie den folgenden Befehl, um den aktuellen Status Ihrer Umgebung anzuzeigen:

terraform show terraform.tfstate

Status aktualisieren

Wenn Ihre Ressourcen außerhalb von Terraform geändert werden, können Sie die Statusdatei aktualisieren, um sie auf den neuesten Stand zu bringen. Dieser Befehl ruft die aktualisierten Ressourceninformationen von Ihren Providern ab:

terraform refresh \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Infrastruktur zerstören

Obwohl Terraform in Produktionsumgebungen nicht häufig verwendet wird, kann es auch die von ihm erstellten Infrastrukturen zerstören. Dies ist hauptsächlich in Entwicklungsumgebungen nützlich, die mehrmals erstellt und zerstört wurden. Es ist ein zweistufiger Prozess und wird im Folgenden beschrieben.

[[1-create-an-execution-plan-to-destroy-the-infrastructure]] ===== 1. Erstellen Sie einen Ausführungsplan, um die Infrastruktur zu zerstören:

terraform plan -destroy -out=terraform.tfplan \
 -var "do_token=${DO_PAT}" \
 -var "pub_key=/.ssh/id_rsa.pub" \
 -var "pvt_key=/.ssh/id_rsa" \
 -var "ssh_fingerprint="

Terraform gibt einen Plan mit rot markierten Ressourcen und einem vorangestellten Minuszeichen aus, um anzuzeigen, dass die Ressourcen in Ihrer Infrastruktur gelöscht werden.

[[2-apply-destroy]] ===== 2. Zerstören anwenden:

terraform apply terraform.tfplan

Terraform zerstört die Ressourcen, wie im Zerstörungsplan angegeben.

Fazit

Nachdem Sie nun verstanden haben, wie Terraform funktioniert, können Sie Konfigurationsdateien erstellen, die eine für Sie nützliche Serverinfrastruktur beschreiben. Die Beispielkonfiguration ist einfach, zeigt jedoch, wie einfach die Bereitstellung von Servern automatisiert werden kann. Wenn Sie bereits Konfigurationsmanagement-Tools wie Puppet oder Chef verwenden, können Sie diese mit den Provisionern von Terraform anrufen, um Server im Rahmen ihres Erstellungsprozesses zu konfigurieren.

Terraform verfügt über viele weitere Funktionen und kann mit anderen Anbietern zusammenarbeiten. In der offiziellen Terraform-Dokumentation erfahren Sie, wie Sie mit Terraform Ihre eigene Infrastruktur verbessern können.