Перейти к содержимому
Главная страница » Введение в Terraform для начинающих — Учебное пособие по Terraform

Введение в Terraform для начинающих — Учебное пособие по Terraform

1

Хотите знать, что такое Терраформ? Давайте узнаем об этом.

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

Несмотря на все функции, которые предоставляет «Инфраструктура как код», она сталкивается с множеством проблем:

  • Нужно научиться кодировать
  • Не знаю, как повлияют изменения.
  • Нужно отменить изменения
  • Не могу отслеживать изменения
  • Не могу автоматизировать ресурс
  • Несколько сред для инфраструктуры

Terraform был создан для решения этих проблем.

Что такое Терраформ?

Terraform — это инфраструктура с открытым исходным кодом в виде инструмента кода, разработанная HashiCorp. Он используется для определения и предоставления полной инфраструктуры с использованием простого в освоении декларативного языка.

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

Ниже приведены некоторые преимущества использования Terraform.

  • Обеспечивает ли оркестровку, а не только управление конфигурацией?
  • Поддерживает несколько поставщиков, таких как AWS, Azure, GCP, DigitalOcean и многие другие.
  • Обеспечьте неизменяемую инфраструктуру, в которой конфигурация будет плавно меняться.
  • Использует простой для понимания язык HCL (язык конфигурации HashiCorp).
  • Легко переносится на любого другого провайдера
  • Поддерживает только клиентскую архитектуру, поэтому нет необходимости в дополнительном управлении конфигурацией на сервере.

Основные понятия Terraform

Ниже приведены основные концепции/терминологии, используемые в Terraform:

  • Переменные : также используются в качестве входных переменных. Это пара ключ-значение, используемая модулями Terraform для обеспечения возможности настройки.
  • Поставщик : это плагин для взаимодействия с API-интерфейсами службы и доступа к связанным с ней ресурсам.
  • Модуль : это папка с шаблонами Terraform, в которой определены все конфигурации.
  • Состояние : состоит из кэшированной информации об инфраструктуре, управляемой Terraform, и связанных с ней конфигурациях.
  • Ресурсы : это относится к блоку из одного или нескольких объектов инфраструктуры (вычислительных экземпляров, виртуальных сетей и т. д.), которые используются при настройке и управлении инфраструктурой.
  • Источник данных : реализован поставщиками для возврата информации о внешних объектах в терраформирование.
  • Выходные значения : это возвращаемые значения модуля terraform, которые могут использоваться другими конфигурациями.
  • План : это один из этапов, на котором определяется, что необходимо создать, обновить или уничтожить, чтобы перейти от реального/текущего состояния инфраструктуры к желаемому состоянию.
  • Применить : это один из этапов, на котором применяются изменения реального/текущего состояния инфраструктуры для перехода к желаемому состоянию.

Жизненный цикл Терраформирования

Жизненный цикл Terraform состоит из: инициализации , планирования , применения и уничтожения .

  • Terraform init инициализирует рабочий каталог, который состоит из всех файлов конфигурации.
  • План Terraform используется для создания плана выполнения для достижения желаемого состояния инфраструктуры. Изменения в файлах конфигурации производятся для достижения желаемого состояния.
  • Затем Terraform apply вносит в инфраструктуру изменения, определенные в плане, и инфраструктура приходит в желаемое состояние.
  • Уничтожение Terraform используется для удаления всех старых ресурсов инфраструктуры, которые помечены как испорченные после фазы применения.

Как работает Терраформ?

Terraform имеет два основных компонента, составляющих его архитектуру:

  • Терраформирование Ядра
  • Провайдеры

Терраформирование Ядра

Ядро Terraform использует два источника входных данных для выполнения своей работы.

Первый источник входных данных — это конфигурация Terraform, которую вы, как пользователь, настраиваете. Здесь вы определяете, что необходимо создать или предоставить. А второй источник входных данных — это состояние, в котором terraform сохраняет актуальное состояние того, как выглядит текущая настройка инфраструктуры.

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

Провайдеры

Вторым компонентом архитектуры являются поставщики конкретных технологий. Это могут быть поставщики облачных услуг, такие как AWS, Azure, GCP или другая инфраструктура в качестве сервисной платформы. Он также является поставщиком более высокоуровневых компонентов, таких как Kubernetes или других инструментов «платформа как услуга», и даже некоторого программного обеспечения в качестве инструмента самообслуживания.

