Heroku Data for Redis と Private Space
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年09月20日(水)
Table of Contents
Private Space での Heroku Data for Redis は、Heroku Enterprise でのみ利用できます。
この記事では、Private Space または Shield Private Space での Heroku Data for Redis のプロビジョニング、プラン、接続について、Common Runtime での Heroku Data for Redis と比較し、違いを説明します。
Heroku Private Spaces は、分離されたネットワーク内でアプリケーションを実行するための専用環境です。アプリケーションスタックのすべての部分 (dyno、データストア、サードパーティアドオンを含む) がこの環境内に含まれています。
Heroku Data for Redis は、Common Runtime 上と同じ開発者エクスペリエンスで、Private Space 内で実行できます。同じ CLI コマンドおよび Web インターフェースの多くが Private Heroku Data for Redis インスタンスに対して機能します。
Private Heroku Data for Redis プランは、ビルド時にアプリケーションからアクセスできません。ビルド時のプライベートデータストアへの依存関係を削除するか、パブリックの Heroku Data プランを使用するか、またはサポートに連絡して指示に従うことをお勧めします。
Premium、Private、Shield の各プランで、Heroku Data for Redis バージョン 6.0 以降には TLS 接続が必要です。TLS をサポートするようにクライアントを構成する必要があります。このプロセスでは、アプリを通常の動作に戻す前にアプリケーションを更新およびデプロイする必要がある場合があります。
Mini プランでは TLS の使用はオプションですが、REDIS_TLS_URL
環境設定の使用を通じて推奨されています。
プロビジョニング
Private 層の Heroku Data for Redis プランは Private Space のみを対象としています。Private 層プランは、分離されたネットワーク環境の内部でのみプロビジョニングできます。Premium 層からインスタンスを作成しようとすると、そのリクエストは失敗します。
新しいインスタンスを作成する
多くの buildpack では、ビルドプロセスの一部として Redis インスタンスが作成されます。作成されるアプリケーションが Private Space 内にある場合は、そのアプリケーションの Redis インスタンスがすでに存在していない限り、使用可能な最も低い Private プランがインスタンスの作成時に使用されます。現在使用可能なプランの一覧については、「プラン」のセクションを参照してください。
private
Heroku Data for Redis インスタンスは、CLI 経由でプロビジョニングできます。
$ heroku addons:create heroku-redis:private-7 -a private-example-app
Private Space 内には Heroku Data for Redis の Private 層のプランしか作成できません。
作成されるデータベースのリージョンやタイプによっては、インスタンスが使用可能になるまでにプロビジョニングプロセスに最大 10 分かかることがあります。
プラン
Heroku Data for Redis には、Private Space 向けの一連のプランが用意されています。Private 層は本番環境アプリケーション用に設計されており、次のものが含まれています。
- リージョンのサポート
- フォークのサポート
- アプリケーションログストリームに公開されるメトリクス
- 高可用性
プラン名 | プロビジョニング名 | メモリ制限 | 接続制限 | 月額料金 |
---|---|---|---|---|
Private-7 | heroku-redis:private-7 |
7 GB | 10000 | $900 |
Private-9 | heroku-redis:private-9 |
10 GB | 25000 | $1750 |
Private-10 | heroku-redis:private-10 |
25 GB | 40000 | $4000 |
Private-12 | heroku-redis:private-12 |
50 GB | 65000 | $7500 |
Private-14 | heroku-redis:private-14 |
100 GB | 65000 | $14000 |
Shield Private Space のプラン
Shield Private Space では、追加の Heroku Shield for Redis プランを使用できます。これらのデータベースには厳密な接続要件があり、外部接続が防止され、暗号化されたクライアントが要求されます。
Shield Private Space では、Heroku Data for Redis の Shield 層プランを使用する必要があります。
Shield 層は本番環境アプリケーション用に設計されており、次のものが含まれています。
- リージョンのサポート
- アプリケーションログストリームに公開されるメトリクス
- 高可用性
プラン名 | プロビジョニング名 | メモリ制限 | 接続制限 | 月額料金 |
---|---|---|---|---|
Shield-7 | heroku-redis:shield-7 |
7 GB | 10000 | $1100 |
Shield-9 | heroku-redis:shield-9 |
10 GB | 25000 | $2100 |
Shield-10 | heroku-redis:shield-10 |
25 GB | 40000 | $4800 |
Shield-12 | heroku-redis:shield-12 |
50 GB | 65000 | $9000 |
Shield-14 | heroku-redis:shield-14 |
100 GB | 65000 | $19600 |
外部接続
Premium 層の Heroku Data for Redis インスタンスとは異なり、Private インスタンスにローカルコンピューター経由でアクセスすることはできません。Private Redis インスタンスにアクセスするには、使用可能な Heroku Data for Redis CLI コマンドを使用する必要があります。これにより、分離されたネットワーク境界を超えてインスタンスに接続するための適切な承認が確実に得られます。
CLI の使用
Private インスタンスに接続する機能は Heroku CLI に直接統合されています。Premium 層に使用できるすべてのコマンドを Private インスタンスに使用できます。
Heroku Data for Redis で使用できる CLI コマンドについての詳細は、「Managing Heroku Data for Redis Using the CLI」(CLI を使用した Heroku Data for Redis の管理) を参照してください。
Premium Redis プランから Private Redis プランへの移行
アプリケーションを Common Runtime から Heroku Private Space に移行する場合は、Premium Redis インスタンスのデータも Private Redis インスタンスに移行できます。
アプリケーションが Common Runtime から Heroku Private Space に移行される場合は、Premium Redis インスタンスのデータも Private Redis インスタンスに移行できます。この移行ガイドは、Private Space 内での Premium Heroku Data for Redis インスタンスから Private Heroku Data for Redis インスタンスへのデータの移動にのみ適用されます。
Shield Redis プランにフォークすることはできません。
1. Common Runtime インスタンスの資格情報を取得する
このプロセスを開始するには、Common Runtime で実行される Heroku Data for Redis インスタンスの資格情報が必要になります。
$ heroku redis:credentials REDIS_URL -a example-app
redis://h:pdx11111111@ec2-184-255-255-255.compute-1.amazonaws.com:7929
2. 新しいインスタンス更新を防ぐ
移行プロセス中は、ソースシステム上のアプリケーションに新しいデータが書き込まれないようにすることが重要です。そうしないと、そのデータが新しいデータベースに転送されません。これを行うには、ソースアプリをメンテナンスモードにします。スケジューラージョブも実行されている場合は、これを無効にします。
アップグレードプロセスのこの時点で、アプリケーションは起動できなくなります。
$ heroku maintenance:on
Enabling maintenance mode for example-app... done
メンテナンスモードでは、どの dyno も自動的にスケールダウンされません。どの接続もデータベースにデータを書き込んでいないようにするために、Web dyno および Web 以外の dyno をすべてスケールダウンする必要があります。
$ heroku ps:scale worker=0
Scaling worker processes... done, now running 0
3. フォークを使用して Private プランをプロビジョニングする
アプリケーションが Private Space 内に作成されている場合は、--fork
フラグをこのプロセスの手順 1 の Heroku Data for Redis URI と共に使用して、新しい Private Heroku Data for Redis プランをプロビジョニングできます。
$ heroku addons:create heroku-redis:private-7 --fork=redis://h:pdx11111111@ec2-184-255-255-255.compute-1.amazonaws.com:7929 -a private-example-app
Creating heroku-redis:private-7 on ⬢ private-example-app... $900/month
Your add-on should be available in a few minutes.
redis-rugged-22859 is being created in the background. The app will restart when complete...
Use heroku addons:info redis-rugged-22859 to check creation progress
Use heroku addons:docs heroku-redis to view documentation
4. フォークされたインスタンスをプロモートする
プライマリでないアドオン (REDIS_URL
環境設定のないもの) から Redis インスタンスをフォークした場合は、このステップをスキップします。アプリで新しいアドオンの環境設定を使用できます。
プライマリ Redis アドオンのフォークの場合は、REDIS_URL
がフォークされたインスタンスを指すように、このインスタンスをプライマリとしてプロモートします。
$ heroku redis:promote HEROKU_REDIS_CHARCOAL_URL
Promoting redis-rugged-22859 to HEROKU_REDIS_CHARCOAL_URL on example-app
5. ターゲットアプリケーションをアクティブにする
通常のアプリケーション動作を再開するには、Web dyno 以外のスケールを元のレベルに戻しますアプリケーションで Web dyno 以外が使用されていなかった場合、不要な dyno のスケーリングを防ぐためにこのステップをスキップします。
$ heroku ps:scale worker=1
最後に、メンテナンスモードをオフにします。
$ heroku maintenance:off
アプリケーションが、移行された Redis インスタンスへのリクエストを受信するようになりました。これは、heroku redis:info
を実行することによって確認できます。REDIS_URL
で示されるインスタンスはプライマリインスタンスとみなされます。
移行後に実行する手順
インスタンスをアップグレードした後、未使用のインスタンスに対する支払いが発生しないように、古いインスタンスをプロビジョニング解除します。
$ heroku addons:destroy HEROKU_REDIS_BLUE