2016-09-20 16 views
3

私はRedisを使用するAWSラムダ関数を記述しようとしています。私は以下のコードを実行すると:AWS LambdaとRedisクライアント。なぜコールバックを呼び出せないのですか?

{ 
    "errorMessage": "2016-09-20T15:22:27.301Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da Task timed out after 3.00 seconds" 
} 

とログのようになります:

'use strict' 

function handler (data, context, callback) { 
    const redis = require("redis") 
    const _ = require("lodash") 
    console.log('before client') 
    const client = redis.createClient({ 
    url: 'redis://cache-url.euw1.cache.amazonaws.com:6379', 
    }) 
    console.log('after client') 
    callback(null, {status: 'result'}) 
    console.log('after callback') 
} 

exports.handler = handler 

を私はこのような答えは持っているコールバックが呼び出されたことを意味し、私見、

 
17:22:24 
START RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da Version: $LATEST 
 
17:22:26 
2016-09-20T15:22:26.014Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da before client 
 
17:22:26 
2016-09-20T15:22:26.134Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da after client 
 
17:22:26 
2016-09-20T15:22:26.135Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da after callback 
 
17:22:27 
END RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da 
 
17:22:27 
REPORT RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da Duration: 3001.81 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 24 MB 
 
17:22:27 
2016-09-20T15:22:27.301Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da Task timed out after 3.00 seconds 

をが、何も起こらなかった。

クライアントの初期化を削除すると、適切な応答が表示されます。

すべてのアイデア? the official documentationから

+0

私は決してレディスを使用しませんが、ラムダはステートレスサービスであることに注意してください。クライアントの作成と接続のオープンに注意してください。数ヶ月前、私はMongoDBでも同じことをしようとしていますが、接続の問題が見つかりました。私はここで同じかどうかわからない。 – manuerumx

+0

ねえ、私は知っています。しかし、すべての呼び出し(内部ハンドラ)で接続を作成しています。 dbを使用する方法がない場合(dynamoDBを除く)、それは役に立たなくなる – kharandziuk

+0

MongoDBに問題があったとき、それはまさに私が思ったことです。 RDSを使用しても問題になります。あなたがAWS SDKを使用せず、数百のAPIコールを作成する場合、使用する価値はないと私は信じています。私が見ているように、ラムダはステートレスサービスでしかうまく動作せず、BDはステートレスではありません。誰かが私たちにもっと教えてくれることを願っ – manuerumx

答えて

4

コールバックが呼び出されると、ラムダ関数は Node.jsのイベントループが空になった後にのみ終了します。

コールバックが呼び出されていますが、ラムダ関数呼び出しが終了していないため、イベントループに何かが残っているようです。あなたの機能は、Redis接続を作成する以外は何もしません。イベントループをクリアしてラムダ呼び出しを完了させるために、Redis接続を終了する必要があると思います。

+0

うん、私は実行可能な最小限のサンプルに私のコードを簡素化しています。私は接続を閉じて、あなたに戻るしようとします – kharandziuk

+0

うん、それは動作します。ありがとう! – kharandziuk

関連する問題