Dela via


Använda Azure Export for Terraform i avancerade scenarier

Den här artikeln beskriver hur du utför några av de mer avancerade uppgifterna med Azure Export for Terraform.

  • Lägg till resurser i befintliga Terraform-miljöer.
  • Exportera resurser till en befintlig Terraform-miljö med fjärrserverdelstillstånd

Lägga till befintliga resurser

Som standard ser Azure Export for Terraform till att utdatakatalogen är tom för att undvika konflikter med befintliga användarfiler. Om du behöver importera resurser till en befintlig tillståndsfil lägger du till --append flaggan.

aztfexport [command] --append <scope>

--append När flaggan har angetts verifierar Azure Export for Terraform om det finns ett befintligt provider eller terraform blockerat objekt i någon av filerna i den aktuella katalogen. Annars skapar verktyget en fil för varje block och fortsätter sedan med export. Om utdatakatalogen har en tillståndsfil importeras alla exporterade resurser till tillståndsfilen.

Dessutom har filen som genereras ett .aztfexport suffix före tillägget , till exempel main.aztfexport.tf - för att undvika potentiella filnamnskonflikter.

Om du kör aztfexport --append flera gånger skapas en enda main.aztfexport.tf med exportresultatet som läggs till i filen varje gång kommandot körs.

Ta med din egen Terraform-konfiguration

Som standard använder Azure Export for Terraform en lokal serverdel för att lagra tillståndsfilen. Det är dock också möjligt att använda en fjärrserverdel. Med Azure Export for Terraform kan du definiera dina egna terraform eller provider block som ska skickas.

Definiera dessa block i en .tf fil i målkatalogen --append , exportera med flaggan och dina konfigurationsexporter till den angivna serverdels- och providerversionen (om den tillhandahålls).

Viktigt!

Om den angivna versionen av AzureRM inte matchar den installerade versionen vid export misslyckas kommandot.

Azure Storage-exempel

Det här exemplet baseras på artikeln Store Terraform-tillstånd i 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-exempel

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

Infogad upplevelse

Om du vill exportera till en infogad serverdel använder du --backend-type alternativen och --backend-config . Mer information om hur du konfigurerar en Terraform-serverdel finns i Terraform-serverdelskonfiguration.

Med vårt Azure Storage-kontoexempel behöver du följande enligt definitionen i dokumentationen för AzureRM-serverdelen.

  • Namn på resursgrupp
  • Lagringskontonamn
  • Namn på lagringscontainer

Skicka dessa parametrar till kommandot tillsammans med din serverdelstyp:

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 

Viktiga punkter:

  • I föregående exempel använder jag unix-radfortsättningstecknet så att koden visas väl i webbläsaren. Du kan behöva ändra dessa tecken så att de matchar kommandoradsmiljön , till exempel PowerShell, eller kombinera kommandot på en rad.
  • Om serverdelstillståndet redan finns sammanfogar Azure Export for Terraform de nya resurserna med det befintliga tillståndet automatiskt. Du behöver inte ange alternativet --append infogat.

Exportera Azure-resurser till en befintlig Terraform-miljö

Nu ska vi sätta ihop allt! Anta att nya resurser har skapats utanför Terraform som behöver flyttas till Terraform-hantering. För att slutföra avsnittet kontrollerar du att du har en konfigurerad serverdel. I den här självstudien används samma konfiguration som anges i självstudien om fjärrtillstånd för Azure Storage.

  1. Kör följande kommando i den överordnade katalogen där du vill att den temporära katalogen ska skapas:

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

    Viktiga punkter:

    • Flaggan -o anger att katalogen ska skapas om den inte finns.
    • Flaggan --hcl-only anger att de konfigurerade resurserna ska exporteras till HCL
  2. När du har kontrollerat att resursen kan läggas till använder du den genererade mappningsfilen och --append flaggan för att säkerställa att Azure Export respekterar det befintliga fjärrtillståndet och providerversionerna i vår befintliga miljö:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Kör terraform init.

    terraform init --upgrade
    
  4. Kör terraform-plan.

  5. Azure Export for Terraform ska visa Inga ändringar behövs.

Grattis! Infrastrukturen och dess motsvarande tillstånd har lagts till i Terraform-miljön.

Om din plan stöter på problem kan du läsa begreppen Azure Export for Terraform för att förstå begränsningar när det gäller att distribuera kod som genereras av --hcl-only. Om den artikeln inte hjälper dig öppnar du ett GitHub-problem.

Anpassa frågan ytterligare

Några ytterligare avancerade flaggor beskrivs nedan, med hur du använder dem:

Välja molnmiljö

Om du vill ange en annan miljö än det offentliga molnet använder du --env flaggan. Till exempel för amerikanska myndigheter:

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

Ändra Terraform-providerversion

Använd flaggan för enklare åtkomst till en önskad AzureRM eller AzAPI version --provider-version . Om du till exempel var på AzAPI version 1.10.0:

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

Autentisering

Det finns en mängd olika flaggor för att hantera autentiseringskonfigurationen. Vissa flaggor lades till så sent som 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 (standardvärdet är falskt)
  • --use-azure-cli-cred (standardvärdet är true)
  • --use-oidc-cred (standardvärdet är falskt)

Flaggorna ovan följer providerns azurerm namngivningskonvention. Alla flaggor kan också konfigureras via miljövariabler, vilket inkluderar samma miljövariabel som definierats i providern azurerm .

aztfexport försöker autentisera med var och en av autentiseringstyperna i följande ordning och stoppa när en token tillhandahålls:

  1. Klienthemlighet
  2. Klientcertifikat
  3. OIDC
  4. Hanterad identitet
  5. Azure CLI

Om en eller flera use-xxx-cred inte är sanna hoppas den typen av autentiseringsuppgifter över. Det här beteendet är detsamma som providern.

Providerkonfigurationen kan åsidosätta alla autentiseringskonfigurationer från aztfexport. Detta gör det möjligt för användare att använda olika typer av autentiseringsuppgifter mellan aztfexport och providern.

Inkludera rolltilldelningar

Om du vill inkludera rolltilldelningar när du exporterar resursomfånget --include-role-assignment använder du kommandot:

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

Nästa steg