Was ist Terraform?

Abgeschlossen

Sie verwenden Terraform für ihre Ressourcenbereitstellung. Sie möchten mehr über Terraform Module erfahren, damit Sie eine fundierte Entscheidung über die zu verwendende Sprache treffen können.

Diese Einheit deckt die Terraform-Sprache und die Vorteile ab, die es für die Modulerstellung bietet.

Terraform-Sprache - HashiCorp Configuration Language (HCL)

Die von Terraform verwendete Sprache heißt HashiCorp Configuration Language, die normalerweise auf HCL gekürzt wird. Die HCL-Sprache wird in anderen HashiCorp-Tools wie Packer verwendet, ist aber am häufigsten bekannt als die Sprache terraform.

Die HCL-Sprache wird verwendet, um Azure-Ressourcen deklarativ bereitzustellen. HCL ist eine domänenspezifische Sprache. Eine domänenspezifische Sprache wurde für ein bestimmtes Szenario oder eine bestimmte Domäne entwickelt. HCL ist nicht als Standardprogrammiersprache zum Schreiben von Anwendungen vorgesehen. HCL wird nur zum Erstellen von Terraform-Modulen verwendet. Terrafom ist auf einfaches Verstehen und Lernen ausgelegt, und zwar unabhängig von Ihrer Erfahrung mit anderen Programmiersprachen. Alle Azure-Ressourcentypen und -Eigenschaften können in Terraform-Modulen angegeben werden.

Hinweis

Wenn Sie sich zuvor mit ARM-Vorlagen befasst haben, werden Sie feststellen, dass Terraform die Vorlagenerstellung vereinfacht. Geboten wird eine leichter verständliche Syntax, bessere Unterstützung für Modularität und wiederverwendbaren Code sowie verbesserte Typsicherheit. Das Erstellen einer ARM-Vorlage in JSON erfordert komplizierte Ausdrücke, wobei das Endergebnis ausführlich sein kann.

Vorteile von Terraform

Terraform bietet im Vergleich mit ARM viele Verbesserungen für die Vorlagenerstellung, so z. B.:

  • Einfachere Syntax: Terraform bietet eine einfachere Syntax zum Schreiben von Modulen. Sie können ohne komplizierte Funktionen direkt auf Parameter und Variablen verweisen. Zeichenfolgeninterpolation kommt anstelle von Verkettung zum Einsatz, um Werte für Namen und andere Elemente zu kombinieren. Sie können direkt auf die Eigenschaften einer Ressource verweisen, indem Sie ihren symbolischen Namen anstelle komplexer Verweisanweisungen verwenden.

  • Module: Sie können komplexe Bereitstellungen in kleinere Untermodule aufteilen und in einem Stammmodul darauf verweisen. Diese Module ermöglichen eine einfachere Verwaltung und bessere Wiederverwendbarkeit. Sie können Ihre Module sogar mit Ihrem Team oder öffentlich teilen.

  • Automatische Abhängigkeitsverwaltung: In den meisten Situationen erkennt Terraform automatisch Abhängigkeiten zwischen Ihren Ressourcen. Dieser Prozess nimmt Ihnen einen Teil der Arbeit bei der Erstellung von Modulen ab.

  • Typüberprüfung und IntelliSense: Die Terraform-Erweiterungen für Visual Studio Code bieten umfassende Validierung und IntelliSense für alle Azure-Ressourcentypen. Diese Funktion erleichtert den Autorenprozess.

Sehen Sie sich das folgende Beispiel eines Terraform-Moduls an, mit der ein Azure-Speicherkonto definiert wird. Der Name des Speicherkontos wird im Modul automatisch generiert. Nach der Bereitstellung wird die Ressourcen-ID als Ausgabe an den Benutzer zurückgegeben, der das Modul ausgeführt hat.

variable "name_prefix" {
  type    = string
  default = "storage"
}

locals {
  storage_account_name             = "${var.name_prefix}${random_id.random_suffix.hex}"
  storage_account_replication_type = "RAGRS"
}

resource "random_id" "random_suffix" {
    byte_length = 4
}

resource "azurerm_resource_group" "example" {
  name     = "storage-resource-group"
  location = "eastus"
}

resource "azurerm_storage_account" "example" {
  name                      = local.storage_account_name
  location                  = azurerm_resource_group.example.location
  resource_group_name       = azurerm_resource_group.example.name
  sku                       = "Standard"
  account_replication_type  = local.storage_account_replication_type
  account_kind              = "StorageV2"
  access_tier               = "Hot"
  enable_https_traffic_only = true
}

output "storage_account_resource_id" {
  value = azurerm_storage_account.example.id
}