Terraform State Management

Terraform State Management



Инфраструктурата като код е процедурата за управление и осигуряване на ИТ инфраструктура чрез код, който помага да се преодолее сложността на широкомащабното предоставяне и управление на ИТ ресурсите ръчно и многократно. Terraform от HashiCorp е IaC инструмент с отворен код, който използва система за управление на състоянието, за да проследява промените и да управлява файловете на състоянието. Неговата система за управление на състоянието е една от ключовите му характеристики и помага за ефективното проследяване на промените в инфраструктурата. Тази статия разглежда как работи управлението на състоянието на Terraform и как да го използвате ефективно.

Terraform State

Текущото състояние на нашата инфраструктура, което включва информация за ресурсите, които дефинираме в нашия код, се записва като състояние на Terraform. Terraform използва това състояние, за да определи промените, които са необходими, за да доведе нашата инфраструктура в желаното състояние, когато се изпълни команда като Terraform „приложи“. След извършване на промените (създаване, модифициране и изтриване), Terraform актуализира файла със състоянието с новото състояние на вашата инфраструктура.

За да разберем ясно концепцията, нека вземем пример:







ресурс 'local_file' 'Джон' {

име на файл = '/home/John.txt'

съдържание = 'Обичам домашни любимци'

}

Тук създаваме файл Terraform, наречен „main.tf“. Вътре в него има ресурс от тип local_file, наречен „John“ с два атрибута: име на файл и съдържание.



Типът ресурс local_file се използва за създаване на файл в локалната файлова система на машината, на която работи Terraform. В този случай файлът се създава с името „John.txt“ в директорията „/home“, а съдържанието на файла е „I love pets“.



Сега нека изпълним потока Terraform – Terraform инициализира, планира и приложи. Когато изпълним командата Terraform “apply” в нашия проект за първи път, Terraform автоматично създава файла със състоянието, наречен “terraform.tfstate” в основната директория на нашия проект Terraform. Той включва цялата информация за текущото състояние на нашата инфраструктура във формат JSON.





Ето файла със състоянието за ресурса, който създадохме:



Сега, да речем, че искаме да премахнем текущия ресурс и да създадем друг ресурс от тип random_pet с име „my-pet“ с атрибути – префикс, дължина и разделител.

ресурс 'произволен_любимец' 'Моят домашен любимец' {

префикс = 'Г-н'

дължина = '1'

разделител = '.'

}

Тук премахваме ресурса local_file и добавяме ресурс random_pet. Желаното от нас състояние е да имаме само ресурса random_pet. Нека изпълним командите за инициализация, планиране и прилагане на Terraform.

Както е показано в предишната илюстрация, когато изпълним командата Terraform „plan“, тя показва действията, които Terraform предприема, за да стигне до желаното състояние. Когато стартираме командата Terraform “apply”, ресурсът “my-pet” се създава и ресурсът “John” се премахва. Освен това файлът със състоянието се актуализира чрез унищожаване на метаданните на ресурса local_file и добавяне на метаданните на ресурса random_pet.

Ето съдържанието на актуализирания файл със състоянието:

Как работи DoesTerraform the Manage State?

Използвайки бекенд, Terraform управлява състоянието. Backend е отдалечена услуга или локална файлова система, която Terraform използва за съхраняване и извличане на данните за състоянието. В зависимост от нашите изисквания можем да изберем подходящ бекенд.

Terraform поддържа няколко вградени бекенда, включително локални, Amazon S3, HashiCorp Consul, Vault и Azure Storage. Можем също така да създадем персонализиран бекенд, ако нито една от вградените опции не отговаря на нуждите.

В предишните примери файловете със състоянието бяха съхранени в локалния бекенд. Но съхраняването му в отдалечен бекенд е най-добрата практика, тъй като извиква сътрудничество и повишава сигурността.

Значение на държавното управление

Управлението на състоянието в инструменти като Terraform е от съществено значение поради следните ключови точки:

Определете текущото състояние на вашата инфраструктура

Файлът със състоянието предоставя точна моментна снимка на съществуващите ресурси и техните текущи атрибути. Тези данни са наложителни, за да разберем нашата инфраструктура и да гарантираме, че тя е в желаното състояние.

Проследявайте промените в инфраструктурата във времето

Всеки път, когато прилагаме промените с помощта на Terraform, файлът със състоянието се актуализира, за да отразява новото състояние на нашата инфраструктура. Това ни позволява да проследяваме как се е развила нашата инфраструктура и осигурява одитна пътека за всички промени.

Автоматизация

Дефинирането на желаното от вас състояние на инфраструктурата в код ни позволява да автоматизираме създаването и управлението на нашата инфраструктура. Държавното ръководство гарантира, че нашата инфраструктура остава желана, дори и промените да се извършват във времето.

Управление на зависимостите

С Terraform можем да дефинираме връзките между ресурсите в нашия конфигурационен файл и Terraform използва файла със състоянието, за да гарантира, че тези връзки се поддържат. Това гарантира, че промените в един ресурс няма да засегнат по невнимание други ресурси.

Възстановяване след бедствие

Ако възникне повреда или прекъсване, можем да използваме държавния файл, за да пресъздадем инфраструктурата в известно състояние. Това може да помогне за минимизиране на времето на престой и да гарантира, че нашата инфраструктура се възстановява бързо и ефективно.

Най-добри практики за ефективно управление на държавата

Ето няколко съвета, които можем да следваме, за да управляваме ефективно състоянията:

Използвайте отдалечен бекенд

Отдалеченият бекенд предоставя няколко предимства пред локалния бекенд. Позволява на множество потребители да работят върху една и съща инфраструктура и също така предлагат по-добра сигурност и надеждност от локалните бекендове.

Активирайте управлението на версии

Чрез създаване на версии на държавния файл можем да проследим промените във времето и да се върнем към предишна версия, ако е необходимо. Освен това управлението на версии осигурява одитна пътека и помага да се гарантира, че промените са подходящо документирани.

Използвайте заключващ механизъм

Можем да използваме заключващ механизъм, който помага за предотвратяване на конфликти, когато множество потребители работят върху една и съща инфраструктура. Terraform поддържа няколко инструмента за заключване, включително DynamoDB, Consul и S3.

Архивирайте вашия държавен файл

Можем да се възстановим от повреда на данните, ако редовно архивираме държавния файл. Трябва да съхраняваме резервните копия на сигурно място и да следваме съответните изисквания за съответствие.

Заключение

Имахме кратко въведение в IaC и Terraform, докато разбирахме държавните файлове и ги управлявахме чрез примери. Разбирането как Terraform работи в държавата може да ни помогне да избегнем обичайните клопки и да гарантираме, че нашата инфраструктура остава желана. Като следваме най-добрите практики за управление на състояния, можем да използваме Terraform с увереност и ефективно.