2017-06-15 6 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でこれを動作させて実行する方法です。私は最初の2行とコールバックをAWSに必要なものと仮定して追加しました。私はこれに新しいですが、私のスクリプトは、それらの要素なしでうまく動作します。モジュールやpackage.json、firebaseのプロダクションキーなどのコンポーネントを圧縮してラムダ関数としてアップロードしますが、最大タイムアウトを変更してもタイムアウトになりますが、テストするとラムダ関数としてアップロードされます。node.jsファイルをAWS Lambdaにアップロードして正常に実行するにはどうすればよいですか?

私は間違っていますか?私はあまりにも多すぎないnode.jsスクリプトをたくさん書いています。私はそれらをAWS Lambda(予定)でどのように稼働させることができるかを知りたいです。事前にあなたの助けをありがとう!

+0

チェックするためにいくつかのこと、あなたがアクセス可能に接続されているDBのですか?デフォルトでは、AWSラムダはVPCで動作しません。タイムアウトが発生する原因の1つになる可能性があります。 –

+0

@ Yogesh_D DBにアクセスすることができます。最初の2行(aws用)とコールバックなしでnode.jsスクリプトをローカルで実行しても問題ありません。それが私がハングアップしている理由です。ラムダにアップロードしようとするまで、スクリプトは魅力的に走ります。 – ryangineer

+0

DBの公開はどうですか? (AWSでホストされている場合) –

答えて

1

ラムダ関数はスクリプトのようには動作しません。彼らは物事を設定し、ラムダが呼び出すハンドラ関数をエクスポートします。コンテナはしばしば永続化され、ラムダは、後続の(しかし同時にではない)呼び出しですでに初期化されたすべてのハンドラを再呼び出しします。

テストされていないが、あなたのアイデアを与えるために、あなたのコードのハイレベルなLambdaficationがより次のようになります。

+0

これはうまくいきました!ありがとうございました!! :)私はすでに自分のコードを変わったフォーマットから変更してハンドラに変更しましたが、機能が実際に終了していないのでタイムアウトしていました。あなたの追加はそれを釘付け!本当にありがとう! :) – ryangineer

関連する問題