2017-06-15 91 views
-1
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中) –

回答

1

Lambda函數不像腳本那樣運行。他們設置並導出Lambda調用的處理函數。容器通常會持久化,Lambda會重新調用處理程序,其中的所有內容都已在後續(但不是併發)調用中初始化。

未經檢驗的,而是給你的想法,你的代碼的高層次Lambdafication可能看起來更像是這樣的:

+0

這工作!謝謝!! :)我已經改變了它的奇數格式的代碼,並將其更改爲處理程序,但它仍然超時,因爲該函數並未實際結束。你的加入釘了它!非常感謝你! :) – ryangineer

相關問題