0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelでRedis Serverlessに接続できない!TLS対応していないPredisでハマった話と解決策

Posted at

以下のように読みやすく整形しました。Qiitaや社内ナレッジ用としてそのまま使える形です。


🐘 Laravel + Redis Serverless で接続エラーになった話(Predis)

導入

Supervisorのプロセスの再接続回数(startretries)を増やした影響確認のため、テスト用のRedis Serverless(ElastiCache) を作成しました。

ところが…

作成したRedisに接続できず、永遠にECSタスクのデプロイが終わらない自体に。

VPC設定もセキュリティグループも正しく設定したはずなのに、なぜ…?


発生したエラー(CloudWatch Logs)

Predis\Connection\ConnectionException
Error while reading line from the server.
[tcp://host:port]

原因

Redis Serverless では 転送中の暗号化(in-transit encryption) が常に有効になっており、
TLS接続が必須 です。

にもかかわらず、Predisが平文(非TLS)で接続しようとしていたため、接続失敗。

📎 公式ドキュメント
https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/dg/in-transit-encryption.html


これまで動いていた理由

従来使っていたのは「クラスターモードのElastiCache Redis(暗号化なし)」であり、
非TLS(平文)でも問題なく接続できていたため、Serverlessの仕様で初めてTLS制限に引っかかったという流れです。


解消方法(Predis)

Laravelの config/database.php にて、Predisの接続方式を明示的にTLSに変更する必要があります。

'redis' => [
    'client' => 'predis',

    'options' => [
        'cluster' => env('REDIS_CLUSTER', 'redis'),
        'parameters' => [
            'scheme' => 'tls', // 👈 ここが重要
        ],
    ],

    'default' => [
        'host' => env('REDIS_HOST'),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],
],

.env に定義しても scheme はPredisでは効かないため、必ず options.parameters に書くこと!


まとめ

  • Redis Serverless は 常にTLS接続が必須

  • Laravel + Predis を使う場合は、以下のように設定しないと接続エラーになる:

    'parameters' => [
        'scheme' => 'tls'
    ]
    
  • クラシックなRedisでは平文でもつながるため、Serverlessに切り替えたとき初めて気づく落とし穴でした。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?