Что такое Infrastructure as Code (IaC)?

«Что такое Infrastructure as Code (IaC)?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.