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:
Код ITЗагрузка примера кода…
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.