Heroku Connect のメンテナンス操作
最終更新日 2022年12月20日(火)
Table of Contents
この記事では、Heroku Connect のメンテナンスについて説明します。Heroku Postgres のプランを変更する方法や、そのバージョンをアップグレードする方法についても説明します。
Heroku Connect のメンテナンス
メンテナンスタスクを実行するために、Heroku で Heroku Connect をオフラインにする場合があります。一般的なタスクには、基礎となるインフラストラクチャの更新があります。このメンテナンスは Heroku によって自動的に処理されます。Heroku Postgres とは異なり、Heroku Connect のメンテナンスウィンドウのスケジュールまたは再スケジュールはできません。
通常、メンテナンスには最長で 45 分かかります。メンテナンスの間、Heroku Connect のすべてのデータ同期は使用できません。Heroku Connect の設定も実行できません。Heroku Postgres データベースの既存のデータには引き続きアクセスできます。変更は Connect によって保持され、同期はメンテナンス後に再開します。
Heroku Connect のメンテナンスの準備
メンテナンスウィンドウは、実施の約 2 週間前に status.heroku.com で告知されます。このページで Subscribe
(購読) をクリックすると通知を受け取ることができます。
メンテナンスウィンドウの間はデータの同期が遅れることを認識し、それに備える必要がありますが、それ以外に必要な準備はありません。メンテナンス操作後、Connect では通常の同期が再開します。
Heroku Postgres データベースのプランの変更
Heroku Postgres データベースのプランは、heroku addons:upgrade コマンドを使用して変更できます。HA フェイルオーバーと同じ動作であるため、Heroku Connect ではこの操作を透過的に処理できます。
お勧めはしませんが、フォロワーの切り替えの方法を代わりに使用できます。その場合は、次のセクションで説明されている追加の手順 (4 番を除く) を実行する必要があります。
Essential 層のデータベースから別の層のプランにアップグレードする場合、フォロワーは作成できません。代わりに、pg:copy
プロセスを使用して新しいデータベースにデータをコピーします。アプリケーションをメンテナンスモードにすると同時に Heroku Connect を一時停止し、アプリケーションをアクティブに戻すときに Heroku Connect を再開します。
Heroku Postgres データベースのバージョンのアップグレード
Heroku Connect は単一データベース上で継続的に動作するため、そのデータベースのバージョンをアップグレードし、同期操作を想定どおりに継続させるためには、いくつかの手順が必要です。アップグレード自体はフォロワーデータベースと pg:upgrade を使用して行われ、以下の手順は Heroku Connect をそのプロセスに適合させる方法を示しています。
以下の手順により、新しいデータベースが現在のデータベースの正確なコピーであることが保証されます。Heroku Connect によってテーブルが作成されたり、空のデータベースにデータが転送されたりすることはないため、必ず、正しいアップグレードプロセスに従ってください。
Essential 層のデータベースでバージョンをアップグレードしている場合は、代わりに pg:copy
プロセスを使用して新しいデータベースにデータをコピーします。アプリケーションをメンテナンスモードにすると同時に Heroku Connect を一時停止し、アプリケーションをアクティブに戻すときに Heroku Connect を再開します。
フォロワーデータベースを作成し、リードデータベースにほぼ追いつけるようにします。これにより、アップグレードに必要なダウンタイムが最小化されます。
アプリケーションをメンテナンスモードにするのと同じ理由で接続を一時停止して、アップグレード中に Heroku Connect がデータベースに書き込まないようにします。
フォロワーが追いつくまで待ちます。この時点で、Heroku Connect とアプリケーションの両方がデータベースへの書き込みを停止しているため、フォロワーは完全に追いつくことができます。データベースのステータスは
heroku pg:info
を使用して確認できます。pg:upgrade
を使用してフォロワーデータベースをアップグレードします。フォロワーでリーダーのフォローが解除され、Postgres バージョンのアップグレードが実行されます。ここで、フォロワーデータベースをプロモートして新しいリードデータベースにする必要があります。実行する手順は、Heroku Connect で標準データベース URL (
DATABASE_URL
) とカスタムデータベース URL (例: HEROKU_POSTGRESQL_ROSE_URL
) のどちらを使用しているかによって異なります。- 標準データベース URL を使用している場合、フォロワーをプロモートして新しいリードデータベースにします。これによって、
DATABASE_URL
でアクセスできるようになります。 - カスタムデータベース URL を使用している場合、プロモートされたフォロワーの新しいカスタムデータベース URL で Heroku Connect データベース設定を更新するか、heroku addons:attach を使用して、選択した名前にデータベースをアタッチする必要があります。
- 標準データベース URL を使用している場合、フォロワーをプロモートして新しいリードデータベースにします。これによって、
手順 2 で一時停止したときと同じプロセスを使用して Heroku Connect を再開し、アプリケーションのメンテナンスモードを終了します。Heroku Connect は、アプリケーションの新しい
DATABASE_URL
(または、カスタムデータベース URL を設定している場合はその URL) を自動的に取得し、新しいデータベースを使用して同期を再開します。
データベースロールバック後の同期の回復
Heroku Connect では、ハイウォーターマークの手法を使用します。同期されたデータベースをロールバックすると、データの不整合が発生します。データの整合性を回復するには、データベースのロールバック後にマッピングをリロードします。
同期の一時停止
データベースのアップグレードのような特定のタスクを実行するときに、Heroku Connect での同期アクティビティを一時停止することが必要になります。これを行うには、Settings
(設定) タブ、Manage Connection
(接続の管理) に移動し、Pause
(一時停止) ボタンをクリックします。
Heroku Connect は、保留中の操作があればすべて完了してから一時停止状態に移行します。接続を一時停止すると、データベースでのデータの変更はトリガーログに追加され続け、Salesforce で行われた変更はポーリングされなくなります。ストリーミングモードを使用した、マッピングに関する Salesforce からの PushTopic 通知も無視されます。
接続は IDLE
状態のときに限り一時停止できます。接続が長期間 POLLING_DB_CHANGES
ステータスのままである場合は、ログを確認してデバッグしてください。
同期を再開するには、Settings
(設定) タブ、Manage Connection
(接続の管理) に戻り、Resume
(再開) ボタンをクリックします。Heroku Connect は引き続き、中断した場所にとどまります。トリガーログのエントリが処理されて Salesforce にプッシュされ、Salesforce で行われた変更は (通常は Streaming API を使用するマッピングも含めて) ポーリングを使用して取得されます。
接続の一時停止中にデータベースまたは Salesforce のデータに行われた変更は、接続が再開すると自動的に同期されます。
接続の再作成
サンドボックス組織をリロード済みの場合や、Essential 層のデータベースから別の層のプランにアップグレードする必要がある場合、既存の接続を削除して新しい接続を作成する必要があります。
以下の設定は手動で設定します。
- 共同作業者とその通知設定
- ベータ機能
- 書き込みアルゴリズム
- Salesforce API のバージョン
上記以外の再作成は次のようにして自動化できます。
- Connect Dashboard から設定をエクスポートします。
Settings
(設定) をクリックし、Import/Export Configuration
(設定のインポート/エクスポート)、Export Configuration
(設定のエクスポート) の順にクリックします。 - 読み取り/書き込みマッピングが 1 つでもある場合、それらのテーブルに一切の新しいデータを書き込んでいないことを確認してください。また、すべてのデータが Salesforce に存在することを保証するために、すべてのマッピングが
DATA_SYNCED
状態であることを確認してください。接続でのアクティビティを停止するために、Settings
(設定)、Manage Connection
(接続の管理)、Pause
(一時停止) ボタンの順にクリックする必要があります。 - Heroku CLI から接続を破棄します。
heroku addons:destroy -a appname herokuconnect-resource-name
- https://elements.heroku.com から、またはコマンドラインで
heroku addons:create herokuconnect
を実行して新しい接続を作成します。 - 新しい接続を認証し、手順 1 でエクスポートした設定をインポートします。
Salesforce でのフィールド定義の変更
適切に調整されていない場合、フィールド定義の変更によって Heroku Connect との同期が遅れる可能性があります。
対応するフィールド定義を Salesforce で変更した後、PostgreSQL のテーブルスキーマが Heroku Connect によって自動的に変更されることはありません。これは、フィールドを変更しようとした結果、データが失われるか破損する可能性があるからです。
Salesforce でフィールドを変更した後、ユーザーが Heroku Connect でオブジェクトマッピングを編集して、Heroku Connect による PostgreSQL テーブルスキーマの更新をトリガーする必要があります。比較的単純なケースでは、ユーザーはマッピングの Edit
(編集) をクリックしてから Save
(保存) をクリックするだけで済みます。より複雑なケースでは、ユーザーはフィールドを選択解除し、マッピングを保存し、マッピングを再編集してから、フィールドを再び追加する必要があります。こうすると、Connect によって列が削除され、再度追加されて、列に再度データがロードされます。
単純なケースには、フィールドの長さの延長または短縮などがあります。複雑なケースには、フィールドのデータ型の変更などがあります。