Ответ
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 (для тестирования самих скриптов).
Ответ 18+ 🔞
А, ну это про автоматизацию на Python! Да, чувак, это моя тема, когда всякие Ansible с Terraform'ом начинают тупить, как мартышлюшка с калькулятором. Бывает же такое — специфичный кейс, а готовые инструменты разводят руками: «Ну, ёпта, сами как-нибудь».
1. Облака, AWS и эта вечная возня с ключами (Boto3): Вот, например, история про ротацию ключей IAM. Ситуация, бля, классическая: сервисные аккаунты, ключи стареют, а вручную это делать — терпения ноль ебать. CloudFormation тут тупит, Terraform тоже не фонтан. Вот и пишешь скрипт, который всё делает по-взрослому: новый ключ создал, в Secrets Manager засунул, старые прибил. Главное — с задержкой, для грации, чтобы ничего не упало посередине. Выглядит это примерно так, смотри:
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 и его капризы с данными: Бывает, ему надо список каких-нибудь CIDR из нашего внутреннего API, а своего провайдера для этого нет. Вот тут и вылезает Python как внешний data source. Написал скрипт, который дергает наш корпоративный API, отдает JSON — и Terraform счастлив, как слон. Без этого — просто пизда рулю, ничерта не сконфигурируешь.
3. Логи, метрики и этот адский бардак:
Тут, конечно, pandas — наш отец родной. Выгрузил тонны логов из S3, проанализировал, агрегировал. Или, например, наколхозил дашборд, который тянет данные из Prometheus API, потом лезет в Jira тикеты смотреть — в общем, делает всю ту ебучую работу, на которую нет готового инструмента. Удивление пиздец, сколько рутины можно автоматизировать парой скриптов.
4. CI/CD и скрипты-клей:
Это вообще отдельная песня. Написать скрипт, который парсит вывод terraform plan, ищет там, сука, деструктивные изменения, и потом лезет в пул-реквест комментировать: «Э, дружок-пирожок, ты там пол-инфраструктуры сносишь!». Или вот: задеплоилось в staging, Slack-бот на Python просыпается и начинает гонять интеграционные тесты. Красота, а не жизнь.
Из инструментов, без которых я как без рук: boto3 (естественно), requests (куда ж без него), pyyaml и jinja2 для всех этих конфигов, fabric/paramiko когда надо по SSH потыкать, и pytest — потому что свои же скрипты надо тестировать, а то накосячишь, и будет вам хиросима и нигерсраки. Вот так вот, коротко и по делу.