LambdaからRedisのデータを取得したい

プログラミング
アイキャッチ
スポンサーリンク

使用するもの

  • Lambda
  • Redis
スポンサーリンク

私の環境

Node 12系

DockerでLamdaを用意しています。方法については、以下の記事を参考にしてください。

DockerでローカルのLambda実行環境を用意する。 - ろんログ

Redisも同様にDockerで起動しています。
redis:4.0

スポンサーリンク

困ったこと

Node.jsは非同期で動作するので、そのあたりが苦労した。

スポンサーリンク

コード

const redis   = require("redis");
const Promise = require('bluebird');
// 接続情報
const config = {
host: 'redis',
port: 6379
};
let client = null;
let value  = "";
const key  = "key";
exports.handler = async (event, context) => {
try {
//Redisに接続
client = await connectRedis();
// データの取得
value = await findValueOfKey(client, key);
//Redisとの接続を切断
disconnectRedis();
//レスポンス返却
console.error('レスポンス:' + value);
context.succeed({statusCode: 200, body: JSON.stringify(value)});
} catch (error) {
console.error('エラー:', error);
disconnectRedis();
}
};
/**
 * Redisに接続する処理。
 */
function connectRedis() {
return new Promise(function (resolve, reject) {
const client = redis.createClient(config);
client.on('connect', () => {
console.log('接続OK');
resolve(client);
});
client.on('error', (error) => {
console.log(接続NG);
reject(error);
});
});
}
/**
 * Redisとの接続を切断する。
 */
function disconnectRedis() {
if (client) {
console.log("切断します");
client.end(true);
}
}
/**
 * Keyを使用し、Valueを取得する。
 * @param client
 * @param key
 */
function findValueOfKey(client, key) {
return new Promise(function (resolve) {
client.get(key, (err, reply) => {
resolve(reply);
});
});
}

おわり

もっといい書き方があったり、コードがおかしいとかあれば、教えて下さい。

コメント

タイトルとURLをコピーしました