Spec-Zone.ru › OpenTofu 1.11

Тип бэкенда: 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.11/language/settings/backends/pg/

Spec-Zone.ru

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