Avvio rapido: Creare istanza con Terraform - Istanza gestita di Azure SQL
Articolo testato con le seguenti versioni di Terraform e del provider Terraform:
- Terraform v1.3.5
- del provider AzureRM v.3.0.0
Questo articolo illustra come distribuire un'istanza gestita di SQL di Azure in una rete virtuale (vNet) e una subnet associata a una tabella di route e a un gruppo di sicurezza di rete usando Terraform.
Terraform abilita la definizione, l'anteprima e la distribuzione dell'infrastruttura cloud. Usando Terraform, si creano file di configurazione usando 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, applicare il piano di esecuzione per distribuire l'infrastruttura.
Questo articolo illustra come:
- Creare tutti i servizi di supporto necessari per eseguire Istanza SQL gestita
- Distribuire Istanza gestita di SQL
Nota
Il codice di esempio in questo articolo si trova nel repository GitHub di Azure Terraform . Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure
Prerequisiti
- abbonamento Azure: se non possiedi un abbonamento Azure, crea un account gratuito prima di iniziare.
- Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito
- Nel caso generale, l'utente deve avere il ruolo Collaboratore Istanza gestita di SQL assegnato nell'ambito della sottoscrizione.
- Se si esegue il provisioning in una subnet già delegata a Istanza gestita di Azure SQL, l'utente necessita solo dell'autorizzazione Microsoft.Sql/managedInstances/write assegnata nell'ambito di sottoscrizione.
- Installare e configurare Terraform
Implementare il codice Terraform
Creare una directory in cui testare ed eseguire il codice Terraform di esempio e impostarla come directory corrente.
Creare un file denominato
providers.tf
e inserire il codice seguente:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.0, < 4.0" } random = { source = "hashicorp/random" version = ">= 3.0" } } } provider "azurerm" { features { resource_group { prevent_deletion_if_contains_resources = false } } }
Creare un file denominato
main.tf
e inserire il codice seguente:# TODO set the variables below either enter them in plain text after = sign, or change them in variables.tf # (var.xyz will take the default value from variables.tf if you don't change it) # Create resource group resource "azurerm_resource_group" "example" { name = "${random_pet.prefix.id}-rg" location = var.location } # Create security group resource "azurerm_network_security_group" "example" { name = "${random_pet.prefix.id}-nsg" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name } # Create a virtual network resource "azurerm_virtual_network" "example" { name = "${random_pet.prefix.id}-vnet" resource_group_name = azurerm_resource_group.example.name address_space = ["10.0.0.0/24"] location = azurerm_resource_group.example.location } # Create a subnet resource "azurerm_subnet" "example" { name = "${random_pet.prefix.id}-subnet" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.0.0/27"] delegation { name = "managedinstancedelegation" service_delegation { name = "Microsoft.Sql/managedInstances" actions = [ "Microsoft.Network/virtualNetworks/subnets/join/action", "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action" ] } } } # Associate subnet and the security group resource "azurerm_subnet_network_security_group_association" "example" { subnet_id = azurerm_subnet.example.id network_security_group_id = azurerm_network_security_group.example.id } # Create a route table resource "azurerm_route_table" "example" { name = "${random_pet.prefix.id}-rt" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name disable_bgp_route_propagation = false } # Associate subnet and the route table resource "azurerm_subnet_route_table_association" "example" { subnet_id = azurerm_subnet.example.id route_table_id = azurerm_route_table.example.id depends_on = [azurerm_subnet_network_security_group_association.example] } # Create managed instance resource "azurerm_mssql_managed_instance" "main" { name = "${random_pet.prefix.id}-mssql" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location subnet_id = azurerm_subnet.example.id administrator_login = "${replace(random_pet.prefix.id, "-", "")}admin" administrator_login_password = random_password.password.result license_type = var.license_type sku_name = var.sku_name vcores = var.vcores storage_size_in_gb = var.storage_size_in_gb depends_on = [azurerm_subnet_route_table_association.example] } resource "random_password" "password" { length = 20 min_lower = 1 min_upper = 1 min_numeric = 1 min_special = 1 special = true } resource "random_pet" "prefix" { prefix = var.prefix length = 1 }
Creare un file denominato
variables.tf
e inserire il codice seguente:variable "prefix" { type = string default = "mi" description = "Prefix of the resource name" } variable "location" { type = string description = "Enter the location where you want to deploy the resources" default = "eastus" } variable "sku_name" { type = string description = "Enter SKU" default = "GP_Gen5" } variable "license_type" { type = string description = "Enter license type" default = "BasePrice" } variable "vcores" { type = number description = "Enter number of vCores you want to deploy" default = 8 } variable "storage_size_in_gb" { type = number description = "Enter storage size in GB" default = 32 }
Inizializzare Terraform
Esegui 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
-upgrade
aggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.
Creare un piano di esecuzione di Terraform
Eseguire terraform plan per creare un piano di esecuzione.
terraform plan -out main.tfplan
Punti chiave:
- Il comando
terraform plan
crea un piano di esecuzione, ma non lo esegue. 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 facoltativo
-out
consente di specificare un file di output per il piano. L'uso del parametro-out
garantisce che il piano esaminato sia esattamente quello applicato.
Applicare un piano di esecuzione di Terraform
Eseguire terraform applicare per applicare il piano di esecuzione all'infrastruttura cloud.
terraform apply main.tfplan
Punti chiave:
- Nell'esempio del comando
terraform apply
, si presuppone che sia stato eseguito precedentementeterraform 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 apply
senza parametri.
Verificare i risultati
Per verificare i risultati nel portale di Azure, passare al nuovo gruppo di risorse. La nuova istanza sarà nel nuovo gruppo di risorse dopo che sarà stata completata la distribuzione. Per visualizzare lo stato di avanzamento della distribuzione, tenere aperto PowerShell o passare al portale di Azure, cercare Istanza gestita di SQL e quindi filtrare tutte le istanze in base allo stato.
Pulire le risorse
Quando le risorse create tramite Terraform non sono più necessarie, seguire questa procedura:
Eseguire di piano terraform e specificare il flag di
destroy
.terraform plan -destroy -out main.destroy.tfplan
Punti chiave :
- Il comando
terraform plan
crea un piano di esecuzione, ma non lo esegue. 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 facoltativo
-out
consente di specificare un file di output per il piano. L'uso del parametro-out
garantisce che il piano esaminato sia esattamente quello applicato.
- Il comando
Eseguire terraform applicare per applicare il piano di esecuzione.
terraform apply main.destroy.tfplan
Risolvere i problemi di Terraform in Azure
Risolvere i problemi comuni quando si usa Terraform in Azure