Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Artigo testado com as seguintes versões do Terraform e do provedor do Terraform:
Este artigo mostra como usar o Terraform para implantar uma Instância Gerenciada de SQL do Azure em uma rede virtual e uma sub-rede associada a uma tabela de rotas e a um grupo de segurança de rede.
Terraform permite a definição, a visualização e a implantação da infraestrutura de nuvem. Usando o Terraform, você cria arquivos de configuração usando sintaxe de HCL. A sintaxe HCL permite que você especifique o provedor de nuvem - como o Azure - e os elementos que compõem sua infraestrutura de nuvem. Depois de criar seus arquivos de configuração, você cria um plano de execução que permite visualizar as alterações de infraestrutura antes que elas sejam implantadas. Depois de verificar as alterações, você aplica o plano de execução para implantar a infraestrutura.
Neste artigo, você aprenderá a:
- Criar todos os serviços de suporte para a Instância Gerenciada de SQL a ser executada
- Implantar a Instância Gerenciada de SQL
Nota
O código de exemplo neste artigo está localizado no repositório do GitHub Azure Terraform . Veja mais artigos e código de exemplo mostrando como usar o Terraform para gerenciar recursos do Azure
Pré-requisitos
- assinatura do Azure: se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- No caso geral, o usuário precisa ter a função de Contribuidor da Instância Gerenciada de SQL atribuída no escopo da assinatura.
- Se o provisionamento em uma sub-rede que já está delegada à Instância Gerenciada de SQL do Azure, seu usuário só precisará da permissão Microsoft.Sql/managedInstances/write atribuída no escopo da assinatura.
- Instalar e configurar o Terraform
Implementar o código Terraform
Crie um diretório no qual testar e executar o código terraform de exemplo e torná-lo o diretório atual.
Crie um arquivo chamado
providers.tfe insira o seguinte código: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 } } }Crie um arquivo chamado
main.tfe insira o seguinte código:# 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 }Crie um arquivo chamado
variables.tfe insira o seguinte código: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 }
Inicializar Terraform
Execute terraform init para inicializar a implantação do Terraform. Esse comando baixa o provedor do Azure necessário para gerenciar seus recursos do Azure.
terraform init -upgrade
Pontos-chave:
- O parâmetro
-upgradeatualiza os plug-ins de provedor necessários para a versão mais recente que está em conformidade com as restrições de versão da configuração.
Criar um plano de execução do Terraform
Execute o comando terraform plan para criar um plano de execução.
terraform plan -out main.tfplan
Pontos-chave:
- O comando
terraform plancria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite verificar se o plano de execução corresponde às suas expectativas antes de fazer alterações nos recursos reais. - O parâmetro
-outopcional permite que você especifique um arquivo de saída para o plano. Usar o parâmetro-outgarante que o plano revisado seja exatamente o que é aplicado.
Aplicar um plano de execução do Terraform
Execute terraform apply para aplicar o plano de execução à sua infraestrutura de nuvem.
terraform apply main.tfplan
Pontos-chave:
- O comando
terraform applyde exemplo pressupõe que você executou anteriormenteterraform plan -out main.tfplan. - Se você especificou um nome de arquivo diferente para o parâmetro
-out, use o mesmo nome de arquivo na chamada paraterraform apply. - Se você não usou o parâmetro
-out, chameterraform applysem parâmetros.
Verificar os resultados
Para verificar os resultados no portal do Azure, navegue até o novo grupo de recursos. A nova instância estará no novo grupo de recursos depois de implantada. Para ver o progresso da implantação, mantenha o PowerShell aberto ou navegue até o portal do Azure, pesquise a Instância Gerenciada de SQL e filtre todas as instâncias por status.
Limpar recursos
Quando você não precisar mais dos recursos criados por meio do Terraform, execute as seguintes etapas:
Execute terraform plan e especifique o sinalizador
destroy.terraform plan -destroy -out main.destroy.tfplanPontos-chave:
- O comando
terraform plancria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite verificar se o plano de execução corresponde às suas expectativas antes de fazer alterações nos recursos reais. - O parâmetro
-outopcional permite que você especifique um arquivo de saída para o plano. Usar o parâmetro-outgarante que o plano revisado seja exatamente o que é aplicado.
- O comando
Execute a aplicação do Terraform para aplicar o plano de execução.
terraform apply main.destroy.tfplan
Solucionar problemas do Terraform no Azure
Solucionar problemas comuns ao usar o Terraform no Azure