如何通过Terraform设置GCP CloudSQL

Jed*_*nkz 3 terraform

我想通过terraform设置GCP CloudSQL。我正在阅读此文档。(https://www.terraform.io/docs/providers/google/r/sql_database_instance.html

我用这样的代码执行“地形计划”。

resource "google_sql_database_instance" "master" {
    name             = "terraform-master"
    region           = "asia-northeasteast1"
    database_version = "MYSQL_5_6"
    project          = "test-141901"

    settings {
        tier = "db-f1-micro"
        replication_type = "SYNCHRONOUS"
        backup_configuration {
            enabled = true
            start_time = "17:00"
        }
        ip_configuration {
            ipv4_enabled = true
        }
        database_flags {
                name = "slow_query_log"
                value = "on"
                name = "character_set_server"
                value = "utf8mb4"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法设置MULTIPLE database_flags

settings.0.database_flags.#:                  "1"
settings.0.database_flags.0.name:             "character_set_server"
settings.0.database_flags.0.value:            "utf8mb4"
Run Code Online (Sandbox Code Playgroud)

如何使用多个database_flags设置CloudSQL?我无法理解该文档中的“子列表支持”。

Rya*_*n E 5

您应该可以通过使用多个database_flags块来执行此操作:

resource "google_sql_database_instance" "master" {
  name             = "terraform-master"
  region           = "us-central1"
  database_version = "MYSQL_5_6"
  project          = "test-project"

  settings {
    tier             = "db-f1-micro"
    replication_type = "SYNCHRONOUS"

    backup_configuration {
      enabled    = true
      start_time = "17:00"
    }

    ip_configuration {
      ipv4_enabled = true
    }

    database_flags {
      name  = "slow_query_log"
      value = "on"
    }

    database_flags {
      name  = "character_set_server"
      value = "utf8mb4"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是terraform plan上述tf 的输出:

+ google_sql_database_instance.master
    database_version:                             "MYSQL_5_6"
    ip_address.#:                                 "<computed>"
    name:                                         "terraform-master"
    project:                                      "test-project"
    region:                                       "us-central1"
    self_link:                                    "<computed>"
    settings.#:                                   "1"
    settings.0.backup_configuration.#:            "1"
    settings.0.backup_configuration.0.enabled:    "true"
    settings.0.backup_configuration.0.start_time: "17:00"
    settings.0.database_flags.#:                  "2"
    settings.0.database_flags.0.name:             "slow_query_log"
    settings.0.database_flags.0.value:            "on"
    settings.0.database_flags.1.name:             "character_set_server"
    settings.0.database_flags.1.value:            "utf8mb4"
    settings.0.ip_configuration.#:                "1"
    settings.0.ip_configuration.0.ipv4_enabled:   "true"
    settings.0.replication_type:                  "SYNCHRONOUS"
    settings.0.tier:                              "db-f1-micro"
    settings.0.version:                           "<computed>"
Run Code Online (Sandbox Code Playgroud)


Car*_*lid 5

我想这个答案详细说明,因为我需要生成database_flags基于输入-块。假设你有一个变量

variable "database-flags" {
  type    = "map"
  default = {
    character_set_server = "utf8mb4"
    slow_query_log = "on"
  }
}
Run Code Online (Sandbox Code Playgroud)

使用terraform v0.12.X这个可以写成

resource "google_sql_database_instance" "master" {
  name             = "terraform-master"
  region           = "us-central1"
  database_version = "MYSQL_5_6"
  project          = "test-project"

  settings {
    tier             = "db-f1-micro"
    replication_type = "SYNCHRONOUS"

    backup_configuration {
      enabled    = true
      start_time = "17:00"
    }

    ip_configuration {
      ipv4_enabled = true
    }

    dynamic "database_flags" {
      iterator = flag
      for_each = var.database-flags

      content {
        name = flag.key
        value = flag.value
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用上述模式,您可以使用代码的数据库创建部分作为模块,让消费者决定应该设置哪些标志