Início Rápido: Criar instância com o Terraform - Azure SQL Managed Instance
Artigo testado com as seguintes versões de fornecedor do Terraform e terraform:
Este artigo mostra como implementar um Azure SQL Managed Instance numa rede virtual (vNet) e numa sub-rede associada a uma tabela de rotas e a um grupo de segurança de rede com o Terraform.
O Terraform permite a definição, pré-visualização e implementação da infraestrutura de cloud. Com o Terraform, pode criar ficheiros de configuração com a sintaxe HCL. A sintaxe HCL permite-lhe especificar o fornecedor de cloud ( como o Azure) e os elementos que compõem a sua infraestrutura de cloud. Depois de criar os seus ficheiros de configuração, cria um plano de execução que lhe permite pré-visualizar as alterações da infraestrutura antes de serem implementados. Depois de verificar as alterações, aplique o plano de execução para implementar a infraestrutura.
Neste artigo, vai aprender a:
- Criar todos os serviços de suporte para SQL Managed Instance a executar
- Implementar SQL Managed Instance
Nota
O código de exemplo neste artigo está localizado no repositório do GitHub do Azure Terraform. Veja mais artigos e código de exemplo que mostram como utilizar o Terraform para gerir recursos do Azure
Pré-requisitos
- Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.
Implementar o código terraform
Crie um diretório para testar e executar o código terraform de exemplo e torná-lo no diretório atual.
Crie um ficheiro com o nome
providers.tf
e 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 ficheiro com o nome
main.tf
e 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 ficheiro com o nome
variables.tf
e 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 o Terraform
Execute o init do terraform para inicializar a implementação do Terraform. Este comando transfere o fornecedor do Azure necessário para gerir os recursos do Azure.
terraform init -upgrade
Pontos-chave:
- O
-upgrade
parâmetro atualiza os plug-ins do fornecedor 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 plano terraform para criar um plano de execução.
terraform plan -out main.tfplan
Pontos-chave:
- O
terraform plan
comando cria um plano de execução, mas não o executa. Em vez disso, determina que ações são necessárias para criar a configuração especificada nos seus ficheiros de configuração. Este padrão permite-lhe verificar se o plano de execução corresponde às suas expetativas antes de efetuar alterações aos recursos reais. - O parâmetro opcional
-out
permite-lhe especificar um ficheiro de saída para o plano. A utilização do-out
parâmetro garante que o plano que reviu é exatamente o que é aplicado. - Para ler mais sobre os planos de execução persistentes e a segurança, consulte a secção de aviso de segurança.
Aplicar um plano de execução do Terraform
Execute terraform apply para aplicar o plano de execução à sua infraestrutura de cloud.
terraform apply main.tfplan
Pontos-chave:
- O comando de exemplo
terraform apply
pressupõe que executouterraform plan -out main.tfplan
anteriormente . - Se tiver especificado um nome de ficheiro diferente para o
-out
parâmetro , utilize o mesmo nome de ficheiro na chamada paraterraform apply
. - Se não utilizou o
-out
parâmetro , chameterraform apply
sem parâmetros.
Verificar os resultados
Para verificar os resultados no portal do Azure, navegue para o novo grupo de recursos. A nova instância estará no novo grupo de recursos depois de ter sido implementada. Para ver o progresso da implementação, mantenha o PowerShell aberto ou navegue para o portal do Azure, procure SQL Managed Instance e, em seguida, filtre todas as instâncias por estado).
Limpar os recursos
Quando já não precisar dos recursos criados através do Terraform, siga os seguintes passos:
Execute o plano terraform e especifique o
destroy
sinalizador.terraform plan -destroy -out main.destroy.tfplan
Pontos-chave:
- O
terraform plan
comando cria um plano de execução, mas não o executa. Em vez disso, determina que ações são necessárias para criar a configuração especificada nos seus ficheiros de configuração. Este padrão permite-lhe verificar se o plano de execução corresponde às suas expetativas antes de efetuar alterações aos recursos reais. - O parâmetro opcional
-out
permite-lhe especificar um ficheiro de saída para o plano. A utilização do-out
parâmetro garante que o plano que reviu é exatamente o que é aplicado. - Para ler mais sobre os planos de execução persistentes e a segurança, consulte a secção de aviso de segurança.
- O
Execute terraform apply para aplicar o plano de execução.
terraform apply main.destroy.tfplan
Resolver problemas do Terraform no Azure
Resolver problemas comuns ao utilizar o Terraform no Azure