28 запитань і відповідей на інтерв’ю Terraform у реальному часі

Представляємо 28 питань і відповідей, які часто виникають на співбесідах щодо Terraform, доповнені переліком та поясненнями ключових команд. Ці знання стануть у нагоді під час вашого пошуку роботи.

Збільшення популярності хмарних технологій створює численні можливості у сфері DevOps. У майбутньому хмарні технології будуть ключовою темою на співбесідах, а базове розуміння хмари та інфраструктури як коду (IaC) стане обов’язковим для фахівців DevOps.

Що являє собою Terraform?

Terraform є одним з провідних інструментів IaC, що використовується багатьма хмарними інженерами. Він дозволяє описувати хмарні та локальні ресурси у зрозумілих конфігураційних файлах, що дає можливість програмно надавати ці ресурси. Важливою особливістю Terraform є його незалежність від конкретного хмарного провайдера, на відміну від багатьох інших інструментів IaC. Завдяки цьому, ви можете використовувати Terraform для управління додатками на різних хмарних платформах одночасно.

Якщо вас цікавить перелік технологій, які підтримує Terraform, ось деякі з них:

Для успішного розвитку кар’єри в ролі інженера DevOps, хмарного архітектора, розробника або адміністратора, вам необхідно бути готовим до питань на співбесідах, пов’язаних з Terraform. Ми підготували список найбільш поширених питань, які допоможуть вам покращити ваше розуміння Terraform.

Загальні питання та відповіді на співбесіді щодо Terraform

#1. Яке ваше розуміння Terraform?

Terraform – це інструмент IaC з відкритим кодом, розроблений HashiCorp. Він призначений для створення, зміни, видалення та контролю версій вашої інфраструктури на різноманітних хмарних платформах.

#2. Чому ви б обрали Terraform для DevOps?

Використання Terraform для створення інфраструктури мінімізує людські помилки, що сприяє підвищенню якості, узгодженості та ефективності хмарної та локальної інфраструктури. Terraform використовує мову HCL, яка є інтуїтивно зрозумілою і схожою на JSON, що спрощує її освоєння та застосування. На відміну від інструментів IaC, запропонованих хмарними провайдерами, таких як Cloudformation для AWS, Terraform можна використовувати одночасно з різними хмарними платформами. Це зменшує потребу вивчати багато інструментів IaC та сприяє кращій співпраці.

#3. Як працює Terraform?

Terraform використовує плагіни, так звані провайдери Terraform, для взаємодії з API хмарних платформ та надання ресурсів. Робочий процес Terraform для кінцевого користувача складається з трьох етапів:

Написання: розробка інфраструктури як коду.

Планування: перевірка змін, які Terraform виконає перед застосуванням.

Застосування: розгортання інфраструктури та внесення необхідних змін.

#4. Що таке Terraform Cloud?

Terraform Cloud – це віддалене середовище, розроблене для оптимізації робочого процесу Terraform. Воно надає функції, такі як робочі області та блокування стану, що сприяє співпраці в великих командах.

#5. Що ви розумієте під станом у Terraform?

Як інструмент IaC, Terraform потребує інформації про поточний стан конфігурацій та інфраструктури, якими він керує. Terraform зберігає цю інформацію у файлі, який називається файлом стану.

#6. Яка користь від стану Terraform?

Стан Terraform дозволяє Terraform пов’язувати ресурси реального світу з вашою конфігурацією, відстежувати метадані та підвищувати продуктивність під час планування змін у складних інфраструктурах. Це ключовий елемент Terraform.

#7. Що ви розумієте під бекендом Terraform?

Бекенд Terraform – це місце, де зберігаються знімки стану Terraform. За замовчуванням Terraform використовує бекенд local, зберігаючи стан у локальному файлі на вашому диску. Усі інші підтримувані бекенди є різновидами віддалених сховищ.

#8. Що таке провайдер у Terraform?

