😄

LaravelでElasticCacheに接続したとき、エラーが発生する

2024/09/25に公開

LaravelでElasticCacheに接続したとき、エラーが発生する

エラーメッセージ全文をメモしていなくてどっちか忘れてしまいましたが、Connection RefusedTime out 504というエラーが発生している方に役に立つかもしれません。

概要

  • LaravelからRedisにキャッシュするアプリを作り、ECS(Fargate)にデプロイしサービスを開始した時、正常にアクセスできないエラーが発生した。
  • ElasticCache for Redisはクラスターモードで実行している
  • セキュリティグループのルールでRedis用のportを許可してある

解決した時のコード

  1. 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'),
                ]
            ]
        ],
    ],
]
  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]

最後に

間違っていること、このエラーの原因などあればコメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion