Data Connect のスキーマとコネクタのデプロイと管理

Firebase Data Connect サービスには、次の 3 つの主要コンポーネントがあります。

  • 独自の SQL スキーマを持つ基盤となる PostgreSQL データベース
  • Data Connect アプリケーション スキーマ.gql ファイルで宣言)
  • 複数のコネクタ.gql ファイルで宣言され、connector.yaml ファイルで構成されます)。

SQL スキーマはデータの真実のソースであり、Data Connect スキーマはコネクタがそのデータを認識する方法であり、コネクタはクライアントがそのデータにアクセスするために使用できる API を宣言します。

CLI を使用して Data Connect サービスをデプロイすると、SQL スキーマが移行され、Data Connect スキーマが更新され、各コネクタが更新されます。

重要なデプロイのコンセプト

デプロイを完全に理解するには、スキーマとコネクタに関する重要なコンセプトに注意することが重要です。

スキーマのデプロイ

Data Connect スキーマのデプロイは、Cloud SQL データベースの SQL スキーマに影響します。Data Connect は、新しいデータベースを使用している場合でも、既存のデータベースを非破壊的に適応させる必要がある場合でも、デプロイ中にスキーマを移行するのに役立ちます。

Data Connect スキーマ移行には、厳密互換性の 2 つの異なるスキーマ検証モードがあります。

  • 厳格モードの検証では、アプリケーション スキーマを更新する前に、データベース スキーマがアプリケーション スキーマと完全に一致している必要があります。Data Connect スキーマで使用されていないテーブルまたは列は、データベースから削除されます。

  • 互換モードの検証では、アプリケーション スキーマを更新する前に、データベース スキーマがアプリケーション スキーマと互換性があることが必要です。スキーマ、テーブル、列を削除する追加の変更は省略可能です。

    互換性があるとは、スキーマ移行がアプリケーション スキーマで参照されているテーブルと列にのみ影響することを意味します。アプリケーション スキーマで使用されていないデータベース内の要素は変更されません。そのため、デプロイ後、データベースに未使用のものが含まれている可能性があります。

    • スキーマ
    • テーブル

コネクタのデプロイ

Data Connect クエリとミューテーションはクライアント コードによって送信されず、サーバーで実行されます。代わりに、デプロイ時にこれらの Data Connect オペレーションは Cloud Functions などのサーバーに保存されます。つまり、デプロイによって既存のユーザーが利用できなくなる可能性があります。

Data Connect は、コネクタの更新における破壊的変更の分析を Firebase CLI に統合します。

CLI は、スキーマに対する各コネクタの変更を分析し、以前のバージョンのクライアント コードのクライアントの動作を変更する(メッセージは警告レベル)か、破損する可能性がある、または破損する(メッセージは破損レベル)コネクタの変更に関する一連の評価メッセージを発行します。

例:

  • クライアントの動作を変更する可能性があるコネクタの変更には、@retired スキーマ アノテーションのないクエリから null 許容フィールドを削除することが含まれます。
  • クライアントを破損する可能性がある、または破損するコネクタの変更には、デフォルト値のない null 可能なオペレーション変数を非 null に変更する、フィールドのデータ型を互換性のないもの(String から Int など)に変更するなどが含まれます。

警告レベルと重大な変更レベルのシナリオのより詳細なリストについては、CLI リファレンス ガイドをご覧ください。

デプロイ ワークフローに沿って操作する

Data Connect プロジェクトは、ローカル プロジェクト ディレクトリと Firebase コンソールの両方で操作できます。

推奨されるデプロイ フローは次のとおりです。

  1. firebase dataconnect:services:list を使用して、現在デプロイされているスキーマとコネクタを一覧表示します。
  2. スキーマの更新の管理。
    1. firebase dataconnect:sql:diff を使用して、Cloud SQL データベースとローカルの Data Connect スキーマの SQL スキーマの違いを確認します。
    2. 必要に応じて、dataconnect:sql:migrate を使用して SQL スキーマの移行を行います。
  3. firebase deploy を実行して、スキーマのみ、コネクタのみ、またはリソースの組み合わせのいずれかのスキーマとコネクタのデプロイを行う。

Data Connect リソースをデプロイして管理する

デプロイを実行する前に、本番環境リソースを確認することをおすすめします。

firebase dataconnect:services:list

ローカル プロジェクト ディレクトリで作業する場合、通常は firebase deploy コマンドを使用して、スキーマとコネクタを本番環境にデプロイします。このとき、インタラクティブなフィードバックが提供されます。

deploy コマンドで --only dataconnect フラグを使用すると、Data Connect デプロイをプロジェクト内の他のプロダクトから分離できます。

通常のデプロイ

firebase deploy --only dataconnect

この通常のデプロイでは、Firebase CLI がスキーマとコネクタのデプロイを試みます。

新しいスキーマが既存のコネクタを壊さないことを検証します。破壊的変更を行う場合は、ベスト プラクティスに従ってください。

また、Data Connect スキーマを更新する前に、SQL スキーマがすでに移行されていることを確認します。そうでない場合は、スキーマを移行するために必要な手順が自動的に表示されます。

--force フラグのデプロイ

firebase deploy --only dataconnect --force

コネクタまたは SQL スキーマの検証が不要な場合は、--force を指定してコマンドを再実行し、検証を無視できます。

--force デプロイでは、SQL スキーマが Data Connect スキーマと一致するかどうかが引き続き確認され、非互換性に関する警告が表示され、プロンプトが表示されます。

選択したリソースをデプロイする

より詳細な制御でデプロイするには、serviceId 引数を使用して --only フラグを使用します。特定のサービスのスキーマ変更のみをデプロイするには:

firebase deploy --only dataconnect:serviceId:schema

指定したコネクタとサービスのすべてのリソースをデプロイすることもできます。

firebase deploy --only dataconnect:serviceId:connectorId

最後に、単一のサービスのスキーマとすべてのコネクタをデプロイできます。

firebase deploy --only dataconnect:serviceId

デプロイをロールバックする

手動でロールバックするには、コードの以前のバージョンをチェックアウトしてデプロイします。元のデプロイに破壊的な変更が含まれている場合、削除されたデータを完全に復元できないことがあります。

データベース スキーマを移行する

プロトタイピングを迅速に行い、スキーマをテストし、スキーマの変更が破壊的であることを認識している場合は、Data Connect ツールを使用して変更を検証し、更新の実行方法を監督することを計画できます。

SQL スキーマの変更を比較する

変更を確認できます。

firebase dataconnect:sql:diff

サービスのカンマ区切りリストを渡すことができます。

このコマンドは、サービスのローカル スキーマと対応する Cloud SQL データベースの現在のスキーマを比較します。違いがある場合は、その違いを修正するために実行される SQL コマンドが出力されます。

変更を適用

スキーマ Cloud SQL インスタンスへの変更をデプロイする準備ができたら、firebase dataconnect:sql:migrate コマンドを発行します。変更を承認するよう求められます。

firebase dataconnect:sql:migrate [serviceId]

インタラクティブ環境では、SQL 移行ステートメントとアクション プロンプトが表示されます。

厳格モードまたは互換モードで移行する

新しいプロジェクトでは、デフォルトのスキーマ検証モードが適用されます。migrate コマンドの動作は、アプリケーション スキーマに必要なすべてのデータベース スキーマの変更を適用し、スキーマ、テーブル、列を削除してデータベース スキーマをアプリケーション スキーマと完全に一致させるオプションのオペレーションを承認するよう求めることです。

この動作は、dataconnect.yaml ファイルを変更することで調整できます。schemaValidation キーのコメントを解除し、COMPATIBLE を宣言して、移行で必要な変更のみが適用されるようにします。

schemaValidation: "COMPATIBLE"

または、STRICT に設定して、すべてのスキーマ変更が適用され、データベース スキーマがアプリケーション スキーマと強制的に一致するようにします。

schemaValidation: "STRICT"

詳細については、Data Connect CLI リファレンスをご覧ください。

コネクタの更新

firebase deploy を実行すると、CLI は該当するコネクタの更新を開始し、該当する警告レベル(クライアントの動作に影響する可能性がある)と重大レベル(おそらくまたは確実に中断する)の評価メッセージを発行します。

CLI を使用してコネクタの更新を管理する

CLI の動作は、インタラクティブ モードと非インタラクティブ モードで若干異なります。

インタラクティブ モードでは、CLI からすべてのメッセージを承認するよう求められます。--force フラグを使用すると、コネクタのデプロイをオーバーライドして強制的に実行できます。

# Prompts for acceptance for any warning-level or breaking-level changes prior
# to deploying connectors.
firebase deploy --only dataconnect
# Will deploy connectors without prompting.
firebase deploy --only dataconnect --force

非インタラクティブ モードでは、重大なレベルの評価がない限り、CLI はコネクタをデプロイします。それ以外の場合、スクリプトは重大な変更のログとともに終了します。--force フラグを設定することで、オーバーライドしてデプロイできます。

# Will deploy connectors with warning-level changes. If any breaking changes
# are present, the deploy will fail and output any breaking changes
firebase deploy --only dataconnect --non-interactive
# Will deploy the connectors from the previous step, if the same issues are present.
firebase deploy --only dataconnect --non-interactive --force

詳細については、CLI リファレンス ガイドをご覧ください。

スキーマとコネクタの管理に関するベスト プラクティス

Firebase では、Data Connect プロジェクトで従うべきいくつかのプラクティスを推奨しています。

互換性に対応しない変更を最小限に抑える

  • Firebase では、Data Connect スキーマとコネクタ ファイルをソース管理で保持することをおすすめします。
  • 可能であれば、重大な変更は避けてください。互換性を損なう変更の一般的な例を次に示します。
    • スキーマからフィールドを削除する
    • スキーマ内の null 値を許容するフィールドを null 値を許容しないフィールドにする(Int -> Int! など)
    • スキーマ内のフィールドの名前を変更する。
  • スキーマからフィールドを削除する必要がある場合は、影響を最小限に抑えるために、いくつかのデプロイに分割することを検討してください。
    • まず、コネクタ内のフィールドへの参照を削除し、変更をデプロイします。
    • 次に、新しく生成された SDK を使用するようにアプリを更新します。
    • 最後に、スキーマの .gql ファイルのフィールドを削除し、SQL スキーマを移行して、もう一度デプロイします。

新しいデータベースを操作する場合は厳格モードを使用する

新しいデータベースで Data Connect を使用し、アプリケーション スキーマを積極的に開発している場合、データベース スキーマがアプリケーション スキーマと完全に一致するようにするには、dataconnect.yamlschemaValidation: "STRICT" を指定します。

これにより、オプションの変更も適用されます。

データベースに本番環境データがある場合は互換モードを使用する

本番環境データを含むデータベースに変更を加える場合は、既存のデータが削除されないように、互換モードでスキーマ移行を実行することをおすすめします。dataconnect.yamlschemaValidation: "COMPATIBLE" を指定できます。

互換モードでは、必要なスキーマ移行の変更のみがデータベースに適用されます。

  • DROP SCHEMADROP TABLEDROP COLUMN はオプションのステートメントと見なされ、データベース スキーマにアプリケーション スキーマで定義されていないスキーマ、テーブル、列が含まれている場合でも、プラン用に生成されません。
  • データベース テーブルにアプリケーション スキーマに含まれていない NULL 以外の列が含まれている場合、NOT NULL 制約が削除されるため、定義したコネクタを使用してテーブルにデータを追加できます。

次のステップ