Heroku External Objects
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年03月30日(木)
Heroku External Objects は、Heroku Connect の一部として使用可能です。Heroku External Objects には、Heroku Connect で使用するように構成されている Heroku Postgres データベースの oData ラッパーが用意されています。この機能を使用すると、ラッパーによって生成される RESTful エンドポイントを使用して、ほかの Web サービスで、指定された Heroku Postgres データベース内からデータを取得することができます。
Salesforce Connect と合わせて使用すると、Heroku Postgres データベースのデータを Salesforce のデプロイで提示することが許可され、データの表示 (Apex および Visualforce のページ内からを含む)、検索、ほかのオブジェクトとの関連付けができます。データは参照によってのみ使用可能なため、標準レポートでは使用できません。
サービス認証
External Objects のサービスエンドポイントは基本認証によって保護されます。サービスを有効にすると、External Objects の設定ページから資格情報の表示、リセット、取り消しを実行できます。
資格情報をリセットしてから 10 分間は、新しい資格情報も古い資格情報も受け入れられます。Salesforce 組織など、資格情報を使用するサービスでは、ダウンタイムが発生しないよう、この期間中に資格情報を更新してください。
リソース設定
External Objects サービスが接続に対してアクティブなとき、利用可能なテーブルとビューの一覧が External Objects の設定ページに表示されます。同期サービスの一環として Heroku Connect によってアクティブに管理されていないスキーマを含め、関連付けられた接続のデータベース内のすべてのスキーマを横断してテーブルとビューが利用可能になります。これらのテーブルまたはビューはどれも、対応するチェックボックスを設定ページで選択することによって、External Objects サービスのリソースとして有効化または無効化できます。
External Objects リソースとして有効になるには、テーブルにプライマリキー列が含まれている必要があります。ビューには id
という名前の列が必要です。
速度制限
External Objects には、shield
、enterprise
、または danketsu
有料 Connect プランの場合、1 時間あたり 20,000 リクエストの速度制限が適用されます。速度制限の引き上げも可能ですが、申し込みが必要です。demo
プランの場合、制限は 1 時間あたり 1,000 リクエストです。
Heroku Connect の複数のインスタンスがある場合、Connect インスタンスごとに独自かつ個別の External Objects 速度制限があります。
この制限に達した後にサービスへのアクセスを試みると、結果は 429 Too Many Requests
エラーになります。応答メッセージには、次に API リクエストが実行可能になると予想される時期についての情報も含まれています。速度制限スロットルは毎時 0 分にリセットされます。
{"message":"Request was throttled. Expected available in 1000.0 seconds."}
ログ記録
資格情報のリセットや失効、データベースオブジェクトの包含や除外など、管理上の変更を設定に加えると、Heroku Connect の監査メッセージの一部としてログに記録されます。
Heroku External Objects は、そのリクエストと速度制限アクティビティのログを生成し、このログにはログドレインからアクセスできます (「Heroku Connect Application Logging)」(Heroku Connect アプリケーションログ記録) も参照してください)。次のような 1 つのメッセージが生成され、使用された速度制限とサービスの合計速度制限を確認できます。
2020-02-12T19:13:07+00:00 app[herokuexternalobjects]: addon_id=82b1c244-592d-4165-99e7-89a270459752 object_type=sync object_id=55cae68a-0628-4497-bbcd-b32cf3b7c5cf state=IDLE request_id=3d4917bc-d255-2c69-4e3d-fa4f8a2a733f method=GET path=/odata/v4/fefbdf7b43794182af6cb7c1fc04fbf9/schema$lead at=ratelimit ip=127.0.0.1 ratelimit_used=38 ratelimit=22000 user_agent=python-requests/2.11.1 level=info
応答のログメッセージも Heroku External Objects によって生成され、呼び出し元に提供されます。
2020-02-12T19:13:07+00:00 app[herokuexternalobjects]: addon_id=82b1c244-592d-4165-99e7-89a270459752 object_type=sync object_id=55cae68a-0628-4497-bbcd-b32cf3b7c5cf state=IDLE request_id=3d4917bc-d255-2c69-4e3d-fa4f8a2a733f method=GET path=/odata/v4/fefbdf7b43794182af6cb7c1fc04fbf9/schema$lead at=response ip=127.0.0.1 service=82.94556713104248ms status=200 user_agent=python-requests/2.11.1 level=info
これらのログは request_id
によって関連付けることができます。
サポートされているデータ型
Heroku External Objects では、以下の PostgreSQL データ型をサポートしています。
bigint
boolean
bytea
character
/character varying
date
double precision
integer
numeric
real
smallint
text
time
(後の注記を参照してください)timestamp
uuid
サポートされていないデータ型を持つテーブルまたはビューを有効にした場合、サポートされていないフィールドは結果に含まれません。
Salesforce Connect では、PostgreSQL の time
データ型に対応する TimeOfDay
OData 型はサポートされていません。Heroku External Objects で time
フィールドを公開することはできますが、Salesforce Connect を使用して外部オブジェクト定義を作成するとき、それらのフィールドは無視されます。
制限
プライマリキーに対して生成される ID のデフォルト値
PostgreSQL では、GENERATED BY DEFAULT AS IDENTITY
または GENERATED ALWAYS AS IDENTITY
でプライマリキー列を作成することにより、SERIAL
または BIGSERIAL
の使用に代わる方法に対するサポートが追加されました。これらのデフォルト値は Heroku External Objects ではサポートされていないため、新しいレコードの作成は失敗します。取得、更新、削除は機能します。
大文字と小文字を区別しない検索
External Objects 内のデータを Salesforce で検索するとき、大文字と小文字は区別されます。大文字と小文字を区別しない検索は、Heroku External Objects でサポートされていません。
Batch Apex
Salesforce で Batch Apex を使用して Heroku External Objects をクエリする操作は、サポートされていません。
外部変更データの捕捉
Heroku External Objects では、Salesforce Connect の外部変更データ捕捉機能はサポートされていません。
フリーテキスト検索式
Heroku External Objects では、Salesforce Connect からのフリーテキスト検索式検索クエリはサポートされていません。
Global Search
Salesforce の Global Search を使用すると、クエリの結果が External Results
(外部結果) の下に表示されます。
クエリの時間制限
Heroku External Objects によって生成されたクエリは 20 秒以内に完了しなければならず、完了しない場合、Heroku External Objects は 530 応答を Salesforce Connect に返します。
リクエストの圧縮
Salesforce で外部データソースに対して Compress Requests (リクエストの圧縮) オプションを有効にすることはサポートされていません。
推定の odata.count 値
Postgres テーブル内の行のカウントは遅く、データベースにとって厳しい場合があります。その結果、クエリへのページ分割された結果を返す場合、Heroku External Objects は、まだ結果が残っていることを示すために 1 つ多いレコード数を返します。
列のないテーブルの未サポート
PostgreSQL では列のないテーブルをユーザーが作成できますが、これは SQL 仕様に準拠しておらず、Heroku External Objects のコンテキストでは意味的にあいまいです。したがって、Heroku External Objects では列のないテーブルはサポートされておらず、表示もされません。
複合プライマリキーの未サポート
Heroku External Objects では、複合プライマリキーはサポートされません。複合プライマリキーの代わりに、2 つ以上のソース列が連結された値を格納する列を作成し、これをプライマリキーとして設定してください。
パーティション分割されたテーブルの未サポート
Heroku External Objects では、パーティション分割されたテーブルはサポートされません。場合によっては、Heroku External Objects で、親テーブル全体のビューを作成して、有効にするビューを選択することでこの制限を回避できます。