func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).rdsconn opts := rds.CreateDBInstance{ AllocatedStorage: d.Get("allocated_storage").(int), SetAllocatedStorage: true, DBInstanceClass: d.Get("instance_class").(string), DBInstanceIdentifier: d.Get("identifier").(string), DBName: d.Get("name").(string), MasterUsername: d.Get("username").(string), MasterUserPassword: d.Get("password").(string), Engine: d.Get("engine").(string), EngineVersion: d.Get("engine_version").(string), } // Special treatment for the password, as we don't want that // saved into the state file d.Set("password", "") if attr, ok := d.GetOk("backup_retention_period"); ok { opts.BackupRetentionPeriod = attr.(int) opts.SetBackupRetentionPeriod = true } if attr, ok := d.GetOk("iops"); ok { opts.Iops = attr.(int) opts.SetIops = true } if attr, ok := d.GetOk("port"); ok { opts.Port = attr.(int) opts.SetPort = true } if attr, ok := d.GetOk("multi_az"); ok { opts.MultiAZ = attr.(bool) } if attr, ok := d.GetOk("availability_zone"); ok { opts.AvailabilityZone = attr.(string) } if attr, ok := d.GetOk("maintenance_window"); ok { opts.PreferredMaintenanceWindow = attr.(string) } if attr, ok := d.GetOk("backup_window"); ok { opts.PreferredBackupWindow = attr.(string) } if attr, ok := d.GetOk("publicly_accessible"); ok { opts.PubliclyAccessible = attr.(bool) } if attr, ok := d.GetOk("db_subnet_group_name"); ok { opts.DBSubnetGroupName = attr.(string) } if attr, ok := d.GetOk("parameter_group_name"); ok { opts.DBParameterGroupName = attr.(string) } if attr := d.Get("vpc_security_group_ids").(*schema.Set); attr.Len() > 0 { var s []string for _, v := range attr.List() { s = append(s, v.(string)) } opts.VpcSecurityGroupIds = s } if attr := d.Get("security_group_names").(*schema.Set); attr.Len() > 0 { var s []string for _, v := range attr.List() { s = append(s, v.(string)) } opts.DBSecurityGroupNames = s } log.Printf("[DEBUG] DB Instance create configuration: %#v", opts) _, err := conn.CreateDBInstance(&opts) if err != nil { return fmt.Errorf("Error creating DB Instance: %s", err) } d.SetId(d.Get("identifier").(string)) log.Printf("[INFO] DB Instance ID: %s", d.Id()) log.Println( "[INFO] Waiting for DB Instance to be available") stateConf := &resource.StateChangeConf{ Pending: []string{"creating", "backing-up", "modifying"}, Target: "available", Refresh: resourceAwsDbInstanceStateRefreshFunc(d, meta), Timeout: 20 * time.Minute, MinTimeout: 10 * time.Second, Delay: 30 * time.Second, // Wait 30 secs before starting } // Wait, catching any errors _, err = stateConf.WaitForState() if err != nil { return err } return resourceAwsDbInstanceRead(d, meta) }