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

Posted

技术标签:

【中文标题】在 AWS RDS 集群实例上使用 Terraform 预置多个逻辑数据库【英文标题】:Provision multiple logical databases with Terraform on AWS RDS cluster instance 【发布时间】:2019-03-03 16:17:32 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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 数据库集群/实例,然后使用 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"

【讨论】:

我也在某些设置中使用它。我唯一不喜欢的是执行 Terraform 的计算机需要对数据库进行网络访问。并非总是如此,您/我们想要什么。 闪亮的 AWSy 方法可能是创建一个 lambda 来为您运行代码并拥有正确的安全组.. 但好吧.. 也不太令人信服。 在使用 host = aws_db_instance.default.endpoint 时想知道为什么这对 postgres 不起作用(在更改所有其他设置以匹配 postgresql 提供程序之后),但后来意识到它应该是 host = aws_db_instance.default.address .【参考方案2】:

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

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

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

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

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

【讨论】:

以上是关于在 AWS RDS 集群实例上使用 Terraform 预置多个逻辑数据库的主要内容,如果未能解决你的问题,请参考以下文章

AWS-CLI:在从快照创建的现有集群中创建 RDS Aurora 数据库实例

AWS Aurora RDS 中的集群和实例有啥区别

AWS RDS 大型实例上的 MySQL 全文搜索速度极慢

如何在不停机的情况下更改 AWS-RDS 实例类型?

将 EC2 实例连接到另一个 AWS 账户上的 RDS 卷

如何在 AWS elasticbeanstalk 上删除环境而不删除 RDS