Eine Einführung in Terraform für Anfänger – Terraform-Tutorial

Was genau ist Terraform? Lass es uns herausfinden.

„Infrastructure as Code“ (IaC), also Infrastruktur als Code, ist ein Begriff, der in der DevOps-Welt weit verbreitet ist. Es bezeichnet den Prozess, die gesamte IT-Infrastruktur (sowohl physische als auch virtuelle Maschinen) mithilfe von maschinenlesbaren Definitionsdateien zu verwalten und bereitzustellen. Es handelt sich um einen softwaretechnischen Ansatz für den Betrieb, der die Automatisierung des gesamten Rechenzentrums durch den Einsatz von Programmierscripts ermöglicht.

Trotz der vielen Vorteile, die Infrastructure as Code bietet, gibt es auch einige Herausforderungen:

  • Notwendigkeit, Programmieren zu erlernen
  • Unsicherheit über die Auswirkungen von Änderungen
  • Komplexität bei der Rückgängigmachung von Änderungen
  • Schwierigkeiten bei der Nachverfolgung von Änderungen
  • Unmöglichkeit, bestimmte Ressourcen zu automatisieren
  • Herausforderungen bei der Verwaltung mehrerer Infrastrukturumgebungen

Terraform wurde entwickelt, um genau diese Herausforderungen zu bewältigen.

Was ist Terraform?

Terraform ist ein Open-Source-Tool für Infrastructure as Code, das von HashiCorp entwickelt wurde. Es ermöglicht die Definition und Bereitstellung einer vollständigen Infrastruktur durch eine leicht erlernbare, deklarative Sprache.

Terraform ist ein Werkzeug zur Bereitstellung von Infrastruktur, bei dem die Konfiguration der Cloud-Infrastruktur als Code gespeichert wird. Es ähnelt Tools wie CloudFormation, das zur Automatisierung der AWS-Infrastruktur verwendet wird. CloudFormation ist jedoch auf AWS beschränkt. Terraform hingegen kann auf verschiedenen Cloud-Plattformen eingesetzt werden.

Hier sind einige der Vorteile der Verwendung von Terraform:

  • Bietet Orchestrierung, nicht nur Konfigurationsmanagement
  • Unterstützt eine Vielzahl von Anbietern wie AWS, Azure, GCP, DigitalOcean und viele mehr
  • Ermöglicht die Bereitstellung einer unveränderlichen Infrastruktur, bei der Konfigurationsänderungen reibungslos ablaufen
  • Verwendet HCL (HashiCorp Configuration Language), eine leicht verständliche Sprache
  • Einfache Übertragung auf andere Anbieter
  • Verwendet eine Client-Architektur, wodurch keine zusätzliche Konfigurationsverwaltung auf einem Server erforderlich ist

Terraform Kernkonzepte

Im Folgenden werden die wichtigsten Konzepte und Begriffe aufgeführt, die in Terraform verwendet werden:

  • Variablen: Auch als Eingabevariablen bekannt. Dies sind Schlüssel-Wert-Paare, die von Terraform-Modulen verwendet werden, um Anpassungen zu ermöglichen.
  • Anbieter: Ein Plugin zur Interaktion mit den APIs eines Dienstes und zum Zugriff auf die zugehörigen Ressourcen.
  • Modul: Ein Ordner mit Terraform-Vorlagen, der alle Konfigurationen enthält.
  • Zustand: Eine zwischengespeicherte Information über die von Terraform verwaltete Infrastruktur und die zugehörigen Konfigurationen.
  • Ressourcen: Bezeichnet einen Block von einem oder mehreren Infrastrukturobjekten (Recheninstanzen, virtuelle Netzwerke usw.), die zur Konfiguration und Verwaltung der Infrastruktur verwendet werden.
  • Datenquelle: Wird von Anbietern implementiert, um Informationen über externe Objekte an Terraform zurückzugeben.
  • Ausgabewerte: Rückgabewerte eines Terraform-Moduls, die von anderen Konfigurationen verwendet werden können.
  • Planen: Eine Phase, in der festgelegt wird, was erstellt, aktualisiert oder gelöscht werden muss, um vom tatsächlichen Zustand der Infrastruktur zum gewünschten Zustand zu gelangen.
  • Anwenden: Eine Phase, in der die Änderungen des tatsächlichen Zustands der Infrastruktur angewendet werden, um den gewünschten Zustand zu erreichen.

