首页 > 解决方案 > 在本地开发中使用 lambda 共享实用程序层

问题描述

我正在使用 Typescript、Nodejs 和 sam-beta-cdk 来开发无服务器应用程序基础架构。我想在我的 lambdas 之间共享实用程序函数,这样我就不必一遍又一遍地编写相同的代码。

文件结构如下所示:

lambdas > feature > lambda-name > lambda.js

layers > layer-name > nodejs > utils.js

这在 aws 环境中运行良好,但是,不确定如何将 Lambda 层集成到我的本地开发工作流程中。

如何从该层导入实用程序,以便它在 aws 和我的本地环境中都可以工作?

标签: node.jsaws-lambdaaws-cdkaws-lambda-layers

解决方案


由于您将在部署期间将层作为 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,我的节点语法可能有点生疏,但总体思路是一样的。


推荐阅读