Spec-Zone.ru › OpenTofu 1.9

Тип бэкенда: gcs

Сохраняет состояние в виде объекта с настраиваемым префиксом в существующем бакете Google Cloud Storage (GCS). Бакет должен существовать до настройки бэкенда.

Этот бэкенд поддерживает блокировку состояния.

Предупреждение

Настоятельно рекомендуется включить версионирование объектов в бакете GCS, чтобы иметь возможность восстановить состояние в случае случайного удаления или ошибки пользователя.

Пример конфигурации​

Блок кода
terraform {
  backend "gcs" {
    bucket  = "tf-state-prod"
    prefix  = "tofu/state"
  }
}

Настройка источника данных​

Блок кода
data "terraform_remote_state" "foo" {
  backend = "gcs"
  config = {
    bucket  = "tofu-state"
    prefix  = "prod"
  }
}

resource "local_file" "foo" {
  content  = data.terraform_remote_state.foo.outputs.greeting
  filename = "${path.module}/outputs.txt"
}

Аутентификация​

Изменения IAM для бакетов становятся согласованными не сразу; вступление изменений в силу может занять несколько минут. До этого момента OpenTofu будет возвращать ошибки 403.

Запуск OpenTofu на рабочей станции.​

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

Срок действия пользовательских ADC истекает; их можно обновить, выполнив gcloud auth application-default login.

Запуск OpenTofu в Google Cloud​

Если вы запускаете OpenTofu в Google Cloud, настройте экземпляр или кластер для использования сервисного аккаунта Google. Это позволит OpenTofu проходить аутентификацию в Google Cloud без добавления отдельного файла учетных данных или аутентификации. Убедитесь, что для области действия ВМ/кластера задано значение cloud-platform.

Запуск OpenTofu за пределами Google Cloud​

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

Имитация сервисных аккаунтов​

OpenTofu может имитировать сервисный аккаунт Google, как описано здесь. Необходимо предоставить действительные учетные данные, как указано в предыдущем разделе; у этой учетной записи должна быть роль roles/iam.serviceAccountTokenCreator для сервисного аккаунта, который вы имитируете.

Шифрование​

Предупреждение

Бережно храните ключи шифрования: состояние, зашифрованное с помощью утраченного или удаленного ключа, восстановить невозможно. Если вы используете предоставленные клиентом ключи шифрования, необходимо надежно управлять ими и не допускать их утраты. Не удаляйте управляемые клиентом ключи шифрования в Cloud KMS, используемые для шифрования состояния. Однако, если вы случайно удалили ключ, в течение определенного времени его можно восстановить.

Предоставленные клиентом ключи шифрования​

Чтобы приступить к работе, следуйте этому руководству: Использование предоставленных клиентом ключей шифрования

Если вы хотите удалить предоставленные клиентом ключи из конфигурации бэкенда или заменить их другими ключами, OpenTofu не сможет автоматически перенести состояние, поэтому потребуется вмешательство вручную. Это необходимо, поскольку Google не хранит предоставленные клиентом ключи шифрования, и их нужно указывать в каждом запросе к Cloud Storage API (см. раздел Ключи шифрования, предоставленные клиентом). Во время переноса состояния сведения о старом ключе удаляются из конфигурации бэкенда, поэтому OpenTofu не сможет использовать этот ключ в процессе переноса.

Важно

Чтобы перенести состояние с использованием предоставленных клиентом ключей шифрования или изменить ключ, используемый бэкендом, выполните операцию перезаписи (CLI gsutil) или cp (CLI gcloud), чтобы удалить старый предоставленный клиентом ключ шифрования из файла состояния. После удаления шифрования можно успешно выполнить tofu init -migrate-state с новой конфигурацией бэкенда.

Управляемые клиентом ключи шифрования (Cloud KMS)​

Чтобы приступить к работе, следуйте этому руководству: Использование управляемых клиентом ключей шифрования

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

При запросах на чтение файлов из бакетов GCS управляемые клиентом ключи передавать не нужно, поскольку GCS выполняет расшифровку автоматически. Это означает, что при использовании terraform_remote_state источника данных для доступа к состоянию, зашифрованному с помощью KMS, указывать ключ KMS в объекте config источника данных не требуется.

Важно

Чтобы использовать управляемые клиентом ключи шифрования, создайте ключ и предоставьте сервисному агенту GCS вашего проекта разрешение на его использование, назначив предопределенную роль Cloud KMS CryptoKey Encrypter/Decrypter.

Переменные конфигурации​

Предупреждение

Рекомендуем использовать переменные окружения для передачи учетных данных и других конфиденциальных данных. Если вы используете -backend-config или жестко задаете эти значения в конфигурации, OpenTofu включает их и в подкаталог .terraform, и в файлы плана. Подробнее см. в разделе Учетные данные и конфиденциальные данные.

Поддерживаются следующие параметры конфигурации:

  • bucket — (Обязательно) Имя бакета GCS. Это имя должно быть уникальным в глобальном масштабе. Дополнительные сведения см. в разделе Рекомендации по именованию бакетов.
  • credentials / GOOGLE_BACKEND_CREDENTIALS / GOOGLE_CREDENTIALS — (Необязательно) Локальный путь к учетным данным аккаунта Google Cloud Platform в формате JSON. Если значение не задано, используется путь к учетным данным Google Application Default Credentials. Указанные учетные данные должны иметь роль Storage Object Admin для бакета. Предупреждение: если вы также используете провайдер Google Cloud Platform, он тоже будет использовать переменную окружения GOOGLE_CREDENTIALS.
  • impersonate_service_account / GOOGLE_BACKEND_IMPERSONATE_SERVICE_ACCOUNT / GOOGLE_IMPERSONATE_SERVICE_ACCOUNT — (Необязательно) Сервисный аккаунт, который нужно имитировать для доступа к бакету состояния. Чтобы имитация была успешной, у вас должна быть роль roles/iam.serviceAccountTokenCreator для этого аккаунта. Если вы используете цепочку делегирования, ее можно указать в поле impersonate_service_account_delegates.
  • impersonate_service_account_delegates — (Необязательно) Цепочка делегирования для имитации сервисного аккаунта, как описано здесь.
  • access_token — (Необязательно) Временный [токен доступа OAuth 2.0], полученный от сервера авторизации Google, то есть токен Authorization: Bearer, используемый для аутентификации HTTP-запросов к API GCP. Это альтернатива credentials. Если указаны оба значения, access_token будет иметь приоритет над полем credentials.
  • prefix — (Необязательно) Префикс GCS внутри бакета. Именованные состояния рабочих пространств хранятся в объекте с именем <prefix>/<name>.tfstate.
  • encryption_key / GOOGLE_ENCRYPTION_KEY — (Необязательно) Ключ шифрования длиной 32 байта в кодировке base64, «предоставленный клиентом», который используется при чтении и записи файлов состояния в бакете. Дополнительные сведения см. в разделе Ключи шифрования, предоставленные клиентом.
  • kms_encryption_key / GOOGLE_KMS_ENCRYPTION_KEY — (Необязательно) Ключ Cloud KMS («управляемый клиентом ключ шифрования»), используемый при чтении и записи файлов состояния в бакете. Формат: projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. Дополнительные сведения, включая требования IAM, см. в разделе Управляемые клиентом ключи шифрования.
  • storage_custom_endpoint / GOOGLE_BACKEND_STORAGE_CUSTOM_ENDPOINT / GOOGLE_STORAGE_CUSTOM_ENDPOINT — (Необязательно) URL-адрес, состоящий из трех частей: протокола, DNS-имени, указывающего на конечную точку Private Service Connect, и пути к Cloud Storage API (/storage/v1/b, см. здесь). Можно использовать DNS-имя, автоматически созданное Service Directory, или пользовательское DNS-имя, созданное вами. Например, если вы создали конечную точку с именем xyz и хотите использовать автоматически созданное DNS-имя, задайте для поля значение https://storage-xyz.p.googleapis.com/storage/v1/b. Инструкции по созданию конечной точки Private Service Connect с помощью 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/gcs/

Spec-Zone.ru

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