このページでは、Google Cloud コンソールと Google Cloud CLI を使用して、有効期間(TTL)ポリシーを構成する方法について説明します。このページを読む前に、Datastore モードのデータモデルを理解する必要があります。
有効期間の概要
TTL ポリシーを使用すると、データベースから古いデータを自動的に削除できます。TTL ポリシーは、特定のプロパティを特定の種類のエンティティの有効期限として指定します。TTL を使用すると、古いデータをクリーンアップすることでストレージ コストを削減できます。データは通常、有効期限が切れた後 72 時間以内に削除されます。
料金
TTL 削除オペレーションは、エンティティの削除コストにカウントされます。削除オペレーションの料金については、Datastore モードの Firestore の料金をご覧ください。
制限と制約
- TTL プロパティとしてマークできるのは、種類ごとに 1 つのプロパティのみです。
- TTL ポリシーは合計 200 個まで許可されます。
TTL の削除
TTL による削除の、次の主な動作に注意してください。
TTL による削除は短時間のプロセスではありません。TTL プロセスにより実際に削除されるまで、期限切れのエンティティはクエリとルックアップ リクエストに引き続き表示されます。TTL では、削除の総所有コストを削減できるというメリットは、削除の適時性との引き換えとなります。 データは通常、有効期限が切れた後 72 時間以内に削除されます。
TTL を使用してエンティティを削除しても、そのエンティティの子孫エンティティは削除されません。
既存の種類に TTL ポリシーを適用すると、新しい TTL ポリシーに従って期限切れとなった、すべてのデータが一括削除されます。この一括削除も瞬間的なものではなく、その種類のデータの量によって異なります。
TTL では、有効期限のタイムスタンプと同じ順序でエンティティが削除されるとは限りません。
削除はトランザクション的に行われるわけではありません。有効期限が同じエンティティが同時に削除されるとは限りません。この動作が必要な場合は、クライアント ライブラリを使用して削除を行います。
Datastore モードは、常に最新の TTL フィールドを使用して有効期限を決定します。たとえば、有効期限が切れている未削除のエンティティの TTL フィールドを将来の日付に更新すると、そのエンティティは期限切れにはならず、新しい日付が使用されます。
Datastore モードでは、TTL フィールドが
Timestamp
タイプに設定されている場合にのみ、ドキュメントが期限切れになります。このフィールドを未設定のままにするか、null
などの値に設定すると、ドキュメントごとに有効期限を無効にできます。TTL は他のデータベース アクティビティへの影響を最小限にするように設計されています。TTL による削除は、それよりも低い優先度で処理されます。また、TTL による削除が原因のトラフィックの急増を抑制するための戦略も実施されています。
TTL プロパティとインデックス
TTL プロパティは、インデックス付きにすることも、インデックスなしにすることもできます。ただし、TTL プロパティはタイムスタンプであるため、インデックス付けを行うとトラフィック レートが向上する可能性があります。タイムスタンプ プロパティのインデックス作成はベスト プラクティスに反しており、ホットスポットが発生する可能性があります。ホットスポットは、狭いキー範囲に対する高頻度の読み取り、書き込み、削除を指します。
Datastore はデフォルトで、すべてのプロパティに対して組み込みインデックスを作成します。インデックスからプロパティを除外して、TTL プロパティに対するインデックスを無効にできます。
権限
TTL ポリシーを構成するプリンシパルには、プロジェクトで次の権限が必要です。
- TTL ポリシーを表示するには、
datastore.indexes.list
権限とdatastore.indexes.get
権限が必要です。 - TTL ポリシーを変更するには、
datastore.indexes.update
権限が必要です。 - TTL オペレーションのステータスを確認するには、
datastore.operations.list
とdatastore.operations.get
が必要です。
これらの権限を割り当てるロールについては、Datastore の Identity and Access Management のロールをご覧ください。
始める前に
gcloud CLI を使用して TTL ポリシーを管理する前に、gcloud components update
コマンドを使用して、コンポーネントを利用可能な最新バージョンに更新します。
gcloud components update
TTL ポリシーの作成
TTL ポリシーを作成する際には、同じ種類のエンティティに対して有効期限を表すエンティティ プロパティを 1 つ指定します。TTL ポリシーは、すべての名前空間で、その特定の種類に対して適用されます。
TTL では、指定したプロパティを使用して、削除の対象となるエンティティを識別します。この TTL プロパティは Date and time
型にする必要があります。すでに存在するプロパティを選択することも、後で追加するプロパティを指定することもできます。
TTL プロパティ値を設定する前に、次の点を考慮してください。
TTL プロパティの値は、将来、現在、過去の時刻のいずれかにできます。値が過去の時刻の場合、エンティティはすぐに削除の対象となります。たとえば、プロパティ
expireAt
を使用して TTL ポリシーを作成し、既存のエンティティに追加します。他のデータ型を使用したり、TTL プロパティ値を設定したりしないと、個々のエンティティの TTL が無効になります。
TTL ポリシーを作成する手順は次のとおりです。
Google Cloud コンソール
Google Cloud コンソールの Datastore の [有効期間] ページに移動します。
[Create Policy] をクリックします。
種類名とタイムスタンプ プロパティ名を入力します。
[作成] をクリックします。
コンソールの [有効期間(TTL)] ページに戻ります。オペレーションが正常に開始されると、TTL ポリシー テーブルのページにエントリが追加されます。失敗すると、ページにエラー メッセージが表示されます。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
firestore fields ttls update
コマンドを使用して、TTL ポリシーを構成します。--async
フラグを追加すると、gcloud CLI はオペレーションの完了を待機しません。gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --enable-ttl
空のデータベースであっても、TTL ポリシーを有効にするために 10 分以上かかることがあります。オペレーションを開始すると、ターミナルを閉じてもオペレーションはキャンセルされません。
TTL ポリシーの表示
TTL ポリシーとそのステータスを確認する手順は次のとおりです。
Google Cloud コンソール
Google Cloud コンソールの Datastore の [有効期間] ページに移動します。
コンソールには、データベースの TTL ポリシーが表示され、各ポリシーのステータスも含まれています。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
firestore fields ttls list
コマンドを使用して、TTL ポリシーを構成します。次のコマンドを実行すると、すべての TTL ポリシーが一覧表示されます。gcloud firestore fields ttls list
特定の種類の TTL ポリシーを一覧表示するには、次のコマンドを使用します。
gcloud firestore fields ttls list --collection-group=collection_group_name
オペレーションの詳細の表示
ステータスが CREATING
の TTL ポリシーの詳細は、gcloud CLI を使用して確認できます。
operations list
コマンドを使用して、実行中のオペレーションと最近完了したすべてのオペレーションを表示します。
gcloud firestore operations list
レスポンスには、オペレーションの推定の進捗状況が含まれます。
TTL ポリシーを無効にする
TTL ポリシーを無効にする手順は次のとおりです。
Google Cloud コンソール
Google Cloud コンソールの Datastore の [有効期間] ページに移動します。
[TTL ポリシー] テーブルで、TTL ポリシーの行を見つけます。このテーブル行で、削除(ゴミ箱)ボタンをクリックします。
[削除] をクリックして確定します。
コンソールが [有効期間] ページに戻ります。成功すると、Datastore がテーブルから TTL ポリシーを削除します。
gcloud
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
firestore fields ttls update
コマンドを使用して、TTL ポリシーを構成します。--async
フラグを追加すると、gcloud CLI はオペレーションの完了を待機しません。gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --disable-ttl
TTL の削除のモニタリング
Cloud Monitoring を使用すると、TTL による削除に関する指標を表示できます。Datastore では、TTL について次の指標を提供しています。
datastore.googleapis.com/entity/ttl_deletion_count | TTL 削除数 |
TTL ポリシーによって削除されたエンティティの合計数。 |
datastore.googleapis.com/entity/ttl_expiration_to_deletion_delays | TTL の有効期限から削除までの遅延 |
TTL ポリシーでエンティティが期限切れになってから、実際に削除されるまでの経過時間。 |
Datastore 指標でダッシュボードを設定するには、カスタム ダッシュボードを管理するとダッシュボード ウィジェットを追加するをご覧ください。