Ответы об ошибках Boto3 AWS API для SSM

Я использую простой скрипт boto3 для получения параметра из хранилища параметров SSM в моей учетной записи aws. Скрипт python выглядит следующим образом:

client = get_boto3_client('ssm', 'us-east-1')
try:
    response = client.get_parameter(Name='my_param_name',WithDecryption=True)
except Exception as e:
    logging.error("retrieve param error: {0}".format(e))
    raise e
return response

Если данный параметр недоступен, я получаю в ответе общую ошибку, как показано ниже:

 An error occurred (ParameterNotFound) when calling the GetParameter operation: Parameter my_param_name not found.   

Я проверил подпись метода из документов ssm boto3 . Связанный Документы API AWS подтверждает возвращение ответа 400, когда Параметр не существует в хранилище параметров.

Мой вопрос заключается в том, как мне проверить, действительно ли исключение, обнаруженное в ответе, является кодом состояния 400, чтобы я мог обработать его соответствующим образом.


person Vishal    schedule 23.02.2018    source источник


Ответы (2)


Вы можете попробовать поймать client.exceptions.ParameterNotFound:

client = get_boto3_client('ssm', 'us-east-1')

try:
  response = client.get_parameter(Name='my_param_name',WithDecryption=True)
except client.exceptions.ParameterNotFound:
  logging.error("not found")
person kichik    schedule 23.02.2018
comment
Идеально. Получение ответа ParameterNotFound заставило мой скрипт работать должным образом. Спасибо @kichik - person Vishal; 02.03.2018

Вы можете посмотреть статус через response ['Error'] ['Code'], но, поскольку есть несколько причин для 400, я бы порекомендовал лучший подход:

response = client.get_parameter(Name='my_param_name',WithDecryption=True)

if 'Parameters' not in response:
    raise ValueError('Response did not contain parameters key')
else:
    return response
person Aphid    schedule 23.02.2018
comment
Это уже часть моего первоначального вопроса. Мне это не помогает, потому что первая строка сама генерирует исключение без каких-либо подробностей, но с сообщением о том, что параметр не найден. - person Vishal; 02.03.2018
comment
@Vishal Мой вопрос в том, как мне проверить, действительно ли исключение, обнаруженное в ответе, является кодом состояния 400, чтобы я мог обработать его соответствующим образом. Я ответил на этот вопрос. Я говорю, что проверка на соответствие статусу 400 - плохая идея, потому что множественные проблемы вызывают статус 400. - person Aphid; 02.03.2018
comment
это именно то, о чем я спрашивал. Если вы увидите документ AWS API, на который я ссылался в своем исходном документе, вы увидите, что каждая ошибка отвечает со статусом 400 (даже с ошибкой, которая должна быть 500). Решение kichik отлично поработало со мной, потому что я специально ловлю 404. Ваш код не работает, потому что система выдает исключение в самой первой строке вашего кода, не позволяя мне даже проверить, включены ли «Параметры» в словарь ответов . Спасибо за ваш пост. - person Vishal; 03.03.2018