Англійська назва — Terraform State

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

Більшість заплутаних Terraform інцидентів відстежують назад до стану - файл, який відстежує те, що Terraform вважає існуючим - виходить з синхронізації з тим, що насправді розгорнуто, і лексика тут (дрейф, блокування, імпорт) саме те, що дозволяє команді діагностувати цей проміжок замість простого повторного запуску apply і сподівання.

Ключовий словник

** Файл стану ** — файл (зазвичай terraform.tfstate ), у якому Terraform записує створені ним ресурси реального світу і їх поточні атрибути, які використовуються для обчислення відмінностей для кожного плану.

  • “У файлі стану зазначено, що цей контейнер існує з ввімкненим версіями, отже будь- який план буде порівнювати фактичний контейнер з записаним станом, а не лише з необробленими налаштуваннями.” *

** Дрейф ** — невідповідність між записами у файлі стану і тим, що насправді існує у реальній інфраструктурі, зазвичай спричинена змінами, внесеними вручну поза Terraform. “Хтось змінив групу безпеки вручну у консолі, тому стан Terraform тепер показує дрейф — наступний план захоче повернути ці зміни назад, щоб вони відповідали налаштуванням.”

** Блокування стану ** — механізм, який запобігає двом людям або CI- запускам змінювати файл стану одночасно, уникаючи пошкодження або конфліктних змін. “Застосування зазнало невдачі одразу з помилкою блокування — чиясь інша схема вже мала блокування стану, тому наша правильно відмовилася виконувати одночасно.”

** Імпорт ** — перенесення існуючого ресурсу, створеного поза Terraform, під керування Terraform шляхом додавання його до файла стану без його повторного створення.

  • “Ми імпортували вручну створений екземпляр бази даних у стан, щоб Terraform перестала намагатися створити дублікат на кожному плані.” *

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

  • “Ми перенесли стан до віддаленого сервера з увімкненим блокуванням, щоб два інженери, які виконують застосування водночас, не пошкоджували зміни один одного.” *

Звичайні фрази

  • Чи це дрейф, чи конфігурація насправді змінилася?»
  • «Чи заблокована держава зараз — чи хтось інший запускає заявку?»
  • Чи потрібно нам імпортувати це, чи це вже було створено через Terraform?
  • Чи зберігається стан віддалено, чи це все ще локальний файл стану?
  • «Що план каже, що дрейф насправді є, перш ніж ми застосуємо що-небудь?»

Приклади висловлювань

Пояснення неочікуваного виводу плану: “Планом передбачено вилучення і відтворення цього ресурсу, що не є тим, що ми хотіли — це дрейф. Хтось змінив тег вручну поза Terraform, і тепер файл стану і реальність не збігаються. ”

Діагностика застряглого застосування в інциденти: “Застосування зависло, оскільки стан заблоковано після виконання, яке завершилося аварійно, не звільнивши блокування — нам слід обережно розблокувати його після того, як ми переконаємося, що жодного іншого застосування не виконується.”

Опис кроку впровадження для застарілої інфраструктури: “Перед тим, як ми зможемо керувати цією базою даних за допомогою Terraform, нам потрібно спочатку імпортувати її у стан — інакше Terraform спробує створити нову базу даних і або зазнає невдачі, або дублює її.”

Професійні поради

  • Скажімо ** drift **, а не “план виглядає дивно,” коли стан і реальність не збігаються - назвати це точно сигналізує, що виправлення є примиренням стану, а не просто перезапуском застосування і надією, що це зникне.
  • Завжди використовуйте віддалений сервер з блокуванням стану для будь- якої спільної інфраструктури команди — локальний файл стану є однією з найпоширеніших причин руйнівних інцидентів одночасного застосування.
  • Рекомендуємо ** імпортувати ** явно для будь- якого ресурсу, створеного вручну, який має бути під управлінням Terraform — відтворення його замість імпортування може призвести до перерв у роботі.
  • Перед застосуванням уважно прочитайте відмінності плану, якщо підозрюється дрейф — Terraform не відрізняє « хтось навмисно змінив це » від « це потрібно повернути », тому людина повинна зробити цей виклик.