Провайдери Terraform – це плагіни, що дозволяють Terraform взаємодіяти з хмарними провайдерами, SaaS-провайдерами та іншими API. Наприклад, для надання інфраструктури в AWS через Terraform, необхідно оголосити провайдера AWS у конфігураційних файлах.

#9. Хто займається підтримкою провайдерів Terraform?

Провайдери розповсюджуються окремо від Terraform. Кожен користувач Terraform може створити власного провайдера. Існують стандартні провайдери, підтримку яких забезпечує Hashicorp.

#10. Що таке Sentinel?

Sentinel – це інструмент “політика як код”, який використовується для забезпечення відповідності стандартним конфігураціям ресурсів, розгорнутих за допомогою Terraform. Він може застосовуватися організаціями для дотримання нормативних вимог та управління.

#11. Що ви розумієте під модулями в Terraform?

Модуль Terraform – це контейнер для групи ресурсів, які використовуються разом для розгортання та налаштування. Наприклад, можна створити “модуль VPC” для організації, який надає стандартизований VPC та інші необхідні ресурси, такі як підмережі та інтернет-шлюзи. Модулі можуть бути доступні публічно через реєстр модулів або приватно через приватний реєстр модулів.

#12. Яка перевага використання модулів у Terraform?

Модулі Terraform створюють логічну абстракцію поверх набору ресурсів. Використання модулів дозволяє підтримувати та повторно використовувати стандартні конфігурації ресурсів. Їх можна версіонувати та ділитися ними з членами команди для стандартизованого розгортання ресурсів.

#13. Що таке приватний реєстр модулів?

Приватний реєстр модулів Terraform Cloud дозволяє обмінюватися модулями Terraform всередині організації.

Поглиблені питання та відповіді на співбесіді щодо Terraform

#14. Як можна передати дані з одного модуля в інший?

Дані можна експортувати з модуля, визначивши блоки вихідних даних в конфігураційних файлах модуля. Потім ці дані можна використовувати як параметр у модулі призначення.

#15. Як можна задати залежності в Terraform?

Terraform має вбудовану систему керування залежностями. Існує два типи залежностей між ресурсами – неявні та явні.

Неявні залежності визначаються Terraform автоматично. Це відбувається, коли вихід “ресурсу A” використовується в “ресурсі B”. Terraform автоматично розуміє, що “ресурс B” повинен створюватися тільки після “ресурсу A”.

Явні залежності можна вказати у випадках, коли два ресурси залежать один від одного внутрішньо, не маючи при цьому спільних вихідних даних. Це можна зробити, використовуючи параметр `depends_on` в блоці конфігурації.

#16. Що таке Provisioners у Terraform?

Provisioners – це ресурси Terraform, які використовуються для виконання сценаріїв під час створення або знищення ресурсу. У Terraform є два типи provisioners:

  • local-exec: виконує сценарій на машині, де запущено Terraform.
  • remote-exec: виконує сценарій на віддаленому ресурсі після його створення.

Provisioners слід використовувати лише в крайніх випадках в Terraform.

#17. Що таке блок зовнішніх даних у Terraform?

Подібно до `local-exec`, блок зовнішніх даних можна використовувати для запуску скриптів на машинах, де працює Terraform. Різниця між provisioner і блоком зовнішніх даних полягає в тому, що скрипти в блоці зовнішніх даних можуть повертати дані у форматі JSON, тоді як provisioner не повертають вихідних даних. Важливо зазначити, що блоки зовнішніх даних також призначені для крайніх випадків і не повинні використовуватись за наявності кращих альтернатив.

#18. Як дві особи, які використовують Terraform Cloud, можуть створити два різні набори інфраструктури, використовуючи один і той самий робочий каталог?

За допомогою різних робочих областей. Кожен користувач може запускати Terraform в окремій робочій області. Кожна робоча область має власний файл стану. Якщо ресурси не перетинаються, обидва користувачі можуть успішно розгорнути два різні набори інфраструктури з одного коду.

