Mulai Cepat: Membuat instans Azure Database for MySQL - Server Fleksibel dengan menggunakan Terraform

BERLAKU UNTUK: Azure Database for MySQL - Server Fleksibel

Mulai cepat ini diuji dengan menggunakan versi penyedia Terraform dan Terraform berikut:

Azure Database for MySQL - Server Fleksibel adalah layanan terkelola yang Anda gunakan untuk menjalankan, mengelola, dan menskalakan database MySQL dengan ketersediaan tinggi di cloud. Anda dapat menggunakan templat Azure Resource Manager (templat ARM) untuk memprovisikan Azure Database for MySQL - Server Fleksibel untuk menyebarkan beberapa server atau untuk menyebarkan beberapa database di server.

Artikel ini memperlihatkan kepada Anda cara menggunakan Terraform untuk menyebarkan instans Azure Database for MySQL - Server Fleksibel dan database di jaringan virtual.

Dalam artikel ini, Anda akan mempelajari cara:

Catatan

Contoh kode yang muncul dalam artikel ini terletak di repositori GitHub Azure Terraform.

Prasyarat

Menerapkan kode Terraform

  1. Buat direktori yang dapat Anda gunakan untuk menguji sampel kode Terraform. Jadikan direktori Terraform sebagai direktori saat ini.

  2. Buat file bernama providers.tf dan masukkan kode berikut:

    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. Buat file bernama main.tf dan masukkan kode berikut:

    # 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. Buat file bernama mysql-fs-db.tf dan masukkan kode berikut:

    # 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. Buat file bernama variables.tf dan masukkan kode berikut:

    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. Buat file bernama outputs.tf dan masukkan kode berikut:

    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
    }
    

Inisialisasi Terraform

Jalankan terraform init untuk menginisialisasi penyebaran Terraform. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure Anda.

terraform init -upgrade

Poin utama:

  • Parameter -upgrade meningkatkan plugin penyedia yang diperlukan ke versi terbaru yang sesuai dengan batasan versi konfigurasi.

Buat rencana eksekusi Terraform

Jalankan terraform plan untuk membuat rencana eksekusi.

terraform plan -out main.tfplan

Poin utama:

  • Perintah terraform plan membuat rencana eksekusi, tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual.
  • Parameter -out opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter -out memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.

Terapkan rencana eksekusi Terraform

Jalankan terraform apply untuk menerapkan rencana eksekusi ke infrastruktur cloud Anda.

terraform apply main.tfplan

Poin utama:

  • Contoh terraform apply perintah mengasumsikan Anda sebelumnya menjalankan terraform plan -out main.tfplan.
  • Jika Anda menentukan nama file yang berbeda untuk parameter -out, gunakan nama file yang sama dalam panggilan ke terraform apply.
  • Jika Anda tidak menggunakan parameter -out, panggil terraform apply tanpa parameter apa pun.

Memverifikasi hasil

Untuk menampilkan database Azure Database for MySQL - Server Fleksibel, jalankan 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>

Pertimbangkan poin-poin penting berikut:

  • Nilai untuk <resource_group_name>, <azurerm_mysql_flexible_server>, dan <mysql_flexible_server_database_name> ditampilkan dalam terraform apply output. Anda juga dapat menjalankan perintah output terraform untuk melihat nilai-nilai ini.

Membersihkan sumber daya

Ketika Anda tidak lagi membutuhkan sumber daya yang dibuat melalui Terraform, lakukan langkah-langkah berikut:

  1. Jalankan terraform plan dan tentukan bendera destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Poin utama:

    • Perintah terraform plan membuat rencana eksekusi, tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual.
    • Parameter -out opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter -out memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
  2. Jalankan terraform apply untuk menerapkan rencana eksekusi.

    terraform apply main.destroy.tfplan
    

Memecahkan masalah Terraform pada Azure

Jelajahi cara memecahkan masalah umum untuk menggunakan Terraform di Azure.

Langkah selanjutnya