Delen 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.

Uw query verder aanpassen

Hieronder worden enkele aanvullende geavanceerde vlaggen beschreven, met hoe u deze kunt gebruiken:

Cloudomgeving selecteren

Als u een andere omgeving dan de openbare cloud wilt opgeven, gebruikt u de --env vlag. Bijvoorbeeld voor de Amerikaanse overheid:

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

Terraform-providerversie wijzigen

Gebruik de --provider-version vlag voor eenvoudigere toegang tot een voorkeur AzureRM of AzAPI versie. Als u bijvoorbeeld versie AzAPI 1.10.0gebruikt:

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

Verificatie

Er bestaan verschillende vlaggen voor het beheren van de verificatieconfiguratie. Er zijn enkele vlaggen toegevoegd zo laat als v0.15:

  • --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 (standaard ingesteld op onwaar)
  • --use-azure-cli-cred (is standaard ingesteld op true)
  • --use-oidc-cred (standaard ingesteld op onwaar)

De bovenstaande vlaggen volgen de naamconventie van de azurerm provider. Alle vlaggen kunnen ook worden geconfigureerd via omgevingsvariabelen, waaronder dezelfde omgevingsvariabele die is gedefinieerd in de azurerm provider.

aztfexport probeert te verifiëren met elk van de referentietypen, in de volgende volgorde, stopt wanneer er een token wordt opgegeven:

  1. Clientgeheim
  2. Clientcertificaat
  3. OIDC
  4. Beheerde identiteit
  5. Azure-CLI

Als een of meer use-xxx-cred niet waar zijn, wordt dat referentietype overgeslagen. Dit gedrag is hetzelfde als de provider.

De configuratie van de provider kan elke verificatieconfiguratie overschrijven van aztfexport. Hierdoor kunnen gebruikers verschillende referentietypen tussen aztfexport en de provider gebruiken.

Roltoewijzingen opnemen

Als u roltoewijzingen wilt opnemen bij het exporteren van uw bereik van resources, gebruikt u de --include-role-assignment opdracht:

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

Volgende stappen