#19. Що відбувається, коли декілька інженерів починають розгортати інфраструктуру, використовуючи один і той самий файл стану?

Terraform має важливу функцію – “блокування стану”. Ця функція гарантує відсутність змін файлу стану під час виконання операцій та запобігає його пошкодженню. Важливо зазначити, що не всі бекенди Terraform підтримують функцію блокування стану. Якщо ця функція важлива, потрібно обрати відповідний бекенд.

#20. Що таке нульовий ресурс у Terraform?

Нульовий ресурс Terraform – це конфігурація, яка діє як стандартний блок ресурсу Terraform, але не створює жодних ресурсів. Це може здатися дивним та не корисним, але він може бути цінним у різних ситуаціях для обходу певних обмежень Terraform.

#21. Як можна використовувати одного провайдера з різними конфігураціями в Terraform?

Використовуючи аргумент `alias` у блоці провайдера.

#22. У вас є конфігураційний файл Terraform без ресурсів. Що станеться, якщо запустити команду `terraform apply`?

Terraform видалить всі ресурси. Запуск `terraform apply` з порожньою конфігурацією еквівалентний запуску `terraform destroy`.

#23. Що станеться, якщо ресурс був успішно створений у Terraform, але стався збій під час підготовки?

Це малоймовірний сценарій, але в такому випадку ресурс буде позначений як “зіпсований” і може бути відновлений шляхом повторного запуску `terraform apply`.

#24. Яке значення змінної TF_LOG забезпечує найбільш детальне журналювання?

TRACE є найбільш детальним значенням змінної TF_LOG.

#25. Як можна імпортувати наявні ресурси під управління Terraform?

За допомогою команди `terraform import`.

#26. Яку команду можна використовувати для перегляду плану виконання Terraform?

Команда `terraform plan` створює план виконання змін, які Terraform внесе до інфраструктури.

#27. Яку команду можна використовувати для синхронізації стану Terraform з фактичною інфраструктурою?

Команда `terraform apply -refresh-only` використовується для узгодження стану Terraform з фактичною інфраструктурою. Це нова альтернатива застарілій команді `terraform refresh`.

#28. Яку команду можна використовувати для переключення між робочими областями під час використання Terraform Cloud?

Команда `terraform workspace select ` використовується для вибору іншої робочої області.

#29. Яка команда використовується для перевірки синтаксису файлів конфігурації Terraform?

Команда `terraform validate` перевіряє синтаксичну коректність і внутрішню узгодженість конфігурації.

#30. Яка команда використовується для створення нових робочих областей у Terraform Cloud?

Команда `terraform workspace new ` використовується для створення нового робочого простору.

Інші важливі команди Terraform для технічних співбесід

  • terraform init: ініціалізує віддалені бекенди; завантажує провайдерів та віддалені модулі, зазначені у вашій конфігурації.
  • terraform init -upgrade: використовується для оновлення вже завантажених провайдерів.
  • terraform plan: створює план виконання для створення або оновлення інфраструктури.
  • terraform apply: створює або оновлює інфраструктуру після запиту підтвердження від користувача.
  • terraform apply -auto-approve: створює або оновлює інфраструктуру без підтвердження користувача.
  • terraform destroy: видаляє інфраструктуру після запиту підтвердження від користувача.
  • terraform destroy -auto-approve: видаляє інфраструктуру без підтвердження користувача.
  • terraform fmt: сканує поточний каталог на наявність файлів конфігурації та форматує їх відповідно до канонічного стилю та формату HCP.
  • terraform fmt -recursive: сканує поточний каталог та підкаталоги на наявність файлів конфігурації та форматує їх згідно зі стилем HCP.
  • terraform show: надає читабельний вивід файлу стану або плану.

Сподіваємося, що ця інформація допоможе вам успішно пройти співбесіду з Terraform.