在 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 预置多个逻辑数据库的主要内容,如果未能解决你的问题,请参考以下文章