Какой у вас опыт работы с AWS CLI?

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

Ответ

Я активно использую AWS CLI для автоматизации, оперативного управления инфраструктурой и интеграции в CI/CD-пайплайны. Мой опыт включает:

  • Управление инфраструктурой как код (IaC): Автоматизация создания и конфигурации ресурсов (EC2, VPC, S3, RDS, IAM) через bash-скрипты, часто в качестве дополнения к Terraform для одноразовых задач или динамических операций.
  • Оперативное администрирование: Быстрая диагностика (просмотр логов CloudWatch, метрик), изменение конфигураций "на лету", управление инстансами.
  • Взаимодействие с сервисами: Глубоко работал с ECS/EKS (управление кластерами, сервисами, задачами), S3 (копирование, настройка политик), Lambda (развертывание функций, управление алиасами).
  • Автоматизация и скрипты: Парсинг JSON-вывода с помощью jq для извлечения конкретных данных (например, ARN ресурсов, IP-адресов) и передачи их в следующие команды.

Пример скрипта для создания AMI из инстанса и очистки старых образов:

#!/bin/bash
INSTANCE_ID="i-1234567890abcdef0"
AMI_NAME="my-app-backup-$(date +%Y%m%d-%H%M)"

# Создание AMI
AMI_ID=$(aws ec2 create-image 
    --instance-id $INSTANCE_ID 
    --name "$AMI_NAME" 
    --no-reboot 
    --query 'ImageId' --output text)

echo "Created AMI: $AMI_ID"

# Поиск и удаление старых AMI старше 30 дней
aws ec2 describe-images --owners self 
    --query "Images[?CreationDate<='$(date --date='-30 days' +%Y-%m-%d)'].ImageId" 
    --output text | while read OLD_AMI; do
    echo "Deregistering old AMI: $OLD_AMI"
    aws ec2 deregister-image --image-id $OLD_AMI
    # Здесь также нужно найти и удалить связанные snapshots
    aws ec2 describe-snapshots --filters "Name=description,Values=*$OLD_AMI*" --query "Snapshots[*].SnapshotId" --output text | xargs -r aws ec2 delete-snapshot --snapshot-ids
done

Я предпочитаю использовать профили и именованные профили для работы с несколькими аккаунтами, а также активно применяю --query и --output для эффективной работы в скриптах.