Heroku Data for Redis バージョンのアップグレード
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年09月20日(水)
Table of Contents
Heroku Data for Redis はデフォルトで、当該プラットフォームでサポートされている Redis の最新の安定バージョンになります。新しく作成された Heroku Data for Redis インスタンスは、常に最新バージョンを使用します (現在は 7.0)。詳細なバージョン情報は、「バージョンサポートおよびレガシーインフラストラクチャ」を参照してください。
既存の Redis アドオンのバージョンをアップグレードする方法は 2 通りあります。
heroku redis:upgrade
コマンドを使用してインプレースでアップグレードします。--fork
を使用して新しい Heroku Data for Redis アドオンを作成し、プロモートします。
インプレースアップグレードの実行はほとんどのケースに適しています。
Premium、Private、Shield の各プランでは、Heroku Data for Redis バージョン 6.0 以降に TLS 接続が必要です。TLS をサポートするようにクライアントを設定する必要があります。このプロセスでは、アプリを通常の動作に戻す前にアプリケーションを更新およびデプロイする必要がある場合があります。
Mini プランでは TLS の使用はオプションですが、REDIS_TLS_URL
環境設定の使用を通じて推奨されています。
Heroku Data for Redis のバージョンの代わりにプランをアップグレードする手順については、「Heroku Data for Redis」を参照してください。
redis:upgrade を使用したアップグレード
プランが本番プランである (mini
を除くすべて) 場合、このコマンドは、Redis バージョンのインプレースアップグレードを実行するために実行できるメンテナンスを作成します。内部的には、このプロセスは目的のアップグレードバージョンにフォロワーを準備し、そのインスタンスをリーダーとしてプロモートする、ユーザーがトリガーするメンテナンスを作成します。
アドオンが mini
プランである場合、mini
プランではメンテナンスウィンドウがサポートされていないため、アップグレードはメンテナンスなしですぐに行われます。
新しいインスタンスをプロモートするときに、アプリケーションでフェイルオーバー自体と並行して Redis への書き込みを続行すると、データが失われる可能性があります。この影響を最小限にするために、アプリをメンテナンスモードにし、Redis アドオンに書き込むジョブまたは外部タスクをすべて一時停止します。
手順 1: アップグレードを準備する
redis:upgrade
コマンドは、アップグレード用のアドオンを準備し、実行するメンテナンスを作成します。
$ heroku redis:upgrade redis-addon-name --version 7.0 --app example-app
▸ WARNING: Irreversible action.
▸ Redis database will be upgraded to 7.0. This cannot be undone.
▸ To proceed, type example-app or re-run this command with --confirm example-app
>example-app
Requesting upgrade of redis-addon-name to 7.0... Your Redis version is being upgraded to 7.0. The system is preparing a maintenance. Once the maintenance is ready you can run it with heroku data:maintenances:run. See: https://devcenter.heroku.com/articles/data-maintenance-cli-commands#heroku-data-maintenances-run.
アドオンが mini
プランである場合、heroku redis:upgrade
によってアップグレードがすぐにトリガーされます。mini
プランで、データの損失を最小限にする必要がある場合は、このステップの前にアプリをメンテナンスモードにしてください。
手順 2: メンテナンスが作成されるのを待機する
heroku data:maintenances:info
コマンドを実行するためのデータメンテナンス CLI プラグインをインストールします。
heroku data:maintenances:info
コマンドを使用して、メンテナンスが作成されたことを確認できます。アップグレード元のバージョンによっては、システムでメンテナンスを準備するために最大 15 分かかることがあります。
メンテナンスが作成されると、メンテナンスのステータス ready
が表示されます。
heroku data:maintenances:info redis-addon-name -a example-app
Fetching maintenance... done
addon_attachments: REDIS_ADDON_URL
addon_description: premium HA
addon_kind: heroku-redis
addon_name: redis-addon-name
addon_plan: premium-0
addon_window: Tuesdays 18:30 to 22:30 UTC
app_name: example-app
method: failover
reason: customer_request
required_by: 2023-03-29T17:26:56.220+00:00
scheduled_for: 2023-03-14T18:30:00.000+00:00
server_created_at: 2023-03-01T16:51:27.021+00:00
status: ready
window: Tuesdays 18:30 to 22:30 UTC
手順 3: 新しい更新を防止する (推奨)
メンテナンスを実行する準備ができたら、アプリをメンテナンスモードにして、アップグレード中に新しいデータが Redis に書き込まれないようにすることで、データの損失を最小限に抑えます。スケジューラージョブが実行されている場合は、無効にします。
$ heroku maintenance:on
メンテナンスモードでは、どの dyno も自動的にスケールダウンされません。Redis にデータを書き込んでいる接続がないことを保証するために、キューイングジョブ用の Worker dyno など、Web 以外の dyno をスケールダウンしてください。
手順 4: アップグレードを実行する
準備したメンテナンスを実行して、Redis のインプレースアップグレードを実行できます。
$ heroku data:maintenances:run redis-addon-name --app example-app
Triggering maintenance... maintenance triggered
メンテナンスの完了には数秒かかります。info コマンドでメンテナンスのステータスが completed
と表示されたら、メンテナンスが完了したことがわかります。
heroku data:maintenances:info redis-addon-name -a example-app
Fetching maintenance... done
addon_attachments: REDIS_ADDON_URL
addon_description: premium HA
addon_kind: heroku-redis
addon_name: redis-addon-name
addon_plan: premium-0
addon_window: Tuesdays 18:30 to 22:30 UTC
app_name: example-app
completed_at: 2023-03-03T17:06:16.358+00:00
duration_approximate: ~ less than a minute
duration_seconds: 8
method: failover
reason: customer_request
required_by: 2023-03-31T17:02:32.773+00:00
scheduled_for: 2023-03-03T17:06:06.701+00:00
server_created_at: 2023-03-01T17:35:52.572+00:00
started_at: 2023-03-03T17:06:08.341+00:00
status: completed
window: Tuesdays 18:30 to 22:30 UTC
手順 5: 通常の動作を再開する
手順 1 でメンテナンスモードをオンにして dyno をダウンスケールした場合、アプリケーションをもう一度アクティブにする必要があります。
通常のアプリケーション動作を再開するには、Web dyno 以外のスケールを元のレベルに戻します次に、メンテナンスモードをオフにします。
$ heroku maintenance:off
フォークを使用したアップグレード
手順 1: 新しい更新を防止する
新しい Redis インスタンスへの完全なデータ転送を保証するために、アップグレードプロセス中はアプリに新しいデータが書き込まれないようにする必要があります。アプリをメンテナンスモードにします。スケジューラージョブが実行されている場合は、無効にします。
$ heroku maintenance:on
メンテナンスモードでは、どの dyno も自動的にスケールダウンされません。Redis にデータを書き込んでいる接続がないことを保証するために、キューイングジョブ用の Worker dyno など、Web 以外の dyno をスケールダウンしてください。
手順 2: フォークを作成する
新しい更新を防止したら、Redis インスタンスのフォークを作成します。heroku config:get REDIS_URL
を使用して、現在の Redis インスタンスの接続情報 (rediss://:<password>@<hostname>:<port>
) を取得できます。次のコマンドは、古い Heroku Data for Redis アドオンインスタンスの URL からデータをフォークして、Heroku Data for Redis アドオンインスタンスを作成します。
$ heroku addons:create heroku-redis:premium-0 --fork rediss://:<password>@<hostname>:<port> -a example-app
Creating heroku-redis:premium-0 on ⬢ example-app... $15/month
Your add-on is being provisioned and will be available shortly
redis-spherical-37410 is being created in the background. The app will restart when complete...
Use heroku addons:info redis-spherical-37410 to check creation progress
Use heroku addons:docs heroku-redis to view documentation
このプロセスは、heroku redis:info
を使用して実行できます。
Heroku では暗号化の使用が推奨されており、フォーク作成時の URL には redis://
ではなく rediss://
が使用されます。ほとんどのデータベースでは、Heroku Data for Redis インスタンスは、クリアテキストポートの 6479
ではなくポート 6480
で rediss://
サービスを公開します。Mini の場合はポートが異なり、(ポートを含む) TLS 接続文字列は TLS_URL
環境設定で確認できます。
フォークコマンドでは、エビクションポリシーなどのカスタマイズされた設定はコピーされません。たとえば、heroku redis:timeout
を使用して接続タイムアウトをカスタマイズした場合、タイムアウトはフォークにコピーされません。
手順 3: フォークをプロモートする
フォークしたインスタンスにデータが転送されたら、インスタンスをプロモートする必要があります。heroku redis:info
で、フォークした Redis インスタンスが使用可能であることを確認します。出力に含まれるこのインスタンスの名前 (例: redis-spherical-37410
) をメモします。次のように、この名前を使用してフォークをプロモートします。
$ heroku redis:promote redis-spherical-37410 -a example-app
Promoting redis-spherical-37410 to REDIS_URL on example-app
フォーク済みの Redis インスタンスをプロモートすると、REDIS_URL
環境設定が更新され、アプリケーションが再起動します。
手順 4: 通常の動作を再開する
通常のアプリケーション動作を再開するには、Web dyno 以外のスケールを元のレベルに戻します次に、メンテナンスモードをオフにします。
$ heroku maintenance:off
古い Redis アドオンは、バージョンアップグレードではアプリケーションから自動的に削除されません。不要な場合は、heroku addons:destroy
で削除します。