このページでは、Datastore モードの Firestore データのエクスポートをスケジュールする方法について説明します。スケジュールに基づいてエクスポートを実行するには、Cloud Run 関数と Cloud Scheduler を使用することをおすすめします。エクスポートを開始する Cloud Functions の関数を作成し、Cloud Scheduler を使用して関数を実行します。
始める前に
データ エクスポートをスケジュールする前に、次のタスクを完了する必要があります。
- Google Cloud プロジェクトに対する課金を有効にします。エクスポート機能とインポート機能を使用できるのは、課金が有効になっている Google Cloud プロジェクトのみです。
- お使いの Datastore モードのデータベース ロケーションの近くにあるロケーションに、Cloud Storage バケットを作成します。エクスポート オペレーションには、エクスポート先の Cloud Storage バケットが必要です。エクスポート オペレーションには、リクエスト元による支払いバケットは使用できません。
Cloud Functions の関数と Cloud Scheduler ジョブを作成する
以下の手順に従って、データ エクスポートを開始する Cloud Functions の関数と、それを呼び出す Cloud Scheduler ジョブを作成します。
Cloud Functions の関数 datastore_export
を作成する
-
Google Cloud コンソールの [Cloud Functions] ページに移動します。
- [関数を作成] をクリックします。
- 関数名を入力します(例:
datastoreExport
)。 - [トリガー] で [Cloud Pub/Sub] を選択します。Cloud Scheduler では pub/sub トピックを使用して関数を呼び出します。
- [トピック] フィールドで [トピックの作成] を選択します。Pub/Sub トピックの名前を入力します(例:
startDatastoreExport
)。トピック名をメモしておいてください。Cloud Scheduler ジョブを作成するには、この情報が必要です。 - [ソースコード] で [インライン エディタ] をオンにします。
- [ランタイム] プルダウンで [Python 3.7] を選択します。
main.py
に次のコードを入力します。requirements.txt
に次の依存関係を追加します。- [エントリ ポイント] に、
datastore_export
(main.py
内の関数の名前)を入力します。 - [デプロイ] をクリックして Cloud Functions の関数をデプロイします。
アクセス権限を構成する
次は、Cloud Functions の関数に、エクスポート オペレーションを開始する権限と Cloud Storage バケットに書き込む権限を付与します。
この Cloud Functions の関数は、プロジェクトのデフォルト サービス アカウントを使用して、エクスポート オペレーションを認証および承認します。プロジェクトを作成すると、次の名前のデフォルト サービス アカウントが作成されます。
project_id@appspot.gserviceaccount.com
このサービス アカウントには、エクスポート オペレーションを開始する権限と、Cloud Storage バケットに書き込む権限が必要です。これらの権限を付与するには、次の IAM ロールをデフォルトのサービス アカウントに割り当てます。
Cloud Datastore Import Export Admin
- バケットに対する
Storage Object User
ロール
Google Cloud CLI を使用して、これらのロールを割り当てることができます。このツールには、Google Cloud コンソールの Cloud Shell からアクセスできます。
Cloud Shell を起動
-
Cloud Datastore インポート / エクスポート管理者のロールを割り当てます。project_id を実際のプロジェクト ID で置き換えて、次のコマンドを実行します。
gcloud projects add-iam-policy-binding project_id \ --member serviceAccount:project_id@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
バケットに対する Storage オブジェクト ユーザーロールを割り当てます。bucket_name と project_id を実際のプロジェクト ID、バケット名で置き換えて、次のコマンドを実行します。
gcloud storage buckets add-iam-policy-binding gs://bucket_name \ --member=serviceAccount:project_id@appspot.gserviceaccount.com \ --role=roles/storage.objectUser
Cloud Scheduler ジョブを作成する
次に、Cloud Functions の関数 datastore_export
を呼び出す Cloud Scheduler ジョブを作成します。
Google Cloud コンソールの [Cloud Scheduler] ページに移動します。
[ジョブを作成] をクリックします。
[名前] にジョブの名前を入力します(例:
scheduledDatastoreExport
)。[頻度] に unix-cron 形式で入力します。
[タイムゾーン] でタイムゾーンを選択します。
[ターゲット] で [Pub/Sub] を選択します。[トピック] フィールドに、Cloud Functions の関数とともに定義した Pub/Sub トピックの名前を入力します。上記の例では、
startDatastoreExport
です。[ペイロード] フィールドに、エクスポート オペレーションを構成する JSON オブジェクトを入力します。Cloud Functions の関数
datastore_export
にはbucket
値が必要です。必要に応じて、kinds
値またはnamespaceIDs
値を指定してエンティティ フィルタを設定できます。次に例を示します。すべてのエンティティをエクスポートする
{ "bucket": "gs://bucket_name" }
エンティティ フィルタでエクスポートする
すべての名前空間から種類が
User
またはTask
のエンティティをエクスポートします。{ "bucket": "gs://bucket_name", "kinds": ["User", "Task"] }
種類が
User
またはTask
のエンティティを、デフォルトの名前空間とTesters
名前空間からエクスポートします。デフォルトの名前空間を指定するには、空の文字列(""
)を使用します。{ "bucket": "gs://bucket_name", "kinds": ["User", "Task"], "namespaceIds": ["", "Testers"] }
デフォルトの名前空間と
Testers
名前空間から任意の種類のエンティティをエクスポートします。デフォルトの名前空間を指定するには、空の文字列(""
)を使用します。{ "bucket": "gs://bucket_name", "namespaceIds": ["", "Testers"] }
ここで
bucket_name
は Cloud Storage バケット名です。[作成] をクリックします。
スケジュールされたエクスポートをテストする
Cloud Functions の関数と Cloud Scheduler ジョブをテストするには、Google Cloud Console の [Cloud Scheduler] ページで Cloud Scheduler ジョブを実行します。正常に終了した場合、実際のエクスポート オペレーションが開始されます。
Google Cloud コンソールの [Cloud Scheduler] ページに移動します。
Cloud Scheduler に移動新しく作成した Cloud Scheduler ジョブの行で、[今すぐ実行] をクリックします。
数秒後、[更新] をクリックします。Cloud Scheduler ジョブによって結果列が [成功] に更新され、[前回の実行] が現在の時刻に更新されるはずです。
Cloud Scheduler ページでは、ジョブで pub/sub トピックにメッセージが送信されたことのみを確認できます。エクスポート リクエストが正常に終了したかどうかを確認するには、Cloud Functions の関数のログを表示します。
Cloud Functions の関数のログを確認する
Cloud Functions の関数がエクスポート オペレーションを正常に開始したかどうかを確認するには、Google Cloud コンソールの [ログ エクスプローラ] ページをご覧ください。
Cloud Functions の関数のログでは、エラーとエクスポートの正常な開始が報告されます。
エクスポートの進行状況を確認する
gcloud datastore operations list
コマンドを使用すると、エクスポート オペレーションの進行状況を確認できます。すべての長時間実行オペレーションの一覧表示をご覧ください。
エクスポート オペレーションの完了後は、Cloud Storage バケット内の出力ファイルを表示できます。マネージド エクスポート サービスでは、タイムスタンプを使用してエクスポート オペレーションを整理します。