Verwenden von Azure Export for Terraform in erweiterten Szenarien

In diesem Artikel wird erläutert, wie Sie einige der erweiterten Aufgaben mit Azure Export for Terraform ausführen.

  • Fügen Sie Ressourcen zu vorhandenen Terraform-Umgebungen hinzu.
  • Exportieren von Ressourcen in eine vorhandene Terraform-Umgebung mit einem Remote-Back-End-Status

Anfügen an vorhandene Ressourcen

Standardmäßig stellt Azure Export for Terraform sicher, dass das Ausgabeverzeichnis leer ist, um Konflikte mit vorhandenen Benutzerdateien zu vermeiden. Wenn Sie Ressourcen in eine vorhandene Statusdatei importieren müssen, fügen Sie das --append-Flag hinzu.

aztfexport [command] --append <scope>

Wenn das --append-Flag angegeben ist, überprüft Azure Export for Terraform, ob in einer der Dateien im aktuellen Verzeichnis ein bereits vorhandener provider- oder terraform-Block vorhanden ist. Andernfalls erstellt das Tool eine Datei für jeden Block und fährt dann mit dem Exportieren fort. Wenn das Ausgabeverzeichnis über eine Statusdatei verfügt, werden alle exportierten Ressourcen in die Statusdatei importiert.

Darüber hinaus verfügt die generierte Datei über ein .aztfexport-Suffix vor der Erweiterung, z. B. main.aztfexport.tf, um potenzielle Dateinamenkonflikte zu vermeiden.

Wenn Sie aztfexport --append mehrmals ausführen, wird ein einzelner main.aztfexport.tf mit den Exportergebnissen erstellt, die bei jeder Ausführung des Befehls an die Datei angefügt wurden.

Verwenden Ihrer eigenen Terraform-Konfiguration

Standardmäßig verwendet Azure Export for Terraform ein lokales Back-End zum Speichern der Statusdatei. Es ist jedoch auch möglich, ein Remote-Back-End zu verwenden. Mit Azure Export for Terraform können Sie eigene zu übergebende terraform- oder provider-Blöcke definieren.

Definieren Sie diese Blöcke in einer .tf-Datei in Ihrem Zielverzeichnis, exportieren Sie sie mit dem --append-Flag, und Ihre Konfiguration wird in die angegebene Back-End- und Anbieterversion exportiert (sofern angegeben).

Wichtig

Wenn die angegebene Version von AzureRM beim Exportieren nicht mit Ihrer installierten Version übereinstimmt, schlägt der Befehl fehl.

Azure Storage-Beispiel

Dieses Beispiel basiert auf dem Artikel Store Terraform-Status in Azure Storage.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "tfstate"
        storage_account_name = "storageacc"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

provider "azurerm" {
  features {}
}

Terraform Cloud (Beispiel)

terraform {
  cloud {
    organization = "aztfexport-test"
    workspaces {
      name = "aztfexport-playground"
    }
  }
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {
  }
}

Inlineerfahrung

Um inline in ein Back-End zu exportieren, verwenden Sie die --backend-type- und --backend-config-Optionen. Weitere Informationen zum Konfigurieren eines Terraform-Back-Ends finden Sie unter Terraform-Back-End-Konfiguration.

Für unser Beispiel eines Azure-Speicherkontos benötigen Sie Folgendes, wie in der AzureRM-Back-End-Dokumentation definiert.

  • Ressourcengruppenname
  • Speicherkontoname
  • Speichercontainername

Übergeben Sie diese Parameter zusammen mit Ihrem Back-End-Typ an den Befehl:

aztfexport [subcommand] --backend-type=azurerm \
                        --backend-config=resource_group_name=<resource group name> \
                        --backend-config=storage_account_name=<account name> \
                        --backend-config=container_name=<container name> \
                        --backend-config=key=terraform.tfstate 

Die wichtigsten Punkte:

  • Im vorherigen Beispiel verwende ich das Unix-Zeilenfortsetzungszeichen, damit der Code im Browser gut angezeigt wird. Möglicherweise müssen Sie diese Zeichen ändern, damit sie zu Ihrer Befehlszeilenumgebung passen – beispielsweise PowerShell – oder den Befehl in einer Zeile zusammenfassen.
  • Wenn der Back-End-Status bereits vorhanden ist, führt Azure Export for Terraform die neuen Ressourcen automatisch mit dem vorhandenen Status zusammen. Sie müssen die --append-Option nicht inline angeben.

Exportieren von Azure-Ressourcen in eine vorhandene Terraform-Umgebung

