Как обновить удаленное состояние из другого модуля - PullRequest
2 голосов
/ 17 июня 2019

Нужны советы и общие рекомендации по использованию 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/ и он не любит вносить изменения, если их нет (на глобальном уровне / уровне организации / в данном случае)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...