我已经使用基于web的编辑器创建了几个Lambda函数。到目前为止一切顺利。现在我想开始用模块扩展这些模块(比如Q表示承诺)。我不知道如何将模块转换为Lambda,以便它们可以被我的函数使用。
我已经读完了这篇文章,但它似乎涉及到设置一个EC2并从那里运行Lambda函数。在创建函数时,有一种机制可以上传压缩文件,但这似乎涉及到发送本地开发的函数。因为我在基于网络的编辑器中工作,这似乎是一个奇怪的工作流程。
我如何简单地部署一些模块在我的Lambda函数中使用?
我已经使用基于web的编辑器创建了几个Lambda函数。到目前为止一切顺利。现在我想开始用模块扩展这些模块(比如Q表示承诺)。我不知道如何将模块转换为Lambda,以便它们可以被我的函数使用。
我已经读完了这篇文章,但它似乎涉及到设置一个EC2并从那里运行Lambda函数。在创建函数时,有一种机制可以上传压缩文件,但这似乎涉及到发送本地开发的函数。因为我在基于网络的编辑器中工作,这似乎是一个奇怪的工作流程。
我如何简单地部署一些模块在我的Lambda函数中使用?
当前回答
如果需要管理多个AWS资源,使用AWS CDK部署lambda函数可能是一个不错的选择。这是一个部署AWS资源并使用CloudFormation的IaC工具。要设置CDK,请参见开始。
一旦您设置了CDK,您就可以创建一个Function构造,并使用它的lambda.Code.fromAsset来轻松地捆绑源代码,包括node_modules,并将其用作函数的代码。
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as path from "path";
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
const lambdaFunc = new lambda.Function(this, "lambdaFunc", {
code: lambda.Code.fromAsset(path.join(__dirname, "..", "..", "project-containing-node-modules")),
...
});
}
}
然后使用cdk deploy将其部署到您的AWS帐户。
如果您在多个Lambdas中使用相同的node_modules,并且不想上传重复的依赖项,CDK也支持Lambda层。
其他回答
希望这对你有所帮助,使用无服务器框架你可以做这样的事情:
在无服务器中添加这些东西。yml文件:
plugins:
- serverless-webpack
custom:
webpackIncludeModules:
forceInclude:
- <your package name> (for example: node-fetch)
然后创建你的Lambda函数,通过无服务器部署来部署它,即无服务器中包含的包。Yml会在你身边。
有关无服务器的更多信息:https://serverless.com/framework/docs/providers/aws/guide/quick-start/
npm模块必须捆绑在你的nodejs包中,并以zip的形式上传到AWS Lambda Layers,然后你需要如下所示引用你的模块/js,并使用其中的可用方法。 const mymodule = require('/opt/nodejs/MyLogger');
现在您可以使用Lambda Layers来处理这些问题。只需添加一个包含您需要的包的层,它就会完美地运行。
关注这篇文章: https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
这是一个古老的问题,但它帮助我找到了一个非常简单的方法,将新的Lambda依赖项添加到Alexa技能中。
就像JohnAllen的回答一样,你需要在你的本地机器上创建一个文件夹,给它起任何你想要的名字(这是任意的):
mkdir lambdaFunc
cd lambdaFunc
进入文件夹后,使用npm安装必要的包。对我来说,我需要解析ISO8601持续时间(我的命令是npm install ISO8601 -duration):
npm install <your-package-here>
安装完成后,从该目录中退出,并压缩它。在Alexa技能开发控制台打开你的Alexa技能,然后选择“Import Code”选项。从这里,你将上传你的.zip文件,并选择所有的代码:
就是这样!然后你可以导入代码,就像我做的那样:
const DateConverter = require('iso8601-duration');
如果需要管理多个AWS资源,使用AWS CDK部署lambda函数可能是一个不错的选择。这是一个部署AWS资源并使用CloudFormation的IaC工具。要设置CDK,请参见开始。
一旦您设置了CDK,您就可以创建一个Function构造,并使用它的lambda.Code.fromAsset来轻松地捆绑源代码,包括node_modules,并将其用作函数的代码。
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as path from "path";
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
const lambdaFunc = new lambda.Function(this, "lambdaFunc", {
code: lambda.Code.fromAsset(path.join(__dirname, "..", "..", "project-containing-node-modules")),
...
});
}
}
然后使用cdk deploy将其部署到您的AWS帐户。
如果您在多个Lambdas中使用相同的node_modules,并且不想上传重复的依赖项,CDK也支持Lambda层。