Практичні вправи

  1. Напишіть речення, у якому пояснюється, що таке дрейф і якою є його поширена причина.
  2. Поясніть, чому блокування стану має значення для команди, що працює на тій же інфраструктурі.
  3. Описати, коли ви використовуєте terraform import замість простого запуску apply.

На практиці: Навігація нюансів для не-народжені мовці

Погляньмо правді в очі – технічний жаргон може бути складним, незалежно від вашої рідної мови. При обміні інформацією про складні системи, такі як Terraform і його файли стану, тонкі відмінності у формулюваннях можуть суттєво вплинути на ясність і прийняття в команді. Для розробників, які не володіють англійською мовою, розуміння * мет * за певними термінами є настільки ж важливим, як і знання їх буквальних визначення. Це не просто про те, щоб сказати «дрейф» - це про те, щоб передати серйозність ситуації.

Розглянемо такий сценарій: Ви переглядали Terraform PR, який вводить новий сервер бази даних. Автор включив повідомлення про перенесення, у якому йдеться: « Застосовано зміни до бази даних ». Хоча це повідомлення технічно вірне, у ньому бракує контексту і не вказано потенційних проблем. Професійнішим підходом буде: « Оновлена інфраструктура з новим екземпляром PostgreSQL. Ця зміна * вводить дрейф * у файл стану; нам слід дослідити потенційні конфлікти і переконатися, що належним чином налаштовано блокування, щоб уникнути невідповідностей у майбутньому. « Бачите зсув? Додані слова підкреслюють ризик, пов’язаний зі зміною - ризик, який часто немовляв, але критично важливий для спільної роботи з інфраструктурою. Аналогічно, якщо ви пояснюєте конфігурацію Terraform комусь, хто не знайомий з проектом, сказати «Це змінить стан» недостатньо. Замість цього спробуйте « Ці зміни розроблені для * приведення до відхилення * від нашого базового стану, що вимагає ретельного розгляду блокування і потенційних стратегій відновлення ». Ключовим є розуміння таких термінів, як « відхилення », « дрейф » і « базова лінія », а також їх відношення до підтримки послідовного стану Terraform.

Інша поширена ситуація виникає в обговореннях Slack при вирішенні проблем. Хтось може зненацька ввести: «Статус пошкоджений! Неможливо застосувати!», хоча це зрозуміло, але не надає інформації, яка може бути використана. Більш корисною відповіддю було б: «Гаразд, давайте розглянемо дрейф стану. Чи можете ви поділитись різницею між поточним станом і базовим? Нам потрібно визначити джерело розбіжностей, щоб правильно розв’язати це.»  Використання фраз на кшталт «джерело розбіжностей» чітко визначає проблему як систематичну проблему, що потребує діагностики, а не просто випадковий «пошкоджений» стан. Це також підкреслює важливість розуміння * чому * дрейф стався - це була ненавмисна зміна, або навмисна модифікація, яка не була належним чином відстежена?

Нарешті, при написанні описів PR, важливо бути точним про те, як зміни впливають на стан Terraform. Замість простого «Додано ресурси», розгляньте «Введено три нові екземпляри EC2 і оновлено пов’ язані правила груп безпеки. Це призведе до *розбіжності станів *, що вимагає синхронізації і перегляду нашої стратегії блокування. “Включення таких фраз, як “розбіжність станів”, “синхронізація” і “стратегія блокування” демонструє розуміння основних принципів Terraform і допомагає запобігти нерозумінням вниз по лінії.

Ось приклад того, як ви можете використовувати terraform apply для перевірки на наявність потенційних конфліктів станів:

terraform plan -out=temp_plan.tfplan
terraform show tfplan temp_plan.tfplan | grep "Conflict"

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

Поширені запитання

Про що ця стаття "Англійська назва — Terraform State"?

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

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська назва — Terraform State"?

Приблизно 8 min.