Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Terraform abilita la definizione, l'anteprima e la distribuzione dell'infrastruttura cloud. Con Terraform si creano file di configurazione usando la sintassi HCL. La sintassi HCL consente di specificare il provider di servizi cloud, ad esempio Azure, e gli elementi che costituiscono l'infrastruttura cloud. Dopo aver creato i file di configurazione, si crea un piano di esecuzione che consente di visualizzare in anteprima le modifiche dell'infrastruttura prima della distribuzione. Dopo aver verificato le modifiche, è possibile applicare il piano di esecuzione per distribuire l'infrastruttura.
Questo articolo illustra come usare il provider AzAPI Terraform per gestire un servizio di Azure attualmente non supportato dal provider azureRM . Nel codice azapi_resource di esempio viene usato per gestire una risorsa del Registro Azure Container .
- Definire e configurare i provider AzureRM e AzAPI
- Usare il provider AzureRM per creare un gruppo di risorse di Azure con un nome univoco
- Usare il provider AzureRM per registrare il provider "Microsoft.ContainerRegistry" nella sottoscrizione
- Usare il provider AzAPI per creare la risorsa registro Azure Container
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Configurare Terraform: se non è già stato fatto, configurare Terraform usando una delle opzioni seguenti:
Implementare il codice Terraform
Nota
Il codice di esempio per questo articolo si trova nel repository GitHub di Azure Terraform . È possibile visualizzare il file di log contenente i risultati del test delle versioni correnti e precedenti di Terraform.
Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure
Creare una directory in cui testare il codice Terraform di esempio e impostarla come directory corrente.
Creare un file denominato
providers.tfe inserire il codice seguente:terraform { required_providers { azapi = { source = "Azure/azapi" version = "~>2.0" } azurerm = { source = "hashicorp/azurerm" version = "~>4.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Creare un file denominato
variables.tfe inserire il codice seguente:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "container_registry_name" { type = string default = "" description = "Name of the container registry." }Creare un file denominato
main.tfe inserire il codice seguente:# Create a resource group with a random name. resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create a user assigned identity resource. resource "azurerm_user_assigned_identity" "example" { name = "example" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location } # Create a random name for the container registry. resource "random_string" "acr_name" { length = 10 special = false upper = false numeric = false } # Manage a container registry resource. resource "azapi_resource" "example" { type = "Microsoft.ContainerRegistry/registries@2020-11-01-preview" name = coalesce(var.container_registry_name, random_string.acr_name.result) parent_id = azurerm_resource_group.rg.id location = azurerm_resource_group.rg.location identity { type = "SystemAssigned, UserAssigned" identity_ids = [azurerm_user_assigned_identity.example.id] } body = { sku = { name = "Standard" } properties = { adminUserEnabled = true } } tags = { "Key" = "Value" } response_export_values = ["properties.loginServer", "properties.policies.quarantinePolicy.status"] }Creare un file denominato
outputs.tfe inserire il codice seguente:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "azure_container_registry_name" { value = azapi_resource.example.name }
Inizializzare Terraform
Eseguire terraform init per inizializzare la distribuzione di Terraform. Questo comando scarica il provider di Azure necessario per gestire le risorse di Azure.
terraform init -upgrade
Punti chiave:
- Il parametro
-upgradeaggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.
Creare un piano di esecuzione Terraform
Eseguire terraform plan per creare un piano di esecuzione.
terraform plan -out main.tfplan
Punti chiave:
- Il comando
terraform planconsente di creare un piano di esecuzione, ma non di eseguirlo. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive. - Il parametro
-outfacoltativo consente di specificare un file di output per il piano. L'uso del parametro-outgarantisce che il piano esaminato sia esattamente quello che viene applicato.
Applicare un piano di esecuzione Terraform
Eseguire terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.
terraform apply main.tfplan
Punti chiave:
- Il comando
terraform applydi esempio presuppone che in precedenza sia stato eseguitoterraform plan -out main.tfplan. - Se è stato specificato un nome file diverso per il parametro
-out, usare lo stesso nome file nella chiamata aterraform apply. - Se non è stato usato il parametro
-out, chiamareterraform applysenza parametri.
Verificare i risultati
Ottenere il nome del gruppo di risorse.
resource_group_name=$(terraform output -raw resource_group_name)Ottenere il nome del registro contenitori.
azure_container_registry_name=$(terraform output -raw azure_container_registry_name)Eseguire az acr show per visualizzare il registro dei container.
az acr show --name $azure_container_registry_name --resource-group $resource_group_name
Pulire le risorse
Quando le risorse create tramite Terraform non sono più necessarie, eseguire i passaggi seguenti:
Eseguire terraform plan e specificare il flag
destroy.terraform plan -destroy -out main.destroy.tfplanPunti chiave:
- Il comando
terraform planconsente di creare un piano di esecuzione, ma non di eseguirlo. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive. - Il parametro
-outfacoltativo consente di specificare un file di output per il piano. L'uso del parametro-outgarantisce che il piano esaminato sia esattamente quello che viene applicato.
- Il comando
Eseguire terraform apply per applicare il piano di esecuzione.
terraform apply main.destroy.tfplan
Risolvere i problemi di Terraform in Azure
Risolvere i problemi comuni relativi all'uso di Terraform in Azure