如何将node.js文件上载到AWS Lambda并成功运行?
问题描述:
console.log('starting function')
exports.handle = function(event, context, callback){
var firebase = require('firebase');
var admin = require("firebase-admin");
var Mixpanel = require('mixpanel');
// initialize mixpanel client configured to communicate over https
var mixpanel = Mixpanel.init('********************', {
protocol: 'https'
});
var serviceAccount = require("productionKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "********************"
});
function getTotalUsers(){
admin.database().ref("users").once('value').then(function(snapshot) {
console.log("Total Users:", snapshot.numChildren());
mixpanel.track('Users Calculated', {
distinct_id: '9999',
"Total Users": snapshot.numChildren()
});
callback(null, snapshot.numChildren());
});
}
getTotalUsers();
}
我的问题是我如何才能在AWS Lambda中正常运行并运行?我在前两行添加了回调函数,因为我认为这是AWS所必需的。我对此很陌生,但是如果没有这些元素,我的脚本就可以正常工作。我压缩组件,包括模块和package.json以及firebase生产密钥,并将其作为Lambda函数上传,当我测试它时,无论我将最大超时时间更改为何时,它都会超时。如何将node.js文件上载到AWS Lambda并成功运行?
我在做什么错?我写了大量node.js脚本,这些脚本与这些脚本不太相似,我很想知道如何让它们在AWS Lambda(预定)上运行。非常感谢你的帮助!
答
Lambda函数不像脚本那样运行。他们设置并导出Lambda调用的处理函数。容器通常会持久化,Lambda会重新调用处理程序,其中的所有内容都已在后续(但不是并发)调用中初始化。
未经检验的,而是给你的想法,你的代码的高层次Lambdafication可能看起来更像是这样的:
+0
这工作!谢谢!! :)我已经改变了它的奇数格式的代码,并将其更改为处理程序,但它仍然超时,因为该函数并未实际结束。你的加入钉了它!非常感谢你! :) – ryangineer
几件事情来检查,就是你要连接到访问的数据库?默认情况下,AWS Lambda不会在VPC中运行,这可能是其超时的一个原因。 –
@Yogesh_D DB是可访问的,我在本地运行node.js脚本时没有前两行(对于aws)和回调,它工作得很好。这就是为什么我会挂断电话,脚本像魅力一样运行,直到我尝试将其上传到Lambda。 – ryangineer
我的意思是数据库公众? (如果其托管在AWS中) –