在线编写 Lambda 函数
AWS CDK对我们Serverless Stack 的读者和我们来说都非常棒。但是,Lambda 的本地开发体验却不尽如人意。为了解决这个问题,我们在SST中创建了一个实时 Lambda 开发环境。SST 允许您在本地开发 Lambda 函数,同时连接到已部署的资源,从而简化了无服务器应用程序的构建过程。
在了解其工作原理之前,让我们先来看看无服务器架构的本地开发环境通常是什么样的。
背景
在本地编写 Lambda 函数可能很麻烦。您必须:
-
在本地模拟 Lambda 函数使用的所有服务。
例如 API Gateway、SNS、SQS 等服务,很难做到这一点。如果您使用的工具模拟的是特定服务(例如 API Gateway),则无法测试由其他服务(例如 SNS)调用的 Lambda 函数。另一方面,像 LocalStack 这样试图模拟一整套服务的工具速度较慢,而且模拟的服务可能已经过时。
-
或者,您需要部署更改以进行测试。
每次部署至少需要一分钟。而反复部署来测试更改会大大减慢反馈循环。
介绍sst start
为了解决这个问题,我们sst start向无服务器堆栈工具包 (SST)添加了该命令。SST 是 AWS CDK 的一个扩展,可以更轻松地使用 CDK 构建无服务器应用程序。
这条命令会执行以下两项操作:
- 它会将带有 WebSocket API 的调试堆栈部署到与您的应用程序相同的 AWS 账户和区域。
- 它会部署您的应用程序,并将 Lambda 函数替换为存根 Lambda 函数。
- 启动本地 WebSocket 客户端以连接到调试堆栈。
调试堆栈包含一个无服务器 WebSocket API 和一个 DynamoDB 表。当调用存根 Lambda 函数时,它会向 WebSocket API 发送一条消息,WebSocket API 再将消息发送给与其连接的本地客户端。客户端随后执行本地版本的 Lambda 函数,并将结果发送回 WebSocket API。WebSocket API 再将结果返回给存根 Lambda 函数。最后,存根 Lambda 函数将结果返回给客户端。
一个例子
我们来看一个例子。

在这个示例应用程序中,我们有:
- API 网关端点
- 社交网络话题
- 一个 Lambda 函数 (api.js),用于响应 API 并向 SNS 主题发送消息。
- 订阅 SNS 主题的 Lambda 函数 (sns.js)
因此,当向 API 端点发出请求时,会调用 api.js 的存根版本,并向调试堆栈发送消息。该消息随后被流式传输到客户端。客户端调用本地版本的 api.js,并将结果返回到调试堆栈。本地版本还会向 SNS 主题发送消息。同时,存根 api.js 会响应 API 请求并返回结果。现在,由于 sns.js 已订阅 SNS 主题,因此会调用其存根版本。该消息被发送到调试堆栈,调试堆栈随后将消息流式传输到客户端,以执行本地版本的 sns.js。本地版本的执行结果会流式传输回存根 sns.js,并由其返回结果。
您可以在这里尝试这个示例仓库。
优势
这种方法有几个优点。
- 您可以在本地编写 Lambda 函数。
- 在与整个已部署的 AWS 基础设施交互时
- 它支持所有 Lambda 触发器,因此无需模拟 API Gateway、SQS、SNS 等。
- 它支持真正的 Lambda 环境变量
- 还有 Lambda IAM 权限,因此如果 Lambda 由于缺少 IAM 权限而在 AWS 上失败,则在本地也会失败。
- 而且速度很快!做出更改时无需部署任何内容!
有几点需要注意。
- 调试堆栈完全是无服务器的
- 所以不用的时候就不会收费。
- 而且每次请求的费用非常低,完全在免费额度之内。
- 所有数据都保存在您的本地计算机和您的 AWS 账户之间。
- 未使用任何第三方服务。
- 即将支持连接到 VPC 内的 AWS 资源
结论
SSTsst start中的命令会创建一个实时 Lambda 开发环境。通过扩展 AWS CDK,它允许您在 CDK 中构建无服务器应用程序,同时拥有优质的本地开发环境。
正如我们一位早期用户所说,sst start这就是 Lambda 开发的未来。
如果您喜欢 SST 项目,请考虑给我们的代码仓库点赞——

SST 让您轻松在 AWS 上构建现代化的全栈应用程序。观看100 秒 SST 速成视频了解更多信息。
$ npx create-sst@latest
如需查看 v2 版本文档,请访问v2.sst.dev
选择你的前端
将 Next.js、Svelte、Remix、Astro、Solid 或任何静态网站部署到 AWS。
添加任何功能
SST 让您能够充分利用 AWS 的强大功能,轻松地为您的产品添加任何功能。
- 文件上传— 允许您的用户将文件上传到 S3。
- 身份验证— 通过任何身份验证提供商验证您的用户身份。
- 事件— 在应用返回给用户后运行任务。
- 数据库——使用无服务器 SQL 或 NoSQL 数据库来驱动您的应用程序。
- 作业— 运行由无服务器函数支持的定时任务或长时间运行的任务。
- API — 为您的应用程序添加专用的无服务器 REST、GraphQL 或 WebSocket API。
与你的团队协作
最后,你……
文章来源:https://dev.to/aws-builders/work-on-your-lambda-functions-live-51cp