Какие инструменты Infrastructure as Code вы знаете для развертывания окружения?

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

Ответ

Для развертывания и управления всей инфраструктурой (сети, ВМ, базы данных, бакеты) я использую инструменты, которые описывают желаемое состояние облачных ресурсов. Мой основной инструмент здесь — Terraform от HashiCorp.

Terraform — это инструмент оркестрации инфраструктуры. Он декларативен: я описываю что нужно создать, а Terraform сам вычисляет как это сделать.

  • Ключевые преимущества: Кроссплатформенность (провайдеры для AWS, Azure, GCP, Kubernetes, GitHub и сотен других), план выполнения (terraform plan), который показывает, что будет изменено, и state-файл, отслеживающий текущее состояние.
  • Практический пример: Развертывание безопасной веб-инфраструктуры в AWS с изолированной сетью.
    # 1. Создаем VPC с приватными и публичными подсетями
    resource "aws_vpc" "main" {
    cidr_block = "10.0.0.0/16"
    tags = { Name = "prod-vpc" }
    }
    resource "aws_subnet" "private" {
    vpc_id     = aws_vpc.main.id
    cidr_block = "10.0.1.0/24"
    tags       = { Name = "prod-private-subnet" }
    }
    # 2. Создаем security group, разрешающую только HTTP/S трафик
    resource "aws_security_group" "web_sg" {
    name        = "web-sg"
    vpc_id      = aws_vpc.main.id
    ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
    }
    ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
    }
    }
    # 3. Запускаем EC2 инстанс в приватной подсети
    resource "aws_instance" "app_server" {
    ami                    = data.aws_ami.ubuntu.id
    instance_type          = "t3.micro"
    subnet_id              = aws_subnet.private.id
    vpc_security_group_ids = [aws_security_group.web_sg.id]
    tags = { Name = "prod-app-server" }
    }

    Другие инструменты для оркестрации инфраструктуры:

  • Pulumi — альтернатива Terraform, где инфраструктура описывается на настоящих языках программирования (Python, Go, TypeScript). Это дает преимущества IDE, типизации и модульности кода.
  • Cloud-specific инструменты: AWS CloudFormation, Azure Resource Manager (ARM) Templates, Google Deployment Manager. Они глубоко интегрированы со своими облаками, но привязывают вас к вендору.

Важное замечание по Terraform: State-файл (terraform.tfstate) — это источник истины. В команде мы всегда храним его удаленно (например, в S3-бакете с блокировкой через DynamoDB), чтобы избежать конфликтов и обеспечить сохранность.