Erste Schritte mit Terraform Windows und Terraform EC2

Im Infrastruktur-als-Code (IaC)-Bereich ist eines der nützlichsten Tools, das in den letzten Jahren auf den Markt gekommen ist, HashiCorp’s Terraform Windows. Die Fähigkeit, die Infrastruktur zu versionieren, die Bereitstellung von Ressourcen zu automatisieren und über verschiedene Cloud-Anbieter hinweg auszuführen, ist enorm wichtig für jede DevOps- und Automatisierungs-Workflow.

Ein Anwendungsfall für Terraform ist in CI/CD. Mit Terraform können Sie Folgendes tun:

Meine neuesten Videos

  • eine Testumgebung erstellen
  • eine Anwendung bereitstellen
  • Integrationstests ausführen
  • die Testumgebung zerstören

All diese Schritte werden automatisch durchgeführt. Und es wird kein Rechenzentrum benötigt!

Voraussetzungen

Dieser Artikel ist eine Anleitung, wie man Terraform für Windows einrichtet. Wenn Sie mitmachen möchten, stellen Sie bitte sicher, dass Sie die folgenden Voraussetzungen erfüllen.

  • A Windows 10 device
  • Ein AWS-Konto
  • Die AWS CLI auf diesem Gerät installiert und konfiguriert. Sie können hier erfahren, wie Sie es installieren und hier, wie Sie es konfigurieren.
  • (Optional) Visual Studio Code mit der Terraform-Erweiterung

Installation der Terraform Windows-Anwendung

Um die Vorteile von Terraform nutzen zu können, müssen Sie es zuerst auf Ihrem Betriebssystem installieren. In diesem Artikel konzentriere ich mich auf Windows. Beachten Sie jedoch, dass Terraform auch auf anderen Betriebssystemen ausgeführt werden kann. Wenn Sie nicht auf Windows sind, werfen Sie einen Blick in die Installationsdokumentation.

Auf die harte Tour

Wenn Sie keinen Paketmanager verwenden können oder den Installationsprozess verstehen möchten, können Sie Terraform manuell installieren. Sie können Terraform installieren, indem Sie die Binärdatei herunterladen und sie zum Systempfad hinzufügen. Wenn dies einschüchternd aussieht, versichere ich Ihnen, dass es einen einfacheren Weg gibt, den Sie im nächsten Abschnitt lernen werden.

  1. Laden Sie die entsprechende Version von Terraform von der Download-Seite von HashiCorp herunter. In meinem Fall handelt es sich um die 64-Bit-Version für Windows.
  2. Erstellen Sie einen Ordner auf Ihrem C:\ Laufwerk, in dem Sie die Terraform-Ausführungsdatei platzieren können. Ich ziehe es vor, Installationsprogramme in einem Unterordner (z. B. C:\tools) abzulegen, in dem Sie Binärdateien ablegen können.
  3. Nach Abschluss des Downloads suchen Sie ihn im Datei-Explorer. Entpacken Sie die Zip-Datei in den Ordner, den Sie in Schritt 2 erstellt haben.
  4. Öffnen Sie das Startmenü und geben Sie „Umgebung“ ein. Das erste Ergebnis sollte die Option Systemumgebungsvariablen bearbeiten sein. Klicken Sie darauf und es sollte sich ein Fenster öffnen.
System Properties

5. Klicken Sie unten auf Umgebungsvariablen… und Sie werden Folgendes sehen:

Windows environment variables

6. Unter dem Abschnitt unten, wo es heißt Systemvariablen, suchen Sie nach einer namens Path und klicken Sie auf Bearbeiten. Sie sehen dann eine Liste, in der Sie die Binärdateien finden können, die Windows möglicherweise aus irgendeinem Grund benötigt.

7. Klicken Sie auf Neu und fügen Sie den Ordnerpfad, in dem sich die Datei terraform.exe befindet, am Ende der Liste hinzu. Es sollte so aussehen, wenn Sie fertig sind.

Editing the system path

8. Klicken Sie auf OK für jede der geöffneten Menüs, bis keine mehr übrig sind.

9. Um sicherzustellen, dass Windows den neuen Pfad erkennt, öffnen Sie ein neues CMD/PowerShell-Fenster und geben Sie refreshenv ein.

10. Überprüfen Sie die erfolgreiche Installation, indem Sie terraform --version eingeben. Wenn eine Version angezeigt wird, funktioniert alles.

