postgresql - 使用 postgres 构建远程后端
问题描述
我计划使用远程后端作为 postgres 而不是 s3 作为企业标准。
terraform {
backend "pg" {
conn_str = "postgres://user:pass@db.example.com/schema_name"
}
}
当我们使用 postgres 远程后端时,当我们运行 terraform init 时,我们必须提供特定于该 terraform 文件夹的模式,因为后端仅支持一个表,并且将使用工作空间名称创建新记录。
我现在卡住了,因为我有 50 个项目,每个项目都有 2 层,维护在不同的文件夹中,那么我们需要在 postgres 中创建 100 个模式。此外,在自动配置中处理如此多的模式也很困难。
我们可以处理类似于 S3 的事情吗,我们有一个用于所有项目的存储桶,并且在同一个存储桶中有多个条目,具有在每个 terraform 脚本中指定的不同键。我们能否根据每个 terraform 文件夹的后端配置中提供的键对所有项目和多个表/记录使用单一模式。
解决方案
您可以使用单个数据库,并且pg提供程序将自动创建指定的模式。
像这样的东西:
terraform {
backend "pg" {
conn_str = "postgres://user:pass@db.example.com/terraform_backend"
schema = "fooapp"
}
}
至少,这使项目保持独特性。你也可以在上面附加一个层,或者使用 Terraform 工作区。
如果您按照提供者的建议在命令行上指定配置(也称为部分配置),则可能更容易为您的用例动态设置:
terraform init \
-backend-config="conn_str=postgres://user:pass@db.example.com/terraform_backend" \
-backend-config="schema=fooapp-prod"
这在我的场景中效果很好,类似于你的场景。每个项目在共享数据库中都有一个唯一的模式,并且不需要数据库的初始创建/配置之外的任何任务 - 提供者schema
按指定创建。
推荐阅读
- microsoft-edge - 使用 MS Edge / Trac 迁移服务器后出现奇怪问题
- html - 如何将 3 个框居中以匹配屏幕分辨率?
- firebase - 在 Firebase 上设置嵌套地图的模型 (json_annotation.dart)
- assembly - RISC-V 汇编语法中的混合目标/源操作数顺序
- python - 在列表中使用运算符 =
- javascript - 我在 register_post_type 中有问题的 wordpress 功能
- react-native - 反应原生 | 循环渲染 FlatList 的项目
- html - Promise.all 没有在 React 中加载图像以在 HTML Canvas 中使用
- javascript - 如何防止桌面应用程序模仿浏览器请求?
- node.js - Express-graphql“在运行突变和查询时无法使用 mongodb 读取未定义的属性‘集合’”