@@ -1051,6 +1051,74 @@ func TestAccSqlDatabaseInstance_insights(t *testing.T) {
1051
1051
})
1052
1052
}
1053
1053
1054
+ func TestAccSqlDatabaseInstance_encryptionKey (t * testing.T ) {
1055
+ t .Parallel ()
1056
+
1057
+ context := map [string ]interface {}{
1058
+ "project_id" : getTestProjectFromEnv (),
1059
+ "key_name" : "tf-test-key-" + randString (t , 10 ),
1060
+ "instance_name" : "tf-test-sql-" + randString (t , 10 ),
1061
+ }
1062
+
1063
+ vcrTest (t , resource.TestCase {
1064
+ PreCheck : func () { testAccPreCheck (t ) },
1065
+ Providers : testAccProviders ,
1066
+ CheckDestroy : testAccSqlDatabaseInstanceDestroyProducer (t ),
1067
+ Steps : []resource.TestStep {
1068
+ {
1069
+ Config : Nprintf (
1070
+ testGoogleSqlDatabaseInstance_encryptionKey , context ),
1071
+ },
1072
+ {
1073
+ ResourceName : "google_sql_database_instance.replica" ,
1074
+ ImportState : true ,
1075
+ ImportStateVerify : true ,
1076
+ ImportStateVerifyIgnore : []string {"deletion_protection" },
1077
+ },
1078
+ {
1079
+ ResourceName : "google_sql_database_instance.master" ,
1080
+ ImportState : true ,
1081
+ ImportStateVerify : true ,
1082
+ ImportStateVerifyIgnore : []string {"deletion_protection" },
1083
+ },
1084
+ },
1085
+ })
1086
+ }
1087
+
1088
+ func TestAccSqlDatabaseInstance_encryptionKey_replicaInDifferentRegion (t * testing.T ) {
1089
+ t .Parallel ()
1090
+
1091
+ context := map [string ]interface {}{
1092
+ "project_id" : getTestProjectFromEnv (),
1093
+ "key_name" : "tf-test-key-" + randString (t , 10 ),
1094
+ "instance_name" : "tf-test-sql-" + randString (t , 10 ),
1095
+ }
1096
+
1097
+ vcrTest (t , resource.TestCase {
1098
+ PreCheck : func () { testAccPreCheck (t ) },
1099
+ Providers : testAccProviders ,
1100
+ CheckDestroy : testAccSqlDatabaseInstanceDestroyProducer (t ),
1101
+ Steps : []resource.TestStep {
1102
+ {
1103
+ Config : Nprintf (
1104
+ testGoogleSqlDatabaseInstance_encryptionKey_replicaInDifferentRegion , context ),
1105
+ },
1106
+ {
1107
+ ResourceName : "google_sql_database_instance.replica" ,
1108
+ ImportState : true ,
1109
+ ImportStateVerify : true ,
1110
+ ImportStateVerifyIgnore : []string {"deletion_protection" },
1111
+ },
1112
+ {
1113
+ ResourceName : "google_sql_database_instance.master" ,
1114
+ ImportState : true ,
1115
+ ImportStateVerify : true ,
1116
+ ImportStateVerifyIgnore : []string {"deletion_protection" },
1117
+ },
1118
+ },
1119
+ })
1120
+ }
1121
+
1054
1122
func TestAccSqlDatabaseInstance_ActiveDirectory (t * testing.T ) {
1055
1123
t .Parallel ()
1056
1124
databaseName := "tf-test-" + randString (t , 10 )
@@ -1875,6 +1943,142 @@ resource "google_sql_database_instance" "instance" {
1875
1943
}
1876
1944
}
1877
1945
`
1946
+ var testGoogleSqlDatabaseInstance_encryptionKey = `
1947
+ data "google_project" "project" {
1948
+ project_id = "%{project_id}"
1949
+ }
1950
+ resource "google_kms_key_ring" "keyring" {
1951
+ name = "%{key_name}"
1952
+ location = "us-central1"
1953
+ }
1954
+
1955
+ resource "google_kms_crypto_key" "key" {
1956
+ name = "%{key_name}"
1957
+ key_ring = google_kms_key_ring.keyring.id
1958
+ }
1959
+
1960
+ resource "google_kms_crypto_key_iam_binding" "crypto_key" {
1961
+ crypto_key_id = google_kms_crypto_key.key.id
1962
+ role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
1963
+
1964
+ members = [
1965
+ "serviceAccount:service-${data.google_project.project.number}@gcp-sa-cloud-sql.iam.gserviceaccount.com",
1966
+ ]
1967
+ }
1968
+
1969
+ resource "google_sql_database_instance" "master" {
1970
+ name = "%{instance_name}-master"
1971
+ database_version = "MYSQL_5_7"
1972
+ region = "us-central1"
1973
+ deletion_protection = false
1974
+ encryption_key_name = google_kms_crypto_key.key.id
1975
+
1976
+ settings {
1977
+ tier = "db-n1-standard-1"
1978
+
1979
+ backup_configuration {
1980
+ enabled = true
1981
+ start_time = "00:00"
1982
+ binary_log_enabled = true
1983
+ }
1984
+ }
1985
+ }
1986
+
1987
+ resource "google_sql_database_instance" "replica" {
1988
+ name = "%{instance_name}-replica"
1989
+ database_version = "MYSQL_5_7"
1990
+ region = "us-central1"
1991
+ master_instance_name = google_sql_database_instance.master.name
1992
+ deletion_protection = false
1993
+
1994
+ settings {
1995
+ tier = "db-n1-standard-1"
1996
+ }
1997
+
1998
+ depends_on = [google_sql_database_instance.master]
1999
+ }
2000
+ `
2001
+
2002
+ var testGoogleSqlDatabaseInstance_encryptionKey_replicaInDifferentRegion = `
2003
+
2004
+ data "google_project" "project" {
2005
+ project_id = "%{project_id}"
2006
+ }
2007
+
2008
+ resource "google_kms_key_ring" "keyring" {
2009
+ name = "%{key_name}"
2010
+ location = "us-central1"
2011
+ }
2012
+
2013
+ resource "google_kms_crypto_key" "key" {
2014
+
2015
+ name = "%{key_name}"
2016
+ key_ring = google_kms_key_ring.keyring.id
2017
+ }
2018
+
2019
+ resource "google_kms_crypto_key_iam_binding" "crypto_key" {
2020
+ crypto_key_id = google_kms_crypto_key.key.id
2021
+ role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
2022
+
2023
+ members = [
2024
+ "serviceAccount:service-${data.google_project.project.number}@gcp-sa-cloud-sql.iam.gserviceaccount.com",
2025
+ ]
2026
+ }
2027
+
2028
+ resource "google_sql_database_instance" "master" {
2029
+ name = "%{instance_name}-master"
2030
+ database_version = "MYSQL_5_7"
2031
+ region = "us-central1"
2032
+ deletion_protection = false
2033
+ encryption_key_name = google_kms_crypto_key.key.id
2034
+
2035
+ settings {
2036
+ tier = "db-n1-standard-1"
2037
+
2038
+ backup_configuration {
2039
+ enabled = true
2040
+ start_time = "00:00"
2041
+ binary_log_enabled = true
2042
+ }
2043
+ }
2044
+ }
2045
+
2046
+ resource "google_kms_key_ring" "keyring-rep" {
2047
+
2048
+ name = "%{key_name}-rep"
2049
+ location = "us-east1"
2050
+ }
2051
+
2052
+ resource "google_kms_crypto_key" "key-rep" {
2053
+
2054
+ name = "%{key_name}-rep"
2055
+ key_ring = google_kms_key_ring.keyring-rep.id
2056
+ }
2057
+
2058
+ resource "google_kms_crypto_key_iam_binding" "crypto_key_rep" {
2059
+ crypto_key_id = google_kms_crypto_key.key-rep.id
2060
+ role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
2061
+
2062
+ members = [
2063
+ "serviceAccount:service-${data.google_project.project.number}@gcp-sa-cloud-sql.iam.gserviceaccount.com",
2064
+ ]
2065
+ }
2066
+
2067
+ resource "google_sql_database_instance" "replica" {
2068
+ name = "%{instance_name}-replica"
2069
+ database_version = "MYSQL_5_7"
2070
+ region = "us-east1"
2071
+ master_instance_name = google_sql_database_instance.master.name
2072
+ encryption_key_name = google_kms_crypto_key.key-rep.id
2073
+ deletion_protection = false
2074
+
2075
+ settings {
2076
+ tier = "db-n1-standard-1"
2077
+ }
2078
+
2079
+ depends_on = [google_sql_database_instance.master]
2080
+ }
2081
+ `
1878
2082
1879
2083
func testGoogleSqlDatabaseInstance_PointInTimeRecoveryEnabled (masterID int , pointInTimeRecoveryEnabled bool ) string {
1880
2084
return fmt .Sprintf (`
0 commit comments