Spec-Zone.ru › OpenTofu 1.10

Тип 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/

Spec-Zone.ru

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