我已经在node.js上创建了一个lambda函数,并为其附加了一层。但是,当我执行lambda函数时,它不会读取捆绑在一起的JS。如果我在这里犯了任何错误,请告诉我。
遵循此post,并创建一个“ my-utility”层并上传了nodejs.zip。
AWS控制台> Lambda>图层>创建图层
层结构
my-utility
- nodejs
- node_modules
- myutil.js
- package.json
- package-lock.json
- nodejs.zip
myutil.js
function myFun(name) {
console.log("Hello.. " + name);
}
Lambda代码(Node.js 10.x)
const myutil = require('/opt/nodejs/myutil.js');
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
console.log('Layer Code :', myutil);
return response;
};
经过上述lambda测试后,得出以下结果:
Response:
{
"statusCode": 200,
"body": "\"Hello from Lambda!\""
}
Request ID:
"5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0"
Function Logs:
START RequestId: 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0 Version: $LATEST
2019-06-18T18:35:35.125Z 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0 INFO Layer Code : {}
END RequestId: 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0
REPORT RequestId: 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0 Duration: 133.56 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 26 MB
如果您注意到,当我尝试打印'myutil'常量时,它将被打印为空。这意味着在lambda执行期间不会注入层代码。
INFO层代码:{}
答案 0 :(得分:2)
如果您尝试使用无服务器访问Lambda层内的静态文件,请通过从AWS Layers部分下载该层的.zip来确保将其打包,如果存在,则可以输出其中的内容将/opt
文件夹保存到CloudWatch日志中,以确保文件在那里。
console.log('/opt/');
fs.readdirSync('/opt/').forEach(file => {
console.log(file);
});
答案 1 :(得分:0)
我联系了AWS支持团队,并解决了此问题。我必须在myutil.js中编写如下函数。这个link也有帮助。
module.exports = {
myFun:function (name) {
console.log("Hello.. " + name);
return 'narendra';
}
};
我可以从图层中看到称为js函数的lambda并正确打印返回值。
Lambda功能日志
START RequestId: 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf Version: $LATEST
2019-06-18T21:28:06.505Z 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf INFO Hello.. narendra
2019-06-18T21:28:06.505Z 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf INFO Layer Code : narendra
END RequestId: 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf
REPORT RequestId: 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf Duration: 85.38 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 26 MB