Как оптимально вносить изменения в настройки Cloud

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

Ответ

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

Мой стандартный workflow для изменений:

  1. Инструмент: Использую Terraform как основной инструмент для оркестрации ресурсов (VPC, VM, Kubernetes, базы данных). Для конфигурации внутри виртуальных машин — Ansible.
  2. Версионность: Весь код инфраструктуры хранится в Git (например, GitLab). Каждое изменение — это отдельная ветка и Merge Request (MR).
  3. Проверки: В пайплайне CI/CD для MR автоматически запускаются:
    • terraform fmt и terraform validate — проверка синтаксиса.
    • terraform plan — предпросмотр изменений. Этот план обязательно ревьюируется коллегами.
    • Политики безопасности (например, с помощью Checkov или TFSec) для поиска небезопасных конфигураций.
  4. Стейджинг: Изменения сначала применяются на staging-окружении.
  5. Применение: После апрува MR выполняется terraform apply в автоматическом или мануальном режиме (в зависимости от критичности).

Пример изменения Security Group в AWS через Terraform:

# security_group.tf
resource "aws_security_group" "app_sg" {
  name        = "app-frontend-sg"
  description = "Security group for application frontend"
  vpc_id      = data.aws_vpc.main.id

  ingress {
    description = "HTTPS from anywhere"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "HTTP for redirect"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  # ... остальные правила
}

Такой подход исключает ручные изменения в консоли и позволяет легко отследить, кто, когда и зачем добавил то или иное правило.