python SSM的Boto3 AWS API错误响应

qyzbxkaa  于 2023-05-27  发布在  Python
关注(0)|答案(3)|浏览(363)

我正在使用一个简单的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文档的方法签名。当param store中不存在参数时,相关AWS API Docs确认返回400响应。
我的问题是,如何验证响应中捕获的异常是否实际上是400状态码,以便我可以相应地处理它。

wtzytmuj

wtzytmuj1#

您可以尝试捕获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")
g0czyy6m

g0czyy6m2#

捕获异常并不总是一个好主意。对于那些不想使用get-parameters的人,请使用get-parameters,并检查您的参数是否在InvalidParameters中:

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

def get_ssm_parameter(name):
    parameters = client.get_parameters(Names=[name], WithDecryption=True)
    invalid_parameters = parameters.get('InvalidParameters')
    if invalid_parameters and name in invalid_parameters:
        return None
    return parameters['Parameters'][0]
ou6hu8tu

ou6hu8tu3#

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

相关问题