リソース管理を自動化する
以下のプロセスで、Firestore データベースの作成を自動化できます。
- 新しい Google Cloud プロジェクトを作成します。Firestore データベースは、プロジェクトごとに 1 つに制限されています。
- App Engine アプリケーションを作成します。Firestore は App Engine に依存します。Firestore を使用するには、App Engine を有効にする必要があります。
- Firestore データベースを作成します。
このページでは、REST API、gcloud コマンドライン ツール、Terraform を使用してこのプロセスを完了する方法について説明します。
REST API を使用してデータベースを作成する
Firestore データベースをプロビジョニングするには、Resource Manager API と App Engine Admin API を使用します。
認証と承認
Resource Manager API と App Engine Admin API にアクセスするには、アクセス トークンを使用してリクエストを認証する必要があります。アクセス トークンには、次の OAuth 2.0 スコープが必要です。
https://www.googleapis.com/auth/cloud-platform
アプリケーションの認証を設定するには、サーバー間での本番環境アプリケーションの認証の設定をご覧ください。
アプリケーションの開発とテストの際に、次のコマンドを使用してアクセス トークンを取得できます。
gcloud auth application-default print-access-token
承認
新しいプロジェクトを作成するには、認証済みのユーザー アカウントまたはサービス アカウントに resourcemanager.projects.create
権限が必要です。たとえば、プロジェクト作成者 IAM ロールにより、この権限を付与します。
このロールを付与するには、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
新しいプロジェクトとデータベースを作成する
- projects.create メソッドを使用して、プロジェクト作成オペレーションを開始します。リクエストの本文で
Project
リソースを定義します。次に例を示します。HTTP
POST https://cloudresourcemanager.googleapis.com/v1/projects HTTP/1.1 Authorization: Bearer access-token Accept: application/json Content-Type: application/json { "projectId": "project-id" }
以下を置き換えます。
access-token
は認証済みアクセス トークンです。project-id
は一意のプロジェクト ID です。
成功すると、リクエストはオペレーション名を返します。
200: { "name": "operations/cp.6311184959990822268" }
-
前の手順のオペレーション名と Resource Manager の operations.get メソッドを使用して、プロジェクトの作成を確定します。
HTTP
GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
プロジェクトの作成が成功すると、レスポンスに次のフィールドが含まれます。
"done": true,
-
App Engine Admin API の apps.create メソッドを使用して、App Engine アプリケーションと Firestore データベースを作成します。リクエストの本文で、 Application リソースを定義し、
databaseType
フィールドを含めます。次に例を示します。HTTP
POST https://appengine.googleapis.com/v1/apps HTTP/1.1 Authorization: Bearer access_token Accept: application/json Content-Type: application/json { "databaseType": "CLOUD_FIRESTORE", "id": "project-id", "locationId": "location" }
次のように置き換えます。
- project-id は、作成したプロジェクトの ID です。
- location は、App Engine アプリケーションと Firestore データベースの両方のロケーションを設定します。設定したロケーションは変更できません。サポートされているロケーションの完全な一覧については、App Engine のロケーションをご覧ください。
App Engine と Firestore は同じロケーションをサポートしていますが、次の App Engine リージョンは Firestore マルチリージョンにマッピングされます。
us-central
(アイオワ)は、nam5
(米国)マルチリージョンに Firestore データベースを作成します。europe-west
(ベルギー)は、eur3
(ヨーロッパ)マルチリージョンに Firestore データベースを作成します。
リクエストによりオペレーション名が返されます。
200: { "name": "apps/project-id/operations/8612e502-4aeb-4f12-9e41-bbac0a0b819c", "metadata": { "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1", "method": "google.appengine.v1.Applications.CreateApplication", "insertTime": "2020-06-05T23:34:32.587Z", "user": "username", "target": "apps/project-id" } }
-
前の手順のオペレーション名と、apps.operations.get を使用して、データベースの作成を確定します。
HTTP
GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
オペレーションが成功すると、レスポンスに次のフィールドが含まれます。
"done": true,
請求先アカウントと Firebase サービスを追加する
プログラムによって請求先アカウントをプロジェクトに関連付けるには、projects.updateBillingInfo メソッドを使用します。
プログラムによってプロジェクト向けに Firebase サービスを有効にするには、Management REST API を使用して Firebase プロジェクトを設定、管理するをご覧ください。
gcloud を使用してデータベースを作成する
gcloud コマンドライン ツールを使用すると、Bash または PowerShell スクリプトでデータベースの作成を自動化できます。スクリプトで、次の手順を行います。
gcloud projects create
を使用して新しいプロジェクトを作成します。gcloud projects create project-id
gcloud app create
を使用して App Engine を有効にします。gcloud app create --region=region --project=project-id
ここで、region は App Engine アプリケーションと Firestore データベースの両方のロケーションです。設定したロケーションは変更できません。サポートされているロケーションの完全な一覧については、App Engine のロケーションをご覧ください。
App Engine と Firestore は同じロケーションをサポートしていますが、次の App Engine リージョンは Firestore マルチリージョンにマッピングされます。
us-central
(アイオワ)は、nam5
(米国)マルチリージョンに Firestore データベースを作成します。europe-west
(ベルギー)は、eur3
(ヨーロッパ)マルチリージョンに Firestore データベースを作成します。
gcloud services enable
を使用して App Engine Admin API を有効にします。gcloud services enable appengine.googleapis.com --project=project-id
gcloud alpha firestore databases create
またはgcloud alpha datastore databases create
を使用して Firestore データベースを作成します。gcloud alpha firestore databases create --project=project-id --region=region
Datastore モードの Firestore データベースを作成するには、次のコマンドを使用します。
gcloud alpha datastore databases create --project=project-id --region=region
region には、App Engine の有効化に使用したのと同じ値を使用する必要があります。
Terraform を使用してデータベースを作成する
Terraform を使用して Firestore データベースをプロビジョニングするには、google_firestore_database
リソースを使用します。
たとえば、次の Terraform 構成ファイルは新しいプロジェクトを作成し、Firestore データベースをプロビジョニングします。
firestore.tf
provider "google" { credentials = file("credentials-file") } resource "google_project" "my_project" { name = "My Project" project_id = "project-id" } resource "google_project_service" "firestore" { project = google_project.my_project.project_id service = "firestore.googleapis.com" } resource "google_firestore_database" "database" { project = google_project.my_project.project_id name = "(default)" location_id = "location" type = "FIRESTORE_NATIVE" depends_on = [google_project_service.firestore] }
以下を置き換えます。
- credentials-file はサービス アカウント キー ファイルのパスです。
- project-id はプロジェクト ID です。プロジェクト ID は一意である必要があります。
- location は、Firestore の両方のデータベースのロケーションです。一度設定したロケーションは変更できません。サポートされているロケーションの一覧については、Firestore のロケーションをご覧ください。
App Engine を使用する場合は、代わりに google_app_engine_application
リソースを使用します。database_type
を CLOUD_FIRESTORE
または CLOUD_DATASTORE_COMPATIBILITY
に設定します。
provider "google" { credentials = file("credentials-file") } resource "google_project" "my_project" { name = "My Project" project_id = "project-id" } resource "google_app_engine_application" "app" { project = google_project.my_project.project_id location_id = "location" database_type = "CLOUD_FIRESTORE" }
us-central
(アイオワ)は、nam5
(米国)マルチリージョンに Firestore データベースを作成します。europe-west
(ベルギー)は、eur3
(ヨーロッパ)マルチリージョンに Firestore データベースを作成します。
さらに、Firestore は App Engine が利用できない一部のリージョンでも利用できます。
データベースのインデックスを作成する
Firestore データベースは、単一フィールド インデックスまたは複合インデックスを含めることができます。Terraform 構成ファイルを編集して、データベースのインデックスを作成できます。
単一フィールド インデックス
次の Terraform 構成ファイルの例では、chatrooms
コレクションの name
フィールドに単一フィールド インデックスを作成します。
firestore.tf
resource "random_id" "variable"{ byte_length = 8 } resource "google_firestore_field" "single-index" { project = "project-id" database = "(default)" collection = "chatrooms_${random_id.variable.hex}" field = "name" index_config { indexes { order = "ASCENDING" query_scope = "COLLECTION_GROUP" } indexes { array_config = "CONTAINS" } } ttl_config {} }
- project-id を実際のプロジェクト ID に置き換えます。プロジェクト ID は一意である必要があります。
複合インデックス
次の Terraform 構成ファイルの例では、chatrooms
コレクションの name
フィールドと description
フィールドの組み合わせに複合インデックスを作成します。
firestore.tf
resource "google_firestore_index" "composite-index" { project = "project-id" collection = "chatrooms" fields { field_path = "name" order = "ASCENDING" } fields { field_path = "description" order = "DESCENDING" } }
- project-id を実際のプロジェクト ID に置き換えます。プロジェクト ID は一意である必要があります。