Курс «DevOps. Системный инженер». Занятие 10. Подход Infrastructure as Code. Terraform

1.

Курс «DevOps. Системный инженер»
Занятие 10.
Подход Infrastructure as
Code. Terraform
Преподаватель
Денис Сойка
www.belhard.academy

2.

Содержание
1. Подход Infrastructure as Code (IaC). Цели, варианты реализации, минусы,
инструменты.
2. Terraform. Описание, основные функции, best practices.
3. Демо: разворачивание и настройка виртуальных машин (Virtualbox) с помощью
Terraform
01

3.

Подход IaC
02
Цель подхода IaC - управления ИТ-инфраструктурой, при котором для управления
ресурсами облачной (и не только) инфраструктуры применяются рекомендации из
методологий и практик DevOps.
ПРИМЕР

4.

Подход IaC
Варианты реализации подхода IaC:
Semi-automation – какая-то часть инфраструктуры создается и поддерживается с
помощью инструмента IaC, остальное – руками;
IaC – вся инфраструктура создается и поддерживается с помощью инструмента IaC,
код хранится в Git, запуск автоматизирован;
Shared IaC – так же как и при реализации IaC + разные департаменты имеют доступ
только к своей части (например, сетевые инженеры имеют доступ только к сетевой
части кода).
03

5.

Подход IaC
Минусы подхода IaC:
Описание происходит на языке программирования;
Отсутствия адекватной логики;
Сложность внедрения на больших проектах.
04

6.

Подход IaC
Инструменты IaC:
Terraform – инструмент HashiCorp, позволяет подготовить инфраструктуру к
разворачиванию в облаке/ЦОД с помощью HCL (yaml);
Pulumi – то же самое, что Terraform, только описание инфраструктуры на Node.js,
Python, Go, .NET Core;
AWS CloudFormation – инструмент Amazon для разворачивания инфраструктуры в
AWS Cloud (json/yaml);
Boto3 – библиотека для Python, позволяет разворачивать инфраструктуру в AWS
Cloud.
05

7.

Terraform
06
Terraform - IaC инструмент компании HashiCorp, главная цель которого - уменьшение
времени
и
затрат
на
развертывание
инфраструктуры,
единое
описание
всей
инфраструктуры, понятное всем и контроль изменений в инфраструктуре. Описание
инфраструктуры происходит на языке HCL (HashiCorp Language) - domain-specific язык,
работает на провайдерах – это набор файлов, которые предоставляют доступ к API
облаков и не только.

8.

Структура Terraform
файлы с расширением tf - файлы конфигурации
файлы с расширением tfvars - файлы переменных
файлы с расширением tfstase - файлы текущего состояния инфраструктуры
.terraform.lock.hcl - файл, где описываются зависимости модулей и
провайдеров
папка .terraform - скачанные провайдер (может быть несколько), которые
указаны в конфигурации
07

9.

Установка Terraform
Скачать пакет https://www.terraform.io/downloads
Вывести на экран PATH:
○ Windows https://stackoverflow.com/questions/1618280/where-can-i-set-pathto-make-exe-on-windows
○ Unix-like системы - echo $PATH
Переместить пакет в одну из папок, указанную выше
Проверить версию terraform командой
○ terraform -help
https://learn.hashicorp.com/tutorials/terraform/install-cli
08

10.

Основные команды Terraform
Init – инициализация работы
Plan – просмотр изменений
Apply – применение изменений
Destroy

инфраструктуры
Fmt
09

приведение
к
каноническому виду
Validate – проверка синтаксиса и
противоречивостей
удаление
Taint – пометка на пересоздание
ресурса

11.

Демо: Terraform + VirtualBox
Создаем кастомную сеть NatNetwork в VirtualBox
Поднимаем 3 виртуальные машины с помощью Terraform
Меняем сетевые настройки на нашу кастомную сеть
10

12.

Terraform + Docker
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name
= "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = ">= 2.13.0"
}
}
}
provider "docker" {
host = "npipe:////.//pipe//docker_engine"
}
resource "docker_image" "nginx" {
name
= "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
11

13.

Terraform Best practices
Remote state - храните файл состояния где-то в удаленном месте;
Lock table - блокируйте файл состояния при запуске terraform;
DRY - пишите код так, чтобы потом его можно было использовать в другом месте;
Используйте модули и workspaces.
11

14.

Почитать/посмотреть
Бесплатные (и платные) курсы на Udemy
https://www.udemy.com/topic/terraform/free/
Портал HasiCorp https://learn.hashicorp.com
13

15.

Спасибо
за внимание!
www.belhard.academy
English     Русский Правила