Обработка ошибок в boto3: эффективное создание IAM-пользователя
Быстрый ответ
Ошибка в boto3
обрабатывается с помощью блоков try-except
, которые перехватывают исключения типа ClientError
. Ключевой момент заключается в анализе кодов ошибок:
import boto3
from botocore.exceptions import ClientError
s3 = boto3.client('s3')
try:
s3.download_file('BUCKET', 'KEY', 'FILE')
except ClientError as e:
error_code = e.response['Error']['Code']
if error_code == '404':
print("**Объект не найден.**")
else:
raise e
Данный код позволяет определить типичные ошибки AWS, в частности проблемы с доступом к объекту в S3, и не подавляет остальные исключения.
Подробное рассмотрение обработки ошибок
Разберем более детально способы перехвата и обработки ошибок boto3
.
Специфические исключения сервиса
В дополнение к перехвату ClientError
, возможно отлавливать исключения отдельных сервисов AWS, доступные в boto3
.
from boto3.exceptions import S3UploadFailedError
try:
s3.upload_file('FILE', 'BUCKET', 'KEY')
except S3UploadFailedError:
print("Загрузка не выполнена!")
except ClientError as e:
error_code = e.response['Error']['Code']
if error_code in ['NoSuchBucket', 'InvalidAccessKeyId']:
# Обработка определенных ошибок S3
else:
raise
Подобный подход улучшает прозрачность и точность обработки ошибок.
HTTP-статусные коды как инструментарий
Порой, HTTP-статус, находящийся в ClientError
, более информативен, чем код ошибки AWS.
Извлечение спецификации ошибки: непросто только с первого взгляда
Постарайтесь извлечь не только Код ошибки
и HTTP-статус
, но и RequestId
, а также само сообщение об ошибке. Это будет полезно при отслеживании и общении с техподдержкой AWS.
Распознавание шаблонов ошибок и умное логирование
Формулируйте распространенные ошибки в виде понятных сообщений или действий. Логирование – это ключевой компонент в обработке ошибок, который помогает в отладке и оперативном мониторинге.
Блоки try-except: ваша сеть защиты
Используйте обработку исключений для снижения рисков и повышения удобства поддержки кода. Записывайте непредвиденные ошибки для облегчения последующей отладки.
try:
# В этом месте идет вызов boto3
except ClientError as e:
logger.error(f"Произошла непредвиденная ошибка: {str(e)}")
# Обрабатывайте ошибку или выбросьте её снова
Визуализация
Воспринимайте ошибки как указатели на проблемы в сервисах AWS:
| Тип ошибки | Символ | Стратегия обработки |
| ---------------------- | --------------- | ------------------------ |
| Ресурс не найден | 📦❓ | Произведите проверку |
| Потребность в доступе | 🔐💢 | Проверьте права доступа |
| Ограничение частоты | 🚚💨🚦 | Настройте повторные попытки |
| Общая ошибка AWS | 🛠️💥 | Примените try-except |
Разработайте уникальную стратегию для каждого типа ошибок:
try:
# Запрос к вашему ресурсу
response = boto3.resource('service').action()
except boto3.exceptions.ResourceNotFoundError:
print('Ресурс не найден! 📦❓')
except botocore.exceptions.ClientError as e:
if e.response['ResponseMetadata']['HTTPStatusCode'] == 403:
print('Доступ запрещен! 🔐💢')
elif e.response['ResponseMetadata']['HTTPStatusCode'] == 429:
print('Превышение частоты запросов! 🚚💨🚦')
else:
raise
Полезные материалы
- Поведение повторных попыток – AWS SDKs и инструменты
- Обработка ошибок – документация Boto3
- GitHub – boto/boto3: AWS SDK для Python
- Применение urllib для открытия URL в Python 3 – Stack Overflow
- Введение в исключения Python – Real Python
- Шаблон "Повторная попытка" – Центр архитектуры Azure | Microsoft Learn
- Экспоненциальное отступление и Неопределенное время ожидания – Блог архитектуры AWS