Terraform Lebenszyklus

Der Lebenszyklus von Terraform besteht aus Initialisieren, Planen, Anwenden und Zerstören.

  • terraform init initialisiert das Arbeitsverzeichnis, das alle Konfigurationsdateien enthält.
  • terraform plan wird verwendet, um einen Ausführungsplan zu erstellen, der den gewünschten Zustand der Infrastruktur erreichen soll. Änderungen in den Konfigurationsdateien werden vorgenommen, um den gewünschten Zustand zu erreichen.
  • terraform apply setzt die im Plan definierten Änderungen an der Infrastruktur um und die Infrastruktur erreicht den gewünschten Zustand.
  • terraform destroy wird verwendet, um alle alten Infrastrukturressourcen zu löschen, die nach der Apply-Phase als „tainted“ markiert wurden.

Wie funktioniert Terraform?

Die Architektur von Terraform besteht aus zwei Hauptkomponenten:

Terraform Kern

Der Terraform-Kern verwendet zwei Eingabequellen für seine Arbeit.

Die erste Quelle ist eine Terraform-Konfiguration, die vom Benutzer konfiguriert wird. Hier wird definiert, was erstellt oder bereitgestellt werden soll. Die zweite Quelle ist der Zustand, in dem Terraform den aktuellen Stand der Infrastruktur speichert.

Der Terraform-Kern nimmt diese Eingaben entgegen und erstellt einen Plan. Er vergleicht den aktuellen Zustand mit der gewünschten Konfiguration und ermittelt, welche Schritte erforderlich sind, um den gewünschten Zustand zu erreichen. Dies beinhaltet die Erstellung, Aktualisierung und Löschung von Ressourcen.

Anbieter

Die zweite Komponente der Architektur sind Anbieter für bestimmte Technologien. Dies können Cloud-Anbieter wie AWS, Azure, GCP oder andere Infrastructure-as-a-Service-Plattformen sein. Es gibt auch Anbieter für höherwertige Komponenten wie Kubernetes oder andere Platform-as-a-Service-Tools, sogar für einige Software-as-a-Service-Lösungen.

Dies ermöglicht die Erstellung von Infrastruktur auf verschiedenen Ebenen.

Beispielsweise kann eine AWS-Infrastruktur erstellt, Kubernetes darauf bereitgestellt und dann Dienste/Komponenten innerhalb dieses Kubernetes-Clusters aufgebaut werden.

Terraform bietet über hundert Anbieter für verschiedene Technologien, die den Zugriff auf ihre jeweiligen Ressourcen ermöglichen. So können über den AWS-Anbieter Hunderte von AWS-Ressourcen wie EC2-Instanzen verwaltet werden. Der Kubernetes-Anbieter ermöglicht den Zugriff auf Ressourcen wie Dienste, Deployments und Namespaces.

Auf diese Weise versucht Terraform, die gesamte Anwendungsbereitstellung von der Infrastruktur bis zur Anwendung zu ermöglichen.

Lass uns ein paar praktische Übungen machen! 👨‍💻

Wir werden Terraform auf Ubuntu installieren und eine einfache Infrastruktur bereitstellen.

Terraform installieren

Laden Sie das neueste Terraform-Paket herunter.

Beziehen Sie sich auf die offizielle Downloadseite, um die aktuelle Version für Ihr Betriebssystem zu erhalten.

[email protected]:~$ wget https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip
--2020-08-14 16:55:38--  https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip
Auflösen von releases.hashicorp.com (releases.hashicorp.com)... 151.101.153.183, 2a04:4e42:24::439
Verbindungsaufbau zu releases.hashicorp.com (releases.hashicorp.com)|151.101.153.183|:443... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 34851622 (33M) [application/zip]
Speichere nach: ‘terraform_0.13.0_linux_amd64.zip’

