AWS Lambda处理程序食谱(Python)
这个项目提供了一个工作的、基于开源的AWS Lambda处理程序框架Python代码,包括使用CDK进行部署的代码和管道。
这个项目可以作为新的无服务器服务的蓝图 - CDK部署代码、管道和处理程序都已包括在内。
联系方式 | mailto:ran.isenberg@ranthebuilder.cloud
AWS建议
该存储库在AWS博客文章加速使用无服务器蓝图开发的最佳实践中推荐使用。
概念
我在AWS re:invent 2023大会上与前AWS Lambda Powertools首席架构师Heitor Lessa一起讨论了我在这个项目中实现的概念。
入门
您可以从这个蓝图存储库开始构建一个干净的服务,而无需使用GitHub上的"模板"按钮。
您可以使用Cookiecutter。
- Cookiecutter - 使用pip/brew安装
brew install cookiecutter
或pip install cookiecutter
然后运行:
cookiecutter gh:ran-isenberg/cookiecutter-serverless-python
回答问题以选择存储库名称、服务名称等:
就这样,您的开发环境已经准备好了!现在可以部署服务了:
cd {new repo folder}
poetry shell
make deploy
您还可以运行'make pr'来运行所有检查、合成、文件格式化、单元测试、部署到AWS,并运行集成和E2E测试。
问题
启动无服务器服务可能会让人不知所措。您需要解决许多与您的业务领域无关的问题和挑战:
- 如何部署到云端?您选择哪个IAC框架?
- 如何编写面向SaaS的CI/CD管道?它需要包含什么?
- 如何处理可观测性、日志记录、跟踪和指标?
- 如何编写Lambda函数?
- 如何处理测试?
- 什么使AWS Lambda处理程序具有弹性、可追踪性和易维护性?如何编写这样的代码?
解决方案
这个项目旨在减轻认知负担,并通过提供一个Python无服务器服务骨架,实现AWS Lambda、无服务器CI/CD和AWS CDK的最佳实践,来回答这些问题。
无服务器服务 - 订单服务
-
这个项目提供了一个工作的订单服务,客户可以在其中创建商品订单。
-
该项目部署了一个API GW,其中有一个AWS Lambda集成,位于路径POST /api/orders/,并将数据存储在DynamoDB表中。
监控设计
功能
- 具有推荐文件结构的 Python Serverless 服务。
- 带有基础设施测试和安全测试的 CDK 基础设施。
- 基于 Github 操作的 CI/CD 管道,使用 Python 语法检查器、复杂性检查和样式格式化程序部署到 AWS。
- CI/CD 管道将应用部署到开发/暂存和生产环境,每个环境之间有不同的准入标准。
- 针对开发者的 Makefile。
- AWS Lambda 处理程序体现了 Serverless 最佳实践,并拥有所有适合生产环境的功能。
- AWS Lambda 处理程序使用 AWS Lambda Powertools。
- AWS Lambda 处理程序具有 3 层架构:处理层、逻辑层和数据访问层。
- 基于 AWS AppConfig 的功能标志和配置。
- 幂等 API。
- 生产部署中使用 WAF 保护的 REST API,具有四条 AWS 托管规则。
- CloudWatch 仪表板 - 高级和低级,包括 CloudWatch 报警。
- 单元测试、基础设施测试、安全测试、集成测试和端到端测试。
- 自动生成的 OpenAPI 端点:/swagger,具有用于请求和响应的 Pydantic 模式。
- CI Swagger 保护 - 如果您的 Swagger JSON 文件(存储在 docs/swagger/openapi.json)过时,将导致 PR 失败。
- 自动防范 API 破坏性变更。
CDK 部署
CDK 代码创建一个 API GW,路径为 /api/orders,触发 lambda 上的 'POST' 请求。
AWS Lambda 处理程序使用 Lambda 层优化,将 Pipfile 中 [packages] 部分的所有包通过 Docker 实例下载。
这允许您打包任何自定义依赖项,只需将它们添加到 Pipfile 的 [packages] 部分。
Serverless 最佳实践
AWS Lambda 处理程序将实现多种最佳实践实用程序。
每个实用程序在发布新博客文章时实现。
这些实用程序涵盖了生产就绪服务的多个方面,包括:
- 日志记录
- 可观察性:监控和跟踪
- 可观察性:业务 KPI 指标
- 环境变量
- 输入验证
- 动态配置和功能标志
- 两次点击启动您的 AWS Serverless 服务
- CDK 最佳实践
- Serverless 监控
- API 幂等性
- 使用 AWS Powertools 的 Serverless OpenAPI 文档
入门指南
访问 GitHub 页面上的完整项目文档页面,网址为 https://ran-isenberg.github.io/aws-lambda-handler-cookbook
代码贡献
欢迎代码贡献。阅读这个指南。
行为准则
阅读我们的行为准则这里。
联系
- 电子邮件: ran.isenberg@ranthebuilder.cloud
- 博客网站 RanTheBuilder
- LinkedIn: ranisenberg
- Twitter: IsenbergRan
致谢
许可证
本库采用 MIT 许可证授权。查看许可证文件。