前提
sidekiqを導入するにあたり、privateネットワーク内ではあるがアプリとredis間の通信を暗号化しようとなった。
それにあたりredisへの接続ができない問題に当たったのでその修正を覚書
※ redisにはElastiCache for redisを利用
結果
以下のように設定した上で以下を環境変数から注入
REDIS_URL=rediss://aaa.aaa.aaa.0000.apne1.cache.amazonaws.com:6379
REDIS_AUTH_TOKEN=****
# config/initializers/sidekiq.rb
Sidekiq.configure_client do |config|
config.redis = {
url: ENV.fetch("REDIS_URL") { "redis://127.0.0.1:6379" },
password: ENV.fetch("REDIS_AUTH_TOKEN") { nil },
}
end
Sidekiq.configure_server do |config|
config.redis = {
url: ENV.fetch("REDIS_URL") { "redis://127.0.0.1:6379" },
password: ENV.fetch("REDIS_AUTH_TOKEN") { nil },
}
end
つまづきポイント
- 本番の環境では通信を暗号化したいがローカルでは暗号化せずさっと実装したい
- passwordのデフォルトをnilにすることでローカルでは非暗号化で対応可能
- 本番では
rediss://
に指定する
うまくいかなかったケース
redisでパスワードなしで接続しようとした
Redis::TimeoutError: Connection timed out
が発生
何故なのかはいまいちわからないですがタイムアウト扱い
port同じなので認証エラーとかになるのかなと思ったらタイムアウトでした
rediss指定でパスワード追加していない
Redis::CommandError: NOAUTH Authentication required.
が発生