Какой язык программирования является для вас основным в DevOps-работе?

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

Ответ

Python — мой основной язык для DevOps-автоматизации и создания инструментов. Он предлагает идеальный баланс между читаемостью, мощной стандартной библиотекой и богатой экосистемой пакетов для работы с облаками, API и системами управления конфигурациями.

Почему Python:

  • Универсальность: От простых скриптов до сложных ETL-процессов для логов или систем мониторинга.
  • Интеграция: Нативные библиотеки для всех major cloud providers (Boto3, google-cloud-python, azure-identity), а также для работы с Ansible, Terraform (через провайдеры или библиотеки like python-hcl2).
  • Скорость разработки: Позволяет быстро прототипировать и внедрять решения для автоматизации рутинных задач.

Пример из практики — скрипт для ротации логов S3 с отправкой уведомления в Slack:

import boto3
import gzip
import shutil
from pathlib import Path
from slack_sdk import WebClient

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-app-logs')

for obj in bucket.objects.filter(Prefix='raw/'):
    if obj.key.endswith('.log'):
        # Скачиваем, архивируем, загружаем обратно
        local_path = Path('/tmp') / Path(obj.key).name
        bucket.download_file(obj.key, str(local_path))

        with open(local_path, 'rb') as f_in:
            with gzip.open(f'{local_path}.gz', 'wb') as f_out:
                shutil.copyfileobj(f_in, f_out)

        archive_key = obj.key.replace('raw/', 'archive/') + '.gz'
        bucket.upload_file(f'{local_path}.gz', archive_key)
        obj.delete()  # Удаляем исходный raw-файл

        # Уведомление
        client = WebClient(token=os.environ['SLACK_TOKEN'])
        client.chat_postMessage(channel='#alerts', text=f'Archived: {obj.key}')

Для shell-операций и CI/CD, конечно, активно использую Bash, а для инфраструктуры — декларативные языки (HCL для Terraform, YAML для Ansible/K8s).