AWSのElactiCacheでRedisを導入してみた


ElastiCache(×Elastic Cache)にはmemcachedとRedisの2種類がありますが、今回はRedisの導入を取り上げます。

Redisのクラスター構築

Redisのクラスター設定

  1. コンソールからElastiCacheを選択
  2. Get Started Nowを押す
  3. Step 1でSelect EngineでRedisを選択してNextを押す
  4. Step 2でSpecify Cluster DetailsでRedisを構成するクラスターの設定を行う Port番号は特になければデフォルト設定のままで、Replication Group Nameでクラスターの名前とReplication Group Descriptionで説明は必須項目 ※Multi-AZを選択しているとNode Typeでt2.micro,t2.small,t2.mediumが選択できないので注意
  5. Step 3でNetwork&SecurityたBackup, Maintananceの設定をしてNextを押。
    Network&Securityの設定で、レプリケーションの配置はPrimaryなど互いに分散するようにAvailability Zoneに配置するようにする

  6. Step 4のReviewで設定が正しいかを確認したらLaunch Replication Groupを選択する。Successを表示されれば、クラスターの設定が完了したこととなり、Closeで設定画面を閉じる。もし、設定に誤りがあればPreviousで戻って設定をし直す

Redisのエンドポイントの確認

ElastiCacheのElastiCache Clustersの項目上で表示される先ほど立ち上げたクラスターの状態のSatusがCreatingから状態が変わり作成が完了したら、Nodesの項目の1 nodeという項目を選択しエンドポイントを確認する
※Cache Clustersの画面じょうのClusterの選択で確認できるConfiguration EndpointはRedisではN/Aとなるので注意する

ファイアウォールの設定

セキュリティグループの設定でInbound Ruleを追加するなどの設定を行う。セキュリティグループでは例えば以下のような設定を行う。

タイプ: カスタムTCPルール
プロトコル: TCP
ポート範囲: 6379
送信元: 10.0.0.0/16(各自VPCの設定などに合わせる)

EC2インスタンスにRedisをインストールする

EC2インスタンス上に、remiレポジトリでRedisをインストールする。

# remiレポジトリでインストール
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum --enablerepo=remi install redis

(参考) epelレポジトリでもインストールできるが、バージョンは古い。

$ sudo yum --enablerepo=epel install redis

PHP用のRedisをインストール

$ sudo yum install php-redis

Redis設定ファイルの編集をする

vim /etc/redis.conf
redis.conf
# - bind 127.0.0.1
# + bind 0.0.0.0

サービスの起動とその設定をする

$ sudo service redis start
$ sudo chkconfig --level 35 redis on
$ sudo chkconfig --list | grep redis

以下の入力でRedisにログインできることを確認する

#ローカルでの接続テスト
redis-cli

#ElastiCacheへの接続テストは
redis-cli -h <エンドポイント>

PHPからElastiCache上のRedisに接続する

Redisには以下のようなデータ型があります
1. String
2. List
3. Set
4. Sorted Set
5. Hash

その中でSorted Setを用いた接続例を以下に示す。このSored Setは順序付き集合のことで順位を維持しながら集合を持つことができる

<?php
$redis = new Redis();

$server = '<エンドポイント>';//ローカルでテストする場合は'127.0.0.1'を指定する
$port = 6379;
$timeout = 2.5;

$redis->connect($server, $port, $timeout);
$redis->zAdd('new-order' , 20, 'aaa');
$redis->zAdd('new-order' , 10, 'ccc');
$redis->zAdd('new-order' , 15, 'fff');
$redis->zAdd('new-order' , 24, 'yyy');
$ranking = $redis->zRevRange('new-order', 0, -1);

var_dump($ranking);

以上です。