Нужны советы и общие рекомендации по использованию terraform и, в моем случае, полному разделению состояний по сервисам.
Это пример структуры каталогов, как она поддерживается.
global
├── iam
│ ├── .tf files
├── kms
│ ├── .tf files
└── organization
└── root
├── .tf files
├── project_1_OU
| └── .tf files
├── project_2_OU
| └── .tf files
└── project_3_OU
└── .tf files
Каждое состояние находится в его служебной папке.Например: global / organization / root имеет список всех учетных записей в организации, управляет общими ресурсами Resource Access Manager, SCP на глобальном уровне и т. Д. Одним из выходных данных является следующий, который возвращает список всех учетных записей.
output "root_organization_accounts" {
value = "${data.template_file.organization_accounts_list.*.rendered}"
}
С другой стороны, служба KMS использует эту выходную переменную из удаленного состояния для обновления своей политики списком новых учетных записей
Сценарий, который я пытаюсь:
- create global / organization / root / project_x_OU
- это создает желаемую структуру OU в разделе Root с суб-учетными записями, SCP и т. Д.
- список учетных записейтеперь другой и должен быть обновлен (состояние на уровне выше)!
terraform apply/refresh
теперь требуется вручную, чтобы изменить вывод global / organization / root (и ничего не сообщается какбыть измененным, что является нормальным в этом случае - это только изменение вывода) - Теперь мы должны сделать
terraform apply
на глобальном уровне / км / с, чтобы политика обновлялась новымидобавленные учетные записи
Короче говоря, global / organization / root состояние используется только для чтения в global / organization / root / project_x_OU и глобальные / кмс уровни.
Изменение в global / organization / root / project_x_OU должно вызвать обновление состояния на global / organization / root уровне, так что global / kms Уровень может быть обновлен новыми данными.
Мои вопросы:
- Как лучше всего запустить обновление в другом удаленном состоянии, если мы знаем, что оноизменится, и нам нужно его изменить, чтобы можно было обновить другой модуль?
- Я что-то не так делаю и как?
- Должен ли я создать фальшивую / неиспользуемую переменную на глобальном / организационном / корневом уровне и увеличивать ее с каждой новой учетной записью просто для принудительного изменения, дажевозможно?
- Любой другой совет и как это делается у вас?
Я использую Атлантиду как тип CI / CD решения в сочетании с простой терраформой https://www.runatlantis.io/ и он не любит вносить изменения, если их нет (на глобальном уровне / уровне организации / в данном случае)