Schnellstart: Erstellen einer Instanz mit Terraform – Azure SQL Managed Instance
Artikel, der mit den folgenden Terraform- und Terraform-Anbieterversionen getestet wurde:
In diesem Artikel wird gezeigt, wie Sie mithilfe von Terraform eine Instanz von Azure SQL Managed Instance in einem virtuellen Netzwerk (VNet) und einem Subnetz bereitstellen, das einer Routingtabelle und einer Netzwerksicherheitsgruppe zugeordnet ist.
Mit Terraform können Sie eine Cloudinfrastruktur definieren, eine Vorschau der Cloudinfrastruktur anzeigen und die Cloudinfrastruktur bereitstellen. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter (beispielsweise Azure) und die Elemente angeben, aus denen sich Ihre Cloudinfrastruktur zusammensetzt. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nach der Überprüfung der Änderungen wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen aller unterstützenden Dienste für die Ausführung von SQL Managed Instance
- Bereitstellen von SQL Managed Instance
Hinweis
Der Beispielcode in diesem Artikel befindet sich im Azure Terraform-GitHub-Repository. Betrachten Sie die weiteren Artikel und Beispielcodes zur Verwendung von Terraform zum Verwalten von Azure-Ressourcen.
Voraussetzungen
- Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Implementieren des Terraform-Codes
Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet und ausgeführt werden soll, und legen Sie es als aktuelles Verzeichnis fest.
Erstellen Sie eine Datei namens
providers.tf
, und fügen Sie den folgenden Code ein: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 } } }
Erstellen Sie eine Datei namens
main.tf
, und fügen Sie den folgenden Code ein:# 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 }
Erstellen Sie eine Datei namens
variables.tf
, und fügen Sie den folgenden Code ein: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 }
Initialisieren von Terraform
Führen Sie zum Initialisieren der Terraform-Bereitstellung terraform init aus. Mit diesem Befehl wird der Azure-Anbieter heruntergeladen, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.
terraform init -upgrade
Die wichtigsten Punkte:
- Der Parameter
-upgrade
aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.
Erstellen eines Terraform-Ausführungsplans
Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.
terraform plan -out main.tfplan
Die wichtigsten Punkte:
- Durch den Befehl
terraform plan
wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen. - Der optionale Parameter
-out
ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
Anwenden eines Terraform-Ausführungsplans
Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.
terraform apply main.tfplan
Die wichtigsten Punkte:
- Der Beispielbefehl
terraform apply
setzt voraus, dass Sie zuvorterraform plan -out main.tfplan
ausgeführt haben. - Wenn Sie einen anderen Dateinamen für den Parameter
-out
angegeben haben, verwenden Sie denselben Dateinamen im Aufruf vonterraform apply
. - Wenn Sie den Parameter
-out
nicht verwendet haben, rufen Sieterraform apply
ohne Parameter auf.
Überprüfen der Ergebnisse
Navigieren Sie zu der neuen Ressourcengruppe, um die Ergebnisse im Azure-Portal zu überprüfen. Die neue Instanz befindet sich nach der Bereitstellung in der neuen Ressourcengruppe. Um den Bereitstellungsfortschritt anzuzeigen, lassen Sie Ihre PowerShell-Instanz geöffnet, oder navigieren Sie zum Azure-Portal, suchen Sie nach SQL Managed Instance, und filtern Sie dann alle Instanzen nach Status.
Bereinigen von Ressourcen
Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:
Führen Sie terraform plan aus, und geben Sie das Flag
destroy
an.terraform plan -destroy -out main.destroy.tfplan
Die wichtigsten Punkte:
- Durch den Befehl
terraform plan
wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen. - Der optionale Parameter
-out
ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
- Durch den Befehl
Führen Sie zum Anwenden des Ausführungsplans den Befehl terraform apply aus.
terraform apply main.destroy.tfplan
Problembehandlung für Terraform in Azure
Behandeln allgemeiner Probleme bei der Verwendung von Terraform in Azure