Heroku Data for Redis と Private Space
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年04月04日(火)
Table of Contents
Private Space での Heroku Data for Redis は、Heroku Enterprise でのみ利用できます。
この記事では、Heroku Data for Redis が Private Space または Shield Private Space で使用される場合と、Common Runtime で使用される場合を比較したときの Heroku Data for Redis のプロビジョニング、プラン、接続の違いについて説明します。
Heroku Private Space は、分離されたネットワーク内でアプリケーションを実行するための専用環境です。つまり、アプリケーションスタックのすべての部分 (dyno、データストア、サードパーティアドオンを含む) がこの環境内に含まれています。
Heroku Data for Redis は、Common Runtime 上と同じ開発者エクスペリエンスで、Private Space 内で実行できます。同じ CLI コマンドおよび Web インターフェースの多くが Private Heroku Data for Redis インスタンスに対して機能します。
Private Heroku Data for Redis プランは、ビルド時にアプリケーションからアクセスできません。ビルド時のプライベートデータストアへの依存関係を削除するか、パブリックの Heroku Data プランを使用するか、またはサポートに連絡して指示に従うことをお勧めします。
プロビジョニング
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-sushi
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 インスタンスに移行できます。この移行ガイドは、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 sushi
redis://h:pdx11111111@ec2-184-255-255-255.compute-1.amazonaws.com:7929
2. 新しいインスタンス更新を防ぐ
移行プロセス中は、ソースシステム上のアプリケーションに新しいデータが書き込まれないようにすることが重要です。そうしないと、そのデータが新しいデータベースに転送されません。これを行うには、ソースアプリをメンテナンスモードにします。スケジューラージョブも実行されている場合は、これを無効にします。
アップグレードプロセスのこの時点で、アプリケーションは起動できなくなります。
$ heroku maintenance:on
Enabling maintenance mode for sushi... 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-sushi
Creating redis-rugged-22859... done
Adding redis-rugged-22859 to private-sushi... done
Setting HEROKU_REDIS_CHARCOAL_BASTIONS, HEROKU_REDIS_CHARCOAL_BASTION_KEY, HEROKU_REDIS_CHARCOAL_BASTION_REKEYS_AFTER, HEROKU_REDIS_CHARCOAL_URL and restarting private-sushi... done, v55
Instance has been created and will be available shortly
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