План Terraform «Известный после применения» - как узнать, удалась ли моя интерполяция?

Вот отрывок из моей успешной terraform plan

       ~ primary_network_interface_id = "eni-XXXXXXXXXXXXX -> (known after apply)
   ~ private_dns                  = "shshshshshshshshhs" -> (known after apply)
   ~ private_ip                   = "XXXXXXXXXXXXXXXXXX" -> (known after apply)
   + public_dns                   = (known after apply)
   + public_ip                    = (known after apply)
   ~ secondary_private_ips        = [] -> (known after apply)
   ~ security_groups              = [] -> (known after apply)

Вышеизложенное является частью aws_instanceресурс импортирован как внутренний модуль. Я собираюсь передать список идентификаторов групп безопасности через переменную security_groups так что во время создания ресурса он будет сопоставлен с vpc_security_group_ids. Однако с описанным выше планом я не понимаю, насколько он успешно нанесен на карту.

Мой вопрос - как я узнаю, что apply будет работать? Known after applyэто вроде 50-50 в этом случае? Кроме того, не удалось ничего обнаружить в документации по TF, поэтому, если что-то есть, я был бы признателен, если бы кто-нибудь мог указать мне в этом направлении.

Спасибо,

1 ответ

В языке Terraform значение "неизвестно", которое средство визуализации плана отображает как как мы видим здесь.

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

Затем на языке Terraform любая операция, выполняемая в выражении, результат которого требует знания значения, помеченного как неизвестное, приведет к тому, что этот результат, в свою очередь, также будет неизвестен.

В вашем случае похоже, что вы построили это значение таким образом, что список в целом оказался неизвестным. Отсутствие полного списка обычно означает, что мы не знаем длины списка, потому что, если мы знаем длину списка, то вместо этого это будет известный список с неизвестными значениями внутри, возможно, так:

       ~ security_groups = [
     + (known after apply),
     + "sg-abc123",
     + (known after apply),
   ]

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

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

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

Другие вопросы по тегам