😄
LaravelでElasticCacheに接続したとき、エラーが発生する
LaravelでElasticCacheに接続したとき、エラーが発生する
エラーメッセージ全文をメモしていなくてどっちか忘れてしまいましたが、Connection Refused
かTime out 504
というエラーが発生している方に役に立つかもしれません。
概要
- LaravelからRedisにキャッシュするアプリを作り、ECS(Fargate)にデプロイしサービスを開始した時、正常にアクセスできないエラーが発生した。
- ElasticCache for Redisはクラスターモードで実行している
- セキュリティグループのルールでRedis用のportを許可してある
解決した時のコード
- config/database.phpにクラスターモード用の設定を追加
return [
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
'read_write_timeout' => 10,
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
'read_write_timeout' => 10,
],
'clusters' => [
'default' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
],
'cache' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
]
]
],
],
]
- .envのREDIS_HOSTの先頭に
tls://
を追加
REDIS_HOST=tls://~.cache.amazonaws.com
REDIS_PORT=6379
REDIS_SCHEME=tls
参考
@card[https://github.com/laravel/framework/discussions/49501]
最後に
間違っていること、このエラーの原因などあればコメントに書いていただけると幸いです。
よろしくお願いいたします。
Discussion