node.js - 带有依赖项的 AWS Lambda 打包

标签 node.js aws-lambda node-modules lerna monorepo

进一步概述是在 NodeJS 和 Monorepo(基于 Lerna)的上下文中。

我有 AWS 堆栈,其中通过 AWS CloudFormation 部署了多个 AWS Lambda。一些 lambda 很简单(单个小模块)并且可以内联:

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Code.html#static-from-wbr-inlinecode

const someLambda = new Function(this, 'some-lambda', {
  code: Code.fromInline(fs.readFileSync(require.resolve(<relative path to lambda module>), 'utf-8')),
  handler: 'index.handler',
  runtime: Runtime.NODEJS_12_X
});

部分没有依赖,打包如下:

const someLambda = new Function(this, 'some-lambda', {
  code: Code.fromAsset(<relative path to folder with lambda>),
  handler: 'index.handler',
  runtime: Runtime.NODEJS_12_X
});

但据我所知,如果有相对较大的 lambda 依赖关系,我们唯一的打包方式(由 API 提出)是 @aws-cdk/aws-lambda-nodejs:

import * as lambdaNJS from "@aws-cdk/aws-lambda-nodejs";

export function createNodeJSFunction(
  scope: cdk.Construct, id: string, nodejsFunctionProps: Partial<NodejsFunctionProps>
) {
  const params: NodejsFunctionProps = Object.assign({
    parcelEnvironment: { NODE_ENV: 'production' },
  }, nodejsFunctionProps);

  return new lambdaNJS.NodejsFunction(scope, id, params);
}

对于独立包,它运行良好,但在 monorepo 的情况下,它只是卡在堆栈的 synth 上。 我只是在寻找替代方案,因为我认为捆绑 (parcel) BE 资源不是一个好主意。

最佳答案

我已经创建了以下原始库以zip 只需要node_modules 尽管包提升

https://github.com/redneckz/slice-node-modules

用法(来自 monorepo 根目录):

$ npx @redneckz/slice-node-modules \
  -e packages/some-lambda/lib/index.js \
  --exclude 'aws-*' \
  --zip some-lambda.zip

--exclude 'aws-*' - 默认包含 AWS 运行时,因此无需打包。

关于node.js - 带有依赖项的 AWS Lambda 打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63462705/

相关文章:

angular - 如何使用 Angular CLI + ng-packagr + state mgmt 构建 Angular 4 组件库?

Node.js Elasticsearch Mongoosastic 分页的来源和大小

sql - 使用 Sequelize 连接到本地 SQL Server

javascript - nodejs express在另一个文件中重用路由get方法

mysql - 在 S3 中临时保存大查询结果(~100k 行)的最佳方法是什么?

javascript - 如何通过Sequelize连接多个数据库?

javascript - 实习生 - ReferenceError : document is not defined

amazon-web-services - AWS Lambda 函数被 CloudWatch 事件触发两次

amazon-web-services - 作为另一个角色运行嵌套的 cloudformation 堆栈

docker + 节点模块 : receiving error for local dependency while trying to run Dockerfile