Der einfache Weg

Puh, das war eine Menge Arbeit! Es wäre schrecklich, das jedes Mal zu tun, wenn Sie neue Software auf Ihrem Gerät installieren müssen. Verwenden wir stattdessen einen Paketmanager. Es gibt mehrere Paketmanager, die Sie verwenden können, um Terraform unter Windows zu installieren. Mein Favorit für Windows ist Chocolatey. Es macht die Installation, Entfernung und Aktualisierung von Software so einfach wie einen Befehl in einer Zeile, und Terraform ist da keine Ausnahme.

Um Terraform mit Chocolatey zu installieren, führen Sie die folgenden Schritte aus:

  1. Öffnen Sie eine CMD/PowerShell-Eingabeaufforderung als Administrator und installieren Sie Chocolatey mit dem Befehl von ihrer Installationsseite.
  2. Sobald das abgeschlossen ist, führen Sie „choco install terraform“ aus. Wenn Sie möchten, können Sie auch „-y“ am Ende hinzufügen, um der Installation auf Ihrem Gerät automatisch zuzustimmen.

Nachdem dieser Befehl ausgeführt wurde, erhalten Sie etwas Ähnliches wie dies:

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3. Überprüfen Sie die erfolgreiche Installation, indem Sie „terraform –version“ eingeben.

Der Linux-Weg

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

Ja, und das ist immer noch so. Aber eine der Funktionen unter Windows 10 ist das Windows for Linux Subsystem oder WSL. Dadurch können Sie Linux-Befehle unter Windows ausführen.

  1. Installieren Sie WSL. Hier werde ich nicht im Detail darauf eingehen, wie Sie WSL installieren und einrichten können. Wenn Sie jedoch mitmachen möchten und es noch nicht eingerichtet haben, finden Sie unten einen TechSnips-Schnipsel zu diesem Thema.

2. Führen Sie in Ihrer WSL-Shell „apt-get install unzip“ aus. Sie benötigen dies, um die Terraform-Binärdateien später zu extrahieren.

3. Laden Sie Terraform herunter, indem Sie „wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip“ ausführen. Ersetzen Sie dabei die Version und Architektur durch diejenige, die am besten zu Ihrem Gerät passt. Sie finden die vollständige Liste der Terraform-Versionen hier.

4.   Führen Sie unzip terraform_0.12.6_linux_amd64.zip terraform aus, um den Inhalt der Zip-Datei in einen Ordner namens terraform zu entpacken.

5.   Sobald die ZIP-Datei entpackt ist, müssen Sie sie an einen für das System zugänglichen Pfad verschieben. Zum Glück hat Linux standardmäßig einen Ordner, in dem Benutzer Binärdateien hinzufügen können. Verschieben Sie die Terraform-Binärdatei dorthin, indem Sie mv terraform /usr/local/bin/ ausführen. Der /usr/local/bin-Ordner ist bereits in Ihrem Systempfad festgelegt.

6.   Überprüfen Sie die erfolgreiche Installation, indem Sie terraform --version ausführen.

Automatisieren einer AWS Terraform EC2-Instanz

Jetzt, da Sie Terraform installiert haben, können Sie es verwenden. In diesem Beitrag werde ich den Aufbau einer einfachen AWS Terraform EC2-Instanz demonstrieren. Beachten Sie jedoch, dass Terraform Hunderte verschiedener Arten von Infrastrukturen bereitstellen kann.

Um loszulegen, benötigen Sie zunächst ein Verzeichnis, um die Terraform EC2-Skripte auszuführen. Es ist wichtig, für jede Umgebung ein separates Verzeichnis zu haben. Zum Zeitpunkt des Verfassens dieses Beitrags gibt es bei Terraform keine Möglichkeit, festzulegen, was ausgeführt wird. Es werden alle Skripte im aktuellen Arbeitsverzeichnis ausgeführt.

Einrichten eines TF-Skripts

  1. In Ihrer Eingabeaufforderung oder PowerShell-Konsole, die als Administrator ausgeführt wird, führen Sie mkdir hello-terraform und dann cd ./hello-terraform aus.
  2. Sobald Sie ein Verzeichnis haben, benötigen Sie ein Terraform-Skript. Unten ist ein Beispiel, das Sie verwenden können. Dies ist ein typisches Terraform-Skript, das den AWS Provider verwendet, um eine AWS Instanz Ressource zu erstellen.

