アドオンとは
最終更新日 2024年05月30日(木)
Table of Contents
この記事は、Heroku のアドオンマーケットプレイスのアドオンの作成に関心がある開発者を対象としています。Heroku アプリでのアドオンの使用については、「Add-ons」(アドオン) を参照してください。
アドオンは、次のような役立つ機能やサービスで Heroku アプリを拡張するクラウドサービスです。
- データストア
- ログ記録
- 監視
- コンテンツ管理
アドオンは、次の 1 つまたは複数の方法で Heroku アプリと対話します。
- そのアドオンと通信するために必要な値を使用して、アプリの 1 つ以上の環境設定を設定します。これらの値には通常、クラウドサービスの URL と、その URL にアクセスするために必要なすべての資格情報が含まれます。
- アプリのログの読み取りまたは書き込みを行います。
- パートナー向け Heroku Platform API を使用して、アプリの開発者の代わりにアプリ管理アクション (dyno のスケーリングなど) を実行します。
どのアドオンにも 1 つ以上のプランがあります。各プランには独自の価格と、関連付けられている一連の機能があります。開発者は、アドオンをプロビジョニングするときに必要なプランを選択しますが、その選択はいつでも変更できます。アドオンに対する請求は、標準の毎月の Heroku 請求に統合されます。
アドオンのプロビジョニングフロー
開発者は、Heroku Elements Marketplace または Heroku CLI を使用して、アプリのアドオンをプロビジョニングします。 これが実行されると、Heroku はアドオンにリクエストを送信し、アドオンがそのアプリに新しいリソースを割り当てます。このリソースは、アプリとアドオンの間の関連付けを表しています。
次のセクションでは、プロビジョニングフローについてさらに詳細に説明します。
手順 1: 開発者がプロビジョニングを開始する
プロビジョニングプロセスは、開発者がアドオンカタログでアドオンを見つけ、Install
(インストール) ボタンをクリックしたときに開始されます。あるいは、Heroku CLI を使用することもできます。
$ heroku addons:create addon-name
手順 2: Heroku はサービスのプロビジョニングを要求する
アドオンがプロビジョニングするリソースの構造は、提供しているサービスのタイプによって異なります。
ほぼすべてのケースで、ユーザーアカウントをプロビジョニングする必要があります。データストアアドオンを開発している場合は、おそらく新しいデータベースリソースをただちにプロビジョニングします。例外レポートサービスでは、標準的なユーザー資格情報に加えて、一意の API キーをプロビジョニングする可能性があります。
手順 3: アドオンがリソース URL を返す
リソースがプロビジョニングされると、アドオンは、アプリが自身に関連付けられているリソースにアクセスするために使用できる URL で応答します。
たとえば、Amazon RDS などのデータベースパートナーは次の URL を返す可能性があります。
MYSQL_URL=mysql://user:pass@mysqlhost.net/database
New Relic などの一般的なパートナーは、次のような標準的な HTTPS URL を返す可能性があります。
NEW_RELIC_URL=https://newrelic.com/accounts/[apitoken]
手順 4: Heroku はアプリを再構築する
Heroku は、アドオンから返された URL を環境設定としてアプリに追加します。その後、アプリを再構築し、そのすべての dyno を再起動します。
これで、Heroku アプリは、アドオンによってプロビジョニングされたリソースを消費する準備ができました。
アドオンとの対話
Heroku アプリは、アドオンの目的に応じて異なる時間に、異なる方法でそのアドオンと対話します。たとえば、Heroku Web アプリは、特定のテーブルビューに関連付けられているすべてのレコードをフェッチするためにアドオンのデータベースリソースを消費する可能性があります。
手順 1: アプリがそのリソース URL にアクセスする
アプリは、プロビジョニングフロー中に環境設定として保存された URL を使用してアドオンリソースにアクセスします。
データストアリソース (MySQL、MongoDB、Memcache など) には独自のプロトコルがあり、ActiveRecord、MongoMapper、MemcacheClient などのクライアントライブラリを使用してリソースにアクセスします。これらのリソースの URL は、適切なプロトコル (mysql://
、mongo://
、memcache://
など) で始まります。
Web サービスリソース (Exceptional や New Relic など) は、そのプロトコルとして https://
を使用します。
手順 2: アドオンリソースが応答する
これで、アドオンのリソースは、アプリからの受信リクエストを処理できるようになりました (その資格情報が有効である場合)。
リクエストが読み取りリクエスト (SQL SELECT
や HTTP GET
など) である場合、リソースはアプリに返す要求された情報を検索します。
リクエストが書き込みリクエスト (SQL INSERT
や HTTP POST
など) である場合、リソースはそのリクエストに含まれているペイロードを保存し、受信確認を返します。
アプリは、受信したリソースの応答を使用できますが、これはその現在のタスクに適しています。
環境設定の値の更新
アドオンは、アプリに対して設定されている環境設定の値をいつでも更新できます。これは、期限が切れたか、または改ざんされた資格情報の更新などのユースケースに役立ちます。
アドオンは、そのアドオンによって作成されていない環境設定にはアクセスできません。
アドオンダッシュボード
どの Heroku アドオンにも、顧客が Heroku Dashboard または Heroku CLI からアクセスできる独自のダッシュボードがあります。アドオンのダッシュボードには、提供されているサービスに適用可能なすべての情報および設定オプションが表示されます。
顧客がアドオンのダッシュボードにアクセスすると、Heroku はシングルサインオン (SSO) を使用して、アプリに対するその顧客の ID を確認します。これにより、関連付けられているユーザーを自動的にログインさせ、シームレスなエクスペリエンスを提供できます。
シングルサインオンのフロー
顧客が Heroku Dashboard または CLI からアドオンのダッシュボードを開くアクションを実行すると、Heroku はリソースの ID、現在時刻、アドオンのソルト (Heroku とアドオンの間で共有されている秘密鍵) を使用してシングルサインオントークンを生成します。
その後、次の形式をした POST
リクエストをアドオンに送信します。
POST https://yourcloudservice.net/sso/login
id=123&token=4af1e20905361a570×tamp=1267592469&user@example.com
それにより、アドオンはトークンが一致し、タイムスタンプが新しくなっていることを確認できます。顧客のブラウザに Cookie を設定して認証されていることを示した後、顧客を自分のアドオンダッシュボードにリダイレクトできます。
SSO を介したユーザーのログイン
Heroku SSO を使用して、ユーザーを自分のダッシュボードに自動的に転送する顧客固有の URL を作成することもできます。
SSO URL の形式は次のとおりです。
https://addons-sso.heroku.com/apps/:app_uuid/addons/:addon_uuid
addon_uuid
パラメータの値は、顧客の元のプロビジョニングリクエストで指定された UUID です。
app_uuid
パラメータの値は、Platform API のアドオンの情報リクエストを使用して取得できます。
SSO URL の例は次のようになります。
https://addons-sso.heroku.com/apps/c0e83e46-9803-46bd-86ca-e7e40a8cce8d/addons/c2aef419-7834-405b-8c28-f014d4fecde7
SSO URL には、追加情報をクエリパラメータとして含めることができます。これらのキーと値は、顧客の残りのデータと共に SSO POST 経由で送信されます。これにより、ダッシュボード内でユーザーに関連する状態またはコンテキストを設定できます。
たとえば、次の SSO URL では、カスタムクエリパラメータ issue_no
が追加されます。
https://addons-sso.heroku.com/apps/:app_uuid/addons/:addon_uuid?issue_no=42
次の記事: アドオンの構築