Два инженера применяют Terraform с локальным состоянием
Инфраструктура описана в Terraform, файл состояния лежит в рабочем каталоге у каждого инженера и в репозиторий не коммитится. Двое одновременно работали над сетевой частью, каждый выполнил apply у себя.
Итог: часть ресурсов задублирована, у одного из инженеров следующий план предлагает удалить объекты, созданные другим, а фактическая конфигурация не совпадает ни с одним локальным состоянием.
Что здесь принципиально устроено неправильно?
- Файл состояния нужно коммитить в Git вместе с кодом: тогда обе копии синхронизируются обычным `git pull`, а расхождения будут разрешаться при слиянии веток
- Каждому инженеру нужен свой workspace: одна конфигурация не рассчитана на параллельную работу двух человек, и разделение окружений снимает конфликт состояний
- Состояние должно храниться в общем удалённом бэкенде с блокировкой, чтобы у всех был единый источник правды, а параллельные apply были невозможны
- Перед apply достаточно всегда выполнять plan: он подтянет актуальную конфигурацию из облака и расхождения не будет
