Настройка бэкенда
Бэкенд определяет, где OpenTofu хранит файлы данных состояния.
OpenTofu использует сохранённые данные состояния для отслеживания ресурсов, которыми он управляет. Большинство нетривиальных конфигураций OpenTofu либо интегрируются с TACOS (программным обеспечением для автоматизации и совместной работы с TF), либо используют бэкенд для удалённого хранения состояния. Это позволяет нескольким пользователям получать доступ к данным состояния и совместно работать с набором ресурсов инфраструктуры.
На этой странице описано, как настроить бэкенд, добавив в конфигурацию блок backend.
Доступные бэкенды
По умолчанию OpenTofu использует бэкенд под названием local, который хранит состояние в виде локального файла на диске. Вы также можете настроить один из встроенных бэкендов, описанных в этой документации.
Некоторые из этих бэкендов работают как обычные удалённые диски для файлов состояния, а другие поддерживают блокировку состояния на время выполнения операций. Это помогает предотвратить конфликты и несогласованность данных. Перечисленные встроенные бэкенды — единственные доступные бэкенды. Загружать дополнительные бэкенды в виде плагинов нельзя.
Использование блока бэкенда
При использовании TACOS (программного обеспечения для автоматизации и совместной работы с TF) настраивать бэкенд не нужно, поскольку TACOS автоматически управляет состоянием в рабочих пространствах, связанных с вашей конфигурацией. Если конфигурация содержит блок cloud, она не может содержать блок backend.
Чтобы настроить бэкенд, добавьте вложенный блок backend в блок верхнего уровня terraform. В следующем примере настраивается бэкенд remote.
terraform {
backend "remote" {
organization = "example_corp"
workspaces {
name = "my-app-prod"
}
}
}У конфигурации бэкенда есть несколько важных ограничений:
- Конфигурация может содержать только один блок бэкенда.
- Блок бэкенда не может ссылаться на значения из состояния или локальные значения, вычисляемые на основе состояния (атрибуты источников данных).
Учётные данные и конфиденциальная информация
Бэкенды хранят состояние в удалённом сервисе, что позволяет нескольким пользователям получать к нему доступ. Для доступа к удалённому состоянию обычно требуются учётные данные, поскольку данные состояния содержат крайне конфиденциальную информацию.
Рекомендуем передавать учётные данные и другую конфиденциальную информацию с помощью переменных среды. Если вы используете -backend-config или жёстко задаёте эти значения непосредственно в конфигурации, OpenTofu включит их в подкаталог .terraform и файлы плана. Это может привести к утечке конфиденциальных учётных данных.
OpenTofu записывает конфигурацию бэкенда в виде обычного текста в два отдельных файла.
- Файл
.terraform/terraform.tfstateсодержит конфигурацию бэкенда для текущего рабочего каталога. - Все файлы плана сохраняют сведения из
.terraform/terraform.tfstateна момент создания плана. Это помогает убедиться, что OpenTofu применяет план к правильному набору ресурсов инфраструктуры.
При применении плана, ранее сохранённого в файл, OpenTofu использует конфигурацию бэкенда, сохранённую в этом файле, а не текущие настройки бэкенда. Если эта конфигурация содержит учётные данные с ограниченным сроком действия, срок их действия может истечь до завершения применения плана. Если между этапами планирования и применения необходимо использовать разные значения, передавайте учётные данные с помощью переменных среды.
Типы бэкендов
Метка блока бэкенда ("remote" в примере выше) указывает, какой тип бэкенда следует использовать. В OpenTofu имеется набор встроенных бэкендов, и настроенный бэкенд должен быть доступен в используемой вами версии OpenTofu.
Аргументы в теле блока зависят от выбранного типа бэкенда: они задают, где и как бэкенд будет хранить состояние конфигурации, а в некоторых случаях определяют и другие параметры поведения.
Некоторые бэкенды позволяют указывать учётные данные непосредственно в конфигурации для использования в нестандартных ситуациях. Однако при обычном использовании мы не рекомендуем включать учётные данные в конфигурацию бэкенда. Вместо этого оставьте эти аргументы незаданными и предоставляйте учётные данные с помощью файлов учётных данных или переменных среды, принятых в целевой системе, как описано в документации каждого бэкенда.
Полную информацию и список аргументов конфигурации для каждого типа см. на странице соответствующего бэкенда.
Бэкенд по умолчанию
Если конфигурация не содержит блока бэкенда, OpenTofu по умолчанию использует бэкенд local, который хранит состояние в виде обычного файла в текущем рабочем каталоге.
Инициализация
При изменении конфигурации бэкенда необходимо снова выполнить tofu init, чтобы проверить и настроить бэкенд, прежде чем создавать или применять планы либо выполнять операции с состоянием.
После инициализации OpenTofu создаёт локальный каталог .terraform/. В этом каталоге хранится последняя конфигурация бэкенда, включая все параметры аутентификации, переданные интерфейсу командной строки OpenTofu. Не добавляйте этот каталог в Git, поскольку в нём могут содержаться конфиденциальные учётные данные для удалённого бэкенда.
Локальная конфигурация бэкенда отличается от файла terraform.tfstate, содержащего данные состояния о вашей реальной инфраструктуре, и полностью от него отделена. OpenTofu хранит файл terraform.tfstate в удалённом бэкенде.
При смене бэкенда OpenTofu предлагает перенести состояние в новый бэкенд. Это позволяет перейти на другой бэкенд, не теряя существующее состояние.
Перед переходом на новый бэкенд настоятельно рекомендуем вручную создать резервную копию состояния, скопировав файл terraform.tfstate в другое место.
Частичная конфигурация
Необязательно указывать все обязательные аргументы в конфигурации бэкенда. Некоторые аргументы можно не указывать, если их автоматически предоставляет скрипт автоматизации, запускающий OpenTofu. Если часть аргументов или все они не указаны, такую конфигурацию называют частичной конфигурацией.
При частичной конфигурации оставшиеся аргументы необходимо передать в ходе процесса инициализации.
Оставшиеся аргументы можно передать несколькими способами:
-
Файл: Файл конфигурации можно указать в командной строке
init. Чтобы указать файл, используйте параметр-backend-config=PATHпри запускеtofu init. Если файл содержит секреты, его можно хранить в защищённом хранилище данных, например в Vault. В этом случае перед запуском OpenTofu файл необходимо загрузить на локальный диск. -
Пары ключ/значение в командной строке: Пары ключ/значение можно указать в командной строке
init. Учтите, что многие оболочки сохраняют аргументы командной строки в файл истории, поэтому этот способ не рекомендуется для передачи секретов. Чтобы указать одну пару ключ/значение, используйте параметр-backend-config="KEY=VALUE"при запускеtofu init. -
Интерактивно: OpenTofu запросит необходимые значения в интерактивном режиме, если ввод данных не отключён. Запросы для необязательных значений выводиться не будут.
Если настройки бэкенда указаны в нескольких местах, параметры верхнего уровня объединяются: параметры командной строки переопределяют настройки основной конфигурации, после чего параметры командной строки обрабатываются по порядку, причём более поздние параметры переопределяют значения, заданные ранее.
Итоговая объединённая конфигурация сохраняется на диске в каталоге .terraform, который следует исключить из системы контроля версий. Это позволяет не включать конфиденциальную информацию в систему контроля версий, однако при запуске OpenTofu она будет храниться в виде обычного текста на локальном диске.
При использовании частичной конфигурации OpenTofu требует как минимум указать пустую конфигурацию бэкенда в одном из корневых файлов конфигурации OpenTofu, чтобы определить тип бэкенда. Например:
terraform {
backend "consul" {}
}Файл
Файл конфигурации бэкенда содержит атрибуты блока backend на верхнем уровне; заключать их в другой блок tofu или backend не нужно:
address = "demo.consul.io" path = "example_app/terraform_state" scheme = "https"
Рекомендуется использовать шаблон имени *.backendname.tfbackend (например, config.consul.tfbackend). OpenTofu не запрещает использовать другие имена, но соблюдение этого соглашения поможет редактору распознать содержимое и, вероятно, обеспечит более удобное редактирование.
Пары ключ/значение в командной строке
Те же настройки можно указать в командной строке следующим образом:
$ tofu init \
-backend-config="address=demo.consul.io" \
-backend-config="path=example_app/terraform_state" \
-backend-config="scheme=https"Для бэкенда Consul также требуется токен доступа Consul. В соответствии с приведённой выше рекомендацией не включать учётные данные в конфигурацию, а использовать другие механизмы, токен Consul следует передать, задав переменную среды CONSUL_HTTP_TOKEN или CONSUL_HTTP_AUTH. О том, как передавать учётные данные выбранному бэкенду вне его основной конфигурации, см. в документации этого бэкенда.
Переменные и локальные значения
В конфигурациях бэкенда можно использовать переменные и локальные значения (с ограничениями). Конфигурация бэкенда не может содержать ссылок на данные из состояния или функции, определённые поставщиком. Все значения должны разрешаться во время tofu init, пока состояние ещё недоступно.
Не рекомендуем использовать переменные для указания секретов и другой конфиденциальной информации в конфигурации бэкенда. При неправильной настройке это может привести к утечке конфиденциальных учётных данных.
locals {
region = "us-east-1"
}
terraform {
backend "s3" {
region = local.region
}
}Изменение конфигурации
Конфигурацию бэкенда можно изменить в любое время. Можно изменить как саму конфигурацию, так и тип бэкенда (например, с "consul" на "s3").
OpenTofu автоматически обнаружит любые изменения конфигурации и предложит выполнить повторную инициализацию. В процессе повторной инициализации OpenTofu спросит, хотите ли вы перенести существующее состояние в новую конфигурацию. Это позволяет легко перейти с одного бэкенда на другой.
Если вы используете несколько рабочих пространств, OpenTofu может скопировать их все в целевое расположение. Если OpenTofu обнаружит несколько рабочих пространств, он спросит, нужно ли это сделать.
Даже если вы просто перенастраиваете тот же бэкенд, OpenTofu спросит, хотите ли вы перенести состояние. В этом случае можно ответить «нет».
Отключение бэкенда
Если вы больше не хотите использовать бэкенд, просто удалите его конфигурацию из файла. OpenTofu обнаружит это изменение и предложит выполнить повторную инициализацию.
В процессе повторной инициализации OpenTofu спросит, хотите ли вы перенести состояние обратно в обычное локальное хранилище. После завершения OpenTofu снова будет работать так же, как и по умолчанию.
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/configuration/