Heroku Redis と Private Space
最終更新日 2021年04月06日(火)
Table of Contents
Private Space での Heroku Redis は、Heroku Enterprise でのみ利用できます。
この記事では、Heroku Redis が Private Space または Shield Private Space で使用される場合と、Common Runtime で使用される場合を比較したときの Heroku Redis のプロビジョニング、プラン、接続の違いについて説明します。
Heroku Private Space は、分離されたネットワーク内でアプリケーションを実行するための専用環境です。つまり、アプリケーションスタックのすべての部分 (dyno、データストア、サードパーティアドオンを含む) がこの環境内に含まれています。
Heroku Redis は、Common Runtime 上と同じ開発者エクスペリエンスで、Private Space 内で実行できます。同じ CLI コマンドおよび Web インターフェースの多くが Private Heroku Redis インスタンスに対して機能します。
Private Heroku Redis プランは、ビルド時にアプリケーションからアクセスできません。ビルド時のプライベートデータストアへの依存関係を削除するか、パブリックの Heroku Data プランを使用するか、またはサポートに連絡して指示に従うことをお勧めします。
プロビジョニング
Heroku Redis には、Private Space のみを対象とした一連のプランがあります。Private 層プランは、分離されたネットワーク環境の内部でプロビジョニングできる唯一のプランです。Premium 層からインスタンスを作成しようとすると、そのリクエストは失敗します。
新規インスタンスの作成
多くの buildpack では、ビルドプロセスの一部として Redis インスタンスが作成されます。作成されるアプリケーションが Private Space 内にある場合は、そのアプリケーションの Redis インスタンスがすでに存在していない限り、使用可能な最も低い Private プランがインスタンスの作成時に使用されます。現在使用可能なプランの一覧については、「プラン」のセクションを参照してください。
Private Heroku Redis インスタンスは、CLI 経由でプロビジョニングできます。
$ heroku addons:create heroku-redis:private-7 -a private-sushi
Private Space 内には Heroku Redis の Private 層のプランしか作成 できません。
作成されるデータベースのリージョンやタイプによっては、インスタンスが使用可能になるまでにプロビジョニングプロセスに最大 10 分かかることがあります。
プラン
Heroku 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 では、追加の ‘Shield’ Heroku Redis プランを使用できます。これらのデータベースには厳密な接続要件があり、外部接続が防止され、暗号化されたクライアントが要求されます。
Shield Private Space では、Heroku 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 Redis インスタンスとは異なり、Private インスタンスにローカルコンピュータ経由でアクセスすることはできません。Private Redis インスタンスにアクセスするには、使用可能な Heroku Redis CLI コマンドを使用する必要があります。これにより、分離されたネットワーク境界を超えてインスタンスに接続するための適切な承認が確実に得られます。
CLI の使用
Private インスタンスに接続する機能は Heroku CLI に直接統合されており、Premium 層に使用できるすべてのコマンドを Private インスタンスに使用できます。
Heroku Redis に使用できる CLI コマンドについての詳細は、メインの Heroku Redis の記事を参照してください。
Premium Redis プランから Private Redis プランへの移行
アプリケーションが Common Runtime から Heroku Private Space に移行される場合は、Premium Redis インスタンスのデータも Private Redis インスタンスに移行できます。この移行ガイドは、Private Space 内での Premium Heroku Redis インスタンスから Private Heroku Redis インスタンスへのデータの移動にのみ適用されます。
Shield Redis プランにフォークすることはできません。
1. Common Runtime インスタンスの資格情報を取得する
このプロセスを開始するには、Common Runtime で実行される Heroku 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 Redis URI と共に使用して、新しい Private Heroku 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. ターゲットアプリケーションをアクティブにする
通常のアプリケーション動作を再開するには、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