IBM BluemixのRedisをつかってみる

概要

Slack接続用のhubotをBluemix上で動かし、hubotのデータ保存先としてRedisを使ってみた手順を紹介します。

BluemixのRedisは実験的なリリースのようですが、2015年8月1日現在、無料で利用できます。

事前準備

以降の手順は、Node.js導入済みで、cfコマンドでBluemixにログイン済みの想定で記載しています。
それぞれの手順については以下のサイト等が参考になります。

Bluemixにhubotをデプロイ

hubotの作成

yoとgenerator-hubotを使ってslack用のhubotの雛形を作ります。
途中、Bot adaptorを何にするか聞かれるので slack と入力します。

この状態で、 npm install && ./bin/hubot とすることで、ローカルでボットを試せます。

manifest.ymlの作成

manifest.ymlを作成し、アプリ名およびSlackのhubot用トークンを記述します。

※ nameは各自で被らない名前を設定します
※ このSlackトークンは偽物なので、各自取得した値を設定してください。
※ トークンを記載したmanifest.ymlはGitHub等のパブリックなリポジトリにpushしないようご注意ください。
※ hubot用のトークンはSlackのインテグレーションページから取得できます。

Bluemixにデプロイ

この状態で cf push コマンドでデプロイするとhubotが動きます。

最後に上記のような出力がされていればデプロイ成功です。この状態でhubotとして動作しますが、設定や状態を保持するようなscriptのデータはhubotの再起動時に消えてしまいます。

herokuであれば、Redis To Goなどでデータを保存していることが多いかと思いますが、IBM BluemixでもRedisを利用してデータの永続化が可能です。

BluemixにRedisのサービスを作成する

IBM BluemixのRedisサービスは、 cf create-service コマンドで作成できます。

Redisサービスをknjcode-redisという名前でplan 100(無料)で作成するコマンドは以下の通り。

サービスをアプリにバインドする

作成したRedisサービスを先ほど作ったbm-hubotへバインドします。

もう一度サービスを確認すると、bm-botにバインドされていることが確認できます。

Redisを利用するための環境変数を設定する

VCAP_SERVICES環境変数の確認

バインドしたRedisサービスの情報はアプリの環境変数のVCAP_SERVICESにJSON形式で格納されています。

※ IPや各種IDはランダム値に書き換えてます

hubot-redis-brain用の環境変数を設定

Redisを使ってhubotのrobot.brainのデータを保存できるhubot-redis-brain(yoで作成したhubotには最初から入っています)は、 REDIS_URL 環境変数からRedisへの接続情報を取得し、hubotからRedisにデータを保存できるようにしてくれます。

REDIS_URLは、

  • authentication
  • hostname
  • port
  • key prefix

からなります。

REDIS_URLの決定

上記のVCAP_SERVICESの情報から環境変数を組み立てます。prefixなしで作成すると以下のようになります。

REDIS_URL=redis://[email protected]:6789/

アプリの環境変数を設定

この値をBluemixのbm-botアプリの環境変数に設定します。

環境変数を確認

Redisへの接続確認

REDIS_URL設定前

以下はREDIS_URL設定前のアプリ起動時のログですが、この時点ではhubot-redis-brainは環境変数がないためlocalhostにつなぎにいっていました。

REDIS_URL設定後

cf restageで環境変数を有効化すると

この後、いくつかデータ保存するようなhubotのスクリプトを試してみましたが、問題なく動作しました。

BluemixのRedisは外部からアクセスできない

HerokuのRedis To Goは外部からRedisに接続可能ですが、BluemixのRedisは外部からは接続できずバインドしたアプリケーションからしかアクセスできないようです。(セキュリティ的にはアプリケーション以外からは接続できないほうがよいと思います)

既存のRedisからデータを移行したい場合には、アプリから必要なデータをRedisに保存するコードを書くか、tmate buildpackなどでBluemixのアプリにssh接続し、Redisに接続する等する必要があります。

Bluemix Redisの利用をやめる

Bluemix Redisの利用を利用しなくなってサービスを削除したい場合は、 cf unbind-service コマンドでRedisサービスをアプリから切り離し、 cf delete-service コマンドで削除できます。

参考

CloudFoundry の cf コマンドラインツールをインストールする
Cloud Foundry V2系サービス(Cloudn PaaS, Bluemix)にRailsアプリをデプロイする
Getting started with Redis (Experimental)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする