このページでは、定期メンテナンスの通常のフローの範囲外でインスタンスのメンテナンス更新を受け入れることができるセルフサービス メンテナンスについて説明します。
概要
Cloud SQL は、既知の脆弱性に対するパッチなどのソフトウェアの改善を、新しいメンテナンス バージョンを通じて定期的にリリースしています。Cloud SQL は、メンテナンス更新を数か月ごとにスケジュールして、最新のメンテナンス バージョンを確実にお届けしますが、次の場合はセルフサービス メンテナンスを使用することをおすすめします。
- 次回の定期メンテナンス イベントよりも前に更新が必要な場合。
- 直近の定期メンテナンス イベントをスキップした後、最新のメンテナンス バージョンを使用する必要がある場合。
最新バージョンに手動でアップグレードする必要はありません。次回の定期メンテナンス イベント中に、Cloud SQL でメンテナンス バージョンが自動的にアップグレードされます。
リードレプリカ クラスタのメンテナンスを管理する
セルフサービス メンテナンスはインスタンス レベルで実行します。リードレプリカ クラスタの各インスタンスをメンテナンスします。Cloud SQL プライマリ インスタンスのメンテナンスを行う前に、インスタンスのすべてのリードレプリカに対してセルフサービス メンテナンスを実施します。
始める前に
セルフサービス メンテナンスを行う前に、現在のメンテナンス バージョンをまず確認してください。その後、インスタンスをアップグレードするターゲット メンテナンス バージョンを決定し、そのバージョンにインスタンスをアップグレードします。
次の方法で現在のメンテナンス バージョンを確認します。
gcloud
下の gcloud
コマンドを使用する前に、次のように置き換えます。
- INSTANCE_ID: クエリを実行するインスタンス
gcloud sql instances describe INSTANCE_ID
メンテナンス バージョンは maintenanceVersion
属性の横に示されます。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "POSTGRES_13" }
レスポンスの DatabaseInstance
セクションで maintenanceVersion
項目を探します。
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "POSTGRES_13" }
レスポンスの DatabaseInstance
セクションで maintenanceVersion
項目を探します。
ターゲット メンテナンス バージョンを決定する
次の方法で、ターゲットとして選択できるメンテナンス バージョンを確認します。現在のメンテナンス バージョンより新しいバージョンにアップグレードすることはできません。
gcloud
下の gcloud
コマンドを使用する前に、次のように置き換えます。
- INSTANCE_ID: クエリを実行するインスタンス
gcloud sql instances describe INSTANCE_ID
使用可能なメンテナンス バージョンのリストは、availableMaintenanceVersions
属性の横に示されます。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "POSTGRES_13" }
レスポンスの DatabaseInstance
セクションで availableMaintenanceVersions
項目を探します。
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "POSTGRES_13" }
レスポンスの DatabaseInstance
セクションで availableMaintenanceVersions
項目を探します。
ターゲット メンテナンス バージョンにアップグレードする
次の方法で、インスタンスをターゲット メンテナンス バージョンにアップグレードします。
gcloud
下の gcloud
コマンドを使用する前に、次のように置き換えます。
- INSTANCE_ID: クエリを実行するインスタンス
- MAINTENANCE_VERSION: 適用するメンテナンス バージョン
gcloud sql instances patch INSTANCE_ID \ --maintenance-version=MAINTENANCE_VERSION
Terraform
インスタンスを作成するには、Terraform リソースを使用します。
変更を適用する
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
変更を削除する
変更を削除するには、次の手順を行います。
- 削除の保護を無効にするには、Terraform 構成ファイルで
deletion_protection
引数をfalse
に設定します。deletion_protection = "false"
- 次のコマンドを実行します。プロンプトで「
yes
」と入力して、更新された Terraform 構成を適用します。terraform apply
-
次のコマンドを実行しています。プロンプトで「
yes
」と入力して、以前に Terraform 構成で適用されたリソースを削除します。terraform destroy
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- maintenance-version: 使用するメンテナンス バージョン
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
JSON 本文のリクエスト:
{ "maintenanceVersion": "maintenance-version" }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "08:00", "endTime": "08:01", "operationType": UPDATE, "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id", "targetProject": "project-id" }
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- instance-id: インスタンス ID
- maintenance-version: 使用するメンテナンス バージョン
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
JSON 本文のリクエスト:
{ "maintenanceVersion": "maintenance-version" }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "08:00", "endTime": "08:01", "operationType": UPDATE, "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }