Spec-Zone.ru › OpenTofu 1.9

Конфигурация бэкенда

Бэкенд определяет, где 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 запросит необходимые значения в интерактивном режиме, если ввод не отключён. Необязательные значения 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.9/language/settings/backends/configuration/

Spec-Zone.ru

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