Spec-Zone.ru › OpenTofu 1.12

Настройка бэкенда

Бэкенд определяет, где 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, содержащего данные состояния о вашей реальной инфраструктуре, и никак с ним не связана. Файл terraform.tfstate OpenTofu хранит в удалённом бэкенде.

При смене бэкенда OpenTofu предлагает перенести состояние в новый бэкенд. Это позволяет перейти на другой бэкенд, не теряя существующее состояние.

Важно

Перед переходом на новый бэкенд настоятельно рекомендуем вручную создать резервную копию состояния, скопировав файл terraform.tfstate в другое место.

Частичная конфигурация​

В конфигурации бэкенда не обязательно указывать все обязательные аргументы. Некоторые аргументы можно не указывать, если их автоматически передаёт скрипт автоматизации, запускающий OpenTofu. Если часть аргументов или все аргументы не указаны, такая конфигурация называется частичной.

При частичной конфигурации оставшиеся аргументы необходимо передать в ходе процесса инициализации.

Передать оставшиеся аргументы можно несколькими способами:

  • Файл: Файл конфигурации можно указать в командной строке init. Чтобы указать файл, используйте параметр -backend-config=PATH при запуске tofu init. Если файл содержит секреты, его можно хранить в защищённом хранилище данных, например в Vault; в этом случае перед запуском OpenTofu его необходимо загрузить на локальный диск.

  • Пары «ключ-значение» в командной строке: Пары «ключ-значение» можно указать в командной строке init. Обратите внимание, что многие командные оболочки сохраняют параметры командной строки в файл истории, поэтому не рекомендуется использовать этот способ для передачи секретов. Чтобы указать одну пару «ключ-значение», используйте параметр -backend-config="KEY=VALUE" при запуске tofu init.

  • Интерактивный ввод: OpenTofu в интерактивном режиме запросит необходимые значения, если интерактивный ввод не отключён. Необязательные значения OpenTofu запрашивать не будет.

Если параметры бэкенда указаны в нескольких местах, настройки верхнего уровня объединяются: параметры командной строки имеют приоритет над настройками основной конфигурации, а сами параметры командной строки обрабатываются по порядку — более поздние параметры переопределяют значения, заданные ранее.

Итоговая объединённая конфигурация сохраняется на диске в каталоге .terraform, который следует исключить из системы контроля версий. Это позволяет не включать конфиденциальную информацию в систему контроля версий, но при запуске 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.12/language/settings/backends/configuration/

Spec-Zone.ru

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