長時間実行オペレーションを管理し監視する

このページでは、オペレーション REST API を使用して Spanner の長時間実行オペレーションのライフサイクルを管理する方法について説明します。

長時間実行オペレーションとは、完了までに膨大な時間がかかる可能性があるメソッドの呼び出しです。Spanner はデータベース、インスタンス、バックアップの複数のアクションについて長時間実行オペレーションを作成します。その一例は、データベースを復元するメソッド projects.instances.databases.restoreです。

データベースを復元すると、Spanner サービスは復元の進行状況を追跡するための長時間実行オペレーションを作成します。Spanner では、長時間実行オペレーションの進行状況を確認できるオペレーション API が提供されます。長時間実行オペレーションの一覧表示やキャンセル、長時間実行インスタンス オペレーションの削除を行うこともできます。

以下を使用して、長時間実行オペレーションの確認と管理を行うことができます。

REST API を使用して長時間実行 Spanner オペレーションを管理する

次の REST メソッドを使用して、Spanner の長時間実行オペレーションを管理します。

操作 長時間実行データベース オペレーション 長時間実行インスタンス オペレーション
長時間実行オペレーションをキャンセルする cancel cancel
長時間実行オペレーションを削除する 未対応 サポート対象外
長時間実行オペレーションの進行状況を確認する get get
長時間実行オペレーションを一覧表示する list list

Spanner で REST を使用する方法については、REST で Spanner を使ってみるをご覧ください。

データベース オペレーション

長時間実行データベース オペレーションには次のものがあります。

長時間実行データベース オペレーションの進行状況を確認する

projects.instances.databases.operations.get を使用して長時間実行データベース オペレーションの進行状況を確認する

たとえば、projects.instances.databases.create からのレスポンスは次のようになります。

  {
    "name": "projects/<VAR>PROJECT-ID</VAR>/instances/test-instance/databases/example-db/operations/_auto_1492721321097206",
    "metadata": {
      "@type": "type.googleapis.com/google.spanner.admin.database.v1.CreateDatabaseMetadata",
      "database": "projects/<VAR>PROJECT-ID</VAR>/instances/test-instance/databases/example-db"
    }
  }

レスポンスの一番上にある name 値は、Spanner サービスが projects/PROJECT-ID/instances/test-instance/databases/example-db/operations/_auto_1492721321097206 という名前の長時間実行データベース オペレーションを作成したことを表します。

長時間実行データベース オペレーションの進行状況を確認するには:

  1. [projects.instances.databases.operations.get] をクリックします。

  2. [name] で、projects.instances.databases.create または projects.instances.databases.updateDdl へのレスポンスに表示されるとおりの長時間実行データベース オペレーション名を入力します。次に例を示します。

    projects/PROJECT-ID/instances/test-instance/databases/example-db/operations/OPERATION-ID

    以下を置き換えます。

    • PROJECT-ID: プロジェクト ID。
    • OPERATION-ID: オペレーション ID。

    長時間実行データベース オペレーションを一覧表示して、データベース オペレーション名を取得します。

  3. [実行] をクリックします。オペレーションが完了すると、done フィールドが true に設定されます。

継続的な更新を行うには、オペレーションが完了するまで繰り返し projects.instances.databases.operations.get メソッドを呼び出します。各リクエスト間でバックオフを使用します。たとえば、10 秒ごとにリクエストを発行します。

長時間実行データベース オペレーションを一覧表示する

projects.instances.databases.operations.list を使用すると、長時間実行データベース オペレーションを一覧表示できます。

  1. projects.instances.databases.operations.list をクリックします。
  2. [name] に以下のように入力します。

    projects/PROJECT-ID/instances/test-instance/databases/example-db/operations

  3. [実行] をクリックします。レスポンスには、長時間実行オペレーションのリストが含まれます。

長時間実行データベース オペレーションをキャンセルする

projects.instances.databases.operations.cancel を使用すると、長時間実行データベース オペレーションをキャンセルできます。

  1. projects.instances.databases.operations.cancel をクリックします。
  2. [name] で、長時間実行データベース オペレーションのレスポンスに表示されるとおりの長時間実行データベース オペレーション名を入力します。次に例を示します。

    projects/PROJECT-ID/instances/test-instance/databases/example-db/operations/_auto_1492721321097206

    (この値の代わりに、取得したオペレーション名を使用します)データベース オペレーション名は長時間実行データベース オペレーションの一覧表示で取得することもできます。

  3. [Execute] をクリックします。

スキーマ更新オペレーション

長時間実行スキーマ更新オペレーションは次のとおりです。

