All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.aws.rds.InstanceArgs Maven / Gradle / Ivy

// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.rds;

import com.pulumi.aws.rds.enums.InstanceType;
import com.pulumi.aws.rds.enums.StorageType;
import com.pulumi.aws.rds.inputs.InstanceBlueGreenUpdateArgs;
import com.pulumi.aws.rds.inputs.InstanceRestoreToPointInTimeArgs;
import com.pulumi.aws.rds.inputs.InstanceS3ImportArgs;
import com.pulumi.core.Either;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.exceptions.MissingRequiredPropertyException;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class InstanceArgs extends com.pulumi.resources.ResourceArgs {

    public static final InstanceArgs Empty = new InstanceArgs();

    /**
     * The allocated storage in gibibytes. If `max_allocated_storage` is configured, this argument represents the initial storage allocation and differences from the configuration will be ignored automatically when Storage Autoscaling occurs. If `replicate_source_db` is set, the value is ignored during the creation of the instance.
     * 
     */
    @Import(name="allocatedStorage")
    private @Nullable Output allocatedStorage;

    /**
     * @return The allocated storage in gibibytes. If `max_allocated_storage` is configured, this argument represents the initial storage allocation and differences from the configuration will be ignored automatically when Storage Autoscaling occurs. If `replicate_source_db` is set, the value is ignored during the creation of the instance.
     * 
     */
    public Optional> allocatedStorage() {
        return Optional.ofNullable(this.allocatedStorage);
    }

    /**
     * Indicates that major version
     * upgrades are allowed. Changing this parameter does not result in an outage and
     * the change is asynchronously applied as soon as possible.
     * 
     */
    @Import(name="allowMajorVersionUpgrade")
    private @Nullable Output allowMajorVersionUpgrade;

    /**
     * @return Indicates that major version
     * upgrades are allowed. Changing this parameter does not result in an outage and
     * the change is asynchronously applied as soon as possible.
     * 
     */
    public Optional> allowMajorVersionUpgrade() {
        return Optional.ofNullable(this.allowMajorVersionUpgrade);
    }

    /**
     * Specifies whether any database modifications
     * are applied immediately, or during the next maintenance window. Default is
     * `false`. See [Amazon RDS Documentation for more
     * information.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)
     * 
     */
    @Import(name="applyImmediately")
    private @Nullable Output applyImmediately;

    /**
     * @return Specifies whether any database modifications
     * are applied immediately, or during the next maintenance window. Default is
     * `false`. See [Amazon RDS Documentation for more
     * information.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)
     * 
     */
    public Optional> applyImmediately() {
        return Optional.ofNullable(this.applyImmediately);
    }

    /**
     * Indicates that minor engine upgrades
     * will be applied automatically to the DB instance during the maintenance window.
     * Defaults to true.
     * 
     */
    @Import(name="autoMinorVersionUpgrade")
    private @Nullable Output autoMinorVersionUpgrade;

    /**
     * @return Indicates that minor engine upgrades
     * will be applied automatically to the DB instance during the maintenance window.
     * Defaults to true.
     * 
     */
    public Optional> autoMinorVersionUpgrade() {
        return Optional.ofNullable(this.autoMinorVersionUpgrade);
    }

    /**
     * The AZ for the RDS instance.
     * 
     */
    @Import(name="availabilityZone")
    private @Nullable Output availabilityZone;

    /**
     * @return The AZ for the RDS instance.
     * 
     */
    public Optional> availabilityZone() {
        return Optional.ofNullable(this.availabilityZone);
    }

    /**
     * The days to retain backups for.
     * Must be between `0` and `35`.
     * Default is `0`.
     * Must be greater than `0` if the database is used as a source for a [Read Replica][instance-replication],
     * uses low-downtime updates,
     * or will use [RDS Blue/Green deployments][blue-green].
     * 
     */
    @Import(name="backupRetentionPeriod")
    private @Nullable Output backupRetentionPeriod;

    /**
     * @return The days to retain backups for.
     * Must be between `0` and `35`.
     * Default is `0`.
     * Must be greater than `0` if the database is used as a source for a [Read Replica][instance-replication],
     * uses low-downtime updates,
     * or will use [RDS Blue/Green deployments][blue-green].
     * 
     */
    public Optional> backupRetentionPeriod() {
        return Optional.ofNullable(this.backupRetentionPeriod);
    }

    /**
     * Specifies where automated backups and manual snapshots are stored. Possible values are `region` (default) and `outposts`. See [Working with Amazon RDS on AWS Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html) for more information.
     * 
     */
    @Import(name="backupTarget")
    private @Nullable Output backupTarget;

    /**
     * @return Specifies where automated backups and manual snapshots are stored. Possible values are `region` (default) and `outposts`. See [Working with Amazon RDS on AWS Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html) for more information.
     * 
     */
    public Optional> backupTarget() {
        return Optional.ofNullable(this.backupTarget);
    }

    /**
     * The daily time range (in UTC) during which automated backups are created if they are enabled.
     * Example: "09:46-10:16". Must not overlap with `maintenance_window`.
     * 
     */
    @Import(name="backupWindow")
    private @Nullable Output backupWindow;

    /**
     * @return The daily time range (in UTC) during which automated backups are created if they are enabled.
     * Example: "09:46-10:16". Must not overlap with `maintenance_window`.
     * 
     */
    public Optional> backupWindow() {
        return Optional.ofNullable(this.backupWindow);
    }

    /**
     * Enables low-downtime updates using [RDS Blue/Green deployments][blue-green].
     * See `blue_green_update` below.
     * 
     */
    @Import(name="blueGreenUpdate")
    private @Nullable Output blueGreenUpdate;

    /**
     * @return Enables low-downtime updates using [RDS Blue/Green deployments][blue-green].
     * See `blue_green_update` below.
     * 
     */
    public Optional> blueGreenUpdate() {
        return Optional.ofNullable(this.blueGreenUpdate);
    }

    /**
     * The identifier of the CA certificate for the DB instance.
     * 
     */
    @Import(name="caCertIdentifier")
    private @Nullable Output caCertIdentifier;

    /**
     * @return The identifier of the CA certificate for the DB instance.
     * 
     */
    public Optional> caCertIdentifier() {
        return Optional.ofNullable(this.caCertIdentifier);
    }

    /**
     * The character set name to use for DB encoding in Oracle and Microsoft SQL instances (collation).
     * This can't be changed.
     * See [Oracle Character Sets Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html) or
     * [Server-Level Collation for Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) for more information.
     * Cannot be set  with `replicate_source_db`, `restore_to_point_in_time`, `s3_import`, or `snapshot_identifier`.
     * 
     */
    @Import(name="characterSetName")
    private @Nullable Output characterSetName;

    /**
     * @return The character set name to use for DB encoding in Oracle and Microsoft SQL instances (collation).
     * This can't be changed.
     * See [Oracle Character Sets Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html) or
     * [Server-Level Collation for Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) for more information.
     * Cannot be set  with `replicate_source_db`, `restore_to_point_in_time`, `s3_import`, or `snapshot_identifier`.
     * 
     */
    public Optional> characterSetName() {
        return Optional.ofNullable(this.characterSetName);
    }

    /**
     * Copy all Instance `tags` to snapshots. Default is `false`.
     * 
     */
    @Import(name="copyTagsToSnapshot")
    private @Nullable Output copyTagsToSnapshot;

    /**
     * @return Copy all Instance `tags` to snapshots. Default is `false`.
     * 
     */
    public Optional> copyTagsToSnapshot() {
        return Optional.ofNullable(this.copyTagsToSnapshot);
    }

    /**
     * The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.
     * 
     */
    @Import(name="customIamInstanceProfile")
    private @Nullable Output customIamInstanceProfile;

    /**
     * @return The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.
     * 
     */
    public Optional> customIamInstanceProfile() {
        return Optional.ofNullable(this.customIamInstanceProfile);
    }

    /**
     * Indicates whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance. See [CoIP for RDS on Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html#rds-on-outposts.coip) for more information.
     * 
     * > **NOTE:** Removing the `replicate_source_db` attribute from an existing RDS
     * Replicate database managed by the provider will promote the database to a fully
     * standalone database.
     * 
     */
    @Import(name="customerOwnedIpEnabled")
    private @Nullable Output customerOwnedIpEnabled;

    /**
     * @return Indicates whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance. See [CoIP for RDS on Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html#rds-on-outposts.coip) for more information.
     * 
     * > **NOTE:** Removing the `replicate_source_db` attribute from an existing RDS
     * Replicate database managed by the provider will promote the database to a fully
     * standalone database.
     * 
     */
    public Optional> customerOwnedIpEnabled() {
        return Optional.ofNullable(this.customerOwnedIpEnabled);
    }

    /**
     * The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Note that this does not apply for Oracle or SQL Server engines. See the [AWS documentation](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/create-db-instance.html) for more details on what applies for those engines. If you are providing an Oracle db name, it needs to be in all upper case. Cannot be specified for a replica.
     * 
     */
    @Import(name="dbName")
    private @Nullable Output dbName;

    /**
     * @return The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Note that this does not apply for Oracle or SQL Server engines. See the [AWS documentation](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/create-db-instance.html) for more details on what applies for those engines. If you are providing an Oracle db name, it needs to be in all upper case. Cannot be specified for a replica.
     * 
     */
    public Optional> dbName() {
        return Optional.ofNullable(this.dbName);
    }

    /**
     * Name of DB subnet group. DB instance will
     * be created in the VPC associated with the DB subnet group. If unspecified, will
     * be created in the `default` VPC, or in EC2 Classic, if available. When working
     * with read replicas, it should be specified only if the source database
     * specifies an instance in another AWS Region. See [DBSubnetGroupName in API
     * action CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)
     * for additional read replica constraints.
     * 
     */
    @Import(name="dbSubnetGroupName")
    private @Nullable Output dbSubnetGroupName;

    /**
     * @return Name of DB subnet group. DB instance will
     * be created in the VPC associated with the DB subnet group. If unspecified, will
     * be created in the `default` VPC, or in EC2 Classic, if available. When working
     * with read replicas, it should be specified only if the source database
     * specifies an instance in another AWS Region. See [DBSubnetGroupName in API
     * action CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)
     * for additional read replica constraints.
     * 
     */
    public Optional> dbSubnetGroupName() {
        return Optional.ofNullable(this.dbSubnetGroupName);
    }

    /**
     * Use a dedicated log volume (DLV) for the DB instance. Requires Provisioned IOPS. See the [AWS documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.dlv) for more details.
     * 
     */
    @Import(name="dedicatedLogVolume")
    private @Nullable Output dedicatedLogVolume;

    /**
     * @return Use a dedicated log volume (DLV) for the DB instance. Requires Provisioned IOPS. See the [AWS documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.dlv) for more details.
     * 
     */
    public Optional> dedicatedLogVolume() {
        return Optional.ofNullable(this.dedicatedLogVolume);
    }

    /**
     * Specifies whether to remove automated backups immediately after the DB instance is deleted. Default is `true`.
     * 
     */
    @Import(name="deleteAutomatedBackups")
    private @Nullable Output deleteAutomatedBackups;

    /**
     * @return Specifies whether to remove automated backups immediately after the DB instance is deleted. Default is `true`.
     * 
     */
    public Optional> deleteAutomatedBackups() {
        return Optional.ofNullable(this.deleteAutomatedBackups);
    }

    /**
     * If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.
     * 
     */
    @Import(name="deletionProtection")
    private @Nullable Output deletionProtection;

    /**
     * @return If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.
     * 
     */
    public Optional> deletionProtection() {
        return Optional.ofNullable(this.deletionProtection);
    }

    /**
     * The ID of the Directory Service Active Directory domain to create the instance in. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
     * 
     */
    @Import(name="domain")
    private @Nullable Output domain;

    /**
     * @return The ID of the Directory Service Active Directory domain to create the instance in. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
     * 
     */
    public Optional> domain() {
        return Optional.ofNullable(this.domain);
    }

    /**
     * The ARN for the Secrets Manager secret with the self managed Active Directory credentials for the user joining the domain. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    @Import(name="domainAuthSecretArn")
    private @Nullable Output domainAuthSecretArn;

    /**
     * @return The ARN for the Secrets Manager secret with the self managed Active Directory credentials for the user joining the domain. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    public Optional> domainAuthSecretArn() {
        return Optional.ofNullable(this.domainAuthSecretArn);
    }

    /**
     * The IPv4 DNS IP addresses of your primary and secondary self managed Active Directory domain controllers. 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. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    @Import(name="domainDnsIps")
    private @Nullable Output> domainDnsIps;

    /**
     * @return The IPv4 DNS IP addresses of your primary and secondary self managed Active Directory domain controllers. 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. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    public Optional>> domainDnsIps() {
        return Optional.ofNullable(this.domainDnsIps);
    }

    /**
     * The fully qualified domain name (FQDN) of the self managed Active Directory domain. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    @Import(name="domainFqdn")
    private @Nullable Output domainFqdn;

    /**
     * @return The fully qualified domain name (FQDN) of the self managed Active Directory domain. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    public Optional> domainFqdn() {
        return Optional.ofNullable(this.domainFqdn);
    }

    /**
     * The name of the IAM role to be used when making API calls to the Directory Service. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
     * 
     */
    @Import(name="domainIamRoleName")
    private @Nullable Output domainIamRoleName;

    /**
     * @return The name of the IAM role to be used when making API calls to the Directory Service. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
     * 
     */
    public Optional> domainIamRoleName() {
        return Optional.ofNullable(this.domainIamRoleName);
    }

    /**
     * The self managed Active Directory organizational unit for your DB instance to join. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    @Import(name="domainOu")
    private @Nullable Output domainOu;

    /**
     * @return The self managed Active Directory organizational unit for your DB instance to join. Conflicts with `domain` and `domain_iam_role_name`.
     * 
     */
    public Optional> domainOu() {
        return Optional.ofNullable(this.domainOu);
    }

    /**
     * Set of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. For supported values, see the EnableCloudwatchLogsExports.member.N parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html).
     * 
     */
    @Import(name="enabledCloudwatchLogsExports")
    private @Nullable Output> enabledCloudwatchLogsExports;

    /**
     * @return Set of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. For supported values, see the EnableCloudwatchLogsExports.member.N parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html).
     * 
     */
    public Optional>> enabledCloudwatchLogsExports() {
        return Optional.ofNullable(this.enabledCloudwatchLogsExports);
    }

    /**
     * The database engine to use. For supported values, see the Engine parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine must match the DB cluster's engine'. For information on the difference between the available Aurora MySQL engines see [Comparison between Aurora MySQL 1 and Aurora MySQL 2](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Updates.20180206.html) in the Amazon RDS User Guide.
     * 
     */
    @Import(name="engine")
    private @Nullable Output engine;

    /**
     * @return The database engine to use. For supported values, see the Engine parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine must match the DB cluster's engine'. For information on the difference between the available Aurora MySQL engines see [Comparison between Aurora MySQL 1 and Aurora MySQL 2](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Updates.20180206.html) in the Amazon RDS User Guide.
     * 
     */
    public Optional> engine() {
        return Optional.ofNullable(this.engine);
    }

    /**
     * The life cycle type for this DB instance. This setting applies only to RDS for MySQL and RDS for PostgreSQL. Valid values are `open-source-rds-extended-support`, `open-source-rds-extended-support-disabled`. Default value is `open-source-rds-extended-support`. [Using Amazon RDS Extended Support]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html
     * 
     */
    @Import(name="engineLifecycleSupport")
    private @Nullable Output engineLifecycleSupport;

    /**
     * @return The life cycle type for this DB instance. This setting applies only to RDS for MySQL and RDS for PostgreSQL. Valid values are `open-source-rds-extended-support`, `open-source-rds-extended-support-disabled`. Default value is `open-source-rds-extended-support`. [Using Amazon RDS Extended Support]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html
     * 
     */
    public Optional> engineLifecycleSupport() {
        return Optional.ofNullable(this.engineLifecycleSupport);
    }

    /**
     * The engine version to use. If `auto_minor_version_upgrade` is enabled, you can provide a prefix of the version such as `8.0` (for `8.0.36`). The actual engine version used is returned in the attribute `engine_version_actual`, see Attribute Reference below. For supported values, see the EngineVersion parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine version must match the DB cluster's engine version'.
     * 
     */
    @Import(name="engineVersion")
    private @Nullable Output engineVersion;

    /**
     * @return The engine version to use. If `auto_minor_version_upgrade` is enabled, you can provide a prefix of the version such as `8.0` (for `8.0.36`). The actual engine version used is returned in the attribute `engine_version_actual`, see Attribute Reference below. For supported values, see the EngineVersion parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine version must match the DB cluster's engine version'.
     * 
     */
    public Optional> engineVersion() {
        return Optional.ofNullable(this.engineVersion);
    }

    /**
     * The name of your final DB snapshot
     * when this DB instance is deleted. Must be provided if `skip_final_snapshot` is
     * set to `false`. The value must begin with a letter, only contain alphanumeric characters and hyphens, and not end with a hyphen or contain two consecutive hyphens. Must not be provided when deleting a read replica.
     * 
     */
    @Import(name="finalSnapshotIdentifier")
    private @Nullable Output finalSnapshotIdentifier;

    /**
     * @return The name of your final DB snapshot
     * when this DB instance is deleted. Must be provided if `skip_final_snapshot` is
     * set to `false`. The value must begin with a letter, only contain alphanumeric characters and hyphens, and not end with a hyphen or contain two consecutive hyphens. Must not be provided when deleting a read replica.
     * 
     */
    public Optional> finalSnapshotIdentifier() {
        return Optional.ofNullable(this.finalSnapshotIdentifier);
    }

    /**
     * Specifies whether mappings of AWS Identity and Access Management (IAM) accounts to database
     * accounts is enabled.
     * 
     */
    @Import(name="iamDatabaseAuthenticationEnabled")
    private @Nullable Output iamDatabaseAuthenticationEnabled;

    /**
     * @return Specifies whether mappings of AWS Identity and Access Management (IAM) accounts to database
     * accounts is enabled.
     * 
     */
    public Optional> iamDatabaseAuthenticationEnabled() {
        return Optional.ofNullable(this.iamDatabaseAuthenticationEnabled);
    }

    /**
     * The name of the RDS instance, if omitted, this provider will assign a random, unique identifier. Required if `restore_to_point_in_time` is specified.
     * 
     */
    @Import(name="identifier")
    private @Nullable Output identifier;

    /**
     * @return The name of the RDS instance, if omitted, this provider will assign a random, unique identifier. Required if `restore_to_point_in_time` is specified.
     * 
     */
    public Optional> identifier() {
        return Optional.ofNullable(this.identifier);
    }

    /**
     * Creates a unique identifier beginning with the specified prefix. Conflicts with `identifier`.
     * 
     */
    @Import(name="identifierPrefix")
    private @Nullable Output identifierPrefix;

    /**
     * @return Creates a unique identifier beginning with the specified prefix. Conflicts with `identifier`.
     * 
     */
    public Optional> identifierPrefix() {
        return Optional.ofNullable(this.identifierPrefix);
    }

    /**
     * The instance type of the RDS instance.
     * 
     */
    @Import(name="instanceClass", required=true)
    private Output> instanceClass;

    /**
     * @return The instance type of the RDS instance.
     * 
     */
    public Output> instanceClass() {
        return this.instanceClass;
    }

    /**
     * The amount of provisioned IOPS. Setting this implies a
     * storage_type of "io1" or "io2". Can only be set when `storage_type` is `"io1"`, `"io2` or `"gp3"`.
     * Cannot be specified for gp3 storage if the `allocated_storage` value is below a per-`engine` threshold.
     * See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
     * 
     */
    @Import(name="iops")
    private @Nullable Output iops;

    /**
     * @return The amount of provisioned IOPS. Setting this implies a
     * storage_type of "io1" or "io2". Can only be set when `storage_type` is `"io1"`, `"io2` or `"gp3"`.
     * Cannot be specified for gp3 storage if the `allocated_storage` value is below a per-`engine` threshold.
     * See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
     * 
     */
    public Optional> iops() {
        return Optional.ofNullable(this.iops);
    }

    /**
     * The ARN for the KMS encryption key. If creating an
     * encrypted replica, set this to the destination KMS ARN.
     * 
     */
    @Import(name="kmsKeyId")
    private @Nullable Output kmsKeyId;

    /**
     * @return The ARN for the KMS encryption key. If creating an
     * encrypted replica, set this to the destination KMS ARN.
     * 
     */
    public Optional> kmsKeyId() {
        return Optional.ofNullable(this.kmsKeyId);
    }

    /**
     * License model information for this DB instance. Valid values for this field are as follows:
     * * 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`
     * 
     */
    @Import(name="licenseModel")
    private @Nullable Output licenseModel;

    /**
     * @return License model information for this DB instance. Valid values for this field are as follows:
     * * 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`
     * 
     */
    public Optional> licenseModel() {
        return Optional.ofNullable(this.licenseModel);
    }

    /**
     * The window to perform maintenance in.
     * Syntax: "ddd:hh24:mi-ddd:hh24:mi". Eg: "Mon:00:00-Mon:03:00". See [RDS
     * Maintenance Window
     * docs](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow)
     * for more information.
     * 
     */
    @Import(name="maintenanceWindow")
    private @Nullable Output maintenanceWindow;

    /**
     * @return The window to perform maintenance in.
     * Syntax: "ddd:hh24:mi-ddd:hh24:mi". Eg: "Mon:00:00-Mon:03:00". See [RDS
     * Maintenance Window
     * docs](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow)
     * for more information.
     * 
     */
    public Optional> maintenanceWindow() {
        return Optional.ofNullable(this.maintenanceWindow);
    }

    /**
     * Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if `password` is provided.
     * 
     */
    @Import(name="manageMasterUserPassword")
    private @Nullable Output manageMasterUserPassword;

    /**
     * @return Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if `password` is provided.
     * 
     */
    public Optional> manageMasterUserPassword() {
        return Optional.ofNullable(this.manageMasterUserPassword);
    }

    /**
     * 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. If not specified, the default KMS key for your Amazon Web Services account is used.
     * 
     */
    @Import(name="masterUserSecretKmsKeyId")
    private @Nullable Output masterUserSecretKmsKeyId;

    /**
     * @return 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. If not specified, the default KMS key for your Amazon Web Services account is used.
     * 
     */
    public Optional> masterUserSecretKmsKeyId() {
        return Optional.ofNullable(this.masterUserSecretKmsKeyId);
    }

    /**
     * When configured, the upper limit to which Amazon RDS can automatically scale the storage of the DB instance. Configuring this will automatically ignore differences to `allocated_storage`. Must be greater than or equal to `allocated_storage` or `0` to disable Storage Autoscaling.
     * 
     */
    @Import(name="maxAllocatedStorage")
    private @Nullable Output maxAllocatedStorage;

    /**
     * @return When configured, the upper limit to which Amazon RDS can automatically scale the storage of the DB instance. Configuring this will automatically ignore differences to `allocated_storage`. Must be greater than or equal to `allocated_storage` or `0` to disable Storage Autoscaling.
     * 
     */
    public Optional> maxAllocatedStorage() {
        return Optional.ofNullable(this.maxAllocatedStorage);
    }

    /**
     * The interval, in seconds, between points
     * when Enhanced Monitoring metrics are collected for the DB instance. To disable
     * collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid
     * Values: 0, 1, 5, 10, 15, 30, 60.
     * 
     */
    @Import(name="monitoringInterval")
    private @Nullable Output monitoringInterval;

    /**
     * @return The interval, in seconds, between points
     * when Enhanced Monitoring metrics are collected for the DB instance. To disable
     * collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid
     * Values: 0, 1, 5, 10, 15, 30, 60.
     * 
     */
    public Optional> monitoringInterval() {
        return Optional.ofNullable(this.monitoringInterval);
    }

    /**
     * The ARN for the IAM role that permits RDS
     * to send enhanced monitoring metrics to CloudWatch Logs. You can find more
     * information on the [AWS
     * Documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.html)
     * what IAM permissions are needed to allow Enhanced Monitoring for RDS Instances.
     * 
     */
    @Import(name="monitoringRoleArn")
    private @Nullable Output monitoringRoleArn;

    /**
     * @return The ARN for the IAM role that permits RDS
     * to send enhanced monitoring metrics to CloudWatch Logs. You can find more
     * information on the [AWS
     * Documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.html)
     * what IAM permissions are needed to allow Enhanced Monitoring for RDS Instances.
     * 
     */
    public Optional> monitoringRoleArn() {
        return Optional.ofNullable(this.monitoringRoleArn);
    }

    /**
     * Specifies if the RDS instance is multi-AZ
     * 
     */
    @Import(name="multiAz")
    private @Nullable Output multiAz;

    /**
     * @return Specifies if the RDS instance is multi-AZ
     * 
     */
    public Optional> multiAz() {
        return Optional.ofNullable(this.multiAz);
    }

    /**
     * @deprecated
     * This property has been deprecated. Please use 'dbName' instead.
     * 
     */
    @Deprecated /* This property has been deprecated. Please use 'dbName' instead. */
    @Import(name="name")
    private @Nullable Output name;

    /**
     * @deprecated
     * This property has been deprecated. Please use 'dbName' instead.
     * 
     */
    @Deprecated /* This property has been deprecated. Please use 'dbName' instead. */
    public Optional> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The national character set is used in the NCHAR, NVARCHAR2, and NCLOB data types for Oracle instances. This can't be changed. See [Oracle Character Sets
     * Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html).
     * 
     */
    @Import(name="ncharCharacterSetName")
    private @Nullable Output ncharCharacterSetName;

    /**
     * @return The national character set is used in the NCHAR, NVARCHAR2, and NCLOB data types for Oracle instances. This can't be changed. See [Oracle Character Sets
     * Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html).
     * 
     */
    public Optional> ncharCharacterSetName() {
        return Optional.ofNullable(this.ncharCharacterSetName);
    }

    /**
     * The network type of the DB instance. Valid values: `IPV4`, `DUAL`.
     * 
     */
    @Import(name="networkType")
    private @Nullable Output networkType;

    /**
     * @return The network type of the DB instance. Valid values: `IPV4`, `DUAL`.
     * 
     */
    public Optional> networkType() {
        return Optional.ofNullable(this.networkType);
    }

    /**
     * Name of the DB option group to associate.
     * 
     */
    @Import(name="optionGroupName")
    private @Nullable Output optionGroupName;

    /**
     * @return Name of the DB option group to associate.
     * 
     */
    public Optional> optionGroupName() {
        return Optional.ofNullable(this.optionGroupName);
    }

    /**
     * Name of the DB parameter group to associate.
     * 
     */
    @Import(name="parameterGroupName")
    private @Nullable Output parameterGroupName;

    /**
     * @return Name of the DB parameter group to associate.
     * 
     */
    public Optional> parameterGroupName() {
        return Optional.ofNullable(this.parameterGroupName);
    }

    /**
     * (Required unless `manage_master_user_password` is set to true or unless a `snapshot_identifier` or `replicate_source_db`
     * is provided or `manage_master_user_password` is set.) Password for the master DB user. Note that this may show up in
     * logs, and it will be stored in the state file. Cannot be set if `manage_master_user_password` is set to `true`.
     * 
     */
    @Import(name="password")
    private @Nullable Output password;

    /**
     * @return (Required unless `manage_master_user_password` is set to true or unless a `snapshot_identifier` or `replicate_source_db`
     * is provided or `manage_master_user_password` is set.) Password for the master DB user. Note that this may show up in
     * logs, and it will be stored in the state file. Cannot be set if `manage_master_user_password` is set to `true`.
     * 
     */
    public Optional> password() {
        return Optional.ofNullable(this.password);
    }

    /**
     * Specifies whether Performance Insights are enabled. Defaults to false.
     * 
     */
    @Import(name="performanceInsightsEnabled")
    private @Nullable Output performanceInsightsEnabled;

    /**
     * @return Specifies whether Performance Insights are enabled. Defaults to false.
     * 
     */
    public Optional> performanceInsightsEnabled() {
        return Optional.ofNullable(this.performanceInsightsEnabled);
    }

    /**
     * The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true. Once KMS key is set, it can never be changed.
     * 
     */
    @Import(name="performanceInsightsKmsKeyId")
    private @Nullable Output performanceInsightsKmsKeyId;

    /**
     * @return The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true. Once KMS key is set, it can never be changed.
     * 
     */
    public Optional> performanceInsightsKmsKeyId() {
        return Optional.ofNullable(this.performanceInsightsKmsKeyId);
    }

    /**
     * Amount of time in days to retain Performance Insights data. Valid values are `7`, `731` (2 years) or a multiple of `31`. When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.
     * 
     */
    @Import(name="performanceInsightsRetentionPeriod")
    private @Nullable Output performanceInsightsRetentionPeriod;

    /**
     * @return Amount of time in days to retain Performance Insights data. Valid values are `7`, `731` (2 years) or a multiple of `31`. When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.
     * 
     */
    public Optional> performanceInsightsRetentionPeriod() {
        return Optional.ofNullable(this.performanceInsightsRetentionPeriod);
    }

    /**
     * The port on which the DB accepts connections.
     * 
     */
    @Import(name="port")
    private @Nullable Output port;

    /**
     * @return The port on which the DB accepts connections.
     * 
     */
    public Optional> port() {
        return Optional.ofNullable(this.port);
    }

    /**
     * Bool to control if instance is publicly
     * accessible. Default is `false`.
     * 
     */
    @Import(name="publiclyAccessible")
    private @Nullable Output publiclyAccessible;

    /**
     * @return Bool to control if instance is publicly
     * accessible. Default is `false`.
     * 
     */
    public Optional> publiclyAccessible() {
        return Optional.ofNullable(this.publiclyAccessible);
    }

    /**
     * Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute
     * is only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.
     * 
     */
    @Import(name="replicaMode")
    private @Nullable Output replicaMode;

    /**
     * @return Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute
     * is only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.
     * 
     */
    public Optional> replicaMode() {
        return Optional.ofNullable(this.replicaMode);
    }

    /**
     * Specifies that this resource is a Replicate
     * database, and to use this value as the source database. This correlates to the
     * `identifier` of another Amazon RDS Database to replicate (if replicating within
     * a single region) or ARN of the Amazon RDS Database to replicate (if replicating
     * cross-region). Note that if you are
     * creating a cross-region replica of an encrypted database you will also need to
     * specify a `kms_key_id`. See [DB Instance Replication][instance-replication] and [Working with
     * PostgreSQL and MySQL Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)
     * for more information on using Replication.
     * 
     */
    @Import(name="replicateSourceDb")
    private @Nullable Output replicateSourceDb;

    /**
     * @return Specifies that this resource is a Replicate
     * database, and to use this value as the source database. This correlates to the
     * `identifier` of another Amazon RDS Database to replicate (if replicating within
     * a single region) or ARN of the Amazon RDS Database to replicate (if replicating
     * cross-region). Note that if you are
     * creating a cross-region replica of an encrypted database you will also need to
     * specify a `kms_key_id`. See [DB Instance Replication][instance-replication] and [Working with
     * PostgreSQL and MySQL Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)
     * for more information on using Replication.
     * 
     */
    public Optional> replicateSourceDb() {
        return Optional.ofNullable(this.replicateSourceDb);
    }

    /**
     * A configuration block for restoring a DB instance to an arbitrary point in time. Requires the `identifier` argument to be set with the name of the new DB instance to be created. See Restore To Point In Time below for details.
     * 
     */
    @Import(name="restoreToPointInTime")
    private @Nullable Output restoreToPointInTime;

    /**
     * @return A configuration block for restoring a DB instance to an arbitrary point in time. Requires the `identifier` argument to be set with the name of the new DB instance to be created. See Restore To Point In Time below for details.
     * 
     */
    public Optional> restoreToPointInTime() {
        return Optional.ofNullable(this.restoreToPointInTime);
    }

    /**
     * Restore from a Percona Xtrabackup in S3.  See [Importing Data into an Amazon RDS MySQL DB Instance](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html)
     * 
     */
    @Import(name="s3Import")
    private @Nullable Output s3Import;

    /**
     * @return Restore from a Percona Xtrabackup in S3.  See [Importing Data into an Amazon RDS MySQL DB Instance](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html)
     * 
     */
    public Optional> s3Import() {
        return Optional.ofNullable(this.s3Import);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="skipFinalSnapshot")
    private @Nullable Output skipFinalSnapshot;

    /**
     * @return 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`.
     * 
     */
    public Optional> skipFinalSnapshot() {
        return Optional.ofNullable(this.skipFinalSnapshot);
    }

    /**
     * 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.
     * 
     */
    @Import(name="snapshotIdentifier")
    private @Nullable Output snapshotIdentifier;

    /**
     * @return 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.
     * 
     */
    public Optional> snapshotIdentifier() {
        return Optional.ofNullable(this.snapshotIdentifier);
    }

    /**
     * Specifies whether the DB instance is
     * encrypted. Note that if you are creating a cross-region read replica this field
     * is ignored and you should instead declare `kms_key_id` with a valid ARN. The
     * default is `false` if not specified.
     * 
     */
    @Import(name="storageEncrypted")
    private @Nullable Output storageEncrypted;

    /**
     * @return Specifies whether the DB instance is
     * encrypted. Note that if you are creating a cross-region read replica this field
     * is ignored and you should instead declare `kms_key_id` with a valid ARN. The
     * default is `false` if not specified.
     * 
     */
    public Optional> storageEncrypted() {
        return Optional.ofNullable(this.storageEncrypted);
    }

    /**
     * The storage throughput value for the DB instance. Can only be set when `storage_type` is `"gp3"`. Cannot be specified if the `allocated_storage` value is below a per-`engine` threshold. See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
     * 
     */
    @Import(name="storageThroughput")
    private @Nullable Output storageThroughput;

    /**
     * @return The storage throughput value for the DB instance. Can only be set when `storage_type` is `"gp3"`. Cannot be specified if the `allocated_storage` value is below a per-`engine` threshold. See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
     * 
     */
    public Optional> storageThroughput() {
        return Optional.ofNullable(this.storageThroughput);
    }

    /**
     * One of "standard" (magnetic), "gp2" (general
     * purpose SSD), "gp3" (general purpose SSD that needs `iops` independently)
     * "io1" (provisioned IOPS SSD) or "io2" (block express storage provisioned IOPS
     * SSD). The default is "io1" if `iops` is specified, "gp2" if not.
     * 
     */
    @Import(name="storageType")
    private @Nullable Output> storageType;

    /**
     * @return One of "standard" (magnetic), "gp2" (general
     * purpose SSD), "gp3" (general purpose SSD that needs `iops` independently)
     * "io1" (provisioned IOPS SSD) or "io2" (block express storage provisioned IOPS
     * SSD). The default is "io1" if `iops` is specified, "gp2" if not.
     * 
     */
    public Optional>> storageType() {
        return Optional.ofNullable(this.storageType);
    }

    /**
     * A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output> tags;

    /**
     * @return A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * Time zone of the DB instance. `timezone` is currently
     * only supported by Microsoft SQL Server. The `timezone` can only be set on
     * creation. See [MSSQL User
     * Guide](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone)
     * for more information.
     * 
     */
    @Import(name="timezone")
    private @Nullable Output timezone;

    /**
     * @return Time zone of the DB instance. `timezone` is currently
     * only supported by Microsoft SQL Server. The `timezone` can only be set on
     * creation. See [MSSQL User
     * Guide](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone)
     * for more information.
     * 
     */
    public Optional> timezone() {
        return Optional.ofNullable(this.timezone);
    }

    /**
     * Whether to upgrade the storage file system configuration on the read replica. Can only be set with `replicate_source_db`.
     * 
     */
    @Import(name="upgradeStorageConfig")
    private @Nullable Output upgradeStorageConfig;

    /**
     * @return Whether to upgrade the storage file system configuration on the read replica. Can only be set with `replicate_source_db`.
     * 
     */
    public Optional> upgradeStorageConfig() {
        return Optional.ofNullable(this.upgradeStorageConfig);
    }

    /**
     * (Required unless a `snapshot_identifier` or `replicate_source_db`
     * is provided) Username for the master DB user. Cannot be specified for a replica.
     * 
     */
    @Import(name="username")
    private @Nullable Output username;

    /**
     * @return (Required unless a `snapshot_identifier` or `replicate_source_db`
     * is provided) Username for the master DB user. Cannot be specified for a replica.
     * 
     */
    public Optional> username() {
        return Optional.ofNullable(this.username);
    }

    /**
     * List of VPC security groups to
     * associate.
     * 
     */
    @Import(name="vpcSecurityGroupIds")
    private @Nullable Output> vpcSecurityGroupIds;

    /**
     * @return List of VPC security groups to
     * associate.
     * 
     */
    public Optional>> vpcSecurityGroupIds() {
        return Optional.ofNullable(this.vpcSecurityGroupIds);
    }

    private InstanceArgs() {}

    private InstanceArgs(InstanceArgs $) {
        this.allocatedStorage = $.allocatedStorage;
        this.allowMajorVersionUpgrade = $.allowMajorVersionUpgrade;
        this.applyImmediately = $.applyImmediately;
        this.autoMinorVersionUpgrade = $.autoMinorVersionUpgrade;
        this.availabilityZone = $.availabilityZone;
        this.backupRetentionPeriod = $.backupRetentionPeriod;
        this.backupTarget = $.backupTarget;
        this.backupWindow = $.backupWindow;
        this.blueGreenUpdate = $.blueGreenUpdate;
        this.caCertIdentifier = $.caCertIdentifier;
        this.characterSetName = $.characterSetName;
        this.copyTagsToSnapshot = $.copyTagsToSnapshot;
        this.customIamInstanceProfile = $.customIamInstanceProfile;
        this.customerOwnedIpEnabled = $.customerOwnedIpEnabled;
        this.dbName = $.dbName;
        this.dbSubnetGroupName = $.dbSubnetGroupName;
        this.dedicatedLogVolume = $.dedicatedLogVolume;
        this.deleteAutomatedBackups = $.deleteAutomatedBackups;
        this.deletionProtection = $.deletionProtection;
        this.domain = $.domain;
        this.domainAuthSecretArn = $.domainAuthSecretArn;
        this.domainDnsIps = $.domainDnsIps;
        this.domainFqdn = $.domainFqdn;
        this.domainIamRoleName = $.domainIamRoleName;
        this.domainOu = $.domainOu;
        this.enabledCloudwatchLogsExports = $.enabledCloudwatchLogsExports;
        this.engine = $.engine;
        this.engineLifecycleSupport = $.engineLifecycleSupport;
        this.engineVersion = $.engineVersion;
        this.finalSnapshotIdentifier = $.finalSnapshotIdentifier;
        this.iamDatabaseAuthenticationEnabled = $.iamDatabaseAuthenticationEnabled;
        this.identifier = $.identifier;
        this.identifierPrefix = $.identifierPrefix;
        this.instanceClass = $.instanceClass;
        this.iops = $.iops;
        this.kmsKeyId = $.kmsKeyId;
        this.licenseModel = $.licenseModel;
        this.maintenanceWindow = $.maintenanceWindow;
        this.manageMasterUserPassword = $.manageMasterUserPassword;
        this.masterUserSecretKmsKeyId = $.masterUserSecretKmsKeyId;
        this.maxAllocatedStorage = $.maxAllocatedStorage;
        this.monitoringInterval = $.monitoringInterval;
        this.monitoringRoleArn = $.monitoringRoleArn;
        this.multiAz = $.multiAz;
        this.name = $.name;
        this.ncharCharacterSetName = $.ncharCharacterSetName;
        this.networkType = $.networkType;
        this.optionGroupName = $.optionGroupName;
        this.parameterGroupName = $.parameterGroupName;
        this.password = $.password;
        this.performanceInsightsEnabled = $.performanceInsightsEnabled;
        this.performanceInsightsKmsKeyId = $.performanceInsightsKmsKeyId;
        this.performanceInsightsRetentionPeriod = $.performanceInsightsRetentionPeriod;
        this.port = $.port;
        this.publiclyAccessible = $.publiclyAccessible;
        this.replicaMode = $.replicaMode;
        this.replicateSourceDb = $.replicateSourceDb;
        this.restoreToPointInTime = $.restoreToPointInTime;
        this.s3Import = $.s3Import;
        this.skipFinalSnapshot = $.skipFinalSnapshot;
        this.snapshotIdentifier = $.snapshotIdentifier;
        this.storageEncrypted = $.storageEncrypted;
        this.storageThroughput = $.storageThroughput;
        this.storageType = $.storageType;
        this.tags = $.tags;
        this.timezone = $.timezone;
        this.upgradeStorageConfig = $.upgradeStorageConfig;
        this.username = $.username;
        this.vpcSecurityGroupIds = $.vpcSecurityGroupIds;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(InstanceArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private InstanceArgs $;

        public Builder() {
            $ = new InstanceArgs();
        }

        public Builder(InstanceArgs defaults) {
            $ = new InstanceArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param allocatedStorage The allocated storage in gibibytes. If `max_allocated_storage` is configured, this argument represents the initial storage allocation and differences from the configuration will be ignored automatically when Storage Autoscaling occurs. If `replicate_source_db` is set, the value is ignored during the creation of the instance.
         * 
         * @return builder
         * 
         */
        public Builder allocatedStorage(@Nullable Output allocatedStorage) {
            $.allocatedStorage = allocatedStorage;
            return this;
        }

        /**
         * @param allocatedStorage The allocated storage in gibibytes. If `max_allocated_storage` is configured, this argument represents the initial storage allocation and differences from the configuration will be ignored automatically when Storage Autoscaling occurs. If `replicate_source_db` is set, the value is ignored during the creation of the instance.
         * 
         * @return builder
         * 
         */
        public Builder allocatedStorage(Integer allocatedStorage) {
            return allocatedStorage(Output.of(allocatedStorage));
        }

        /**
         * @param allowMajorVersionUpgrade Indicates that major version
         * upgrades are allowed. Changing this parameter does not result in an outage and
         * the change is asynchronously applied as soon as possible.
         * 
         * @return builder
         * 
         */
        public Builder allowMajorVersionUpgrade(@Nullable Output allowMajorVersionUpgrade) {
            $.allowMajorVersionUpgrade = allowMajorVersionUpgrade;
            return this;
        }

        /**
         * @param allowMajorVersionUpgrade Indicates that major version
         * upgrades are allowed. Changing this parameter does not result in an outage and
         * the change is asynchronously applied as soon as possible.
         * 
         * @return builder
         * 
         */
        public Builder allowMajorVersionUpgrade(Boolean allowMajorVersionUpgrade) {
            return allowMajorVersionUpgrade(Output.of(allowMajorVersionUpgrade));
        }

        /**
         * @param applyImmediately Specifies whether any database modifications
         * are applied immediately, or during the next maintenance window. Default is
         * `false`. See [Amazon RDS Documentation for more
         * information.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)
         * 
         * @return builder
         * 
         */
        public Builder applyImmediately(@Nullable Output applyImmediately) {
            $.applyImmediately = applyImmediately;
            return this;
        }

        /**
         * @param applyImmediately Specifies whether any database modifications
         * are applied immediately, or during the next maintenance window. Default is
         * `false`. See [Amazon RDS Documentation for more
         * information.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)
         * 
         * @return builder
         * 
         */
        public Builder applyImmediately(Boolean applyImmediately) {
            return applyImmediately(Output.of(applyImmediately));
        }

        /**
         * @param autoMinorVersionUpgrade Indicates that minor engine upgrades
         * will be applied automatically to the DB instance during the maintenance window.
         * Defaults to true.
         * 
         * @return builder
         * 
         */
        public Builder autoMinorVersionUpgrade(@Nullable Output autoMinorVersionUpgrade) {
            $.autoMinorVersionUpgrade = autoMinorVersionUpgrade;
            return this;
        }

        /**
         * @param autoMinorVersionUpgrade Indicates that minor engine upgrades
         * will be applied automatically to the DB instance during the maintenance window.
         * Defaults to true.
         * 
         * @return builder
         * 
         */
        public Builder autoMinorVersionUpgrade(Boolean autoMinorVersionUpgrade) {
            return autoMinorVersionUpgrade(Output.of(autoMinorVersionUpgrade));
        }

        /**
         * @param availabilityZone The AZ for the RDS instance.
         * 
         * @return builder
         * 
         */
        public Builder availabilityZone(@Nullable Output availabilityZone) {
            $.availabilityZone = availabilityZone;
            return this;
        }

        /**
         * @param availabilityZone The AZ for the RDS instance.
         * 
         * @return builder
         * 
         */
        public Builder availabilityZone(String availabilityZone) {
            return availabilityZone(Output.of(availabilityZone));
        }

        /**
         * @param backupRetentionPeriod The days to retain backups for.
         * Must be between `0` and `35`.
         * Default is `0`.
         * Must be greater than `0` if the database is used as a source for a [Read Replica][instance-replication],
         * uses low-downtime updates,
         * or will use [RDS Blue/Green deployments][blue-green].
         * 
         * @return builder
         * 
         */
        public Builder backupRetentionPeriod(@Nullable Output backupRetentionPeriod) {
            $.backupRetentionPeriod = backupRetentionPeriod;
            return this;
        }

        /**
         * @param backupRetentionPeriod The days to retain backups for.
         * Must be between `0` and `35`.
         * Default is `0`.
         * Must be greater than `0` if the database is used as a source for a [Read Replica][instance-replication],
         * uses low-downtime updates,
         * or will use [RDS Blue/Green deployments][blue-green].
         * 
         * @return builder
         * 
         */
        public Builder backupRetentionPeriod(Integer backupRetentionPeriod) {
            return backupRetentionPeriod(Output.of(backupRetentionPeriod));
        }

        /**
         * @param backupTarget Specifies where automated backups and manual snapshots are stored. Possible values are `region` (default) and `outposts`. See [Working with Amazon RDS on AWS Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html) for more information.
         * 
         * @return builder
         * 
         */
        public Builder backupTarget(@Nullable Output backupTarget) {
            $.backupTarget = backupTarget;
            return this;
        }

        /**
         * @param backupTarget Specifies where automated backups and manual snapshots are stored. Possible values are `region` (default) and `outposts`. See [Working with Amazon RDS on AWS Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html) for more information.
         * 
         * @return builder
         * 
         */
        public Builder backupTarget(String backupTarget) {
            return backupTarget(Output.of(backupTarget));
        }

        /**
         * @param backupWindow The daily time range (in UTC) during which automated backups are created if they are enabled.
         * Example: "09:46-10:16". Must not overlap with `maintenance_window`.
         * 
         * @return builder
         * 
         */
        public Builder backupWindow(@Nullable Output backupWindow) {
            $.backupWindow = backupWindow;
            return this;
        }

        /**
         * @param backupWindow The daily time range (in UTC) during which automated backups are created if they are enabled.
         * Example: "09:46-10:16". Must not overlap with `maintenance_window`.
         * 
         * @return builder
         * 
         */
        public Builder backupWindow(String backupWindow) {
            return backupWindow(Output.of(backupWindow));
        }

        /**
         * @param blueGreenUpdate Enables low-downtime updates using [RDS Blue/Green deployments][blue-green].
         * See `blue_green_update` below.
         * 
         * @return builder
         * 
         */
        public Builder blueGreenUpdate(@Nullable Output blueGreenUpdate) {
            $.blueGreenUpdate = blueGreenUpdate;
            return this;
        }

        /**
         * @param blueGreenUpdate Enables low-downtime updates using [RDS Blue/Green deployments][blue-green].
         * See `blue_green_update` below.
         * 
         * @return builder
         * 
         */
        public Builder blueGreenUpdate(InstanceBlueGreenUpdateArgs blueGreenUpdate) {
            return blueGreenUpdate(Output.of(blueGreenUpdate));
        }

        /**
         * @param caCertIdentifier The identifier of the CA certificate for the DB instance.
         * 
         * @return builder
         * 
         */
        public Builder caCertIdentifier(@Nullable Output caCertIdentifier) {
            $.caCertIdentifier = caCertIdentifier;
            return this;
        }

        /**
         * @param caCertIdentifier The identifier of the CA certificate for the DB instance.
         * 
         * @return builder
         * 
         */
        public Builder caCertIdentifier(String caCertIdentifier) {
            return caCertIdentifier(Output.of(caCertIdentifier));
        }

        /**
         * @param characterSetName The character set name to use for DB encoding in Oracle and Microsoft SQL instances (collation).
         * This can't be changed.
         * See [Oracle Character Sets Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html) or
         * [Server-Level Collation for Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) for more information.
         * Cannot be set  with `replicate_source_db`, `restore_to_point_in_time`, `s3_import`, or `snapshot_identifier`.
         * 
         * @return builder
         * 
         */
        public Builder characterSetName(@Nullable Output characterSetName) {
            $.characterSetName = characterSetName;
            return this;
        }

        /**
         * @param characterSetName The character set name to use for DB encoding in Oracle and Microsoft SQL instances (collation).
         * This can't be changed.
         * See [Oracle Character Sets Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html) or
         * [Server-Level Collation for Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) for more information.
         * Cannot be set  with `replicate_source_db`, `restore_to_point_in_time`, `s3_import`, or `snapshot_identifier`.
         * 
         * @return builder
         * 
         */
        public Builder characterSetName(String characterSetName) {
            return characterSetName(Output.of(characterSetName));
        }

        /**
         * @param copyTagsToSnapshot Copy all Instance `tags` to snapshots. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder copyTagsToSnapshot(@Nullable Output copyTagsToSnapshot) {
            $.copyTagsToSnapshot = copyTagsToSnapshot;
            return this;
        }

        /**
         * @param copyTagsToSnapshot Copy all Instance `tags` to snapshots. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder copyTagsToSnapshot(Boolean copyTagsToSnapshot) {
            return copyTagsToSnapshot(Output.of(copyTagsToSnapshot));
        }

        /**
         * @param customIamInstanceProfile The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.
         * 
         * @return builder
         * 
         */
        public Builder customIamInstanceProfile(@Nullable Output customIamInstanceProfile) {
            $.customIamInstanceProfile = customIamInstanceProfile;
            return this;
        }

        /**
         * @param customIamInstanceProfile The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.
         * 
         * @return builder
         * 
         */
        public Builder customIamInstanceProfile(String customIamInstanceProfile) {
            return customIamInstanceProfile(Output.of(customIamInstanceProfile));
        }

        /**
         * @param customerOwnedIpEnabled Indicates whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance. See [CoIP for RDS on Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html#rds-on-outposts.coip) for more information.
         * 
         * > **NOTE:** Removing the `replicate_source_db` attribute from an existing RDS
         * Replicate database managed by the provider will promote the database to a fully
         * standalone database.
         * 
         * @return builder
         * 
         */
        public Builder customerOwnedIpEnabled(@Nullable Output customerOwnedIpEnabled) {
            $.customerOwnedIpEnabled = customerOwnedIpEnabled;
            return this;
        }

        /**
         * @param customerOwnedIpEnabled Indicates whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance. See [CoIP for RDS on Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html#rds-on-outposts.coip) for more information.
         * 
         * > **NOTE:** Removing the `replicate_source_db` attribute from an existing RDS
         * Replicate database managed by the provider will promote the database to a fully
         * standalone database.
         * 
         * @return builder
         * 
         */
        public Builder customerOwnedIpEnabled(Boolean customerOwnedIpEnabled) {
            return customerOwnedIpEnabled(Output.of(customerOwnedIpEnabled));
        }

        /**
         * @param dbName The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Note that this does not apply for Oracle or SQL Server engines. See the [AWS documentation](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/create-db-instance.html) for more details on what applies for those engines. If you are providing an Oracle db name, it needs to be in all upper case. Cannot be specified for a replica.
         * 
         * @return builder
         * 
         */
        public Builder dbName(@Nullable Output dbName) {
            $.dbName = dbName;
            return this;
        }

        /**
         * @param dbName The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Note that this does not apply for Oracle or SQL Server engines. See the [AWS documentation](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/create-db-instance.html) for more details on what applies for those engines. If you are providing an Oracle db name, it needs to be in all upper case. Cannot be specified for a replica.
         * 
         * @return builder
         * 
         */
        public Builder dbName(String dbName) {
            return dbName(Output.of(dbName));
        }

        /**
         * @param dbSubnetGroupName Name of DB subnet group. DB instance will
         * be created in the VPC associated with the DB subnet group. If unspecified, will
         * be created in the `default` VPC, or in EC2 Classic, if available. When working
         * with read replicas, it should be specified only if the source database
         * specifies an instance in another AWS Region. See [DBSubnetGroupName in API
         * action CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)
         * for additional read replica constraints.
         * 
         * @return builder
         * 
         */
        public Builder dbSubnetGroupName(@Nullable Output dbSubnetGroupName) {
            $.dbSubnetGroupName = dbSubnetGroupName;
            return this;
        }

        /**
         * @param dbSubnetGroupName Name of DB subnet group. DB instance will
         * be created in the VPC associated with the DB subnet group. If unspecified, will
         * be created in the `default` VPC, or in EC2 Classic, if available. When working
         * with read replicas, it should be specified only if the source database
         * specifies an instance in another AWS Region. See [DBSubnetGroupName in API
         * action CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)
         * for additional read replica constraints.
         * 
         * @return builder
         * 
         */
        public Builder dbSubnetGroupName(String dbSubnetGroupName) {
            return dbSubnetGroupName(Output.of(dbSubnetGroupName));
        }

        /**
         * @param dedicatedLogVolume Use a dedicated log volume (DLV) for the DB instance. Requires Provisioned IOPS. See the [AWS documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.dlv) for more details.
         * 
         * @return builder
         * 
         */
        public Builder dedicatedLogVolume(@Nullable Output dedicatedLogVolume) {
            $.dedicatedLogVolume = dedicatedLogVolume;
            return this;
        }

        /**
         * @param dedicatedLogVolume Use a dedicated log volume (DLV) for the DB instance. Requires Provisioned IOPS. See the [AWS documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.dlv) for more details.
         * 
         * @return builder
         * 
         */
        public Builder dedicatedLogVolume(Boolean dedicatedLogVolume) {
            return dedicatedLogVolume(Output.of(dedicatedLogVolume));
        }

        /**
         * @param deleteAutomatedBackups Specifies whether to remove automated backups immediately after the DB instance is deleted. Default is `true`.
         * 
         * @return builder
         * 
         */
        public Builder deleteAutomatedBackups(@Nullable Output deleteAutomatedBackups) {
            $.deleteAutomatedBackups = deleteAutomatedBackups;
            return this;
        }

        /**
         * @param deleteAutomatedBackups Specifies whether to remove automated backups immediately after the DB instance is deleted. Default is `true`.
         * 
         * @return builder
         * 
         */
        public Builder deleteAutomatedBackups(Boolean deleteAutomatedBackups) {
            return deleteAutomatedBackups(Output.of(deleteAutomatedBackups));
        }

        /**
         * @param deletionProtection If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder deletionProtection(@Nullable Output deletionProtection) {
            $.deletionProtection = deletionProtection;
            return this;
        }

        /**
         * @param deletionProtection If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder deletionProtection(Boolean deletionProtection) {
            return deletionProtection(Output.of(deletionProtection));
        }

        /**
         * @param domain The ID of the Directory Service Active Directory domain to create the instance in. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
         * 
         * @return builder
         * 
         */
        public Builder domain(@Nullable Output domain) {
            $.domain = domain;
            return this;
        }

        /**
         * @param domain The ID of the Directory Service Active Directory domain to create the instance in. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
         * 
         * @return builder
         * 
         */
        public Builder domain(String domain) {
            return domain(Output.of(domain));
        }

        /**
         * @param domainAuthSecretArn The ARN for the Secrets Manager secret with the self managed Active Directory credentials for the user joining the domain. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainAuthSecretArn(@Nullable Output domainAuthSecretArn) {
            $.domainAuthSecretArn = domainAuthSecretArn;
            return this;
        }

        /**
         * @param domainAuthSecretArn The ARN for the Secrets Manager secret with the self managed Active Directory credentials for the user joining the domain. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainAuthSecretArn(String domainAuthSecretArn) {
            return domainAuthSecretArn(Output.of(domainAuthSecretArn));
        }

        /**
         * @param domainDnsIps The IPv4 DNS IP addresses of your primary and secondary self managed Active Directory domain controllers. 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. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainDnsIps(@Nullable Output> domainDnsIps) {
            $.domainDnsIps = domainDnsIps;
            return this;
        }

        /**
         * @param domainDnsIps The IPv4 DNS IP addresses of your primary and secondary self managed Active Directory domain controllers. 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. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainDnsIps(List domainDnsIps) {
            return domainDnsIps(Output.of(domainDnsIps));
        }

        /**
         * @param domainDnsIps The IPv4 DNS IP addresses of your primary and secondary self managed Active Directory domain controllers. 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. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainDnsIps(String... domainDnsIps) {
            return domainDnsIps(List.of(domainDnsIps));
        }

        /**
         * @param domainFqdn The fully qualified domain name (FQDN) of the self managed Active Directory domain. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainFqdn(@Nullable Output domainFqdn) {
            $.domainFqdn = domainFqdn;
            return this;
        }

        /**
         * @param domainFqdn The fully qualified domain name (FQDN) of the self managed Active Directory domain. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainFqdn(String domainFqdn) {
            return domainFqdn(Output.of(domainFqdn));
        }

        /**
         * @param domainIamRoleName The name of the IAM role to be used when making API calls to the Directory Service. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
         * 
         * @return builder
         * 
         */
        public Builder domainIamRoleName(@Nullable Output domainIamRoleName) {
            $.domainIamRoleName = domainIamRoleName;
            return this;
        }

        /**
         * @param domainIamRoleName The name of the IAM role to be used when making API calls to the Directory Service. Conflicts with `domain_fqdn`, `domain_ou`, `domain_auth_secret_arn` and a `domain_dns_ips`.
         * 
         * @return builder
         * 
         */
        public Builder domainIamRoleName(String domainIamRoleName) {
            return domainIamRoleName(Output.of(domainIamRoleName));
        }

        /**
         * @param domainOu The self managed Active Directory organizational unit for your DB instance to join. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainOu(@Nullable Output domainOu) {
            $.domainOu = domainOu;
            return this;
        }

        /**
         * @param domainOu The self managed Active Directory organizational unit for your DB instance to join. Conflicts with `domain` and `domain_iam_role_name`.
         * 
         * @return builder
         * 
         */
        public Builder domainOu(String domainOu) {
            return domainOu(Output.of(domainOu));
        }

        /**
         * @param enabledCloudwatchLogsExports Set of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. For supported values, see the EnableCloudwatchLogsExports.member.N parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html).
         * 
         * @return builder
         * 
         */
        public Builder enabledCloudwatchLogsExports(@Nullable Output> enabledCloudwatchLogsExports) {
            $.enabledCloudwatchLogsExports = enabledCloudwatchLogsExports;
            return this;
        }

        /**
         * @param enabledCloudwatchLogsExports Set of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. For supported values, see the EnableCloudwatchLogsExports.member.N parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html).
         * 
         * @return builder
         * 
         */
        public Builder enabledCloudwatchLogsExports(List enabledCloudwatchLogsExports) {
            return enabledCloudwatchLogsExports(Output.of(enabledCloudwatchLogsExports));
        }

        /**
         * @param enabledCloudwatchLogsExports Set of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. For supported values, see the EnableCloudwatchLogsExports.member.N parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html).
         * 
         * @return builder
         * 
         */
        public Builder enabledCloudwatchLogsExports(String... enabledCloudwatchLogsExports) {
            return enabledCloudwatchLogsExports(List.of(enabledCloudwatchLogsExports));
        }

        /**
         * @param engine The database engine to use. For supported values, see the Engine parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine must match the DB cluster's engine'. For information on the difference between the available Aurora MySQL engines see [Comparison between Aurora MySQL 1 and Aurora MySQL 2](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Updates.20180206.html) in the Amazon RDS User Guide.
         * 
         * @return builder
         * 
         */
        public Builder engine(@Nullable Output engine) {
            $.engine = engine;
            return this;
        }

        /**
         * @param engine The database engine to use. For supported values, see the Engine parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine must match the DB cluster's engine'. For information on the difference between the available Aurora MySQL engines see [Comparison between Aurora MySQL 1 and Aurora MySQL 2](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Updates.20180206.html) in the Amazon RDS User Guide.
         * 
         * @return builder
         * 
         */
        public Builder engine(String engine) {
            return engine(Output.of(engine));
        }

        /**
         * @param engineLifecycleSupport The life cycle type for this DB instance. This setting applies only to RDS for MySQL and RDS for PostgreSQL. Valid values are `open-source-rds-extended-support`, `open-source-rds-extended-support-disabled`. Default value is `open-source-rds-extended-support`. [Using Amazon RDS Extended Support]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html
         * 
         * @return builder
         * 
         */
        public Builder engineLifecycleSupport(@Nullable Output engineLifecycleSupport) {
            $.engineLifecycleSupport = engineLifecycleSupport;
            return this;
        }

        /**
         * @param engineLifecycleSupport The life cycle type for this DB instance. This setting applies only to RDS for MySQL and RDS for PostgreSQL. Valid values are `open-source-rds-extended-support`, `open-source-rds-extended-support-disabled`. Default value is `open-source-rds-extended-support`. [Using Amazon RDS Extended Support]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html
         * 
         * @return builder
         * 
         */
        public Builder engineLifecycleSupport(String engineLifecycleSupport) {
            return engineLifecycleSupport(Output.of(engineLifecycleSupport));
        }

        /**
         * @param engineVersion The engine version to use. If `auto_minor_version_upgrade` is enabled, you can provide a prefix of the version such as `8.0` (for `8.0.36`). The actual engine version used is returned in the attribute `engine_version_actual`, see Attribute Reference below. For supported values, see the EngineVersion parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine version must match the DB cluster's engine version'.
         * 
         * @return builder
         * 
         */
        public Builder engineVersion(@Nullable Output engineVersion) {
            $.engineVersion = engineVersion;
            return this;
        }

        /**
         * @param engineVersion The engine version to use. If `auto_minor_version_upgrade` is enabled, you can provide a prefix of the version such as `8.0` (for `8.0.36`). The actual engine version used is returned in the attribute `engine_version_actual`, see Attribute Reference below. For supported values, see the EngineVersion parameter in [API action CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html). Note that for Amazon Aurora instances the engine version must match the DB cluster's engine version'.
         * 
         * @return builder
         * 
         */
        public Builder engineVersion(String engineVersion) {
            return engineVersion(Output.of(engineVersion));
        }

        /**
         * @param finalSnapshotIdentifier The name of your final DB snapshot
         * when this DB instance is deleted. Must be provided if `skip_final_snapshot` is
         * set to `false`. The value must begin with a letter, only contain alphanumeric characters and hyphens, and not end with a hyphen or contain two consecutive hyphens. Must not be provided when deleting a read replica.
         * 
         * @return builder
         * 
         */
        public Builder finalSnapshotIdentifier(@Nullable Output finalSnapshotIdentifier) {
            $.finalSnapshotIdentifier = finalSnapshotIdentifier;
            return this;
        }

        /**
         * @param finalSnapshotIdentifier The name of your final DB snapshot
         * when this DB instance is deleted. Must be provided if `skip_final_snapshot` is
         * set to `false`. The value must begin with a letter, only contain alphanumeric characters and hyphens, and not end with a hyphen or contain two consecutive hyphens. Must not be provided when deleting a read replica.
         * 
         * @return builder
         * 
         */
        public Builder finalSnapshotIdentifier(String finalSnapshotIdentifier) {
            return finalSnapshotIdentifier(Output.of(finalSnapshotIdentifier));
        }

        /**
         * @param iamDatabaseAuthenticationEnabled Specifies whether mappings of AWS Identity and Access Management (IAM) accounts to database
         * accounts is enabled.
         * 
         * @return builder
         * 
         */
        public Builder iamDatabaseAuthenticationEnabled(@Nullable Output iamDatabaseAuthenticationEnabled) {
            $.iamDatabaseAuthenticationEnabled = iamDatabaseAuthenticationEnabled;
            return this;
        }

        /**
         * @param iamDatabaseAuthenticationEnabled Specifies whether mappings of AWS Identity and Access Management (IAM) accounts to database
         * accounts is enabled.
         * 
         * @return builder
         * 
         */
        public Builder iamDatabaseAuthenticationEnabled(Boolean iamDatabaseAuthenticationEnabled) {
            return iamDatabaseAuthenticationEnabled(Output.of(iamDatabaseAuthenticationEnabled));
        }

        /**
         * @param identifier The name of the RDS instance, if omitted, this provider will assign a random, unique identifier. Required if `restore_to_point_in_time` is specified.
         * 
         * @return builder
         * 
         */
        public Builder identifier(@Nullable Output identifier) {
            $.identifier = identifier;
            return this;
        }

        /**
         * @param identifier The name of the RDS instance, if omitted, this provider will assign a random, unique identifier. Required if `restore_to_point_in_time` is specified.
         * 
         * @return builder
         * 
         */
        public Builder identifier(String identifier) {
            return identifier(Output.of(identifier));
        }

        /**
         * @param identifierPrefix Creates a unique identifier beginning with the specified prefix. Conflicts with `identifier`.
         * 
         * @return builder
         * 
         */
        public Builder identifierPrefix(@Nullable Output identifierPrefix) {
            $.identifierPrefix = identifierPrefix;
            return this;
        }

        /**
         * @param identifierPrefix Creates a unique identifier beginning with the specified prefix. Conflicts with `identifier`.
         * 
         * @return builder
         * 
         */
        public Builder identifierPrefix(String identifierPrefix) {
            return identifierPrefix(Output.of(identifierPrefix));
        }

        /**
         * @param instanceClass The instance type of the RDS instance.
         * 
         * @return builder
         * 
         */
        public Builder instanceClass(Output> instanceClass) {
            $.instanceClass = instanceClass;
            return this;
        }

        /**
         * @param instanceClass The instance type of the RDS instance.
         * 
         * @return builder
         * 
         */
        public Builder instanceClass(Either instanceClass) {
            return instanceClass(Output.of(instanceClass));
        }

        /**
         * @param instanceClass The instance type of the RDS instance.
         * 
         * @return builder
         * 
         */
        public Builder instanceClass(String instanceClass) {
            return instanceClass(Either.ofLeft(instanceClass));
        }

        /**
         * @param instanceClass The instance type of the RDS instance.
         * 
         * @return builder
         * 
         */
        public Builder instanceClass(InstanceType instanceClass) {
            return instanceClass(Either.ofRight(instanceClass));
        }

        /**
         * @param iops The amount of provisioned IOPS. Setting this implies a
         * storage_type of "io1" or "io2". Can only be set when `storage_type` is `"io1"`, `"io2` or `"gp3"`.
         * Cannot be specified for gp3 storage if the `allocated_storage` value is below a per-`engine` threshold.
         * See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
         * 
         * @return builder
         * 
         */
        public Builder iops(@Nullable Output iops) {
            $.iops = iops;
            return this;
        }

        /**
         * @param iops The amount of provisioned IOPS. Setting this implies a
         * storage_type of "io1" or "io2". Can only be set when `storage_type` is `"io1"`, `"io2` or `"gp3"`.
         * Cannot be specified for gp3 storage if the `allocated_storage` value is below a per-`engine` threshold.
         * See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
         * 
         * @return builder
         * 
         */
        public Builder iops(Integer iops) {
            return iops(Output.of(iops));
        }

        /**
         * @param kmsKeyId The ARN for the KMS encryption key. If creating an
         * encrypted replica, set this to the destination KMS ARN.
         * 
         * @return builder
         * 
         */
        public Builder kmsKeyId(@Nullable Output kmsKeyId) {
            $.kmsKeyId = kmsKeyId;
            return this;
        }

        /**
         * @param kmsKeyId The ARN for the KMS encryption key. If creating an
         * encrypted replica, set this to the destination KMS ARN.
         * 
         * @return builder
         * 
         */
        public Builder kmsKeyId(String kmsKeyId) {
            return kmsKeyId(Output.of(kmsKeyId));
        }

        /**
         * @param licenseModel License model information for this DB instance. Valid values for this field are as follows:
         * * 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`
         * 
         * @return builder
         * 
         */
        public Builder licenseModel(@Nullable Output licenseModel) {
            $.licenseModel = licenseModel;
            return this;
        }

        /**
         * @param licenseModel License model information for this DB instance. Valid values for this field are as follows:
         * * 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`
         * 
         * @return builder
         * 
         */
        public Builder licenseModel(String licenseModel) {
            return licenseModel(Output.of(licenseModel));
        }

        /**
         * @param maintenanceWindow The window to perform maintenance in.
         * Syntax: "ddd:hh24:mi-ddd:hh24:mi". Eg: "Mon:00:00-Mon:03:00". See [RDS
         * Maintenance Window
         * docs](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow)
         * for more information.
         * 
         * @return builder
         * 
         */
        public Builder maintenanceWindow(@Nullable Output maintenanceWindow) {
            $.maintenanceWindow = maintenanceWindow;
            return this;
        }

        /**
         * @param maintenanceWindow The window to perform maintenance in.
         * Syntax: "ddd:hh24:mi-ddd:hh24:mi". Eg: "Mon:00:00-Mon:03:00". See [RDS
         * Maintenance Window
         * docs](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow)
         * for more information.
         * 
         * @return builder
         * 
         */
        public Builder maintenanceWindow(String maintenanceWindow) {
            return maintenanceWindow(Output.of(maintenanceWindow));
        }

        /**
         * @param manageMasterUserPassword Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if `password` is provided.
         * 
         * @return builder
         * 
         */
        public Builder manageMasterUserPassword(@Nullable Output manageMasterUserPassword) {
            $.manageMasterUserPassword = manageMasterUserPassword;
            return this;
        }

        /**
         * @param manageMasterUserPassword Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if `password` is provided.
         * 
         * @return builder
         * 
         */
        public Builder manageMasterUserPassword(Boolean manageMasterUserPassword) {
            return manageMasterUserPassword(Output.of(manageMasterUserPassword));
        }

        /**
         * @param masterUserSecretKmsKeyId 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. If not specified, the default KMS key for your Amazon Web Services account is used.
         * 
         * @return builder
         * 
         */
        public Builder masterUserSecretKmsKeyId(@Nullable Output masterUserSecretKmsKeyId) {
            $.masterUserSecretKmsKeyId = masterUserSecretKmsKeyId;
            return this;
        }

        /**
         * @param masterUserSecretKmsKeyId 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. If not specified, the default KMS key for your Amazon Web Services account is used.
         * 
         * @return builder
         * 
         */
        public Builder masterUserSecretKmsKeyId(String masterUserSecretKmsKeyId) {
            return masterUserSecretKmsKeyId(Output.of(masterUserSecretKmsKeyId));
        }

        /**
         * @param maxAllocatedStorage When configured, the upper limit to which Amazon RDS can automatically scale the storage of the DB instance. Configuring this will automatically ignore differences to `allocated_storage`. Must be greater than or equal to `allocated_storage` or `0` to disable Storage Autoscaling.
         * 
         * @return builder
         * 
         */
        public Builder maxAllocatedStorage(@Nullable Output maxAllocatedStorage) {
            $.maxAllocatedStorage = maxAllocatedStorage;
            return this;
        }

        /**
         * @param maxAllocatedStorage When configured, the upper limit to which Amazon RDS can automatically scale the storage of the DB instance. Configuring this will automatically ignore differences to `allocated_storage`. Must be greater than or equal to `allocated_storage` or `0` to disable Storage Autoscaling.
         * 
         * @return builder
         * 
         */
        public Builder maxAllocatedStorage(Integer maxAllocatedStorage) {
            return maxAllocatedStorage(Output.of(maxAllocatedStorage));
        }

        /**
         * @param monitoringInterval The interval, in seconds, between points
         * when Enhanced Monitoring metrics are collected for the DB instance. To disable
         * collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid
         * Values: 0, 1, 5, 10, 15, 30, 60.
         * 
         * @return builder
         * 
         */
        public Builder monitoringInterval(@Nullable Output monitoringInterval) {
            $.monitoringInterval = monitoringInterval;
            return this;
        }

        /**
         * @param monitoringInterval The interval, in seconds, between points
         * when Enhanced Monitoring metrics are collected for the DB instance. To disable
         * collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid
         * Values: 0, 1, 5, 10, 15, 30, 60.
         * 
         * @return builder
         * 
         */
        public Builder monitoringInterval(Integer monitoringInterval) {
            return monitoringInterval(Output.of(monitoringInterval));
        }

        /**
         * @param monitoringRoleArn The ARN for the IAM role that permits RDS
         * to send enhanced monitoring metrics to CloudWatch Logs. You can find more
         * information on the [AWS
         * Documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.html)
         * what IAM permissions are needed to allow Enhanced Monitoring for RDS Instances.
         * 
         * @return builder
         * 
         */
        public Builder monitoringRoleArn(@Nullable Output monitoringRoleArn) {
            $.monitoringRoleArn = monitoringRoleArn;
            return this;
        }

        /**
         * @param monitoringRoleArn The ARN for the IAM role that permits RDS
         * to send enhanced monitoring metrics to CloudWatch Logs. You can find more
         * information on the [AWS
         * Documentation](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.html)
         * what IAM permissions are needed to allow Enhanced Monitoring for RDS Instances.
         * 
         * @return builder
         * 
         */
        public Builder monitoringRoleArn(String monitoringRoleArn) {
            return monitoringRoleArn(Output.of(monitoringRoleArn));
        }

        /**
         * @param multiAz Specifies if the RDS instance is multi-AZ
         * 
         * @return builder
         * 
         */
        public Builder multiAz(@Nullable Output multiAz) {
            $.multiAz = multiAz;
            return this;
        }

        /**
         * @param multiAz Specifies if the RDS instance is multi-AZ
         * 
         * @return builder
         * 
         */
        public Builder multiAz(Boolean multiAz) {
            return multiAz(Output.of(multiAz));
        }

        /**
         * @return builder
         * 
         * @deprecated
         * This property has been deprecated. Please use 'dbName' instead.
         * 
         */
        @Deprecated /* This property has been deprecated. Please use 'dbName' instead. */
        public Builder name(@Nullable Output name) {
            $.name = name;
            return this;
        }

        /**
         * @return builder
         * 
         * @deprecated
         * This property has been deprecated. Please use 'dbName' instead.
         * 
         */
        @Deprecated /* This property has been deprecated. Please use 'dbName' instead. */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param ncharCharacterSetName The national character set is used in the NCHAR, NVARCHAR2, and NCLOB data types for Oracle instances. This can't be changed. See [Oracle Character Sets
         * Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html).
         * 
         * @return builder
         * 
         */
        public Builder ncharCharacterSetName(@Nullable Output ncharCharacterSetName) {
            $.ncharCharacterSetName = ncharCharacterSetName;
            return this;
        }

        /**
         * @param ncharCharacterSetName The national character set is used in the NCHAR, NVARCHAR2, and NCLOB data types for Oracle instances. This can't be changed. See [Oracle Character Sets
         * Supported in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.OracleCharacterSets.html).
         * 
         * @return builder
         * 
         */
        public Builder ncharCharacterSetName(String ncharCharacterSetName) {
            return ncharCharacterSetName(Output.of(ncharCharacterSetName));
        }

        /**
         * @param networkType The network type of the DB instance. Valid values: `IPV4`, `DUAL`.
         * 
         * @return builder
         * 
         */
        public Builder networkType(@Nullable Output networkType) {
            $.networkType = networkType;
            return this;
        }

        /**
         * @param networkType The network type of the DB instance. Valid values: `IPV4`, `DUAL`.
         * 
         * @return builder
         * 
         */
        public Builder networkType(String networkType) {
            return networkType(Output.of(networkType));
        }

        /**
         * @param optionGroupName Name of the DB option group to associate.
         * 
         * @return builder
         * 
         */
        public Builder optionGroupName(@Nullable Output optionGroupName) {
            $.optionGroupName = optionGroupName;
            return this;
        }

        /**
         * @param optionGroupName Name of the DB option group to associate.
         * 
         * @return builder
         * 
         */
        public Builder optionGroupName(String optionGroupName) {
            return optionGroupName(Output.of(optionGroupName));
        }

        /**
         * @param parameterGroupName Name of the DB parameter group to associate.
         * 
         * @return builder
         * 
         */
        public Builder parameterGroupName(@Nullable Output parameterGroupName) {
            $.parameterGroupName = parameterGroupName;
            return this;
        }

        /**
         * @param parameterGroupName Name of the DB parameter group to associate.
         * 
         * @return builder
         * 
         */
        public Builder parameterGroupName(String parameterGroupName) {
            return parameterGroupName(Output.of(parameterGroupName));
        }

        /**
         * @param password (Required unless `manage_master_user_password` is set to true or unless a `snapshot_identifier` or `replicate_source_db`
         * is provided or `manage_master_user_password` is set.) Password for the master DB user. Note that this may show up in
         * logs, and it will be stored in the state file. Cannot be set if `manage_master_user_password` is set to `true`.
         * 
         * @return builder
         * 
         */
        public Builder password(@Nullable Output password) {
            $.password = password;
            return this;
        }

        /**
         * @param password (Required unless `manage_master_user_password` is set to true or unless a `snapshot_identifier` or `replicate_source_db`
         * is provided or `manage_master_user_password` is set.) Password for the master DB user. Note that this may show up in
         * logs, and it will be stored in the state file. Cannot be set if `manage_master_user_password` is set to `true`.
         * 
         * @return builder
         * 
         */
        public Builder password(String password) {
            return password(Output.of(password));
        }

        /**
         * @param performanceInsightsEnabled Specifies whether Performance Insights are enabled. Defaults to false.
         * 
         * @return builder
         * 
         */
        public Builder performanceInsightsEnabled(@Nullable Output performanceInsightsEnabled) {
            $.performanceInsightsEnabled = performanceInsightsEnabled;
            return this;
        }

        /**
         * @param performanceInsightsEnabled Specifies whether Performance Insights are enabled. Defaults to false.
         * 
         * @return builder
         * 
         */
        public Builder performanceInsightsEnabled(Boolean performanceInsightsEnabled) {
            return performanceInsightsEnabled(Output.of(performanceInsightsEnabled));
        }

        /**
         * @param performanceInsightsKmsKeyId The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true. Once KMS key is set, it can never be changed.
         * 
         * @return builder
         * 
         */
        public Builder performanceInsightsKmsKeyId(@Nullable Output performanceInsightsKmsKeyId) {
            $.performanceInsightsKmsKeyId = performanceInsightsKmsKeyId;
            return this;
        }

        /**
         * @param performanceInsightsKmsKeyId The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true. Once KMS key is set, it can never be changed.
         * 
         * @return builder
         * 
         */
        public Builder performanceInsightsKmsKeyId(String performanceInsightsKmsKeyId) {
            return performanceInsightsKmsKeyId(Output.of(performanceInsightsKmsKeyId));
        }

        /**
         * @param performanceInsightsRetentionPeriod Amount of time in days to retain Performance Insights data. Valid values are `7`, `731` (2 years) or a multiple of `31`. When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.
         * 
         * @return builder
         * 
         */
        public Builder performanceInsightsRetentionPeriod(@Nullable Output performanceInsightsRetentionPeriod) {
            $.performanceInsightsRetentionPeriod = performanceInsightsRetentionPeriod;
            return this;
        }

        /**
         * @param performanceInsightsRetentionPeriod Amount of time in days to retain Performance Insights data. Valid values are `7`, `731` (2 years) or a multiple of `31`. When specifying `performance_insights_retention_period`, `performance_insights_enabled` needs to be set to true. Defaults to '7'.
         * 
         * @return builder
         * 
         */
        public Builder performanceInsightsRetentionPeriod(Integer performanceInsightsRetentionPeriod) {
            return performanceInsightsRetentionPeriod(Output.of(performanceInsightsRetentionPeriod));
        }

        /**
         * @param port The port on which the DB accepts connections.
         * 
         * @return builder
         * 
         */
        public Builder port(@Nullable Output port) {
            $.port = port;
            return this;
        }

        /**
         * @param port The port on which the DB accepts connections.
         * 
         * @return builder
         * 
         */
        public Builder port(Integer port) {
            return port(Output.of(port));
        }

        /**
         * @param publiclyAccessible Bool to control if instance is publicly
         * accessible. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder publiclyAccessible(@Nullable Output publiclyAccessible) {
            $.publiclyAccessible = publiclyAccessible;
            return this;
        }

        /**
         * @param publiclyAccessible Bool to control if instance is publicly
         * accessible. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder publiclyAccessible(Boolean publiclyAccessible) {
            return publiclyAccessible(Output.of(publiclyAccessible));
        }

        /**
         * @param replicaMode Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute
         * is only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.
         * 
         * @return builder
         * 
         */
        public Builder replicaMode(@Nullable Output replicaMode) {
            $.replicaMode = replicaMode;
            return this;
        }

        /**
         * @param replicaMode Specifies whether the replica is in either `mounted` or `open-read-only` mode. This attribute
         * is only supported by Oracle instances. Oracle replicas operate in `open-read-only` mode unless otherwise specified. See [Working with Oracle Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) for more information.
         * 
         * @return builder
         * 
         */
        public Builder replicaMode(String replicaMode) {
            return replicaMode(Output.of(replicaMode));
        }

        /**
         * @param replicateSourceDb Specifies that this resource is a Replicate
         * database, and to use this value as the source database. This correlates to the
         * `identifier` of another Amazon RDS Database to replicate (if replicating within
         * a single region) or ARN of the Amazon RDS Database to replicate (if replicating
         * cross-region). Note that if you are
         * creating a cross-region replica of an encrypted database you will also need to
         * specify a `kms_key_id`. See [DB Instance Replication][instance-replication] and [Working with
         * PostgreSQL and MySQL Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)
         * for more information on using Replication.
         * 
         * @return builder
         * 
         */
        public Builder replicateSourceDb(@Nullable Output replicateSourceDb) {
            $.replicateSourceDb = replicateSourceDb;
            return this;
        }

        /**
         * @param replicateSourceDb Specifies that this resource is a Replicate
         * database, and to use this value as the source database. This correlates to the
         * `identifier` of another Amazon RDS Database to replicate (if replicating within
         * a single region) or ARN of the Amazon RDS Database to replicate (if replicating
         * cross-region). Note that if you are
         * creating a cross-region replica of an encrypted database you will also need to
         * specify a `kms_key_id`. See [DB Instance Replication][instance-replication] and [Working with
         * PostgreSQL and MySQL Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)
         * for more information on using Replication.
         * 
         * @return builder
         * 
         */
        public Builder replicateSourceDb(String replicateSourceDb) {
            return replicateSourceDb(Output.of(replicateSourceDb));
        }

        /**
         * @param restoreToPointInTime A configuration block for restoring a DB instance to an arbitrary point in time. Requires the `identifier` argument to be set with the name of the new DB instance to be created. See Restore To Point In Time below for details.
         * 
         * @return builder
         * 
         */
        public Builder restoreToPointInTime(@Nullable Output restoreToPointInTime) {
            $.restoreToPointInTime = restoreToPointInTime;
            return this;
        }

        /**
         * @param restoreToPointInTime A configuration block for restoring a DB instance to an arbitrary point in time. Requires the `identifier` argument to be set with the name of the new DB instance to be created. See Restore To Point In Time below for details.
         * 
         * @return builder
         * 
         */
        public Builder restoreToPointInTime(InstanceRestoreToPointInTimeArgs restoreToPointInTime) {
            return restoreToPointInTime(Output.of(restoreToPointInTime));
        }

        /**
         * @param s3Import Restore from a Percona Xtrabackup in S3.  See [Importing Data into an Amazon RDS MySQL DB Instance](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html)
         * 
         * @return builder
         * 
         */
        public Builder s3Import(@Nullable Output s3Import) {
            $.s3Import = s3Import;
            return this;
        }

        /**
         * @param s3Import Restore from a Percona Xtrabackup in S3.  See [Importing Data into an Amazon RDS MySQL DB Instance](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html)
         * 
         * @return builder
         * 
         */
        public Builder s3Import(InstanceS3ImportArgs s3Import) {
            return s3Import(Output.of(s3Import));
        }

        /**
         * @param skipFinalSnapshot 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`.
         * 
         * @return builder
         * 
         */
        public Builder skipFinalSnapshot(@Nullable Output skipFinalSnapshot) {
            $.skipFinalSnapshot = skipFinalSnapshot;
            return this;
        }

        /**
         * @param skipFinalSnapshot 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`.
         * 
         * @return builder
         * 
         */
        public Builder skipFinalSnapshot(Boolean skipFinalSnapshot) {
            return skipFinalSnapshot(Output.of(skipFinalSnapshot));
        }

        /**
         * @param snapshotIdentifier 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.
         * 
         * @return builder
         * 
         */
        public Builder snapshotIdentifier(@Nullable Output snapshotIdentifier) {
            $.snapshotIdentifier = snapshotIdentifier;
            return this;
        }

        /**
         * @param snapshotIdentifier 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.
         * 
         * @return builder
         * 
         */
        public Builder snapshotIdentifier(String snapshotIdentifier) {
            return snapshotIdentifier(Output.of(snapshotIdentifier));
        }

        /**
         * @param storageEncrypted Specifies whether the DB instance is
         * encrypted. Note that if you are creating a cross-region read replica this field
         * is ignored and you should instead declare `kms_key_id` with a valid ARN. The
         * default is `false` if not specified.
         * 
         * @return builder
         * 
         */
        public Builder storageEncrypted(@Nullable Output storageEncrypted) {
            $.storageEncrypted = storageEncrypted;
            return this;
        }

        /**
         * @param storageEncrypted Specifies whether the DB instance is
         * encrypted. Note that if you are creating a cross-region read replica this field
         * is ignored and you should instead declare `kms_key_id` with a valid ARN. The
         * default is `false` if not specified.
         * 
         * @return builder
         * 
         */
        public Builder storageEncrypted(Boolean storageEncrypted) {
            return storageEncrypted(Output.of(storageEncrypted));
        }

        /**
         * @param storageThroughput The storage throughput value for the DB instance. Can only be set when `storage_type` is `"gp3"`. Cannot be specified if the `allocated_storage` value is below a per-`engine` threshold. See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
         * 
         * @return builder
         * 
         */
        public Builder storageThroughput(@Nullable Output storageThroughput) {
            $.storageThroughput = storageThroughput;
            return this;
        }

        /**
         * @param storageThroughput The storage throughput value for the DB instance. Can only be set when `storage_type` is `"gp3"`. Cannot be specified if the `allocated_storage` value is below a per-`engine` threshold. See the [RDS User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#gp3-storage) for details.
         * 
         * @return builder
         * 
         */
        public Builder storageThroughput(Integer storageThroughput) {
            return storageThroughput(Output.of(storageThroughput));
        }

        /**
         * @param storageType One of "standard" (magnetic), "gp2" (general
         * purpose SSD), "gp3" (general purpose SSD that needs `iops` independently)
         * "io1" (provisioned IOPS SSD) or "io2" (block express storage provisioned IOPS
         * SSD). The default is "io1" if `iops` is specified, "gp2" if not.
         * 
         * @return builder
         * 
         */
        public Builder storageType(@Nullable Output> storageType) {
            $.storageType = storageType;
            return this;
        }

        /**
         * @param storageType One of "standard" (magnetic), "gp2" (general
         * purpose SSD), "gp3" (general purpose SSD that needs `iops` independently)
         * "io1" (provisioned IOPS SSD) or "io2" (block express storage provisioned IOPS
         * SSD). The default is "io1" if `iops` is specified, "gp2" if not.
         * 
         * @return builder
         * 
         */
        public Builder storageType(Either storageType) {
            return storageType(Output.of(storageType));
        }

        /**
         * @param storageType One of "standard" (magnetic), "gp2" (general
         * purpose SSD), "gp3" (general purpose SSD that needs `iops` independently)
         * "io1" (provisioned IOPS SSD) or "io2" (block express storage provisioned IOPS
         * SSD). The default is "io1" if `iops` is specified, "gp2" if not.
         * 
         * @return builder
         * 
         */
        public Builder storageType(String storageType) {
            return storageType(Either.ofLeft(storageType));
        }

        /**
         * @param storageType One of "standard" (magnetic), "gp2" (general
         * purpose SSD), "gp3" (general purpose SSD that needs `iops` independently)
         * "io1" (provisioned IOPS SSD) or "io2" (block express storage provisioned IOPS
         * SSD). The default is "io1" if `iops` is specified, "gp2" if not.
         * 
         * @return builder
         * 
         */
        public Builder storageType(StorageType storageType) {
            return storageType(Either.ofRight(storageType));
        }

        /**
         * @param tags A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param timezone Time zone of the DB instance. `timezone` is currently
         * only supported by Microsoft SQL Server. The `timezone` can only be set on
         * creation. See [MSSQL User
         * Guide](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone)
         * for more information.
         * 
         * @return builder
         * 
         */
        public Builder timezone(@Nullable Output timezone) {
            $.timezone = timezone;
            return this;
        }

        /**
         * @param timezone Time zone of the DB instance. `timezone` is currently
         * only supported by Microsoft SQL Server. The `timezone` can only be set on
         * creation. See [MSSQL User
         * Guide](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone)
         * for more information.
         * 
         * @return builder
         * 
         */
        public Builder timezone(String timezone) {
            return timezone(Output.of(timezone));
        }

        /**
         * @param upgradeStorageConfig Whether to upgrade the storage file system configuration on the read replica. Can only be set with `replicate_source_db`.
         * 
         * @return builder
         * 
         */
        public Builder upgradeStorageConfig(@Nullable Output upgradeStorageConfig) {
            $.upgradeStorageConfig = upgradeStorageConfig;
            return this;
        }

        /**
         * @param upgradeStorageConfig Whether to upgrade the storage file system configuration on the read replica. Can only be set with `replicate_source_db`.
         * 
         * @return builder
         * 
         */
        public Builder upgradeStorageConfig(Boolean upgradeStorageConfig) {
            return upgradeStorageConfig(Output.of(upgradeStorageConfig));
        }

        /**
         * @param username (Required unless a `snapshot_identifier` or `replicate_source_db`
         * is provided) Username for the master DB user. Cannot be specified for a replica.
         * 
         * @return builder
         * 
         */
        public Builder username(@Nullable Output username) {
            $.username = username;
            return this;
        }

        /**
         * @param username (Required unless a `snapshot_identifier` or `replicate_source_db`
         * is provided) Username for the master DB user. Cannot be specified for a replica.
         * 
         * @return builder
         * 
         */
        public Builder username(String username) {
            return username(Output.of(username));
        }

        /**
         * @param vpcSecurityGroupIds List of VPC security groups to
         * associate.
         * 
         * @return builder
         * 
         */
        public Builder vpcSecurityGroupIds(@Nullable Output> vpcSecurityGroupIds) {
            $.vpcSecurityGroupIds = vpcSecurityGroupIds;
            return this;
        }

        /**
         * @param vpcSecurityGroupIds List of VPC security groups to
         * associate.
         * 
         * @return builder
         * 
         */
        public Builder vpcSecurityGroupIds(List vpcSecurityGroupIds) {
            return vpcSecurityGroupIds(Output.of(vpcSecurityGroupIds));
        }

        /**
         * @param vpcSecurityGroupIds List of VPC security groups to
         * associate.
         * 
         * @return builder
         * 
         */
        public Builder vpcSecurityGroupIds(String... vpcSecurityGroupIds) {
            return vpcSecurityGroupIds(List.of(vpcSecurityGroupIds));
        }

        public InstanceArgs build() {
            if ($.instanceClass == null) {
                throw new MissingRequiredPropertyException("InstanceArgs", "instanceClass");
            }
            return $;
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy