亚马逊AWS官方博客
面向无服务器开发人员的 24 种开源工具:第 2 部分
本文章是来自 AWS Serverless 明星 Yan Cui 的访客贴。
这个连载包括两部分,在第一部分中,我们了解了部署框架并探索了部分最佳无服务器框架插件。我们还了解了 org-formation 和 lumigo-cli 以及在使用 AWS 并构建无服务器应用程序时它们如何让您的生活变得更轻松。
在第 2 部分中,我们将了解在 Node.js 中编写 AWS Lambda 函数时可以使用的常用库,还将探索有用的 AWS Serverless Application Repository 应用程序,您可以利用它们处理很多常见杂务。
库
docker-lambda
如果您使用 AWS 无服务器应用程序模型 (AWS SAM) 的 local invoke
或无服务器框架的 invoke local
命令,则佻可以随时使用 docker-lambda,这是一种复制实时 AWS Lambda 环境的 Docker 映像。除了在本地调用 Lambda 函数外,当您需要编译原生依赖性时它也非常有用。
middy
Middy 是用于 Node.js Lambda 函数的中间件引擎,用户可以利用它轻松地处理横切关注点,并将其封装到中间件内。超过 15 种内置中间件可用于解决共同关注点,例如设置 Amazon API Gateway 响应中的 CORS 标题。
我收藏了 ssm 和 secretsManager 中间件,它们实施将机密加载到 Lambda 函数的最佳实践。我的经验是从不将机密存储在环境变量中的未加密表单,这是攻击者设法损害我的应用程序时考虑的第一个位置,或许是通过受损或恶意依赖项。相反,我的建议是:
- 在冷启动过程中从 SSM 或 Secrets Manager 加载机密。
- 缓存机密,这样您不必每次调用都从源读取。
- 将机密设置为
context
对象,而非环境变量。 - 通过处理程序代码内的
context
对象访问机密。
或者,您还应启用缓存失效,并将有效期设置为几分钟。这样,当您在源中轮换机密时 — 您应这样操作 — 所有并发执行在其本地缓存失效后都将自动更新。
dazn-lambda-powertools
dazn-lambda-powertools 是一套 NPM 包,可以让您轻松地在 Node.js 中构建生产级无服务器应用程序。它的功能包括让您通过多种 AWS 服务捕获和转发相关性 ID。使用这些工具,您的函数将自动在其日志中包含相关性 ID。
另外,当您使用提供的 SDK 客户端(打包官方 AWS SDK 客户端)时,这些相关性 ID 将自动传播到下游函数。目前,支持的 AWS 服务包括:
轻量级日志记录程序支持采用 JSON 和可配置的日志级别的结构化日志记录。当日志记录程序与套装中的其他中间件共用时,您还可以启用对生产中的调试日志进行抽样的功能。通常,您在生产中从 WARN 级别记录日志,以降低日志大小以及与处理它们相关的成本。很多情况下,这意味着您会错误有用的调试日志消息,当生产中出现问题时它们可能有助于快速进行问题调试。抽样允许您在生产中保留小百分比的调试日志,它们有望包含每种场景和代码途径执行。出现问题时这些数据就可以派上用场,而您将不必再启用调试日志记录并重新部署应用程序。
另外请务必注意,抽样发生在事务级,而不是单个函数。默认情况下,dazn-lambda-powertools 对 1% 的事务进行调试日志抽样。这样,即使事务涉及异步事件来源,例如 Amazon Simple Notification Service (Amazon SNS)、Amazon Simple Queue Service (Amazon SQS)、Amazon EventBridge 及更多,您也将看到相关 Lambda 函数中发生的每种情况。
如果您使用 Python,则还有用于 Python 的 aws-lambda-powertools 项目,它支持来自 dazn-lambda-powertools 的部分功能。
AWS Serverless Application Repository 应用程序
最后,介绍我在 AWS Serverless Application Repository 中找到的一些有用的应用程序。
lambda-janitor
部署之后,lambda-janitor 应用程序将清理整个区域中的旧版不使用的函数。这样,您就不必再时常担心达到 75GB 的代码存储限制。
内置有一些安全措施,确保它仅删除您不再使用的版本。例如,它不会删除别名仍在引用的任何版本。您还可以配置保留的最新版本数量,以使您在紧急情况下能够快速回滚到先前版本。
aws-lambda-power-tuning
aws-lambda-power-tuning 应用程序由鼓吹 Alex Casalboni 的 AWS 开发人员开发,您可以运行它部署的 Step Functions 状态机以帮助您找出适合函数的最佳内存设置。这是 lumigo-cli 的 powertune-lambda
命令支持的功能。我建议使用 lumigo-cli,因为它可照看此 AWS Serverless Application Repository 应用程序的部署和升级,确保您始终运行最新版的应用程序。
auto-subscribe-log-group-to-arn
auto-subscribe-log-group-to-arn 应用程序的行为与其宣称的不完全相同;它自动为您配置的 ARN 订阅 Amazon CloudWatch 日志组,这可以是 Lambda、Amazon Kinesis、Amazon Kinesis Data Firehose 或 Amazon Elasticsearch Service (Amazon ES)。
部署之后,它将立刻为配置的目标订阅该区域中的现有的全部 CloudWatch 日志组。当您自己创建新日志组时或当您创建新 Lambda 函数时,还将自动为目标订阅该新日志组。如果您不想订阅该区域中的所有日志组,则可使用几个配置,通过前缀以及标签定位到特定日志组。
auto-set-log-group-retention
auto-set-log-group-rention 应用程序与 auto-subscribe-log-group-to-arn 关系密切,只不过它自动更新日志组的保留策略。
默认情况下,CloudWatch 日志组设置为**永不过期**。这涉及费用原因,因为 CloudWatch 每月收取 0.03 USD/GB 的费用。在 CloudWatch Logs 中永久保留日志几乎没什么用处,尤其是当您已将日志传输到其他位置时。
sfn-callback-urls
通过 Step Functions,您可以使用任务令牌执行回调模式。但是,它在有些情况下使用起来很复杂,例如发送包含回调链接的电子邮件,这经常需要添加 API Gateway 和 Lambda 来处理回调 URL。通过 sfn-callback-urls 应用程序,可以轻松而准确地实现此操作。
小结
就这么简单! 我希望您喜欢此包含两部分的连载文章,并学到如何借助开源工具让您在使用 AWS 和无服务器技术时变得更加轻松。
下面是我在此连载中提到的开源工具以及从哪里可以找到它们:
部署框架
无服务器框架插件
- serverless-iam-roles-per-function
- serverless-webpack
- serverless-offline
- serverless-domain-manager
- serverless-step-functions
- serverless-finch
CLI
库
AWS Serverless Application Repository 应用程序
- lambda-janitor
- aws-lambda-power-tuning
- auto-subscribe-log-group-to-arn
- auto-set-log-group-retention
- sfn-callback-urls
还有更多非常有用的开源工具,我在此无法一一介绍。例如,像 serverless-appsync-plugin 这样的工具就值得在此一提。
开源工具取决于其存活和发展的社区。如果任何这些工具引起您的共鸣,请在 GitHub 给它一颗星、加入其社区并为它们做出贡献。这可能是改进它们的文档、提出问题或对其代码进行改进。无论是什么,每种贡献都有意义!
本博文中的内容和意见属于第三方作者,AWS 不对本博文的内容或准确性负责。
精选图片来自 Pixabay。