-
Notifications
You must be signed in to change notification settings - Fork 286
feat(cloud_sql): Add samples for Advanced DR switchover for MySQL and PostgreSQL #814
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 11 commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
694eb60
feat: Add MySQL & PostgreSQL samples for Advanced DR switchover
seviet 25db941
Merge branch 'terraform-google-modules:main' into b-389990775
seviet 9393f9c
Fix region tag
seviet f1be149
Update test.yaml
seviet 56c5a0d
Update test.yaml
seviet 69a7d11
Update test.yaml
seviet 1f6fb3c
lint: whitespace
glasnt 4713e77
lint: whitespace
glasnt 1672dd1
Remove unnecessary comments
seviet 95a873f
Remove unnecessary comments
seviet 7971937
Remove unnecessary comments
seviet 87c603b
linting
glasnt 304cb2b
lint
glasnt File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
63 changes: 63 additions & 0 deletions
63
cloud_sql/mysql_instance_switchover/dr_replica_create/main.tf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| /** | ||
| * Copyright 2025 Google LLC | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
|
|
||
|
|
||
| # [START cloud_sql_mysql_instance_switchover_dr_replica_create] | ||
| resource "google_sql_database_instance" "original-primary" { | ||
| name = "mysql-original-primary-instance" | ||
| region = "us-east1" | ||
| # Specify a database version that supports Cloud SQL Enterprise Plus edition. | ||
| database_version = "MYSQL_8_0" | ||
| instance_type = "CLOUD_SQL_INSTANCE" | ||
|
|
||
| settings { | ||
| # Specify a tier that supports Cloud SQL Enterprise Plus edition. | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| backup_configuration { | ||
| # You must enable automated backups and binary logging. | ||
| enabled = true | ||
| binary_log_enabled = true | ||
| } | ||
| } | ||
| # Set `deletion_protection` to true to ensure that one can't accidentally | ||
| # delete this instance by use of Terraform whereas | ||
| # `deletion_protection_enabled` flag protects this instance at the Google Cloud level. | ||
| deletion_protection = false | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "dr-replica" { | ||
| name = "mysql-dr-replica-instance" | ||
| # DR replica must be in a different region than the region of the primary instance. | ||
| region = "us-west2" | ||
| # DR replica must be the same database version as the primary instance. | ||
| database_version = "MYSQL_8_0" | ||
| instance_type = "READ_REPLICA_INSTANCE" | ||
| # Specify the primary instance as the master instance. | ||
| master_instance_name = google_sql_database_instance.original-primary.name | ||
|
|
||
| settings { | ||
| # DR replica must be in the same tier as your primary instance and support Enterprise Plus edition. | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| } | ||
|
|
||
| # Set `deletion_protection` to true to ensure that one can't accidentally | ||
| # delete this instance by use of Terraform whereas | ||
| # `deletion_protection_enabled` flag protects this instance at the Google Cloud level. | ||
| deletion_protection = false | ||
| } | ||
| # [END cloud_sql_mysql_instance_switchover_dr_replica_create] | ||
20 changes: 20 additions & 0 deletions
20
cloud_sql/mysql_instance_switchover/dr_replica_create/test.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # Copyright 2025 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| apiVersion: blueprints.cloud.google.com/v1alpha1 | ||
| kind: BlueprintTest | ||
| metadata: | ||
| name: mysql_instance_switchover_dr_replica_create | ||
| spec: | ||
| skip: true |
75 changes: 75 additions & 0 deletions
75
cloud_sql/mysql_instance_switchover/dr_replica_designate/main.tf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| /** | ||
| * Copyright 2025 Google LLC | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
|
|
||
| # [START cloud_sql_mysql_instance_switchover_dr_replica_designate] | ||
| data "google_project" "default" { | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "original-primary" { | ||
| name = "mysql-original-primary-instance" | ||
| # You can specify any region. | ||
| region = "us-east1" | ||
glasnt marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| # Specify a database version that supports Cloud SQL Enterprise Plus edition. | ||
| database_version = "MYSQL_8_0" | ||
| instance_type = "CLOUD_SQL_INSTANCE" | ||
|
|
||
| replication_cluster { | ||
| # Designate the DR replica. | ||
| # The format for setting the DR replica is `project-id:dr-replica-name`. | ||
| failover_dr_replica_name = "${data.google_project.default.project_id}:mysql-dr-replica-instance" | ||
| } | ||
|
|
||
| settings { | ||
| # Specify a tier that supports Cloud SQL Enterprise Plus edition. | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| backup_configuration { | ||
| # You must enable automated backups and binary logging. | ||
| enabled = true | ||
| binary_log_enabled = true | ||
| } | ||
| } | ||
| # Set `deletion_protection` to true to ensure that one can't accidentally | ||
| # delete this instance by use of Terraform whereas | ||
| # `deletion_protection_enabled` flag protects this instance at the Google Cloud level. | ||
| deletion_protection = false | ||
| # Optional. Add more settings. | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "dr-replica" { | ||
| name = "mysql-dr-replica-instance" | ||
| # DR replica must be in a different region than the region of the primary instance. | ||
| region = "us-west2" | ||
| # DR replica must be the same database version as the primary instance. | ||
| database_version = "MYSQL_8_0" | ||
| instance_type = "READ_REPLICA_INSTANCE" | ||
| # Specify the primary instance as the master instance. | ||
| master_instance_name = google_sql_database_instance.original-primary.name | ||
|
|
||
| settings { | ||
| # DR replica must be in the same tier as your primary instance and support Enterprise Plus edition. | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| } | ||
|
|
||
| # Set `deletion_protection` to true to ensure that one can't accidentally | ||
| # delete this instance by use of Terraform whereas | ||
| # `deletion_protection_enabled` flag protects this instance at the Google Cloud level. | ||
| deletion_protection = false | ||
| # Optional. Add more settings. | ||
| } | ||
|
|
||
| # [END cloud_sql_mysql_instance_switchover_dr_replica_designate] | ||
20 changes: 20 additions & 0 deletions
20
cloud_sql/mysql_instance_switchover/dr_replica_designate/test.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # Copyright 2025 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| apiVersion: blueprints.cloud.google.com/v1alpha1 | ||
| kind: BlueprintTest | ||
| metadata: | ||
| name: mysql_instance_switchover_dr_replica_designate | ||
| spec: | ||
| skip: true |
82 changes: 82 additions & 0 deletions
82
cloud_sql/mysql_instance_switchover/switchover_begin/main.tf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,82 @@ | ||
| /** | ||
| * Copyright 2025 Google LLC | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
|
|
||
| # [START cloud_sql_mysql_instance_switchover_begin] | ||
| # | ||
| # This sample provides the first part of the switchover operation and turns the DR replica | ||
| # into the new primary instance. | ||
| data "google_project" "default" { | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "original-primary" { | ||
| name = "mysql-original-primary-instance" | ||
| region = "us-east1" | ||
| database_version = "MYSQL_8_0" | ||
| instance_type = "CLOUD_SQL_INSTANCE" | ||
|
|
||
| replication_cluster { | ||
| failover_dr_replica_name = "${data.google_project.default.project_id}:mysql-dr-replica-instance" | ||
| } | ||
|
|
||
| settings { | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| backup_configuration { | ||
| enabled = true | ||
| binary_log_enabled = true | ||
| } | ||
| } | ||
| # Set `deletion_protection` to true to ensure that one can't accidentally | ||
| # delete this instance by use of Terraform whereas | ||
| # `deletion_protection_enabled` flag protects this instance at the Google Cloud level. | ||
| deletion_protection = false | ||
| # Optional. Add more settings. | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "dr-replica" { | ||
| name = "mysql-dr-replica-instance" | ||
| region = "us-west2" | ||
| database_version = "MYSQL_8_0" | ||
| # Change the instance type from "READ_REPLICA_INSTANCE" to "CLOUD_SQL_INSTANCE". | ||
| instance_type = "CLOUD_SQL_INSTANCE" | ||
| # Remove or comment out the master_instance_name from the DR replica. | ||
| # master_instance_name = google_sql_database_instance.original-primary.name | ||
| # Add the original primary instance to a list of replicas for the new primary. | ||
| replica_names = [google_sql_database_instance.original-primary.name] | ||
|
|
||
| # Designate the original primary instance as the DR replica of the new primary instance. | ||
| # The format for setting the DR replica is `project-id:dr-replica-name`. | ||
| replication_cluster { | ||
| failover_dr_replica_name = "${data.google_project.default.project_id}:${google_sql_database_instance.original-primary.name}" | ||
| } | ||
|
|
||
| settings { | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| backup_configuration { | ||
| # Add a backup configuration section to enable automated backups and binary logging for the new primary instance. | ||
| enabled = true | ||
| binary_log_enabled = true | ||
| } | ||
| } | ||
| # Set `deletion_protection` to true to ensure that one can't accidentally | ||
| # delete this instance by use of Terraform whereas | ||
| # `deletion_protection_enabled` flag protects this instance at the Google Cloud level. | ||
| deletion_protection = false | ||
| # Optional. Add more settings. | ||
| } | ||
|
|
||
| # [END cloud_sql_mysql_instance_switchover_begin] |
20 changes: 20 additions & 0 deletions
20
cloud_sql/mysql_instance_switchover/switchover_begin/test.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # Copyright 2025 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| apiVersion: blueprints.cloud.google.com/v1alpha1 | ||
| kind: BlueprintTest | ||
| metadata: | ||
| name: mysql_instance_switchover_switchover_begin | ||
| spec: | ||
| skip: true |
85 changes: 85 additions & 0 deletions
85
cloud_sql/mysql_instance_switchover/switchover_finish/main.tf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,85 @@ | ||
| /** | ||
| * Copyright 2025 Google LLC | ||
| * | ||
| * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| * you may not use this file except in compliance with the License. | ||
| * You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
|
|
||
| # [START cloud_sql_mysql_instance_switchover_finish] | ||
| # | ||
| # This sample provides the second part of the switchover operation and makes the original primary instance | ||
| # a replica of the new primary instance. After you run `terraform apply` for this sample, you'll see | ||
| # the following message: | ||
| # | ||
| # "No changes. Your infrastructure matches the configuration. | ||
| # | ||
| # Terraform has compared your real infrastructure against your configuration and found no differences, | ||
| # so no changes are needed. | ||
| # | ||
| # Apply complete! Resources: 0 added, 0 changed, 0 destroyed." | ||
| data "google_project" "default" { | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "original-primary" { | ||
| name = "mysql-original-primary-instance" | ||
| region = "us-east1" | ||
| database_version = "MYSQL_8_0" | ||
| # Change instance type for the original primary from "CLOUD_SQL_INSTANCE" to "READ_REPLICA_INSTANCE". | ||
| instance_type = "READ_REPLICA_INSTANCE" | ||
| # Set master_instance_name to the the new primary instance, the old DR replica. | ||
| master_instance_name = "mysql-dr-replica-instance" | ||
| # replica_names = [] # If you previously defined a replica_names field in your template, then delete the DR replica | ||
| # (new primary) from the list of replicas. Don't delete the entire replica_names field. | ||
| # Instead set the field to an empty string. For example, replica_names = [""]. | ||
|
|
||
| replication_cluster { | ||
| # This instance no longer requires a designated DR replica since it's a replica. | ||
| # Remove the DR replica designation by setting the field to an empty string. | ||
| failover_dr_replica_name = "" | ||
| } | ||
|
|
||
| settings { | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| backup_configuration { | ||
| # Disable automated backups because this instance is now a replica. | ||
| enabled = false | ||
| binary_log_enabled = true | ||
| } | ||
| } | ||
| deletion_protection = false | ||
| } | ||
|
|
||
| resource "google_sql_database_instance" "dr-replica" { | ||
| name = "mysql-dr-replica-instance" | ||
| region = "us-west2" | ||
| database_version = "MYSQL_8_0" | ||
| instance_type = "CLOUD_SQL_INSTANCE" | ||
| replica_names = [google_sql_database_instance.original-primary.name] | ||
|
|
||
|
|
||
| replication_cluster { | ||
| failover_dr_replica_name = "${data.google_project.default.project_id}:${google_sql_database_instance.original-primary.name}" | ||
| } | ||
|
|
||
| settings { | ||
| tier = "db-perf-optimized-N-2" | ||
| edition = "ENTERPRISE_PLUS" | ||
| backup_configuration { | ||
| enabled = true | ||
| binary_log_enabled = true | ||
| } | ||
| } | ||
| deletion_protection = false | ||
| } | ||
|
|
||
| # [END cloud_sql_mysql_instance_switchover_finish] |
20 changes: 20 additions & 0 deletions
20
cloud_sql/mysql_instance_switchover/switchover_finish/test.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # Copyright 2025 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| apiVersion: blueprints.cloud.google.com/v1alpha1 | ||
| kind: BlueprintTest | ||
| metadata: | ||
| name: mysql_instance_switchover_switchover_finish | ||
| spec: | ||
| skip: true |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.