使用postgres的terraform远程后端

时间:2020-10-22 19:31:33

标签: postgresql terraform terraform-remote-state

我计划将远程后端用作Postgres,而不是将s3作为企业标准。

terraform {
  backend "pg" {
   conn_str = "postgres://user:pass@db.example.com/schema_name"
}
}

当使用postgres远程后端时,当我们运行terraform init时,我们必须提供特定于该terraform文件夹的架构,因为后端仅支持一个表,并且将使用工作空间名称创建新记录。

我现在陷入困境,因为我有50个项目,每个项目都有2层,分别保存在不同的文件夹中,那么我们需要在postgres中创建100个模式。同样,在自动配置中很难处理这么多模式。

我们可以处理类似于S3的东西吗?在S3中,我们为所有项目提供一个存储桶,并且在同一存储桶中有多个条目,每个条目都在每个Terraform脚本中指定了不同的键。我们能否基于每个terraform文件夹的后端配置中提供的键,对所有项目使用单一架构,对多个表/记录使用

1 个答案:

答案 0 :(得分:0)

您可以使用单个数据库pg 提供程序将自动创建一个指定的架构

像这样:

terraform {
  backend "pg" {
    conn_str = "postgres://user:pass@db.example.com/terraform_backend"
    schema   = "fooapp"
  }
}

这至少使项目保持独特。您也可以为其附加一个层,或使用 Terraform 工作区。

如果您在命令行上指定配置(也称为部分配置),作为 provider recommends,它可能更容易为您的用例动态设置:

terraform init \
  -backend-config="conn_str=postgres://user:pass@db.example.com/terraform_backend" \
  -backend-config="schema=fooapp-prod"

这在我与您类似的场景中效果很好。每个项目在共享数据库中都有一个唯一的架构,除了数据库的初始创建/配置之外,不需要任何任务 - 提供者按照指定创建 schema