リソース管理を自動化する

以下のプロセスで、Firestore データベースの作成を自動化できます。

  1. 新しい Google Cloud プロジェクトを作成します。Firestore データベースは、プロジェクトごとに 1 つに制限されています。
  2. App Engine アプリケーションを作成します。Firestore は App Engine に依存します。Firestore を使用するには、App Engine を有効にする必要があります。
  3. 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 ロールにより、この権限を付与します。

このロールを付与するには、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

新しいプロジェクトとデータベースを作成する

  1. 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"
    }
          

    以下を置き換えます。

    成功すると、リクエストはオペレーション名を返します。

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. 前の手順のオペレーション名と 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,
          
  3. 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"
      }
    }
            
  4. 前の手順のオペレーション名と、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 スクリプトでデータベースの作成を自動化できます。スクリプトで、次の手順を行います。

  1. gcloud projects create を使用して新しいプロジェクトを作成します。

    gcloud projects create project-id
  2. 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 データベースを作成します。
  3. gcloud services enable を使用して App Engine Admin API を有効にします。

    gcloud services enable appengine.googleapis.com --project=project-id
  4. 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_typeCLOUD_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 は一意である必要があります。