как развернуть определенный файл TF в Terraform - PullRequest
0 голосов
/ 14 июня 2019

В моем корневом каталоге terraform 3 файла .tf:

  • vpc.tf
  • subnets.tf
  • instances.tf
  • Вместе с каталогом .terraform после запуска terraform init

Я бы хотел развернуть только vpc.tf, работающий примерно так:

terraform apply vpc.tf #here, vpc.tf is a terraform file

Но это не работает (я получаю сообщение об ошибке Go: "zip: not valid zip file"). Если я просто бегу

terraform apply

он попытается применить все конфигурации во всех 3 файлах terraform (vpc.tf, subnets.tf и instances.tf), а это не то, что мне нужно. Кажется, способ заставить это работать, иметь совершенно другую папку и запустить что-то вроде

terraform apply vpc/ #here, vpc/ is a folder that containers vpc.tf file

который работает. Проблема с этим подходом заключается в том, что если у меня есть 2 или более файлов Terraform в папке vpc /, я снова возвращаюсь к первой проблеме. Кажется, что решение для этого состоит в том, чтобы иметь определенный ресурс в определенной папке, но это не кажется чистым, так как я могу предвидеть, что если инфраструктура будет расти, я получу несколько папок, содержащих несколько файлов terraform. Итак, вопрос:

Есть ли способ «применить терраформ» к конкретному файлу терраформы и игнорировать все остальное в папке? Я что-то упускаю из-за терраформ?

Ответы [ 2 ]

3 голосов
/ 14 июня 2019

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

Это прямо упоминается в документации Terraform для -target:

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

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

Если вы не хотите, чтобы две вещи былиизменяется одновременно (например, настройка VPC, а также настройка приложения, которое живет в этом VPC или настройка тестовой и рабочей версий приложения), тогда они должны находиться в разных каталогах и использовать разные файлы состояния.

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

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

1 голос
/ 14 июня 2019

Еще один вариант, который не решает именно ту проблему, которая вам нужна, но является выполнимой, - это ориентация на ресурсы с помощью аргумента -target, например:

terraform plan -target digitalocean_loadbalancer.public -out run.plan

https://www.terraform.io/docs/commands/plan.html#resource-targeting

...