// Code generated by smithy-go-codegen DO NOT EDIT.

package rds

import (
	"context"
	"fmt"
	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
	"github.com/aws/aws-sdk-go-v2/service/rds/types"
	"github.com/aws/smithy-go/middleware"
	smithyhttp "github.com/aws/smithy-go/transport/http"
)

// Modifies settings for a DB instance. You can change one or more database
// configuration parameters by specifying these parameters and the new values in
// the request. To learn what modifications you can make to your DB instance, call
// DescribeValidDBInstanceModifications before you call ModifyDBInstance .
func (c *Client) ModifyDBInstance(ctx context.Context, params *ModifyDBInstanceInput, optFns ...func(*Options)) (*ModifyDBInstanceOutput, error) {
	if params == nil {
		params = &ModifyDBInstanceInput{}
	}

	result, metadata, err := c.invokeOperation(ctx, "ModifyDBInstance", params, optFns, c.addOperationModifyDBInstanceMiddlewares)
	if err != nil {
		return nil, err
	}

	out := result.(*ModifyDBInstanceOutput)
	out.ResultMetadata = metadata
	return out, nil
}

type ModifyDBInstanceInput struct {

	// The identifier of DB instance to modify. This value is stored as a lowercase
	// string.
	//
	// Constraints:
	//
	//   - Must match the identifier of an existing DB instance.
	//
	// This member is required.
	DBInstanceIdentifier *string

	// A list of additional storage volumes to modify or delete for the DB instance.
	// You can create up to 3 additional storage volumes. Additional storage volumes
	// are supported for RDS for Oracle and RDS for SQL Server DB instances only.
	AdditionalStorageVolumes []types.ModifyAdditionalStorageVolume

	// The new amount of storage in gibibytes (GiB) to allocate for the DB instance.
	//
	// For RDS for Db2, MariaDB, RDS for MySQL, RDS for Oracle, and RDS for
	// PostgreSQL, the value supplied must be at least 10% greater than the current
	// value. Values that are not at least 10% greater than the existing value are
	// rounded up so that they are 10% greater than the current value.
	//
	// For the valid values for allocated storage for each engine, see CreateDBInstance
	// .
	//
	// Constraints:
	//
	//   - When you increase the allocated storage for a DB instance that uses
	//   Provisioned IOPS ( gp3 , io1 , or io2 storage type), you must also specify the
	//   Iops parameter. You can use the current value for Iops .
	AllocatedStorage *int32

	// Specifies whether major version upgrades are allowed. Changing this parameter
	// doesn't result in an outage and the change is asynchronously applied as soon as
	// possible.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Constraints:
	//
	//   - Major version upgrades must be allowed when specifying a value for the
	//   EngineVersion parameter that's a different major version than the DB
	//   instance's current version.
	AllowMajorVersionUpgrade *bool

	// Specifies whether the modifications in this request and any pending
	// modifications are asynchronously applied as soon as possible, regardless of the
	// PreferredMaintenanceWindow setting for the DB instance. By default, this
	// parameter is disabled.
	//
	// If this parameter is disabled, changes to the DB instance are applied during
	// the next maintenance window. Some parameter changes can cause an outage and are
	// applied on the next call to RebootDBInstance, or the next failure reboot. Review the table of
	// parameters in [Modifying a DB Instance]in the Amazon RDS User Guide to see the impact of enabling or
	// disabling ApplyImmediately for each modified parameter and to determine when
	// the changes are applied.
	//
	// [Modifying a DB Instance]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html
	ApplyImmediately *bool

	// Specifies whether minor version upgrades are applied automatically to the DB
	// instance during the maintenance window. An outage occurs when all the following
	// conditions are met:
	//
	//   - The automatic upgrade is enabled for the maintenance window.
	//
	//   - A newer minor version is available.
	//
	//   - RDS has enabled automatic patching for the engine version.
	//
	// If any of the preceding conditions isn't met, Amazon RDS applies the change as
	// soon as possible and doesn't cause an outage.
	//
	// For an RDS Custom DB instance, don't enable this setting. Otherwise, the
	// operation returns an error.
	//
	// For more information about automatic minor version upgrades, see [Automatically upgrading the minor engine version].
	//
	// [Automatically upgrading the minor engine version]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades
	AutoMinorVersionUpgrade *bool

	// The automation mode of the RDS Custom DB instance. If full , the DB instance
	// automates monitoring and instance recovery. If all paused , the instance pauses
	// automation for the duration set by ResumeFullAutomationModeMinutes .
	AutomationMode types.AutomationMode

	// The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services
	// Backup.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	AwsBackupRecoveryPointArn *string

	// The number of days to retain automated backups. Setting this parameter to a
	// positive number enables backups. Setting this parameter to 0 disables automated
	// backups.
	//
	// Enabling and disabling backups can result in a brief I/O suspension that lasts
	// from a few seconds to a few minutes, depending on the size and class of your DB
	// instance.
	//
	// These changes are applied during the next maintenance window unless the
	// ApplyImmediately parameter is enabled for this request. If you change the
	// parameter from one non-zero value to another non-zero value, the change is
	// asynchronously applied as soon as possible.
	//
	// This setting doesn't apply to Amazon Aurora DB instances. The retention period
	// for automated backups is managed by the DB cluster. For more information, see
	// ModifyDBCluster .
	//
	// Default: Uses existing setting
	//
	// Constraints:
	//
	//   - Must be a value from 0 to 35.
	//
	//   - Can't be set to 0 if the DB instance is a source to read replicas.
	//
	//   - Can't be set to 0 for an RDS Custom for Oracle DB instance.
	BackupRetentionPeriod *int32

	// The CA certificate identifier to use for the DB instance's server certificate.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// For more information, see [Using SSL/TLS to encrypt a connection to a DB instance] in the Amazon RDS User Guide and [Using SSL/TLS to encrypt a connection to a DB cluster] in the Amazon
	// Aurora User Guide.
	//
	// [Using SSL/TLS to encrypt a connection to a DB cluster]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html
	// [Using SSL/TLS to encrypt a connection to a DB instance]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
	CACertificateIdentifier *string

	// Specifies whether the DB instance is restarted when you rotate your SSL/TLS
	// certificate.
	//
	// By default, the DB instance is restarted when you rotate your SSL/TLS
	// certificate. The certificate is not updated until the DB instance is restarted.
	//
	// Set this parameter only if you are not using SSL/TLS to connect to the DB
	// instance.
	//
	// If you are using SSL/TLS to connect to the DB instance, follow the appropriate
	// instructions for your DB engine to rotate your SSL/TLS certificate:
	//
	//   - For more information about rotating your SSL/TLS certificate for RDS DB
	//   engines, see [Rotating Your SSL/TLS Certificate.]in the Amazon RDS User Guide.
	//
	//   - For more information about rotating your SSL/TLS certificate for Aurora DB
	//   engines, see [Rotating Your SSL/TLS Certificate]in the Amazon Aurora User Guide.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// [Rotating Your SSL/TLS Certificate.]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html
	// [Rotating Your SSL/TLS Certificate]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL-certificate-rotation.html
	CertificateRotationRestart *bool

	// The log types to be enabled for export to CloudWatch Logs for a specific DB
	// instance.
	//
	// A change to the CloudwatchLogsExportConfiguration parameter is always applied
	// to the DB instance immediately. Therefore, the ApplyImmediately parameter has
	// no effect.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// The following values are valid for each DB engine:
	//
	//   - Aurora MySQL - audit | error | general | slowquery | iam-db-auth-error
	//
	//   - Aurora PostgreSQL - postgresql | iam-db-auth-error
	//
	//   - RDS for MySQL - error | general | slowquery | iam-db-auth-error
	//
	//   - RDS for PostgreSQL - postgresql | upgrade | iam-db-auth-error
	//
	// For more information about exporting CloudWatch Logs for Amazon RDS, see [Publishing Database Logs to Amazon CloudWatch Logs] in
	// the Amazon RDS User Guide.
	//
	// For more information about exporting CloudWatch Logs for Amazon Aurora, see [Publishing Database Logs to Amazon CloudWatch Logs] in
	// the Amazon Aurora User Guide.
	//
	// [Publishing Database Logs to Amazon CloudWatch Logs]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch
	CloudwatchLogsExportConfiguration *types.CloudwatchLogsExportConfiguration

	// Specifies whether to copy all tags from the DB instance to snapshots of the DB
	// instance. By default, tags aren't copied.
	//
	// This setting doesn't apply to Amazon Aurora DB instances. Copying tags to
	// snapshots is managed by the DB cluster. Setting this value for an Aurora DB
	// instance has no effect on the DB cluster setting. For more information, see
	// ModifyDBCluster .
	CopyTagsToSnapshot *bool

	// The new compute and memory capacity of the DB instance, for example db.m4.large
	// . Not all DB instance classes are available in all Amazon Web Services Regions,
	// or for all database engines. For the full list of DB instance classes, and
	// availability for your engine, see [DB Instance Class]in the Amazon RDS User Guide or [Aurora DB instance classes] in the
	// Amazon Aurora User Guide. For RDS Custom, see [DB instance class support for RDS Custom for Oracle]and [DB instance class support for RDS Custom for SQL Server].
	//
	// If you modify the DB instance class, an outage occurs during the change. The
	// change is applied during the next maintenance window, unless you specify
	// ApplyImmediately in your request.
	//
	// Default: Uses existing setting
	//
	// Constraints:
	//
	//   - If you are modifying the DB instance class and upgrading the engine version
	//   at the same time, the currently running engine version must be supported on the
	//   specified DB instance class. Otherwise, the operation returns an error. In this
	//   case, first run the operation to upgrade the engine version, and then run it
	//   again to modify the DB instance class.
	//
	// [Aurora DB instance classes]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html
	// [DB instance class support for RDS Custom for SQL Server]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits-MS.html#custom-reqs-limits.instancesMS
	// [DB instance class support for RDS Custom for Oracle]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits.html#custom-reqs-limits.instances
	// [DB Instance Class]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html
	DBInstanceClass *string

	// The name of the DB parameter group to apply to the DB instance.
	//
	// Changing this setting doesn't result in an outage. The parameter group name
	// itself is changed immediately, but the actual parameter changes are not applied
	// until you reboot the instance without failover. In this case, the DB instance
	// isn't rebooted automatically, and the parameter changes aren't applied during
	// the next maintenance window. However, if you modify dynamic parameters in the
	// newly associated DB parameter group, these changes are applied immediately
	// without a reboot.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Default: Uses existing setting
	//
	// Constraints:
	//
	//   - Must be in the same DB parameter group family as the DB instance.
	DBParameterGroupName *string

	// The port number on which the database accepts connections.
	//
	// The value of the DBPortNumber parameter must not match any of the port values
	// specified for options in the option group for the DB instance.
	//
	// If you change the DBPortNumber value, your database restarts regardless of the
	// value of the ApplyImmediately parameter.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Valid Values: 1150-65535
	//
	// Default:
	//
	//   - Amazon Aurora - 3306
	//
	//   - RDS for Db2 - 50000
	//
	//   - RDS for MariaDB - 3306
	//
	//   - RDS for Microsoft SQL Server - 1433
	//
	//   - RDS for MySQL - 3306
	//
	//   - RDS for Oracle - 1521
	//
	//   - RDS for PostgreSQL - 5432
	//
	// Constraints:
	//
	//   - For RDS for Microsoft SQL Server, the value can't be 1234 , 1434 , 3260 ,
	//   3343 , 3389 , 47001 , or 49152-49156 .
	DBPortNumber *int32

	// A list of DB security groups to authorize on this DB instance. Changing this
	// setting doesn't result in an outage and the change is asynchronously applied as
	// soon as possible.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Constraints:
	//
	//   - If supplied, must match existing DB security groups.
	DBSecurityGroups []string

	// The new DB subnet group for the DB instance. You can use this parameter to move
	// your DB instance to a different VPC. If your DB instance isn't in a VPC, you can
	// also use this parameter to move your DB instance into a VPC. For more
	// information, see [Working with a DB instance in a VPC]in the Amazon RDS User Guide.
	//
	// Changing the subnet group causes an outage during the change. The change is
	// applied during the next maintenance window, unless you enable ApplyImmediately .
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Constraints:
	//
	//   - If supplied, must match existing DB subnet group.
	//
	// Example: mydbsubnetgroup
	//
	// [Working with a DB instance in a VPC]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.Non-VPC2VPC
	DBSubnetGroupName *string

	// Specifies the mode of Database Insights to enable for the DB instance.
	//
	// Aurora DB instances inherit this value from the DB cluster, so you can't change
	// this value.
	DatabaseInsightsMode types.DatabaseInsightsMode

	// Indicates whether the DB instance has a dedicated log volume (DLV) enabled.
	DedicatedLogVolume *bool

	// Specifies whether the DB instance has deletion protection enabled. The database
	// can't be deleted when deletion protection is enabled. By default, deletion
	// protection isn't enabled. For more information, see [Deleting a DB Instance].
	//
	// This setting doesn't apply to Amazon Aurora DB instances. You can enable or
	// disable deletion protection for the DB cluster. For more information, see
	// ModifyDBCluster . DB instances in a DB cluster can be deleted even when deletion
	// protection is enabled for the DB cluster.
	//
	// [Deleting a DB Instance]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html
	DeletionProtection *bool

	// Specifies whether to remove the DB instance from the Active Directory domain.
	DisableDomain *bool

	// The Active Directory directory ID to move the DB instance to. Specify none to
	// remove the instance from its current domain. You must create the domain before
	// this operation. Currently, you can create only Db2, MySQL, Microsoft SQL Server,
	// Oracle, and PostgreSQL DB instances in an Active Directory Domain.
	//
	// For more information, see [Kerberos Authentication] in the Amazon RDS User Guide.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// [Kerberos Authentication]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-authentication.html
	Domain *string

	// The ARN for the Secrets Manager secret with the credentials for the user
	// joining the domain.
	//
	// Example:
	// arn:aws:secretsmanager:region:account-number:secret:myselfmanagedADtestsecret-123456
	DomainAuthSecretArn *string

	// The IPv4 DNS IP addresses of your primary and secondary Active Directory domain
	// controllers.
	//
	// Constraints:
	//
	//   - Two IP addresses must be provided. If there isn't a secondary domain
	//   controller, use the IP address of the primary domain controller for both entries
	//   in the list.
	//
	// Example: 123.124.125.126,234.235.236.237
	DomainDnsIps []string

	// The fully qualified domain name (FQDN) of an Active Directory domain.
	//
	// Constraints:
	//
	//   - Can't be longer than 64 characters.
	//
	// Example: mymanagedADtest.mymanagedAD.mydomain
	DomainFqdn *string

	// The name of the IAM role to use when making API calls to the Directory Service.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	DomainIAMRoleName *string

	// The Active Directory organizational unit for your DB instance to join.
	//
	// Constraints:
	//
	//   - Must be in the distinguished name format.
	//
	// Example: OU=mymanagedADtestOU,DC=mymanagedADtest,DC=mymanagedAD,DC=mydomain
	DomainOu *string

	// Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on
	// Outposts DB instance.
	//
	// A CoIP provides local or external connectivity to resources in your Outpost
	// subnets through your on-premises network. For some use cases, a CoIP can provide
	// lower latency for connections to the DB instance from outside of its virtual
	// private cloud (VPC) on your local network.
	//
	// For more information about RDS on Outposts, see [Working with Amazon RDS on Amazon Web Services Outposts] in the Amazon RDS User Guide.
	//
	// For more information about CoIPs, see [Customer-owned IP addresses] in the Amazon Web Services Outposts User
	// Guide.
	//
	// [Working with Amazon RDS on Amazon Web Services Outposts]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html
	// [Customer-owned IP addresses]: https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing
	EnableCustomerOwnedIp *bool

	// Specifies whether to enable mapping of Amazon Web Services Identity and Access
	// Management (IAM) accounts to database accounts. By default, mapping isn't
	// enabled.
	//
	// This setting doesn't apply to Amazon Aurora. Mapping Amazon Web Services IAM
	// accounts to database accounts is managed by the DB cluster.
	//
	// For more information about IAM database authentication, see [IAM Database Authentication for MySQL and PostgreSQL] in the Amazon RDS
	// User Guide.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// [IAM Database Authentication for MySQL and PostgreSQL]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
	EnableIAMDatabaseAuthentication *bool

	// Specifies whether to enable Performance Insights for the DB instance.
	//
	// For more information, see [Using Amazon Performance Insights] in the Amazon RDS User Guide.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// [Using Amazon Performance Insights]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html
	EnablePerformanceInsights *bool

	// The target Oracle DB engine when you convert a non-CDB to a CDB. This
	// intermediate step is necessary to upgrade an Oracle Database 19c non-CDB to an
	// Oracle Database 21c CDB.
	//
	// Note the following requirements:
	//
	//   - Make sure that you specify oracle-ee-cdb or oracle-se2-cdb .
	//
	//   - Make sure that your DB engine runs Oracle Database 19c with an April 2021
	//   or later RU.
	//
	// Note the following limitations:
	//
	//   - You can't convert a CDB to a non-CDB.
	//
	//   - You can't convert a replica database.
	//
	//   - You can't convert a non-CDB to a CDB and upgrade the engine version in the
	//   same command.
	//
	//   - You can't convert the existing custom parameter or option group when it has
	//   options or parameters that are permanent or persistent. In this situation, the
	//   DB instance reverts to the default option and parameter group. To avoid
	//   reverting to the default, specify a new parameter group with
	//   --db-parameter-group-name and a new option group with --option-group-name .
	Engine *string

	// The version number of the database engine to upgrade to. Changing this
	// parameter results in an outage and the change is applied during the next
	// maintenance window unless the ApplyImmediately parameter is enabled for this
	// request.
	//
	// For major version upgrades, if a nondefault DB parameter group is currently in
	// use, a new DB parameter group in the DB parameter group family for the new
	// engine version must be specified. The new DB parameter group can be the default
	// for that DB parameter group family.
	//
	// If you specify only a major version, Amazon RDS updates the DB instance to the
	// default minor version if the current minor version is lower. For information
	// about valid engine versions, see CreateDBInstance , or call
	// DescribeDBEngineVersions .
	//
	// If the instance that you're modifying is acting as a read replica, the engine
	// version that you specify must be the same or higher than the version that the
	// source DB instance or cluster is running.
	//
	// In RDS Custom for Oracle, this parameter is supported for read replicas only if
	// they are in the PATCH_DB_FAILURE lifecycle.
	//
	// Constraints:
	//
	//   - If you are upgrading the engine version and modifying the DB instance class
	//   at the same time, the currently running engine version must be supported on the
	//   specified DB instance class. Otherwise, the operation returns an error. In this
	//   case, first run the operation to upgrade the engine version, and then run it
	//   again to modify the DB instance class.
	EngineVersion *string

	// The new Provisioned IOPS (I/O operations per second) value for the RDS instance.
	//
	// Changing this setting doesn't result in an outage and the change is applied
	// during the next maintenance window unless the ApplyImmediately parameter is
	// enabled for this request. If you are migrating from Provisioned IOPS to standard
	// storage, set this value to 0. The DB instance will require a reboot for the
	// change in storage type to take effect.
	//
	// If you choose to migrate your DB instance from using standard storage to
	// Provisioned IOPS (io1), or from Provisioned IOPS to standard storage, the
	// process can take time. The duration of the migration depends on several factors
	// such as database load, storage size, storage type (standard or Provisioned
	// IOPS), amount of IOPS provisioned (if any), and the number of prior scale
	// storage operations. Typical migration times are under 24 hours, but the process
	// can take up to several days in some cases. During the migration, the DB instance
	// is available for use, but might experience performance degradation. While the
	// migration takes place, nightly backups for the instance are suspended. No other
	// Amazon RDS operations can take place for the instance, including modifying the
	// instance, rebooting the instance, deleting the instance, creating a read replica
	// for the instance, and creating a DB snapshot of the instance.
	//
	// Constraints:
	//
	//   - For RDS for MariaDB, RDS for MySQL, RDS for Oracle, and RDS for PostgreSQL
	//   - The value supplied must be at least 10% greater than the current value. Values
	//   that are not at least 10% greater than the existing value are rounded up so that
	//   they are 10% greater than the current value.
	//
	//   - When you increase the Provisioned IOPS, you must also specify the
	//   AllocatedStorage parameter. You can use the current value for AllocatedStorage
	//   .
	//
	// Default: Uses existing setting
	Iops *int32

	// The license model for the DB instance.
	//
	// This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.
	//
	// Valid Values:
	//
	//   - RDS for Db2 - bring-your-own-license
	//
	//   - RDS for MariaDB - general-public-license
	//
	//   - RDS for Microsoft SQL Server - license-included
	//
	//   - RDS for MySQL - general-public-license
	//
	//   - RDS for Oracle - bring-your-own-license | license-included
	//
	//   - RDS for PostgreSQL - postgresql-license
	LicenseModel *string

	// Specifies whether to manage the master user password with Amazon Web Services
	// Secrets Manager.
	//
	// If the DB instance doesn't manage the master user password with Amazon Web
	// Services Secrets Manager, you can turn on this management. In this case, you
	// can't specify MasterUserPassword .
	//
	// If the DB instance already manages the master user password with Amazon Web
	// Services Secrets Manager, and you specify that the master user password is not
	// managed with Amazon Web Services Secrets Manager, then you must specify
	// MasterUserPassword . In this case, Amazon RDS deletes the secret and uses the
	// new password for the master user specified by MasterUserPassword .
	//
	// For more information, see [Password management with Amazon Web Services Secrets Manager] in the Amazon RDS User Guide.
	//
	// Constraints:
	//
	//   - Can't manage the master user password with Amazon Web Services Secrets
	//   Manager if MasterUserPassword is specified.
	//
	//   - Can't specify for RDS for Oracle CDB instances in the multi-tenant
	//   configuration. Use ModifyTenantDatabase instead.
	//
	//   - Can't specify the parameters ManageMasterUserPassword and MultiTenant in the
	//   same operation.
	//
	// [Password management with Amazon Web Services Secrets Manager]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html
	ManageMasterUserPassword *bool

	// Specifies the authentication type for the master user. With IAM master user
	// authentication, you can change the master DB user to use IAM database
	// authentication.
	//
	// You can specify one of the following values:
	//
	//   - password - Use standard database authentication with a password.
	//
	//   - iam-db-auth - Use IAM database authentication for the master user.
	//
	// This option is only valid for RDS for PostgreSQL and Aurora PostgreSQL engines.
	MasterUserAuthenticationType types.MasterUserAuthenticationType

	// The new password for the master user.
	//
	// Changing this parameter doesn't result in an outage and the change is
	// asynchronously applied as soon as possible. Between the time of the request and
	// the completion of the request, the MasterUserPassword element exists in the
	// PendingModifiedValues element of the operation response.
	//
	// Amazon RDS API operations never return the password, so this operation provides
	// a way to regain access to a primary instance user if the password is lost. This
	// includes restoring privileges that might have been accidentally revoked.
	//
	// This setting doesn't apply to the following DB instances:
	//
	//   - Amazon Aurora
	//
	// The password for the master user is managed by the DB cluster. For more
	//   information, see ModifyDBCluster .
	//
	//   - RDS Custom
	//
	//   - RDS for Oracle CDBs in the multi-tenant configuration
	//
	// Specify the master password in ModifyTenantDatabase instead.
	//
	// Default: Uses existing setting
	//
	// Constraints:
	//
	//   - Can't be specified if ManageMasterUserPassword is turned on.
	//
	//   - Can include any printable ASCII character except "/", """, or "@". For RDS
	//   for Oracle, can't include the "&" (ampersand) or the "'" (single quotes)
	//   character.
	//
	// Length Constraints:
	//
	//   - RDS for Db2 - Must contain from 8 to 255 characters.
	//
	//   - RDS for MariaDB - Must contain from 8 to 41 characters.
	//
	//   - RDS for Microsoft SQL Server - Must contain from 8 to 128 characters.
	//
	//   - RDS for MySQL - Must contain from 8 to 41 characters.
	//
	//   - RDS for Oracle - Must contain from 8 to 30 characters.
	//
	//   - RDS for PostgreSQL - Must contain from 8 to 128 characters.
	MasterUserPassword *string

	// The Amazon Web Services KMS key identifier to encrypt a secret that is
	// automatically generated and managed in Amazon Web Services Secrets Manager.
	//
	// This setting is valid only if both of the following conditions are met:
	//
	//   - The DB instance doesn't manage the master user password in Amazon Web
	//   Services Secrets Manager.
	//
	// If the DB instance already manages the master user password in Amazon Web
	//   Services Secrets Manager, you can't change the KMS key used to encrypt the
	//   secret.
	//
	//   - You are turning on ManageMasterUserPassword to manage the master user
	//   password in Amazon Web Services Secrets Manager.
	//
	// If you are turning on ManageMasterUserPassword and don't specify
	//   MasterUserSecretKmsKeyId , then the aws/secretsmanager KMS key is used to
	//   encrypt the secret. If the secret is in a different Amazon Web Services account,
	//   then you can't use the aws/secretsmanager KMS key to encrypt the secret, and
	//   you must use a customer managed KMS key.
	//
	// The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN,
	// or alias name for the KMS key. To use a KMS key in a different Amazon Web
	// Services account, specify the key ARN or alias ARN.
	//
	// There is a default KMS key for your Amazon Web Services account. Your Amazon
	// Web Services account has a different default KMS key for each Amazon Web
	// Services Region.
	MasterUserSecretKmsKeyId *string

	// The upper limit in gibibytes (GiB) to which Amazon RDS can automatically scale
	// the storage of the DB instance.
	//
	// For more information about this setting, including limitations that apply to
	// it, see [Managing capacity automatically with Amazon RDS storage autoscaling]in the Amazon RDS User Guide.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// [Managing capacity automatically with Amazon RDS storage autoscaling]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling
	MaxAllocatedStorage *int32

	// The interval, in seconds, between points when Enhanced Monitoring metrics are
	// collected for the DB instance. To disable collection of Enhanced Monitoring
	// metrics, specify 0 .
	//
	// If MonitoringRoleArn is specified, set MonitoringInterval to a value other than
	// 0 .
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Valid Values: 0 | 1 | 5 | 10 | 15 | 30 | 60
	//
	// Default: 0
	MonitoringInterval *int32

	// The ARN for the IAM role that permits RDS to send enhanced monitoring metrics
	// to Amazon CloudWatch Logs. For example, arn:aws:iam:123456789012:role/emaccess .
	// For information on creating a monitoring role, see [To create an IAM role for Amazon RDS Enhanced Monitoring]in the Amazon RDS User
	// Guide.
	//
	// If MonitoringInterval is set to a value other than 0 , supply a
	// MonitoringRoleArn value.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// [To create an IAM role for Amazon RDS Enhanced Monitoring]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.html#USER_Monitoring.OS.IAMRole
	MonitoringRoleArn *string

	// Specifies whether the DB instance is a Multi-AZ deployment. Changing this
	// parameter doesn't result in an outage. The change is applied during the next
	// maintenance window unless the ApplyImmediately parameter is enabled for this
	// request.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	MultiAZ *bool

	// Specifies whether the to convert your DB instance from the single-tenant
	// conﬁguration to the multi-tenant conﬁguration. This parameter is supported only
	// for RDS for Oracle CDB instances.
	//
	// During the conversion, RDS creates an initial tenant database and associates
	// the DB name, master user name, character set, and national character set
	// metadata with this database. The tags associated with the instance also
	// propagate to the initial tenant database. You can add more tenant databases to
	// your DB instance by using the CreateTenantDatabase operation.
	//
	// The conversion to the multi-tenant configuration is permanent and irreversible,
	// so you can't later convert back to the single-tenant configuration. When you
	// specify this parameter, you must also specify ApplyImmediately .
	MultiTenant *bool

	// The network type of the DB instance.
	//
	// The network type is determined by the DBSubnetGroup specified for the DB
	// instance. A DBSubnetGroup can support only the IPv4 protocol or the IPv4 and
	// the IPv6 protocols ( DUAL ).
	//
	// For more information, see [Working with a DB instance in a VPC] in the Amazon RDS User Guide.
	//
	// Valid Values: IPV4 | DUAL
	//
	// [Working with a DB instance in a VPC]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html
	NetworkType *string

	// The new identifier for the DB instance when renaming a DB instance. When you
	// change the DB instance identifier, an instance reboot occurs immediately if you
	// enable ApplyImmediately , or will occur during the next maintenance window if
	// you disable ApplyImmediately . This value is stored as a lowercase string.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Constraints:
	//
	//   - Must contain from 1 to 63 letters, numbers, or hyphens.
	//
	//   - The first character must be a letter.
	//
	//   - Can't end with a hyphen or contain two consecutive hyphens.
	//
	// Example: mydbinstance
	NewDBInstanceIdentifier *string

	// The option group to associate the DB instance with.
	//
	// Changing this parameter doesn't result in an outage, with one exception. If the
	// parameter change results in an option group that enables OEM, it can cause a
	// brief period, lasting less than a second, during which new connections are
	// rejected but existing connections aren't interrupted.
	//
	// The change is applied during the next maintenance window unless the
	// ApplyImmediately parameter is enabled for this request.
	//
	// Permanent options, such as the TDE option for Oracle Advanced Security TDE,
	// can't be removed from an option group, and that option group can't be removed
	// from a DB instance after it is associated with a DB instance.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	OptionGroupName *string

	// The Amazon Web Services KMS key identifier for encryption of Performance
	// Insights data.
	//
	// The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN,
	// or alias name for the KMS key.
	//
	// If you don't specify a value for PerformanceInsightsKMSKeyId , then Amazon RDS
	// uses your default KMS key. There is a default KMS key for your Amazon Web
	// Services account. Your Amazon Web Services account has a different default KMS
	// key for each Amazon Web Services Region.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	PerformanceInsightsKMSKeyId *string

	// The number of days to retain Performance Insights data.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Valid Values:
	//
	//   - 7
	//
	//   - month * 31, where month is a number of months from 1-23. Examples: 93 (3
	//   months * 31), 341 (11 months * 31), 589 (19 months * 31)
	//
	//   - 731
	//
	// Default: 7 days
	//
	// If you specify a retention period that isn't valid, such as 94 , Amazon RDS
	// returns an error.
	PerformanceInsightsRetentionPeriod *int32

	// The daily time range during which automated backups are created if automated
	// backups are enabled, as determined by the BackupRetentionPeriod parameter.
	// Changing this parameter doesn't result in an outage and the change is
	// asynchronously applied as soon as possible. The default is a 30-minute window
	// selected at random from an 8-hour block of time for each Amazon Web Services
	// Region. For more information, see [Backup window]in the Amazon RDS User Guide.
	//
	// This setting doesn't apply to Amazon Aurora DB instances. The daily time range
	// for creating automated backups is managed by the DB cluster. For more
	// information, see ModifyDBCluster .
	//
	// Constraints:
	//
	//   - Must be in the format hh24:mi-hh24:mi .
	//
	//   - Must be in Universal Coordinated Time (UTC).
	//
	//   - Must not conflict with the preferred maintenance window.
	//
	//   - Must be at least 30 minutes.
	//
	// [Backup window]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupWindow
	PreferredBackupWindow *string

	// The weekly time range during which system maintenance can occur, which might
	// result in an outage. Changing this parameter doesn't result in an outage, except
	// in the following situation, and the change is asynchronously applied as soon as
	// possible. If there are pending actions that cause a reboot, and the maintenance
	// window is changed to include the current time, then changing this parameter
	// causes a reboot of the DB instance. If you change this window to the current
	// time, there must be at least 30 minutes between the current time and end of the
	// window to ensure pending changes are applied.
	//
	// For more information, see [Amazon RDS Maintenance Window] in the Amazon RDS User Guide.
	//
	// Default: Uses existing setting
	//
	// Constraints:
	//
	//   - Must be in the format ddd:hh24:mi-ddd:hh24:mi .
	//
	//   - The day values must be mon | tue | wed | thu | fri | sat | sun .
	//
	//   - Must be in Universal Coordinated Time (UTC).
	//
	//   - Must not conflict with the preferred backup window.
	//
	//   - Must be at least 30 minutes.
	//
	// [Amazon RDS Maintenance Window]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#Concepts.DBMaintenance
	PreferredMaintenanceWindow *string

	// The number of CPU cores and the number of threads per core for the DB instance
	// class of the DB instance.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	ProcessorFeatures []types.ProcessorFeature

	// The order of priority in which an Aurora Replica is promoted to the primary
	// instance after a failure of the existing primary instance. For more information,
	// see [Fault Tolerance for an Aurora DB Cluster]in the Amazon Aurora User Guide.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	//
	// Default: 1
	//
	// Valid Values: 0 - 15
	//
	// [Fault Tolerance for an Aurora DB Cluster]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html#Aurora.Managing.FaultTolerance
	PromotionTier *int32

	// Specifies whether the DB instance is publicly accessible.
	//
	// When the DB instance is publicly accessible and you connect from outside of the
	// DB instance's virtual private cloud (VPC), its Domain Name System (DNS) endpoint
	// resolves to the public IP address. When you connect from within the same VPC as
	// the DB instance, the endpoint resolves to the private IP address. Access to the
	// DB instance is ultimately controlled by the security group it uses. That public
	// access isn't permitted if the security group assigned to the DB instance doesn't
	// permit it.
	//
	// When the DB instance isn't publicly accessible, it is an internal DB instance
	// with a DNS name that resolves to a private IP address.
	//
	// PubliclyAccessible only applies to DB instances in a VPC. The DB instance must
	// be part of a public subnet and PubliclyAccessible must be enabled for it to be
	// publicly accessible.
	//
	// Changes to the PubliclyAccessible parameter are applied immediately regardless
	// of the value of the ApplyImmediately parameter.
	PubliclyAccessible *bool

	// The open mode of a replica database.
	//
	// This parameter is only supported for Db2 DB instances and Oracle DB instances.
	//
	// Db2 Standby DB replicas are included in Db2 Advanced Edition (AE) and Db2
	// Standard Edition (SE). The main use case for standby replicas is cross-Region
	// disaster recovery. Because it doesn't accept user connections, a standby replica
	// can't serve a read-only workload.
	//
	// You can create a combination of standby and read-only DB replicas for the same
	// primary DB instance. For more information, see [Working with replicas for Amazon RDS for Db2]in the Amazon RDS User Guide.
	//
	// To create standby DB replicas for RDS for Db2, set this parameter to mounted .
	//
	// Oracle Mounted DB replicas are included in Oracle Database Enterprise Edition.
	// The main use case for mounted replicas is cross-Region disaster recovery. The
	// primary database doesn't use Active Data Guard to transmit information to the
	// mounted replica. Because it doesn't accept user connections, a mounted replica
	// can't serve a read-only workload.
	//
	// You can create a combination of mounted and read-only DB replicas for the same
	// primary DB instance. For more information, see [Working with read replicas for Amazon RDS for Oracle]in the Amazon RDS User Guide.
	//
	// For RDS Custom, you must specify this parameter and set it to mounted . The
	// value won't be set by default. After replica creation, you can manage the open
	// mode manually.
	//
	// [Working with replicas for Amazon RDS for Db2]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-replication.html
	// [Working with read replicas for Amazon RDS for Oracle]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html
	ReplicaMode types.ReplicaMode

	// The number of minutes to pause the automation. When the time period ends, RDS
	// Custom resumes full automation.
	//
	// Default: 60
	//
	// Constraints:
	//
	//   - Must be at least 60.
	//
	//   - Must be no more than 1,440.
	ResumeFullAutomationModeMinutes *int32

	// Specifies whether to rotate the secret managed by Amazon Web Services Secrets
	// Manager for the master user password.
	//
	// This setting is valid only if the master user password is managed by RDS in
	// Amazon Web Services Secrets Manager for the DB instance. The secret value
	// contains the updated password.
	//
	// For more information, see [Password management with Amazon Web Services Secrets Manager] in the Amazon RDS User Guide.
	//
	// Constraints:
	//
	//   - You must apply the change immediately when rotating the master user
	//   password.
	//
	// [Password management with Amazon Web Services Secrets Manager]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html
	RotateMasterUserPassword *bool

	// The storage throughput value for the DB instance.
	//
	// This setting applies only to the gp3 storage type.
	//
	// This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.
	StorageThroughput *int32

	// The storage type to associate with the DB instance.
	//
	// If you specify io1 , io2 , or gp3 you must also include a value for the Iops
	// parameter.
	//
	// If you choose to migrate your DB instance from using standard storage to gp2
	// (General Purpose SSD), gp3, or Provisioned IOPS (io1), or from these storage
	// types to standard storage, the process can take time. The duration of the
	// migration depends on several factors such as database load, storage size,
	// storage type (standard or Provisioned IOPS), amount of IOPS provisioned (if
	// any), and the number of prior scale storage operations. Typical migration times
	// are under 24 hours, but the process can take up to several days in some cases.
	// During the migration, the DB instance is available for use, but might experience
	// performance degradation. While the migration takes place, nightly backups for
	// the instance are suspended. No other Amazon RDS operations can take place for
	// the instance, including modifying the instance, rebooting the instance, deleting
	// the instance, creating a read replica for the instance, and creating a DB
	// snapshot of the instance.
	//
	// Valid Values: gp2 | gp3 | io1 | io2 | standard
	//
	// Default: io1 , if the Iops parameter is specified. Otherwise, gp2 .
	StorageType *string

	// Tags to assign to resources associated with the DB instance.
	//
	// Valid Values:
	//
	//   - auto-backup - The DB instance's automated backup.
	TagSpecifications []types.TagSpecification

	// The ARN from the key store with which to associate the instance for TDE
	// encryption.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	TdeCredentialArn *string

	// The password for the given ARN from the key store in order to access the device.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	TdeCredentialPassword *string

	// Specifies whether the DB instance class of the DB instance uses its default
	// processor features.
	//
	// This setting doesn't apply to RDS Custom DB instances.
	UseDefaultProcessorFeatures *bool

	// A list of Amazon EC2 VPC security groups to associate with this DB instance.
	// This change is asynchronously applied as soon as possible.
	//
	// This setting doesn't apply to the following DB instances:
	//
	//   - Amazon Aurora (The associated list of EC2 VPC security groups is managed by
	//   the DB cluster. For more information, see ModifyDBCluster .)
	//
	//   - RDS Custom
	//
	// Constraints:
	//
	//   - If supplied, must match existing VPC security group IDs.
	VpcSecurityGroupIds []string

	noSmithyDocumentSerde
}