Wenn Sie das gesamte Skript möchten, kopieren Sie es unten. Wenn Sie verstehen möchten, was dieses Skript tut, lesen Sie weiter unten.

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3.   Speichern Sie das obige Skript als main.tf in Ihrem Arbeitsverzeichnis.

Verständnis von TF-Skripten

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

Bevor Sie weitermachen, schauen Sie sich den untenstehenden Block an und was er deklariert.

#Terraform HCL

Dieser Block gibt Terraform EC2 an, welchen Provider zu verwenden. Es gibt Provider für alle großen Cloud-Anbieter sowie einige On-Prem-Anbieter. Wenn Sie fortgeschrittener sind und wissen, wie man Golang schreibt, können Sie auch Ihren eigenen Provider schreiben.

Dieser Block weist Terraform an, den AWS-Provider und Zugriffsschlüssel in der ~/.aws/credentials Datei unter dem Profilnamen default zu verwenden. Diese Datei wird erstellt, wenn Sie die AWS CLI mit dem aws config Befehl einrichten, wie in den Voraussetzungen angegeben.

Es ist auch erwähnenswert, dass ~/ eine Kurzform für das aktuelle Benutzerverzeichnis ist. Wenn Sie aus dem Windows-Umfeld kommen, entspricht dies $env:USERPROFILE oder %USERPROFILE%. Aber Terraform unterstützt diese Notation zum Zeitpunkt des Schreibens nicht.

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

Der folgende Block beschreibt eine Terraform EC2-Instanz und wie sie erstellt werden soll. Wenn Sie sich die Terraform-Dokumentation für aws_instance ansehen, können Sie sehen, dass einige Parameter erforderlich sind und einige optional. In diesem Fall sind die erforderlichen Parameter die AMI-ID (ami-07d0cf3af28718ef8) für Ubuntu 18.04 LTS und t2.micro für den Instanztyp.

Durch das Hinzufügen eines Tag-Blocks mit dem Schlüssel Name und dem Wert HelloTerraform wird dieser Tag auch der erstellten Instanz zugewiesen. Dies ist optional.

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

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

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

   Erstellen der AWS Terraform EC2-Instanz: Testen
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

Plan: 1 to add, 0 to change, 0 to destroy.

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

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Jetzt, da das Skript eingerichtet ist, rufen Sie es auf, indem Sie terraform init in Ihrem Arbeitsverzeichnis ausführen. Dadurch werden alle Abhängigkeiten und Provider in einen Ordner namens .terraform heruntergeladen. Wenn alles gut geht, erhalten Sie etwas Ähnliches wie dies:

Bevor Sie Änderungen vornehmen, können Sie mit Terraform EC2 sehen, was erstellt wird, indem Sie terraform plan ausführen. Hier ist, was ausgegeben wird:

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# aws_instance.ubuntu wird erstellt werden

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

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

Erstellen der AWS EC2-Instanz: Erstellen

Nun sind Sie bereit, es selbst auszuführen, indem Sie terraform apply ausführen. Unten sehen Sie eine Ausgabe ähnlich wie bei terraform plan, jedoch mit einer zusätzlichen Aufforderung zur Bestätigung, ob Sie diese Änderungen tatsächlich übernehmen möchten.

Sobald Sie „Ja“ eingeben, beginnt Terraform EC2 mit der Bereitstellung der Terraform EC2-Instanz, indem es die AWS-APIs mit dem im Anmeldeinformationsfile angegebenen Zugriffsschlüssel aufruft. Dies kann einige Zeit dauern. Sobald der Vorgang abgeschlossen ist, sehen Sie etwas Ähnliches wie unten dargestellt:

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

Zerstörung der AWS EC2-Instanz

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

Wenn Sie mit der Testumgebung fertig sind, können Sie die Instanz zerstören.

Geben Sie in Ihrer Befehls-/PowerShell-Konsole „terraform destroy“ ein. Wie bei dem Befehl „apply“ sehen Sie eine Liste der Ressourcen, die Terraform zerstören wird, und dann eine Aufforderung, bevor sie tatsächlich zerstört werden.

Sobald Sie „Ja“ eingeben, beginnt Terraform EC2 mit der Zerstörung der Instanz und bestätigt, wenn der Vorgang abgeschlossen ist.

Source:
https://adamtheautomator.com/terraform-windows/