Schnellstart: Erstellen einer Instanz von Azure Database for MySQL – Flexibler Server mithilfe von Terraform
Dieser Schnellstart wurde unter Verwendung der folgenden Terraform- und Terraform-Anbieterversionen getestet:
Azure Database for MySQL – Flexible Server ist ein verwalteter Dienst, mit dem Sie hochverfügbare MySQL-Datenbanken in der Cloud ausführen, verwalten und skalieren können. Mithilfe einer Azure Resource Manager-Vorlage (ARM-Vorlage) können Sie eine Instanz von Azure Database for MySQL – Flexibler Server bereitstellen, um mehrere Server oder mehrere Datenbanken auf einem Server bereitzustellen.
In diesem Artikel erfahren Sie, wie Sie mithilfe von Terraform eine Azure Database for MySQL – Flexible Server-Datenbank in einem virtuellen Netzwerk bereitstellen.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen Sie mithilfe von azurerm_resource_group eine Azure-Ressourcengruppe.
- Erstellen Sie mithilfe von azurerm_virtual_network ein virtuelles Azure-Netzwerks.
- Erstellen Sie mithilfe von azurerm_subnet ein Azure-Subnetz.
- Definieren Sie mithilfe von azurerm_private_dns_zone eine private DNS-Zone innerhalb einer Instanz von Azure DNS.
- Definieren Sie mithilfe von azurerm_private_dns_zone_virtual_network_link einen VNet-Link für eine private DNS-Zone.
- Stellen Sie mithilfe von azurerm_mysql_flexible_server Azure DB for MySQL – Flexibler Server bereit.
- Stellen Sie eine Datenbank mithilfe von azurerm_mysql_flexible_database bereit.
Hinweis
Der Beispielcode, der in diesem Artikel erscheint, befindet sich im Azure Terraform-GitHub-Repository.
Voraussetzungen
-
Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen. Mit einem kostenlosen Azure-Konto können Sie Azure Database for MySQL – Flexibler Server derzeit 12 Monate lang kostenlos testen. Weitere Informationen finden Sie unter Verwenden eines kostenlosen Azure-Kontos, um Azure Database for MySQL – Flexible Server kostenlos zu testen.
Implementieren des Terraform-Codes
Erstellen Sie ein Verzeichnis, das Sie zum Testen des Terraform-Beispielcodes verwenden können. Legen Sie Terraform-Verzeichnis 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" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Erstellen Sie eine Datei namens
main.tf
, und fügen Sie den folgenden Code ein:# Generate random resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Generate random value for the name resource "random_string" "name" { length = 8 lower = true numeric = false special = false upper = false } # Generate random value for the login password resource "random_password" "password" { length = 8 lower = true min_lower = 1 min_numeric = 1 min_special = 1 min_upper = 1 numeric = true override_special = "_" special = true upper = true } # Manages the Virtual Network resource "azurerm_virtual_network" "default" { address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location name = "vnet-${random_string.name.result}" resource_group_name = azurerm_resource_group.rg.name } # Manages the Subnet resource "azurerm_subnet" "default" { address_prefixes = ["10.0.2.0/24"] name = "subnet-${random_string.name.result}" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.default.name service_endpoints = ["Microsoft.Storage"] delegation { name = "fs" service_delegation { name = "Microsoft.DBforMySQL/flexibleServers" actions = [ "Microsoft.Network/virtualNetworks/subnets/join/action", ] } } } # Enables you to manage Private DNS zones within Azure DNS resource "azurerm_private_dns_zone" "default" { name = "${random_string.name.result}.mysql.database.azure.com" resource_group_name = azurerm_resource_group.rg.name } # Enables you to manage Private DNS zone Virtual Network Links resource "azurerm_private_dns_zone_virtual_network_link" "default" { name = "mysqlfsVnetZone${random_string.name.result}.com" private_dns_zone_name = azurerm_private_dns_zone.default.name resource_group_name = azurerm_resource_group.rg.name virtual_network_id = azurerm_virtual_network.default.id depends_on = [azurerm_subnet.default] } # Manages the MySQL Flexible Server resource "azurerm_mysql_flexible_server" "default" { location = azurerm_resource_group.rg.location name = "mysqlfs-${random_string.name.result}" resource_group_name = azurerm_resource_group.rg.name administrator_login = random_string.name.result administrator_password = random_password.password.result backup_retention_days = 7 delegated_subnet_id = azurerm_subnet.default.id geo_redundant_backup_enabled = false private_dns_zone_id = azurerm_private_dns_zone.default.id sku_name = "GP_Standard_D2ds_v4" version = "8.0.21" high_availability { mode = "SameZone" } maintenance_window { day_of_week = 0 start_hour = 8 start_minute = 0 } storage { iops = 360 size_gb = 20 } depends_on = [azurerm_private_dns_zone_virtual_network_link.default] }
Erstellen Sie eine Datei namens
mysql-fs-db.tf
, und fügen Sie den folgenden Code ein:# Manages the MySQL Flexible Server Database resource "azurerm_mysql_flexible_database" "main" { charset = "utf8mb4" collation = "utf8mb4_unicode_ci" name = "mysqlfsdb_${random_string.name.result}" resource_group_name = azurerm_resource_group.rg.name server_name = azurerm_mysql_flexible_server.default.name }
Erstellen Sie eine Datei namens
variables.tf
, und fügen Sie den folgenden Code ein:variable "resource_group_location" { type = string default = "westeurope" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "mysql-fs-db-rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." }
Erstellen Sie eine Datei namens
outputs.tf
, und fügen Sie den folgenden Code ein:output "azurerm_mysql_flexible_server" { value = azurerm_mysql_flexible_server.default.name } output "admin_login" { value = azurerm_mysql_flexible_server.default.administrator_login } output "admin_password" { sensitive = true value = azurerm_mysql_flexible_server.default.administrator_password } output "mysql_flexible_server_database_name" { value = azurerm_mysql_flexible_database.main.name } output "resource_group_name" { value = azurerm_resource_group.rg.name }
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
Um die Azure Database for MySQL – Flexibler Server-Datenbank anzuzeigen, führen Sie az mysql flexible-server db show aus:
az mysql flexible-server db show \
--resource-group <resource_group_name> \
--server-name <azurerm_mysql_flexible_server> \
--database-name <mysql_flexible_server_database_name>
Berücksichtigen Sie die folgenden wichtigen Punkte:
- Die Werte für
<resource_group_name>
,<azurerm_mysql_flexible_server>
und<mysql_flexible_server_database_name>
werden in der Ausgabe vonterraform apply
angezeigt. Sie können auch den Befehl terraform output ausführen, um diese Werte anzuzeigen.
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
Erfahren Sie, wie Sie häufige Probleme bei der Verwendung von Terraform in Azure beheben können.