Cra*_*bby 5 amazon-web-services aws-lambda lerna
我正在尝试制作两个 AWS Lambda 函数(用打字稿编写)。这两个函数共享用于与 API 交互的相同代码。为了不必将相同的代码复制到两个不同的 Lambda,我想将我的共享代码移动到本地模块,并使我的两个 Lambda 都依赖于该模块。
我最初尝试在两个 lambda 之间启动代码是使用 monorepo 和 lerna。我当前的项目结构如下所示:
- lerna.json
- package.json
- packages
- api
- package.json
- lambdas
- funcA
- package.json
- func B
- package.json
Run Code Online (Sandbox Code Playgroud)
lerna.json:
{
"packages": [
"packages/api",
"packages/lambdas/*"
],
"version": "1.0.0"
}
Run Code Online (Sandbox Code Playgroud)
在我的 Lambda 函数的每个 package.json 中,我能够包含我的本地 api 模块,如下所示:
"dependencies": {
"@local/api": "*"
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我已经能够将公共代码移动到它自己的模块中。但是,我现在不确定如何捆绑我的函数以部署到 AWS Lambda。lerna 有没有办法创建一个可以部署的包?
运行lerna bootstrap将在每个“包”中创建一个node_modules文件夹。这将包括所有 lerna 管理的依赖项以及该特定包的外部依赖项。
从那时起,您对每个 lambda 的部署将与您使用 lerna 的事实无关。部署包需要包含该特定 lambda 的代码以及该 lambda 的 node_modules 文件夹 - 您可以压缩它们并手动上传它们,或者使用 SAM 或 CloudFormation 等工具。
编辑:正如您正确指出的那样,您最终会在 node_modules 文件夹中得到符号链接,这使得打包变得很困难。为了解决这个问题,您可以在打包部署之前运行类似的命令:
cp -rL lambdas/funcA/node_modules lambdas/funcA/packaged/node_modules
Run Code Online (Sandbox Code Playgroud)
这-L将强制将符号链接目录复制到文件夹中,然后您可以对其进行压缩。
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |