Тип backend-а: pg
Хранит состояние в базе данных Postgres версии 10 или новее.
Этот backend поддерживает блокировку состояния.
В OpenTofu 1.10 изменился способ блокировки при создании рабочих пространств. Небезопасно параллельно использовать backend pg в нескольких версиях OpenTofu (ниже 1.10), если они работают с одной и той же базой данных.
Пример конфигурации
terraform {
backend "pg" {
conn_str = "postgres://user:pass@db.example.com/tofu_backend"
}
}Перед инициализацией backend с помощью tofu init база данных уже должна существовать:
createdb tofu_backend
Эта команда createdb доступна в клиентских приложениях Postgres, которые устанавливаются вместе с сервером базы данных.
Использование переменных среды
Мы рекомендуем использовать переменные среды для настройки backend pg, чтобы конфиденциальные учетные данные не записывались на диск и не попадали в систему контроля версий.
Backend pg поддерживает стандартные переменные среды libpq.
Backend можно настроить, передав всю конфигурацию в виде переменной среды:
terraform {
backend "pg" {}
}$ export PG_CONN_STR=postgres://user:pass@db.example.com/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— строка подключения Postgres; URL типаpostgres://. Для указания способа подключения к базе данных PostgreSQL также можно использоватьPG_CONN_STRи стандартные переменные средыlibpq. -
schema_name— имя автоматически управляемой схемы Postgres; по умолчаниюterraform_remote_state. Также можно задать с помощью переменной средыPG_SCHEMA_NAME. -
skip_schema_creation— если задано значениеtrue, схема Postgres должна уже существовать. Также можно задать с помощью переменной средыPG_SKIP_SCHEMA_CREATION. OpenTofu не будет пытаться создать схему. Это полезно, если ее уже создал администратор базы данных. -
table_name— имя автоматически управляемой таблицы Postgres; по умолчаниюstates. Также можно задать с помощью переменной средыPG_TABLE_NAME. -
skip_table_creation— если задано значениеtrue, таблица Postgres должна уже существовать. Также можно задать с помощью переменной средыPG_SKIP_TABLE_CREATION. OpenTofu не будет пытаться создать таблицу. Это полезно, если ее уже создал администратор базы данных. -
index_name— имя автоматически управляемого индекса Postgres; по умолчаниюstates_by_name. Также можно задать с помощью переменной средыPG_INDEX_NAME. -
skip_index_creation— если задано значениеtrue, индекс Postgres должен уже существовать. Также можно задать с помощью переменной средыPG_SKIP_INDEX_CREATION. OpenTofu не будет пытаться создать индекс. Это полезно, если его уже создал администратор базы данных.
Обратите внимание: если изменить table_name или schema_name, существующие данные состояния потребуется перенести вручную.
Техническое устройство
Этот backend создает таблицу с именем, заданным параметром table_name, в автоматически управляемой схеме Postgres, настроенной с помощью переменной schema_name.
Ключом таблицы служит имя рабочего пространства. Если рабочие пространства не используются, применяется имя default.
Блокировка поддерживается с помощью консультативных блокировок Postgres. Команда force-unlock не поддерживается, поскольку эти встроенные в базу данных блокировки снимаются автоматически при прерывании сеанса или сбое подключения. Чтобы просмотреть активные блокировки на сервере Postgres, используйте системное представление pg_locks.
Консультативные блокировки используются в нескольких случаях: при обновлении состояния и создании состояния. При обновлении состояния консультативная блокировка устанавливается по идентификатору состояния. При создании состояния (и рабочего пространства) она устанавливается по хешу имени схемы. Благодаря этому несколько конфигураций backend не влияют друг на друга при совместном использовании базы данных.
Таблица, используемая для хранения состояния, содержит:
- целочисленный автоинкрементный идентификатор
id, используемый как ключ для консультативных блокировок - ключ
nameрабочего пространства типа text с уникальным индексом - состояние OpenTofu
dataтипа text
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.10/language/settings/backends/pg/