Použití služby Azure Export pro Terraform v pokročilých scénářích

Tento článek vysvětluje, jak provádět některé pokročilejší úlohy s Využitím služby Azure Export for Terraform.

  • Připojte prostředky k existujícím prostředím Terraformu.
  • Export prostředků do existujícího prostředí Terraformu se vzdáleným stavem back-endu

Připojení k existujícím prostředkům

Ve výchozím nastavení Azure Export for Terraform zajišťuje, aby výstupní adresář byl prázdný, aby nedocházelo ke konfliktům se stávajícími uživatelskými soubory. Pokud potřebujete importovat prostředky do existujícího souboru stavu, přidejte --append příznak.

aztfexport [command] --append <scope>

Po zadání příznaku --append Azure Export for Terraform ověří, jestli v některém ze souborů v aktuálním adresáři existuje nějaký soubor provider nebo terraform blok. Pokud ne, nástroj vytvoří soubor pro každý blok a pak pokračuje s exportem. Pokud má výstupní adresář stavový soubor, všechny exportované prostředky se naimportují do souboru stavu.

Kromě toho má vygenerovaný soubor příponu .aztfexport před příponou , například main.aztfexport.tf – aby nedocházelo ke konfliktům potenciálních názvů souborů.

Pokud spustíte aztfexport --append vícekrát, vytvoří se jeden main.aztfexport.tf s výsledky exportu připojenými k souboru při každém spuštění příkazu.

Používání vlastní konfigurace Terraformu

Azure Export for Terraform ve výchozím nastavení používá k uložení souboru stavu místní back-end. Je ale také možné použít vzdálený back-end. Azure Export for Terraform umožňuje definovat vlastní terraform nebo provider bloky, které se mají předat.

Definujte tyto bloky v souboru v cílovém .tf adresáři, exportujte příznakem --append a exporty konfigurace do zadané verze back-endu a zprostředkovatele (pokud je k dispozici).

Důležité

Pokud zadaná verze AzureRM při exportu neodpovídá nainstalované verzi, příkaz selže.

Příklad služby Azure Storage

Tento příklad vychází z článku, ve službě Azure Storage uložte stav Terraformu.

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 {}
}

Příklad Terraform Cloudu

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

Vložené prostředí

K exportu do back-endu vloženého použijte možnosti --backend-type a --backend-config možnosti. Další informace o konfiguraci back-endu Terraformu najdete v tématu Konfigurace back-endu Terraformu.

V našem příkladu účtu úložiště Azure potřebujete následující informace, jak je definováno v dokumentaci k back-endu AzureRM.

  • Název skupiny prostředků
  • Název účtu úložiště
  • Název kontejneru úložiště

Předejte do příkazu tyto parametry spolu s typem back-endu:

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 

Klíčové body:

  • V předchozím příkladu používám znak pokračování řádku unixu, aby se kód zobrazil dobře v prohlížeči. Tyto znaky možná budete muset změnit tak, aby odpovídaly prostředí příkazového řádku , jako je PowerShell, nebo ho zkombinovat na jeden řádek.
  • Pokud už stav back-endu existuje, Azure Export for Terraform sloučí nové prostředky s existujícím stavem automaticky. Nemusíte zadávat vloženou --append možnost.

Export prostředků Azure do existujícího prostředí Terraformu

Pojďme to teď dát dohromady! Představte si, že se vytvořily nové prostředky mimo Terraform, které je potřeba přesunout do správy Terraformu. Pokud chcete dokončit oddíl, ujistěte se, že máte nakonfigurovaný back-end. Tento kurz používá stejnou konfiguraci, kterou jste zadali v kurzu vzdáleného stavu úložiště Azure.

  1. V nadřazené adresáři, ve kterém chcete dočasný adresář vytvořit, spusťte následující příkaz:

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

    Klíčové body:

    • Příznak -o určuje, že se má adresář vytvořit, pokud neexistuje.
    • Příznak --hcl-only určuje export nakonfigurovaných prostředků do seznamu HCL.
  2. Po kontrole, že se prostředek dá připojit, využijte vygenerovaný soubor mapování a --append příznak, abyste zajistili, že Azure Export respektuje existující verze vzdáleného stavu a zprostředkovatele v našem existujícím prostředí:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Spusťte inicializaci terraformu.

    terraform init --upgrade
    
  4. Spusťte plán terraformu.

  5. Azure Export pro Terraform by neměl zobrazovat žádné změny.

Blahopřejeme! Vaše infrastruktura a odpovídající stav se úspěšně připojily k vašemu prostředí Terraformu.

Pokud váš plán narazí na problémy, přečtěte si o konceptech Azure Exportu pro Terraform, kde najdete informace o omezeních pro nasazování kódu vygenerovaného --hcl-onlynástrojem . Pokud vám tento článek nepomůže, otevřete problém s GitHubem.

Další kroky