用于生成aws lambda处理程序的有用装饰器的集合
lambda-decorators的Python项目详细描述
用于生成aws lambda处理程序的有用装饰器的集合
lambda_decorators是用于编写python的一组有用的decorator AWS Lambda的处理程序。他们允许你 避免使用boiler plate来处理常见的事情,比如cors头、json序列化, 等
快速示例
# handler.pyfromlambda_decoratorsimportjson_http_resp,load_json_body@json_http_resp@load_json_bodydefhandler(event,context):return{'hello':event['body']['name']}
当部署到API网关后面的lambda时,curl d:
$ curl -d '{"name": "world"}' https://example.execute-api.us-east-1.amazonaws.com/dev/hello {"hello": "world"}
安装
如果您使用the serverless framework 我建议使用 serverless-python-requirements
sls plugin install -n serverless-python-requirements
echo lambda-decorators >> requirements.txt
或者如果对aws lambda使用其他部署方法,您可以下载 整个模块,因为它只有一个文件。
curl -O https://raw.githubusercontent.com/dschep/lambda-decorators/master/lambda_decorators.py
包含的装饰器:
lambda_decorators包含以下修饰符以避免样板文件 对于将aws lambda与python一起使用时的常见用例。
- async_handler-支持异步处理程序
- cors_headers-自动注入cors头
- dump_json_body-将http正文自动序列化为json
- load_json_body-从json自动反序列化http正文
- json_http_resp-python对象到http json响应的自动序列化
- json_schema_validator-使用jsonschema验证请求和响应有效负载
- load_urlencoded_body-从querystring编码的正文自动反序列化http正文
- no_retry_on_failure-检测并停止计划lambda的重试尝试
- ssm_parameter_store-从aws ssm参数存储中获取参数
- secret_manager-从aws机密管理器获取机密
有关特定用法的详细信息和example 对于更多的用例。这个库也可以作为如何编写 用作lambda中间件的装饰器。有关 使用decorators作为lambda的中间件。
自己写
lambda_decorators包括使构建自己的装饰器的实用程序 更容易的。before、after和on_exception装饰器 可以应用于您自己的函数,将它们转换为 处理程序。例如:
importloggingfromlambda_decoratorsimportbefore@beforedeflog_event(event,context):logging.debug(event)returnevent,context@log_eventdefhandler(event,context):return{}
如果你想做一个提供两个或更多 前/后/上的异常功能,您可以使用 LambdaDecorator:
importloggingfromlambda_decoratorsimportLambdaDecoratorclasslog_everything(LambdaDecorator):defbefore(event,context):logging.debug(event,context)returnevent,contextdefafter(retval):logging.debug(retval)returnretvaldefon_exception(exception):logging.debug(exception)return{'statusCode':500}@log_everythingdefhandler(event,context):return{}
为什么
最初,我受到middy的启发 我喜欢用javascript。所以很自然,我想我想在python中有类似的东西 我也是。但当我想得更多的时候,当把函数看作是计算机时 单位,当使用python时,decorators 几乎都是中间件!因此,与其构建一个中间件引擎和一些中间件,不如 只是建立了一些有用的装饰和实用程序来建立它们。