0

私は、redis(amazon elasticcache上)を使用するAWSラムダ関数を記述しようとしています。問題 - 私はredisに接続できません。私は間違いなく、私は追加の行を持っても意味がありません何かのためにRedisのURLを変更する場合AWS Lambda and Redis

 
15:33:41 
START RequestId: d8024ec2-7f36-11e6-996c-1bfcb60572c6 Version: $LATEST 
 
15:33:42 
2016-09-20T13:33:42.632Z d8024ec2-7f36-11e6-996c-1bfcb60572c6 before client initialization 
 
15:33:42 
2016-09-20T13:33:42.813Z d8024ec2-7f36-11e6-996c-1bfcb60572c6 after client initialization 
 
15:33:44 
END RequestId: d8024ec2-7f36-11e6-996c-1bfcb60572c6 
 
15:33:44 
REPORT RequestId: d8024ec2-7f36-11e6-996c-1bfcb60572c6 Duration: 3002.67 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 19 MB 
 
15:33:44 
2016-09-20T13:33:44.620Z d8024ec2-7f36-11e6-996c-1bfcb60572c6 Task timed out after 3.00 seconds 

:私は、私はログにこのような何かを見た結果として、この

'use strict' 

function handler (data, context, cb) { 
    const redis = require("redis") 
    console.log('before client initialization') 
    const client = redis.createClient({ 
    url: 'redis://propper-url-cache.some.0001.euw1.cache.amazonaws.com:6379', 
    retry_strategy: function(options) { 
     console.log(options) 
     if (options.total_retry_time > 1000) { 
     throw new Error('can`t connect to redis') 
     } 
    } 
    }) 
    console.log('after client initialization') 

    client.on("error", function (err) { 
    console.log('in error') 
    cb({error: err}) 
    }); 

    client.get("counter", function (err, counter) { 
    console.log('counter', counter) 
    if(_.isNull(counter)) { 
     counter = 0 
    } 
    client.set('counter', counter + 1, function(err) { 
     console.log(err) 
     cb(null, {counter: counter}) 
    }) 
    }); 
} 

exports.handler = handler 

ようなコードを使用し

2016-09-20T13:29:42.953Z 48fcb071-7f36-11e6-bc52-c5ac58c12843 { attempt: 1, error: { [Error: Redis connection to some-url.euw1.cache.amazonaws.com:6379 failed - getaddrinfo ENOTFOUND some-url.euw1.cache.amazonaws.com some-url.euw1.cache.amazonaws.com:6379] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo', hostna 

+0

ラムダ関数のVPCアクセスを有効にしましたか? –

+0

うん、問題はVPCアクセスであった。ありがとう。なぜ私は違う行動をしているのですか? – kharandziuk

+1

存在するものにアクセスしようとしていても、(不適切なVPC設定のために)ネットワークにアクセスできない場合、タイムアウトになります。存在しないものにアクセスしようとすると、「見つかりません」というエラーが表示されます。 –

答えて

1

Lambdaと同じVPCで同じVPCにredisを設定する必要があります。セキュリティグループの設定を確認します。次に、EC2アクセス権を持っている場合は、redis cliをインストールし、redisに接続しようとします。これがあなたのラムダに接続されるならば、レディスも接続されます。先に述べたように、同じVPCでラムダを持つ必要があります。 以下はラムダ接続のコードです。

console.log('before client initialization') 
    const redisOptions = { 
    host: "xxxx.xxx.xxx.xxx.xxx.amazonaws.com", 
    port: 6379 

    } 

    var client = redis.createClient(redisOptions); 


client.on('connect', function(result) { 
    console.log("connected"); 
    } 
+2

redisコマンドを実行した後、client.quit()は非常に重要です。 quit()を呼び出さないと、ラムダは実行をタイムアウトします。 – user1858991