terraform_0.13.0_linux_amd64.zip     100%[=================================================================>]  33.24M   90.3KB/s    in 5m 28s

2020-08-14 17:01:06 (104 KB/s) - ‘terraform_0.13.0_linux_amd64.zip’ gespeichert [34851622/34851622]
  

Extrahieren Sie das heruntergeladene Paket.

[email protected]:~$ unzip terraform_0.13.0_linux_amd64.zip
Archiv:  terraform_0.13.0_linux_amd64.zip
  entpacke: terraform
  

Verschieben Sie die ausführbare Terraform-Datei in den angegebenen Pfad. Überprüfen Sie die Terraform-Version.

[email protected]:~$ sudo mv terraform /usr/local/bin/
[sudo] Passwort für wdzwdz:
[email protected]:~$ terraform -v
Terraform v0.13.0

Die verfügbaren Befehle in Terraform werden wie folgt angezeigt:

[email protected]:~$ terraform
Verwendung: terraform [-version] [-help] <Befehl> [Argumente]

Die verfügbaren Befehle zur Ausführung sind unten aufgeführt.
Die gängigsten und nützlichsten Befehle werden zuerst angezeigt, gefolgt von
weniger gebräuchlichen oder fortgeschritteneren Befehlen. Wenn Sie gerade erst mit
Terraform beginnen, halten Sie sich an die gängigen Befehle. Für die
anderen Befehle lesen Sie bitte die Hilfe und Dokumente vor der Verwendung.

Gängige Befehle:
  apply       Erstellt oder ändert Infrastruktur
  console     Interaktive Konsole für Terraform-Interpolationen
  destroy     Zerstört von Terraform verwaltete Infrastruktur
  env         Arbeitsbereichsmanagement
  fmt         Schreibt Konfigurationsdateien in ein kanonisches Format um
  get         Lädt Module für die Konfiguration herunter und installiert sie
  graph       Erstellt ein visuelles Diagramm von Terraform-Ressourcen
  import      Importiert vorhandene Infrastruktur in Terraform
  init        Initialisiert ein Terraform-Arbeitsverzeichnis
  login       Erlangt und speichert Anmeldedaten für einen Remote-Host
  logout      Entfernt lokal gespeicherte Anmeldedaten für einen Remote-Host
  output      Liest eine Ausgabe aus einer Zustandsdatei
  plan        Generiert und zeigt einen Ausführungsplan an
  providers   Gibt einen Baum der in der Konfiguration verwendeten Anbieter aus
  refresh     Aktualisiert die lokale Zustandsdatei anhand von realen Ressourcen
  show        Inspiziert den Terraform-Zustand oder -Plan
  taint       Markiert eine Ressource manuell zur Neuerstellung
  untaint     Markiert eine Ressource manuell als nicht "tainted"
  validate    Validiert die Terraform-Dateien
  version     Gibt die Terraform-Version aus
  workspace   Arbeitsbereichsmanagement

Alle anderen Befehle:
  0.12upgrade Schreibt Modulquellcode vor Version 0.12 für Version 0.12 um
  0.13upgrade Schreibt Modulquellcode vor Version 0.13 für Version 0.13 um
  debug       Debug-Ausgabemanagement (experimentell)
  force-unlock Entsperrt den Terraform-Zustand manuell
  push        Veralteter Befehl für Terraform Enterprise Legacy (v1)
  state       Erweitertes Zustandsmanagement
  

Bereitstellen einer AWS EC2-Instanz mit Terraform

In dieser Demo werde ich eine neue AWS EC2-Instanz mit Terraform starten.

Erstellen Sie ein Arbeitsverzeichnis für diese Terraform-Demo.

[email protected]:~$ mkdir terraform_demo
  

Wechseln Sie in das Verzeichnis und erstellen Sie eine Terraform-Konfigurationsdatei, in der Sie den Anbieter und die Ressourcen zum Starten einer AWS EC2-Instanz definieren.

[email protected]:~$ cd terraform_demo/
[email protected]:~/terraform_demo$ gedit awsec2.tf