Lassen Sie uns nun alle Einzelteile zusammensetzen! Stellen Sie sich vor, dass neue Ressourcen außerhalb von Terraform generiert wurden, die in die Terraform-Verwaltung verschoben werden müssen. Um den Abschnitt abzuschließen, stellen Sie sicher, dass ein Back-End konfiguriert ist. In diesem Tutorial wird dieselbe Konfiguration verwendet, die im Tutorial Remotestatus von Azure Storage angegeben ist.

  1. Führen Sie im übergeordneten Verzeichnis, in dem Sie das temporäre Verzeichnis erstellen möchten, den folgenden Befehl aus:

    aztfexport resource -o tempdir --hcl-only <resource_id>
    

    Die wichtigsten Punkte:

    • Das -o-Flag gibt an, dass das Verzeichnis erstellt werden soll, wenn es nicht existiert.
    • Das --hcl-only-Flag gibt an, dass die konfigurierten Ressourcen nach HCL exportiert werden sollen.
  2. Verwenden Sie nach der Überprüfung, ob die Ressource angefügt werden kann, die generierte Zuordnungsdatei und das --append-Flag, um sicherzustellen, dass Azure Export die bereits vorhandenen Remotestatus- und Anbieterversionen innerhalb unserer vorhandenen Umgebung berücksichtigt:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Führen Sie terraform init aus.

    terraform init --upgrade
    
  4. Führen Sie den Terraform-Plan aus.

  5. Azure Export for Terraform sollte Keine Änderungen erforderlich anzeigen.

Herzlichen Glückwunsch! Ihre Infrastruktur und der entsprechende Status wurden erfolgreich an Ihre Terraform-Umgebung angehängt.

Wenn Ihr Plan Probleme verursacht, lesen Sie Azure Export for Terraform-Konzepte, um Einschränkungen hinsichtlich der Bereitstellung von Code zu verstehen, der von --hcl-only generiert wird. Wenn dieser Artikel Ihnen nicht hilft, öffnen Sie ein GitHub-Problem.

Weiteres Anpassen Ihrer Abfrage

Nachfolgend werden einige zusätzliche erweiterte Flags sowie deren Verwendung beschrieben:

Auswahl der Cloud-Umgebung

Um eine andere Umgebung als öffentliche Cloud anzugeben, verwenden Sie das --env-Flag. Beispiel: Für die US-Regierung:

aztfexport [command] --env="usgovernment" [further options] <scope>

Ändern der Terraform-Anbieterversion

Verwenden Sie für einen einfacheren Zugriff auf eine bevorzugteAzureRM- oder AzAPI-Version das --provider-version-Flag. Wenn Sie beispielsweise diese AzAPI-Version 1.10.0 verwendet haben:

aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>

Authentifizierung

Für die Verwaltung der Authentifizierungskonfiguration gibt es eine Vielzahl von Flags. Einige Flags wurden erst in v0.15 hinzugefügt:

  • --env
  • --tenant-id
  • --auxiliary-tenant-ids
  • --client-id
  • --client-id-file-path
  • --client-certificate
  • --client-certificate-path
  • --client-certificate-password
  • --client-secret
  • --client-secret-file-path
  • --oidc-request-token
  • --oidc-request-url
  • --oidc-token
  • --oidc-token-file-path
  • --use-managed-identity-cred (Standardwert ist „false“)
  • --use-azure-cli-cred (Standardwert ist „true“)
  • --use-oidc-cred (Standardwert ist „false“)

Die obigen Flags befolgen die Benennungskonvention des azurerm-Anbieters. Alle Flags sind auch über Umgebungsvariablen konfigurierbar, einschließlich der gleichen Umgebungsvariablen, die im azurerm-Anbieter definiert sind.

aztfexport versucht, sich bei jedem der Anmeldeinformationstypen in der folgenden Reihenfolge zu authentifizieren, wenn ein Token bereitgestellt wird:

  1. Geheimer Clientschlüssel
  2. Clientzertifikat
  3. OIDC
  4. Verwaltete Identität
  5. Azure CLI

Wenn mindestens ein use-xxx-cred-Wert nicht zutrifft, wird dieser Anmeldeinformationstyp übersprungen. Dieses Verhalten ist identisch mit dem des Anbieters.

Die Anbieterkonfiguration kann jede Authentifizierungskonfiguration von aztfexport überschreiben. Dadurch können Benutzer unterschiedliche Anmeldeinformationstypen zwischen aztfexport und dem Anbieter verwenden.

Einbeziehen von Rollenzuweisungen

Wenn Sie beim Exportieren des Ressourcenumfangs Rollenzuweisungen einschließen möchten, verwenden Sie den folgenden --include-role-assignment-Befehl:

aztfexport [command] --include-role-assignment [further options] <scope>

Nächste Schritte