python - AWS Lambda 中的中间件与 Python
问题描述
我有一个我们正在使用 Electron Framework 开发的桌面应用程序。它使用别名 ARN 直接调用 AWS Lambda 函数。Lambda 函数正在 python 3.6 中开发。没有 API 网关处理请求,因为它们只是通过对 Lambda 的直接调用来管理。Lambda 处理此类请求的方式由 AWS 文档指定:
当您调用 Lambda 函数时,Lambda 会接收调用请求并验证您的执行角色的权限,验证事件文档是否为有效的 JSON 文档,并检查参数值。
当 Lambda 验证事件文档时会出现问题,因为当它无效时,它会使用自己的格式自动发送错误消息。AWS 文档将其解释为:
如果请求通过验证,Lambda 会将请求发送到函数实例。Lambda 运行时环境将事件文档转换为对象,并将其传递给您的函数处理程序。
我的问题是:如何在 Lambda 运行时环境为我完成之前控制事件文档并自己解析它?如果收到无效的 JSON 事件,我需要指定我自己的格式化错误消息。此外,我不需要在电子 JavaScript 应用程序中获取 python 堆栈跟踪。以下是解析事件文档失败时的错误消息示例。此实例中的无效 JSON 事件有一个额外的逗号:
{"errorMessage": "Expecting property name enclosed in double quotes: line 3 column 1 (char 54)", "errorType": "JSONDecodeError", "stackTrace": [["/var/lang/lib/python3.6/json/__init__.py", 354, "loads", "return _default_decoder.decode(s)"], ["/var/lang/lib/python3.6/json/decoder.py", 339, "decode", "obj, end = self.raw_decode(s, idx=_w(s, 0).end())"], ["/var/lang/lib/python3.6/json/decoder.py", 355, "raw_decode", "obj, end = self.scan_once(s, idx)"]]}
我尝试使用可以在 lambda 调用发生之前引入某种中间件的 python 装饰器来克服这个问题,但似乎没有任何效果。我尝试的装饰器是由aws-powertools、lambda-decorators和aws-lambda-decorators开发的。我认为还有一个中间件引擎可以帮助解决这个问题:middy,但它只能用于 Node.js Lambda 函数。我什至认真地将整个 Lambda python 文件放在 try-except 语句中,但它似乎也不起作用。我搜索了其他一些解决方案,但其中大多数解决了 API Gateway 中的问题,例如Chalice Framework 中的问题,而不是 Lambda 本身中的问题。
如果您能提出一个解决方案,该解决方案可以用作中间件,在 Lambda 运行时环境将事件文档解析为对象之前获取事件文档,我将非常高兴。
提前致谢..
解决方案
推荐阅读
- python - python类方法打印变量的地址而不是其值
- c# - 在 MemberExpression 中处理“转换为对象”
- javascript - 使用 javascript 添加内联 css 样式,高度从容器宽度动态计算
- angular-reactive-forms - 如何正确使用带有角度反应形式的嵌套数据的 formGroup
- javascript - 赛普拉斯:页面未在点击操作的第二个“it”块内加载
- java - 为什么我的构建失败并出现“进程'Gradle Test Executor 1'以非零退出值100完成”
- html - 从 api 数据创建 FormArray
- javascript - 根据每个级别的键搜索整个 JSON 树
- reactjs - ReactJS Material UI如何防止Autocomplete改变值
- flutter - Flutter 通过索引获取 json 数据