Адресация ресурсов
Адрес ресурса — это строка, идентифицирующая ноль или более экземпляров ресурсов в вашей конфигурации в целом.
Адрес состоит из двух частей:
[module path][resource spec]
В некоторых случаях OpenTofu может допускать неполный адрес ресурса, который ссылается только на модуль целиком или не указывает индекс ресурса с несколькими экземплярами. В таких случаях смысл зависит от контекста, поэтому обратитесь к документации конкретной используемой функции, которая разбирает адреса ресурсов.
Путь модуля
Путь модуля задает адрес модуля в дереве модулей. Он имеет следующий вид:
module.module_name[module index]
-
module— ключевое слово модуля, обозначающее дочерний модуль (не корневой). Несколько ключевых словmoduleв пути указывают на вложенность. -
module_name— заданное пользователем имя модуля. -
[module index]— (необязательно) Индекс, позволяющий выбрать экземпляр из вызова модуля с несколькими экземплярами; он заключается в квадратные скобки ([и]).
Адрес без спецификации ресурса, то есть module.foo, применяется ко всем ресурсам модуля, если у него один экземпляр, или ко всем экземплярам модуля, если экземпляров несколько. Чтобы указать все ресурсы определенного экземпляра модуля, добавьте в адрес индекс модуля, например module.foo[0].
Если путь модуля не указан, адрес применяется к корневому модулю.
Пример использования ключевого слова module для разделения двух модулей с несколькими экземплярами:
module.foo[0].module.bar["a"]
Спецификация ресурса
Спецификация ресурса указывает конкретный экземпляр ресурса в выбранном модуле. Она имеет следующий синтаксис:
resource_type.resource_name[instance index]
-
resource_type— тип ресурса, на который указывается адрес. -
resource_name— заданное пользователем имя ресурса. -
[instance index]— (необязательно) Индекс, позволяющий выбрать экземпляр ресурса с несколькими экземплярами; он заключается в квадратные скобки ([и]).
Спецификация ресурса без префикса пути модуля соответствует только ресурсам корневого модуля.
Значения индексов модулей и ресурсов
К значениям индексов модулей и ресурсов с несколькими экземплярами применяются следующие правила:
-
[N], гдеN— числовой индекс с отсчетом от0для ресурса с несколькими экземплярами, заданными метааргументомcount. Если при обращении к ресурсу, для которого заданоcount > 1, индекс не указан, адрес ссылается на все экземпляры. -
["INDEX"], гдеINDEX— буквенно-цифровой ключевой индекс для ресурса с несколькими экземплярами, заданными метааргументомfor_each.
Примеры
Пример count
Предположим, что конфигурация OpenTofu содержит:
resource "aws_instance" "web" {
# ...
count = 4
}Адрес вида:
aws_instance.web[3]
указывает только на последний экземпляр в конфигурации, а адрес вида:
aws_instance.web
указывает на все четыре экземпляра «web».
Пример for_each
Предположим, что конфигурация OpenTofu содержит:
resource "aws_instance" "web" {
# ...
for_each = {
"tofu": "value1",
"resource": "value2",
"indexing": "value3",
"example": "value4",
}
}Адрес вида:
aws_instance.web["example"]
указывает только на экземпляр «example» в конфигурации и разрешается в «value4».
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.9/cli/state/resource-addressing/