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)
}