gpt4 book ai didi

python - 如何使用 Lambda 代理通过 AWS Lambda 抛出 HTTP 错误代码?

转载 作者:行者123 更新时间:2023-12-04 00:01:54 24 4
gpt4 key购买 nike

我使用 Python 3.8 和 Lambda 代理 API 网关触发器创建了一个 AWS Lambda 函数:
API Gateway

确实可以返回自定义 HTTP 错误代码:

def lambda_handler(event, context):
return {
'statusCode': 400,
'body': json.dumps('This is a bad request!')
}

但是,一些在线示例(例如 12 )只是引发一个 Exception 以返回带有自定义消息的错误。如果处理程序抛出异常,如下所示,服务器返回 502,因为响应是 not in the expected format for Proxy Integration :

def lambda_handler(event, context):
raise Exception('This is an exception!')

我认为这些示例依赖于一些集成响应模板并且不使用代理集成。是否可以使用 Lambda 代理实现相同的目的?我想避免在 Lambda 处理程序中全局捕获异常以构建自定义错误响应。

最佳答案

DurandA - 我相信您是绝对正确的:简化的 Lambda 代理集成方法依赖于您捕获异常并返回标准化格式:

def lambda_handler(event, context):
return {
'statusCode': 400,
'body': json.dumps('This is a bad request!')
}

简化的 Lambda 代理集成功能是在 September 2016 blog post 中宣布的,但您引用的示例之一是之前在 June 2016 blog post 中发布的,当时更复杂的集成响应方法是唯一的方法。也许你偶然发现了一个过时的例子。

您还在介绍 Lambda 代理集成功能的部分的顶部发布了一个指向 product documentation for error handling 的链接,它说:

With the Lambda proxy integration, Lambda is required to return an output of the following format:

{
"isBase64Encoded" : "boolean",
"statusCode": "number",
"headers": { ... },
"body": "JSON string"
}


这是一个返回 HTTP 400 并带有消息“这是一个异常(exception)!”的工作示例。使用 Lambda 代理集成。

import json

def exception_handler(e):
# exception to status code mapping goes here...
status_code = 400
return {
'statusCode': status_code,
'body': json.dumps(str(e))
}

def lambda_handler(event, context):
try:
raise Exception('This is an exception!')
return {
'statusCode': 200,
'body': json.dumps('This is a good request!')
}
except Exception as e:
return exception_handler(e)

以上输出:

$ http https://**********.execute-api.us-east-2.amazonaws.com/test
HTTP/1.1 400 Bad Request
Connection: keep-alive
Content-Length: 23
Content-Type: application/json
Date: Sun, 23 Feb 2020 05:06:59 GMT
X-Amzn-Trace-Id: Root=1-********-************************;Sampled=0
x-amz-apigw-id: ****************
x-amzn-RequestId: ********-****-****-****-************

"This is an exception!"

我理解您对不想构建自定义异常处理程序的沮丧。幸运的是,您只需构建一个包含 lambda_handler 函数的处理程序。祝一切顺利!

关于python - 如何使用 Lambda 代理通过 AWS Lambda 抛出 HTTP 错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com