Как вы использовали Python для задач автоматизации в DevOps?

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

Ответ

Python — мой основной инструмент для создания гибких скриптов автоматизации, когда готовые инструменты (Ansible, Terraform) не покрывают специфичные кейсы.

1. Автоматизация облачной инфраструктуры (AWS с Boto3): Писал скрипты для сложных сценариев, неудобных для чистого CloudFormation/Terraform.

Пример: Скрипт для ротации ключей доступа IAM у сервисных аккаунтов с уведомлением:

import boto3
import json
from datetime import datetime, timezone

def rotate_iam_keys(user_name):
    iam = boto3.client('iam')

    # 1. Получаем старые ключи
    old_keys = iam.list_access_keys(UserName=user_name)['AccessKeyMetadata']

    # 2. Создаем новый ключ
    new_key_resp = iam.create_access_key(UserName=user_name)
    new_key = new_key_resp['AccessKey']

    # 3. Обновляем секрет в AWS Secrets Manager
    secrets = boto3.client('secretsmanager')
    secret_value = {"AWS_ACCESS_KEY_ID": new_key['AccessKeyId'],
                    "AWS_SECRET_ACCESS_KEY": new_key['SecretAccessKey']}
    secrets.put_secret_value(
        SecretId=f'/app/{user_name}-credentials',
        SecretString=json.dumps(secret_value)
    )

    # 4. Деактивируем старые ключи (с задержкой для грации)
    for key in old_keys:
        iam.update_access_key(
            UserName=user_name,
            AccessKeyId=key['AccessKeyId'],
            Status='Inactive'
        )
    print(f"Keys rotated for {user_name}. New Key ID: {new_key['AccessKeyId']}")

if __name__ == "__main__":
    rotate_iam_keys('my-ci-user')

2. Кастомные провайдеры данных и валидации для Terraform: Создавал внешние data source на Python, чтобы Terraform мог запрашивать информацию из внутренних API компании (например, список разрешенных CIDR).

3. Обработка и агрегация логов/метрик: Использовал pandas и requests для анализа дампов логов из S3 или для создания кастомных дашбордов, агрегирующих данные из Prometheus API и Jira.

4. Интеграция различных инструментов в CI/CD: Писал скрипты-глу (glue scripts), которые, например:

  • Парсили вывод terraform plan, искали деструктивные изменения и комментировали их в Pull Request.
  • После успешного деплоя в staging через ArgoCD Slack-бот на Python запускал набор интеграционных тестов.

Ключевые библиотеки в моем stack: boto3, requests, pyyaml, jinja2 (для шаблонизации конфигов), fabric/paramiko (для SSH), pytest (для тестирования самих скриптов).