Funktionsweise von Terraform
In früheren Einheiten haben Sie erfahren, was die Terraform-Sprache HCL (HashiCorp Configuration Language) ist und welche Vorteile sie für die Modulerstellung bietet. Bevor Sie mit dem Schreiben von Terraform-Modulen für die Bereitstellung Ihrer Ressourcen beginnen, gehen wir erst einmal auf die Funktionsweise von Terraform ein.
In dieser Lerneinheit erfahren Sie, wie Terraform mit Anbietern und Zustandsdateien arbeitet.
Terraform-CLI
Was ist Terraform? Im Grunde ist Terraform ein CLI-Tool. Es ist kostenlos unter der BSL (Business Source License) zu verwenden und kann hier heruntergeladen werden. Die Terraform-CLI ist das einzige Tool, das für die Bereitstellung mit Terraform benötigt wird.
Es gibt zwei andere verwandte Produkte namens Terraform Enterprise und Terraform Cloud. Diese Produkte sind von der Terraform-CLI getrennt. Sie bieten Features wie Zustandsverwaltung und private Modulregistrierung, um die Terraform-Einführung zu vereinfachen. Sie betten die Terraform-CLI ein, verwenden aber die gleiche Version der Terraform-CLI, die auch alle anderen zum Bereitstellen von Ressourcen verwenden.
Terraform-Anbieter
In der vorherigen Lektion haben Sie gelernt, dass HCL eine domänenspezifische Sprache ist, die für ein bestimmtes Szenario oder eine bestimmte Domäne entwickelt wurde. HCL wurde entwickelt, um die Bereitstellung und Konfiguration von Ressourcen in beliebigen Clouds oder Diensten mit Terraform zu vereinfachen.
Wie erhält Terraform spezifische Informationen zu Azure? Und wie sieht es mit Azure DevOps, GitHub usw. aus? Die Terraform-CLI hat keine Informationen zu Azure oder zu anderen Clouds oder Diensten. Sie kann lediglich den Zustand verwalten und Bereitstellungen planen. Terraform-Anbieter sind dafür verantwortlich, die Lücke zwischen der Terraform-CLI und der Ziel-API (in unserem Fall: Azure) zu schließen. In Terraform gibt es ein Plug-In-Konzept, und Anbieter sind eine Art Plug-In. Anbieter werden während der Initialisierungsphase basierend auf den Anforderungen in Ihrem HCL-Code in die Terraform-CLI geladen.
Microsoft kuratiert zahlreiche Anbieter in Zusammenarbeit mit HashiCorp und der Community. Zu diesen Anbietern zählen folgende:
- azurerm: Dieser Anbieter ist die benutzerfreundlicheste Methode zum Bereitstellen von Ressourcen in Azure. Bei diesem Anbieter kann es etwas dauern, bis neue Azure-Features unterstützt werden.
- azapi: Dieser Anbieter ermöglicht die Bereitstellung einer beliebigen Azure-Ressource, einschließlich Ressourcen in der Vorschau. Es ist immer auf dem neuesten Stand mit den neuesten Azure-Features.
- azuread: Dieser Anbieter wird für die verwaltete Microsoft Entra-ID verwendet. Er kann viele Features verwalten, einschließlich Benutzer, Gruppen und Dienstprinzipale.
- azuredevops: Dieser Anbieter wird verwendet, um alle Aspekte von Azure DevOps zu verwalten, einschließlich Repositorys, Pipelines und Projekte.
- github: Dieser Anbieter wird verwendet, um alle Aspekte von GitHub zu verwalten, einschließlich Organisationen, Repositorys und Aktionen.
Die Terraform-CLI interagiert mit Anbietern über eine Standardschnittstelle. Diese Schnittstelle ermöglicht es der Terraform-CLI, Abhängigkeitsdiagramme zu erstellen und den Zustand zu verwalten, ohne die Details der Anbieterimplementierung kennen zu müssen.
Anbieter bestehen aus Ressourcen und Datenquellen. Ressourcen werden mit Terraform verwaltet. Datenquellen werden verwendet, um die Attribute einer Ressource zu lesen, ohne sie zu verwalten.
Es ist möglich, eigene Anbieter zu schreiben, um mit internen API-Endpunkten zu arbeiten und so im Wesentlichen alles mit Terraform zu verwalten. Anbieter müssen in der Programmiersprache Go geschrieben werden.
Terraform-Workflow
Bei Verwendung der Terraform-CLI umfasst der Workflow vier grundlegende Schritte:
- Schreiben: Schreiben Sie den HCL-Code, um den gewünschten Zustand zu definieren.
- Init: Rufen Sie Anbieter und Module ab. Stellen Sie eine Verbindung mit dem Remotestatus her.
- Plan: Generieren Sie einen Plan, um den tatsächlichen Zustand mit dem gewünschten Zustand in Einklang zu bringen, indem Sie Ihre bereitgestellten Ressourcen abfragen und mit der Konfiguration vergleichen.
- Apply: Implementieren Sie den Plan, und gleichen Sie die Zielumgebung über API-Aufrufe an.
Terraform-Lebenszyklus
Terraform wurde entwickelt, um den Lebenszyklus Ihrer Ressourcen zu verwalten, und sollte dafür verwendet werden. Durch die Verwendung einer Zustandsdatei kann Terraform Ihre Ressourcen über folgende Phasen verwalten:
- Create: Die Ressource befindet sich im gewünschten Zustand, ist aber nicht im tatsächlichen Zustand vorhanden und wird in Azure erstellt.
- Aktualisieren: Der gewünschte Zustand der Ressourcenattribute stimmt nicht mit dem tatsächlichen Zustand überein, und die Ressource wird aktualisiert, um sie mit dem gewünschten Zustand in Einklang zu bringen.
- Zerstören: Die Ressource ist nicht mehr im gewünschten Zustand vorhanden und wird aus Azure gelöscht.
Der Aktualisierungsschritt kann während der Lebensdauer einer Ressource mehrmals auftreten, wenn sich die Anforderungen im Laufe der Zeit ändern. Wenn Sie beispielsweise Azure Firewall-Regeln mit Terraform verwalten, müssen diese Regeln unter Umständen regelmäßig aktualisiert werden, um neue Regeln hinzuzufügen, vorhandene Regeln anzupassen und Regeln zu entfernen.
Terraform-Zustand
Der Terraform-Zustand ist erforderlich, um den Terraform-Lebenszyklus zu unterstützen. Terraform hat keinen Einblick in Azure oder in andere Clouds oder Dienste, für deren Verwaltung es ggf. verwendet wird. Daher bedarf es einer unabhängigen Möglichkeit, um zu ermitteln, was verwaltet wird. Dieser Mechanismus ist die Zustandsdatei.
Terraform ordnet die HCL-Konfiguration einer Ressourcen-ID in Azure zu. Terraform kann eine Ressource verwalten, da die ID zugeordnet wurde. Wenn eine Ressource aus der HCL entfernt wird, plant Terraform, diese Ressource zu zerstören. Ohne eine Zustandsdatei hätte Terraform keine Kenntnis von dieser Ressource.
Zustandsdateien können vertrauliche Daten enthalten und müssen sicher gespeichert werden. Wir empfehlen die Verwendung von Terraform Cloud, Terraform Enterprise oder Azure Blob Storage für die Verwaltung Ihrer Zustandsdateien.