【问题标题】:AWS Lambda Proxy raising exceptionsAWS Lambda 代理引发异常
【发布时间】:2018-06-02 15:25:48
【问题描述】:

我正在编写一个 AWS Lambda Python 3.6 函数,用作 API Gateway 中我的 API 上的 Lambda 代理。在编写 Lambda 时,我调用了一个辅助函数,如果出现错误,则会引发异常。 API Gateway 不喜欢这样,因为它在 Lambda 的响应中需要“body”、“statusCode”和“headers”,并且当 Python 中引发异常时,不会提供这些键。

我想知道是否可以在考虑到 Lambda 代理的情况下引发我的自定义异常,这样我就可以摆脱我所在的任何被调用者并流畅地从程序返回,而无需检查来自被调用者的错误呼叫者。基本上,我想引发一个异常,提供我的状态代码、标头和正文,并完全从 Lambda 函数返回,API Gateway 识别错误。

【问题讨论】:

    标签: python amazon-web-services exception aws-lambda aws-api-gateway


    【解决方案1】:

    如果您使用的是 Lambda 代理集成,则无论是成功还是异常,您都有责任返回正确的响应。

    您可以通过捕获异常来做到这一点。

    def handler(event, context):
        try:
            return {
                'statusCode': 200,
                'body': json.dumps({
                    'hello': 'world'
                })
            }
        except BadRequestError:
            return {
                'statusCode': 400,
                'body': json.dumps({
                    'error': 'Bad Request Error'
                })
            }
        except:
            return {
                'statusCode': 500,
                'body': json.dumps({
                    'error': 'Internal Server Error'
                })
            }
    

    【讨论】:

    • 谢谢,我想可能是这样。我基本上只是尝试将我的代码包装起来,除了我正在使用它。
    【解决方案2】:

    在 node.js 中你可以使用:

    callback(null, RESPONSE_NO_SUCCESS);
    

    其中 RESPONSE_NO_SUCCESS 是这样的:

    import json
    return {
      statusCode: 200,
      body: json.dumps({YOUR_ERROR_HERE})
    };
    

    这应该可以按您的意愿工作,您只需要查看回调在 python 中的工作方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2019-01-27
      • 2019-11-17
      • 2014-10-07
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      相关资源
      最近更新 更多