node.js - 在本地开发中使用 lambda 共享实用程序层
问题描述
我正在使用 Typescript、Nodejs 和 sam-beta-cdk 来开发无服务器应用程序基础架构。我想在我的 lambdas 之间共享实用程序函数,这样我就不必一遍又一遍地编写相同的代码。
文件结构如下所示:
lambdas > feature > lambda-name > lambda.js
layers > layer-name > nodejs > utils.js
这在 aws 环境中运行良好,但是,不确定如何将 Lambda 层集成到我的本地开发工作流程中。
如何从该层导入实用程序,以便它在 aws 和我的本地环境中都可以工作?
解决方案
由于您将在部署期间将层作为 Zip 上传以创建层,因此最好的方法是在您的管道中有一个步骤,从您的存储库中的适当目录创建这些 zip。这可以通过在代码构建期间运行 makefile util 轻松完成。
utilities_layer
mkdir node_modules
cp -R utilities node_modules
zip -r utilities-layer.zip node_modules
(clean up if you want to here)
然后,在您的 lambda 中,您可以将该目录作为导入语句的一部分引用。
然后例如你有这个结构:
|
|-utilities
|-aws
|-s3.js
|-api
|-myLambda
|-index.js
|-myLambdaUtil.js
然后在你的代码中你会做类似的事情
import s3 from utilities.aws
import myLambdaUtil
请注意,假设您的 lambdas 每个都有自己的目录,并且您在部署解决方案(CDK、SAM、Cloudformation 模板)中引用该目录,那么同一目录中的文件不包括基本根目录,但您的实用程序包含。
此策略允许您轻松地在本地引用您的实用程序目录,并在部署后为 lambda 内的本地 env 保留类似的导入模式。
请注意:我去年一直在使用 Python,几乎没有接触过 Node,我的节点语法可能有点生疏,但总体思路是一样的。
推荐阅读
- javascript - 如何保存我下载的模型?
- java - Xpath编译正则表达式不显示xml注释
- r - 从全局环境中删除所有 R 数据对象
- javascript - TipTap 和 Nuxt - 无法从非 EcmaScript 模块导入命名导出“{module}”
- python - 一种检查字符串是否同时包含字符串和数字的方法
- scheme - 在 DrRacket 中调试#lang sicp
- .net - 如何将凭据映射到 SQL Server 中的 SQLCLR 程序集?
- python - 如何从一个列表中生成所有可能的球员球队?
- copy - sh 脚本,从文件名中复制和删除部分
- vb.net - 试图将事件处理程序添加到 VB.NET 中的后期绑定对象时卡住了