Verwenden von Azure Export für Terraform in erweiterten Szenarien

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

  • Fügen Sie Ressourcen an vorhandene Terraform-Umgebungen an.
  • Exportieren von Ressourcen in eine vorhandene Terraform-Umgebung mit einem Remote-Back-End-Zustand

Anfügen an vorhandene Ressourcen

Standardmäßig stellt Azure Export für 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 Kennzeichen angegeben ist, überprüft Azure Export für Terraform, ob eine der Dateien im aktuellen Verzeichnis bereits vorhanden provider oder terraform blockiert 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 main.aztfexport.tf . B. um potenzielle Dateinamenkonflikte zu vermeiden.

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

Bringen Sie Ihre eigene Terraform-Konfiguration mit

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

Definieren Sie diese Blöcke in einer .tf Datei in Ihrem Zielverzeichnis, exportieren Sie es mit dem --append Flag, und ihre Konfiguration exportiert in die angegebene Back-End- und Anbieterversion (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-Zustand 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

Wenn Sie in eine Back-End-Inline exportieren möchten, verwenden Sie die --backend-type optionen.--backend-config Weitere Informationen zum Konfigurieren eines Terraform-Back-End finden Sie unter Terraform-Back-End-Konfiguration.

Im Beispiel für ein Azure-Speicherkonto 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 so ändern, dass sie ihrer Befehlszeilenumgebung entsprechen – z. B. PowerShell – oder den Befehl in einer Zeile kombinieren.
  • Wenn der Back-End-Zustand bereits vorhanden ist, führt Azure Export für Terraform die neuen Ressourcen automatisch mit dem vorhandenen Zustand zusammen. Sie müssen die --append Option nicht inline angeben.

Exportieren von Azure-Ressourcen in eine vorhandene Terraform-Umgebung

Lassen Sie uns nun alles zusammenbringen! Stellen Sie sich vor, dass neue Ressourcen außerhalb von Terraform geschaffen wurden, die in das Terraform-Management verschoben werden müssen. Um den Abschnitt abzuschließen, stellen Sie sicher, dass Ein Back-End konfiguriert ist. In diesem Lernprogramm wird dieselbe Konfiguration verwendet, die im Lernprogramm für den Remotestatus von Azure Storage angegeben ist.

  1. Führen Sie im übergeordneten Verzeichnis, in dem das temporäre Verzeichnis erstellt werden soll, den folgenden Befehl aus:

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

    Die wichtigsten Punkte:

    • Das -o Flag gibt an, das Verzeichnis zu erstellen, wenn es nicht vorhanden ist.
    • 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 terraform Plan aus.

  5. Azure Export für Terraform sollte keine Änderungen anzeigen.

Herzlichen Glückwunsch! Ihre Infrastruktur und ihr entsprechender Zustand wurden erfolgreich an Ihre Terraform-Umgebung angefügt.

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. Wenn Dieser Artikel Ihnen nicht hilft, öffnen Sie ein GitHub-Problem.

Nächste Schritte