provider "aws" {
  access_key = "B5KG6Fe5GUKIATUF5UD"
  secret_key = "R4gb65y56GBF6765ejYSJA4YtaZ+T6GY7H"
  region     = "us-west-2"
}

resource "aws_instance" "terraform_demo" {
  ami           = "ami-0a634ae95e11c6f91"
  instance_type = "t2.micro"
}
    

Hinweis: Die Zugangs- und Geheimschlüssel habe ich geändert 😛, Sie müssen Ihre eigenen verwenden.

In der obigen Konfiguration wird der Anbieter als AWS definiert. Innerhalb des Anbieters werden die AWS-Benutzeranmeldeinformationen und die Region angegeben, in der die Instanz gestartet werden soll.

In den Ressourcen werden die AMI-Details von Ubuntu (ami-0a634ae95e11c6f91) und der Instanztyp t2.micro angegeben.

Die Konfigurationsdatei ist einfach und lesbar, auch wenn man kein Programmierer ist.

Terraform init

Der erste Schritt ist die Initialisierung von Terraform.

[email protected]:~/terraform_demo$ terraform init

Initialisiere das Backend...

Initialisiere Anbieter-Plugins...
- Verwende zuvor installierten hashicorp/aws v3.2.0

Die folgenden Anbieter haben keine Versionsbeschränkungen in der Konfiguration.
daher wurde die neueste Version installiert.

Um automatische Upgrades auf neue Hauptversionen zu verhindern, die möglicherweise
Breaking Changes enthalten, empfehlen wir, Versionsbeschränkungen in einem
required_providers-Block in Ihrer Konfiguration mit den unten vorgeschlagenen
Beschränkungszeichenfolgen hinzuzufügen.

* hashicorp/aws: version = "~> 3.2.0"

Terraform wurde erfolgreich initialisiert!

Sie können nun mit Terraform arbeiten. Versuchen Sie, "terraform plan" auszuführen, um
alle Änderungen zu sehen, die für Ihre Infrastruktur erforderlich sind. Alle Terraform-Befehle
sollten jetzt funktionieren.

Wenn Sie jemals Module oder die Backend-Konfiguration für Terraform festgelegt oder geändert haben,
führen Sie diesen Befehl erneut aus, um Ihr Arbeitsverzeichnis neu zu initialisieren. Wenn Sie es vergessen, werden andere
Befehle es erkennen und Sie gegebenenfalls daran erinnern, dies zu tun.
  

Terraform plan

Als nächstes kommt die Planungsphase. Sie erstellt das Ausführungsdiagramm zum Erstellen und Bereitstellen der Infrastruktur.

[email protected]:~/terraform_demo$ terraform plan
Aktualisiere den Terraform-Zustand im Speicher vor dem Plan...
Der aktualisierte Zustand wird verwendet, um diesen Plan zu berechnen, wird aber nicht
im lokalen oder Remote-Zustandsspeicher persistent gespeichert.

------------------------------------------------------------------------

Ein Ausführungsplan wurde generiert und wird unten angezeigt.
Ressourcenaktionen werden mit folgenden Symbolen angezeigt:
  + erstellen

