Terraform: 5 важливих рекомендацій по налаштуванню
Terraform — одна з кращих утиліт, в якій зручно управляти конфігураціями хмарної інфраструктури. Цей інструмент тільки набирає популярність: Salt, Ansible і Puppet використовують частіше, але це скоро зміниться. Ловіть список важливих рекомендацій по налаштуванню Terraform.
У Terraform відкритий вихідний код, саме тому його розвиває велика спільнота розробників. Звичайно, ця утиліта повністю не замінить Salt, Ansible або Puppet, але вона займе своє місце в інструментарії DevOps-інженера.
Дві основних переваги Terraform:
- Портативність. Одна утиліта та одна мова застосовується для опису хмарної інфраструктури з будь-яким постачальником послуг. Будь-то Google Cloud, AWS або OpenStack. Зміна постачальника хмарного хостингу більше не проблема.
- Простота повноцінного запуску додатків. Наприклад, на ваших серверах Amazon запущені Docker контейнери під керуванням Kubernetes, в яких працює багато додатків. Всім цим з легкістю можна керувати за допомогою одного інструмента.
Наші рекомендації допоможуть логічно і зручно налаштувати Terraform. Поради підійдуть усім незалежно від розміру команди або характеру проєкту.
1. Визначте склад команди, яка працюватиме з Terraform
При організації коду Terraform важливо розуміти:
- команда буде використовувати певні скрипти та модулі Terraform?
- плануєте передавати роботу іншій команді?
- до вашої команди будуть приєднуватися нові люди?
- будете працювати над проєктом одноосібно?
- чи довго плануєте використовувати утиліту?
Подібні питання і відповіді на них впливають на кілька моментів. В ідеалі ви повинні мати віддалений доступ (Remote State) і можливість блокування (State Locking) незалежно від розміру команди зараз або в майбутньому. Remote State гарантує, що ваш ноутбук — не єдине місце, де зможе працювати ваш Terraform. State Locking гарантує, що тільки одна людина за раз може змінити інфраструктуру.
2. Розділіть модулі на одноразові та ті, що часто використовуються
Модуль Terraform дозволяє вам створювати логічну абстракцію поверх деякого набору ресурсів. Іншими словами, модуль дозволяє вам групувати ресурси разом і повторно використовувати цю групу пізніше, можливо, багато разів.
Юзайте загальні модулі якомога частіше, щоб уникнути нескінченного набору тексту, тестування, перевірки, виправлень і рефакторингу.
Розділіть модулі в залежності від частоти їх використання або внесення змін. Наприклад, групи автомасштабування, цільові групи, балансувальники навантаження та інші. Всі вони можуть змінюватися під час кожного розгортання. Тому відділення їх від одноразових шаблонів спростить перевірку коду і прискорить налаштування.
3. Визначення версій Terraform
Команди часто думають, що версія Terraform (яку вони використовують для написання коду сьогодні) ніколи не зміниться. Або припускають, що зовнішні модулі не зміняться. Це призводить до проблем, які можна буде побачити тільки через кілька тижнів. Що робити?
Переконайтеся, що ви визначили версії всюди, де це можливо:
- в основному блоці Terraform,
- в блоці постачальника,
- в блоці модуля і подібне.
Визначення версій гарантує, що ваші залежні бібліотеки залишаться “замороженими”. Це потрібно для того, щоб впроваджувати поновлення.
4. Автоматизація всього
Автоматизація на кожному етапі процесу розгортання дозволяє уникнути проблем ще до того, як вони виникнуть. Використовуйте хуки попередньої фіксації git, щоб запустити terraform fmt і terraform validate перед фіксацією коду. Вони гарантують, що перед фіксацією код буде правильно відформатований і синтаксично вірний. Залийте цей файл попередньої фіксації в репозиторій, й всі у вашій команді зможуть скористатися такою ж автоматизацією. Цей важливий момент контролю якості зможе істотно заощадити час протягом розвитку проєкту.
Всі сучасні інструменти розгортання мають процеси CI. Ви можете використовувати їх для запуску SAST й інструментів модульного тестування при відправленні коду в джерело. Checkov може тестувати код Terraform на безпеку і відповідність. Він також може створювати призначені для користувача перевірки для конкретних угод організації. Додайте ці інструменти модульного тестування у свій CI, щоб поліпшити якість і надійність коду.
5. Зробіть README для Terraform
README.md може значно заощадити час вашої команди. А також підвищити ступінь відповідальності кожного: всі співробітники будуть відповідати за те, що вказано в файлі.
Як мінімум, ваш README повинен:
- містити кроки по ініціалізації правильного середовища Terraform на ваших робочих станціях (Linux, Windows, Mac і інших), включаючи версію Terraform для установки.
- вказувати необхідні залежності (Checkov, TerraGrunt і інші) з версіями та будь-якими зручними псевдонімами Linux, які використовує ваша команда (деякі люди люблять визначати їх tff як скорочені terraform fmt).
- містити стратегію і процес перевірки розгалуження і PR, угоди про імена і стандарти маркування ресурсів.
Є питання-перевірка щодо цього. Якщо завтра до вашої команди приєднається новий співробітник, чи достатньо README, щоб він зрозумів що і як робити?
Сподіваємося, ці поради допоможуть вам не робити поширених помилок. Не соромтеся ділитися своїми думками з цього приводу і ви. Чекаємо ваших коментарів.