💿

Heroku Redisを複数のHerokuアプリケーションで共有する

2022/02/22に公開

概要

Heroku Redisを複数のHerokuアプリケーションで共有する方法を示します。

Heroku RedisはHerokuアプリケーションでRedisを利用するためのアドオンです。
Heroku Redisは動的にURLが変わってしまう仕様となっています。Herokuアプリケーションでアドオンとして追加していれば、そのアプリケーションの環境変数REDIS_URLが自動的に変更されるので問題なく動作しますが、他のHerokuアプリケーションから同じRedisインスタンスを参照したいとき、他のHerokuアプリケーションの環境変数REDIS_URLを手入力で設定してしまうと、動的にURLが変わってしまった際にRedisにアクセスできずにRedis::TimeoutErrorとなってしまいます。

以下に示す方法を用いれば、環境変数を手入力で登録したり、 Redis::TimeoutError となることなく、複数のHerokuアプリケーションから同じRedisインスタンスを参照することができます。

やり方

前提

main-app, sub-app という2つのHerokuアプリケーションがあり、main-appのアドオンとして追加しているRedisをsub-appも常に参照するようにしたい。

Heroku CLIを利用可能な状態にしておく。

1

sub-appにHeroku Redisアドオンが入っているなら削除する。

https://dashboard.heroku.com/apps/sub-app の Installed add-ons セクションにてブラウザにて確認するか、以下のコマンドで確認できる。

% heroku addons --app sub-app | grep redis
heroku-redis (redis-aerodynamic-12345)  hobby-dev  free   created

上記のような行が出力されたら、アドオンが入っているということです。

https://dashboard.heroku.com/apps/sub-app の Installed add-ons セクションにてブラウザで削除します。コマンドでも削除できます。

2

sub-appに環境変数 REDIS_URL, REDIS_TLS_URL が定義されているなら削除する。

https://dashboard.heroku.com/apps/sub-app/settings の Config Vars セクションにてブラウザにて確認するか、以下のコマンドで確認できる。

% heroku config --app sub-app | grep REDIS
REDIS_TLS_URL:             rediss://:abcdef@abcdef.amazonaws.com:12345
REDIS_URL:                 redis://:abcdef@abcdef.amazonaws.com:12345

上記のような行が出力されたら、環境変数が定義されているということです。
REDIS_URL のみの場合もあります。

https://dashboard.heroku.com/apps/sub-app/settings の Config Vars セクションにてブラウザで削除します。コマンドでも削除できます。

3

main-app で参照しているHeroku Redisのアドオンの名前を取得する。

% heroku addons --app main-app | grep redis
heroku-redis (redis-aerodynamic-12345)  hobby-dev  free   created

この redis-aerodynamic-12345 の部分を後で使うのでメモしておく。
(環境によって値は異なります)

4

sub-appに main-app で参照しているHeroku Redisのアドオンを追加する。

% heroku addons:attach redis-aerodynamic-12345 --app sub-app
Attaching redis-aerodynamic-12345 to ⬢ sub-app... done
Setting REDIS config vars and restarting ⬢ sub-app... done, v1973

redis-aerodynamic-12345 の部分は3でメモしておいた値です。

完了

以上でmain-app, sub-app という2つのHerokuアプリケーションが、main-appのアドオンのRedisを参照しています。

意図した設定が完了しているか確認のため、作業前・作業後で環境変数の値が変わっていること、main-app, sub-appで同一のアドオン名であること、同一の環境変数の値であることなどを確認しておきましょう。

参考記事

Heroku Redis
Heroku アドオンを共有機能を使って管理する - KayaMemo

Discussion