получить http AWS код ошибки сервера в python с помощью boto3 - PullRequest
0 голосов
/ 21 апреля 2020

Я строю систему, которая много работает с AWS, используя boto3 в python, и мне нужно регистрировать каждую ошибку, возникающую в процессе работы.

Я знаю, как отлавливать клиентские ошибки (если существует, представленный с использованием кода 4XX Http), но мне не удалось найти способ отловить ошибку сервера и получить их код Http (5XX)

На данный момент у меня есть этот код:

start = time.time()
try:
    # This can be any boto3 function, create volume is just an example
    boto3.client('ec2').create_volume(...)  
except ClientError as e:
    # Collect all required data
    end = time.time()
    http_code = e.response.get('ResponseMetadata', {}).get('HTTPStatusCode')
    retry_attempts = e.response.get('ResponseMetadata', {}).get('RetryAttempts')

    # Log error with the collected data
    log_error(tag, f'{type(e)}: {e}', http_code=http_code, response_time=end - start, 
              retry_attempts=retry_attempts)
except BotoCoreError as e:
    # Collect all required data
    end = time.time()

    # Log error with the collected data
    log_error(tag, f'{type(e)}: {e}', response_time=end - start)

Есть ли способ отловить ошибку сервера и получить код Http, аналогичный тому, что я сделал с ошибкой клиента?

1 Ответ

1 голос
/ 23 апреля 2020

Исключение botocore "ClientError" перехватывает все исключения из служб AWS. Вы должны искать через API соответствующих AWS услуг. Например, S3 API имеет несколько номеров ошибок, включая диапазон 5xx. Ваша текущая реализация должна уже вывести код ошибки 500 в случае, если у вас есть «внутренняя ошибка сервера». (Конечно, получить E 500 от AWS S3 крайне маловероятно)

Есть также куча других исключений ботокоров , которые могут быть вам полезны, но учтите, что они сохраняются. c, поэтому они не будут предоставлять вам столько информации, сколько ошибок от служб AWS, полученных через Client Error.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...