Terraform wird die folgenden Aktionen ausführen:

  # aws_instance.terraform_demo wird erstellt
  + resource "aws_instance" "terraform_demo" {
      + ami                                  = "ami-0a634ae95e11c6f91"
      + arn                                  = (bekannt nach apply)
      + associate_public_ip_address          = (bekannt nach apply)
      + availability_zone                    = (bekannt nach apply)
      + cpu_core_count                       = (bekannt nach apply)
      + cpu_threads_per_core                 = (bekannt nach apply)
      + get_password_data                    = false
      + host_id                              = (bekannt nach apply)
      + id                                   = (bekannt nach apply)
      + instance_state                       = (bekannt nach apply)
      + instance_type                        = "t2.micro"
      + ipv6_address_count                   = (bekannt nach apply)
      + ipv6_addresses                       = (bekannt nach apply)
      + key_name                             = (bekannt nach apply)
      + outpost_arn                          = (bekannt nach apply)
      + password_data                        = (bekannt nach apply)
      + placement_group                      = (bekannt nach apply)
      + primary_network_interface_id        = (bekannt nach apply)
      + private_dns                          = (bekannt nach apply)
      + private_ip                           = (bekannt nach apply)
      + public_dns                           = (bekannt nach apply)
      + public_ip                            = (bekannt nach apply)
      + secondary_private_ips                = (bekannt nach apply)
      + security_groups                      = (bekannt nach apply)
      + source_dest_check                    = true
      + subnet_id                            = (bekannt nach apply)
      + tenancy                              = (bekannt nach apply)
      + volume_tags                          = (bekannt nach apply)
      + vpc_security_group_ids               = (bekannt nach apply)

      + ebs_block_device {
          + delete_on_termination            = (bekannt nach apply)
          + device_name                      = (bekannt nach apply)
          + encrypted                        = (bekannt nach apply)
          + iops                             = (bekannt nach apply)
          + kms_key_id                       = (bekannt nach apply)
          + snapshot_id                      = (bekannt nach apply)
          + volume_id                        = (bekannt nach apply)
          + volume_size                      = (bekannt nach apply)
          + volume_type                      = (bekannt nach apply)
        }

      + ephemeral_block_device {
          + device_name                      = (bekannt nach apply)
          + no_device                        = (bekannt nach apply)
          + virtual_name                     = (bekannt nach apply)
        }

      + metadata_options {
          + http_endpoint                    = (bekannt nach apply)
          + http_put_response_hop_limit      = (bekannt nach apply)
          + http_tokens                      = (bekannt nach apply)
        }

      + network_interface {
          + delete_on_termination            = (bekannt nach apply)
          + device_index                     = (bekannt nach apply)
          + network_interface_id             = (bekannt nach apply)
        }

      + root_block_device {
          + delete_on_termination            = (bekannt nach apply)
          + device_name                      = (bekannt nach apply)
          + encrypted                        = (bekannt nach apply)
          + iops                             = (bekannt nach apply)
          + kms_key_id                       = (bekannt nach apply)
          + volume_id                        = (bekannt nach apply)
          + volume_size                      = (bekannt nach apply)
          + volume_type                      = (bekannt nach apply)
        }
    }

Plan: 1 zu hinzufügen, 0 zu ändern, 0 zu zerstören.

------------------------------------------------------------------------

Hinweis: Sie haben keinen "-out"-Parameter angegeben, um diesen Plan zu speichern, daher kann Terraform
nicht garantieren, dass genau diese Aktionen ausgeführt werden, wenn
"terraform apply" anschließend ausgeführt wird.
  

Terraform apply

Die Apply-Phase führt die Konfigurationsdatei aus und startet eine AWS EC2-Instanz. Wenn Sie den Befehl apply ausführen, werden Sie gefragt: „Möchten Sie diese Aktionen ausführen?“, Sie müssen yes eingeben und die Eingabetaste drücken.

[email protected]:~/terraform_demo$ terraform apply

Ein Ausführungsplan wurde generiert und wird unten angezeigt.
Ressourcenaktionen werden mit folgenden Symbolen angezeigt:
  + erstellen

