Heroku Private Space
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2024年03月27日(水)
Table of Contents
Private Space は Heroku Enterprise でのみ利用できます。Heroku Enterprise について詳しく知りたい場合は、Heroku にお問い合わせください。
Private Space は、dyno や特定の種類のアドオンを、分離されたネットワーク内で実行するための専用環境です。Private Space 内のアプリへのアクセスは、ネットワークレベルで制御できます。Private Space 内のアプリからのアウトバウンドリクエストは一連の固定 IP アドレスから発信されるため、オンプレミスまたは他のネットワーク上の許可された IP でサービスと安全に通信できます。Private Space は、企業や法令上のガバナンス標準で一般的に要求されるデータ保護および変更管理の厳しい要件を満たす Heroku アプリを構築し、実行するために使用できます。
Private Space には、標準の Private Space と Shield Private Space の 2 種類があります。Shield Private Space には、高コンプライアンスアプリケーションを構築して実行するための追加機能が含まれます。
一般的な git push heroku master
コマンドを使用して Private Space にデプロイするか、Heroku パイプラインを最大限に利用することができます。Private Space によって提供される強力なガバナンスおよびセキュリティ機能は、標準的な Heroku 開発者のエクスペリエンスを変えるものではありません。
Private Space 管理
チーム管理者のみが Private Space を作成、破棄、または変更できます。すべてのチームメンバーはチーム内の Private Space の詳細を表示できます。
リージョン
Private Space は以下のリージョンで作成できます。
名前 | 場所 |
---|---|
dublin | ダブリン (アイルランド) |
frankfurt | フランクフルト (ドイツ) |
london | ロンドン (英国) |
モントリオール | モントリオール (カナダ) |
ムンバイ | ムンバイ (インド) |
oregon | オレゴン州 (米国) |
singapore | シンガポール |
sydney | シドニー (オーストラリア) |
tokyo | 東京 (日本) |
virginia | バージニア州 (米国) |
特定のリージョンに Private Space を作成するには、Space を作成するときに場所を指定します。
Private Space の作成後はリージョンを変更できません。Private Space で作成されるすべてのアプリは、Space と同じリージョンにあります。
Heroku では、Platform API でこれらの各リージョンに関してさらに詳しい情報を提供します。詳細は、リージョンに関する記事を参照してください。
すべてのアドオンがすべてのリージョンで利用できるわけではありません。リージョンで利用可能なアドオンを確認するには、Add-on Runtime Availability (ランタイムでのアドオンの利用可能状況) を参照してください。
Private Space を作成する
チーム管理者のみが新しい Private Space を作成できます。
Dashboard を使用して Private Space を作成するには、チーム内で Spaces
(Space) タブをクリックして Create new Private Space
(新しい Private Space の作成) をクリックします。Private Space を作成するときは、必要に応じて、アプリとデータサービスのリージョン (地理的な場所) を選択できます。フォームに入力して Create Private Space
(Private Space の作成) をクリックすると、10 分以内に新しい Space が作成されます。
Heroku CLI を使用して Private Space を作成するには、spaces:create
コマンドを使用します。
$ heroku spaces:create my-space-name --team my-team-name
Creating space my-space-name in team my-team-name... done
=== my-space-name
Team: my-team-name
Region: virginia
State: allocating
新しい Private Space の作成には数分かかることがあります。そのステータスを追跡するには、spaces:wait
コマンドを使用します。
$ heroku spaces:wait my-space-name
Waiting for space my-space to allocate... done
リージョンの選択
特定のリージョンに Private Space を作成するには、リージョンの一覧にあるリージョン名を --region
オプションで指定します。たとえば、次のようになります。
$ heroku spaces:create my-space-name --team my-team-name --region tokyo
Creating space my-space-name in team my-team-name... done
=== my-space-name
Team: my-team-name
Region: tokyo
State: allocating
プライベートネットワーク CIDR 範囲を選択する
Amazon VPC やオンプレミスネットワークなどの他のネットワークに Private Space を接続する場合、Private Space が使用する dyno またはデータ CIDR 範囲を指定して、プライベートネットワークとの重複を回避することができます。環境内のサービスを Heroku に接続するプライベートネットワーク CIDR 範囲を指定できます。
データの CIDR 範囲は Heroku プライベートデータアドオンに使用されます。
Private Space が作成された後に CIDR 値を変更することはできません。
dyno またはデータのカスタム VPC CIDR 範囲を指定して Space を作成するために、CLI から --cidr
および --data-cidr
フラグを指定できます。
$ heroku spaces:create --cidr 172.16.0.0/16 --data-cidr 10.100.0.0/20 --space my-space-name
Creating space my-space-name in team my-team-name... done
=== my-space-name
Team: my-team-name
Region: tokyo
State: allocating
- dyno VPC には
/16
の CIDR 範囲が必要です (--cidr
) /20
はデータ VPC の最小 CIDR 範囲サイズです (--data-cidr
)172.17.0.0/16
または10.1.0.0/16
と重複する CIDR 範囲は指定できません- Private Space の作成後、dyno およびデータのこれらの CIDR 値は変更できません
- Private Space の CIDR 範囲の指定は CLI でのみ実行できます (Dashboard からは実行できません)
Private Space に関する情報を表示する
すべてのチームメンバーは、チーム内の Private Space に関する情報を表示できます。
Dashboard で、チーム内の Spaces
(Space) タブをクリックします。Space の情報には、Space が属しているチームと、Space の現在の状態が表示されます。allocating
状態は、Space がセットアップの途中でまだ動作していないことを示します。動作し始めると、状態が allocated
に変わります。
Heroku CLI で、spaces:info
コマンドを使用します。
$ heroku spaces:info --space my-space-name
=== my-space-name
ID: 12345678-abcd-1234-abcd-12345678abcd
Team: acme
Region: Tokyo, Japan
State: allocated
Shield: on
Outbound IPs: 52.198.127.12, 52.197.133.34, 52.199.6.12, 52.198.222.211
Created at: 2016-10-13T05:36:15Z
信頼済み IP 範囲
チーム管理者のみが Private Space の信頼済み IP 範囲を管理できます。
Private Space ごとに信頼済み IP 範囲のセットがあり、各範囲は (192.0.2.0/24
のような) CIDR ブロック表記で表されます。これらの信頼済み IP 範囲に含まれる発信元クライアントのみが、Private Space で実行されている Web プロセスにアクセスできます。信頼済み IP 範囲を使用して、会社のネットワークから、または、アプリのトラフィックのプロキシとして機能する CDN サービスからアプリへのトラフィックを制限します。
新しく作成された Private Space には、デフォルトの信頼済み IP 範囲 0.0.0.0/0
が設定されます。これは、インターネット全体からのトラフィックを許可します。
信頼済み IP 範囲は、Private Space 内のアプリケーションへのアクセスのみを制限します。どのソース IP 範囲から CLI コマンドを実行できるか、あるいは Dashboard に接続できるかは制御しません。
信頼済み IP 範囲を管理するには、Dashboard で Private Space の Network
(ネットワーク) タブを開きます。
CLI を使用して、Private Space の現在の信頼済み IP 範囲を一覧表示します。
$ heroku trusted-ips --space acme-prod
=== Trusted IP Ranges
192.0.2.0/26
192.0.2.64/26
CLI を使用して新しい範囲を追加します。
$ heroku trusted-ips:add 192.0.2.128/26 --space acme-prod
Added 192.0.2.128/26 to trusted IP ranges on acme-prod
▸ WARNING: It may take a few moments for the changes to take effect.
Private Space でインターネット全体からのトラフィックを許可するには、CIDR 範囲 0.0.0.0/0
を追加します。これは、新しく作成される Space のデフォルト設定です。
データサービスの信頼済み IP 範囲
これはベータ機能です。help.heroku.com でチケットを開き、データ製品の信頼済み IP を有効にするようリクエストしてください。
Private/Shield Postgres および Kafka データベースの場合、外部アクセスを許可するために推奨される方法は、mTLS を使用することです。mTLS と信頼済み IP の両方がデータアドオンで有効になっている場合、mTLS が信頼済み IP よりも優先されます。
データサービスの信頼済み IP 範囲は、Shield Private Space では利用できません。
デフォルトでは、信頼済み IP 範囲は、その Space で実行されている Web プロセスのみに適用されます。Heroku Postgres、Heroku Data for Redis、Apache Kafka on Heroku などのデータサービスには、Space 内の dyno からしかアクセスできません。必要に応じて、信頼済み IP アドレスから Space 内のデータサービスへのアクセスも許可するよう選択できます。ベータ期間中、この機能は Heroku のオペレーターのみが制御できます。help.heroku.com でチケットを開き、データ製品の信頼済み IP を有効または無効にするようリクエストしてください。この機能にはいくつかの注意事項があります。
0.0.0.0/0
はデータ製品の信頼済み IP としては無視されます。この CIDR ブロックは、より広範なインターネットに向けてデータベースを公開するからです。- きめ細かな制御は存在しません。信頼済み IP は Web dyno とデータ製品のどちらにも到達できます。
固定アウトバウンド IP アドレス
すべてのチームメンバーは、Private Space の固定アウトバウンド IP アドレスのリストを表示できます。
Private Space 内のアプリからのアウトバウンドトラフィックはすべて、その Space 専用である IP アドレスの小規模かつ固定のリストが発信元になります。許可された IP の一覧を使用して、Space 内のアプリによってアクセスされるサービスをセキュリティで保護できます。たとえば、企業のデータセンターで Web サービスゲートウェイを設定し、Private Space に割り当てられた IP アドレスからのアクセスのみを許可できます。TLS およびアプリケーションレベルの認証トークンと組み合わせてこれを使用すれば、企業のデータセンター内のリソースを保護するためのセキュリティレベルが向上します。
Dashboard では、Space の固定アウトバウンド IP アドレスは、その Space の 「Settings」 (設定) タブで確認できます。CLI を使用することもできます。
$ heroku spaces:info --space acme-prod
=== acme-prod
ID: 12345678-ed4a-4e96-b998-3fcb499439e0
Team: acme
Region: virginia
State: allocated
Outbound IPs: 192.0.2.2, 192.0.2.3, 192.0.2.4, 192.0.2.5
Created at: 2015-08-07T16:16:56Z
Private Space を破棄する
チーム管理者のみが Private Space を破棄できます。アプリケーションやその他のリソースが含まれる Private Space は破棄できません。Private Space を破棄する前に、アプリを明示的に削除する必要があります。
Heroku Dashboard で、Space Settings
(Space の設定) をクリックし、Delete Space
(Space の削除) を選択します。
Heroku CLI で、spaces:destroy
コマンドを使用します。
$ heroku spaces:destroy --space my-space-name
Destroying space my-space-name... done
=== my-space-name
Team: my-team-name
State: deleting
アプリの可用性
アプリに高可用性が必要な場合は、プロセスタイプごとに 3 dyno 以上に Dyno formation をスケールアップすることをお勧めします。dyno は、Private Space に関連付けられた 3 つの可用性ゾーン (AZ) のいずれかにラウンドロビンでプロビジョニングされます。これは、AZ の障害という稀なシナリオでアプリケーションの可用性を維持するために役立ちます。
AZ が異常または利用不能に陥った場合、Private Space は、正常に機能している AZ に dyno を自動的に再スケジュールします。異常が発生していた AZ が正常な状態に戻ると、Private Space は自動的に dyno を再分散します。
ダウンタイムなしのローリングデプロイ
アプリが初めて Private Space にデプロイ (プッシュ) されるとき、(ルーティング、DNS、dyno などの) 基盤となる専用インフラストラクチャのセットアップに時間が必要なため、アプリが利用可能になるまでに数分かかることがあります。
それ以降のリリース (コードのデプロイや環境設定の変更) では、遅延はずっと短くなり、ユーザーはほとんどダウンタイムを体感しない場合もあります。アプリの dyno が 1 つしかない場合は、短いダウンタイムが発生することがあります。複数の dyno がある場合、ダウンタイムがゼロになる可能性もあります。これは、ローリングデプロイと呼ばれる Private Space の機能によるものです。
ローリングデプロイは、Common Runtime での Preboot に似ています。どちらも、新しいリリースの間のゼロダウンタイムを実現します。Preboot ではこれを実現するために、既存の web
dyno が終了する前に新しい dyno が起動される (そして、トラフィックを受信する) ことを保証します。ローリングデプロイではこれを実現するために、一度に各 dyno タイプ (web
dyno やその他の Worker dyno を含む) の既存の dyno の最大 25% のみを停止して変更する一方、残りの dyno がリクエストやタスクを処理します。その効果として、新しいリリースを徐々に formation 全体にプッシュしながら、すべてのリクエストを処理します (ユーザーのダウンタイムはありません)。
より正確に言えば、ローリングデプロイのおかげで、以下のすべてが当てはまる場合は、Private Space アプリの新しいリリースの間にダウンタイムは発生しません。
- アプリが 1 回でもデプロイされたことがあり、現在実行されている。
- アプリに少なくとも 2 つの dyno があり、現在はまだ容量に余裕がある (つまり、その dyno の最大 25% が停止しても、まだリクエストを処理できる十分な dyno がある。アプリに 2 つまたは 3 つの dyno しかない場合、リリースがロールアウトされている間は、残りの 1 つまたは 2 つの dyno で既存の負荷を処理できる必要がある)。
- アプリにアタッチされているどのデータベースも、スキーマの変更を伴わず、アプリの古いリリースと新しいリリースの両方と互換性がある (前方および後方互換)。
Private Space 内の既存のアプリをスケーリングしても、(既存の負荷を処理するのに十分な容量がある限り) ダウンタイムは発生しません。dyno タイプを変更すると、状況によっては、新しい dyno タイプが作成されてトラフィックが切り替わる間、短いダウンタイムが発生します。
Private Space でのアプリの管理
Private Space は、その内側であれば、機密性の高いデータを扱うアプリをチームでデプロイして管理してもよいという信頼境界を表します。したがって、Private Space 内でアプリを作成できるのは、チーム管理者と、特定の Space で “アプリの作成” 権限を付与されているユーザーに限られます。アプリが作成されたら、管理者はきめ細かなアクセス制御を使用して、アプリに対する追加のアクセス権を他のメンバーに付与できます。
Private Space でアプリを作成する
Private Space でアプリを作成できるユーザーは、以下に限られます。
- チーム管理者
- 管理者から “アプリの作成” 権限を付与されたチームメンバー。(これは、Heroku Dashboard で Space をクリックしてから
Access
(アクセス) をクリックすることで実行できます。)
Heroku Dashboard で Space をクリックし、Create New App
(新しいアプリの作成) を選択します。
Heroku CLI で、create
コマンドを使用します。
$ heroku create my-space-app --space my-space-name
Creating my-space-app in space my-space-name... done
http://my-space-app-1234567890ab.herokuapp.com/ | https://git.heroku.com/my-space-app.git
アプリが作成されたら、複数あるアプリ権限のいずれかを使用して他のチームメンバーにアクセス権を付与できます。表示権限よりも高い権限は、Space で保護されている機密性の高いデータへのアクセスを許可している信頼されたメンバーにしか付与してはなりません。アプリの開発に関わる可能性があるが本番環境にアクセスする必要はない他のすべてのメンバーには、ステージング環境と開発環境へのアクセス権のみを付与してください。
Private Space でアプリをデプロイする
Private Space アプリへのコードのデプロイ (プッシュ) は、Common Runtime アプリと同じ方法で (git push heroku master
や GitHub 統合を使用するなどして) 実行できます。
ビルドプロセス自体は Private Space の外側で実行され、Private Space 内にあるリソースにはアクセスできません。
プロセスのスケーリング
Private Space 内での Dyno formation のスケーリングは、Common Runtime と同じパターンに従います。たとえば、次のようになります。
$ heroku ps:scale web=2 worker=1
formation をスケールアップするには、Private Space 内で新しい dyno をプロビジョニングして起動する必要があります。このプロセスの完了には数分かかります。
One-off dyno
“One-off” dyno は heroku run
から利用できます。
$ heroku run bash
Running bash...
▸ WARNING: Warning: Dynos can take up to a few minutes to be provisioned in Private Spaces.
One-off dyno の作成には、Private Space 内で新しい dyno をプロビジョニングして起動することが必要になります。このプロセスの完了には数分かかります。
Private Space 内のアプリを一覧表示する
すべてのチームメンバーが、Private Space 内のすべてのアプリを表示できます。
$ heroku apps --space my-space-name
=== Apps in space my-space-name
my-space-app-1
my-space-app-2
Private Space 内のアプリの情報を表示する
すべてのチーム管理者が、Private Space 内の 1 つのアプリに関する詳細情報を表示できます。
$ heroku info --app my-space-app
=== my-space-app
Collaborators: my-team-name@example.com
Git URL: https://git.heroku.com/my-space-app.git
Owner: my-team-name
Region: tokyo
Space: my-space-name
Stack: heroku-20
Web URL: http://my-space-app-1234567890ab.herokuapp.com/
Private Space 内のアプリを破棄する
チーム管理者と、アプリに対する管理権限を持つメンバーは、アプリを破棄することができます。
$ heroku apps:destroy -a my-space-app
Destroying my-space-app (including all add-ons)... done
カスタムドメインと SSL の追加
チーム管理者と、アプリに対する管理権限を持つメンバーのみが、カスタムドメインを追加したり SSL を管理したりできます。
Space 内のアプリの SSL とカスタムドメインは Common Runtime 内のアプリと同様に処理されます。詳しい手順については、「Custom Domains」(カスタムドメイン) および SSL に関するドキュメントを参照してください。
新しく作成された Private Space アプリでは、アプリが作成されてから、またアプリの名前が変更されてから数分が経過しないと <appname>-<random-identifier>.herokuapp.com
で HTTPS が機能しません。ACM を有効にしたり、証明書を手動でアップロードしてカスタムドメインに対して SSL を有効にしたりしても、デフォルトドメイン (http://example-app-1234567890ab.herokuapp.com など) の SSL 証明書への影響はありません。デフォルトのアプリドメインは常に標準 HTTP で動作します。
Shield Private Space
Shield Private Space には、高コンプライアンスアプリケーションをビルドするための追加機能が含まれます。機能についての詳細は、Shield Private Space に関する記事を参照してください。
アドオンと Private Space
Heroku Private Space でアプリのアドオンをプロビジョニングしようとし、そのアドオンがそのアプリの Private Space リージョンで利用できない場合、そのことを知らせるメッセージが表示されます。
リージョンで利用可能なアドオンを確認するには、Add-on Runtime Availability (ランタイムでのアドオンの利用可能状況) を参照してください。Private Space リージョンの情報を表示するには、Private Spaces
(Private Space) タブを選択します。
この情報は、各アドオンの 「Elements」 (要素) リストページの Region Availability (リージョンの利用可能状況) セクションでも確認できます。
Private Space で利用可能と示されたアドオン
多くのアドオンでは、Private Space の外側で動作する場合でも、Private Space リージョンと互換性のあるプランを提供しています。これは、プライベート dyno とアドオンリソースの間のネットワークトラフィックがパブリックインターネットを経由することを意味します。「Add-on Runtime Availability」(ランタイムでのアドオンの利用可能状況) では、これらのアドオンには “Available” (利用可能) を示す緑色の丸印が付いています。
これらのアドオンは、Common Runtime で通常行うのと同じように、Private Space で実行されているアプリに追加できます。
$ heroku addons:create newrelic:wayne -a appname
Creating newrelic-cubic-72448... done, (free)
Adding newrelic-cubic-72448 to appname... done
Setting NEW_RELIC_LICENSE_KEY, NEW_RELIC_LOG and restarting appname... done, v80
Use `heroku addons:docs newrelic` to view documentation.
タイプが “datastore” (データストア) である一部のアドオンは Private Space リージョンと互換性があります。これらは、CLI で addons:create
コマンドを使用してプロビジョニングすることも、Dashboard でプロビジョニングすることもできます。どちらを行う場合も、Private Space のネットワーク境界内に含まれていないこのデータストアの使用が明示的な意図によるものであること、また、このアドオンプランを使用するとパブリックインターネット経由でデータが送信されることへの了解について、お客様の意思の確認が必要になります。
CLI からプロビジョニングを行うには、確認プロンプトに従う必要があります。
$ heroku addons:create <addon name> -a appname
! This add-on is not automatically networked with this Private Space.
! To proceed, type "appname" or re-run this command with --confirm appname
Heroku アドオンのクレジットおよび過剰分の支払いメカニズムについては、Heroku Enterprise のドキュメントを参照してください。
Private Space で使用可能およびインストール可能と示されたアドオン
一部のアドオンは Private Space にインストール可能です。これは、dyno とアドオンリソース間のすべてのネットワークトラフィックが Space のプライベートネットワーク内にとどまり、アドオンリソースをパブリックインターネットで公開する必要がないことを意味します。「Add-on Runtime Availability」(ランタイムでのアドオンの利用可能状況) では、これらのアドオンには “Available & Installable in Private Space” (Private Space で利用可能かつインストール可能) を示す青色の丸印が付いています。
Heroku Postgres と Heroku Data for Redis は、Heroku Private Space 内に作成されるアドオンの例です。Private Space 内のアプリに対して Heroku Postgres または Heroku Data for Redis の Private プランを選択すると、Heroku Private Space と同じリージョンにリソースが自動的に作成され、Heroku Private Space とピアリングされます。
Heroku Private Space 内に Heroku Postgres インスタンスを作成するには、private-0
以上のプランを選択する必要があります。このアドオンはお客様の Space 内に自動的に作成されるため、確認は必要ありません。
$ heroku addons:create heroku-postgresql:private-0 -a your-private-app-name
詳細は、Heroku Postgres と Heroku Private Space および Heroku Data for Redis と Heroku Private Space に関する記事を参照してください。
お客様の Space の外で Heroku Postgres プランおよび Heroku Data for Redis プランをプロビジョニングすることは可能です。--region
フラグを使用してアプリ、プラン、リージョンを指定することによってプロビジョニングします。
$ heroku addons:create heroku-postgresql:standard-4 --region=us -a your-private-app-name
CLI でプランの追加を確認するよう求められます。
! This add-on is not automatically networked with this Private Space.
! To proceed, type "appname" or re-run this command with --confirm appname
Private Space との間でアプリとデータを移行する
現在、Private Space との間でアプリやデータを自動で移行する機能はありませんが、手動での移行は可能です。データベースがある場合は、まずデータベースをバックアップして移行する必要があります。次に、アプリコードを移行先に再プッシュする必要があります。Private Space の動作方法の違いや、アプリが使用するアドオンが移行先で動作するかどうか、あるいはアドオンの設定変更が必要になるかどうかも考慮する必要があります。たとえば、Private Space 内のアプリでは SSL の動作がわずかに異なります。詳細は、「Migrating Apps From the Common Runtime to a Private Space」(Common Runtime から Private Space へのアプリの移行) を参照してください。
Private Space の転送
Enterprise Team 間で Private Space を転送することが可能です。転送を実行するユーザーは、両方の Enterprise Team の “管理者” であるか、または会社の Enterprise Account の “管理” アクセス許可を持っている必要があります。Space を転送するには、その Settings
(設定) タブに移動し、移動先の Enterprise Team を Space Ownership
(Space の所有権) セクションから探します。
Space を転送すると、Space 内にあるアプリのみが新しい Enterprise Team に移動します。Space 内のアプリと外にあるアプリの両方を含むパイプラインがある場合、Space 内のアプリのみが新しい Enterprise Team に移動する一方で、パイプラインはその Space 内になかったアプリと共に古い Enterprise Team にとどまります。
Private Space のデフォルトの制限
Private Spaces Runtime は Common Runtime とは異なるアーキテクチャで構築されており、Private Space ではデフォルトの制限が異なっています。Private Space の制限を引き上げるには、サポートチケットを開いてください。
新しく作成された Space のデフォルトの制限は現在、以下のとおりです。
- 20 の信頼済み IP 範囲
- 20 のアプリ
- 100 のプロセスタイプ (プロセスタイプごとに 10 の dyno)
- Space 全体で 100 の dyno
並列 One-off dyno の制限
- 最大 5 つの並列 One-off Private-S dyno
- 最大 5 つの並列 One-off Private-M dyno
- 最大 5 つの並列 One-off Private-L dyno
- 最大 5 つの並列 One-off Private-L-RAM dyno
- 最大 5 つの並列 One-off Private-XL dyno
- 最大 5 つの並列 One-off Private-2XL dyno
- 最大 5 つの並列 One-off Shield-S dyno
- 最大 5 つの並列 One-off Shield-M dyno
- 最大 5 つの並列 One-off Shield-L dyno
- 最大 5 つの並列 One-off Shield-L-RAM dyno
- 最大 5 つの並列 One-off Shield-XL dyno
- 最大 5 つの並列 One-off Shield-2XL dyno