0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【IBM Cloud】Databases for RedisとNode.jsの接続

Posted at

Databases for Redisの導入

IBM Cloud上で作成したDatabases for RedisをNode.jsと繋げる方法を記します。

インスタンスの作成

IBM Cloud上でDatabase for Redisのインスタンスを作成します。
まずはカタログからDatabases for Redisを選択しましょう。
image.png
Service Detailsは適当なものを設定し、Createしましょう。

リソースリストから見て、作成したRedisがアクティブになっていれば準備OKです。
image.png
名前をクリックして開くと、Overviewが表示されます。

Node.jsからの接続

Overviewの一番下までスクロールすると、Quick startのガイドがあります。基本的にはこれに従えば大丈夫です。
image.png

接続先URLの設定

画面右下のService Credentialをクリックします。
image.png
Service credentialsに一つKeyが作成されているはずなので、それを展開します(なかったらNew credentialをクリックして作成します)。

connection, cli, arguments,に-uとしてrediss接続用のURL(rediss://{user}:{pass}@{host}:{port}の形)が載っているのでコピーします。
image.png

また、user, passに関しても環境変数を設定して分けたい場合は、(上のURLから抜き出しても良いですが、)もう少し下へスクロールするとpassword, usernameという欄があるのでこちらからコピーしても構いません。image.png

Node.js側にてsettings_redis_urlを定義し、
環境変数に先程コピーしたURLを設定しましょう。

環境変数の設定
REDIS_DATABASE_URL=rediss://ibm_clo~~1a3ba42:a913~~5e13@d9f8~~
dotenvを用いて環境変数から値を読み込みます
const settings_redis_url = 'REDIS_DATABASE_URL' in process.env ? process.env.REDIS_DATABASE_URL : '';

証明書の設定

先程のQuick startにある、1. Get the TLS Certificateから証明書テキストをコピーします。
image.png
証明書テキストを環境変数として設定します。

改行を含む形ですが、ダブルクォーテーションで囲えば大丈夫です。
少なくともローカルでnpm startする分には正しく動作しました。

REDIS_CERTIFICATE="MIIDHTCCAgWgAw~~
~~~
~~~
-----END CERTIFICATE-----"

証明書テキストを環境変数に設定する際の注意

今回はCodeEngine上にアプリケーションをデプロイする予定なので、証明書テキストの文字列を少し加工します。(詳しい話は以下の記事をご覧ください。)

改行を\nに置き換え、ダブルクォーテーションでは囲わずに環境変数へ設定すると、以下のような形になります。

環境変数の設定
REDIS_CERTIFICATE=MIIDHTCCAgWgAw~~\n~~\n~~\n-----END CERTIFICATE-----

以下のように証明書テキストを読み込んだら、正規表現を用いて文字列を置き換え、改行コードとして認識させます。

const redis_cert = 'REDIS_CERTIFICATE' in process.env ? process.env.REDIS_CERTIFICATE : '';
redis_cert = redis_cert.replace(/\\n/gm, "\n")

Redis接続のコード

以上環境変数が設定できたら、接続先の設定をredis.createClientで作成し、redisClient.connect()で接続します。

// 環境変数より変数へ代入
const settings_redis_url = 'REDIS_DATABASE_URL' in process.env ? process.env.REDIS_DATABASE_URL : '';
const redis_cert = 'REDIS_CERTIFICATE' in process.env ? process.env.REDIS_CERTIFICATE : '';
redis_cert = redis_cert.replace(/\\n/gm, "\n")

//. Redis
var redis = require( 'redis' );
var redisClient = null;
if( settings_redis_url ){
  // 接続先の設定
  redisClient = redis.createClient( {
    url: settings_redis_url, // 接続先のURL
    legacyMode: false,
    tls: {},
    socket: {
      tls: true,
      rejectUnauthorized: false,
      cert: redis_cert, // 証明書テキスト
    }
  } );
  // 接続
  redisClient.connect();
  console.log( 'redis connected' );

  redisClient.on( 'error', function( err ){
    console.error( 'on error redis', err );
  });
}

ちなみに切断時には自動で再接続されるらしいので、PostgreSQLのようにreconnectの関数を作る必要はない…らしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?