Terraform wird die folgenden Aktionen ausführen:

  # aws_instance.terraform_demo wird erstellt
  + resource "aws_instance" "terraform_demo" {
      + ami                                  = "ami-0a634ae95e11c6f91"
      + arn                                  = (bekannt nach apply)
      + associate_public_ip_address          = (bekannt nach apply)
      + availability_zone                    = (bekannt nach apply)
      + cpu_core_count                       = (bekannt nach apply)
      + cpu_threads_per_core                 = (bekannt nach apply)
      + get_password_data                    = false
      + host_id                              = (bekannt nach apply)
      + id                                   = (bekannt nach apply)
      + instance_state                       = (bekannt nach apply)
      + instance_type                        = "t2.micro"
      + ipv6_address_count                   = (bekannt nach apply)
      + ipv6_addresses                       = (bekannt nach apply)
      + key_name                             = (bekannt nach apply)
      + outpost_arn                          = (bekannt nach apply)
      + password_data                        = (bekannt nach apply)
      + placement_group                      = (bekannt nach apply)
      + primary_network_interface_id        = (bekannt nach apply)
      + private_dns                          = (bekannt nach apply)
      + private_ip                           = (bekannt nach apply)
      + public_dns                           = (bekannt nach apply)
      + public_ip                            = (bekannt nach apply)
      + secondary_private_ips                = (bekannt nach apply)
      + security_groups                      = (bekannt nach apply)
      + source_dest_check                    = true
      + subnet_id                            = (bekannt nach apply)
      + tenancy                              = (bekannt nach apply)
      + volume_tags                          = (bekannt nach apply)
      + vpc_security_group_ids               = (bekannt nach apply)

      + ebs_block_device {
          + delete_on_termination            = (bekannt nach apply)
          + device_name                      = (bekannt nach apply)
          + encrypted                        = (bekannt nach apply)
          + iops                             = (bekannt nach apply)
          + kms_key_id                       = (bekannt nach apply)
          + snapshot_id                      = (bekannt nach apply)
          + volume_id                        = (bekannt nach apply)
          + volume_size                      = (bekannt nach apply)
          + volume_type                      = (bekannt nach apply)
        }

      + ephemeral_block_device {
          + device_name                      = (bekannt nach apply)
          + no_device                        = (bekannt nach apply)
          + virtual_name                     = (bekannt nach apply)
        }

      + metadata_options {
          + http_endpoint                    = (bekannt nach apply)
          + http_put_response_hop_limit      = (bekannt nach apply)
          + http_tokens                      = (bekannt nach apply)
        }

      + network_interface {
          + delete_on_termination            = (bekannt nach apply)
          + device_index                     = (bekannt nach apply)
          + network_interface_id             = (bekannt nach apply)
        }

      + root_block_device {
          + delete_on_termination            = (bekannt nach apply)
          + device_name                      = (bekannt nach apply)
          + encrypted                        = (bekannt nach apply)
          + iops                             = (bekannt nach apply)
          + kms_key_id                       = (bekannt nach apply)
          + volume_id                        = (bekannt nach apply)
          + volume_size                      = (bekannt nach apply)
          + volume_type                      = (bekannt nach apply)
        }
    }

Plan: 1 zu hinzufügen, 0 zu ändern, 0 zu zerstören.

Möchten Sie diese Aktionen ausführen?
Terraform wird die oben beschriebenen Aktionen ausführen.
Nur 'yes' wird akzeptiert, um zu genehmigen.

Geben Sie einen Wert ein: yes

aws_instance.terraform_demo: Erstelle...
aws_instance.terraform_demo: Erstelle immer noch... [10s vergangen]
aws_instance.terraform_demo: Erstelle immer noch... [20s vergangen]
aws_instance.terraform_demo: Erstelle immer noch... [30s vergangen]
aws_instance.terraform_demo: Erstelle immer noch... [40s vergangen]
aws_instance.terraform_demo: Erstellung abgeschlossen nach 44s [id=i-0eec33286ea4b0740]

Apply abgeschlossen! Ressourcen: 1 hinzugefügt, 0 geändert, 0 zerstört.
  

Gehen Sie zu Ihrem AWS EC2-Dashboard, und Sie werden sehen, dass eine neue Instanz mit der Instanz-ID erstellt wurde, die am Ende des Apply-Befehls angegeben wurde.

Sie haben erfolgreich eine AWS EC2-Instanz mit Terraform gestartet.

Terraform zerstören

Wenn Sie schließlich die Infrastruktur löschen möchten, müssen Sie den Befehl „destroy“ ausführen.

[email protected]:~/terraform_demo$ terraform destroy
aws_instance.terraform_demo: Aktualisiere den Zustand... [id=i-0eec33286ea4b0740]

Ein Ausführungsplan wurde generiert und wird unten angezeigt.
Ressourcenaktionen werden mit folgenden Symbolen angezeigt:
  - zerstören

