App Engine の要件

これまで、Datastore モードの Firestore データベースの 1 つは、すでに App Engine アプリにリンクされていました。リンクされている場合、データベースには同じプロジェクト内のアクティブな App Engine アプリが必要です。アクティブな App Engine アプリがないと、データベースへの読み取りおよび書き込みアクセスは無効になります。

Datastore モードのデータベースがデフォルトで App Engine からリンク解除されるようにプロビジョニングされるようになりました。

データベースが App Engine にリンクされている場合は、データベースのリンクを解除できます。

アクティブな App Engine

アクティブな App Engine アプリとは、アプリが同じプロジェクトに存在し、このアプリが無効になっていないことを意味します。アプリの使用は必要ありません。リンク済みアプリとデータベースが同じリージョン内に存在している必要があります。

App Engine アプリを無効にすると、そのアプリにリンクされている Datastore モードのデータベースへのアクセスも無効になります。

REST API を使用すると、App Engine のリンク解除状態を確認できます。

curl  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)"

レスポンスに含まれる appEngineIntegrationMode の値を調べます。値が DISABLED の場合、データベースは App Engine アプリにリンクされていません。

Datastore モードのデータベースを App Engine アプリからリンク解除すると、アクティブな App Engine 要件を削除できます。データベースのリンクを解除すると、データベースへのアクセスに影響を与えることなく App Engine を無効にできます。

リンクを解除すると、取り消すことはできません。

データベースのリンクを解除すると、[Datastore 管理] ページの [書き込みを無効にする] 機能を使用できません。書き込みが現在無効になっている場合、データベースのリンクを解除すると書き込みが有効になります。

データベースと App Engine のリンクを解除する前に、Firestore API を有効にして IAM 権限を更新してください。

データベースのリンクを解除するには、[Datastore 管理] ページに移動し、[アプリからデータベースへのリンク] をクリックします。リンク解除操作が有効になるまでに最長で 5 分かかることがあります。

Datastore 管理に移動

Terraform App Engine リソースの移行

以前に google_app_engine_application Terraform リソースを使用して Datastore モードのデータベースを管理している場合は、代わりに google_firestore_database Terraform リソースを使用できます。

Terraform を介して Datastore モードのデータベースを管理する一般的な手順については、データベース作成の自動化をご覧ください。

google_firestore_database リソースを作成する

Terraform 構成ファイルで、新しい google_firestore_database リソースを作成します。

datastore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"
  
  type = "DATASTORE_MODE"
  
  app_engine_integration_mode = "DISABLED"

  // Optional, but recommended for safety
  delete_protection_state = "DELETE_PROTECTION_ENABLED"
}

使用可能なロケーションのリストについては、Datastore のロケーションをご覧ください。既存のデータベースのロケーションに対応するロケーションを選択します。

既存の Datastore モード データベースをインポートする

まず、Firestore API が有効になっていることを確認します。

次に、既存の Datastore モードのデータベースを Terraform の状態にインポートします。

terraform import google_firestore_database.database "(default)"

続いて、次のコマンドを実行します。

terraform plan

出力を調べて、インポートが正常に完了したことを確認します。出力にフィールドの変更が示されている場合は、これらの変更が意図したとおりであることを確認してください。出力には次のような行が含まれます。

google_firestore_database.database must be replaced

次に、Terraform 構成ファイルを調べて、特に projectlocationname フィールドなどに誤りがないかを確認し、terraform plan を再度実行します。Terraform でデータベースを置き換える必要があるフィールドは、プランの出力で # forces replacement とマークされます。

Terraform プランの出力に問題がなければ、次のコマンドを実行します。

terraform apply

google_app_engine_application リソースの削除

Terraform 構成ファイルに既存の google_app_engine_application リソースがある場合は、ここでそのファイルから削除します。

その後、次のコマンドを再度実行します。

terraform plan

出力は次のようになります。

Terraform will perform the following actions:

  # google_app_engine_application.app will be destroyed
  # (because google_app_engine_application.app is not in configuration)

プランの出力に満足したら、次の内容を実行します。

terraform apply

現在、Terraform では App Engine リソースの削除はサポートされていません。Terraform ではリソースが破棄済みとして表示されますが、実際に App Engine アプリケーションが削除されることはありません。ただし、App Engine アプリケーションは Terraform によって管理されなくなります。

Firestore API の要件

これまで、Datastore モードの Firestore データベースの 1 つは、すでに App Engine アプリにリンクされていました。Datastore モードのデータベースはデフォルトで App Engine からリンク解除されるようになりました。また、全てのデータベース、既存のデータベースと新しく作成したデータベースの両方に次の要件があります。

  • Google Cloud コンソールと gcloud CLI からデータベースを管理するには、プロジェクトで Firestore API を有効にする必要があります。これは、ネイティブ モードの Firestore データベースと Datastore モードの Firestore データベースの両方で必要です。
  • Google Cloud コンソールまたは gcloud CLI から実行する場合、以下の管理オペレーションには次の IAM 権限が必要です。

    • データベースの作成: datastore.databases.create
    • データベース メタデータの表示: datastore.databases.getMetadata
    • データベース メタデータの編集: datastore.databases.update

Firestore API を有効にしていない場合は、Google Cloud コンソールの Datastore ページに次のような通知を含めてエラーが表示されます。

データベースの管理には Firestore API が必要です。

このエラーには、Firestore API を有効にするボタンも含まれています。ボタンをクリックして API を有効にします。

また、IAM 権限を確認し、データベースへのアクセスに影響がないことを確認する必要があります。

Google Cloud コンソールからデータベースにアクセスするアカウントに上記の必要な権限が付与されていることを確認します。

必要な権限が含まれているのは、Datastore ユーザーや Datastore 閲覧者などの事前定義ロールです。カスタム IAM ロールを作成した場合は、上述の権限を含むように更新する必要がある場合があります。

以前に Datastore 用のカスタムロールを定義している場合は、datastore.databases.getMetadata 権限がない可能性があります。datastore.databases.getMetadata でカスタムロールを更新するか、事前定義ロールを使用して、継続的なアクセスを確保してください。

Terraform を使用した API の有効化

必要に応じて、Terraform を使用して Firestore API を有効にすることもできます。

resource "google_project_service" "firestore" {
  project = "project"
  service = "firestore.googleapis.com"
}

google_firestore_database リソースがある場合は、Terraform がデータベースの作成を試行する前に API が有効になるように、google_project_service リソースへの依存関係を追加できます。

resource "google_firestore_database" "database" {
  // ...
  depends_on = [google_project_service.firestore]
}