長時間実行スキーマ更新オペレーションの進行状況を確認する

コンソール

  1. Spanner のナビゲーション メニューで、[オペレーション] タブを選択します。[オペレーション] ページに、現在実行中のオペレーションのリストが表示されます。

  2. リストでスキーマ オペレーションを見つけます。実行中の場合、[終了時間] 列の進行状況バーには、次の図に示すように、完了したオペレーションの割合が表示されます。

98% を示す進行状況インジケーターのスクリーンショット

gcloud

gcloud spanner operations describe を使用して、オペレーションの進行状況を確認します。

  1. オペレーション ID を取得します。

    gcloud spanner operations list --instance=INSTANCE-NAME \
    --database=DATABASE-NAME --type=DATABASE_UPDATE_DDL
    

    以下を置き換えます。

    • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
    • DATABASE-NAME は、データベースの名前に置き換えます。
  2. gcloud spanner operations describe を実行します。

    gcloud spanner operations describe OPERATION-ID\
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME
    

    以下を置き換えます。

    • OPERATION-ID: 確認するオペレーションのオペレーション ID。
    • INSTANCE-NAME: Spanner インスタンス名。
    • DATABASE-NAME: Spanner データベース名。

    出力の progress セクションには、完了したオペレーションの割合が表示されます。出力は次のようになります。

    done: true
    metadata:
    ...
      progress:
      - endTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
        startTime: '2022-03-01T00:28:04.221401Z'
      - endTime: '2022-03-01T00:28:17.624588Z'
        startTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
    ...
    

REST v1

オペレーション ID を取得します。

gcloud spanner operations list --instance=INSTANCE-NAME \
--database=DATABASE-NAME --type=DATABASE_UPDATE_DDL

以下を置き換えます。

  • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
  • DATABASE-NAME は、データベースの名前に置き換えます。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID。
  • instance-id: インスタンス ID。
  • database-id: データベース ID。
  • operation-id: オペレーション ID。

HTTP メソッドと URL:

GET https://spanner.googleapis.com/v1/projects/project-id/instances/instance-id/databases/database-id/operations/operation-id

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
...
    "progress": [
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:27.366688Z",
        "endTime": "2023-05-27T00:52:30.184845Z"
      },
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:30.184845Z",
        "endTime": "2023-05-27T00:52:40.750959Z"
      }
    ],
...
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

オペレーションに時間がかかりすぎる場合は、キャンセルできます。詳細については、長時間実行スキーマ更新オペレーションをキャンセルするをご覧ください。

長時間実行スキーマ更新オペレーションを一覧表示する

gcloud

gcloud spanner operations list --instance=INSTANCE-NAME \
--database=DATABASE-NAME --type=DATABASE_UPDATE_DDL

以下を置き換えます。

  • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
  • DATABASE-NAME は、データベースの名前に置き換えます。

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

OPERATION-ID     STATEMENTS                                                                                          DONE   @TYPE
_auto_op_123456  CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName)                                 False  UpdateDatabaseDdlMetadata
               CREATE INDEX SongsBySingerAlbumSongName ON Songs(SingerId, AlbumId, SongName), INTERLEAVE IN Albums
_auto_op_234567                                                                                                      True   CreateDatabaseMetadata

長時間実行スキーマ更新オペレーションをキャンセルする

gcloud

  1. オペレーション ID を取得します。

    gcloud spanner operations list --instance=INSTANCE-NAME \
    --database=DATABASE-NAME --type=DATABASE_UPDATE_DDL
    

    以下を置き換えます。

    • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
    • DATABASE-NAME は、データベースの名前に置き換えます。
  2. gcloud operations cancel を使用して、長時間実行スキーマ更新オペレーションをキャンセルします。

    gcloud operations cancel OPERATION-ID \
    --instance=INSTANCE-NAME \
    

    次のように置き換えます。

    • OPERATION-ID: 確認するオペレーションのオペレーション ID。
    • INSTANCE-NAME: Spanner インスタンス名。

REST V1

projects.instances.databases.operations.cancel を使用して、長時間実行スキーマ更新オペレーションをキャンセルします。

  1. オペレーション ID を取得します。

    gcloud spanner operations list --instance=INSTANCE-NAME \
    --database=DATABASE-NAME --type=DATABASE_UPDATE_DDL
    

    以下を置き換えます。

    • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
    • DATABASE-NAME は、データベースの名前に置き換えます。
  2. [projects.instances.databases.operations.cancel] をクリックします。

  3. [name] で、長時間実行スキーマ更新オペレーションのレスポンスに表示されるとおりの長時間実行スキーマ更新オペレーション名を入力します。次に例を示します。

    projects/PROJECT-ID/instances/test-instance/databases/example-db/operations/OPERATION-ID

    以下を置き換えます。

    • PROJECT-ID: プロジェクト ID。
    • OPERATION-ID: オペレーション ID。

    また、長時間実行インスタンス オペレーションを一覧表示して、スキーマ更新オペレーション名を取得することもできます。

  4. [実行] をクリックします。オペレーションが停止します。

