このページでは、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 を使用してインスタンスを作成する場合を除き、削除保護オプションはデフォルトで無効になっています。
削除保護が有効な場合、インスタンスを削除しようとしても失敗します。
Console
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" }
既存のインスタンスでの削除保護の設定または解除
削除から保護するためにインスタンスを編集する方法は次のとおりです。このオプションを有効にすると、その後のインスタンスの削除が失敗します。
Console
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" }