SQL Connect プロジェクトは、次の 2 つの主要なインフラストラクチャ要素で構成されています。
- 1 つ以上の SQL Connect サービス インスタンス
- 1 つ以上の PostgreSQL インスタンスの Cloud SQL
このガイドでは、SQL Connect サービス インスタンスを設定して管理する方法について説明し、関連する Cloud SQL インスタンスを管理する方法を紹介します。
Firebase SQL Connect のリージョンを構成する
SQL Connect を使用するプロジェクトには、ロケーションの設定が必要です。
新しい SQL Connect サービス インスタンスを作成するときに、サービスのロケーションを選択するよう求められます。
利用できるロケーション
SQL Connect サービスは、次のリージョンで作成できます。
- asia-east1
- asia-east2
- asia-northeast1
- asia-northeast2
- asia-northeast3
- asia-south1
- asia-southeast1(Spark プランのトライアルでは利用できません)
- asia-southeast2(Spark プランのトライアルでは利用できません)
- australia-southeast1
- australia-southeast2
- europe-central2
- europe-north1
- europe-southwest1
- europe-west1
- europe-west2
- europe-west3
- europe-west4
- europe-west6
- europe-west8
- europe-west9
- me-west1
- northamerica-northeast1
- northamerica-northeast2
- southamerica-east1
- southamerica-west1
- us-central1
- us-east1
- us-east4
- us-south1
- us-west1
- us-west2
- us-west3
- us-west4
SQL Connect サービス インスタンスを管理する
サービスの創出
新しいサービスを作成するには、Firebase コンソールを使用するか、Firebase CLI を使用してローカル プロジェクトの初期化を実行します。これらのワークフローは、新しい SQL Connect サービスを作成します。
これらのフローでは、次の手順も説明します。
- 新しい Cloud SQL インスタンスのプロビジョニング(無料枠)
- 既存の Cloud SQL インスタンスを SQL Connect(Blaze プラン)にリンクする
ユーザーを管理
SQL Connect には、最小権限の原則(必要な機能をサポートするために必要な最小限の権限を各ユーザーまたはサービス アカウントに付与する)とロールベース アクセス制御(RBAC)の概念(データベース権限を管理するための事前定義されたロールを使用して、セキュリティ管理を簡素化する)に従ってユーザー アクセスを管理するツールが用意されています。
プロジェクト メンバーをプロジェクト内の SQL Connect インスタンスを変更できるユーザーとして追加するには、Firebase コンソールを使用して適切な事前定義ユーザーロールを選択します。
これらのロールは、Identity and Access Management(IAM)を使用して権限を付与します。ロールは権限のコレクションです。ロールをプロジェクト メンバーに割り当てると、そのロールに含まれるすべての権限がそのプロジェクト メンバーに付与されます。詳細については、以下をご覧ください。
特定のワークフローを有効にするロールを選択する
IAM ロールを使用すると、Firebase CLI ワークフローで SQL Connect プロジェクトを管理できます。
| CLI コマンド、その他のワークフロー | 必要なロール |
|---|---|
firebase init dataconnect
|
|
firebase deploy -–only dataconnect
|
|
firebase dataconnect:sql:diff
|
|
firebase dataconnect:sql:migrate
|
|
firebase dataconnect:sql:grant
|
|
SQL Connect サービスのパフォーマンスをモニタリングする
サービスのパフォーマンスを理解する
SQL Connect サービスと PostgreSQL 用 Cloud SQL サービスの両方のパフォーマンスが、ユーザー エクスペリエンスに影響する可能性があります。
- PostgreSQL サービスの Cloud SQL については、割り当てと上限に関するドキュメントの一般的なガイダンスをご覧ください。
SQL Connect サービスには GraphQL リクエストの割り当てがあり、クエリの呼び出しと実行のレートに影響します。
- 1 プロジェクト、1 リージョンあたり 1 分あたり 24,000 件の GraphQL リクエストの割り当て
これらの割り当て上限に達した場合は、Firebase サポートにお問い合わせのうえ、関連する割り当てを調整してください。
サービスのパフォーマンス、使用状況、請求をモニタリングする
Firebase コンソールで、リクエスト、エラー、オペレーション率をグローバルとオペレーションごとにモニタリングできます。
Cloud SQL インスタンスを管理する
無料トライアルの制限事項
次の Cloud SQL for PostgreSQL 機能は、Spark または Blaze の無料トライアルではサポートされていません。
- db-f1-micro と異なるマシンティア
- リージョン、ストレージ、メモリ、CPU など、インスタンスのリソースを変更する
- PostgreSQL バージョン(15.x 以外)
- リードレプリカ
- プライベート インスタンスの IP アドレス
- 高可用性(マルチゾーン)。シングルゾーン インスタンスのみがサポートされます
- Enterprise Plus エディション
- 自動バックアップ
- ストレージの自動増量。
一時的なオンボーディング データベースの制限事項
Firebase プロジェクトに SQL Connect を追加すると、データは一時データベースに保存されるため、データモデルのプロトタイピングとデータの読み込みをすぐに開始できます。PostgreSQL インスタンスの永続的な Cloud SQL のプロビジョニングには 5 ~ 20 分かかります。読み込んだ初期データは、プロビジョニングされると、永続的な PostgreSQL データベースに自動的に移行されます。
この一時データベースは、スキーマと CRUD オペレーションを調べるのに最適です。
一時データベースを使用しない場合は、Cloud SQL インスタンスがプロビジョニングされるまで待ちます。
一時データベースは PostgreSQL データベースではなく、すべての PostgreSQL 機能を提供するわけではありません。
主な制限事項は次のとおりです。
- データベースのサイズは 1 MB 未満である必要があります
- テーブルあたりの行数は 1,000 未満にする必要があります
- 1 秒あたり 1 件未満のクエリ
- 全文検索はサポートされていません
- ベクトル エンベディングの生成はサポートされていません
@view、@col(dataType)、ネイティブ SQL などの SQL 機能はサポートされていません。
Cloud SQL インスタンスを管理する
通常、Cloud SQL インスタンスは Google Cloud コンソールを使用して管理し、次のワークフローを実行します。
Cloud SQL インスタンスを停止して再起動する
Cloud SQL データベース(インスタンス内)の作成と削除
フラグを使用して PostgreSQL データベース インスタンスを起動し、さまざまな拡張機能を使用する
Google Cloud コンソールの Cloud SQL オブザーバビリティ機能を使用してパフォーマンスをモニタリングする
IAM、シークレット マネージャー、データ暗号化、認証プロキシなどの機能を使用して、Cloud SQL のアクセスとセキュリティを管理する
Cloud SQL ユーザーの追加、削除、管理。
これらのワークフローについては、PostgreSQL の Cloud SQL のドキュメントをご覧ください。
PostgreSQL ユーザーロールを付与する
SQL Connect には、最小権限の原則(必要な機能をサポートするために必要な最小限の権限を各ユーザーまたはサービス アカウントに付与する)とロールベース アクセス制御(RBAC)の概念(データベース権限を管理するための事前定義されたロールを使用して、セキュリティ管理を簡素化する)に従ってユーザー アクセスを管理するツールが用意されています。
場合によっては、Cloud Run、Cloud Functions、GKE などを介して、選択した SQL クライアントを使用して SQL Connect マネージド Cloud SQL データベースに直接接続することが必要になることがあります。
このような接続を有効にするには、次の方法で SQL 権限を付与する必要があります。
- Google Cloud コンソールから、または gcloud CLI を使用して、インスタンスに接続する必要があるユーザー アカウントまたはサービス アカウントに
roles/cloudsql.clientIAM ロールを割り当てる - Firebase CLI を使用して必要な PostgreSQL ロールを付与する
Cloud SQL IAM ロールを割り当てる
PostgreSQL 用 Cloud SQL を使用して IAM ロール roles/cloudsql.client を割り当てる方法については、ロールと権限をご覧ください。
PostgreSQL ロールを付与する
Firebase CLI を使用すると、firebase dataconnect:sql:grant コマンドで、プロジェクトに関連付けられたユーザーまたはサービス アカウントに事前定義された PostgreSQL ロールを付与できます。
たとえば、書き込みロールを付与するには、Firebase CLI を使用して次のコマンドを実行します。
firebase dataconnect:sql:grant --role writer詳細については、Firebase CLI リファレンス ガイドをご覧ください。
既存の Cloud SQL for PostgreSQL データベースを統合する
デフォルトのデータベース プロビジョニングと管理フローでは、プロジェクトで新しい(グリーンフィールド)データベースが使用されていることを前提としています。firebase deploy を呼び出すと、SQL Connect は実行されるデータベース スキーマの変更を表示し、承認後に移行を実行します。
既存の(ブラウンフィールド)データベースの場合、スキーマを管理するための独自のワークフローがあり、移行に SQL Connect ツールを使用できないが、モバイルとウェブ用の SDK 生成、クエリベースの認可、クライアント接続管理などの利点を活用するために、SQL Connect プロジェクトでデータベースを使用したい場合があります。
このセクションでは、後者のケース(既存のデータベースと SQL Connect の統合)について説明します。
既存のデータベースを SQL Connect プロジェクトに統合する
既存のデータベースを統合するワークフローには、通常、次の手順が含まれます。
Firebase コンソールで SQL Connect プロジェクトの設定中に、インスタンスとデータベースを選択します。
Firebase CLI を使用して
firebase dataconnect:sql:setupコマンドを実行し、SQL Connect が SQL 移行を処理するオプションを拒否します。カスタム ツール以外の方法でデータベース スキーマが変更されないように、
setupコマンドは適切な閲覧者ロールと書き込み者ロールを割り当てますが、ownerロールは割り当てません。setupコマンドと PostgreSQL ロールの詳細については、Firebase CLI リファレンス ガイドをご覧ください。データベース スキーマと一致する SQL Connect GraphQL スキーマを記述します。
GraphQL スキーマが PostgreSQL スキーマと互換性がある場合にのみ、GraphQL スキーマ、クエリ、ミューテーションをデプロイできます。
両方のスキーマの調整を簡素化するために、データベースの移行に必要な SQL ステートメントを提供する
firebase dataconnect:sql:diffコマンドが用意されています。これを使用して、既存のデータベース スキーマに合わせて GraphQL スキーマを繰り返し調整できます。今後は、ローカル開発環境で GraphQL スキーマ、クエリ、ミューテーションをすばやく反復処理できます。次に、満足のいく結果が得られたら、
firebase dataconnect:sql:diffを使用して、カスタム ツールとフローを使用して PostgreSQL に適用できる SQL 移行ステートメントを取得します。または、PostgreSQL データベースを直接変更してから、GraphQL スキーマに移植することもできます。スキーマの変更がサポートされていない場合があるため、GraphQL ファーストのアプローチをおすすめします。また、PostgreSQL スキーマがデプロイされたコネクタのクエリやミューテーションと互換性のない変更をデプロイすると、これらのコネクタが動作しなくなるか、誤動作する可能性があります。