Ответ
Инфраструктура как код (IaC) — это подход к управлению и provisioning инфраструктуры (серверы, сети, балансировщики, БД) с помощью машинно-читаемых файлов конфигурации, а не ручных настроек. Эти файлы хранятся в системе контроля версий (например, Git) и обрабатываются специализированными инструментами.
Ключевые принципы и преимущества:
- Идемпотентность: Применение конфигурации несколько раз даёт один и тот же результат, что делает процесс предсказуемым.
- Версионность и отслеживаемость: Все изменения инфраструктуры фиксируются в коммитах Git, что позволяет видеть историю, откатываться и проводить code review.
- Повторяемость и консистентность: Исключаются дрейф конфигураций и проблемы "работает на моей машине". Среды (dev, staging, prod) создаются идентично.
- Автоматизация и скорость: Развертывание сложной инфраструктуры занимает минуты, а не дни.
Два основных подхода:
- Декларативный (Terraform, CloudFormation): Описывается желаемое конечное состояние инфраструктуры. Инструмент сам определяет, как его достичь.
- Императивный (Ansible, Chef, Puppet): Описывается последовательность команд или шагов для достижения состояния.
Пример декларативного описания инфраструктуры в Terraform (HCL) для AWS:
# main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "eu-west-1"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "Production-VPC"
ManagedBy = "Terraform"
}
}
resource "aws_instance" "app_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
subnet_id = aws_subnet.main.id
vpc_security_group_ids = [aws_security_group.allow_http.id]
user_data = <<-EOF
#!/bin/bash
sudo yum update -y
sudo yum install -y nginx
sudo systemctl start nginx
EOF
tags = {
Name = "Application-Server"
}
}
Типичный рабочий процесс: Пишем код -> terraform plan (просмотр изменений) -> terraform apply (применение) -> terraform destroy (удаление).
Видео-ответы
▶
▶
▶
▶