【问题标题】:Boto3 AWS API error responses for SSMSSM 的 Boto3 AWS API 错误响应
【发布时间】:2018-08-03 23:46:43
【问题描述】:

我正在使用一个简单的 boto3 脚本从我的 aws 帐户中的 SSM 参数存储中检索一个参数。 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.   

我已经验证了来自boto3 ssm docs 的方法签名。相关AWS API Docs 确认参数存储中不存在参数时返回 400 响应。

我的问题是如何验证响应中捕获的异常是否实际上是 400 状态代码,以便我可以相应地处理它。

【问题讨论】:

    标签: python amazon-web-services boto3 aws-ssm


    【解决方案1】:

    你可以试试抓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")
    

    【讨论】:

    • 完美。捕获 ParameterNotFound 响应使我的脚本按预期运行。谢谢@kichik
    【解决方案2】:

    您可以通过 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
    

    【讨论】:

    • 这已经是我最初问题的一部分。它对我没有帮助,因为第一行本身抛出了一个没有详细信息但没有找到参数的消息的异常。
    • @Vishal “我的问题是如何验证响应中捕获的异常是否实际上是 400 状态代码,以便我可以相应地处理它。”我回答了那个问题。我是说针对状态 400 进行验证是个坏主意,因为多个问题会导致状态 400。
    • 这正是我要问的。如果您看到我在原始文档中链接的 AWS API 文档,您会看到每个错误都以状态 400 响应(即使是应该为 500 的错误)。 kichik 解决方案对我很有用,因为我专门捕获了 404。您的代码无法正常工作,因为系统在代码的第一行抛出异常,甚至不允许我检查响应字典中是否包含“参数” .谢谢你的帖子。
    猜你喜欢
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2018-03-22
    • 2018-02-28
    • 2021-12-16
    • 2017-08-08
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多