Share via


Azure Export voor Terraform gebruiken in geavanceerde scenario's

In dit artikel wordt uitgelegd hoe u enkele van de geavanceerdere taken kunt uitvoeren met Azure Export voor Terraform.

  • Resources toevoegen aan bestaande Terraform-omgevingen.
  • Resources exporteren naar een bestaande Terraform-omgeving met een externe back-endstatus

Toevoegen aan bestaande resources

Standaard zorgt Azure Export voor Terraform ervoor dat de uitvoermap leeg is om conflicten met bestaande gebruikersbestanden te voorkomen. Als u resources wilt importeren in een bestaand statusbestand, voegt u de --append vlag toe.

aztfexport [command] --append <scope>

Wanneer de --append vlag is opgegeven, controleert Azure Export voor Terraform of er een bestaand provider bestand of terraform blok aanwezig is in een van de bestanden in de huidige map. Zo niet, dan maakt het hulpprogramma een bestand voor elk blok en gaat vervolgens verder met exporteren. Als de uitvoermap een statusbestand heeft, worden geëxporteerde resources geïmporteerd in het statusbestand.

Daarnaast heeft het gegenereerde bestand een .aztfexport achtervoegsel vóór de extensie , zoals main.aztfexport.tf - om mogelijke conflicten met de bestandsnaam te voorkomen.

Als u meerdere keren uitvoert aztfexport --append , wordt er één main.aztfexport.tf gemaakt met de exportresultaten die worden toegevoegd aan het bestand telkens wanneer de opdracht wordt uitgevoerd.

Uw eigen Terraform-configuratie gebruiken

Azure Export voor Terraform maakt standaard gebruik van een lokale back-end om het statusbestand op te slaan. Het is echter ook mogelijk om een externe back-end te gebruiken. Met Azure Export voor Terraform kunt u uw eigen terraform of provider blokken definiëren die moeten worden doorgegeven.

Definieer deze blokken in een .tf bestand in uw doelmap, exporteer met de --append vlag en exporteert uw configuratie naar de opgegeven back-end- en providerversie (als deze is opgegeven).

Belangrijk

Als de opgegeven versie van AzureRM niet overeenkomt met uw geïnstalleerde versie bij het exporteren, mislukt de opdracht.

Azure Storage-voorbeeld

Dit voorbeeld is gebaseerd op het artikel, De status Terraform opslaan 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-voorbeeld

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

Inline-ervaring

Als u wilt exporteren naar een back-end inline, gebruikt u de --backend-type en --backend-config opties. Zie de terraform-back-endconfiguratie voor meer informatie over het configureren van een Terraform-back-end.

Met behulp van ons Azure Storage-accountvoorbeeld hebt u het volgende nodig, zoals gedefinieerd in de documentatie voor de AzureRM-back-end.

  • Naam van de resourcegroep
  • Naam van het opslagaccount
  • Naam van opslagcontainer

Geef deze parameters door aan de opdracht, samen met uw back-endtype:

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 

Belangrijkste punten:

  • In het vorige voorbeeld gebruik ik het vervolgteken van de Unix-regel zodat de code goed wordt weergegeven in de browser. Mogelijk moet u deze tekens wijzigen zodat deze overeenkomen met uw opdrachtregelomgeving, zoals PowerShell, of de opdracht op één regel combineren.
  • Als de back-endstatus al bestaat, voegt Azure Export voor Terraform de nieuwe resources automatisch samen met de bestaande status. U hoeft de --append optie niet inline op te geven.

Azure-resources exporteren naar een bestaande Terraform-omgeving

Laten we het allemaal samenbrengen. Stel dat er nieuwe resources zijn gemaakt buiten Terraform die moeten worden verplaatst naar Terraform-beheer. Zorg ervoor dat u een back-end hebt geconfigureerd om de sectie te voltooien. In deze zelfstudie wordt dezelfde configuratie gebruikt die is opgegeven in de zelfstudie over de externe status van Azure Storage.

  1. Voer in de bovenliggende map waar u de tijdelijke map wilt maken de volgende opdracht uit:

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

    Belangrijkste punten:

    • De -o vlag geeft aan om de map te maken als deze niet bestaat.
    • De --hcl-only vlag geeft aan om de geconfigureerde resources te exporteren naar HCL
  2. Nadat u hebt gecontroleerd of de resource kan worden toegevoegd, gebruikt u het gegenereerde toewijzingsbestand en de --append vlag om ervoor te zorgen dat Azure Export de bestaande versies van de externe status en provider binnen onze bestaande omgeving respecteert:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Voer terraform init uit.

    terraform init --upgrade
    
  4. Terraform-plan uitvoeren.

  5. Azure Export voor Terraform moet geen wijzigingen weergeven.

Gefeliciteerd. Uw infrastructuur en de bijbehorende status zijn toegevoegd aan uw Terraform-omgeving.

Als uw plan problemen ondervindt, raadpleegt u concepten van Azure Export voor Terraform om inzicht te krijgen in beperkingen met betrekking tot het implementeren van code die wordt gegenereerd door --hcl-only. Als dit artikel u niet helpt, opent u een GitHub-probleem.

Volgende stappen