アドオンの非同期プロビジョニング解除 (パブリックベータ)
最終更新日 2023年08月07日(月)
非同期プロビジョニング解除機能を使用すると、アドオンプロバイダーは、プロバイダーのアクセスがプロビジョニング解除によって削除される前に、アドオンリソースがアタッチされているアプリを操作できます。アドオンプロバイダーによっては、One-off dyno をシャットダウンする、アドオンによって作成された SSL 証明書を削除するなどのアクションを実行できます。フォローアップの連絡を顧客に送信する、などのアクションも実行できます。
この機能はパブリックベータです。アクセスをリクエストするには、サポートチケットを開いてください。
ワークフローの例
この例では、アドオンプロバイダーは、アドオン上のすべての One-off Dyno を停止することによって、スケジューラーサービスの整然としたシャットダウンを実行します。その後、顧客のアプリケーションにアクセスできなくなる前に、関連するログメッセージをアプリケーションログに送信します。
- 顧客は Heroku CLI から
addons:destroy
コマンドを実行して、アプリケーションからのアドオンの削除をリクエストします。 - Heroku はアドオンリソースの請求を停止し、
Async Allowed
アドオンプロビジョニング解除リクエストをパートナーに送信します。 - パートナーはプロビジョニング解除リクエストに
202 Accepted
応答コードで応答します。 - パートナーは、まだ実行中である制御対象の One-off dyno ごとに、dyno の停止エンドポイントにリクエストを送信します。
- パートナーは、停止した Dyno ごとに、顧客にとって関連性がある情報が含まれたログメッセージを送信します。この情報には、dyno が強制終了されたタイムスタンプ、実行されたコマンド、強制終了 (アドオンのプロビジョニング解除) の理由が含まれ、アドオンリソースにリンクされたログ入力 URL が使用されます。
- パートナーは、処理が完了し、このリソースに代わって Platform API へのアクセスをこれ以上リクエストしないことを Heroku に通知する明示的な呼び出しを行います。
- Heroku により、パートナーの承認を含め、リソースがアプリケーションから分離および削除されます。このステップにより、アプリの再起動がトリガーされます。
このプロセスの各部分についての詳細は、「実装」セクションを参照してください。
知っておきたいこと
請求
顧客がアドオンのプロビジョニング解除をリクエストすると、請求は停止します。サービスのプロビジョニング解除の時間とコストは、顧客の支払い額に反映されません。不必要なコストが発生しないように、速やかにプロビジョニングを解除してください。
不完全なアドオンのプロビジョニング解除
プロビジョニング解除にかかる時間が 12 時間を超えるアドオンや、サービスでその期間内に API 経由で deprovisioned
とマークできないアドオンも、プロビジョニング解除済みと見なされます。これらは顧客のアプリから削除され、プロバイダーによるプロビジョニング解除の遅延について Heroku が顧客に請求することはありません。
前提条件
- パートナー向け Platform API を使用する必要があります。
- このベータ機能へのアクセスをリクエストするには、サポートチケットを開いてください。
実装
リソースの非同期プロビジョニング解除が許可されているかどうかの確認
Heroku が非同期プロビジョニング解除へのアクセスをアドオンサービスに許可すると、すべてのプロビジョニング解除リクエストに X-Async-Deprovision-Allowed
ヘッダーが追加されます。値は true
または false
です。
非同期でのプロビジョニング解除ができない場合もあります。アプリが破棄されたためアドオンがプロビジョニング解除されると、ヘッダーは false
に設定され、リクエストを受信するのは Heroku がアドオンリソースとアプリの両方を破棄した後になります。このシナリオで Platform API を使おうとすると、アクセストークンが取り消されていて無効なため、結果は 401 Unauthorized
になります。
X-Async-Deprovision-Allowed
ヘッダーが true
に設定されていれば、顧客がアドオンの削除をリクエストしたことを示しており、非同期でのプロビジョニング解除ができます。
プロビジョニングリクエストに 202 Accepted で応答する
アドオンサービスでベータ版の非同期プロビジョニング解除機能にアクセスできる状態で、X-Async-Deprovision-Allowed
ヘッダーが true
に設定されたプロビジョニング解除リクエストを Heroku が送信した場合、アドオンでは次のことを行う必要があります。
- リソースを非同期でプロビジョニング解除するためのジョブをキューに入れます。
202 Accepted
応答コードで応答します。
このプロセスは、アクセストークンは削除せずに、アドオンをプロビジョニング解除中の状態に保つよう Heroku に指示します。Platform API へのアクセスが不要になったら、アドオンを明示的に deprovisioned
とマークする必要があります。
一部のリソースでは、非同期プロビジョニング解除のワークフローは適切ではありません。その場合、サービスは 202 Accepted
を除いた他の 2xx Successful
応答コードで応答することができ、Heroku はアドオンをすぐにプロビジョニング解除します。204 No Content
(推奨) または 200 Ok
応答のいずれかが機能します。
アプリに対する必要なアクションの実行
アドオンがプロビジョニング解除中の状態であっても、Platform API でアクションを実行するためのアクセストークンと更新トークンはまだ有効です。
顧客のアプリに対する保留中のアクションを完了したらすぐに、アドオンを deprovisioned
とマークする必要があります。Platform API にアクセスして、整然としたシャットダウンをできるだけ早く実行することをお勧めします。
アドオンサービスのプロビジョニング解除ワークフローで、データベースのバックアップやインフラストラクチャの破棄などの長時間操作が必要な場合は、リソースを deprovisioned
としてマークした後に、バックグラウンドジョブを使用してこれらのアクションを実行してください。Heroku では、アドオンを deprovisioned
とマークするためにプロバイダーの側でリソースを完全にプロビジョニング解除することをプロバイダーに義務付けているわけではありません。
アドオンのプロビジョニング解除の完了
最後の手順では、アドオンのプロビジョニングを解除したので Platform API へのアクセスが不要になったことを Heroku に通知します。この手順がプロビジョニング解除リクエストから 12 時間以内に実行されない場合、Heroku はリクエストを完了と見なし、プロバイダーアクセスと共にアドオンを削除します。プロビジョニング解除が完了したことを示すには、アドオンアクションのプロビジョニング解除エンドポイントを使用します。
POST /addons/:uuid/actions/deprovision
この時点で、アドオン、プロバイダーアクセス、アドオンの環境設定が削除されます。Heroku は新しいリリースを作成し、すべてのアプリケーション dyno を再起動します。
まとめ
非同期プロビジョニング解除を使用すると、アドオンパートナーは、プロビジョニング解除中のユーザーエクスペリエンスを、より良質でリッチな形で実装できます。プロバイダーは、Heroku API との統合方法の一部に変更を加え、機能を有効化する必要があります。実装に関する質問がある場合は、Heroku のエコシステムエンジニアリングチームまでお問い合わせください。