Ответ
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).