在 AWS RDS 集群实例上使用 Terraform 预置多个逻辑数据库

Provision multiple logical databases with Terraform on AWS RDS cluster instance

所以,我已经配置了一个 RDS MySql 实例的 Aurora MySql 集群。障碍发生在 AWS 底层 API 只允许创建 1 个逻辑数据库。因此,我想知道你们中是否有人已经有过此类部署的经验,因为我 运行 不必为此步骤使用 Mysql 客户端 CLI,如果可能的话真的很想自动化它。有什么想法吗?

AWS API 不支持你想做的事情,因此 Terraform 没有它。一些可能的解决方法:

让 Terraform 在配置过程中执行 local-exec。您可以使用它来调用 SQL 客户端来连接并创建第二个数据库。

拥有连接到 RDS 实例并根据需要设置数据库的 Lambda 函数。在部署 RDS 后触发 Lambda。

让您的应用程序检查数据库并创建它们。

为每个数据库创建一个集群(这通常是 AWS 想要的)。

Terraform 有一个 Myql 提供程序https://www.terraform.io/docs/providers/mysql/index.html:

# Configure the MySQL provider
provider "mysql" {
  endpoint = "my-database.example.com:3306"
  username = "app-user"
  password = "app-password"
}

# Create a Database
resource "mysql_database" "app" {
  name = "my_awesome_app"
}

因此您可以创建您的 AWS 数据库 cluster/instance,然后使用 mysql 提供商创建另一个数据库:

# Create a database server
resource "aws_db_instance" "default" {
  engine         = "mysql"
  engine_version = "5.6.17"
  instance_class = "db.t1.micro"
  name           = "initial_db"
  username       = "rootuser"
  password       = "rootpasswd"

  # etc, etc; see aws_db_instance docs for more
}

# Configure the MySQL provider based on the outcome of
# creating the aws_db_instance.
provider "mysql" {
  endpoint = "${aws_db_instance.default.endpoint}"
  username = "${aws_db_instance.default.username}"
  password = "${aws_db_instance.default.password}"
}

# Create a second database, in addition to the "initial_db" created
# by the aws_db_instance resource above.
resource "mysql_database" "app" {
  name = "another_db"
}