インスタンスの削除を防止する

このページでは、Cloud SQL インスタンスが誤って削除されないように保護する方法について説明します。

概要

インスタンスの削除保護を使用すると、既存のインスタンスと新しいインスタンスが誤って削除されるのを防ぐことができます。インスタンスの削除保護を使用すると、アプリケーションやサービスにとって重要なインスタンスを保護できます。

削除保護のオプションは、インスタンスの作成時に設定できます。このオプションは既存のインスタンスに設定することもできます。どちらの場合も、インスタンス レベルで削除が防止されます。Google Cloud コンソールまたは Terraform を使用してインスタンスを作成する場合を除き、削除保護オプションはデフォルトで無効になっています。

インスタンスのクローンを作成すると、新しいインスタンスはソース インスタンスから削除保護オプション(有効または無効)を継承します。

削除保護の計画

インスタンスの作成を計画するときに、新しいインスタンスの削除保護を有効にするかどうかを決めます。たとえば、重要なインスタンスはこの方法で保護する必要があります。

また、既存のインスタンスに削除保護を適用するかどうかも検討してください。保護するインスタンスが複数ある場合は、インスタンスごとにオプションを設定します。

リードレプリカの削除保護の検討

リードレプリカを作成しても、そのリードレプリカはプライマリ インスタンスから削除保護の設定を継承しません。この設定は独立しています。ただし、新規または既存のリードレプリカで削除保護を有効にすることは可能です。

Cloud SQL リードレプリカの場合、削除保護オプションは Cloud SQL インスタンスと同様に機能します。

必要な権限またはロールの確認

削除保護オプションを設定するには、Cloud SQL インスタンスのサービス アカウントに特定の権限または IAM ロールが必要です。

インスタンスの作成に必要な権限またはロール

関連するオペレーションと同様に、削除保護オプションを使用するには cloudsql.instances.create 権限または cloudsql.admin ロールが必要です。したがって、インスタンスを作成するときに、削除保護を有効にするために追加の権限は必要ありません。

インスタンスの編集に必要な権限またはロール

関連するオペレーションと同様に、削除保護を変更するには cloudsql.instances.update 権限または cloudsql.editor ロールが必要です。したがって、インスタンスの削除保護を編集するために追加の権限は必要ありません。

インスタンス削除の計画

インスタンスの削除を計画する場合は、次の手順を行います。

  • インスタンスを安全に削除できることを確認する
  • 削除保護が無効になっていることを確認する。必要であれば、インスタンスを編集して削除保護を無効にします。

削除保護の制限事項

インスタンスの削除保護では、次のことは行われません。

  • インスタンスの停止
  • インスタンスの再起動
  • インスタンスの編集
  • バックアップの削除
  • 課金の問題によるインスタンスの一時停止
  • 課金の問題で一時停止されたインスタンスの削除
  • プロジェクトの削除に伴うインスタンスの削除

新しいインスタンスでの削除保護の設定

削除保護オプションを設定する方法は、次のとおりです。Google Cloud コンソールまたは Terraform を使用してインスタンスを作成する場合を除き、削除保護オプションはデフォルトで無効になっています。

削除保護が有効な場合、インスタンスを削除しようとしても失敗します。

コンソール

  1. インスタンスの作成手順を行います。
  2. [インスタンスのカスタマイズ] で [構成オプションを表示] プルダウン矢印をクリックします。
  3. [データの保護] で、[削除からの保護の有効化] チェックボックスがオンになっていることを確認します。
  4. 必要に応じて、インスタンスに他の構成オプションを選択します。
  5. [インスタンスを作成] をクリックします。

gcloud

インスタンスの作成時に削除保護を設定するには、次のようなコマンドを使用します。

gcloud sql instances create [INSTANCE_NAME] \
    --deletion-protection

REST v1

インスタンスの作成時に削除保護を設定するには、deletionProtection フィールドに true を指定します。

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

  • project-id: プロジェクト ID
  • instance-id: 目的のインスタンス ID
  • database-version: データベースのバージョン
  • region: 目的のリージョン
  • machine-type: 目的のマシンタイプ

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

リクエストの本文(JSON):

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-05-24T15:34:10.929Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

インスタンスの作成時に削除保護を設定するには、deletionProtection フィールドに true を指定します。

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

  • project-id: プロジェクト ID
  • instance-id: 目的のインスタンス ID
  • database-version: データベースのバージョン
  • region: 目的のリージョン
  • machine-type: 目的のマシンタイプ

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances

リクエストの本文(JSON):

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-05-26T15:37:10.929Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
基盤となる REST API リクエストがこのタスクでどのように作成されるかについては、instances:insert ページの API Explorer をご覧ください。

既存のインスタンスでの削除保護の設定または解除

削除から保護するためにインスタンスを編集する方法は次のとおりです。このオプションを有効にすると、その後のインスタンスの削除が失敗します。

コンソール

  1. インスタンスの編集手順を行います。
  2. [編集] をクリックすると、[インスタンスのカスタマイズ] セクションが表示されます。
  3. [データの保護] で、[削除からの保護の有効化] チェックボックスをオンまたはオフにします。
  4. 必要に応じて、インスタンスの他の構成オプションを編集します。
  5. [保存] をクリックします。

gcloud

インスタンスの更新時に削除保護を有効にするには、次のようなコマンドを使用します。

gcloud sql instances patch [INSTANCE_NAME] \
    --deletion-protection

インスタンスの更新時に削除保護を無効にするには、次のようなコマンドを使用します。

gcloud sql instances patch [INSTANCE_NAME] \
    --no-deletion-protection

REST v1

インスタンスの更新時に削除保護を設定するには、deletionProtection フィールドに true を指定します。削除保護を解除するには、そのフィールドに false を指定します。

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

  • project-id: プロジェクト ID
  • instance-id: 目的のインスタンス ID

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

リクエストの本文(JSON):

{
  "settings": {
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-06-1T03:42:12.281Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

インスタンスの更新時に削除保護を設定するには、deletionProtection フィールドに true を指定します。削除保護を解除するには、そのフィールドに false を指定します。

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

  • project-id: プロジェクト ID
  • instance-id: 目的のインスタンス ID

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances/instance-id

リクエストの本文(JSON):

{
  "settings": {
    "deletionProtectionEnabled": true
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-06-1T03:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
このタスクで基礎となる REST API リクエストがどのように作成されるかについては、API Explorer の Instances: patch ページをご覧ください。