使用するもの
- Lambda
- Redis
私の環境
Node 12系
DockerでLamdaを用意しています。方法については、以下の記事を参考にしてください。
https://qiita.com/gdtypk/items/78b6a76dc9f212296c89
Redisも同様にDockerで起動しています。
redis:4.0
困ったこと
Node.jsは非同期で動作するので、そのあたりが苦労した。
コード
constredis=require("redis");constPromise=require('bluebird');// 接続情報constconfig={host:'redis',port:6379};letclient=null;letvalue="";constkey="key";exports.handler=async(event,context)=>{try{//Redisに接続client=awaitconnectRedis();// データの取得value=awaitfindValueOfKey(client,key);//Redisとの接続を切断disconnectRedis();//レスポンス返却console.error('レスポンス:'+value);context.succeed({statusCode:200,body:JSON.stringify(value)});}catch(error){console.error('エラー:',error);disconnectRedis();}};/**
* Redisに接続する処理。
*/functionconnectRedis(){returnnewPromise(function(resolve,reject){constclient=redis.createClient(config);client.on('connect',()=>{console.log('接続OK');resolve(client);});client.on('error',(error)=>{console.log(`接続NG`);reject(error);});});}/**
* Redisとの接続を切断する。
*/functiondisconnectRedis(){if(client){console.log("切断します");client.end(true);}}/**
* Keyを使用し、Valueを取得する。
* @param client
* @param key
*/functionfindValueOfKey(client,key){returnnewPromise(function(resolve){client.get(key,(err,reply)=>{resolve(reply);});});}
おわり
もっといい書き方があったり、コードがおかしいとかあれば、教えて下さい。