Mit Terraform können Sie eine Cloudinfrastruktur definieren, eine Vorschau der Cloudinfrastruktur anzeigen und die Cloudinfrastruktur bereitstellen. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter (beispielsweise Azure) und die Elemente angeben, aus denen sich Ihre Cloudinfrastruktur zusammensetzt. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nach der Überprüfung der Änderungen wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.
In diesem Artikel erfahren Sie, wie Sie den AzAPI Terraform-Anbieter verwenden, um einen Azure-Dienst zu verwalten, den der AzureRM-Anbieter derzeit nicht unterstützt. Im Beispielcode wird die azapi_resource verwendet, um eine Azure Container Registry-Ressource zu verwalten.
- Definieren und Konfigurieren der AzureRM- und AzAPI-Anbieter
- Verwenden des AzureRM-Anbieters zum Erstellen einer Azure-Ressourcengruppe mit einem eindeutigen Namen
- Verwenden des AzureRM-Anbieters zum Registrieren des Anbieters "Microsoft.ContainerRegistry" in Ihrem Abonnement
- Verwenden des AzAPI-Anbieters zum Erstellen der Azure Container Registry-Ressource
-
Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet werden soll, und legen Sie es als aktuelles Verzeichnis fest.
Erstellen Sie eine Datei namens providers.tf, und fügen Sie den folgenden Code ein:
terraform {
required_providers {
azapi = {
source = "Azure/azapi"
version = "~>2.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = "~>4.0"
}
random = {
source = "hashicorp/random"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
}
Erstellen Sie eine Datei namens variables.tf, und fügen Sie den folgenden Code ein:
variable "resource_group_location" {
type = string
default = "eastus"
description = "Location of the resource group."
}
variable "resource_group_name_prefix" {
type = string
default = "rg"
description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
}
variable "container_registry_name" {
type = string
default = ""
description = "Name of the container registry."
}
Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:
# Create a resource group with a random name.
resource "random_pet" "rg_name" {
prefix = var.resource_group_name_prefix
}
resource "azurerm_resource_group" "rg" {
location = var.resource_group_location
name = random_pet.rg_name.id
}
# Create a user assigned identity resource.
resource "azurerm_user_assigned_identity" "example" {
name = "example"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
}
# Create a random name for the container registry.
resource "random_string" "acr_name" {
length = 10
special = false
upper = false
numeric = false
}
# Manage a container registry resource.
resource "azapi_resource" "example" {
type = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
name = coalesce(var.container_registry_name, random_string.acr_name.result)
parent_id = azurerm_resource_group.rg.id
location = azurerm_resource_group.rg.location
identity {
type = "SystemAssigned, UserAssigned"
identity_ids = [azurerm_user_assigned_identity.example.id]
}
body = {
sku = {
name = "Standard"
}
properties = {
adminUserEnabled = true
}
}
tags = {
"Key" = "Value"
}
response_export_values = ["properties.loginServer", "properties.policies.quarantinePolicy.status"]
}
Erstellen Sie eine Datei namens outputs.tf, und fügen Sie den folgenden Code ein:
output "resource_group_name" {
value = azurerm_resource_group.rg.name
}
output "azure_container_registry_name" {
value = azapi_resource.example.name
}
Führen Sie zum Initialisieren der Terraform-Bereitstellung terraform init aus. Mit diesem Befehl wird der Azure-Anbieter heruntergeladen, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.
terraform init -upgrade
Die wichtigsten Punkte:
- Der Parameter
-upgrade aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.
Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.
terraform plan -out main.tfplan
Die wichtigsten Punkte:
- Durch den Befehl
terraform plan wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen.
- Der optionale Parameter
-out ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.
terraform apply main.tfplan
Die wichtigsten Punkte:
- Der Beispielbefehl
terraform apply setzt voraus, dass Sie zuvor terraform plan -out main.tfplan ausgeführt haben.
- Wenn Sie einen anderen Dateinamen für den Parameter
-out angegeben haben, verwenden Sie denselben Dateinamen im Aufruf von terraform apply.
- Wenn Sie den Parameter
-out nicht verwendet haben, rufen Sie terraform apply ohne Parameter auf.
Überprüfen der Ergebnisse
Rufen Sie den Namen der Ressourcengruppe ab.
resource_group_name=$(terraform output -raw resource_group_name)
Rufe den Containerregistrierungsnamen ab.
azure_container_registry_name=$(terraform output -raw azure_container_registry_name)
Führen Sie az acr show aus, um die Containerregistrierung anzuzeigen.
az acr show --name $azure_container_registry_name --resource-group $resource_group_name
Rufen Sie den Namen der Ressourcengruppe ab.
$resource_group_name=$(terraform output -raw resource_group_name)
Rufe den Containerregistrierungsnamen ab.
$azure_container_registry_name=$(terraform output -raw azure_container_registry_name)
Führen Sie Get-AzContainerRegistry aus, um die Containerregistrierung anzuzeigen.
Get-AzContainerRegistry -ResourceGroupName $resource_group_name -Name $azure_container_registry_name
Bereinigen von Ressourcen
Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:
Führen Sie terraform plan aus, und geben Sie das Flag destroy an.
terraform plan -destroy -out main.destroy.tfplan
Die wichtigsten Punkte:
- Durch den Befehl
terraform plan wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen.
- Der optionale Parameter
-out ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
Führen Sie zum Anwenden des Ausführungsplans den Befehl terraform apply aus.
terraform apply main.destroy.tfplan
Behandeln allgemeiner Probleme bei der Verwendung von Terraform in Azure