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

eas*_*ood 6 database amazon-web-services terraform amazon-aurora terraform-provider-aws

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

Jon*_*han 11

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"
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以创建您的 AWS 数据库集群/实例,然后使用 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"
}
Run Code Online (Sandbox Code Playgroud)

  • 我也在一些设置中使用它。我唯一不喜欢它的是执行 Terraform 的计算机需要网络访问数据库。并不总是您/我们想要的。 (3认同)
  • 闪亮的 AWSy 方法可能是创建一个 lambda 来为您运行代码并具有正确的安全组..但是……也不太令人信服。 (3认同)
  • 花了很长时间想知道为什么在使用“host = aws_db_instance.default.endpoint”时这对 postgres 不起作用(在更改所有其他设置以匹配 postgresql 提供程序之后),但后来意识到它应该是“host = aws_db_instance”。默认地址`。 (2认同)