はじめに

Azure Database for MySQLを触る機会があったので、アウトプットとしてTerraformのコードを記載していきます。

過去シリーズ記事

とりあえずTerraformでAzure Redis for Cacheを作ってみる
とりあえずTerraformでAzure SQL Databaseを作ってみる
とりあえずTerraformでAzure Load Balancerをつくってみる
とりあえずTerraformでAzure Database for PostgreSQLをつくってみる

コード

resource "azurerm_resource_group" "test" {
  name     = "mysql-test-rg"
  location = "japaneast"
}

resource "random_integer" "test" {
  min = 1
  max = 100
}

resource "random_pet" "server" {
  length    = 1
  separator = ""
}

resource "random_password" "password" {
  length           = 16
  special          = true
  override_special = "!#%"
  min_upper        = 5
  min_lower        = 5
  min_numeric      = 5
  min_special      = 1
}

locals {
  sku_name = {
    "basic"           = "B_Gen5_2"  # Basic、Gen 5、および 2 個の仮想コア
    "generalpurpose"  = "GP_Gen5_2" # General Purpose、Gen 5、および 2 個の仮想コア
    "memoryoptimized" = "MO_Gen5_2" # Memory Optimized 5、Gen 5、および 2 個の仮想コア
  }
}

resource "azurerm_mysql_server" "master" {
  for_each = local.sku_name

  name                              = "mysql-server-${each.key}-${random_integer.test.result}"
  location                          = azurerm_resource_group.test.location
  resource_group_name               = azurerm_resource_group.test.name
  sku_name                          = each.value                      # SKU (Basic, General Purpose, Memory Optimized)
  storage_mb                        = 102400                          # ストレージの容量(MB)
  backup_retention_days             = 7                               # バックアップ保持日数
  geo_redundant_backup_enabled      = false                           # Geo 冗長サーバーのバックアップの有効化
  auto_grow_enabled                 = false                           # ストレージの自動拡張の有効化
  administrator_login               = random_pet.server.id            # 管理者ID
  administrator_login_password      = random_password.password.result # 管理者パスワード  
  version                           = "8.0"                           # MySQL Serverのバージョン
  ssl_enforcement_enabled           = false                           # SSL接続を強制するか
  ssl_minimal_tls_version_enforced  = "TLSEnforcementDisabled"        # サポートするSSLの最小バージョン
  public_network_access_enabled     = true                            # パブリックアクセスの有効化
}

内容としては、
SKUがBasic, General Purpose, Memory Optimizedの単一サーバーのMySQLを1つずつ作成しています。
(テスト目的で作成したものを流用しているのでSSL設定が無効化, パブリックアクセスが有効化されています。)

サンプルコードをGitHubに載せているので実際に立ち上げる場合はご参照ください。
https://github.com/tkhs1121/terraform-azure-sample/tree/master/mysql

各パラメーターの説明

  • name
    MySQLの名前。
  • location
    MySQLを作成する場所。
  • resource_group_name
    MySQLを作成するリソースグループの名前。
  • sku_name
    SKU (Basic, General Purpose, Memory Optimized)
  • storage_mb
    ストレージの容量(MB)
  • backup_retention_days
    バックアップ保持日数
  • geo_redundant_backup_enabled
    Geo 冗長サーバーのバックアップの有効化
  • auto_grow_enabled
    ストレージの自動拡張の有効化
  • administrator_login
    管理者ID
  • administrator_login_password
    管理者パスワード
  • version
    MySQL Serverのバージョン
  • ssl_enforcement_enabled
    SSL接続を強制するか
  • ssl_minimal_tls_version_enforced
    サポートするSSLの最小バージョン
  • public_network_access_enabled
    パブリックアクセスの有効化

詳細については下記のドキュメントをご参照ください。
Terraform 公式ドキュメント
Azure Database for MySQL とは

手順

リソースを作成する際は以下のコマンドを実行してください。

terraform init
terraform plan -out main.tfplan
terraform apply main.tfplan

さいごに

誰かのお役に立てれば幸いです。