С какими типами инфраструктуры и инструментами для её управления (IaC) вы работали?

«С какими типами инфраструктуры и инструментами для её управления (IaC) вы работали?» — вопрос из категории Архитектура и DevOps-практики, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я работал с различными моделями инфраструктуры, постепенно переходя от ручного управления к полностью автоматизированным подходам (IaC — Infrastructure as Code).

Типы инфраструктуры:

  • On-premise (локальная): Классические серверные стойки с физическими серверами, гипервизорами (KVM, VMware), сетевым оборудованием (Cisco, Juniper). Управлял через системы типа Foreman и ручные скрипты.
  • Облачная (Public Cloud): Глубокий опыт с AWS (основной) и Google Cloud Platform (GCP). Работал с сервисами вычислений (EC2, GCE), сетями (VPC, Cloud Load Balancing), хранилищами (S3, Cloud Storage), managed-сервисами (RDS, Cloud SQL).
  • Гибридная: Комбинация on-premise приватного кластера Kubernetes с выходом в публичное облако для отдельных сервисов (например, CDN, объектное хранилище).

Основные инструменты IaC в моем стеке:

  1. Terraform (HCL): Основной инструмент для декларативного описания и provisioning облачных ресурсов. Создавал модульные, переиспользуемые конфигурации для разных окружений (dev, staging, prod).

    # Пример: Создание VPC и Security Group в AWS
    resource "aws_vpc" "main" {
      cidr_block = "10.0.0.0/16"
      tags = { Name = "Production-VPC" }
    }
    
    resource "aws_security_group" "web_sg" {
      vpc_id = aws_vpc.main.id
      ingress {
        from_port   = 443
        to_port     = 443
        protocol    = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
      }
    }
  2. Ansible (YAML): Использовал для конфигурационного менеджмента уже созданных ресурсов (настройка ОС, установка пакетов, конфигурация сервисов). Его идемпотентность идеальна для поддержания желаемого состояния.

    # Пример плейбука для настройки Nginx
    - hosts: webservers
      tasks:
        - name: Install nginx
          apt:
            name: nginx
            state: latest
        - name: Copy site config
          copy:
            src: /configs/my-site.conf
            dest: /etc/nginx/sites-available/
  3. Pulumi (на языках программирования): Имею начальный опыт. Нравится возможность использовать TypeScript/Python для описания инфраструктуры, что дает преимущества статической типизации и богатых возможностей языка.

Подход: Вся инфраструктура хранится в Git. Изменения проходят через code review и pipeline CI/CD (например, в Atlantis или GitLab CI), который выполняет terraform plan и apply после утверждения. Это обеспечивает контроль, аудит и воспроизводимость.