バックアップと復元オペレーション

長時間実行バックアップ オペレーションには次のものがあります。

長時間実行バックアップまたは復元オペレーションの進行状況を確認する

コンソール

バックアップ

  1. Spanner のナビゲーション メニューで、[オペレーション] タブを選択します。[オペレーション] ページに、現在実行中のオペレーションのリストが表示されます。

  2. リストでスキーマ オペレーションを見つけます。実行中の場合、[終了時間] 列の進行状況バーには、次の図に示すように、完了したオペレーションの割合が表示されます。

98% を示す進行状況インジケーターのスクリーンショット

復元

復元オペレーションの進行状況を確認するには、次の図に示すように、復元中に表示される進行状況インジケーターを確認します。

56% を示す進行状況インジケーターのスクリーンショット

オペレーションに時間がかかりすぎる場合は、キャンセルできます。詳細については、長時間実行インスタンス オペレーションをキャンセルするをご覧ください。

gcloud

gcloud spanner operations describe を使用して、バックアップまたは復元のオペレーションの進行状況を確認します。

  1. オペレーション ID を取得します。

    gcloud spanner operations list --instance=INSTANCE-NAME \
    --database=DATABASE-NAME --type=DATABASE_UPDATE_DDL
    

    以下を置き換えます。

    • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
    • DATABASE-NAME は、データベースの名前に置き換えます。
  2. gcloud spanner operations describe を実行します。

    gcloud spanner operations describe OPERATION-ID\
    --instance=INSTANCE-NAME \
    --database=DATABASE-NAME
    

    以下を置き換えます。

    • OPERATION-ID: 確認するオペレーションのオペレーション ID。
    • INSTANCE-NAME: Spanner インスタンス名。
    • DATABASE-NAME: Spanner データベース名。

    出力の progress セクションには、完了したオペレーションの割合が表示されます。出力は次のようになります。

    done: true
    metadata:
    ...
      progress:
      - endTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
        startTime: '2022-03-01T00:28:04.221401Z'
      - endTime: '2022-03-01T00:28:17.624588Z'
        startTime: '2022-03-01T00:28:06.691403Z'
        progressPercent: 100
    ...
    

REST v1

オペレーション ID を取得します。

  gcloud spanner operations list --instance=INSTANCE-NAME 
--database=DATABASE-NAME --type=DATABASE_UPDATE_DDL

以下を置き換えます。

  • INSTANCE-NAME は、Spanner インスタンス名に置き換えます。
  • DATABASE-NAME は、データベースの名前に置き換えます。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID。
  • instance-id: インスタンス ID。
  • database-id: データベース ID。
  • operation-id: オペレーション ID。

HTTP メソッドと URL:

GET https://spanner.googleapis.com/v1/projects/project-id/instances/instance-id/databases/database-id/operations/operation-id

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
...
    "progress": [
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:27.366688Z",
        "endTime": "2023-05-27T00:52:30.184845Z"
      },
      {
        "progressPercent": 100,
        "startTime": "2023-05-27T00:52:30.184845Z",
        "endTime": "2023-05-27T00:52:40.750959Z"
      }
    ],
...
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

オペレーションに時間がかかりすぎる場合は、キャンセルできます。詳細については、長時間実行バックアップ オペレーションをキャンセルするをご覧ください。

長時間実行バックアップまたは復元オペレーションを一覧表示する

単一のバックアップのオペレーションを一覧表示するには projects.instances.backups.operations.listを、インスタンス内のすべてのバックアップ オペレーションを一覧表示するには projects.instances.backupOperations.list を使用します。

  1. projects.instances.backups.operations.list をクリックします。

  2. [name] に以下のように入力します。

    projects/project-id/instances/test-instance/backups/example-db-backup-4/operations

  3. [実行] をクリックします。レスポンスには、長時間実行オペレーションのリストが含まれます。

長時間実行バックアップオペレーションのキャンセル