Это дает вам возможность создавать инфраструктуру на разных уровнях.

Например: создайте инфраструктуру AWS, затем разверните поверх нее Kubernetes, а затем создайте сервисы/компоненты внутри этого кластера Kubernetes.

У Terraform есть более ста провайдеров для различных технологий, и каждый провайдер затем предоставляет пользователю terraform доступ к своим ресурсам. Таким образом, через поставщика AWS, например, у вас есть доступ к сотням ресурсов AWS, таких как экземпляры EC2, пользователи AWS и т. д. С помощью поставщика Kubernetes вы получаете доступ к товарам, ресурсам, таким как сервисы, развертывания, пространства имен и т. д.

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

Давайте займемся практическими делами. 👨‍💻

Мы установим Terraform на Ubuntu и предоставим очень простую инфраструктуру.

Установить Терраформ

Загрузите последнюю версию пакета terraform.

Посетите официальную страницу загрузки, чтобы получить последнюю версию для соответствующей ОС.

geekflare@geekflare:~$ wget https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip —2020-08-14 16:55:38— https://releases.hashicorp .com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip Разрешение Release.hashicorp.com (releases.hashicorp.com)… 151.101.153.183, 2a04:4e42:24::439 Подключение к Releases.hashicorp.com (releases.hashicorp.com)|151.101.153.183|:443… подключено. HTTP-запрос отправлен, ожидается ответ… 200 OK Длина: 34851622 (33M) [application/zip] Сохранение в: 'terraform_0.13.0_linux_amd64.zip' terraform_0.13.0_linux_amd64.zip 100%[======== =============================================== =======>] 33,24M 90,3 КБ/с за 5 м 28 с 14 августа 2020 г. 17:01:06 (104 КБ/с) — 'terraform_0.13.0_linux_amd64.zip' сохранен [34851622/34851622]

Извлеките загруженный пакет.

geekflare@geekflare:~$ разархивируйте terraform_0.13.0_linux_amd64.zip Архив: terraform_0.13.0_linux_amd64.zip раздувание: terraform

Переместите исполняемый файл terraform по пути, показанному ниже. Проверьте версию терраформа.

geekflare@geekflare:~$ sudo mv terraform /usr/local/bin/ [sudo] пароль для geekflare: geekflare@geekflare:~$ terraform -v Terraform v0.13.0

Вы можете видеть, что это доступные для выполнения команды в terraform.

geekflare@geekflare:~$ terraform Использование: terraform [-version] [-help] [args] Ниже перечислены доступные для выполнения команды. Сначала отображаются наиболее распространенные и полезные команды, а затем менее распространенные или более сложные команды. Если вы только начинаете работать с Terraform, придерживайтесь общих команд. Перед использованием других команд прочтите справку и документацию. Общие команды: Apply Создает или изменяет консоль инфраструктуры. Интерактивная консоль для интерполяции Terraform. Уничтожает. Уничтожает инфраструктуру, управляемую Terraform. env Управление рабочей областью. fmt. Перезаписывает файлы конфигурации в канонический формат. в Terraform init Инициализировать вход в рабочий каталог Terraform. Получить и сохранить учетные данные для выхода из системы удаленного хоста. Удалить локально сохраненные учетные данные для вывода удаленного хоста. Считать выходные данные из плана файла состояния. Сгенерировать и отобразить поставщиков плана выполнения. Печатает дерево используемых поставщиков. в обновлении конфигурации Обновить локальный файл состояния по сравнению с реальными ресурсами. Показать Проверить состояние или план Terraform. taint. Вручную пометить ресурс для восстановления. untaint. Вручную снять пометку с ресурса как испорченного. validate. Проверяет версию файлов Terraform. Распечатывает рабочую область версии Terraform. Переписывает исходный код модуля версии до 0.12 для версии 0.12. Обновление 0.13. Перезаписывает исходный код модуля версии до 0.13 для отладки версии 0.13. Управление выводом отладки (экспериментальное). Принудительная разблокировка. Ручная разблокировка состояния terraform. Push. Устаревшая команда для состояния Terraform Enterprise Legacy (v1). Расширенное управление состоянием

