provider/aws: Set aws_db_cluster to snapshot by default (#11668)
As requested in #11448 Terraform didn't snapshot AWS DB Instances by default. We are going to change that behaviour going forward.
This commit is contained in:
parent
f1803ba4b6
commit
ced96aa90b
|
@ -207,7 +207,7 @@ func resourceAwsDbInstance() *schema.Resource {
|
||||||
"skip_final_snapshot": {
|
"skip_final_snapshot": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: true,
|
Default: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
"copy_tags_to_snapshot": {
|
"copy_tags_to_snapshot": {
|
||||||
|
|
|
@ -150,15 +150,13 @@ func TestAccAWSDBInstanceReplica(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAccAWSDBInstanceSnapshot(t *testing.T) {
|
func TestAccAWSDBInstanceNoSnapshot(t *testing.T) {
|
||||||
var snap rds.DBInstance
|
var snap rds.DBInstance
|
||||||
|
|
||||||
resource.Test(t, resource.TestCase{
|
resource.Test(t, resource.TestCase{
|
||||||
PreCheck: func() { testAccPreCheck(t) },
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
Providers: testAccProviders,
|
Providers: testAccProviders,
|
||||||
// testAccCheckAWSDBInstanceSnapshot verifies a database snapshot is
|
CheckDestroy: testAccCheckAWSDBInstanceNoSnapshot,
|
||||||
// created, and subequently deletes it
|
|
||||||
CheckDestroy: testAccCheckAWSDBInstanceSnapshot,
|
|
||||||
Steps: []resource.TestStep{
|
Steps: []resource.TestStep{
|
||||||
{
|
{
|
||||||
Config: testAccSnapshotInstanceConfig(),
|
Config: testAccSnapshotInstanceConfig(),
|
||||||
|
@ -170,18 +168,20 @@ func TestAccAWSDBInstanceSnapshot(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAccAWSDBInstanceNoSnapshot(t *testing.T) {
|
func TestAccAWSDBInstanceSnapshot(t *testing.T) {
|
||||||
var nosnap rds.DBInstance
|
var snap rds.DBInstance
|
||||||
|
|
||||||
resource.Test(t, resource.TestCase{
|
resource.Test(t, resource.TestCase{
|
||||||
PreCheck: func() { testAccPreCheck(t) },
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
Providers: testAccProviders,
|
Providers: testAccProviders,
|
||||||
CheckDestroy: testAccCheckAWSDBInstanceNoSnapshot,
|
// testAccCheckAWSDBInstanceSnapshot verifies a database snapshot is
|
||||||
|
// created, and subequently deletes it
|
||||||
|
CheckDestroy: testAccCheckAWSDBInstanceSnapshot,
|
||||||
Steps: []resource.TestStep{
|
Steps: []resource.TestStep{
|
||||||
{
|
{
|
||||||
Config: testAccNoSnapshotInstanceConfig(),
|
Config: testAccSnapshotInstanceConfigWithSnapshot(),
|
||||||
Check: resource.ComposeTestCheckFunc(
|
Check: resource.ComposeTestCheckFunc(
|
||||||
testAccCheckAWSDBInstanceExists("aws_db_instance.no_snapshot", &nosnap),
|
testAccCheckAWSDBInstanceExists("aws_db_instance.snapshot", &snap),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -442,7 +442,7 @@ func testAccCheckAWSDBInstanceSnapshot(s *terraform.State) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("[INFO] Trying to locate the DBInstance Final Snapshot")
|
log.Printf("[INFO] Trying to locate the DBInstance Final Snapshot")
|
||||||
snapshot_identifier := "foobarbaz-test-terraform-final-snapshot-1"
|
snapshot_identifier := "foobarbaz-test-terraform-final-snapshot-2"
|
||||||
_, snapErr := conn.DescribeDBSnapshots(
|
_, snapErr := conn.DescribeDBSnapshots(
|
||||||
&rds.DescribeDBSnapshotsInput{
|
&rds.DescribeDBSnapshotsInput{
|
||||||
DBSnapshotIdentifier: aws.String(snapshot_identifier),
|
DBSnapshotIdentifier: aws.String(snapshot_identifier),
|
||||||
|
@ -593,6 +593,7 @@ resource "aws_db_instance" "bar" {
|
||||||
# documented. Terraform will downcase this to match (as opposed to throw a
|
# documented. Terraform will downcase this to match (as opposed to throw a
|
||||||
# validation error).
|
# validation error).
|
||||||
maintenance_window = "Fri:09:00-Fri:09:30"
|
maintenance_window = "Fri:09:00-Fri:09:30"
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
backup_retention_period = 0
|
backup_retention_period = 0
|
||||||
|
|
||||||
|
@ -640,6 +641,8 @@ resource "aws_db_instance" "bar" {
|
||||||
storage_encrypted = true
|
storage_encrypted = true
|
||||||
kms_key_id = "${aws_kms_key.foo.arn}"
|
kms_key_id = "${aws_kms_key.foo.arn}"
|
||||||
|
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
@ -664,6 +667,7 @@ resource "aws_db_instance" "bar" {
|
||||||
username = "foo"
|
username = "foo"
|
||||||
|
|
||||||
backup_retention_period = 0
|
backup_retention_period = 0
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
option_group_name = "${aws_db_option_group.bar.name}"
|
option_group_name = "${aws_db_option_group.bar.name}"
|
||||||
|
@ -684,6 +688,7 @@ func testAccReplicaInstanceConfig(val int) string {
|
||||||
username = "foo"
|
username = "foo"
|
||||||
|
|
||||||
backup_retention_period = 1
|
backup_retention_period = 1
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
}
|
}
|
||||||
|
@ -698,6 +703,7 @@ func testAccReplicaInstanceConfig(val int) string {
|
||||||
instance_class = "${aws_db_instance.bar.instance_class}"
|
instance_class = "${aws_db_instance.bar.instance_class}"
|
||||||
password = "${aws_db_instance.bar.password}"
|
password = "${aws_db_instance.bar.password}"
|
||||||
username = "${aws_db_instance.bar.username}"
|
username = "${aws_db_instance.bar.username}"
|
||||||
|
skip_final_snapshot = true
|
||||||
tags {
|
tags {
|
||||||
Name = "tf-replica-db"
|
Name = "tf-replica-db"
|
||||||
}
|
}
|
||||||
|
@ -710,6 +716,33 @@ func testAccSnapshotInstanceConfig() string {
|
||||||
provider "aws" {
|
provider "aws" {
|
||||||
region = "us-east-1"
|
region = "us-east-1"
|
||||||
}
|
}
|
||||||
|
resource "aws_db_instance" "snapshot" {
|
||||||
|
identifier = "tf-test-%d"
|
||||||
|
|
||||||
|
allocated_storage = 5
|
||||||
|
engine = "mysql"
|
||||||
|
engine_version = "5.6.21"
|
||||||
|
instance_class = "db.t1.micro"
|
||||||
|
name = "baz"
|
||||||
|
password = "barbarbarbar"
|
||||||
|
username = "foo"
|
||||||
|
security_group_names = ["default"]
|
||||||
|
backup_retention_period = 1
|
||||||
|
|
||||||
|
publicly_accessible = true
|
||||||
|
|
||||||
|
parameter_group_name = "default.mysql5.6"
|
||||||
|
|
||||||
|
skip_final_snapshot = true
|
||||||
|
final_snapshot_identifier = "foobarbaz-test-terraform-final-snapshot-1"
|
||||||
|
}`, acctest.RandInt())
|
||||||
|
}
|
||||||
|
|
||||||
|
func testAccSnapshotInstanceConfigWithSnapshot() string {
|
||||||
|
return fmt.Sprintf(`
|
||||||
|
provider "aws" {
|
||||||
|
region = "us-east-1"
|
||||||
|
}
|
||||||
resource "aws_db_instance" "snapshot" {
|
resource "aws_db_instance" "snapshot" {
|
||||||
identifier = "tf-snapshot-%d"
|
identifier = "tf-snapshot-%d"
|
||||||
|
|
||||||
|
@ -719,48 +752,20 @@ resource "aws_db_instance" "snapshot" {
|
||||||
instance_class = "db.t1.micro"
|
instance_class = "db.t1.micro"
|
||||||
name = "baz"
|
name = "baz"
|
||||||
password = "barbarbarbar"
|
password = "barbarbarbar"
|
||||||
|
publicly_accessible = true
|
||||||
username = "foo"
|
username = "foo"
|
||||||
security_group_names = ["default"]
|
security_group_names = ["default"]
|
||||||
backup_retention_period = 1
|
backup_retention_period = 1
|
||||||
|
|
||||||
publicly_accessible = true
|
|
||||||
|
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
|
|
||||||
skip_final_snapshot = false
|
|
||||||
copy_tags_to_snapshot = true
|
copy_tags_to_snapshot = true
|
||||||
final_snapshot_identifier = "foobarbaz-test-terraform-final-snapshot-1"
|
final_snapshot_identifier = "foobarbaz-test-terraform-final-snapshot-2"
|
||||||
tags {
|
tags {
|
||||||
Name = "tf-tags-db"
|
Name = "tf-tags-db"
|
||||||
}
|
}
|
||||||
}`, acctest.RandInt())
|
|
||||||
}
|
}
|
||||||
|
`, acctest.RandInt())
|
||||||
func testAccNoSnapshotInstanceConfig() string {
|
|
||||||
return fmt.Sprintf(`
|
|
||||||
provider "aws" {
|
|
||||||
region = "us-east-1"
|
|
||||||
}
|
|
||||||
resource "aws_db_instance" "no_snapshot" {
|
|
||||||
identifier = "tf-test-%s"
|
|
||||||
|
|
||||||
allocated_storage = 5
|
|
||||||
engine = "mysql"
|
|
||||||
engine_version = "5.6.21"
|
|
||||||
instance_class = "db.t1.micro"
|
|
||||||
name = "baz"
|
|
||||||
password = "barbarbarbar"
|
|
||||||
publicly_accessible = true
|
|
||||||
username = "foo"
|
|
||||||
security_group_names = ["default"]
|
|
||||||
backup_retention_period = 1
|
|
||||||
|
|
||||||
parameter_group_name = "default.mysql5.6"
|
|
||||||
|
|
||||||
skip_final_snapshot = true
|
|
||||||
final_snapshot_identifier = "foobarbaz-test-terraform-final-snapshot-2"
|
|
||||||
}
|
|
||||||
`, acctest.RandString(5))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func testAccSnapshotInstanceConfig_enhancedMonitoring(rName string) string {
|
func testAccSnapshotInstanceConfig_enhancedMonitoring(rName string) string {
|
||||||
|
@ -827,6 +832,7 @@ resource "aws_db_instance" "bar" {
|
||||||
username = "foo"
|
username = "foo"
|
||||||
password = "barbarbar"
|
password = "barbarbar"
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
apply_immediately = true
|
apply_immediately = true
|
||||||
|
|
||||||
|
@ -849,6 +855,7 @@ resource "aws_db_instance" "bar" {
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
port = 3306
|
port = 3306
|
||||||
allocated_storage = 10
|
allocated_storage = 10
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
apply_immediately = true
|
apply_immediately = true
|
||||||
}`, rName)
|
}`, rName)
|
||||||
|
@ -867,6 +874,7 @@ resource "aws_db_instance" "bar" {
|
||||||
parameter_group_name = "default.mysql5.6"
|
parameter_group_name = "default.mysql5.6"
|
||||||
port = 3305
|
port = 3305
|
||||||
allocated_storage = 10
|
allocated_storage = 10
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
apply_immediately = true
|
apply_immediately = true
|
||||||
}`, rName)
|
}`, rName)
|
||||||
|
@ -916,6 +924,7 @@ resource "aws_db_instance" "bar" {
|
||||||
db_subnet_group_name = "${aws_db_subnet_group.foo.name}"
|
db_subnet_group_name = "${aws_db_subnet_group.foo.name}"
|
||||||
port = 3305
|
port = 3305
|
||||||
allocated_storage = 10
|
allocated_storage = 10
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
backup_retention_period = 0
|
backup_retention_period = 0
|
||||||
apply_immediately = true
|
apply_immediately = true
|
||||||
|
@ -996,6 +1005,7 @@ resource "aws_db_instance" "bar" {
|
||||||
db_subnet_group_name = "${aws_db_subnet_group.bar.name}"
|
db_subnet_group_name = "${aws_db_subnet_group.bar.name}"
|
||||||
port = 3305
|
port = 3305
|
||||||
allocated_storage = 10
|
allocated_storage = 10
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
backup_retention_period = 0
|
backup_retention_period = 0
|
||||||
|
|
||||||
|
@ -1046,6 +1056,7 @@ resource "aws_db_instance" "mssql" {
|
||||||
password = "somecrazypassword"
|
password = "somecrazypassword"
|
||||||
engine = "sqlserver-ex"
|
engine = "sqlserver-ex"
|
||||||
backup_retention_period = 0
|
backup_retention_period = 0
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
#publicly_accessible = true
|
#publicly_accessible = true
|
||||||
|
|
||||||
|
@ -1113,6 +1124,7 @@ resource "aws_db_instance" "mssql" {
|
||||||
password = "somecrazypassword"
|
password = "somecrazypassword"
|
||||||
engine = "sqlserver-ex"
|
engine = "sqlserver-ex"
|
||||||
backup_retention_period = 0
|
backup_retention_period = 0
|
||||||
|
skip_final_snapshot = true
|
||||||
|
|
||||||
#publicly_accessible = true
|
#publicly_accessible = true
|
||||||
|
|
||||||
|
@ -1148,5 +1160,6 @@ resource "aws_db_instance" "bar" {
|
||||||
name = "baz"
|
name = "baz"
|
||||||
password = "barbarbarbar"
|
password = "barbarbarbar"
|
||||||
username = "foo"
|
username = "foo"
|
||||||
|
skip_final_snapshot = true
|
||||||
}
|
}
|
||||||
`, acctest.RandInt())
|
`, acctest.RandInt())
|
||||||
|
|
|
@ -60,7 +60,7 @@ The following arguments are supported:
|
||||||
* `final_snapshot_identifier` - (Optional) The name of your final DB snapshot
|
* `final_snapshot_identifier` - (Optional) The name of your final DB snapshot
|
||||||
when this DB instance is deleted. If omitted, no final snapshot will be
|
when this DB instance is deleted. If omitted, no final snapshot will be
|
||||||
made.
|
made.
|
||||||
* `skip_final_snapshot` - (Optional) Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted, using the value from `final_snapshot_identifier`. Default is true.
|
* `skip_final_snapshot` - (Optional) Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted, using the value from `final_snapshot_identifier`. Default is `false`.
|
||||||
* `copy_tags_to_snapshot` – (Optional, boolean) On delete, copy all Instance `tags` to
|
* `copy_tags_to_snapshot` – (Optional, boolean) On delete, copy all Instance `tags` to
|
||||||
the final snapshot (if `final_snapshot_identifier` is specified). Default
|
the final snapshot (if `final_snapshot_identifier` is specified). Default
|
||||||
`false`
|
`false`
|
||||||
|
|
Loading…
Reference in New Issue