Тип бэкенда: pg
Хранит состояние в базе данных Postgres версии 10 или новее.
Этот бэкенд поддерживает блокировку состояния.
Пример конфигурации
terraform {
backend "pg" {
conn_str = "postgres://user:pass@db.example.com/tofu_backend"
}
}Перед инициализацией бэкенда с помощью tofu init база данных уже должна существовать:
createdb tofu_backend
Эта команда createdb доступна в клиентских приложениях Postgres, которые устанавливаются вместе с сервером базы данных.
Использование переменных среды
Рекомендуем использовать переменные среды для настройки бэкенда pg, чтобы конфиденциальные учетные данные не записывались на диск и не попадали в систему контроля версий.
Бэкенд pg поддерживает стандартные переменные среды libpq.
Бэкенд можно настроить, указав всю конфигурацию в переменной среды:
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; URLpostgres://. Для указания способа подключения к базе данных PostgreSQL также можно использоватьPG_CONN_STRи стандартные переменные средыlibpq. -
schema_name— имя автоматически управляемой схемы Postgres; по умолчанию используетсяterraform_remote_state. Также можно задать с помощью переменной средыPG_SCHEMA_NAME. -
skip_schema_creation— если задано значениеtrue, схема Postgres должна уже существовать. Также можно задать с помощью переменной средыPG_SKIP_SCHEMA_CREATION. OpenTofu не будет пытаться создать схему. Это полезно, если ее уже создал администратор базы данных. -
skip_table_creation— если задано значениеtrue, таблица Postgres должна уже существовать. Также можно задать с помощью переменной средыPG_SKIP_TABLE_CREATION. OpenTofu не будет пытаться создать таблицу. Это полезно, если ее уже создал администратор базы данных. -
skip_index_creation— если задано значениеtrue, индекс Postgres должен уже существовать. Также можно задать с помощью переменной средыPG_SKIP_INDEX_CREATION. OpenTofu не будет пытаться создать индекс. Это полезно, если его уже создал администратор базы данных.
Техническое устройство
Этот бэкенд создает одну таблицу states в автоматически управляемой схеме Postgres, заданной переменной schema_name.
Ключом таблицы служит имя рабочей области. Если рабочие области не используются, применяется имя default.
Блокировка поддерживается с помощью консультативных блокировок Postgres. Команда force-unlock не поддерживается, поскольку эти встроенные в базу данных блокировки автоматически снимаются при прерывании сеанса или сбое соединения. Чтобы просмотреть незавершенные блокировки на сервере Postgres, используйте системное представление pg_locks.
Таблица states содержит:
- целое число с автоинкрементом
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.9/language/settings/backends/pg/