Що змінилося
Terraform 1.15.0 непомітно підкрутив одну з найчутливіших частин CI: terraform validate тепер перевіряє backend block. Тобто команда дивиться, чи існує backend, чи є обов’язкові атрибути і чи проходить його власна валідація.
Це гарна ідея — поки ви не запускаєте Terraform через -backend-config. У 1.15.1 HashiCorp саме тому прибрав валідацію атрибутів усередині backend block: вона конфліктувала з workflow, які підставляють частину конфігурації ззовні.
Простіше кажучи: 1.15.0 зробив validate суворішим, а 1.15.1 повернув йому сумісність із реальними CI-сценаріями.
Чому це важливо
У багатьох командах terraform validate — це перший швидкий gate. Він має бути дешевим, стабільним і передбачуваним. Коли його поведінка змінюється, з’являються два ризики:
- старий пайплайн починає падати без змін у коді;
- команда починає ігнорувати validate, бо «він знову вередує».
Найчастіше це болить там, де:
- state лежить у віддаленому backend;
- параметри backend приходять із секретів або окремого файлу;
- terraform init і terraform validate запускаються в різних кроках;
- module source уже використовує variables або locals.
У такій схемі дрібний розсинхрон між init і validate легко перетворюється на нічний фейл, який виглядає випадковим. А ще гірше — на фейл, який усі обходять руками.
Схема, яку варто мати в голові
У здоровому пайплайні terraform init бере той самий backend-конфіг, який ви справді використовуєте, а terraform validate перевіряє конфігурацію так, щоб не зламати цей сценарій. Саме тому 1.15.1 важливіший за голий 1.15.0, якщо у вас є -backend-config.
Як перевірити свій CI
1. Знайдіть усі місця, де запускається Terraform
Почніть не з коду, а з інвентаризації:
.github/workflows/*.yml- shell-скрипти в репозиторії
- make-цілі
- будь-які wrapper-скрипти для init або validate
Шукайте саме terraform init, terraform validate і -backend-config.
2. Переконайтеся, що init і validate бачать один і той самий backend
Якщо init отримує backend.hcl з одного місця, а validate запускається без нього, ви вже маєте різні умови. У таких випадках 1.15.0 може почати сваритися, хоча проблема не в коді, а в схемі запуску.
Типовий сценарій має виглядати так:
terraform init \
-backend-config=backend.hcl \
-input=false
terraform validate
Якщо backend.hcl формується динамічно, не ховайте це від validate. Потрібна та сама правда, а не симуляція.
3. Проганяйте реальний сценарій на 1.15.1
Якщо ви вже бачите або підозрюєте проблему, не застрягайте на 1.15.0. Для backend-config безпечніший мінімум — 1.15.1 або новіший patch-реліз.
Якщо хочете короткий тест на міграцію, порівняйте:
- вашу поточну версію;
- Terraform 1.15.0;
- Terraform 1.15.1.
Так ви одразу побачите, чи фейл був реальною помилкою, чи наслідком короткого проміжного регресу.
4. Окремо перевірте module source
Terraform 1.15 ще й дозволив variables і locals у module source та version attributes. Це зручно, але саме такі зміни люблять вилазити боком у старих пайплайнах.
Якщо у вас модулі збираються динамічно, перевірте:
- чи тягнуться вони з правильного джерела;
- чи не ламається розв’язання версій;
- чи не з’явився новий фейл у init замість validate.
5. Не втратьте сигнал у логах
У 1.15 також покращили логування terraform init: часові мітки стали точнішими до мілісекунд. Це не головна фіча релізу, але для flaky CI вона дуже доречна.
Що не робити
- Не думайте, що validate — це лише перевірка синтаксису.
- Не лишайте 1.15.0 у production CI, якщо у вас є -backend-config.
- Не запускайте init з одним backend-конфігом, а validate з іншим.
- Не сприймайте support for variables in module source як дозвіл змінити все без повторного тесту.
- Не вимикайте validate, якщо він почав падати. Спершу зрозумійте, що саме він уже навчився бачити.
Практичний висновок
Коротко: Terraform 1.15.0 корисно показав, що backend — це не другорядна деталь, а частина валідації. Але якщо ви користуєтеся -backend-config, 1.15.1 — це безпечніша точка входу.
Що робити сьогодні:
- знайти всі CI-кроки з Terraform;
- звірити, що init і validate бачать однаковий backend;
- перевірити сценарій на 1.15.1;
- окремо прогнати модулі, де module source залежить від variables або locals;
- залишити в пайплайні один зрозумілий шлях, а не два майже однакові.
Менше сюрпризів у validate — менше ночей, коли інфраструктура вирішує поговорити з вами через червоний CI.
Короткий чеклист
- Знайти всі workflow і скрипти, де запускаються terraform init або terraform validate
- Перевірити, чи є залежність від -backend-config або окремих backend.hcl файлів
- Прогнати той самий сценарій на 1.15.0 і 1.15.1, якщо зараз є фейл або сумнівний результат
- Після переходу на 1.15.1 повторно перевірити module source з variables і locals
- Залишити в CI той самий backend-конфіг, який використовує реальний init
Prompt Pack: перевірка Terraform CI після 1.15
Ти — Terraform-рев’юер для CI. Перевір репозиторій і знайди, де нова поведінка Terraform 1.15 може зламати pipeline. Вхідні дані: - список workflow/job зі згадками terraform init або terraform validate; - версія Terraform у CI; - фрагменти backend-конфігів, файли backend.hcl і всі виклики `-backend-config`; - root module і всі module source, які залежать від variables або locals; - останні CI-логи, якщо вже є падіння. Поверни: 1. короткий ризик-оцінювач: де validate може змінити поведінку; 2. список кроків, які треба прогнати повторно; 3. рекомендацію: лишатися на старій версії, ставити 1.15.0 чи одразу 1.15.1+; 4. конкретні зміни в CI/YAML; 5. короткий план регресійного тесту.