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.
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
- Flaggan
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`
Kör terraform init.
terraform init --upgrade
Kör terraform-plan.
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:
- Klienthemlighet
- Klientcertifikat
- OIDC
- Hanterad identitet
- 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>