type ModifyDBInstanceOutput struct {

	// Contains the details of an Amazon RDS DB instance.
	//
	// This data type is used as a response element in the operations CreateDBInstance
	// , CreateDBInstanceReadReplica , DeleteDBInstance , DescribeDBInstances ,
	// ModifyDBInstance , PromoteReadReplica , RebootDBInstance ,
	// RestoreDBInstanceFromDBSnapshot , RestoreDBInstanceFromS3 ,
	// RestoreDBInstanceToPointInTime , StartDBInstance , and StopDBInstance .
	DBInstance *types.DBInstance

	// Metadata pertaining to the operation's result.
	ResultMetadata middleware.Metadata

	noSmithyDocumentSerde
}

func (c *Client) addOperationModifyDBInstanceMiddlewares(stack *middleware.Stack, options Options) (err error) {
	if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
		return err
	}
	err = stack.Serialize.Add(&awsAwsquery_serializeOpModifyDBInstance{}, middleware.After)
	if err != nil {
		return err
	}
	err = stack.Deserialize.Add(&awsAwsquery_deserializeOpModifyDBInstance{}, middleware.After)
	if err != nil {
		return err
	}
	if err := addProtocolFinalizerMiddlewares(stack, options, "ModifyDBInstance"); err != nil {
		return fmt.Errorf("add protocol finalizers: %v", err)
	}

	if err = addlegacyEndpointContextSetter(stack, options); err != nil {
		return err
	}
	if err = addSetLoggerMiddleware(stack, options); err != nil {
		return err
	}
	if err = addClientRequestID(stack); err != nil {
		return err
	}
	if err = addComputeContentLength(stack); err != nil {
		return err
	}
	if err = addResolveEndpointMiddleware(stack, options); err != nil {
		return err
	}
	if err = addComputePayloadSHA256(stack); err != nil {
		return err
	}
	if err = addRetry(stack, options, c); err != nil {
		return err
	}
	if err = addRawResponseToMetadata(stack); err != nil {
		return err
	}
	if err = addRecordResponseTiming(stack); err != nil {
		return err
	}
	if err = addSpanRetryLoop(stack, options); err != nil {
		return err
	}
	if err = addClientUserAgent(stack, options); err != nil {
		return err
	}
	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
		return err
	}
	if err = addUserAgentRetryMode(stack, options); err != nil {
		return err
	}
	if err = addCredentialSource(stack, options); err != nil {
		return err
	}
	if err = addOpModifyDBInstanceValidationMiddleware(stack); err != nil {
		return err
	}
	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opModifyDBInstance(options.Region), middleware.Before); err != nil {
		return err
	}
	if err = addRecursionDetection(stack); err != nil {
		return err
	}
	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
		return err
	}
	if err = addResponseErrorMiddleware(stack); err != nil {
		return err
	}
	if err = addRequestResponseLogging(stack, options); err != nil {
		return err
	}
	if err = addDisableHTTPSMiddleware(stack, options); err != nil {
		return err
	}
	if err = addInterceptBeforeRetryLoop(stack, options); err != nil {
		return err
	}
	if err = addInterceptAttempt(stack, options); err != nil {
		return err
	}
	if err = addInterceptors(stack, options); err != nil {
		return err
	}
	return nil
}

func newServiceMetadataMiddleware_opModifyDBInstance(region string) *awsmiddleware.RegisterServiceMetadata {
	return &awsmiddleware.RegisterServiceMetadata{
		Region:        region,
		ServiceID:     ServiceID,
		OperationName: "ModifyDBInstance",
	}
}