Предоставление экземпляра AWS EC2 с использованием Terraform

В этой демонстрации я собираюсь запустить новый экземпляр AWS EC2 с использованием Terraform.

Создайте рабочий каталог для этой демонстрации Terraform.

geekflare@geekflare:~$ mkdir terraform_demo

Перейдите в каталог и создайте файл конфигурации terraform, в котором вы определяете поставщика и ресурсы для запуска экземпляра AWS EC2.

geekflare@geekflare:~$ cd terraform_demo/ geekflare@geekflare:~/terraform_demo$ gedit awsec2.tf поставщик «aws» { access_key = «B5KG6Fe5GUKIATUF5UD» secret_key = «R4gb65y56GBF6765ejYSJA4YtaZ+T6GY7H» регион = «us-west-2″ } ресурс » aws_instance» «terraform_demo» { ami = «ami-0a634ae95e11c6f91» instance_type = «t2.micro» }

Примечание: я изменил ключи доступа и секретные ключи 😛, вам нужно использовать свои.

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

В ресурсах я привожу подробности AMI об Ubuntu (ami-0a634ae95e11c6f91) и упоминаю, что тип экземпляра должен быть t2.micro.

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

терраформирование инициализации

Теперь первым шагом будет инициализация terraform.

geekflare@geekflare:~/terraform_demo$ terraform init Инициализация серверной части… Инициализация плагинов провайдера… — Использование ранее установленного hashicorp/aws v3.2.0 Следующие провайдеры не имеют каких-либо ограничений версии в конфигурации, поэтому последняя версия была установлен. Чтобы предотвратить автоматическое обновление до новых основных версий, которые могут содержать критические изменения, мы рекомендуем добавить ограничения версии в блок require_providers вашей конфигурации со строками ограничений, предложенными ниже. * hashicorp/aws: version = «~> 3.2.0» Terraform успешно инициализирован! Теперь вы можете начать работать с Terraform. Попробуйте запустить «план терраформирования», чтобы увидеть любые изменения, необходимые для вашей инфраструктуры. Все команды Terraform теперь должны работать. Если вы когда-либо устанавливали или изменяли модули или конфигурацию серверной части для Terraform, повторно запустите эту команду, чтобы повторно инициализировать ваш рабочий каталог. Если вы забудете, другие команды обнаружат это и при необходимости напомнят вам об этом.

план терраформирования

Далее следует этап планирования; он создаст граф выполнения для создания и предоставления инфраструктуры.

geekflare@geekflare:~/terraform_demo$ terraform plan Обновление состояния Terraform в памяти перед планированием… Обновленное состояние будет использоваться для расчета этого плана, но не будет сохраняться в локальном или удаленном хранилище состояний. ————————————————— ———————- План выполнения создан и показан ниже. Действия ресурса обозначаются следующими символами: + create Terraform выполнит следующие действия: # aws_instance.terraform_demo будет создан + ресурс «aws_instance» «terraform_demo» { + ami = «ami-0a634ae95e11c6f91» + arn = (известно после применения) + Associate_public_ip_address = (известно после применения) + доступность_зоны = (известно после применения) + cpu_core_count = (известно после применения) + cpu_threads_per_core = (известно после применения) + get_password_data = false + host_id = (известно после применения) + id = (известно после применения) применить) + экземпляр_состояние = (известно после применения) + тип_экземпляра = «t2.micro» + ipv6_address_count = (известно после применения) + ipv6_addresses = (известно после применения) + key_name = (известно после применения) + outpost_arn = (известно после применения) + пароль_данные = (известно после применения) + Placement_group = (известно после применения) + Primary_network_interface_id = (известно после применения) + Private_dns = (известно после применения) + Private_IP = (известно после применения) + public_dns = (известно после применения) + public_ip = (известно после применения) + Secondary_private_ips = (известно после применения) + Security_groups = (известно после применения) + source_dest_check = true + subnet_id = (известно после применения) + Tenancy = (известно после применения) + Volume_tags = (известно после применения) + vpc_security_group_ids = (известно после применения) + ebs_block_device { + delete_on_termination = (известно после применения) + имя_устройства = (известно после применения) + зашифровано = (известно после применения) + iops = (известно после применения) + kms_key_id = (известно после применения) ) + snapshot_id = (известен после применения) + Volume_id = (известен после применения) + Volume_size = (известен после применения) + Volume_type = (известен после применения) } + ephemeral_block_device { + имя_устройства = (известен после применения) + no_device = (известен после применения) + virtual_name = (известно после применения) } + Metadata_options { + http_endpoint = (известно после применения) + http_put_response_hop_limit = (известно после применения) + http_tokens = (известно после применения) } + network_interface { + delete_on_termination = (известно после применения) ) + device_index = (известно после применения) + network_interface_id = (известно после применения) } + root_block_device { + delete_on_termination = (известно после применения) + имя_устройства = (известно после применения) + зашифровано = (известно после применения) + iops = (известно) после применения) + kms_key_id = (известен после применения) + Volume_id = (известен после применения) + Volume_size = (известен после применения) + Volume_type = (известен после применения) } } План: 1 для добавления, 0 для изменения, 0 для уничтожения . ————————————————— ———————- Примечание. Вы не указали параметр «-out» для сохранения этого плана, поэтому Terraform не может гарантировать, что именно эти действия будет выполнено, если впоследствии будет запущено «terraform apply».

