AWS Lambda的layer可以将一些公共模块存储在单独的分层中,这些分层中的代码可以被多个Lambda函数调用。推送layer时需要将代码打包成.zip格式的文件,但是打包时不需要包含nodejs文件夹,因为Node.js运行时和公共库应该已经安装在Lambda的执行环境中。
以下是一个示例脚本,使用zip
命令将代码打包成.zip文件,并将其推送到我们的AWS S3桶中:
# 假设你有一个名为 'nodejs' 的公共库
# 打包包含 'nodejs' 库和其他代码的代码层
zip -r my-layer.zip my-code-folder nodejs
# 推送ZIP文件到AWS S3桶
aws s3 cp my-layer.zip s3://my-bucket/layers/
启动一个Lambda函数,该函数依赖于我们刚刚推送的代码层:
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda({ region: 'us-west-2' });
exports.handler = async (event) => {
try {
const response = await lambda.invoke({
FunctionName: 'my-function',
Payload: JSON.stringify(event),
Qualifier: 'prod',
}).promise();
const body = JSON.parse(response.Payload);
return {
statusCode: 200,
body,
};
} catch (err) {
console.error(err);
return {
statusCode: 500,
body: 'Internal Server Error',
};
}
};
接下来,在AWS Lambda控制面板中将代码层添加到Lambda函数中,即可使用在代码层中定义的公共代码。