Ответ
Infrastructure as Code (IaC) — это практика управления и provisioning инфраструктуры (серверы, сети, базы данных) с помощью машинно-читаемых файлов конфигурации, а не ручных процессов или интерактивных инструментов.
Основная идея: Относиться к инфраструктуре так же, как к коду приложения: хранить в системе контроля версий (Git), рецензировать, тестировать и развертывать через автоматизированные пайплайны.
Пример на Terraform (декларативный подход):
# main.tf - описание желаемого состояния инфраструктуры
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "Production VPC"
}
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
subnet_id = aws_subnet.main.id
tags = {
Name = "HelloWorldWebServer"
}
}
Затем применяется командами:
terraform init # Инициализация, загрузка провайдера
terraform plan # План изменений (что будет создано/изменено)
terraform apply # Применение конфигурации к облаку
Ключевые преимущества:
- Скорость и согласованность: Развертывание сложных сред за минуты, идентичные стейджинг и продакшен.
- Версионность и аудит: Вся история изменений инфраструктуры хранится в Git.
- Коллаборация: Разработчики и DevOps могут совместно работать над конфигурациями через Pull Request'ы.
- Документация: Код сам является актуальной документацией текущего состояния.
Основные инструменты:
- Декларативные (описывают ЧТО): Terraform, AWS CloudFormation, Pulumi (также может быть императивным).
- Императивные/конфигурационные (описывают КАК): Ansible, Chef, Puppet.