亚马逊AWS官方博客

面向无服务器开发人员的 24 种开源工具:第 1 部分



本文章是来自 AWS Serverless 明星 Yan Cui 的访客贴。

无服务器开发人员的思维是简约主义者的思维:不要承担无差别的负重,尽可能多地利用服务以使我们能够将精力集中在真正让我们的产品脱颖而出并为客户带来价值的事。同理,我们希望利用经受过实践考验的开源工具,而不再自己构建。

在这个包含两部分的文章连载中,我们将回顾您应考虑添加到自己工具箱中的开源工具。这些工具包括:部署框架、CLI、库和 AWS Serverless Application Repository 应用程序。

在第 1 部分中,我们将学习关于部署框架的知识,并强调无服务器框架和 AWS 无服务器应用程序模型 (AWS SAM) 中最流行的两种框架之间的关键不同。我们将探索无服务器框架排名前几的插件,然后学习两种您可能发现极其宝贵的 CLI 工具。

第 2 部分中,我们将介绍编写 AWS Lambda 函数时常用的库。介绍每种语言运行时的流行库很不现实,因此我们仅将焦点放在 Node.js 上。最后,我们将探索有用的 AWS Serverless Application Repository 应用程序,您可以利用它们处理很多常见杂务。

部署框架

开发无服务器应用程序时,您的工具箱中最重要的工具是部署框架。有许多开源备选方案可用,包括 Serverless FrameworkAWS SAM、AWS Cloud Development Kit (AWS CDK)、TerraformClaudia.jsZappaUpArchitect

我在以前的文章“AWS Lambda deployment frameworks compared”中比较过其中的一些框架。按照我的观点,只要您使用框架而非通过拼凑多个脚本自己编写框架,您使用的是什么框架其实并不重要。自己编写框架是一种无差别的负重工作,我们希望通过无服务器技术规避掉。

从自用到可定制的框架概述

请记住,使用这些工具自动为您预配置之前,您应了解如何在 AWS 中预配置资源。例如,如果您使用无服务器框架AWS SAM,则您应了解 AWS CloudFormation 的工作原理以及框架将为您做什么。过度依赖工具而不了解它们的工作原理会很危险,因为在出现问题而您又不知道怎么解决时,您将会手足无措。

信条就是:您不应将您不了解的工作自动化。

这就是说,一旦您掌握了背后的机制和工作原理,就应寻找工具自动完成您的工作,让您可以更加高产。

我是无服务器框架的狂热粉,因为它可为我提供明智的默认设置和高产的抽象工作环境。同时,它还能让我选择通过插件扩展框架的功能和拒绝它的决定。对我来说,这是无服务器框架相对于 AWS SAM 和其他类似框架的巨大优势。使用 SAM 时,我曾有一次不得不创建 AWS CloudFormation 宏,只是为了更改它生成的 AWS CloudFormation 模板中的一个设置。我在文章“AWS SAM + Cloudformation macros, a patch made in heaven”中记录了那次的体验。

无服务器框架插件

对于无服务器框架,有很多社区推动的插件可供您挑选。下面是我收藏的几种:

serverless-iam-roles-per-function

为了确保最佳的安全性,您应遵守最小权限的准则,并为每个函数创建专用的 IAM 角色。这些角色应获得尽可能少的权限。

虽然 SAM 允许您轻松地配置按函数 IAM 角色,但是无服务器框架的默认行为是使用共享 IAM 角色。它的按函数 IAM 内置机制要求您创建按函数角色作为 serverless.yml 中的自定义 AWS CloudFormation 资源,这比创建共享角色的语法烦琐得多。

所幸,您可以借助 serverless-iam-roles-per-function 插件完成此工作。请访问 GitHub 报告以获得确定函数级 iamRoleStatements 定义的快照示例。

serverless-webpack

对于 Node.js 函数,捆绑有助于缩短其冷启动时间,并降低部署程序的大小。通过 serverless-webpack 插件,每次运行 sls deploy 时您都可以捆绑自己的函数。

serverless-offline

通过 serverless-offline 插件,您可以运行项目文件夹中的 sls offline,以运行本地版本的 Amazon API Gateway。这本质上是 AWS SAM 通过 sam local start-api 命令提供的功能。请访问 GitHub 报告以获得用法和命令行选项列表

我很少发现自己需要它,因为那就像使用 sls invoke local 在本地执行 Lambda 函数并检查其 JSON 输出一样轻松。我可以通过代码附加调试程序和步骤来帮助我更轻松地调试问题。但是,当我需要进行服务器端呈现时此插件可以派上用场,因为它可让我将浏览器指向本地终端节点,并了解返回的 HTML 将如何呈现在浏览器中。

serverless-domain-manager

通过 serverless-domain-manager 插件可以轻松地为您的 API 配置自定义域名,该插件甚至可还可以为您创建 Route53 记录集。

serverless-step-functions

通过 serverless-step-functions 插件,您可以在 YML 中定义自己的状态机,作为 serverless.yml 的一部分。

还有很多其他增值功能,包括:

另外,它还支持新的快捷工作流程

serverless-finch

通过 serverless-finch 插件,使用 S3 插管静态网站变得轻而易举。只需将静态网站的内容放在分发文件夹中,命名 S3 存储桶,然后运行 sls client deploy

CLI

这里是我几乎每天都会用到的两种 CLI 工具。

org-formation

可以说,这是我最近见过的最令人印象深刻且最有用的开源工具。Org-formation 是一种可让您使用基础设施即代码 (IAC) 管理整个 AWS 组织的 CLI 工具。它运用类似 AWS CloudFormation 的语法,拥有超过 50 种功能,包括:

  • 在代码中创建新 AWS 账户。
  • 创建 AWS 组织部门 (OU) 并向其添加账户。
  • 定义服务控制策略 (SCP)、配置跨账户 AWS CloudTrail 集合,等等。
  • 如果您当前拥有 AWS 组织,您可以运行 org-formation init 将其提取到模板,以使您能够开始使用 org-formation 继续管理它们。
  • 您可以使用 org-formation update-stacks 对多个账户和区域应用 CloudFormation 模板。
  • 您可以在 AWS 组织级别使用 **!Ref**、**!GetAtt** 和 **!Sub** 之类的伪函数,并引用账户、区域和组织部门。
  • 您可以使用 org-formation init-pipeline 命令通过 AWS CodeCommitAWS CodePipeline 引导 CI/CD 管道,以自动将更新部署到您的 AWS 组织。

lumigo-cli

lumigo-cli 是在 AWS 中非常有用的命令中的瑞士军刀。如果您使用 Lambda 执行大量工作,有几个命令特别有用。

例如,您可以运行 lumigo-cli list-lambda 以列出您在所有区域中的所有函数;它为您全面地概述您的账户中都有些什么,并可帮助您快速地找出不活动的函数(例如,超过 30 天未调用的函数)。

不活动的函数输出示例

analyze-lambda-cold-starts 命令分析您的所有区域中的函数的冷启动性能,包括其预配置并发操作利用率。这有助于您识别需要优化的函数以提高冷启动性能,或者为其启用“预配置并发”。

函数的冷启动性能分析示例

要应用数据驱动的方法以找出函数的最佳内存设置,使用 powertune-lambda 命令找出性能、成本或二者折衷的最佳设置。

性能、成本或二者折衷的最佳设置输出示例

如果您将 Lambda 用于 SNS、SQS、Amazon DynamoDB 或 Kinesis 流,有时可能很难查看哪些事件触发了您的函数。您可以利用下面的命令跟踪这些事件源,并了解实际上正在发生的情况:

如果您使用大量不同的账户或配置文件,您会喜欢 whoamiswitch-profile 命令。通过它们,您可以识别自己当前正在使用的是哪个配置文件,并可以快速地切换到其他配置文件。

切换用户视图示例

总的来说,有超过 20 种命令,几乎每个人都能用到。

小结

第 1 部分就是这些。下面是我在此贴子中重点介绍的开源工具以及从哪里可以找到它们:

部署框架

无服务器框架插件

CLI

开源工具取决于其存活和发展的社区。如果这些工具对您有帮助,请在 GitHub 给它一颗星,加入其社区并为它们献一份力。

第 2 部分中,我们将了解在 Node.js 中编写 AWS Lambda 函数时可以使用的常用库,还将探索有用的 AWS Serverless Application Repository 应用程序。

Yan Cui

Yan Cui

Yan 是一位经验丰富的工程师,在 AWS 上大规模地运行生产工作负载已超过 10 年。他曾在多个行业担任过架构师和首席工程师,从银行业、电子商务、体育流式处理到手机游戏都有涉足。他曾广泛地将 AWS Lambda 用于生产,并曾作为独立顾问帮助世界各地的客户采用 AWS 和无服务器技术。

Yan 是 AWS Serverless 明星,并经常在国际性用户组和会议中发言。他是 Production-Ready Serverless (Manning) 的作者和 Serverless Architectures on AWS, 2nd Edition (Manning) 的合著者,经常在 theburningmonk.com 上发表博文。他的 Twitter 账号:@theburningmonk

本博文中的内容和意见属于第三方作者,AWS 不对本博文的内容或准确性负责。

精选图片来自 Pixabay