Snabbstart: Skapa instans med Terraform – Azure SQL Managed Instance
Artikel testad med följande Terraform- och Terraform-providerversioner:
Den här artikeln visar hur du distribuerar en Azure SQL Managed Instance i ett virtuellt nätverk (vNet) och ett undernät som är associerat med en routningstabell och en nätverkssäkerhetsgrupp med hjälp av Terraform.
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna använder du exekveringsplanen för att distribuera infrastrukturen.
I den här artikeln lär du dig att:
- Skapa alla stödtjänster för SQL Managed Instance som ska köras på
- Distribuera SQL Managed Instance
Not
Exempelkoden i den här artikeln finns i Azure Terraform GitHub-lagringsplatsen. Se fler artiklar och exempelkod som visar hur du använder Terraform för att hantera Azure-resurser
Förutsättningar
- Azure-prenumeration: Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
- Ett Azure-abonnemang. Om du inte har en Azure-prenumeration skapa ett kostnadsfritt konto
- I det allmänna fallet måste användaren ha rollen SQL Managed Instance-ansvarig tilldelad i prenumerationens omfattning.
- Om du etablerar i ett undernät som redan har delegerats till Azure SQL Managed Instance behöver din användare bara ha behörigheten Microsoft.Sql/managedInstances/write tilldelad på prenumerationsnivå.
- Installera och konfigurera Terraform
Implementera Terraform-koden
Skapa en katalog där du kan testa och köra Terraform-exempelkoden och göra den till den aktuella katalogen.
Skapa en fil med namnet
providers.tf
och infoga följande kod: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 } } }
Skapa en fil med namnet
main.tf
och infoga följande kod:# 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 }
Skapa en fil med namnet
variables.tf
och infoga följande kod: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 }
Initiera Terraform
Kör terraform init för att initiera Terraform-distributionen. Det här kommandot laddar ned den Azure-provider som krävs för att hantera dina Azure-resurser.
terraform init -upgrade
Viktiga punkter:
- Parametern
-upgrade
uppgraderar nödvändiga provider-plugin-program till den senaste versionen som uppfyller konfigurationens versionsbegränsningar.
Skapa en Terraform-körningsplan
Kör terraform plan för att generera en körningsplan.
terraform plan -out main.tfplan
Viktiga punkter:
- Kommandot
terraform plan
skapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om utförandeplanen matchar dina förväntningar innan du gör några ändringar i verkliga resurser. - Med den valfria parametern
-out
kan du ange en utdatafil för planen. Med hjälp av parametern-out
ser du till att den plan som du har granskat är exakt vad som tillämpas.
Tillämpa en Terraform-körningsplan
Kör terraform apply för att tillämpa körningsplanen på din molninfrastruktur.
terraform apply main.tfplan
Viktiga punkter:
- Exemplet
terraform apply
kommandot förutsätter att du tidigare kördeterraform plan -out main.tfplan
. - Om du har angett ett annat filnamn för parametern
-out
använder du samma filnamn i anropet för attterraform apply
. - Om du inte använde parametern
-out
anropar duterraform apply
utan några parametrar.
Verifiera resultatet
Om du vill verifiera resultaten i Azure-portalen bläddrar du till den nya resursgruppen. Den nya instansen kommer att finnas i den nya resursgruppen när den har distribuerats. Om du vill se distributionsförloppet håller du PowerShell öppet eller navigerar till Azure-portalen genom att söka efter SQL Managed Instance och sedan filtrera alla instanser efter status).
Rensa resurser
Gör följande när du inte längre behöver de resurser som skapats via Terraform:
Kör terraform plan och specificera flaggan
destroy
.terraform plan -destroy -out main.destroy.tfplan
Viktiga punkter:
- Kommandot
terraform plan
skapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om utförandeplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser. - Med den valfria parametern
-out
kan du ange en utdatafil för planen. Med hjälp av parametern-out
ser du till att den plan som du har granskat är exakt vad som tillämpas.
- Kommandot
Kör terraform apply för att tillämpa exekveringsplanen.
terraform apply main.destroy.tfplan
Felsöka Terraform i Azure
Felsöka vanliga problem när du använder Terraform i Azure