diff --git a/builtin/providers/aws/resource_aws_db_instance.go b/builtin/providers/aws/resource_aws_db_instance.go index 53b6a6987..cd394216f 100644 --- a/builtin/providers/aws/resource_aws_db_instance.go +++ b/builtin/providers/aws/resource_aws_db_instance.go @@ -238,6 +238,19 @@ func resourceAwsDbInstance() *schema.Resource { Elem: &schema.Schema{Type: schema.TypeString}, }, + "snapshot_identifier": &schema.Schema{ + Type: schema.TypeString, + Computed: false, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + + "auto_minor_version_upgrade": &schema.Schema{ + Type: schema.TypeBool, + Computed: false, + Optional: true, + }, + "tags": tagsSchema(), }, } @@ -273,6 +286,66 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error if err != nil { return fmt.Errorf("Error creating DB Instance: %s", err) } + } else if _, ok := d.GetOk("snapshot_identifier"); ok { + opts := rds.RestoreDBInstanceFromDBSnapshotInput{ + DBInstanceClass: aws.String(d.Get("instance_class").(string)), + DBInstanceIdentifier: aws.String(d.Get("identifier").(string)), + DBSnapshotIdentifier: aws.String(d.Get("snapshot_identifier").(string)), + Tags: tags, + } + + if attr, ok := d.GetOk("auto_minor_version_upgrade"); ok { + opts.AutoMinorVersionUpgrade = aws.Boolean(attr.(bool)) + } + + if attr, ok := d.GetOk("availability_zone"); ok { + opts.AvailabilityZone = aws.String(attr.(string)) + } + + if attr, ok := d.GetOk("db_subnet_group_name"); ok { + opts.DBSubnetGroupName = aws.String(attr.(string)) + } + + if attr, ok := d.GetOk("engine"); ok { + opts.Engine = aws.String(attr.(string)) + } + + if attr, ok := d.GetOk("iops"); ok { + opts.IOPS = aws.Long(int64(attr.(int))) + } + + if attr, ok := d.GetOk("license_model"); ok { + opts.LicenseModel = aws.String(attr.(string)) + } + + if attr, ok := d.GetOk("multi_az"); ok { + opts.MultiAZ = aws.Boolean(attr.(bool)) + } + + if attr, ok := d.GetOk("option_group_name"); ok { + opts.OptionGroupName = aws.String(attr.(string)) + } + + if attr, ok := d.GetOk("port"); ok { + opts.Port = aws.Long(int64(attr.(int))) + } + + if attr, ok := d.GetOk("publicly_accessible"); ok { + opts.PubliclyAccessible = aws.Boolean(attr.(bool)) + } + + if attr, ok := d.GetOk("tde_credential_arn"); ok { + opts.TDECredentialARN = aws.String(attr.(string)) + } + + if attr, ok := d.GetOk("storage_type"); ok { + opts.StorageType = aws.String(attr.(string)) + } + + _, err := conn.RestoreDBInstanceFromDBSnapshot(&opts) + if err != nil { + return fmt.Errorf("Error creating DB Instance: %s", err) + } } else { opts := rds.CreateDBInstanceInput{ AllocatedStorage: aws.Long(int64(d.Get("allocated_storage").(int))), diff --git a/website/source/docs/providers/aws/r/db_instance.html.markdown b/website/source/docs/providers/aws/r/db_instance.html.markdown index 784ade649..c2f0063f4 100644 --- a/website/source/docs/providers/aws/r/db_instance.html.markdown +++ b/website/source/docs/providers/aws/r/db_instance.html.markdown @@ -77,7 +77,7 @@ database, and to use this value as the source database. This correlates to the [DB Instance Replication][1] and [Working with PostgreSQL and MySQL Read Replicas](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html) for more information on using Replication. - +* `snapshot_identifier` - (Optional) Specifies whether or not to create this database from a snapshot. This correlates to the snapshot ID you'd find in the RDS console, e.g: rds:production-2015-06-26-06-05. ~> **NOTE:** Removing the `replicate_source_db` attribute from an existing RDS Replicate database managed by Terraform will promote the database to a fully