CLI を使用した Heroku Key-Value Store の管理
最終更新日 2024年10月11日(金)
Table of Contents
Heroku Key-Value Store (KVS) は Heroku CLI に直接統合されており、KVS インスタンスを管理するためのいくつかのコマンドを提供しています。
redis:info
アプリケーションによってプロビジョニングされているすべての KVS インスタンスを表示し、それぞれの特徴を確認するには、heroku redis:info
コマンドを使用します。
$ heroku redis:info
=== maturing-deeply-2628 (REDIS_URL)
Plan: Premium 0
Status: Available
Created: 2024-09-23 21:40 UTC
Version: 7.2.4
Timeout: 60
Maxmemory: volatile-lru
Maintenance window: Mondays 22:30 to Tuesdays 02:30 UTC
Persistence: AOF
Status: Available
Requires TLS: Yes
Keyspace Notifications: Disabled
Plan Connection Limit: 10000
=== maturing-calmly-4191 (HEROKU_REDIS_AMBER_URL)
Plan: Premium 1
Status: Available
Created: 2024-09-30 21:40 UTC
Version: 7.2.4
Timeout: 0
Maxmemory: noeviction
Maintenance window: Mondays 22:30 to Tuesdays 02:30 UTC
Persistence: AOF
Status: Available
Requires TLS: Yes
Keyspace Notifications: Disabled
Plan Connection Limit: 10000
redis:cli
リモートの KVS インスタンスとの KVS CLI セッションを確立するには、heroku redis:cli
を使用します。インスタンスを指定しない場合は、REDIS_URL
にあるインスタンスがデフォルトで使用されます。
$ heroku redis:cli -a myapp -c myapp
Connecting to maturing-deeply-2628 (REDIS_URL):
ec2-54-221-206-137.compute-1.amazonaws.com:6379> PING
PONG
ec2-54-221-206-137.compute-1.amazonaws.com:6379>
複数のインスタンスがある場合は、接続先のインスタンスを指定します。簡単な指定方法として、HEROKU_REDIS_<color>
環境設定名をコマンドの最初の引数として指定するか、リソース名 maturing-deeply-2628
を指定することができます。
$ heroku redis:cli HEROKU_REDIS_AMBER
$ heroku redis:cli maturing-deeply-2628
redis:credentials
Heroku Key-Value Store は、インスタンスの資格情報および場所への便利なアクセスを提供します。これにより、GUI を使用してインスタンスにアクセスすることが簡単になります。
インスタンス名の引数は、redis:credentials
コマンドで指定する必要があります。プライマリデータストアには REDIS_URL
を使用します。
$ heroku redis:credentials REDIS_URL
redis://h:pfl0cfuvr58fhsduesr9kau765k@ec2-54-221-206-137.compute-1.amazonaws.com:6379
セキュリティ対策上、重要なサービスの資格情報は定期的にローテーションすることをお勧めします。Heroku Key-Value Store では、heroku redis:credentials --reset
を使用して資格情報をローテーションします。
$ heroku redis:credentials HEROKU_REDIS_GRAY_URL --reset
このコマンドを実行すると、インスタンスに新しい資格情報が作成され、Heroku アプリケーションの関連する環境設定が更新されます。
現在実行中のタスクが完了するまで、開いているすべての接続は開いたままになります。この動作は、本番環境で実行中のすべてのバックグラウンドジョブあるいはその他の Worker が突然終了し、システムが不整合な状態にならないようにするためのものです。資格情報のローテーションは実行されたが、dyno がまだ新しい環境設定の値で再起動されていないうちに開かれた新しい接続はすべて失敗します。
redis:promote
複数の KVS インスタンスがプロビジョニングされている設定では、多くの場合、インスタンスをプライマリロールにプロモートする必要があります。インスタンスは、heroku redis:promote
コマンドを使用してプロモートできます。
$ heroku redis:promote shining-surely-6441 -a myapp
Promoting shining-surely-6441 to REDIS_URL on myapp
redis:promote
は、REDIS_URL
環境設定の値 (アプリケーションが接続のために使用する値) を新しくプロモートされたインスタンスの URL に変更し、アプリを再起動します。古いプライマリ KVS インスタンスの場所には、その HEROKU_REDIS_COLOR_URL
設定から引き続きアクセスできます。
プロモート後も、デモートしたインスタンスは依然としてプロビジョニングされており、料金が発生します。不要な場合は、heroku addons:destroy maturing-deeply-2628
で削除します。
redis:timeout
アイドル接続を強制終了する前に KVS が待機する秒数を変更するには、redis:timeout
コマンドを使用します。
$ heroku redis:timeout maturing-deeply-2628 --seconds 60
Timeout for maturing-deeply-2628 (REDIS_URL) set to 60 seconds.
Connections to the redis instance will be stopped after idling for 60 seconds.
redis:maxmemory
インスタンスがそのストレージ制限に達したときに使用されるキーエビクションポリシーを変更するには、redis:maxmemory
コマンドを使用します。
$ heroku redis:maxmemory maturing-deeply-2628 --policy volatile-lru
Maxmemory policy for maturing-deeply-2628 (REDIS_URL) set to volatile-lru.
volatile-lru evicts keys trying to remove the less recently used keys first, but only those that have an expiry set.
redis:keyspace-notifications
Heroku Key-Value Store では、キー空間通知がサポートされています。これを設定するには、redis:keyspace-notifications
コマンドを使用します。
$ heroku redis:keyspace-notifications maturing-deeply-2628 --config AKE
Keyspace notifications for maturing-deeply-2628 (REDIS_URL) set to 'AKE'.
いくつかの設定を使用できます。詳細は、「heroku help redis:keyspace-notifications
」を参照してください。
redis:stats-reset
Heroku Key-Value Store インスタンスに関する統計をリセットします。この記事では、リセットされる統計の概要を示しています。
$ heroku redis:stats-reset maturing-deeply-2628
▸ WARNING: Irreversible action.
▸ All stats covered by RESETSTAT will be reset on maturing-deeply-2628.
▸ To proceed, type sushi or re-run this command with --confirm sushi
> sushi
Stats reset successful.