21
18

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 5 years have passed since last update.

LaravelでAmazon ElasticCache(Redis)を使う

Posted at

概要

Laravelのキャッシュの保存先にRedisを使いたかった。
クラスターモードを有効にして、Redis AUTHを使った時にLaravelでRedisの設定をググりながらやってたら、つまづいたのでメモとして残しておくこととする。

環境

  • php7.1.16
  • Amazon Linux 2
  • Redis 5.0.3
  • Laravel 5.6

手順

  1. AWSのElastiCacheコンソールからRedisを作成する
  2. ノードのタイプとか用途に応じて設定する
    今回だと「クラスターモードが有効」かつ送信中の暗号化とRedis AUTHを使う
  3. 作成したRedisに適切なセキュリティグループを設定する
  4. composerでpredisをインストール
  5. 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で接続もできやす
インストール方法

21
18
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
21
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?