Организация папок в терраформе - PullRequest
1 голос
/ 29 мая 2020

У меня есть настройка terraform, в которой я создаю ресурсы в aws, я использую s3, ec2, а также kubernetes. Для kubernetes у меня более 5 .tf файлов. Я создал папку с именем kube-aws и поместил туда файлы .tf. Прямо сейчас у меня есть установка, как показано ниже

scripts/
 |
  s3.tf
  ec2.tf
  kube-aws/
   | 
   web-deploy.tf
   web-service.tf
   app-deploy.tf
   app-service.tf  

Правильный ли это подход, terraform также выберет .tf файлы из папки kubw-aws? или мне нужно сделать что-нибудь еще, чтобы заставить эту работу работать.

1 Ответ

2 голосов
/ 29 мая 2020

Ресурсы в каталоге kube-aws не будут включены , если scripts - ваш рабочий каталог. Каталог scripts в данном случае считается модулем root (см. Документацию по модулям ):

Файлы .tf в вашем рабочем каталоге когда вы запускаете terraform plan или terraform apply вместе из модуля root.

У вас есть два варианта для включения kube-aws ресурсов:

  1. Переместить их в scripts каталог.
  2. Создайте блок module в одном из файлов scripts/*.tf и передайте необходимые переменные.

Например, скажем, в , s3.tf:

module "kube_aws" {
  source = "./kube-aws"

  // pass in your variables here
}

Выбор, который вы делаете, полностью зависит от вас, но рекомендации в , когда писать модуль , довольно убедительны:

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

Я бы порекомендовал вариант 1 выше, т.е. переместите файлы .tf в один каталог, по крайней мере, до тех пор, пока вы не выясните, когда использовать модуль и как их лучше структурировать. Я также настоятельно рекомендую ознакомиться с официальной (и отличной) документацией по Modules и Module Composition , а также посмотреть примеры модулей в Terraform Registry и связанный с ними исходный код (ссылки на источник можно найти на страницах модуля).

...