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

Upravlenie Sostoaniem Terraform



Инфраструктура как код — это процедура управления и подготовки ИТ-инфраструктуры с помощью кода, которая помогает преодолеть сложность крупномасштабной подготовки и управления ИТ-ресурсами вручную и многократно. Terraform от HashiCorp — это инструмент IaC с открытым исходным кодом, который использует систему управления состоянием для отслеживания изменений и управления файлами состояния. Его система управления состоянием является одной из его ключевых особенностей и помогает эффективно отслеживать изменения инфраструктуры. В этой статье рассказывается, как работает управление состоянием Terraform и как его эффективно использовать.

Состояние терраформы

Текущее состояние нашей инфраструктуры, которое включает в себя информацию о ресурсах, которые мы определяем в нашем коде, записывается как состояние Terraform. Terraform использует это состояние для определения изменений, необходимых для приведения нашей инфраструктуры в желаемое состояние при выполнении такой команды, как Terraform «apply». После внесения изменений (создания, изменения и удаления) Terraform обновляет файл состояния с учетом нового состояния вашей инфраструктуры.

Чтобы ясно понять концепцию, давайте возьмем пример:







ресурс 'локальный_файл' 'Джон' {

имя файла = '/home/Джон.txt'

содержание = «Я люблю домашних животных»

}

Здесь мы создаем файл Terraform с именем «main.tf». Внутри него находится ресурс типа local_file с именем «John» с двумя атрибутами: имя файла и содержимое.



Тип ресурса local_file используется для создания файла в локальной файловой системе компьютера, на котором работает Terraform. В этом случае файл создается с именем «John.txt» в каталоге «/home», а содержимое файла — «Я люблю домашних животных».



Теперь давайте выполним поток Terraform — инициализация, планирование и применение Terraform. Когда мы впервые выполняем команду «применить» Terraform в нашем проекте, Terraform автоматически создает файл состояния с именем «terraform.tfstate» в корневом каталоге нашего проекта Terraform. Он включает в себя всю информацию о текущем состоянии нашей инфраструктуры в формате JSON.





Вот файл состояния для ресурса, который мы создали:



Теперь, допустим, мы хотим удалить текущий ресурс и создать другой ресурс типа random_pet с именем «my-pet» с атрибутами — префиксом, длиной и разделителем.

ресурс 'random_pet' 'мой питомец' {

префикс = 'Мистер'

длина = '1'

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

}

Здесь мы удаляем ресурс local_file и добавляем ресурс random_pet. Наше желаемое состояние — иметь только ресурс random_pet. Давайте выполним команды инициализации, планирования и применения Terraform.

Как показано на предыдущем рисунке, когда мы выполняем команду Terraform «plan», она показывает действия, которые Terraform предпринимает для достижения желаемого состояния. Когда мы запускаем команду Terraform «apply», создается ресурс «my-pet», а ресурс «John» удаляется. Кроме того, файл состояния обновляется путем уничтожения метаданных ресурса local_file и добавления метаданных ресурса random_pet.

Вот содержимое обновленного файла состояния:

Как работает приложение «Terraform the Manage State»?

Используя бэкенд, Terraform управляет состоянием. Серверная часть — это удаленная служба или локальная файловая система, которую Terraform использует для хранения и извлечения данных о состоянии. В зависимости от наших требований, мы можем выбрать подходящий бэкэнд.

Terraform поддерживает несколько встроенных бэкэндов, включая локальные, Amazon S3, HashiCorp Consul, Vault и Azure Storage. Мы также можем создать собственный бэкэнд, если ни один из встроенных вариантов не соответствует потребностям.

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

Важность государственного управления

Управление состоянием в таких инструментах, как Terraform, необходимо из-за следующих ключевых моментов:

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

Файл состояния предоставляет точный снимок существующих ресурсов и их текущих атрибутов. Эти данные необходимы для понимания нашей инфраструктуры и обеспечения ее желаемого состояния.

Отслеживание изменений в инфраструктуре с течением времени

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

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

Определение желаемого состояния инфраструктуры в коде позволяет нам автоматизировать создание и управление нашей инфраструктурой. Государственное управление гарантирует, что наша инфраструктура останется желанной, даже если со временем будут вноситься изменения.

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

С Terraform мы можем определить отношения между ресурсами в нашем файле конфигурации, а Terraform использует файл состояния, чтобы гарантировать, что эти отношения поддерживаются. Это гарантирует, что изменения в одном ресурсе не повлияют непреднамеренно на другие ресурсы.

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

В случае сбоя или сбоя мы можем использовать файл состояния для воссоздания инфраструктуры в известном состоянии. Это может помочь свести к минимуму время простоя и обеспечить быстрое и эффективное восстановление нашей инфраструктуры.

Лучшие практики для эффективного управления состоянием

Вот несколько советов, которым мы можем следовать, чтобы эффективно управлять состояниями:

Используйте удаленный сервер

Удаленный сервер имеет несколько преимуществ по сравнению с локальным сервером. Это позволяет нескольким пользователям работать в одной и той же инфраструктуре, а также обеспечивает лучшую безопасность и надежность, чем локальные серверные части.

Включить управление версиями

Версируя файл состояния, мы можем отслеживать изменения с течением времени и при необходимости откатиться к предыдущей версии. Кроме того, управление версиями обеспечивает контрольный журнал и помогает обеспечить надлежащее документирование изменений.

Используйте запирающий механизм

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

Сделайте резервную копию вашего файла состояния

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

Заключение

У нас было краткое введение в IaC и Terraform, а также понимание файлов состояния и управление ими на примерах. Понимание того, как Terraform работает с состоянием, может помочь нам избежать распространенных ошибок и гарантировать, что наша инфраструктура останется желанной. Следуя передовым методам управления состояниями, мы можем уверенно и эффективно использовать Terraform.