Snabbstart: Skapa en instans av Azure Database for MySQL – flexibel server med hjälp av Terraform

GÄLLER FÖR: Azure Database for MySQL – flexibel server

Den här snabbstarten testades med hjälp av följande Terraform- och Terraform-providerversioner:

Azure Database for MySQL – Flexibel server är en hanterad tjänst som du använder för att köra, hantera och skala MySQL-databaser med hög tillgänglighet i molnet. Du kan använda en Azure Resource Manager-mall (ARM-mall) för att etablera Azure Database for MySQL – flexibel server för att distribuera flera servrar eller distribuera flera databaser på en server.

Den här artikeln visar hur du använder Terraform för att distribuera en instans av Azure Database for MySQL – flexibel server och en databas i ett virtuellt nätverk.

I den här artikeln kan du se hur du:

Kommentar

Exempelkoden som visas i den här artikeln finns på Azure Terraform GitHub-lagringsplatsen.

Förutsättningar

Implementera Terraform-koden

  1. Skapa en katalog som du kan använda för att testa Terraform-exempelkoden. Gör Terraform-katalogen till den aktuella katalogen.

  2. 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"
        }
    
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Skapa en fil med namnet main.tf och infoga följande kod:

    # 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]
    }
    
  4. Skapa en fil med namnet mysql-fs-db.tf och infoga följande kod:

    # 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
    }
    
  5. Skapa en fil med namnet variables.tf och infoga följande kod:

    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."
    }
    
  6. Skapa en fil med namnet outputs.tf och infoga följande kod:

    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
    }
    

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-planen för att skapa 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 körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser.
  • Med den valfria -out parametern kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att planen du granskade är exakt vad som tillämpas.

Tillämpa en Terraform-körningsplan

Kör terraform gäller för att tillämpa körningsplanen på din molninfrastruktur.

terraform apply main.tfplan

Viktiga punkter:

  • terraform apply Exempelkommandot förutsätter att du tidigare körde terraform plan -out main.tfplan.
  • Om du har angett ett annat filnamn för parametern -out använder du samma filnamn i anropet till terraform apply.
  • Om du inte använde parametern -out anropar terraform apply du utan några parametrar.

Verifiera resultatet

Om du vill visa Databasen Azure Database for MySQL – flexibel server kör du 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>

Tänk på följande viktiga punkter:

  • Värdena för <resource_group_name>, <azurerm_mysql_flexible_server>och <mysql_flexible_server_database_name> visas i terraform apply utdata. Du kan också köra terraform-utdatakommandot för att visa dessa värden.

Rensa resurser

Gör följande när du inte längre behöver de resurser som skapats via Terraform:

  1. Kör terraform-plan och ange destroy flaggan.

    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 körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser.
    • Med den valfria -out parametern kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att planen du granskade är exakt vad som tillämpas.
  2. Kör terraform tillämpa för att tillämpa körningsplanen.

    terraform apply main.destroy.tfplan
    

Felsöka Terraform i Azure

Utforska hur du felsöker vanliga problem med att använda Terraform i Azure.

Gå vidare