如何使用terraform设置GCP CloudSQL

13

我希望能够通过Terraform设置GCP CloudSQL。我正在阅读这个文档 (https://www.terraform.io/docs/providers/google/r/sql_database_instance.html)。

我使用以下代码执行了"terraform plan"。

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"
        }
    }
}

但我无法设置多个database_flags

settings.0.database_flags.#:                  "1"
settings.0.database_flags.0.name:             "character_set_server"
settings.0.database_flags.0.value:            "utf8mb4"
我该如何使用多个database_flags设置CloudSQL?我不理解文档中的"sublist support"。
2个回答

13

您可以通过使用多个 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"
    }
  }
}

以下是使用上述 Terraform 文件运行 terraform plan 命令的输出结果:

+ 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>"

9

我希望进一步阐述这个答案,因为我需要根据输入生成database_flags块。假设您有一个变量

variable "database-flags" {
  type    = "map"
  default = {
    character_set_server = "utf8mb4"
    slow_query_log = "on"
  }
}

使用 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
      }
    }
  }
}

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

谢谢这个。这正是我在寻找的东西。 - Dinesh Reddy Parne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接