Spec-Zone.ru › OpenTofu 1.12

Тип бэкенда: pg

Хранит состояние в базе данных Postgres версии 10 или новее.

Этот бэкенд поддерживает блокировку состояния.

Предупреждение

В OpenTofu 1.10 изменился способ блокировки при создании рабочих пространств. Небезопасно одновременно использовать бэкенд pg с несколькими версиями OpenTofu (ниже 1.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; URL postgres://. Для указания способа подключения к базе данных PostgreSQL также можно использовать PG_CONN_STR и стандартные переменные среды libpq.
  • schema_name — имя автоматически управляемой схемы Postgres; по умолчанию — terraform_remote_state. Также можно задать с помощью переменной среды PG_SCHEMA_NAME. Схема public по-прежнему будет использоваться для последовательности, которая создает идентификаторы состояния. Подробнее см. в разделе о блокировке.
  • 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, существующие данные состояния потребуется перенести вручную.

Техническое устройство​

Этот бэкенд создает таблицу с именем, заданным в table_name, в автоматически управляемой схеме Postgres, указанной в переменной schema_name.

Ключом таблицы служит имя рабочего пространства. Если рабочие пространства не используются, применяется имя default.

Блокировка поддерживается с помощью консультативных блокировок Postgres. Команда force-unlock не поддерживается, поскольку эти встроенные в базу данных блокировки снимаются автоматически при прерывании сеанса или потере соединения. Чтобы просмотреть действующие блокировки на сервере Postgres, используйте системное представление pg_locks.

Консультативные блокировки используются в нескольких сценариях: при обновлении состояния и при создании состояния. При обновлении состояния консультативная блокировка устанавливается по идентификатору состояния. В остальных случаях, при создании состояния (и рабочего пространства), она устанавливается по хешу имени схемы. Таким образом, при использовании общей базы данных разные конфигурации бэкенда не влияют друг на друга.

Таблица, используемая для хранения состояния, содержит:

  • последовательный целочисленный идентификатор id, используемый как ключ для консультативных блокировок
  • ключ name рабочего пространства типа text с уникальным индексом
  • состояние OpenTofu data типа text

Принцип работы блокировки​

Для блокировки используются консультативные блокировки Postgres — глобальный механизм блокировки для каждой базы данных. Чтобы корректно блокировать разные конфигурации, использующие одну и ту же базу данных, последовательность Postgres, которая генерирует идентификаторы состояния, хранится в схеме public и используется всеми конфигурациями, работающими с этим экземпляром базы данных, для нужд блокировки.

Поэтому убедитесь, что у пользователя Postgres есть доступ к схеме, используемой данной конфигурацией, а также к схеме public.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/settings/backends/pg/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API