Aracılığıyla paylaş


Hızlı Başlangıç: Terraform kullanarak MySQL için Azure Veritabanı - Esnek Sunucu örneği oluşturma

Bu hızlı başlangıç, aşağıdaki Terraform ve Terraform sağlayıcı sürümleri kullanılarak test edilmiştir:

MySQL için Azure Veritabanı - Esnek Sunucu, bulutta yüksek oranda kullanılabilir MySQL veritabanlarını çalıştırmak, yönetmek ve ölçeklendirmek için kullandığınız yönetilen bir hizmettir. Birden çok sunucu dağıtmak veya bir sunucuya birden çok veritabanı dağıtmak üzere MySQL için Azure Veritabanı Esnek Sunucu sağlamak için Azure Resource Manager şablonu (ARM şablonu) kullanabilirsiniz.

Bu makalede Terraform kullanarak MySQL için Azure Veritabanı - Esnek Sunucu örneğini ve bir sanal ağdaki veritabanını dağıtma adımları gösterilmektedir.

Bu makalede şunları öğreneceksiniz:

  • azurerm_resource_group kullanarak bir Azure kaynak grubu oluşturun.
  • azurerm_virtual_network kullanarak bir Azure sanal ağı oluşturun.
  • azurerm_subnet kullanarak bir Azure alt ağı oluşturun.
  • azurerm_private_dns_zone kullanarak Azure DNS örneği içinde özel bir DNS bölgesi tanımlayın.
  • azurerm_private_dns_zone_virtual_network_link kullanarak özel bir DNS bölgesi sanal ağ bağlantısı tanımlayın.
  • azurerm_mysql_flexible_server kullanarak MySQL için Azure Veritabanı - Esnek Sunucu dağıtma.
  • azurerm_mysql_flexible_database kullanarak veritabanı dağıtma.

Not

Bu makalede görünen örnek kod, Azure Terraform GitHub deposunda bulunur.

Önkoşullar

Terraform kodunu uygulama

  1. Örnek Terraform kodunu test etmek için kullanabileceğiniz bir dizin oluşturun. Terraform dizinini geçerli dizin yapın.

  2. adlı providers.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    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. adlı main.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    # 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. adlı mysql-fs-db.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    # 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. adlı variables.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    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. adlı outputs.tf bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    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'u başlatma

Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.

terraform init -upgrade

Önemli noktalar:

  • -upgrade parametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.

Terraform yürütme planı oluşturma

Terraform planını çalıştırarak yürütme planı oluşturun.

terraform plan -out main.tfplan

Önemli noktalar:

  • komutu terraform plan bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar.
  • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin -out kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.

Terraform yürütme planı uygulama

Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.

terraform apply main.tfplan

Önemli noktalar:

  • Örnek terraform apply komut, daha önce komutunu çalıştırdığınızı terraform plan -out main.tfplanvarsayar.
  • parametresi için -out farklı bir dosya adı belirttiyseniz, çağrısında terraform applyaynı dosya adını kullanın.
  • parametresini -out kullanmadıysanız, parametresiz olarak çağırın terraform apply .

Sonuçları doğrulama

MySQL için Azure Veritabanı - Esnek Sunucu veritabanını görüntülemek için az mysql flexible-server db show komutunu çalıştırın:

az mysql flexible-server db show \
    --resource-group <resource_group_name> \
    --server-name <azurerm_mysql_flexible_server> \
    --database-name <mysql_flexible_server_database_name>

Aşağıdaki önemli noktaları göz önünde bulundurun:

  • , <azurerm_mysql_flexible_server>ve <mysql_flexible_server_database_name> değerleri <resource_group_name>çıktıda terraform apply görüntülenir. Bu değerleri görüntülemek için terraform output komutunu da çalıştırabilirsiniz.

Kaynakları temizleme

Terraform aracılığıyla oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:

  1. terraform planını çalıştırın ve bayrağını destroy belirtin.

    terraform plan -destroy -out main.destroy.tfplan
    

    Önemli noktalar:

    • komutu terraform plan bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar.
    • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin -out kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
  2. Yürütme planını uygulamak için terraform apply komutunu çalıştırın.

    terraform apply main.destroy.tfplan
    

Azure'da Terraform sorunlarını giderme

Azure'da Terraform'u kullanmaya yönelik yaygın sorunları gidermeyi keşfedin.

Sonraki adım