Terraform — практический путь
Terraform — практический путь
Эта статья проводит через минимальный, но реалистичный стек на AWS: одна ВМ → веб-сервер → несколько инстансов за Application Load Balancer (ALB). Цель — почувствовать цикл init → plan → apply → destroy, прежде чем углубляться в state и модули.
Подготовка
- Учётная запись AWS и IAM-пользователь с правами EC2, VPC, ELB (для учёбы — ограниченная policy).
- Установленный Terraform CLI в PATH.
- Credentials через
aws configureили переменныеAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY.
mkdir terraform-demo && cd terraform-demo
Шаг 1 — один EC2
main.tf:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "eu-central-1"
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0" # замените на актуальный Amazon Linux в вашем регионе
instance_type = "t3.micro"
tags = {
Name = "terraform-demo-web"
}
}
terraform init # скачивает провайдер aws
terraform validate
terraform plan # + create aws_instance.web
terraform apply # подтверждение yes
terraform show # атрибуты созданного ресурса
Разбор:
terraform init— обязателен после clone и при сменеrequired_providers.planпоказывает+ createбез изменений в облаке.- AMI региональны — для prod берите ID из data source
aws_ami, а не константу.
Шаг 2 — веб-сервер через user_data
Добавьте user_data — скрипт первого запуска (cloud-init):
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
user_data = <<-EOF
#!/bin/bash
yum install -y httpd
systemctl start httpd
echo "Hello from Terraform" > /var/www/html/index.html
EOF
tags = { Name = "terraform-demo-web" }
}
После apply откройте public IP инстанса в браузере (если security group пускает 80/tcp — для учёбы добавьте aws_security_group с ingress на 80).
Шаг 3 — outputs
outputs.tf:
output "instance_public_ip" {
value = aws_instance.web.public_ip
description = "Public IP of the web server"
}
terraform apply выведет IP; output можно передать в Ansible или CI через terraform output -json.
Шаг 4 — кластер и ALB (концепция)
Следующий уровень из книги — Auto Scaling Group (ASG) + ALB + несколько подсетей. Логика та же, ресурсов больше:
VPC → public subnets (2 AZ) → ALB → target group → ASG (N × EC2)
Ключевые ресурсы:
aws_vpc,aws_subnet— сеть;aws_lb,aws_lb_listener,aws_lb_target_group— балансировщик;aws_autoscaling_group,aws_launch_template— масштабируемый кластер.
Полный стек удобно оформить модулями, чтобы stage и prod не копировали HCL.
Завершение и очистка
terraform destroy # удаляет все ресурсы из state
Даже t3.micro и ALB могут попадать под платные tier AWS. После эксперимента выполняйте destroy или ставьте prevent_destroy на prod-ресурсы.
См. также
- Terraform — state, провайдеры, CI.
- Модули и структура репозитория —
modules/+live/. - Справочник по AWS — сервисы EC2, VPC, ELB.
- Тестирование Terraform — проверка модулей после apply.
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Часто можно запутаться в понятиях вроде прод, тест и тому подобное — основы DevOps простым языком. Непрерывная интеграция — это практика разработки программного обеспечения, при которой изменения, вносимые разработчиками в общий репозиторий исходного кода, автоматически и регулярно объединяются. Развёртывание — доставка новой версии на сервер; стратегия — правила, как переключить пользователей со старой версии на новую без простоя и с откатом. Git — точка входа в CI/CD: коммит, ветка и pull request запускают сборку, тесты и выкат; ниже — Git Flow, хуки и GitOps. Approvals и deployment gates в GitHub Actions и Azure Pipelines: разделение зон ответственности между разработкой и эксплуатацией. Пайплайн — цепочка от планирования и коммита до мониторинга на проде: CI (сборка, тесты), CD (релиз, деплой) и типичные инструменты этапов. Azure Repos — Git и TFVC в Azure DevOps: репозитории, pull request, политики веток и связь с CI/CD. Автоматизация и наблюдаемость - стек ELK для сбора, индексации и анализа логов (Elasticsearch, Logstash, Kibana). Смешение терминов системный администратор и DevOps-инженер — чем роли отличаются на практике. Автоматизация представляет собой систематическое применение программных и аппаратных средств для выполнения задач без или с минимальным участием человека. Логирование и мониторинг в CI/CD необходимы для автоматизации процессов и обеспечения качества, позволяя отслеживать ход пайплайна и быстро выявлять проблемы. Terraform — это программа, которая позволяет описать всю вашу инфраструктуру в текстовых файлах, а потом одной командой создать её в облаке или локально.Основы DevOps
CI/CD. Принципы непрерывной интеграции и доставки
Стратегии развертывания
Использование Git и GitFlow в DevOps-процессах
Особенности настройки и эксплуатации CI/CD-конвейеров
Жизненный цикл пайплайна CI/CD
Azure Repos и Team Foundation Server (TFS)
Инструменты автоматизации и оркестрации
Роль DevOps-инженера и отличия от системного администратора
Автоматизация сборки, тестирования и развёртывания
Логирование, мониторинг и наблюдаемость систем
Terraform