@@ -55,6 +55,42 @@ def create_backup(instance_id, database_id, backup_id, version_time):
55
55
56
56
# [END spanner_create_backup]
57
57
58
+ # [START spanner_create_backup_with_encryption_key]
59
+ def create_backup_with_encryption_key (instance_id , database_id , backup_id , kms_key_name ):
60
+ """Creates a backup for a database using a Customer Managed Encryption Key (CMEK)."""
61
+ from google .cloud .spanner_admin_database_v1 import CreateBackupEncryptionConfig
62
+
63
+ spanner_client = spanner .Client ()
64
+ instance = spanner_client .instance (instance_id )
65
+ database = instance .database (database_id )
66
+
67
+ # Create a backup
68
+ expire_time = datetime .utcnow () + timedelta (days = 14 )
69
+ encryption_config = {
70
+ 'encryption_type' : CreateBackupEncryptionConfig .EncryptionType .CUSTOMER_MANAGED_ENCRYPTION ,
71
+ 'kms_key_name' : kms_key_name ,
72
+ }
73
+ backup = instance .backup (backup_id , database = database , expire_time = expire_time , encryption_config = encryption_config )
74
+ operation = backup .create ()
75
+
76
+ # Wait for backup operation to complete.
77
+ operation .result (1200 )
78
+
79
+ # Verify that the backup is ready.
80
+ backup .reload ()
81
+ assert backup .is_ready () is True
82
+
83
+ # Get the name, create time, backup size and encryption key.
84
+ backup .reload ()
85
+ print (
86
+ "Backup {} of size {} bytes was created at {} using encryption key {}" .format (
87
+ backup .name , backup .size_bytes , backup .create_time , backup .encryption_config .kms_key_name
88
+ )
89
+ )
90
+
91
+
92
+ # [END spanner_create_backup_with_encryption_key]
93
+
58
94
59
95
# [START spanner_restore_backup]
60
96
def restore_database (instance_id , new_database_id , backup_id ):
@@ -87,6 +123,43 @@ def restore_database(instance_id, new_database_id, backup_id):
87
123
# [END spanner_restore_backup]
88
124
89
125
126
+ # [START spanner_restore_backup_with_encryption_key]
127
+ def restore_database_with_encryption_key (instance_id , new_database_id , backup_id , kms_key_name ):
128
+ """Restores a database from a backup using a Customer Managed Encryption Key (CMEK)."""
129
+ from google .cloud .spanner_admin_database_v1 import RestoreDatabaseEncryptionConfig
130
+
131
+ spanner_client = spanner .Client ()
132
+ instance = spanner_client .instance (instance_id )
133
+
134
+ # Start restoring an existing backup to a new database.
135
+ backup = instance .backup (backup_id )
136
+ encryption_config = {
137
+ 'encryption_type' : RestoreDatabaseEncryptionConfig .EncryptionType .CUSTOMER_MANAGED_ENCRYPTION ,
138
+ 'kms_key_name' : kms_key_name ,
139
+ }
140
+ new_database = instance .database (new_database_id , encryption_config = encryption_config )
141
+ operation = new_database .restore (backup )
142
+
143
+ # Wait for restore operation to complete.
144
+ operation .result (1600 )
145
+
146
+ # Newly created database has restore information.
147
+ new_database .reload ()
148
+ restore_info = new_database .restore_info
149
+ print (
150
+ "Database {} restored to {} from backup {} with version time {} using encryption key {}." .format (
151
+ restore_info .backup_info .source_database ,
152
+ new_database_id ,
153
+ restore_info .backup_info .backup ,
154
+ restore_info .backup_info .version_time ,
155
+ new_database .encryption_config .kms_key_name ,
156
+ )
157
+ )
158
+
159
+
160
+ # [END spanner_restore_backup_with_encryption_key]
161
+
162
+
90
163
# [START spanner_cancel_backup_create]
91
164
def cancel_backup (instance_id , database_id , backup_id ):
92
165
spanner_client = spanner .Client ()
0 commit comments