Моя команда использует AWS для нашей инфраструктуры через 3 различных учетных записей AWS . Мы назовем их просто sandbox
, staging
и production
.
Недавно я настроил Terraform для нашей инфраструктуры AWS, и ее иерархия сопоставляется с нашими учетными записями, а затем с помощью приложения или самой службы AWS. Структура репо выглядит примерно так:
staging
iam
groups
main.tf
users
main.tf
s3
main.tf
sandbox
iam
...
production
applications
gitlab
main.tf
route53
main.tf
...
Мы используем отдельные конфигурации для каждой службы AWS (например, IAM или S3) или приложения (например, GitLab), поэтому мы не получаем огромных файлов .tf
на учетную запись, для применения которых потребуется много времени за любое изменение. В идеале мы хотели бы отойти от подхода конфигурации на основе служб и перейти к более конфигурациям на основе приложений, но проблема в любом случае остается той же.
Этот подход хорошо работал при применении обновлений вручную из командной строки, но я бы хотел переместить его на GitLab CI / CD, чтобы лучше автоматизировать наш рабочий процесс, и именно здесь все сломалось.
В моей существующей установке, если я внесу одно изменение, скажем, staging/s3/main.tf
, GitLab, похоже, не найдет хорошего выхода из коробки, чтобы запустить только terraform plan
или terraform apply
для этой конкретной конфигурации. .
Если бы я вместо этого переместил все в один файл main.tf
для всей учетной записи AWS (или нескольких файлов, но привязанных к одному файлу состояния), я мог бы просто заставить GitLab запускать задание plan
или apply
только в этой конфигурации. Запуск может занять 15 минут в зависимости от количества ресурсов AWS, имеющихся у нас в каждой учетной записи, но я полагаю, что это потенциальный вариант.
Кажется, что моя проблема в конечном счете может быть связана с тем, как GitLab обрабатывает "monorepos", чем с тем, как Terraform обрабатывает свой рабочий процесс (в конце концов, Terraform с радостью спланирует / применит мои изменения, если я просто скажу , что имеет изменилось), хотя мне также было бы интересно услышать о том, как люди структурируют свою среду Terraform, заданную - или чтобы полностью избежать - этих ограничений.
Кто-нибудь решил такую проблему в своей среде?