快速入門:使用 Terraform 建立 適用於 MySQL 的 Azure 資料庫 實例 - 彈性伺服器
適用於:適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
本快速入門已使用下列 Terraform 和 Terraform 提供者版本進行測試:
適用於 MySQL 的 Azure 資料庫 - 彈性伺服器是您用來在雲端中執行、管理及調整高可用性 MySQL 資料庫的受控服務。 您可以使用 Azure Resource Manager 範本 (ARM 範本) 來布建 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器來部署多部伺服器,或在伺服器上部署多個資料庫。
本文說明如何使用 Terraform 來部署 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器和虛擬網路中的資料庫實例。
在本文中,您將學會如何:
- 使用 azurerm_resource_group 建立 Azure 資源群組。
- 使用 azurerm_virtual_network 建立 Azure 虛擬網路。
- 使用 azurerm_subnet 建立 Azure 子網。
- 使用 azurerm_private_dns_zone,在 Azure DNS 實例內定義私人 DNS 區域。
- 使用 azurerm_private_dns_zone_virtual_network_link定義私人 DNS 區域虛擬網路連結。
- 部署 適用於 MySQL 的 Azure 資料庫 - 使用 azurerm_mysql_flexible_server 彈性伺服器。
- 使用 azurerm_mysql_flexible_database部署資料庫。
注意
本文中顯示的範例程式代碼位於 Azure Terraform GitHub 存放庫中。
必要條件
-
如果您沒有 Azure 訂用帳戶,請在開始之前建立 Azure 免費帳戶 。 目前,Azure 免費帳戶可讓您免費試用「適用於 MySQL 的 Azure 資料庫 - 彈性伺服器」12 個月。 如需詳細資訊,請參閱免費試用適用於 MySQL 的 Azure 資料庫 - 彈性伺服器。
實作 Terraform 程式碼
建立可用來測試範例 Terraform 程式代碼的目錄。 將 Terraform 目錄設為目前目錄。
建立名為
providers.tf
的檔案,並插入下列程式碼:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
建立名為
main.tf
的檔案,並插入下列程式碼:# 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] }
建立名為
mysql-fs-db.tf
的檔案,並插入下列程式碼:# 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 }
建立名為
variables.tf
的檔案,並插入下列程式碼: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." }
建立名為
outputs.tf
的檔案,並插入下列程式碼: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 }
初始化 Terraform
執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。
terraform init -upgrade
重點︰
-upgrade
參數會將必要的提供者外掛程式升級至符合設定版本條件約束的最新版本。
建立 Terraform 執行計畫
執行 terraform plan 以建立執行計畫。
terraform plan -out main.tfplan
重點︰
terraform plan
命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。- 選用的
-out
參數可讓您指定計畫的輸出檔。 使用-out
參數可確保您所檢閱的方案就是所套用的方案。
套用 Terraform 執行計畫
執行 terraform apply 將執行計畫套用至您的雲端基礎結構。
terraform apply main.tfplan
重點︰
- 範例
terraform apply
命令假設您之前已執行過terraform plan -out main.tfplan
。 - 如果您為
-out
參數指定了不同的檔案名稱,請在呼叫terraform apply
時使用該檔案名稱。 - 若您未使用
-out
參數,請呼叫terraform apply
,不需要使用參數。
驗證結果
若要顯示 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器資料庫,請執行 az mysql flexible-server db show:
az mysql flexible-server db show \
--resource-group <resource_group_name> \
--server-name <azurerm_mysql_flexible_server> \
--database-name <mysql_flexible_server_database_name>
請考慮下列 重點:
- 、 與的值
<resource_group_name>
會顯示輸出中terraform apply
。<mysql_flexible_server_database_name>
<azurerm_mysql_flexible_server>
您也可以執行 terraform 輸出 命令來檢視這些值。
清除資源
當您不再需要透過 Terraform 建立的資源時,請執行下列步驟:
執行 terraform plan 並指定
destroy
旗標。terraform plan -destroy -out main.destroy.tfplan
重點︰
terraform plan
命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。- 選用的
-out
參數可讓您指定計畫的輸出檔。 使用-out
參數可確保您所檢閱的方案就是所套用的方案。
執行 terraform apply 以套用執行方案。
terraform apply main.destroy.tfplan
對 Azure 上的 Terraform 進行疑難排解
探索如何 針對在 Azure 上使用 Terraform 的常見問題進行疑難解答。