Как автоматизировал процессы?

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

Ответ

В своей практике я автоматизирую процессы на нескольких уровнях, используя принцип Infrastructure as Code (IaC) и CI/CD.

1. Инфраструктура (Terraform): Я описываю всю облачную инфраструктуру (VPC, виртуальные машины, базы данных) кодом на Terraform. Это позволяет версионировать, ревьюить и безопасно применять изменения.

# Пример: создание инстанса в AWS
resource "aws_instance" "app_server" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"
  subnet_id     = aws_subnet.main.id

  tags = {
    Name = "ApplicationServer"
  }
}

2. Конфигурация и деплой (Ansible): После создания инфраструктуры я использую Ansible для настройки ОС, установки пакетов, развертывания приложений и управления конфигурациями.

- name: Deploy and configure Nginx
  hosts: webservers
  become: yes
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: latest
    - name: Copy application config
      copy:
        src: ./nginx/app.conf
        dest: /etc/nginx/sites-available/
    - name: Ensure service is running
      systemd:
        name: nginx
        state: started
        enabled: yes

3. Конвейер сборки и доставки (GitLab CI): Любое изменение в коде приложения или инфраструктуры запускает пайплайн, который выполняет тесты, сборку Docker-образов и их деплой в staging/production.

# .gitlab-ci.yml фрагмент
deploy_production:
  stage: deploy
  script:
    - terraform apply -auto-approve
    - ansible-playbook deploy-app.yml
  only:
    - main

4. Скриптинг (Bash/Python): Для рутинных операций, таких как чистка логов, сбор метрик или аварийное переключение, я пишу небольшие скрипты, которые затем интегрирую в cron или системы мониторинга.

Критерий простой: если действие повторяется больше двух раз, оно должно быть автоматизировано.