问题描述
在使用Terraform Cloud构建基础架构时,其中一个资源是一个PostgreSQL数据库。用户想知道在数据库创建后,以最佳方式填充数据库,包括创建表格和多个模式等操作。
解决方案
请注意以下操作可能涉及版本差异,以及在操作前务必做好备份。
方案1
使用RDS(Relational Database Service)时,最简单的方法可能是创建一个RDS快照模板,然后根据它创建数据库实例,就像创建AMI(Amazon Machine Image)一样。这种方法可以快速创建具有相同结构的数据库实例。
然而,如果将来对数据库结构的更新会频繁或复杂到需要使用变更部署工具,那么最好在初始部署阶段就采用这种方法。我不确定在PostgreSQL领域这些工具的成熟程度,但可以从https://dbmstools.com/categories/version-control-tools/postgresql这里找到一些相关信息。
方案2
这是用户投票表决为最佳答案的解决方案,根据这个解决方案进行完善。
用户最终选择使用cyrilgdn/postgresql
提供者来创建和销毁数据库。以下是他们的解决方案示例:
terraform {
required_providers {
hashiaws = {
source = "hashicorp/aws"
version = "~> 3.4.0"
}
postgresql = {
source = "cyrilgdn/postgresql"
version = "1.7.2"
}
}
required_version = ">= 0.13"
}
provider "postgresql" {
host = local.db_url
port = local.db_port
database = local.db_name
username = local.db_usr
password = local.db_pwd
sslmode = "disable"
connect_timeout = 15
expected_version = local.db_eng_ver
}
这个解决方案中,用户使用了cyrilgdn/postgresql
提供者来管理PostgreSQL数据库。他们定义了所需的提供者版本,以及连接数据库所需的参数,如主机、端口、数据库名称、用户名、密码等。用户指出这种方法的一个缺点是在运行Terraform的服务器上需要访问RDS管理实例的权限。
以上是根据用户提供的最佳答案完善的解决方案。根据用户的描述,他们选择了
cyrilgdn/postgresql
提供者来管理数据库,因此这可能是最适合他们的解决方案。在实际操作中,您可以根据自己的需求选择最适合的方案,并根据您的情况进行调整。如果您使用其他提供者或方法,请确保在操作前了解其用途、限制和特性。
总结
在使用Terraform Cloud创建基础架构时,如果您需要在数据库创建后填充数据,可以考虑使用RDS快照模板或者使用适合您需求的Terraform提供者来管理数据库。选择合适的方案取决于您的业务需求和技术栈。在操作前,请务必了解所选方案的特性和限制,并在实际操作前做好备份工作。