如何将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(预定)上运行。非常感谢你的帮助!

+0

几件事情来检查,就是你要连接到访问的数据库?默认情况下,AWS Lambda不会在VPC中运行,这可能是其超时的一个原因。 –

+0

@Yogesh_D DB是可访问的,我在本地运行node.js脚本时没有前两行(对于aws)和回调,它工作得很好。这就是为什么我会挂断电话,脚本像魅力一样运行,直到我尝试将其上传到Lambda。 – ryangineer

+0

我的意思是数据库公众? (如果其托管在AWS中) –

Lambda函数不像脚本那样运行。他们设置并导出Lambda调用的处理函数。容器通常会持久化,Lambda会重新调用处理程序,其中的所有内容都已在后续(但不是并发)调用中初始化。

未经检验的,而是给你的想法,你的代码的高层次Lambdafication可能看起来更像是这样的:

+0

这工作!谢谢!! :)我已经改变了它的奇数格式的代码,并将其更改为处理程序,但它仍然超时,因为该函数并未实际结束。你的加入钉了它!非常感谢你! :) – ryangineer