Как условно обновить ресурс в Terraform - PullRequest
0 голосов
/ 24 января 2019

Кажется, что обычной практикой является использование count на ресурсе для его условного создания в Terraform с использованием троичного оператора.

Я бы хотел условно обновить запись AWS Route 53 на основе переменной push_to_prod . Это означает, что я не хочу удалять ресурс, если я не запускаю его в производство, я только хочу обновить его или оставить значение CNAME без изменений.

Кто-нибудь делал что-то подобное в Terraform?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вот два примера:

type = "${var.push_to_prod == "true" ? "CNAME" : var.other_value}" - это будет фиксированное значение other_value, при этом терраформа не сможет "игнорировать" ресурс, как только он будет управляться терраформой.

или

type = "${var.aws_route53_record_type}", и вы можете иметь dev.tfvars и prod.tfvars, с aws_route53_record_type, определенным как то, что вы хотите для dev и CNAME для продукта.

Дело в том, что вы пытаетесь сделать: «Я только хочу обновить его или оставить значение CNAME без изменений». Это не так, как работает terraform. Terraform либо управляет ресурсом для вас, либо нет. Если он управляет им, он обновит ресурс на основе конфигурации, которую вы определили в файле .tf. Если он не управляет ресурсом, он не изменит его. Похоже, что вы действительно ищете второе решение, в котором вы передаете две разные конфигурации из файла .tfvars в файл .tf и на основе разных конфигураций создаются разные ресурсы. Вы можете связать это с count, чтобы определить, должен ли ресурс быть создан или нет.

0 голосов
/ 24 января 2019

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

Я бы использовал свойство allow_overwrite в записи Route53 и установил его на основе вашего флага.Таким образом, если вы подталкиваете к продвижению, вы можете установить его как ложное.Который должен инициировать создание нового.Я не проверял это.

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

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

...