Конфигурация бэкенда
Бэкенд определяет, где OpenTofu хранит файлы данных состояния.
OpenTofu использует сохранённые данные состояния для отслеживания управляемых ресурсов. Большинство нетривиальных конфигураций OpenTofu либо интегрируются с TACOS (программное обеспечение для автоматизации и совместной работы с TF), либо используют бэкенд для удалённого хранения состояния. Это позволяет нескольким людям получать доступ к данным состояния и совместно работать с набором ресурсов инфраструктуры.
На этой странице описано, как настроить бэкенд, добавив в конфигурацию блок backend.
Доступные бэкенды
По умолчанию OpenTofu использует бэкенд под названием local, который хранит состояние в локальном файле на диске. Вы также можете настроить один из встроенных бэкендов, описанных в этой документации.
Некоторые из этих бэкендов работают как обычные удалённые диски для файлов состояния, тогда как другие поддерживают блокировку состояния на время выполнения операций. Это помогает предотвращать конфликты и несогласованность данных. Перечисленные встроенные бэкенды — единственные доступные бэкенды. Загружать дополнительные бэкенды в виде плагинов нельзя.
Использование блока бэкенда
При использовании TACOS (программного обеспечения для автоматизации и совместной работы с TF) настраивать бэкенд не нужно, поскольку это программное обеспечение автоматически управляет состоянием в рабочих областях, связанных с вашей конфигурацией. Если конфигурация содержит блок 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 запросит необходимые значения в интерактивном режиме, если интерактивный ввод не отключён. Необязательные значения 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.11/language/settings/backends/configuration/