Terraform wird die folgenden Aktionen ausführen:

  # aws_instance.terraform_demo wird zerstört
  - resource "aws_instance" "terraform_demo" {
      - ami                                  = "ami-0a634ae95e11c6f91" -> null
      - arn                                  = "arn:aws:ec2:us-west-2:259212389929:instance/i-0eec33286ea4b0740" -> null
      - associate_public_ip_address          = true -> null
      - availability_zone                    = "us-west-2c" -> null
      - cpu_core_count                       = 1 -> null
      - cpu_threads_per_core                 = 1 -> null
      - disable_api_termination              = false -> null
      - ebs_optimized                        = false -> null
      - get_password_data                    = false -> null
      - hibernation                          = false -> null
      - id                                   = "i-0eec33286ea4b0740" -> null
      - instance_state                       = "running" -> null
      - instance_type                        = "t2.micro" -> null
      - ipv6_address_count                   = 0 -> null
      - ipv6_addresses                       = [] -> null
      - monitoring                           = false -> null
      - primary_network_interface_id        = "eni-02a46f2802fd15634" -> null
      - private_dns                          = "ip-172-31-13-160.us-west-2.compute.internal" -> null
      - private_ip                           = "172.31.13.160" -> null
      - public_dns                           = "ec2-34-221-77-94.us-west-2.compute.amazonaws.com" -> null
      - public_ip                            = "34.221.77.94" -> null
      - secondary_private_ips                = [] -> null
      - security_groups                      = [
          - "default",
        ] -> null
      - source_dest_check                    = true -> null
      - subnet_id                            = "subnet-5551200c" -> null
      - tags                                 = {} -> null
      - tenancy                              = "default" -> null
      - volume_tags                          = {} -> null
      - vpc_security_group_ids               = [
          - "sg-b5b480d1",
        ] -> null

      - credit_specification {
          - cpu_credits                        = "standard" -> null
        }

      - metadata_options {
          - http_endpoint                    = "enabled" -> null
          - http_put_response_hop_limit      = 1 -> null
          - http_tokens                      = "optional" -> null
        }

      - root_block_device {
          - delete_on_termination            = true -> null
          - device_name                      = "/dev/sda1" -> null
          - encrypted                        = false -> null
          - iops                             = 100 -> null
          - volume_id                        = "vol-0be2673afff6b1a86" -> null
          - volume_size                      = 8 -> null
          - volume_type                      = "gp2" -> null
        }
    }

Plan: 0 zu hinzufügen, 0 zu ändern, 1 zu zerstören.

Möchten Sie wirklich alle Ressourcen zerstören?
Terraform wird Ihre gesamte verwaltete Infrastruktur wie oben gezeigt zerstören.
Es gibt keine Möglichkeit, dies rückgängig zu machen. Nur 'yes' wird zur Bestätigung akzeptiert.

Geben Sie einen Wert ein: yes

aws_instance.terraform_demo: Zerstöre... [id=i-0eec33286ea4b0740]
aws_instance.terraform_demo: Zerstöre immer noch... [id=i-0eec33286ea4b0740, 10s vergangen]
aws_instance.terraform_demo: Zerstöre immer noch... [id=i-0eec33286ea4b0740, 20s vergangen]
aws_instance.terraform_demo: Zerstöre immer noch... [id=i-0eec33286ea4b0740, 30s vergangen]
aws_instance.terraform_demo: Zerstörung abgeschlossen nach 34s

Zerstörung abgeschlossen! Ressourcen: 1 zerstört.
  

Wenn Sie das EC2-Dashboard erneut überprüfen, werden Sie feststellen, dass die Instanz beendet wurde.

Fazit

Ich hoffe, die obige Anleitung hat Ihnen einen Einblick in den Einstieg in Terraform gegeben. Machen Sie weiter und probieren Sie das gezeigte Beispiel aus.

Sie sollten sich auch mit anderen Tools für die Infrastrukturautomatisierung beschäftigen.

Falls Sie mehr darüber erfahren möchten, empfehle ich diesen DevOps-Kurs mit Terraform.