概要
Laravelのキャッシュの保存先にRedisを使いたかった。
クラスターモードを有効にして、Redis AUTHを使った時にLaravelでRedisの設定をググりながらやってたら、つまづいたのでメモとして残しておくこととする。
環境
- php7.1.16
- Amazon Linux 2
- Redis 5.0.3
- Laravel 5.6
手順
- AWSのElastiCacheコンソールからRedisを作成する
- ノードのタイプとか用途に応じて設定する
今回だと「クラスターモードが有効」かつ送信中の暗号化とRedis AUTHを使う - 作成したRedisに適切なセキュリティグループを設定する
- composerでpredisをインストール
- envとconfigのdatabaseをredisを使うように変更する
作成したRedisに適切なセキュリティグループを設定する
今回はLaravelがあるEC2とRedisは同一のVPCにいる前提
インバウンドにRedis作成時に指定したポートと443を開ける(ソースはVPCのCIDRに絞る)
アウトバンドはすべてのトラフィックを許可
envとconfigについて
REDIS_HOST=設定エンドポイント
REDIS_PASSWORD=REDIS AUTHで指定したパスワード
REDIS_SCHEME=tls
REDIS_PORT=Redis作成時に指定したポート
config/database.php
'redis' => [
'client' => 'predis',
'options' => [
'cluster' => 'redis',
'parameters' => [
'password' => env('REDIS_PASSWORD', null),
'scheme' => env('REDIS_SCHEME', 'tcp'),
'port' => env('REDIS_PORT', 6379),
],
'ssl' => [
'verify_peer' => false,
],
],
'clusters' => [
'default'=> [
// NOTE: これでないとError while reading line from the serve が出る
'host' => env('REDIS_SCHEME', 'tcp') . '://' . env('REDIS_HOST', '127.0.0.1'),
],
'options' => [
'cluster' => 'redis',
]
],
],
つまづいた時の検証方法等
設定エンドポイントにpingできるか
EC2にssh接続してping 設定エンドポイント
でpingできるか
redisに接続できるか
今回は暗号化してるのでopensslコマンドでRedisに接続できるかを試す
とても参考になった記事
predisを使ってLaravelプロジェクトからRedisに接続できるかどうか
app/Console配下に適当なコマンド作って、コマンド実行してRedisに接続できるかどうか
// もうちょっと必要な情報もあったような・・・
$parameters = ['tls://設定エンドポイント'];
$options = ['cluster' => 'redis'];
$client = new Predis\Client($parameters, $options);
$client->set('key', 'value');
$value = $client->get('key');
$client->del('key');
logger($value);
// もしくはopensslでredis接続しといて、MONITORとかで確認しててもよい
キャッシュの保存先をRedisに変更してから
opensslでredis接続しといて、MONITORで確認してキャッシュが保存されているかを確認する
その他
今回はREDIS AUTH使ってたのでopensslでRedisに接続してましたが、
使ってなかったら普通にredis-cliで接続もできやす
インストール方法