projects.instances.backups.operations.cancel を使用すると長時間実行バックアップ オペレーションをキャンセルできます。

  1. projects.instances.backups.operations.cancel をクリックします。

  2. [name] で、長時間実行バックアップ オペレーションのレスポンスに表示されるとおりの長時間実行バックアップ オペレーション名を入力します。次に例を示します。

    projects/project-id/instances/test-instance/backups/example-db-backup-4/operations/_auto_1492721321097206

    _auto_1492721321097206 は、オペレーション ID に置き換えます。

    長時間実行バックアップ オペレーションを一覧表示して、バックアップ オペレーション名を取得することもできます。

  3. [Execute] をクリックします。

インスタンス オペレーション

長時間実行インスタンス オペレーションには次のものがあります。

長時間実行インスタンス オペレーションの進行状況を確認する

projects.instances.operations.get を使用すると、長時間実行インスタンス オペレーションの進行状況を確認できます。

たとえば、projects.instances.create からのレスポンスは次のようになります。

  {
    "name": "projects/<VAR>PROJECT-ID</VAR>/instances/test-instance/operations/<VAR>OPERATION-ID</VAR>",
    "metadata": {
      "@type": "type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceMetadata",
      "instance": {
        "name": "projects/<VAR>PROJECT-ID</VAR>/instances/test-instance",
        "config": "projects/<VAR>PROJECT-ID</VAR>/instanceConfigs/regional-us-central1",
        "displayName": "Test Instance",
        "nodeCount": 1,
        "state": "READY"
      },
      "startTime": "2017-04-24T22:45:41.130854Z"
    }
  }

レスポンスの一番上にある name 値は、Spanner サービスが projects/PROJECT-ID/instances/test-instance/operations/<VAR>OPERATION-ID</VAR> という名前の長時間実行インスタンス オペレーションを作成したことを表します。

長時間実行インスタンス オペレーションの進行状況を確認するには:

  1. [projects.instances.operations.get] をクリックします。
  2. [name] で、projects.instances.create または projects.instances.patch へのレスポンスに表示されるとおりの長時間実行インスタンス オペレーション名を入力します。次に例を示します。

    projects/PROJECT-ID/instances/test-instance/operations/OPERATION-ID

    以下を置き換えます。

    • PROJECT-ID: プロジェクト ID。
    • OPERATION-ID: オペレーション ID。

    インスタンス オペレーション名は長時間実行インスタンス オペレーションを一覧表示して取得することもできます。

  3. [実行] をクリックします。オペレーションが完了すると、done フィールドが true に設定されます。

継続的な更新を行うには、オペレーションが完了するまで繰り返し projects.instances.databases.operations.get メソッドを呼び出します。各リクエスト間でバックオフを使用します。たとえば、10 秒ごとにリクエストを発行します。

長時間実行インスタンス オペレーションの一覧表示

projects.instances.operations.list を使用すると、長時間実行インスタンス オペレーションを一覧表示できます。

  1. projects.instances.operations.list をクリックします。
  2. [name] に以下のように入力します。

    プロジェクト/PROJECT-ID/instances/test-instance/operations

  3. [実行] をクリックします。レスポンスには、長時間実行オペレーションのリストが含まれます。

長時間実行インスタンス オペレーションをキャンセルする

projects.instances.operations.cancel を使用すると、長時間実行インスタンス オペレーションをキャンセルできます。

  1. projects.instances.operations.cancel をクリックします。
  2. [name] で、長時間実行インスタンス オペレーションのレスポンスに表示されるとおりの長時間実行インスタンス オペレーション名を入力します。次に例を示します。

    projects/PROJECT-ID/instances/test-instance/operations/OPERATION-ID

    以下を置き換えます。

    • PROJECT-ID: プロジェクト ID。
    • OPERATION-ID: オペレーション ID。

    インスタンス オペレーション名は長時間実行インスタンス オペレーションを一覧表示して取得することもできます。

  3. [Execute] をクリックします。

長時間実行インスタンス オペレーションを削除する

projects.instances.operations.delete を使用すると、長時間実行インスタンス オペレーションを削除できます。

  1. projects.instances.operations.delete をクリックします。
  2. [name] で、長時間実行インスタンス オペレーションのレスポンスに表示されるとおりの長時間実行インスタンス オペレーション名を入力します。次に例を示します。

    projects/PROJECT-ID/instances/test-instance/operations/OPERATION-ID

    以下を置き換えます。

    • PROJECT-ID: プロジェクト ID。
    • OPERATION-ID: オペレーション ID。

    インスタンス オペレーション名は長時間実行インスタンス オペレーションを一覧表示して取得することもできます。

  3. [実行] をクリックします。オペレーションが削除されます。