やりたいこと
- 毎アクセス実行され、かつ同じ結果を返すクエリを発見
- 結果をredisでキャッシュしたろ
- FuelPHPのアプリケーションだから、Redis_Db クラスを使ってredisを操作しよ
- redisはElastiCacheで用意しよ
問題発生
- ElastiCacheの設定完了
- アプリから接続してみる→エラーになる
- 原因究明のためアプリを動かしている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/