применить терраформирование

На этапе применения будет выполнен файл конфигурации и запущен экземпляр AWS EC2. Когда вы запустите команду Apply, она спросит вас: «Хотите ли вы выполнить эти действия?», вам нужно ввести «да» и нажать Enter.

geekflare@geekflare:~/terraform_demo$ terraform apply План выполнения создан и показан ниже. Действия ресурса обозначаются следующими символами: + create Terraform выполнит следующие действия: # aws_instance.terraform_demo будет создан + ресурс «aws_instance» «terraform_demo» { + ami = «ami-0a634ae95e11c6f91» + arn = (известно после применения) + Associate_public_ip_address = (известно после применения) + доступность_зоны = (известно после применения) + cpu_core_count = (известно после применения) + cpu_threads_per_core = (известно после применения) + get_password_data = false + host_id = (известно после применения) + id = (известно после применения) применить) + экземпляр_состояние = (известно после применения) + тип_экземпляра = «t2.micro» + ipv6_address_count = (известно после применения) + ipv6_addresses = (известно после применения) + key_name = (известно после применения) + outpost_arn = (известно после применения) + пароль_данные = (известно после применения) + Placement_group = (известно после применения) + Primary_network_interface_id = (известно после применения) + Private_dns = (известно после применения) + Private_IP = (известно после применения) + public_dns = (известно после применения) + public_ip = (известно после применения) + Secondary_private_ips = (известно после применения) + Security_groups = (известно после применения) + source_dest_check = true + subnet_id = (известно после применения) + Tenancy = (известно после применения) + Volume_tags = (известно после применения) + vpc_security_group_ids = (известно после применения) + ebs_block_device { + delete_on_termination = (известно после применения) + имя_устройства = (известно после применения) + зашифровано = (известно после применения) + iops = (известно после применения) + kms_key_id = (известно после применения) ) + snapshot_id = (известен после применения) + Volume_id = (известен после применения) + Volume_size = (известен после применения) + Volume_type = (известен после применения) } + ephemeral_block_device { + имя_устройства = (известен после применения) + no_device = (известен после применения) + virtual_name = (известно после применения) } + Metadata_options { + http_endpoint = (известно после применения) + http_put_response_hop_limit = (известно после применения) + http_tokens = (известно после применения) } + network_interface { + delete_on_termination = (известно после применения) ) + device_index = (известно после применения) + network_interface_id = (известно после применения) } + root_block_device { + delete_on_termination = (известно после применения) + имя_устройства = (известно после применения) + зашифровано = (известно после применения) + iops = (известно) после применения) + kms_key_id = (известен после применения) + Volume_id = (известен после применения) + Volume_size = (известен после применения) + Volume_type = (известен после применения) } } План: 1 для добавления, 0 для изменения, 0 для уничтожения . Вы хотите выполнить эти действия? Terraform выполнит действия, описанные выше. Для одобрения будет принято только «да». Введите значение: да aws_instance.terraform_demo: Создание… aws_instance.terraform_demo: Все еще создается… [прошло 10 с] aws_instance.terraform_demo: Все еще создается… [прошло 20 с] aws_instance.terraform_demo: Все еще создается… [30 с) истекло] aws_instance.terraform_demo: Все еще создается… [прошло 40 секунд] aws_instance.terraform_demo: Создание завершено через 44 секунды [id=i-0eec33286ea4b0740] Применение завершено! Ресурсы: 1 добавлено, 0 изменено, 0 уничтожено.

Перейдите на панель управления AWS EC2, и вы увидите, что создан новый экземпляр с идентификатором экземпляра, указанным в конце команды Apply.

Вы успешно запустили экземпляр AWS EC2 с помощью Terraform.

терраформировать уничтожить

Наконец, если вы хотите удалить инфраструктуру, вам нужно запустить команду уничтожения.

geekflare@geekflare:~/terraform_demo$ terraform уничтожить aws_instance.terraform_demo: Обновление состояния… [id=i-0eec33286ea4b0740] План выполнения создан и показан ниже. Действия ресурса обозначаются следующими символами: — уничтожить Terraform выполнит следующие действия: # aws_instance.terraform_demo будет уничтожен — ресурс «aws_instance» «terraform_demo» { — ami = «ami-0a634ae95e11c6f91» -> null — arn = «arn :aws:ec2:us-west-2:259212389929:instance/i-0eec33286ea4b0740» -> null — Associate_public_ip_address = true -> null — доступность_зона = «us-west-2c» -> null — cpu_core_count = 1 -> null — cpu_threads_per_core = 1 -> null -disable_api_termination = false -> null — ebs_optimized = false -> null — get_password_data = false -> null — спящий режим = false -> null — id = «i-0eec33286ea4b0740» -> null — instance_state = «работает» » -> null — instance_type = «t2.micro» -> null — ipv6_address_count = 0 -> null — ipv6_addresses = [] -> null — мониторинг = false -> null — Primary_network_interface_id = «eni-02a46f2802fd15634» -> null — Private_dns = «ip-172-31-13-160.us-west-2.compute.internal» -> null — Private_ip = «172.31.13.160» -> null — public_dns = «ec2-34-221-77-94. us-west-2.compute.amazonaws.com» -> null — public_ip = «34.221.77.94» -> null — Secondary_private_ips = [] -> null — security_groups = [ — «default», ] -> null — source_dest_check = true -> null — subnet_id = «subnet-5551200c» -> null — tags = {} -> null — tenancy = «default» -> null — Volume_tags = {} -> null — vpc_security_group_ids = [ — «sg-b5b480d1» , ] -> null — Credit_specification { — cpu_credits = «standard» -> null } — Metadata_options { — http_endpoint = «enabled» -> null — http_put_response_hop_limit = 1 -> null — http_tokens = «optional» -> null } — root_block_device { — delete_on_termination = true -> null — имя_устройства = «/dev/sda1» -> null — зашифровано = false -> null — iops = 100 -> null — Volume_id = «vol-0be2673afff6b1a86» -> null — Volume_size = 8 -> null — Volume_type = «gp2» -> null } } План: 0 для добавления, 0 для изменения, 1 для уничтожения. Вы действительно хотите уничтожить все ресурсы? Terraform уничтожит всю вашу управляемую инфраструктуру, как показано выше. Отмена невозможна. Для подтверждения будет принято только «да». Введите значение: да aws_instance.terraform_demo: Уничтожаем… [id=i-0eec33286ea4b0740] aws_instance.terraform_demo: Продолжаем уничтожать… [id=i-0eec33286ea4b0740, прошло 10 с] aws_instance.terraform_demo: Продолжаем уничтожать… [id =i-0eec33286ea4b0740, прошло 20 с] aws_instance.terraform_demo: Все еще уничтожается… [id=i-0eec33286ea4b0740, прошло 30 с] aws_instance.terraform_demo: Уничтожение завершено через 34 с Уничтожение завершено! Ресурсы: 1 уничтожен.

Если вы перепроверите панель управления EC2, вы увидите, что экземпляр был прекращен.

Заключение

Я считаю, что вышеизложенное дает вам представление о том, как начать работу с Terraform. Попробуйте пример, который я только что показал.

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

Если вы хотите узнать больше, я бы посоветовал проверить курс «Изучение DevOps с помощью Terraform».

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *