Amazon ElastiCacheにEC2から接続できない → 送信中の暗号化が原因だった


やりたいこと

  • 毎アクセス実行され、かつ同じ結果を返すクエリを発見
  • 結果をredisでキャッシュしたろ
  • FuelPHPのアプリケーションだから、Redis_Db クラスを使ってredisを操作しよ
  • redisはElastiCacheで用意しよ

問題発生

  1. ElastiCacheの設定完了
  2. アプリから接続してみる→エラーになる
  3. 原因究明のためアプリを動かしているEC2からredis-cliで接続してみる
$ redis-cli -h (ElastiCacheエンドポイント) -p 6379
(ElastiCacheエンドポイント)> ping
Error: Connection reset by peer

接続はできるけど、コマンド実行しようとするとエラーになる  
(当たり前だけど、VPC違いなどで接続できない場合は最初の redis-cli -h -p 時点でエラーになる。)

原因判明

ElastiCacheクラスター作成時のオプション「送信中の暗号化」にチェックを入れている場合は、SDKからじゃないと操作できないらしい。
▼参考
https://forums.aws.amazon.com/thread.jspa?threadID=160851#jive-message-832075

Please could you confirm if redis encryption in-transit is not enabled for your cluster. If it is enabled, then you would be unable to connect using redis-cli as it does not support SSL encryption. The only way to connect in redis with in-transit encyption enabled is using a SDK.

「送信中の暗号化」チェックを外したクラスターを作成したら接続できました

2019/12/03 更新:
redis-cli経由で接続したい場合はstunnelを経由すれば良い。
▼参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/elasticache-connect-redis-node/