Spec-Zone.ru › OpenTofu 1.9

Источник данных terraform_remote_state

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

Источник данных terraform_remote_state можно использовать без необходимости в провайдере или его настройке. Он всегда доступен через встроенный провайдер с адресом источника terraform.io/builtin/terraform. Этот провайдер не включает никаких других ресурсов или источников данных.

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

terraform_remote_state не учитывает конфиденциальность снимков исходного состояния. Будьте осторожны при обращении к состоянию с конфиденциальными выходными значениями корневого модуля.

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

Будьте осторожны при использовании шифрования состояния! Для совместного использования зашифрованного состояния между проектами требуется тщательно согласовать ключи метаданных. Подробнее см. раздел Источники данных удаленного состояния руководства по шифрованию состояния.

Альтернативные способы обмена данными между конфигурациями​

Обмен данными с помощью выходных значений корневого модуля удобен, но имеет недостатки. Хотя terraform_remote_state предоставляет только выходные значения, его пользователь должен иметь доступ ко всему снимку состояния, который часто содержит конфиденциальную информацию.

Если возможно, мы рекомендуем явно публиковать данные для внешнего использования в отдельном месте, а не обращаться к ним через удаленное состояние. Это позволяет применять разные средства контроля доступа к общей информации и снимкам состояния.

Для явного обмена данными между конфигурациями можно использовать пары типов управляемых ресурсов и источников данных из различных провайдеров, включая (но не ограничиваясь) следующие:

Система Публикация с помощью... Чтение с помощью...
Alibaba Cloud DNS
(для IP-адресов и имен хостов)
тип ресурса alicloud_alidns_record Обычные запросы DNS или провайдер dns
Amazon Route53
(для IP-адресов и имен хостов)
тип ресурса aws_route53_record Обычные запросы DNS или провайдер dns
Amazon S3 тип ресурса aws_s3_object источник данных aws_s3_object
Amazon SSM Parameter Store тип ресурса aws_ssm_parameter источник данных aws_ssm_parameter
Azure Automation тип ресурса azurerm_automation_variable_string источник данных azurerm_automation_variable_string
Azure DNS
(для IP-адресов и имен хостов)
тип ресурса azurerm_dns_a_record и т. д. Обычные запросы DNS или провайдер dns
Google Cloud DNS
(для IP-адресов и имен хостов)
тип ресурса google_dns_record_set Обычные запросы DNS или провайдер dns
Google Cloud Storage тип ресурса google_storage_bucket_object источник данных google_storage_bucket_object и источник данных http
HashiCorp Consul тип ресурса consul_key_prefix источник данных consul_key_prefix
HashiCorp Terraform Cloud Обычный блок terraform outputs источник данных tfe_outputs
Kubernetes тип ресурса kubernetes_config_map источник данных kubernetes_config_map
OCI Object Storage тип ресурса oci_objectstorage_bucket источник данных oci_objectstorage_bucket
Примечание

Это лишь некоторые распространенные варианты от официальных провайдеров OpenTofu, но существует слишком много вариантов хранения конфигурации, чтобы перечислить их здесь все, в том числе в партнерских провайдерах и провайдерах сообщества. Любую пару из типа управляемого ресурса и соответствующего источника данных потенциально можно использовать для обмена данными между конфигурациями OpenTofu. Другие возможности см. в документации отдельных провайдеров.

Одно из ключевых преимуществ использования отдельного хранилища конфигурации вместо terraform_remote_state заключается в том, что данные потенциально могут считываться и другими системами, кроме OpenTofu, например системами управления конфигурацией или планировщиками на вычислительных экземплярах. Поэтому мы рекомендуем выбрать хранилище конфигурации, которое смогут использовать и другие компоненты вашей инфраструктуры. Например:

  • Если вы хотите предоставлять IP-адреса и имена хостов, можно публиковать их как обычные записи DNS A, AAAA, CNAME и SRV в частной зоне DNS, а затем настроить остальную инфраструктуру на использование этой зоны, чтобы находить объекты инфраструктуры с помощью встроенного системного DNS-резолвера.
  • Если вы используете HashiCorp Consul, публикация данных в хранилище ключей и значений Consul или каталоге служб Consul сделает эти данные доступными через Consul Template или блок template HashiCorp Nomad.
  • Если вы используете Kubernetes, можно сделать Config Maps доступными вашим Pod.

Некоторые перечисленные выше хранилища данных специально предназначены для хранения небольших значений конфигурации, тогда как другие представляют собой универсальные системы хранения больших двоичных объектов. Для таких универсальных систем можно использовать функцию jsonencode и функцию jsondecode соответственно для хранения и извлечения структурированных данных.

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

Пример использования (серверный модуль remote)​

Блок кода
data "terraform_remote_state" "vpc" {
  backend = "remote"

  config = {
    organization = "hashicorp"
    workspaces = {
      name = "vpc-prod"
    }
  }
}

resource "aws_instance" "foo" {
  # ...
  subnet_id = data.terraform_remote_state.vpc.outputs.subnet_id
}

Пример использования (локальный серверный модуль local)​

Блок кода
data "terraform_remote_state" "vpc" {
  backend = "local"

  config = {
    path = "..."
  }
}

resource "aws_instance" "foo" {
  # ...
  subnet_id = data.terraform_remote_state.vpc.outputs.subnet_id
}

Описание аргументов​

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

  • backend — (обязательный) используемый удаленный серверный модуль.

  • workspace — (необязательный) используемое рабочее пространство OpenTofu, если серверный модуль поддерживает рабочие пространства.

  • config — (необязательный; объект) конфигурация удаленного серверного модуля. Хотя этот аргумент обозначен как необязательный, большинству серверных модулей требуется конфигурация.

    Объект config может использовать любые аргументы, допустимые в соответствующем блоке terraform { backend "<TYPE>" { ... } }. Подробнее см. документацию по выбранному серверному модулю.

    Примечание

    Если конфигурация серверного модуля требует вложенного блока, укажите его здесь как обычный атрибут со значением-объектом. (Например, workspaces = { ... } вместо workspaces { ... }.)

  • defaults — (необязательный; объект) значения по умолчанию для выходных значений на случай, если файл состояния пуст или в нем отсутствует обязательное выходное значение.

Описание атрибутов​

Кроме перечисленных выше, экспортируются следующие атрибуты:

  • outputs — объект, содержащий все выходные значения корневого уровня удаленного состояния.

Только выходные значения корневого уровня​

Для использования в других частях модуля предоставляются только выходные значения корневого уровня из снимка удаленного состояния. Данные ресурсов и выходные значения вложенных модулей недоступны.

Чтобы сделать выходное значение вложенного модуля доступным в качестве выходного значения корневого модуля, необходимо явно настроить его передачу в корневом модуле. Например:

Например:

Блок кода
module "app" {
  source = "..."
}

output "app_value" {
  value = module.app.example
}

В этом примере выходное значение с именем example из модуля "app" доступно как выходное значение корневого модуля app_value. Если бы эта конфигурация не содержала блок output "app_value", данные были бы недоступны через terraform_remote_state.

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

Хотя terraform_remote_state не предоставляет для использования в конфигурации никакой другой информации из снимка состояния, данные снимка состояния представляют собой единый объект. Поэтому любой пользователь или сервер, имеющий достаточный доступ для чтения выходных значений корневого модуля, всегда также сможет получить доступ ко всему снимку состояния посредством прямых сетевых запросов. Не используйте terraform_remote_state, если какие-либо ресурсы в вашей конфигурации работают с данными, которые вы считаете конфиденциальными.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.9/language/state/remote-state-data/

Spec-Zone.ru

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