402 Terraform Basics [2 PT]

Updated . Posted . Visible to the public.

Terraform hat im Moment die größte Verbreitung bei den IaC tools. Trotz der kleineren Probleme bei der Benutzung ist es immer noch flexibel genug, um beinahe alle Anforderungen, die man an ein IaC Tool haben kann, abzudecken.

Ziele

  • Du kennst die grundsätzlichen Terraform Aktionen init, plan, apply und destroy und kannst erklären was diese machen
  • Du kennst HCL und die Limitierungen die mit der "Sprache" einhergehen
  • Du weißt, was der Terraform State ist und kannst beschreiben wie dieser funktioniert
  • Warum braucht man den State? Kannst du dir eine Alternative Lösung vorstellen?
  • Du weißt, wie existierende Ressourcen in den Terraform State importiert werden können
    • Was ist nach dem Import noch erforderlich damit die Ressource gemanaged wird?
    • Was passiert, wenn es keine zugehörige Ressource zu einem Objekt im state gibt und ein terraform plan erstellt wird?
  • Wie kann ich sicherstellen, dass genau der Plan angewendet wird, der bei terraform plan ausgegeben wurde?
  • Du kannst erklären was ein Provider ist
  • Wie kann man einen eigenen Provider erstellen?
  • Du kannst erklären was ein Modul ist
  • Du kennst die data types, die in Terraform zur Verfügung stehen, und kannst diese aufzählen
  • Wie kann eine resource in Terraform abhängig vom Wert einer bool Variable erstellt werden?
  • Wie kann ich Terraform Resourcen in einem Loop generieren (z.B. auf Basis einer map)?
  • Gibt es auch loops, die nicht direkt etwas mit dem Erstellen von Ressourcen zu tun haben?
  • Du kennst Dynamic Blocks
  • Du kennst den Unterschied zwischen variables und locals
  • Du weißt, was outputs sind und für was man diese verwendet
  • Was ist eine data source und für was kannst du diese einsetzen?
  • Manchmal müssen Ressourcen ersetzt (replaced) werden
    • Du kannst erklären, warum das notwendig ist
    • Du weißt, ob das immer problemfrei ist

Inhalte

Wie immer gilt: Du musst nicht alle Inhalte lesen/durcharbeiten. Entscheidend ist, dass du am Ende Terraform verwenden kannst und verstehst, wie es funktioniert. Dein Mentor hilft dir dabei, das zu überprüfen.

Nachdem du die Grundlagen abgedeckt hast, möchtest du vielleicht einen Blick auf die Blogpost-Serie von Gruntwork werfen. Diese Serie ist sehr ausführlich, gibt aber weitere gute Einblicke in die Praxis.

Weitere gute Anhaltspunkte in der Hashicorp-Dokumentation sind folgende Seiten:

Wir pflegen einen Style Guide, damit nicht jeder neu recherchieren muss, wie Dateien in einem Terraform-Projekt sinnvoll benannt werden. Sei dir momentan nur bewusst, dass es den Style Guide gibt. Die Empfehlungen können übernommen werden, aber das ist keine Pflicht.

Aufgaben

Am besten erstellst du dir ein Git Repository und jeweils einen Merge Request für jede Aufgabe. Verwende den Docker Provider Show archive.org snapshot für diese Aufgaben.

  1. Erstelle ein Terraform Modul, das bei dir lokal Nginx Show archive.org snapshot container startet. Das Modul soll eine input variable mit Namen containers vom type number haben. Abhängig vom konfigurierten Wert werden entsprechend viele Container gestartet.

  2. Erstelle eine weitere input variable port_mapping. Der Typ soll object sein und die Konfiguration der Portmappings für die Container zu deinem Hostsystem ermöglichen. Verwende die Variable und prüfe, ob du über dein Portmapping mit den Nginx Containern kommunizieren kannst.

  3. Entferne die variable port_mappings und konfiguriere containers als type map(object). Das Objekt soll die Konfiguration folgender Parameter erlauben:

    • Imagename
    • Portmapping
    • privileged

    Weise passende Variabeltypen zu. Anschließend erstellst du für jedes Objekt in dieser map einen Container. Als Name wird der key des elements in der map verwendet.

  4. Erstelle einen output der eine map enthält. Die map soll folgendermaßen aussehen:

    <container_a_id> = {
      ip = <ip_of_container_a>
    }
    <container_b_id> = {
      ip = <ip_of_container_b>
    }
    
Claus-Theodor Riegg
Last edit
Simon Hofmann
License
Source code in this card is licensed under the MIT License.
Posted by Claus-Theodor Riegg to DevOps Curriculum (2022-11-18 10:23)