1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15- def create_instance project_id :, instance_id :
15+ def create_instance project_id :, instance_id :, instance_config_id : "regional-us-central1"
1616 # [START spanner_create_instance]
1717 # project_id = "Your Google Cloud project ID"
1818 # instance_id = "Your Spanner instance ID"
19+ # instance_config_id = "Your Spanner InstanceConfig ID"
1920
2021 require "google/cloud/spanner"
2122 require "google/cloud/spanner/admin/instance"
@@ -24,7 +25,7 @@ def create_instance project_id:, instance_id:
2425
2526 project_path = instance_admin_client . project_path project : project_id
2627 instance_path = instance_admin_client . instance_path project : project_id , instance : instance_id
27- instance_config_path = instance_admin_client . instance_config_path project : project_id , instance_config : "regional-us-central1"
28+ instance_config_path = instance_admin_client . instance_config_path project : project_id , instance_config : instance_config_id
2829
2930 job = instance_admin_client . create_instance parent : project_path ,
3031 instance_id : instance_id ,
@@ -222,6 +223,70 @@ def create_database_with_encryption_key project_id:, instance_id:, database_id:,
222223 # [END spanner_create_database_with_encryption_key]
223224end
224225
226+ def create_database_with_multiple_kms_keys (
227+ project_id :, instance_id :, database_id :, kms_key_names :
228+ )
229+ # [START spanner_create_database_with_MR_CMEK]
230+ # project_id = "Your Google Cloud project ID"
231+ # instance_id = "Your Spanner instance ID"
232+ # database_id = "Your Spanner database ID"
233+ # kms_key_names = ["key1", "key2", "key3"]
234+
235+ require "google/cloud/spanner"
236+ require "google/cloud/spanner/admin/database"
237+
238+ database_admin_client = Google ::Cloud ::Spanner ::Admin ::Database . database_admin
239+
240+ instance_path = database_admin_client . instance_path (
241+ project : project_id , instance : instance_id
242+ )
243+
244+ encryption_config = {
245+ kms_key_names : kms_key_names
246+ }
247+
248+ db_path = database_admin_client . database_path (
249+ project : project_id ,
250+ instance : instance_id ,
251+ database : database_id
252+ )
253+
254+ job = database_admin_client . create_database (
255+ parent : instance_path ,
256+ create_statement : "CREATE DATABASE `#{ database_id } `" ,
257+ extra_statements : [
258+ <<~STATEMENT ,
259+ CREATE TABLE Singers (
260+ SingerId INT64 NOT NULL,
261+ FirstName STRING(1024),
262+ LastName STRING(1024),
263+ SingerInfo BYTES(MAX)
264+ ) PRIMARY KEY (SingerId)
265+ STATEMENT
266+ <<~STATEMENT
267+ CREATE TABLE Albums (
268+ SingerId INT64 NOT NULL,
269+ AlbumId INT64 NOT NULL,
270+ AlbumTitle STRING(MAX)
271+ ) PRIMARY KEY (SingerId, AlbumId),
272+ INTERLEAVE IN PARENT Singers
273+ ON DELETE CASCADE
274+ STATEMENT
275+ ] ,
276+ encryption_config : encryption_config
277+ )
278+
279+ puts "Waiting for create database operation to complete"
280+
281+ job . wait_until_done!
282+ database = database_admin_client . get_database name : db_path
283+
284+ puts "Database #{ database_id } created with encryption key " \
285+ "#{ database . encryption_config . kms_key_names } "
286+
287+ # [END spanner_create_database_with_MR_CMEK]
288+ end
289+
225290def create_dml_database project_id :, instance_id :, database_id :
226291 require "google/cloud/spanner"
227292 require "google/cloud/spanner/admin/database"
@@ -2005,6 +2070,55 @@ def create_backup_with_encryption_key project_id:, instance_id:, database_id:, b
20052070 # [END spanner_create_backup_with_encryption_key]
20062071end
20072072
2073+ def create_backup_with_multiple_kms_keys (
2074+ project_id :, instance_id :, database_id :, backup_id :, kms_key_names :
2075+ )
2076+ # [START spanner_create_backup_with_MR_CMEK]
2077+ # project_id = "Your Google Cloud project ID"
2078+ # instance_id = "Your Spanner instance ID"
2079+ # database_id = "Your Spanner database ID"
2080+ # backup_id = "Your Spanner backup ID"
2081+ # kms_key_names = ["key1", "key2", "key3"]
2082+
2083+ require "google/cloud/spanner"
2084+ require "google/cloud/spanner/admin/database"
2085+
2086+ database_admin_client = Google ::Cloud ::Spanner ::Admin ::Database . database_admin
2087+
2088+ instance_path = database_admin_client . instance_path (
2089+ project : project_id , instance : instance_id
2090+ )
2091+ db_path = database_admin_client . database_path project : project_id ,
2092+ instance : instance_id ,
2093+ database : database_id
2094+ backup_path = database_admin_client . backup_path project : project_id ,
2095+ instance : instance_id ,
2096+ backup : backup_id
2097+ expire_time = Time . now + ( 14 * 24 * 3600 ) # 14 days from now
2098+ encryption_config = {
2099+ encryption_type : :CUSTOMER_MANAGED_ENCRYPTION ,
2100+ kms_key_names : kms_key_names
2101+ }
2102+
2103+ job = database_admin_client . create_backup parent : instance_path ,
2104+ backup_id : backup_id ,
2105+ backup : {
2106+ database : db_path ,
2107+ expire_time : expire_time
2108+ } ,
2109+ encryption_config : encryption_config
2110+
2111+ puts "Backup operation in progress"
2112+
2113+ job . wait_until_done!
2114+
2115+ backup = database_admin_client . get_backup name : backup_path
2116+ puts "Backup #{ backup_id } of size #{ backup . size_bytes } bytes was created " \
2117+ "at #{ backup . create_time } using encryption key #{ kms_key_names } "
2118+
2119+ # [END spanner_create_backup_with_MR_CMEK]
2120+ end
2121+
20082122def restore_backup project_id :, instance_id :, database_id :, backup_id :
20092123 # [START spanner_restore_backup]
20102124 # project_id = "Your Google Cloud project ID"
@@ -2083,6 +2197,56 @@ def restore_database_with_encryption_key project_id:, instance_id:, database_id:
20832197 # [END spanner_restore_backup_with_encryption_key]
20842198end
20852199
2200+ def restore_database_with_multiple_kms_keys (
2201+ project_id :, instance_id :, database_id :, backup_id :, kms_key_names :
2202+ )
2203+ # [START spanner_restore_backup_with_MR_CMEK]
2204+ # project_id = "Your Google Cloud project ID"
2205+ # instance_id = "Your Spanner instance ID"
2206+ # database_id = "Your Spanner database ID of where to restore"
2207+ # backup_id = "Your Spanner backup ID"
2208+ # kms_key_names = ["key1", "key2", "key3"]
2209+
2210+ require "google/cloud/spanner"
2211+ require "google/cloud/spanner/admin/database"
2212+
2213+ database_admin_client = Google ::Cloud ::Spanner ::Admin ::Database . database_admin
2214+
2215+ instance_path = database_admin_client . instance_path (
2216+ project : project_id , instance : instance_id
2217+ )
2218+
2219+ db_path = database_admin_client . database_path project : project_id ,
2220+ instance : instance_id ,
2221+ database : database_id
2222+
2223+ backup_path = database_admin_client . backup_path project : project_id ,
2224+ instance : instance_id ,
2225+ backup : backup_id
2226+
2227+ encryption_config = {
2228+ encryption_type : :CUSTOMER_MANAGED_ENCRYPTION ,
2229+ kms_key_names : kms_key_names
2230+ }
2231+ job = database_admin_client . restore_database (
2232+ parent : instance_path ,
2233+ database_id : database_id ,
2234+ backup : backup_path ,
2235+ encryption_config : encryption_config
2236+ )
2237+
2238+ puts "Waiting for restore backup operation to complete"
2239+
2240+ job . wait_until_done!
2241+ database = database_admin_client . get_database name : db_path
2242+ restore_info = database . restore_info
2243+ puts "Database #{ restore_info . backup_info . source_database } was restored " \
2244+ "to #{ database_id } from backup #{ restore_info . backup_info . backup } " \
2245+ "using encryption key #{ database . encryption_config . kms_key_names } "
2246+
2247+ # [END spanner_restore_backup_with_MR_CMEK]
2248+ end
2249+
20862250def create_backup_cancel project_id :, instance_id :, database_id :, backup_id :
20872251 # [START spanner_cancel_backup_create]
20882252 # project_id = "Your Google Cloud project ID"
@@ -2338,6 +2502,53 @@ def copy_backup project_id:, instance_id:, backup_id:, source_backup_id:
23382502 # [END spanner_copy_backup]
23392503end
23402504
2505+ def copy_backup_with_multiple_kms_keys ( project_id :, instance_id :, backup_id :,
2506+ source_backup_id :, kms_key_names :)
2507+ # [START spanner_copy_backup_with_MR_CMEK]
2508+ # project_id = "Your Google Cloud project ID"
2509+ # instance_id = "The ID of the destination instance that will contain the backup copy"
2510+ # backup_id = "The ID of the backup copy"
2511+ # source_backup = "The source backup to be copied"
2512+ # kms_key_names = ["key1", "key2", "key3"]
2513+
2514+ require "google/cloud/spanner"
2515+ require "google/cloud/spanner/admin/database"
2516+
2517+ database_admin_client = Google ::Cloud ::Spanner ::Admin ::Database . database_admin
2518+
2519+ instance_path = database_admin_client . instance_path (
2520+ project : project_id , instance : instance_id
2521+ )
2522+ backup_path = database_admin_client . backup_path project : project_id ,
2523+ instance : instance_id ,
2524+ backup : backup_id
2525+ source_backup = database_admin_client . backup_path project : project_id ,
2526+ instance : instance_id ,
2527+ backup : source_backup_id
2528+
2529+ expire_time = Time . now + ( 14 * 24 * 3600 ) # 14 days from now
2530+ encryption_config = {
2531+ encryption_type : :CUSTOMER_MANAGED_ENCRYPTION ,
2532+ kms_key_names : kms_key_names
2533+ }
2534+
2535+ job = database_admin_client . copy_backup parent : instance_path ,
2536+ backup_id : backup_id ,
2537+ source_backup : source_backup ,
2538+ expire_time : expire_time ,
2539+ encryption_config : encryption_config
2540+
2541+ puts "Copy backup operation in progress"
2542+
2543+ job . wait_until_done!
2544+
2545+ backup = database_admin_client . get_backup name : backup_path
2546+ puts "Backup #{ backup_id } of size #{ backup . size_bytes } bytes was copied at " \
2547+ "#{ backup . create_time } from #{ source_backup } for version " \
2548+ "#{ backup . version_time } using encryption keys #{ kms_key_names } "
2549+ # [END spanner_copy_backup_with_MR_CMEK]
2550+ end
2551+
23412552def set_custom_timeout_and_retry project_id :, instance_id :, database_id :
23422553 # [START spanner_set_custom_timeout_and_retry]
23432554 # project_id = "Your Google Cloud project ID"
@@ -2401,6 +2612,7 @@ def usage
24012612 create_instance <instance_id> Create Instance
24022613 create_database <instance_id> <database_id> Create Database
24032614 create_database_with_encryption_key <instance_id> <database_id> Create Database with encryption
2615+ create_database_with_multiple_kms_keys <instance_id> <database_id> Create Database with multiple KMS keys
24042616 create_table_with_timestamp_column <instance_id> <database_id> Create table Performances with commit timestamp column
24052617 insert_data <instance_id> <database_id> Insert Data
24062618 insert_data_with_timestamp_column <instance_id> <database_id> Inserts data into Performances table containing the commit timestamp column
@@ -2463,15 +2675,18 @@ def usage
24632675 write_read_float64_array <instance_id> <database_id> Writes FLOAT64 array and read.
24642676 create_backup <instance_id> <database_id> <backup_id> <version_time> Create a backup.
24652677 create_backup_with_encryption_key <instance_id> <database_id> <backup_id> <kms_key_name> Create a backup using encryption key.
2678+ create_backup_with_multiple_kms_keys <instance_id> <database_id> <backup_id> "<kms_key_name>,<kms_key_name>" Create a backup using multiple KMS keys.
24662679 restore_backup <instance_id> <database_id> <backup_id> Restore a database.
24672680 restore_database_with_encryption_key <instance_id> <database_id> <backup_id> <kms_key_name> Restore a database using encryption key.
2681+ restore_database_with_multiple_kms_keys <instance_id> <database_id> <backup_id> "<kms_key_name>,<kms_key_name>" Restore a database using multiple KMS keys
24682682 create_backup_cancel <instance_id> <database_id> <backup_id> Cancel a backup.
24692683 list_backup_operations <instance_id> List backup operations.
24702684 list_database_operations <instance_id> List database operations.
24712685 list_backups <instance_id> <backup_id> <database_id> List and filter backups.
24722686 delete_backup <instance_id> <backup_id> Delete a backup.
24732687 update_backup <instance_id> <backup_id> Update the backup.
24742688 copy_backup <instance_id> <backup_id> <source_backup> Copies a backup
2689+ copy_backup_with_multiple_kms_keys <instance_id> <backup_id> <source_backup> "<kms_key_name>,<kms_key_name>" Copies a backup with multiple KMS keys
24752690 set_custom_timeout_and_retry <instance_id> <database_id> Set custom timeout and retry settings.
24762691 commit_stats <instance_id> <database_id> Get commit stats.
24772692
0 commit comments