AWSのコンテナでlaravelのアプリケーションを動かしていて、キャッシュとセッションをRedisサーバにしようと思います。
RedisサーバーはElasticCacheで作成しました。
実際にサーバーへアップロードしたプログラムからRedisサーバに接続したとこタイムアウトを起こして接続できませんでした。
暗号化やパスワードを指定しない設定であれば接続する事はできるのですが、
(セキュリティのために)暗号化とAuth認証(パスワード)を設定すると接続できません。
開発環境では、Dockerのredisコンテナを使っているのですが、REDIS_HOSTとDRIVERを設定するだけで接続できていましたので、
プロジェクトのプログラムが起因している可能性は少ないと考えています。
サーバー構成イメージ
10.0.0.0/24の内にあるEC2から、10.0.1.0/24内のredisサーバーに接続したいと考えています。
ご共有までに、RDSへの接続はできます。
elasticcacheの設定
redisサーバーの設定
1台構成(バックアップやクラスターの設定はしていません)のredisサーバーを用意しました。
Redis認証(Redis Auth)は設定していないので、tlsやパスワードの指定は不要な状態です。
redisのセキュリティグループ
とりあえず接続確認したいので、6379ポートであれば接続できるようにしています。
試した事
EC2インスタンスから直接接続してみる
インスタンスから、接続できるかredis-cliで接続してみました。
やはりタイムアウトしてしまうため、もしかしたらネットワークの設定かもしれません。
sh
1$ redis-cli -h master.(cache名).cache.amazonaws.com -p 6379 2Could not connect to Redis at (cache名).cache.amazonaws.com:6379: Connection timed out 3
関係が無いと思いますが、masterを外した状態でも確認しました。
暗号化する設定なのでか、サーバが見つかりませんでした。
sh
1$ redis-cli -h (cache名).cache.amazonaws.com -p 6379 2Could not connect to Redis at (cache名).cache.amazonaws.com:6379: Name or service not known 3Could not connect to Redis at (cache名).cache.amazonaws.com:6379: Name or service not known 4
暗号化をしない状態で作った場合
redisを作るときに、送受信の暗号化を外した状態で作ってみました。
セキュリティグループも同じです。
この状態では接続できました。
そのため、下記の状態だと推測できます。
- redisサーバーは接続できる場所、同じVPCに設定されており、接続許可の設定にも問題ない
- 暗号化に必要な設定が抜けているのかもしれない
sh
1redis-cli -h (cache名).cache.amazonaws.com -p 6379 2(cache名).apne1.cache.amazonaws.com:6379>
この状態であればアプリケーションからの接続が可能ですが、
最終的にはパスワードを設定したいので、本件の原因を解決したいです。
参考にしているページ
https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/GettingStarted.html
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。