Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Artikel getest met de volgende versies van Terraform en Terraform-providers:
In dit artikel wordt beschreven hoe u Terraform gebruikt om een met Azure SQL beheerd exemplaar te implementeren in een virtueel netwerk en een subnet dat is gekoppeld aan een routetabel en een netwerkbeveiligingsgroep.
Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.
In dit artikel leert u het volgende:
- Maak alle ondersteunende services voor SQL Managed Instance om op te draaien
- SQL Managed Instance implementeren
Notitie
De voorbeeldcode in dit artikel bevindt zich in de Azure Terraform GitHub-opslagplaats. Zie meer artikelen en voorbeeldcode waarin wordt getoond hoe u Terraform gebruikt om Azure-resources te beheren
Voorwaarden
- Azure-abonnement: als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- In het algemeen moet aan uw gebruiker de rol SQL Managed Instance Contributor worden toegewezen op abonnementsniveau.
- Als inrichting in een subnet dat al is gedelegeerd aan Azure SQL Managed Instance, heeft uw gebruiker alleen de machtiging Microsoft.Sql/managedInstances/write nodig die is toegewezen aan het abonnementsbereik.
- Terraform installeren en configureren
De Terraform-code implementeren
Maak een map waarin u de Terraform-voorbeeldcode wilt testen en uitvoeren en deze de huidige map wilt maken.
Maak een bestand met de naam
providers.tfen voeg de volgende code in: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 } } }Maak een bestand met de naam
main.tfen voeg de volgende code in:# 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 }Maak een bestand met de naam
variables.tfen voeg de volgende code in: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 }
Terraform initialiseren
Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.
terraform init -upgrade
Belangrijkste punten:
- De
-upgradeparameter werkt de benodigde providerinvoegtoepassingen bij naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.
Een Terraform-uitvoeringsplan maken
Voer terraform-plan uit om een uitvoeringsplan te maken.
terraform plan -out main.tfplan
Belangrijkste punten:
- Met de opdracht
terraform planwordt een uitvoeringsplan gemaakt, maar niet uitgevoerd. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources. - Met de optionele parameter
-outkunt u een uitvoerbestand voor het plan opgeven. Door de parameter-outte gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies is toegepast.
Een Terraform-uitvoeringsplan toepassen
Voer terraform apply uit om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.
terraform apply main.tfplan
Belangrijkste punten:
- In het voorbeeld
terraform applyopdracht wordt ervan uitgegaan dat u eerderterraform plan -out main.tfplanhebt uitgevoerd. - Als u een andere bestandsnaam hebt opgegeven voor de parameter
-out, gebruikt u diezelfde bestandsnaam in de aanroep vanterraform apply. - Als u de parameter
-outniet hebt gebruikt, roept uterraform applyzonder parameters aan.
De resultaten controleren
Als u de resultaten in Azure Portal wilt controleren, bladert u naar de nieuwe resourcegroep. Het nieuwe exemplaar bevindt zich in de nieuwe resourcegroep nadat deze is geïmplementeerd. Als u de voortgang van de implementatie wilt zien, houdt u Uw PowerShell geopend of navigeert u naar Azure Portal, zoekt u naar SQL Managed Instance en filtert u vervolgens alle exemplaren op status.
Middelen opschonen
Voer de volgende stappen uit wanneer u de resources die zijn gemaakt via Terraform niet meer nodig hebt:
Voer terraform-plan uit en geef de
destroyvlag op.terraform plan -destroy -out main.destroy.tfplanBelangrijkste punten:
- Met de opdracht
terraform planwordt een uitvoeringsplan gemaakt, maar niet uitgevoerd. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources. - Met de optionele parameter
-outkunt u een uitvoerbestand voor het plan opgeven. Door de parameter-outte gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies is toegepast.
- Met de opdracht
Voer terraform apply uit om het uitvoeringsplan toe te passen.
terraform apply main.destroy.tfplan
Problemen met Terraform in Azure oplossen
Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure