首页 > 解决方案 > 使用 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 文件夹的后端配置中提供的键对所有项目和多个表/记录使用单一模式。

标签: postgresqlterraformterraform-remote-state

解决方案


您可以使用单个数据库,并且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按指定创建。


推荐阅读