后端类型:pg
将状态存储在 PostgreSQL 数据库 版本 10 或更高版本中。
此后端支持 状态锁定。
示例配置
terraform {
backend "pg" {
conn_str = "postgres://user:[email protected]/tofu_backend"
}
}
在使用 tofu init
初始化后端之前,数据库必须已经存在
createdb tofu_backend
此 createdb
命令位于 PostgreSQL 客户端应用程序 中,这些应用程序与数据库服务器一起安装。
使用环境变量
建议使用环境变量来配置 pg
后端,以避免将敏感凭据写入磁盘并提交到源代码管理。
pg
后端支持标准 libpq
环境变量。
可以通过将整个配置作为环境变量提供来配置后端
terraform {
backend "pg" {}
}
$ export PG_CONN_STR=postgres://user:[email protected]/tofu_backend
$ tofu init
或者仅配置敏感参数
terraform {
backend "pg" {
conn_str = "postgres://db.example.com/tofu_backend"
}
}
$ export PGUSER=user
$ read -s PGPASSWORD
$ export PGPASSWORD
$ tofu init
数据源配置
要在另一个配置中使用 pg 远程状态,请使用 terraform_remote_state
数据源。
data "terraform_remote_state" "network" {
backend = "pg"
config = {
conn_str = "postgres://localhost/tofu_backend"
}
}
配置变量
警告
建议使用环境变量来提供凭据和其他敏感数据。如果您使用 -backend-config
或直接在您的配置中硬编码这些值,OpenTofu 将在 .terraform
子目录和计划文件中都包含这些值。有关详细信息,请参阅 凭据和敏感数据。
支持以下配置选项或环境变量
conn_str
- PostgreSQL 连接字符串;一个postgres://
URL。PG_CONN_STR
和 标准libpq
环境变量也可以用来指示如何连接到 PostgreSQL 数据库。schema_name
- 自动管理的 PostgreSQL 架构的名称,默认为terraform_remote_state
。也可以使用PG_SCHEMA_NAME
环境变量设置。skip_schema_creation
- 如果设置为true
,则 PostgreSQL 架构必须已经存在。也可以使用PG_SKIP_SCHEMA_CREATION
环境变量设置。OpenTofu 不会尝试创建架构,这在数据库管理员已经创建了架构时很有用。skip_table_creation
- 如果设置为true
,则 PostgreSQL 表必须已经存在。也可以使用PG_SKIP_TABLE_CREATION
环境变量设置。OpenTofu 不会尝试创建表,这在数据库管理员已经创建了表时很有用。skip_index_creation
- 如果设置为true
,则 PostgreSQL 索引必须已经存在。也可以使用PG_SKIP_INDEX_CREATION
环境变量设置。OpenTofu 不会尝试创建索引,这在数据库管理员已经创建了索引时很有用。
技术设计
此后端在 schema_name
变量配置的自动管理的 PostgreSQL 架构中创建了一个名为 states 的表。
该表以 工作区 名称作为键。如果未使用工作区,则使用名称 default
。
锁定通过 PostgreSQL 咨询锁 支持。不支持 force-unlock
,因为这些数据库本机锁将在会话中止或连接失败时自动解锁。若要查看 PostgreSQL 服务器中的未决锁,请使用 pg_locks
系统视图。
states 表包含
- 一个序列整数
id
,用作咨询锁的键 - 工作区
name
键作为文本,具有唯一索引 - OpenTofu 状态
data
作为文本