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

io.cloudshiftdev.awscdk.services.elasticache.CfnReplicationGroupProps.kt Maven / Gradle / Ivy

The newest version!
@file:Suppress("RedundantVisibilityModifier","RedundantUnitReturnType","RemoveRedundantQualifierName","unused","UnusedImport","ClassName","REDUNDANT_PROJECTION","DEPRECATION")

package io.cloudshiftdev.awscdk.services.elasticache

import io.cloudshiftdev.awscdk.CfnTag
import io.cloudshiftdev.awscdk.IResolvable
import io.cloudshiftdev.awscdk.common.CdkDslMarker
import io.cloudshiftdev.awscdk.common.CdkObject
import io.cloudshiftdev.awscdk.common.CdkObjectWrappers
import kotlin.Any
import kotlin.Boolean
import kotlin.Number
import kotlin.String
import kotlin.Unit
import kotlin.collections.List

/**
 * Properties for defining a `CfnReplicationGroup`.
 *
 * Example:
 *
 * ```
 * // The code below shows an example of how to instantiate this type.
 * // The values are placeholders you should change.
 * import io.cloudshiftdev.awscdk.services.elasticache.*;
 * CfnReplicationGroupProps cfnReplicationGroupProps = CfnReplicationGroupProps.builder()
 * .replicationGroupDescription("replicationGroupDescription")
 * // the properties below are optional
 * .atRestEncryptionEnabled(false)
 * .authToken("authToken")
 * .automaticFailoverEnabled(false)
 * .autoMinorVersionUpgrade(false)
 * .cacheNodeType("cacheNodeType")
 * .cacheParameterGroupName("cacheParameterGroupName")
 * .cacheSecurityGroupNames(List.of("cacheSecurityGroupNames"))
 * .cacheSubnetGroupName("cacheSubnetGroupName")
 * .clusterMode("clusterMode")
 * .dataTieringEnabled(false)
 * .engine("engine")
 * .engineVersion("engineVersion")
 * .globalReplicationGroupId("globalReplicationGroupId")
 * .ipDiscovery("ipDiscovery")
 * .kmsKeyId("kmsKeyId")
 * .logDeliveryConfigurations(List.of(LogDeliveryConfigurationRequestProperty.builder()
 * .destinationDetails(DestinationDetailsProperty.builder()
 * .cloudWatchLogsDetails(CloudWatchLogsDestinationDetailsProperty.builder()
 * .logGroup("logGroup")
 * .build())
 * .kinesisFirehoseDetails(KinesisFirehoseDestinationDetailsProperty.builder()
 * .deliveryStream("deliveryStream")
 * .build())
 * .build())
 * .destinationType("destinationType")
 * .logFormat("logFormat")
 * .logType("logType")
 * .build()))
 * .multiAzEnabled(false)
 * .networkType("networkType")
 * .nodeGroupConfiguration(List.of(NodeGroupConfigurationProperty.builder()
 * .nodeGroupId("nodeGroupId")
 * .primaryAvailabilityZone("primaryAvailabilityZone")
 * .replicaAvailabilityZones(List.of("replicaAvailabilityZones"))
 * .replicaCount(123)
 * .slots("slots")
 * .build()))
 * .notificationTopicArn("notificationTopicArn")
 * .numCacheClusters(123)
 * .numNodeGroups(123)
 * .port(123)
 * .preferredCacheClusterAZs(List.of("preferredCacheClusterAZs"))
 * .preferredMaintenanceWindow("preferredMaintenanceWindow")
 * .primaryClusterId("primaryClusterId")
 * .replicasPerNodeGroup(123)
 * .replicationGroupId("replicationGroupId")
 * .securityGroupIds(List.of("securityGroupIds"))
 * .snapshotArns(List.of("snapshotArns"))
 * .snapshotName("snapshotName")
 * .snapshotRetentionLimit(123)
 * .snapshottingClusterId("snapshottingClusterId")
 * .snapshotWindow("snapshotWindow")
 * .tags(List.of(CfnTag.builder()
 * .key("key")
 * .value("value")
 * .build()))
 * .transitEncryptionEnabled(false)
 * .transitEncryptionMode("transitEncryptionMode")
 * .userGroupIds(List.of("userGroupIds"))
 * .build();
 * ```
 *
 * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html)
 */
public interface CfnReplicationGroupProps {
  /**
   * A flag that enables encryption at rest when set to `true` .
   *
   * You cannot modify the value of `AtRestEncryptionEnabled` after the replication group is
   * created. To enable encryption at rest on a replication group you must set
   * `AtRestEncryptionEnabled` to `true` when you create the replication group.
   *
   * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
   * version `3.2.6` or `4.x` onward.
   *
   * Default: `false`
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-atrestencryptionenabled)
   */
  public fun atRestEncryptionEnabled(): Any? = unwrap(this).getAtRestEncryptionEnabled()

  /**
   * *Reserved parameter.* The password used to access a password protected server.
   *
   * `AuthToken` can be specified only on replication groups where `TransitEncryptionEnabled` is
   * `true` . For more information, see [Authenticating Users with the Redis OSS AUTH
   * Command](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth.html) .
   *
   *
   * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken` ,
   * and a `CacheSubnetGroup` .
   *
   *
   * Password constraints:
   *
   * * Must be only printable ASCII characters.
   * * Must be at least 16 characters and no more than 128 characters in length.
   * * Nonalphanumeric characters are restricted to (!, &, #, $, ^, <, >, -, ).
   *
   * For more information, see [AUTH
   * password](https://docs.aws.amazon.com/http://redis.io/commands/AUTH) at
   * http://redis.io/commands/AUTH.
   *
   *
   * If ADDING the AuthToken, update requires
   * [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
   * .
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-authtoken)
   */
  public fun authToken(): String? = unwrap(this).getAuthToken()

  /**
   * If you are running Redis OSS engine version 6.0 or later, set this parameter to yes if you want
   * to opt-in to the next minor version upgrade campaign. This parameter is disabled for previous
   * versions.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-autominorversionupgrade)
   */
  public fun autoMinorVersionUpgrade(): Any? = unwrap(this).getAutoMinorVersionUpgrade()

  /**
   * Specifies whether a read-only replica is automatically promoted to read/write primary if the
   * existing primary fails.
   *
   * `AutomaticFailoverEnabled` must be enabled for Redis OSS (cluster mode enabled) replication
   * groups.
   *
   * Default: false
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-automaticfailoverenabled)
   */
  public fun automaticFailoverEnabled(): Any? = unwrap(this).getAutomaticFailoverEnabled()

  /**
   * The compute and memory capacity of the nodes in the node group (shard).
   *
   * The following node types are supported by ElastiCache. Generally speaking, the current
   * generation types provide more memory and computational power at lower cost when compared to their
   * equivalent previous generation counterparts.
   *
   * * General purpose:
   * * Current generation:
   *
   * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
   * `cache.m6g.4xlarge` , `cache.m6g.12xlarge` , `cache.m6g.24xlarge`
   *
   * *M5 node types:* `cache.m5.large` , `cache.m5.xlarge` , `cache.m5.2xlarge` , `cache.m5.4xlarge`
   * , `cache.m5.12xlarge` , `cache.m5.24xlarge`
   *
   * *M4 node types:* `cache.m4.large` , `cache.m4.xlarge` , `cache.m4.2xlarge` , `cache.m4.4xlarge`
   * , `cache.m4.10xlarge`
   *
   * *T4g node types:* `cache.t4g.micro` , `cache.t4g.small` , `cache.t4g.medium`
   *
   * *T3 node types:* `cache.t3.micro` , `cache.t3.small` , `cache.t3.medium`
   *
   * *T2 node types:* `cache.t2.micro` , `cache.t2.small` , `cache.t2.medium`
   *
   * * Previous generation: (not recommended)
   *
   * *T1 node types:* `cache.t1.micro`
   *
   * *M1 node types:* `cache.m1.small` , `cache.m1.medium` , `cache.m1.large` , `cache.m1.xlarge`
   *
   * *M3 node types:* `cache.m3.medium` , `cache.m3.large` , `cache.m3.xlarge` , `cache.m3.2xlarge`
   *
   * * Compute optimized:
   * * Previous generation: (not recommended)
   *
   * *C1 node types:* `cache.c1.xlarge`
   *
   * * Memory optimized:
   * * Current generation:
   *
   * *R6gd node types:* `cache.r6gd.xlarge` , `cache.r6gd.2xlarge` , `cache.r6gd.4xlarge` ,
   * `cache.r6gd.8xlarge` , `cache.r6gd.12xlarge` , `cache.r6gd.16xlarge`
   *
   *
   * The `r6gd` family is available in the following regions: `us-east-2` , `us-east-1` ,
   * `us-west-2` , `us-west-1` , `eu-west-1` , `eu-central-1` , `ap-northeast-1` , `ap-southeast-1` ,
   * `ap-southeast-2` .
   *
   *
   * *R6g node types:* `cache.r6g.large` , `cache.r6g.xlarge` , `cache.r6g.2xlarge` ,
   * `cache.r6g.4xlarge` , `cache.r6g.12xlarge` , `cache.r6g.24xlarge`
   *
   * *R5 node types:* `cache.r5.large` , `cache.r5.xlarge` , `cache.r5.2xlarge` , `cache.r5.4xlarge`
   * , `cache.r5.12xlarge` , `cache.r5.24xlarge`
   *
   * *R4 node types:* `cache.r4.large` , `cache.r4.xlarge` , `cache.r4.2xlarge` , `cache.r4.4xlarge`
   * , `cache.r4.8xlarge` , `cache.r4.16xlarge`
   *
   * * Previous generation: (not recommended)
   *
   * *M2 node types:* `cache.m2.xlarge` , `cache.m2.2xlarge` , `cache.m2.4xlarge`
   *
   * *R3 node types:* `cache.r3.large` , `cache.r3.xlarge` , `cache.r3.2xlarge` , `cache.r3.4xlarge`
   * , `cache.r3.8xlarge`
   *
   * For region availability, see [Supported Node Types by Amazon
   * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachenodetype)
   */
  public fun cacheNodeType(): String? = unwrap(this).getCacheNodeType()

  /**
   * The name of the parameter group to associate with this replication group.
   *
   * If this argument is omitted, the default cache parameter group for the specified engine is
   * used.
   *
   * If you are running Redis OSS version 3.2.4 or later, only one node group (shard), and want to
   * use a default parameter group, we recommend that you specify the parameter group by name.
   *
   * * To create a Redis OSS (cluster mode disabled) replication group, use
   * `CacheParameterGroupName=default.redis3.2` .
   * * To create a Redis OSS (cluster mode enabled) replication group, use
   * `CacheParameterGroupName=default.redis3.2.cluster.on` .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cacheparametergroupname)
   */
  public fun cacheParameterGroupName(): String? = unwrap(this).getCacheParameterGroupName()

  /**
   * A list of cache security group names to associate with this replication group.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesecuritygroupnames)
   */
  public fun cacheSecurityGroupNames(): List = unwrap(this).getCacheSecurityGroupNames() ?:
      emptyList()

  /**
   * The name of the cache subnet group to be used for the replication group.
   *
   *
   * If you're going to launch your cluster in an Amazon VPC, you need to create a subnet group
   * before you start creating a cluster. For more information, see
   * [AWS::ElastiCache::SubnetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html)
   * .
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesubnetgroupname)
   */
  public fun cacheSubnetGroupName(): String? = unwrap(this).getCacheSubnetGroupName()

  /**
   * Enabled or Disabled.
   *
   * To modify cluster mode from Disabled to Enabled, you must first set the cluster mode to
   * Compatible. Compatible mode allows your Redis OSS clients to connect using both cluster mode
   * enabled and cluster mode disabled. After you migrate all Redis OSS clients to use cluster mode
   * enabled, you can then complete cluster mode configuration and set the cluster mode to Enabled. For
   * more information, see [Modify cluster
   * mode](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/modify-cluster-mode.html) .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-clustermode)
   */
  public fun clusterMode(): String? = unwrap(this).getClusterMode()

  /**
   * Enables data tiering.
   *
   * Data tiering is only supported for replication groups using the r6gd node type. This parameter
   * must be set to true when using r6gd nodes. For more information, see [Data
   * tiering](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/data-tiering.html) .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-datatieringenabled)
   */
  public fun dataTieringEnabled(): Any? = unwrap(this).getDataTieringEnabled()

  /**
   * The name of the cache engine to be used for the clusters in this replication group.
   *
   * The value must be set to `Redis` .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engine)
   */
  public fun engine(): String? = unwrap(this).getEngine()

  /**
   * The version number of the cache engine to be used for the clusters in this replication group.
   *
   * To view the supported cache engine versions, use the `DescribeCacheEngineVersions` operation.
   *
   * *Important:* You can upgrade to a newer engine version (see [Selecting a Cache Engine and
   * Version](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html#VersionManagement)
   * ) in the *ElastiCache User Guide* , but you cannot downgrade to an earlier engine version. If you
   * want to use an earlier engine version, you must delete the existing cluster or replication group
   * and create it anew with the earlier engine version.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engineversion)
   */
  public fun engineVersion(): String? = unwrap(this).getEngineVersion()

  /**
   * The name of the Global datastore.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-globalreplicationgroupid)
   */
  public fun globalReplicationGroupId(): String? = unwrap(this).getGlobalReplicationGroupId()

  /**
   * The network type you choose when creating a replication group, either `ipv4` | `ipv6` .
   *
   * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
   * version 1.6.6 on all instances built on the [Nitro system](https://docs.aws.amazon.com/ec2/nitro/)
   * .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-ipdiscovery)
   */
  public fun ipDiscovery(): String? = unwrap(this).getIpDiscovery()

  /**
   * The ID of the KMS key used to encrypt the disk on the cluster.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-kmskeyid)
   */
  public fun kmsKeyId(): String? = unwrap(this).getKmsKeyId()

  /**
   * Specifies the destination, format and type of the logs.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-logdeliveryconfigurations)
   */
  public fun logDeliveryConfigurations(): Any? = unwrap(this).getLogDeliveryConfigurations()

  /**
   * A flag indicating if you have Multi-AZ enabled to enhance fault tolerance.
   *
   * For more information, see [Minimizing Downtime:
   * Multi-AZ](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html) .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-multiazenabled)
   */
  public fun multiAzEnabled(): Any? = unwrap(this).getMultiAzEnabled()

  /**
   * Must be either `ipv4` | `ipv6` | `dual_stack` .
   *
   * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
   * version 1.6.6 on all instances built on the [Nitro system](https://docs.aws.amazon.com/ec2/nitro/)
   * .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-networktype)
   */
  public fun networkType(): String? = unwrap(this).getNetworkType()

  /**
   * `NodeGroupConfiguration` is a property of the `AWS::ElastiCache::ReplicationGroup` resource
   * that configures an Amazon ElastiCache (ElastiCache) Redis OSS cluster node group.
   *
   * If you set
   * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
   * to `true` , you can update `NodeGroupConfiguration` without interruption. When
   * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
   * results in
   * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
   * .
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-nodegroupconfiguration)
   */
  public fun nodeGroupConfiguration(): Any? = unwrap(this).getNodeGroupConfiguration()

  /**
   * The Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic to which
   * notifications are sent.
   *
   *
   * The Amazon SNS topic owner must be the same as the cluster owner.
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-notificationtopicarn)
   */
  public fun notificationTopicArn(): String? = unwrap(this).getNotificationTopicArn()

  /**
   * The number of clusters this replication group initially has.
   *
   * This parameter is not used if there is more than one node group (shard). You should use
   * `ReplicasPerNodeGroup` instead.
   *
   * If `AutomaticFailoverEnabled` is `true` , the value of this parameter must be at least 2. If
   * `AutomaticFailoverEnabled` is `false` you can omit this parameter (it will default to 1), or you
   * can explicitly set it to a value between 2 and 6.
   *
   * The maximum permitted value for `NumCacheClusters` is 6 (1 primary plus 5 replicas).
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numcacheclusters)
   */
  public fun numCacheClusters(): Number? = unwrap(this).getNumCacheClusters()

  /**
   * An optional parameter that specifies the number of node groups (shards) for this Redis OSS
   * (cluster mode enabled) replication group.
   *
   * For Redis OSS (cluster mode disabled) either omit this parameter or set it to 1.
   *
   * If you set
   * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
   * to `true` , you can update `NumNodeGroups` without interruption. When `UseOnlineResharding` is set
   * to `false` , or is not specified, updating `NumNodeGroups` results in
   * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
   * .
   *
   * Default: 1
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numnodegroups)
   */
  public fun numNodeGroups(): Number? = unwrap(this).getNumNodeGroups()

  /**
   * The port number on which each member of the replication group accepts connections.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-port)
   */
  public fun port(): Number? = unwrap(this).getPort()

  /**
   * A list of EC2 Availability Zones in which the replication group's clusters are created.
   *
   * The order of the Availability Zones in the list is the order in which clusters are allocated.
   * The primary cluster is created in the first AZ in the list.
   *
   * This parameter is not used if there is more than one node group (shard). You should use
   * `NodeGroupConfiguration` instead.
   *
   *
   * If you are creating your replication group in an Amazon VPC (recommended), you can only locate
   * clusters in Availability Zones associated with the subnets in the selected subnet group.
   *
   * The number of Availability Zones listed must equal the value of `NumCacheClusters` .
   *
   *
   * Default: system chosen Availability Zones.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredcacheclusterazs)
   */
  public fun preferredCacheClusterAZs(): List = unwrap(this).getPreferredCacheClusterAZs()
      ?: emptyList()

  /**
   * Specifies the weekly time range during which maintenance on the cluster is performed.
   *
   * It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum
   * maintenance window is a 60 minute period.
   *
   * Valid values for `ddd` are:
   *
   * * `sun`
   * * `mon`
   * * `tue`
   * * `wed`
   * * `thu`
   * * `fri`
   * * `sat`
   *
   * Example: `sun:23:00-mon:01:30`
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredmaintenancewindow)
   */
  public fun preferredMaintenanceWindow(): String? = unwrap(this).getPreferredMaintenanceWindow()

  /**
   * The identifier of the cluster that serves as the primary for this replication group.
   *
   * This cluster must already exist and have a status of `available` .
   *
   * This parameter is not required if `NumCacheClusters` , `NumNodeGroups` , or
   * `ReplicasPerNodeGroup` is specified.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-primaryclusterid)
   */
  public fun primaryClusterId(): String? = unwrap(this).getPrimaryClusterId()

  /**
   * An optional parameter that specifies the number of replica nodes in each node group (shard).
   *
   * Valid values are 0 to 5.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicaspernodegroup)
   */
  public fun replicasPerNodeGroup(): Number? = unwrap(this).getReplicasPerNodeGroup()

  /**
   * A user-created description for the replication group.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupdescription)
   */
  public fun replicationGroupDescription(): String

  /**
   * The replication group identifier. This parameter is stored as a lowercase string.
   *
   * Constraints:
   *
   * * A name must contain from 1 to 40 alphanumeric characters or hyphens.
   * * The first character must be a letter.
   * * A name cannot end with a hyphen or contain two consecutive hyphens.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupid)
   */
  public fun replicationGroupId(): String? = unwrap(this).getReplicationGroupId()

  /**
   * One or more Amazon VPC security groups associated with this replication group.
   *
   * Use this parameter only when you are creating a replication group in an Amazon Virtual Private
   * Cloud (Amazon VPC).
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-securitygroupids)
   */
  public fun securityGroupIds(): List = unwrap(this).getSecurityGroupIds() ?: emptyList()

  /**
   * A list of Amazon Resource Names (ARN) that uniquely identify the Redis OSS RDB snapshot files
   * stored in Amazon S3.
   *
   * The snapshot files are used to populate the new replication group. The Amazon S3 object name in
   * the ARN cannot contain any commas. The new replication group will have the number of node groups
   * (console: shards) specified by the parameter *NumNodeGroups* or the number of node groups
   * configured by *NodeGroupConfiguration* regardless of the number of ARNs specified here.
   *
   * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotarns)
   */
  public fun snapshotArns(): List = unwrap(this).getSnapshotArns() ?: emptyList()

  /**
   * The name of a snapshot from which to restore data into the new replication group.
   *
   * The snapshot status changes to `restoring` while the new replication group is being created.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotname)
   */
  public fun snapshotName(): String? = unwrap(this).getSnapshotName()

  /**
   * The number of days for which ElastiCache retains automatic snapshots before deleting them.
   *
   * For example, if you set `SnapshotRetentionLimit` to 5, a snapshot that was taken today is
   * retained for 5 days before being deleted.
   *
   * Default: 0 (i.e., automatic backups are disabled for this cluster).
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotretentionlimit)
   */
  public fun snapshotRetentionLimit(): Number? = unwrap(this).getSnapshotRetentionLimit()

  /**
   * The daily time range (in UTC) during which ElastiCache begins taking a daily snapshot of your
   * node group (shard).
   *
   * Example: `05:00-09:00`
   *
   * If you do not specify this parameter, ElastiCache automatically chooses an appropriate time
   * range.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotwindow)
   */
  public fun snapshotWindow(): String? = unwrap(this).getSnapshotWindow()

  /**
   * The cluster ID that is used as the daily snapshot source for the replication group.
   *
   * This parameter cannot be set for Redis OSS (cluster mode enabled) replication groups.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshottingclusterid)
   */
  public fun snapshottingClusterId(): String? = unwrap(this).getSnapshottingClusterId()

  /**
   * A list of tags to be added to this resource.
   *
   * Tags are comma-separated key,value pairs (e.g. Key= `myKey` , Value= `myKeyValue` . You can
   * include multiple tags as shown following: Key= `myKey` , Value= `myKeyValue` Key= `mySecondKey` ,
   * Value= `mySecondKeyValue` . Tags on replication groups will be replicated to all nodes.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-tags)
   */
  public fun tags(): List = unwrap(this).getTags()?.map(CfnTag::wrap) ?: emptyList()

  /**
   * A flag that enables in-transit encryption when set to `true` .
   *
   * You cannot modify the value of `TransitEncryptionEnabled` after the cluster is created. To
   * enable in-transit encryption on a cluster you must set `TransitEncryptionEnabled` to `true` when
   * you create a cluster.
   *
   * This parameter is valid only if the `Engine` parameter is `redis` , the `EngineVersion`
   * parameter is `3.2.6` or `4.x` onward, and the cluster is being created in an Amazon VPC.
   *
   * If you enable in-transit encryption, you must also specify a value for `CacheSubnetGroup` .
   *
   * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
   * version `3.2.6` or `4.x` onward.
   *
   * Default: `false`
   *
   *
   * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken` ,
   * and a `CacheSubnetGroup` .
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-transitencryptionenabled)
   */
  public fun transitEncryptionEnabled(): Any? = unwrap(this).getTransitEncryptionEnabled()

  /**
   * A setting that allows you to migrate your clients to use in-transit encryption, with no
   * downtime.
   *
   * When setting `TransitEncryptionEnabled` to `true` , you can set your `TransitEncryptionMode` to
   * `preferred` in the same request, to allow both encrypted and unencrypted connections at the same
   * time. Once you migrate all your Redis OSS clients to use encrypted connections you can modify the
   * value to `required` to allow encrypted connections only.
   *
   * Setting `TransitEncryptionMode` to `required` is a two-step process that requires you to first
   * set the `TransitEncryptionMode` to `preferred` , after that you can set `TransitEncryptionMode` to
   * `required` .
   *
   * This process will not trigger the replacement of the replication group.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-transitencryptionmode)
   */
  public fun transitEncryptionMode(): String? = unwrap(this).getTransitEncryptionMode()

  /**
   * The ID of user group to associate with the replication group.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-usergroupids)
   */
  public fun userGroupIds(): List = unwrap(this).getUserGroupIds() ?: emptyList()

  /**
   * A builder for [CfnReplicationGroupProps]
   */
  @CdkDslMarker
  public interface Builder {
    /**
     * @param atRestEncryptionEnabled A flag that enables encryption at rest when set to `true` .
     * You cannot modify the value of `AtRestEncryptionEnabled` after the replication group is
     * created. To enable encryption at rest on a replication group you must set
     * `AtRestEncryptionEnabled` to `true` when you create the replication group.
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     */
    public fun atRestEncryptionEnabled(atRestEncryptionEnabled: Boolean)

    /**
     * @param atRestEncryptionEnabled A flag that enables encryption at rest when set to `true` .
     * You cannot modify the value of `AtRestEncryptionEnabled` after the replication group is
     * created. To enable encryption at rest on a replication group you must set
     * `AtRestEncryptionEnabled` to `true` when you create the replication group.
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     */
    public fun atRestEncryptionEnabled(atRestEncryptionEnabled: IResolvable)

    /**
     * @param authToken *Reserved parameter.* The password used to access a password protected
     * server.
     * `AuthToken` can be specified only on replication groups where `TransitEncryptionEnabled` is
     * `true` . For more information, see [Authenticating Users with the Redis OSS AUTH
     * Command](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth.html) .
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     *
     *
     * Password constraints:
     *
     * * Must be only printable ASCII characters.
     * * Must be at least 16 characters and no more than 128 characters in length.
     * * Nonalphanumeric characters are restricted to (!, &, #, $, ^, <, >, -, ).
     *
     * For more information, see [AUTH
     * password](https://docs.aws.amazon.com/http://redis.io/commands/AUTH) at
     * http://redis.io/commands/AUTH.
     *
     *
     * If ADDING the AuthToken, update requires
     * [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    public fun authToken(authToken: String)

    /**
     * @param autoMinorVersionUpgrade If you are running Redis OSS engine version 6.0 or later, set
     * this parameter to yes if you want to opt-in to the next minor version upgrade campaign. This
     * parameter is disabled for previous versions.
     */
    public fun autoMinorVersionUpgrade(autoMinorVersionUpgrade: Boolean)

    /**
     * @param autoMinorVersionUpgrade If you are running Redis OSS engine version 6.0 or later, set
     * this parameter to yes if you want to opt-in to the next minor version upgrade campaign. This
     * parameter is disabled for previous versions.
     */
    public fun autoMinorVersionUpgrade(autoMinorVersionUpgrade: IResolvable)

    /**
     * @param automaticFailoverEnabled Specifies whether a read-only replica is automatically
     * promoted to read/write primary if the existing primary fails.
     * `AutomaticFailoverEnabled` must be enabled for Redis OSS (cluster mode enabled) replication
     * groups.
     *
     * Default: false
     */
    public fun automaticFailoverEnabled(automaticFailoverEnabled: Boolean)

    /**
     * @param automaticFailoverEnabled Specifies whether a read-only replica is automatically
     * promoted to read/write primary if the existing primary fails.
     * `AutomaticFailoverEnabled` must be enabled for Redis OSS (cluster mode enabled) replication
     * groups.
     *
     * Default: false
     */
    public fun automaticFailoverEnabled(automaticFailoverEnabled: IResolvable)

    /**
     * @param cacheNodeType The compute and memory capacity of the nodes in the node group (shard).
     * The following node types are supported by ElastiCache. Generally speaking, the current
     * generation types provide more memory and computational power at lower cost when compared to
     * their equivalent previous generation counterparts.
     *
     * * General purpose:
     * * Current generation:
     *
     * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
     * `cache.m6g.4xlarge` , `cache.m6g.12xlarge` , `cache.m6g.24xlarge`
     *
     * *M5 node types:* `cache.m5.large` , `cache.m5.xlarge` , `cache.m5.2xlarge` ,
     * `cache.m5.4xlarge` , `cache.m5.12xlarge` , `cache.m5.24xlarge`
     *
     * *M4 node types:* `cache.m4.large` , `cache.m4.xlarge` , `cache.m4.2xlarge` ,
     * `cache.m4.4xlarge` , `cache.m4.10xlarge`
     *
     * *T4g node types:* `cache.t4g.micro` , `cache.t4g.small` , `cache.t4g.medium`
     *
     * *T3 node types:* `cache.t3.micro` , `cache.t3.small` , `cache.t3.medium`
     *
     * *T2 node types:* `cache.t2.micro` , `cache.t2.small` , `cache.t2.medium`
     *
     * * Previous generation: (not recommended)
     *
     * *T1 node types:* `cache.t1.micro`
     *
     * *M1 node types:* `cache.m1.small` , `cache.m1.medium` , `cache.m1.large` , `cache.m1.xlarge`
     *
     * *M3 node types:* `cache.m3.medium` , `cache.m3.large` , `cache.m3.xlarge` ,
     * `cache.m3.2xlarge`
     *
     * * Compute optimized:
     * * Previous generation: (not recommended)
     *
     * *C1 node types:* `cache.c1.xlarge`
     *
     * * Memory optimized:
     * * Current generation:
     *
     * *R6gd node types:* `cache.r6gd.xlarge` , `cache.r6gd.2xlarge` , `cache.r6gd.4xlarge` ,
     * `cache.r6gd.8xlarge` , `cache.r6gd.12xlarge` , `cache.r6gd.16xlarge`
     *
     *
     * The `r6gd` family is available in the following regions: `us-east-2` , `us-east-1` ,
     * `us-west-2` , `us-west-1` , `eu-west-1` , `eu-central-1` , `ap-northeast-1` , `ap-southeast-1` ,
     * `ap-southeast-2` .
     *
     *
     * *R6g node types:* `cache.r6g.large` , `cache.r6g.xlarge` , `cache.r6g.2xlarge` ,
     * `cache.r6g.4xlarge` , `cache.r6g.12xlarge` , `cache.r6g.24xlarge`
     *
     * *R5 node types:* `cache.r5.large` , `cache.r5.xlarge` , `cache.r5.2xlarge` ,
     * `cache.r5.4xlarge` , `cache.r5.12xlarge` , `cache.r5.24xlarge`
     *
     * *R4 node types:* `cache.r4.large` , `cache.r4.xlarge` , `cache.r4.2xlarge` ,
     * `cache.r4.4xlarge` , `cache.r4.8xlarge` , `cache.r4.16xlarge`
     *
     * * Previous generation: (not recommended)
     *
     * *M2 node types:* `cache.m2.xlarge` , `cache.m2.2xlarge` , `cache.m2.4xlarge`
     *
     * *R3 node types:* `cache.r3.large` , `cache.r3.xlarge` , `cache.r3.2xlarge` ,
     * `cache.r3.4xlarge` , `cache.r3.8xlarge`
     *
     * For region availability, see [Supported Node Types by Amazon
     * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
     */
    public fun cacheNodeType(cacheNodeType: String)

    /**
     * @param cacheParameterGroupName The name of the parameter group to associate with this
     * replication group.
     * If this argument is omitted, the default cache parameter group for the specified engine is
     * used.
     *
     * If you are running Redis OSS version 3.2.4 or later, only one node group (shard), and want to
     * use a default parameter group, we recommend that you specify the parameter group by name.
     *
     * * To create a Redis OSS (cluster mode disabled) replication group, use
     * `CacheParameterGroupName=default.redis3.2` .
     * * To create a Redis OSS (cluster mode enabled) replication group, use
     * `CacheParameterGroupName=default.redis3.2.cluster.on` .
     */
    public fun cacheParameterGroupName(cacheParameterGroupName: String)

    /**
     * @param cacheSecurityGroupNames A list of cache security group names to associate with this
     * replication group.
     */
    public fun cacheSecurityGroupNames(cacheSecurityGroupNames: List)

    /**
     * @param cacheSecurityGroupNames A list of cache security group names to associate with this
     * replication group.
     */
    public fun cacheSecurityGroupNames(vararg cacheSecurityGroupNames: String)

    /**
     * @param cacheSubnetGroupName The name of the cache subnet group to be used for the replication
     * group.
     *
     * If you're going to launch your cluster in an Amazon VPC, you need to create a subnet group
     * before you start creating a cluster. For more information, see
     * [AWS::ElastiCache::SubnetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html)
     * .
     */
    public fun cacheSubnetGroupName(cacheSubnetGroupName: String)

    /**
     * @param clusterMode Enabled or Disabled.
     * To modify cluster mode from Disabled to Enabled, you must first set the cluster mode to
     * Compatible. Compatible mode allows your Redis OSS clients to connect using both cluster mode
     * enabled and cluster mode disabled. After you migrate all Redis OSS clients to use cluster mode
     * enabled, you can then complete cluster mode configuration and set the cluster mode to Enabled.
     * For more information, see [Modify cluster
     * mode](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/modify-cluster-mode.html) .
     */
    public fun clusterMode(clusterMode: String)

    /**
     * @param dataTieringEnabled Enables data tiering.
     * Data tiering is only supported for replication groups using the r6gd node type. This
     * parameter must be set to true when using r6gd nodes. For more information, see [Data
     * tiering](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/data-tiering.html) .
     */
    public fun dataTieringEnabled(dataTieringEnabled: Boolean)

    /**
     * @param dataTieringEnabled Enables data tiering.
     * Data tiering is only supported for replication groups using the r6gd node type. This
     * parameter must be set to true when using r6gd nodes. For more information, see [Data
     * tiering](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/data-tiering.html) .
     */
    public fun dataTieringEnabled(dataTieringEnabled: IResolvable)

    /**
     * @param engine The name of the cache engine to be used for the clusters in this replication
     * group.
     * The value must be set to `Redis` .
     */
    public fun engine(engine: String)

    /**
     * @param engineVersion The version number of the cache engine to be used for the clusters in
     * this replication group.
     * To view the supported cache engine versions, use the `DescribeCacheEngineVersions` operation.
     *
     * *Important:* You can upgrade to a newer engine version (see [Selecting a Cache Engine and
     * Version](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html#VersionManagement)
     * ) in the *ElastiCache User Guide* , but you cannot downgrade to an earlier engine version. If
     * you want to use an earlier engine version, you must delete the existing cluster or replication
     * group and create it anew with the earlier engine version.
     */
    public fun engineVersion(engineVersion: String)

    /**
     * @param globalReplicationGroupId The name of the Global datastore.
     */
    public fun globalReplicationGroupId(globalReplicationGroupId: String)

    /**
     * @param ipDiscovery The network type you choose when creating a replication group, either
     * `ipv4` | `ipv6` .
     * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
     * version 1.6.6 on all instances built on the [Nitro
     * system](https://docs.aws.amazon.com/ec2/nitro/) .
     */
    public fun ipDiscovery(ipDiscovery: String)

    /**
     * @param kmsKeyId The ID of the KMS key used to encrypt the disk on the cluster.
     */
    public fun kmsKeyId(kmsKeyId: String)

    /**
     * @param logDeliveryConfigurations Specifies the destination, format and type of the logs.
     */
    public fun logDeliveryConfigurations(logDeliveryConfigurations: IResolvable)

    /**
     * @param logDeliveryConfigurations Specifies the destination, format and type of the logs.
     */
    public fun logDeliveryConfigurations(logDeliveryConfigurations: List)

    /**
     * @param logDeliveryConfigurations Specifies the destination, format and type of the logs.
     */
    public fun logDeliveryConfigurations(vararg logDeliveryConfigurations: Any)

    /**
     * @param multiAzEnabled A flag indicating if you have Multi-AZ enabled to enhance fault
     * tolerance.
     * For more information, see [Minimizing Downtime:
     * Multi-AZ](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html) .
     */
    public fun multiAzEnabled(multiAzEnabled: Boolean)

    /**
     * @param multiAzEnabled A flag indicating if you have Multi-AZ enabled to enhance fault
     * tolerance.
     * For more information, see [Minimizing Downtime:
     * Multi-AZ](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html) .
     */
    public fun multiAzEnabled(multiAzEnabled: IResolvable)

    /**
     * @param networkType Must be either `ipv4` | `ipv6` | `dual_stack` .
     * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
     * version 1.6.6 on all instances built on the [Nitro
     * system](https://docs.aws.amazon.com/ec2/nitro/) .
     */
    public fun networkType(networkType: String)

    /**
     * @param nodeGroupConfiguration `NodeGroupConfiguration` is a property of the
     * `AWS::ElastiCache::ReplicationGroup` resource that configures an Amazon ElastiCache
     * (ElastiCache) Redis OSS cluster node group.
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    public fun nodeGroupConfiguration(nodeGroupConfiguration: IResolvable)

    /**
     * @param nodeGroupConfiguration `NodeGroupConfiguration` is a property of the
     * `AWS::ElastiCache::ReplicationGroup` resource that configures an Amazon ElastiCache
     * (ElastiCache) Redis OSS cluster node group.
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    public fun nodeGroupConfiguration(nodeGroupConfiguration: List)

    /**
     * @param nodeGroupConfiguration `NodeGroupConfiguration` is a property of the
     * `AWS::ElastiCache::ReplicationGroup` resource that configures an Amazon ElastiCache
     * (ElastiCache) Redis OSS cluster node group.
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    public fun nodeGroupConfiguration(vararg nodeGroupConfiguration: Any)

    /**
     * @param notificationTopicArn The Amazon Resource Name (ARN) of the Amazon Simple Notification
     * Service (SNS) topic to which notifications are sent.
     *
     * The Amazon SNS topic owner must be the same as the cluster owner.
     */
    public fun notificationTopicArn(notificationTopicArn: String)

    /**
     * @param numCacheClusters The number of clusters this replication group initially has.
     * This parameter is not used if there is more than one node group (shard). You should use
     * `ReplicasPerNodeGroup` instead.
     *
     * If `AutomaticFailoverEnabled` is `true` , the value of this parameter must be at least 2. If
     * `AutomaticFailoverEnabled` is `false` you can omit this parameter (it will default to 1), or you
     * can explicitly set it to a value between 2 and 6.
     *
     * The maximum permitted value for `NumCacheClusters` is 6 (1 primary plus 5 replicas).
     */
    public fun numCacheClusters(numCacheClusters: Number)

    /**
     * @param numNodeGroups An optional parameter that specifies the number of node groups (shards)
     * for this Redis OSS (cluster mode enabled) replication group.
     * For Redis OSS (cluster mode disabled) either omit this parameter or set it to 1.
     *
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NumNodeGroups` without interruption. When `UseOnlineResharding` is
     * set to `false` , or is not specified, updating `NumNodeGroups` results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     *
     * Default: 1
     */
    public fun numNodeGroups(numNodeGroups: Number)

    /**
     * @param port The port number on which each member of the replication group accepts
     * connections.
     */
    public fun port(port: Number)

    /**
     * @param preferredCacheClusterAZs A list of EC2 Availability Zones in which the replication
     * group's clusters are created.
     * The order of the Availability Zones in the list is the order in which clusters are allocated.
     * The primary cluster is created in the first AZ in the list.
     *
     * This parameter is not used if there is more than one node group (shard). You should use
     * `NodeGroupConfiguration` instead.
     *
     *
     * If you are creating your replication group in an Amazon VPC (recommended), you can only
     * locate clusters in Availability Zones associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheClusters` .
     *
     *
     * Default: system chosen Availability Zones.
     */
    public fun preferredCacheClusterAZs(preferredCacheClusterAZs: List)

    /**
     * @param preferredCacheClusterAZs A list of EC2 Availability Zones in which the replication
     * group's clusters are created.
     * The order of the Availability Zones in the list is the order in which clusters are allocated.
     * The primary cluster is created in the first AZ in the list.
     *
     * This parameter is not used if there is more than one node group (shard). You should use
     * `NodeGroupConfiguration` instead.
     *
     *
     * If you are creating your replication group in an Amazon VPC (recommended), you can only
     * locate clusters in Availability Zones associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheClusters` .
     *
     *
     * Default: system chosen Availability Zones.
     */
    public fun preferredCacheClusterAZs(vararg preferredCacheClusterAZs: String)

    /**
     * @param preferredMaintenanceWindow Specifies the weekly time range during which maintenance on
     * the cluster is performed.
     * It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum
     * maintenance window is a 60 minute period.
     *
     * Valid values for `ddd` are:
     *
     * * `sun`
     * * `mon`
     * * `tue`
     * * `wed`
     * * `thu`
     * * `fri`
     * * `sat`
     *
     * Example: `sun:23:00-mon:01:30`
     */
    public fun preferredMaintenanceWindow(preferredMaintenanceWindow: String)

    /**
     * @param primaryClusterId The identifier of the cluster that serves as the primary for this
     * replication group.
     * This cluster must already exist and have a status of `available` .
     *
     * This parameter is not required if `NumCacheClusters` , `NumNodeGroups` , or
     * `ReplicasPerNodeGroup` is specified.
     */
    public fun primaryClusterId(primaryClusterId: String)

    /**
     * @param replicasPerNodeGroup An optional parameter that specifies the number of replica nodes
     * in each node group (shard).
     * Valid values are 0 to 5.
     */
    public fun replicasPerNodeGroup(replicasPerNodeGroup: Number)

    /**
     * @param replicationGroupDescription A user-created description for the replication group. 
     */
    public fun replicationGroupDescription(replicationGroupDescription: String)

    /**
     * @param replicationGroupId The replication group identifier. This parameter is stored as a
     * lowercase string.
     * Constraints:
     *
     * * A name must contain from 1 to 40 alphanumeric characters or hyphens.
     * * The first character must be a letter.
     * * A name cannot end with a hyphen or contain two consecutive hyphens.
     */
    public fun replicationGroupId(replicationGroupId: String)

    /**
     * @param securityGroupIds One or more Amazon VPC security groups associated with this
     * replication group.
     * Use this parameter only when you are creating a replication group in an Amazon Virtual
     * Private Cloud (Amazon VPC).
     */
    public fun securityGroupIds(securityGroupIds: List)

    /**
     * @param securityGroupIds One or more Amazon VPC security groups associated with this
     * replication group.
     * Use this parameter only when you are creating a replication group in an Amazon Virtual
     * Private Cloud (Amazon VPC).
     */
    public fun securityGroupIds(vararg securityGroupIds: String)

    /**
     * @param snapshotArns A list of Amazon Resource Names (ARN) that uniquely identify the Redis
     * OSS RDB snapshot files stored in Amazon S3.
     * The snapshot files are used to populate the new replication group. The Amazon S3 object name
     * in the ARN cannot contain any commas. The new replication group will have the number of node
     * groups (console: shards) specified by the parameter *NumNodeGroups* or the number of node groups
     * configured by *NodeGroupConfiguration* regardless of the number of ARNs specified here.
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     */
    public fun snapshotArns(snapshotArns: List)

    /**
     * @param snapshotArns A list of Amazon Resource Names (ARN) that uniquely identify the Redis
     * OSS RDB snapshot files stored in Amazon S3.
     * The snapshot files are used to populate the new replication group. The Amazon S3 object name
     * in the ARN cannot contain any commas. The new replication group will have the number of node
     * groups (console: shards) specified by the parameter *NumNodeGroups* or the number of node groups
     * configured by *NodeGroupConfiguration* regardless of the number of ARNs specified here.
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     */
    public fun snapshotArns(vararg snapshotArns: String)

    /**
     * @param snapshotName The name of a snapshot from which to restore data into the new
     * replication group.
     * The snapshot status changes to `restoring` while the new replication group is being created.
     */
    public fun snapshotName(snapshotName: String)

    /**
     * @param snapshotRetentionLimit The number of days for which ElastiCache retains automatic
     * snapshots before deleting them.
     * For example, if you set `SnapshotRetentionLimit` to 5, a snapshot that was taken today is
     * retained for 5 days before being deleted.
     *
     * Default: 0 (i.e., automatic backups are disabled for this cluster).
     */
    public fun snapshotRetentionLimit(snapshotRetentionLimit: Number)

    /**
     * @param snapshotWindow The daily time range (in UTC) during which ElastiCache begins taking a
     * daily snapshot of your node group (shard).
     * Example: `05:00-09:00`
     *
     * If you do not specify this parameter, ElastiCache automatically chooses an appropriate time
     * range.
     */
    public fun snapshotWindow(snapshotWindow: String)

    /**
     * @param snapshottingClusterId The cluster ID that is used as the daily snapshot source for the
     * replication group.
     * This parameter cannot be set for Redis OSS (cluster mode enabled) replication groups.
     */
    public fun snapshottingClusterId(snapshottingClusterId: String)

    /**
     * @param tags A list of tags to be added to this resource.
     * Tags are comma-separated key,value pairs (e.g. Key= `myKey` , Value= `myKeyValue` . You can
     * include multiple tags as shown following: Key= `myKey` , Value= `myKeyValue` Key= `mySecondKey`
     * , Value= `mySecondKeyValue` . Tags on replication groups will be replicated to all nodes.
     */
    public fun tags(tags: List)

    /**
     * @param tags A list of tags to be added to this resource.
     * Tags are comma-separated key,value pairs (e.g. Key= `myKey` , Value= `myKeyValue` . You can
     * include multiple tags as shown following: Key= `myKey` , Value= `myKeyValue` Key= `mySecondKey`
     * , Value= `mySecondKeyValue` . Tags on replication groups will be replicated to all nodes.
     */
    public fun tags(vararg tags: CfnTag)

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to `true`
     * .
     * You cannot modify the value of `TransitEncryptionEnabled` after the cluster is created. To
     * enable in-transit encryption on a cluster you must set `TransitEncryptionEnabled` to `true` when
     * you create a cluster.
     *
     * This parameter is valid only if the `Engine` parameter is `redis` , the `EngineVersion`
     * parameter is `3.2.6` or `4.x` onward, and the cluster is being created in an Amazon VPC.
     *
     * If you enable in-transit encryption, you must also specify a value for `CacheSubnetGroup` .
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     */
    public fun transitEncryptionEnabled(transitEncryptionEnabled: Boolean)

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to `true`
     * .
     * You cannot modify the value of `TransitEncryptionEnabled` after the cluster is created. To
     * enable in-transit encryption on a cluster you must set `TransitEncryptionEnabled` to `true` when
     * you create a cluster.
     *
     * This parameter is valid only if the `Engine` parameter is `redis` , the `EngineVersion`
     * parameter is `3.2.6` or `4.x` onward, and the cluster is being created in an Amazon VPC.
     *
     * If you enable in-transit encryption, you must also specify a value for `CacheSubnetGroup` .
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     */
    public fun transitEncryptionEnabled(transitEncryptionEnabled: IResolvable)

    /**
     * @param transitEncryptionMode A setting that allows you to migrate your clients to use
     * in-transit encryption, with no downtime.
     * When setting `TransitEncryptionEnabled` to `true` , you can set your `TransitEncryptionMode`
     * to `preferred` in the same request, to allow both encrypted and unencrypted connections at the
     * same time. Once you migrate all your Redis OSS clients to use encrypted connections you can
     * modify the value to `required` to allow encrypted connections only.
     *
     * Setting `TransitEncryptionMode` to `required` is a two-step process that requires you to
     * first set the `TransitEncryptionMode` to `preferred` , after that you can set
     * `TransitEncryptionMode` to `required` .
     *
     * This process will not trigger the replacement of the replication group.
     */
    public fun transitEncryptionMode(transitEncryptionMode: String)

    /**
     * @param userGroupIds The ID of user group to associate with the replication group.
     */
    public fun userGroupIds(userGroupIds: List)

    /**
     * @param userGroupIds The ID of user group to associate with the replication group.
     */
    public fun userGroupIds(vararg userGroupIds: String)
  }

  private class BuilderImpl : Builder {
    private val cdkBuilder:
        software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps.Builder =
        software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps.builder()

    /**
     * @param atRestEncryptionEnabled A flag that enables encryption at rest when set to `true` .
     * You cannot modify the value of `AtRestEncryptionEnabled` after the replication group is
     * created. To enable encryption at rest on a replication group you must set
     * `AtRestEncryptionEnabled` to `true` when you create the replication group.
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     */
    override fun atRestEncryptionEnabled(atRestEncryptionEnabled: Boolean) {
      cdkBuilder.atRestEncryptionEnabled(atRestEncryptionEnabled)
    }

    /**
     * @param atRestEncryptionEnabled A flag that enables encryption at rest when set to `true` .
     * You cannot modify the value of `AtRestEncryptionEnabled` after the replication group is
     * created. To enable encryption at rest on a replication group you must set
     * `AtRestEncryptionEnabled` to `true` when you create the replication group.
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     */
    override fun atRestEncryptionEnabled(atRestEncryptionEnabled: IResolvable) {
      cdkBuilder.atRestEncryptionEnabled(atRestEncryptionEnabled.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param authToken *Reserved parameter.* The password used to access a password protected
     * server.
     * `AuthToken` can be specified only on replication groups where `TransitEncryptionEnabled` is
     * `true` . For more information, see [Authenticating Users with the Redis OSS AUTH
     * Command](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth.html) .
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     *
     *
     * Password constraints:
     *
     * * Must be only printable ASCII characters.
     * * Must be at least 16 characters and no more than 128 characters in length.
     * * Nonalphanumeric characters are restricted to (!, &, #, $, ^, <, >, -, ).
     *
     * For more information, see [AUTH
     * password](https://docs.aws.amazon.com/http://redis.io/commands/AUTH) at
     * http://redis.io/commands/AUTH.
     *
     *
     * If ADDING the AuthToken, update requires
     * [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    override fun authToken(authToken: String) {
      cdkBuilder.authToken(authToken)
    }

    /**
     * @param autoMinorVersionUpgrade If you are running Redis OSS engine version 6.0 or later, set
     * this parameter to yes if you want to opt-in to the next minor version upgrade campaign. This
     * parameter is disabled for previous versions.
     */
    override fun autoMinorVersionUpgrade(autoMinorVersionUpgrade: Boolean) {
      cdkBuilder.autoMinorVersionUpgrade(autoMinorVersionUpgrade)
    }

    /**
     * @param autoMinorVersionUpgrade If you are running Redis OSS engine version 6.0 or later, set
     * this parameter to yes if you want to opt-in to the next minor version upgrade campaign. This
     * parameter is disabled for previous versions.
     */
    override fun autoMinorVersionUpgrade(autoMinorVersionUpgrade: IResolvable) {
      cdkBuilder.autoMinorVersionUpgrade(autoMinorVersionUpgrade.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param automaticFailoverEnabled Specifies whether a read-only replica is automatically
     * promoted to read/write primary if the existing primary fails.
     * `AutomaticFailoverEnabled` must be enabled for Redis OSS (cluster mode enabled) replication
     * groups.
     *
     * Default: false
     */
    override fun automaticFailoverEnabled(automaticFailoverEnabled: Boolean) {
      cdkBuilder.automaticFailoverEnabled(automaticFailoverEnabled)
    }

    /**
     * @param automaticFailoverEnabled Specifies whether a read-only replica is automatically
     * promoted to read/write primary if the existing primary fails.
     * `AutomaticFailoverEnabled` must be enabled for Redis OSS (cluster mode enabled) replication
     * groups.
     *
     * Default: false
     */
    override fun automaticFailoverEnabled(automaticFailoverEnabled: IResolvable) {
      cdkBuilder.automaticFailoverEnabled(automaticFailoverEnabled.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param cacheNodeType The compute and memory capacity of the nodes in the node group (shard).
     * The following node types are supported by ElastiCache. Generally speaking, the current
     * generation types provide more memory and computational power at lower cost when compared to
     * their equivalent previous generation counterparts.
     *
     * * General purpose:
     * * Current generation:
     *
     * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
     * `cache.m6g.4xlarge` , `cache.m6g.12xlarge` , `cache.m6g.24xlarge`
     *
     * *M5 node types:* `cache.m5.large` , `cache.m5.xlarge` , `cache.m5.2xlarge` ,
     * `cache.m5.4xlarge` , `cache.m5.12xlarge` , `cache.m5.24xlarge`
     *
     * *M4 node types:* `cache.m4.large` , `cache.m4.xlarge` , `cache.m4.2xlarge` ,
     * `cache.m4.4xlarge` , `cache.m4.10xlarge`
     *
     * *T4g node types:* `cache.t4g.micro` , `cache.t4g.small` , `cache.t4g.medium`
     *
     * *T3 node types:* `cache.t3.micro` , `cache.t3.small` , `cache.t3.medium`
     *
     * *T2 node types:* `cache.t2.micro` , `cache.t2.small` , `cache.t2.medium`
     *
     * * Previous generation: (not recommended)
     *
     * *T1 node types:* `cache.t1.micro`
     *
     * *M1 node types:* `cache.m1.small` , `cache.m1.medium` , `cache.m1.large` , `cache.m1.xlarge`
     *
     * *M3 node types:* `cache.m3.medium` , `cache.m3.large` , `cache.m3.xlarge` ,
     * `cache.m3.2xlarge`
     *
     * * Compute optimized:
     * * Previous generation: (not recommended)
     *
     * *C1 node types:* `cache.c1.xlarge`
     *
     * * Memory optimized:
     * * Current generation:
     *
     * *R6gd node types:* `cache.r6gd.xlarge` , `cache.r6gd.2xlarge` , `cache.r6gd.4xlarge` ,
     * `cache.r6gd.8xlarge` , `cache.r6gd.12xlarge` , `cache.r6gd.16xlarge`
     *
     *
     * The `r6gd` family is available in the following regions: `us-east-2` , `us-east-1` ,
     * `us-west-2` , `us-west-1` , `eu-west-1` , `eu-central-1` , `ap-northeast-1` , `ap-southeast-1` ,
     * `ap-southeast-2` .
     *
     *
     * *R6g node types:* `cache.r6g.large` , `cache.r6g.xlarge` , `cache.r6g.2xlarge` ,
     * `cache.r6g.4xlarge` , `cache.r6g.12xlarge` , `cache.r6g.24xlarge`
     *
     * *R5 node types:* `cache.r5.large` , `cache.r5.xlarge` , `cache.r5.2xlarge` ,
     * `cache.r5.4xlarge` , `cache.r5.12xlarge` , `cache.r5.24xlarge`
     *
     * *R4 node types:* `cache.r4.large` , `cache.r4.xlarge` , `cache.r4.2xlarge` ,
     * `cache.r4.4xlarge` , `cache.r4.8xlarge` , `cache.r4.16xlarge`
     *
     * * Previous generation: (not recommended)
     *
     * *M2 node types:* `cache.m2.xlarge` , `cache.m2.2xlarge` , `cache.m2.4xlarge`
     *
     * *R3 node types:* `cache.r3.large` , `cache.r3.xlarge` , `cache.r3.2xlarge` ,
     * `cache.r3.4xlarge` , `cache.r3.8xlarge`
     *
     * For region availability, see [Supported Node Types by Amazon
     * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
     */
    override fun cacheNodeType(cacheNodeType: String) {
      cdkBuilder.cacheNodeType(cacheNodeType)
    }

    /**
     * @param cacheParameterGroupName The name of the parameter group to associate with this
     * replication group.
     * If this argument is omitted, the default cache parameter group for the specified engine is
     * used.
     *
     * If you are running Redis OSS version 3.2.4 or later, only one node group (shard), and want to
     * use a default parameter group, we recommend that you specify the parameter group by name.
     *
     * * To create a Redis OSS (cluster mode disabled) replication group, use
     * `CacheParameterGroupName=default.redis3.2` .
     * * To create a Redis OSS (cluster mode enabled) replication group, use
     * `CacheParameterGroupName=default.redis3.2.cluster.on` .
     */
    override fun cacheParameterGroupName(cacheParameterGroupName: String) {
      cdkBuilder.cacheParameterGroupName(cacheParameterGroupName)
    }

    /**
     * @param cacheSecurityGroupNames A list of cache security group names to associate with this
     * replication group.
     */
    override fun cacheSecurityGroupNames(cacheSecurityGroupNames: List) {
      cdkBuilder.cacheSecurityGroupNames(cacheSecurityGroupNames)
    }

    /**
     * @param cacheSecurityGroupNames A list of cache security group names to associate with this
     * replication group.
     */
    override fun cacheSecurityGroupNames(vararg cacheSecurityGroupNames: String): Unit =
        cacheSecurityGroupNames(cacheSecurityGroupNames.toList())

    /**
     * @param cacheSubnetGroupName The name of the cache subnet group to be used for the replication
     * group.
     *
     * If you're going to launch your cluster in an Amazon VPC, you need to create a subnet group
     * before you start creating a cluster. For more information, see
     * [AWS::ElastiCache::SubnetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html)
     * .
     */
    override fun cacheSubnetGroupName(cacheSubnetGroupName: String) {
      cdkBuilder.cacheSubnetGroupName(cacheSubnetGroupName)
    }

    /**
     * @param clusterMode Enabled or Disabled.
     * To modify cluster mode from Disabled to Enabled, you must first set the cluster mode to
     * Compatible. Compatible mode allows your Redis OSS clients to connect using both cluster mode
     * enabled and cluster mode disabled. After you migrate all Redis OSS clients to use cluster mode
     * enabled, you can then complete cluster mode configuration and set the cluster mode to Enabled.
     * For more information, see [Modify cluster
     * mode](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/modify-cluster-mode.html) .
     */
    override fun clusterMode(clusterMode: String) {
      cdkBuilder.clusterMode(clusterMode)
    }

    /**
     * @param dataTieringEnabled Enables data tiering.
     * Data tiering is only supported for replication groups using the r6gd node type. This
     * parameter must be set to true when using r6gd nodes. For more information, see [Data
     * tiering](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/data-tiering.html) .
     */
    override fun dataTieringEnabled(dataTieringEnabled: Boolean) {
      cdkBuilder.dataTieringEnabled(dataTieringEnabled)
    }

    /**
     * @param dataTieringEnabled Enables data tiering.
     * Data tiering is only supported for replication groups using the r6gd node type. This
     * parameter must be set to true when using r6gd nodes. For more information, see [Data
     * tiering](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/data-tiering.html) .
     */
    override fun dataTieringEnabled(dataTieringEnabled: IResolvable) {
      cdkBuilder.dataTieringEnabled(dataTieringEnabled.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param engine The name of the cache engine to be used for the clusters in this replication
     * group.
     * The value must be set to `Redis` .
     */
    override fun engine(engine: String) {
      cdkBuilder.engine(engine)
    }

    /**
     * @param engineVersion The version number of the cache engine to be used for the clusters in
     * this replication group.
     * To view the supported cache engine versions, use the `DescribeCacheEngineVersions` operation.
     *
     * *Important:* You can upgrade to a newer engine version (see [Selecting a Cache Engine and
     * Version](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html#VersionManagement)
     * ) in the *ElastiCache User Guide* , but you cannot downgrade to an earlier engine version. If
     * you want to use an earlier engine version, you must delete the existing cluster or replication
     * group and create it anew with the earlier engine version.
     */
    override fun engineVersion(engineVersion: String) {
      cdkBuilder.engineVersion(engineVersion)
    }

    /**
     * @param globalReplicationGroupId The name of the Global datastore.
     */
    override fun globalReplicationGroupId(globalReplicationGroupId: String) {
      cdkBuilder.globalReplicationGroupId(globalReplicationGroupId)
    }

    /**
     * @param ipDiscovery The network type you choose when creating a replication group, either
     * `ipv4` | `ipv6` .
     * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
     * version 1.6.6 on all instances built on the [Nitro
     * system](https://docs.aws.amazon.com/ec2/nitro/) .
     */
    override fun ipDiscovery(ipDiscovery: String) {
      cdkBuilder.ipDiscovery(ipDiscovery)
    }

    /**
     * @param kmsKeyId The ID of the KMS key used to encrypt the disk on the cluster.
     */
    override fun kmsKeyId(kmsKeyId: String) {
      cdkBuilder.kmsKeyId(kmsKeyId)
    }

    /**
     * @param logDeliveryConfigurations Specifies the destination, format and type of the logs.
     */
    override fun logDeliveryConfigurations(logDeliveryConfigurations: IResolvable) {
      cdkBuilder.logDeliveryConfigurations(logDeliveryConfigurations.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param logDeliveryConfigurations Specifies the destination, format and type of the logs.
     */
    override fun logDeliveryConfigurations(logDeliveryConfigurations: List) {
      cdkBuilder.logDeliveryConfigurations(logDeliveryConfigurations.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * @param logDeliveryConfigurations Specifies the destination, format and type of the logs.
     */
    override fun logDeliveryConfigurations(vararg logDeliveryConfigurations: Any): Unit =
        logDeliveryConfigurations(logDeliveryConfigurations.toList())

    /**
     * @param multiAzEnabled A flag indicating if you have Multi-AZ enabled to enhance fault
     * tolerance.
     * For more information, see [Minimizing Downtime:
     * Multi-AZ](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html) .
     */
    override fun multiAzEnabled(multiAzEnabled: Boolean) {
      cdkBuilder.multiAzEnabled(multiAzEnabled)
    }

    /**
     * @param multiAzEnabled A flag indicating if you have Multi-AZ enabled to enhance fault
     * tolerance.
     * For more information, see [Minimizing Downtime:
     * Multi-AZ](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html) .
     */
    override fun multiAzEnabled(multiAzEnabled: IResolvable) {
      cdkBuilder.multiAzEnabled(multiAzEnabled.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param networkType Must be either `ipv4` | `ipv6` | `dual_stack` .
     * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
     * version 1.6.6 on all instances built on the [Nitro
     * system](https://docs.aws.amazon.com/ec2/nitro/) .
     */
    override fun networkType(networkType: String) {
      cdkBuilder.networkType(networkType)
    }

    /**
     * @param nodeGroupConfiguration `NodeGroupConfiguration` is a property of the
     * `AWS::ElastiCache::ReplicationGroup` resource that configures an Amazon ElastiCache
     * (ElastiCache) Redis OSS cluster node group.
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    override fun nodeGroupConfiguration(nodeGroupConfiguration: IResolvable) {
      cdkBuilder.nodeGroupConfiguration(nodeGroupConfiguration.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param nodeGroupConfiguration `NodeGroupConfiguration` is a property of the
     * `AWS::ElastiCache::ReplicationGroup` resource that configures an Amazon ElastiCache
     * (ElastiCache) Redis OSS cluster node group.
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    override fun nodeGroupConfiguration(nodeGroupConfiguration: List) {
      cdkBuilder.nodeGroupConfiguration(nodeGroupConfiguration.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * @param nodeGroupConfiguration `NodeGroupConfiguration` is a property of the
     * `AWS::ElastiCache::ReplicationGroup` resource that configures an Amazon ElastiCache
     * (ElastiCache) Redis OSS cluster node group.
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    override fun nodeGroupConfiguration(vararg nodeGroupConfiguration: Any): Unit =
        nodeGroupConfiguration(nodeGroupConfiguration.toList())

    /**
     * @param notificationTopicArn The Amazon Resource Name (ARN) of the Amazon Simple Notification
     * Service (SNS) topic to which notifications are sent.
     *
     * The Amazon SNS topic owner must be the same as the cluster owner.
     */
    override fun notificationTopicArn(notificationTopicArn: String) {
      cdkBuilder.notificationTopicArn(notificationTopicArn)
    }

    /**
     * @param numCacheClusters The number of clusters this replication group initially has.
     * This parameter is not used if there is more than one node group (shard). You should use
     * `ReplicasPerNodeGroup` instead.
     *
     * If `AutomaticFailoverEnabled` is `true` , the value of this parameter must be at least 2. If
     * `AutomaticFailoverEnabled` is `false` you can omit this parameter (it will default to 1), or you
     * can explicitly set it to a value between 2 and 6.
     *
     * The maximum permitted value for `NumCacheClusters` is 6 (1 primary plus 5 replicas).
     */
    override fun numCacheClusters(numCacheClusters: Number) {
      cdkBuilder.numCacheClusters(numCacheClusters)
    }

    /**
     * @param numNodeGroups An optional parameter that specifies the number of node groups (shards)
     * for this Redis OSS (cluster mode enabled) replication group.
     * For Redis OSS (cluster mode disabled) either omit this parameter or set it to 1.
     *
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NumNodeGroups` without interruption. When `UseOnlineResharding` is
     * set to `false` , or is not specified, updating `NumNodeGroups` results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     *
     * Default: 1
     */
    override fun numNodeGroups(numNodeGroups: Number) {
      cdkBuilder.numNodeGroups(numNodeGroups)
    }

    /**
     * @param port The port number on which each member of the replication group accepts
     * connections.
     */
    override fun port(port: Number) {
      cdkBuilder.port(port)
    }

    /**
     * @param preferredCacheClusterAZs A list of EC2 Availability Zones in which the replication
     * group's clusters are created.
     * The order of the Availability Zones in the list is the order in which clusters are allocated.
     * The primary cluster is created in the first AZ in the list.
     *
     * This parameter is not used if there is more than one node group (shard). You should use
     * `NodeGroupConfiguration` instead.
     *
     *
     * If you are creating your replication group in an Amazon VPC (recommended), you can only
     * locate clusters in Availability Zones associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheClusters` .
     *
     *
     * Default: system chosen Availability Zones.
     */
    override fun preferredCacheClusterAZs(preferredCacheClusterAZs: List) {
      cdkBuilder.preferredCacheClusterAZs(preferredCacheClusterAZs)
    }

    /**
     * @param preferredCacheClusterAZs A list of EC2 Availability Zones in which the replication
     * group's clusters are created.
     * The order of the Availability Zones in the list is the order in which clusters are allocated.
     * The primary cluster is created in the first AZ in the list.
     *
     * This parameter is not used if there is more than one node group (shard). You should use
     * `NodeGroupConfiguration` instead.
     *
     *
     * If you are creating your replication group in an Amazon VPC (recommended), you can only
     * locate clusters in Availability Zones associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheClusters` .
     *
     *
     * Default: system chosen Availability Zones.
     */
    override fun preferredCacheClusterAZs(vararg preferredCacheClusterAZs: String): Unit =
        preferredCacheClusterAZs(preferredCacheClusterAZs.toList())

    /**
     * @param preferredMaintenanceWindow Specifies the weekly time range during which maintenance on
     * the cluster is performed.
     * It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum
     * maintenance window is a 60 minute period.
     *
     * Valid values for `ddd` are:
     *
     * * `sun`
     * * `mon`
     * * `tue`
     * * `wed`
     * * `thu`
     * * `fri`
     * * `sat`
     *
     * Example: `sun:23:00-mon:01:30`
     */
    override fun preferredMaintenanceWindow(preferredMaintenanceWindow: String) {
      cdkBuilder.preferredMaintenanceWindow(preferredMaintenanceWindow)
    }

    /**
     * @param primaryClusterId The identifier of the cluster that serves as the primary for this
     * replication group.
     * This cluster must already exist and have a status of `available` .
     *
     * This parameter is not required if `NumCacheClusters` , `NumNodeGroups` , or
     * `ReplicasPerNodeGroup` is specified.
     */
    override fun primaryClusterId(primaryClusterId: String) {
      cdkBuilder.primaryClusterId(primaryClusterId)
    }

    /**
     * @param replicasPerNodeGroup An optional parameter that specifies the number of replica nodes
     * in each node group (shard).
     * Valid values are 0 to 5.
     */
    override fun replicasPerNodeGroup(replicasPerNodeGroup: Number) {
      cdkBuilder.replicasPerNodeGroup(replicasPerNodeGroup)
    }

    /**
     * @param replicationGroupDescription A user-created description for the replication group. 
     */
    override fun replicationGroupDescription(replicationGroupDescription: String) {
      cdkBuilder.replicationGroupDescription(replicationGroupDescription)
    }

    /**
     * @param replicationGroupId The replication group identifier. This parameter is stored as a
     * lowercase string.
     * Constraints:
     *
     * * A name must contain from 1 to 40 alphanumeric characters or hyphens.
     * * The first character must be a letter.
     * * A name cannot end with a hyphen or contain two consecutive hyphens.
     */
    override fun replicationGroupId(replicationGroupId: String) {
      cdkBuilder.replicationGroupId(replicationGroupId)
    }

    /**
     * @param securityGroupIds One or more Amazon VPC security groups associated with this
     * replication group.
     * Use this parameter only when you are creating a replication group in an Amazon Virtual
     * Private Cloud (Amazon VPC).
     */
    override fun securityGroupIds(securityGroupIds: List) {
      cdkBuilder.securityGroupIds(securityGroupIds)
    }

    /**
     * @param securityGroupIds One or more Amazon VPC security groups associated with this
     * replication group.
     * Use this parameter only when you are creating a replication group in an Amazon Virtual
     * Private Cloud (Amazon VPC).
     */
    override fun securityGroupIds(vararg securityGroupIds: String): Unit =
        securityGroupIds(securityGroupIds.toList())

    /**
     * @param snapshotArns A list of Amazon Resource Names (ARN) that uniquely identify the Redis
     * OSS RDB snapshot files stored in Amazon S3.
     * The snapshot files are used to populate the new replication group. The Amazon S3 object name
     * in the ARN cannot contain any commas. The new replication group will have the number of node
     * groups (console: shards) specified by the parameter *NumNodeGroups* or the number of node groups
     * configured by *NodeGroupConfiguration* regardless of the number of ARNs specified here.
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     */
    override fun snapshotArns(snapshotArns: List) {
      cdkBuilder.snapshotArns(snapshotArns)
    }

    /**
     * @param snapshotArns A list of Amazon Resource Names (ARN) that uniquely identify the Redis
     * OSS RDB snapshot files stored in Amazon S3.
     * The snapshot files are used to populate the new replication group. The Amazon S3 object name
     * in the ARN cannot contain any commas. The new replication group will have the number of node
     * groups (console: shards) specified by the parameter *NumNodeGroups* or the number of node groups
     * configured by *NodeGroupConfiguration* regardless of the number of ARNs specified here.
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     */
    override fun snapshotArns(vararg snapshotArns: String): Unit =
        snapshotArns(snapshotArns.toList())

    /**
     * @param snapshotName The name of a snapshot from which to restore data into the new
     * replication group.
     * The snapshot status changes to `restoring` while the new replication group is being created.
     */
    override fun snapshotName(snapshotName: String) {
      cdkBuilder.snapshotName(snapshotName)
    }

    /**
     * @param snapshotRetentionLimit The number of days for which ElastiCache retains automatic
     * snapshots before deleting them.
     * For example, if you set `SnapshotRetentionLimit` to 5, a snapshot that was taken today is
     * retained for 5 days before being deleted.
     *
     * Default: 0 (i.e., automatic backups are disabled for this cluster).
     */
    override fun snapshotRetentionLimit(snapshotRetentionLimit: Number) {
      cdkBuilder.snapshotRetentionLimit(snapshotRetentionLimit)
    }

    /**
     * @param snapshotWindow The daily time range (in UTC) during which ElastiCache begins taking a
     * daily snapshot of your node group (shard).
     * Example: `05:00-09:00`
     *
     * If you do not specify this parameter, ElastiCache automatically chooses an appropriate time
     * range.
     */
    override fun snapshotWindow(snapshotWindow: String) {
      cdkBuilder.snapshotWindow(snapshotWindow)
    }

    /**
     * @param snapshottingClusterId The cluster ID that is used as the daily snapshot source for the
     * replication group.
     * This parameter cannot be set for Redis OSS (cluster mode enabled) replication groups.
     */
    override fun snapshottingClusterId(snapshottingClusterId: String) {
      cdkBuilder.snapshottingClusterId(snapshottingClusterId)
    }

    /**
     * @param tags A list of tags to be added to this resource.
     * Tags are comma-separated key,value pairs (e.g. Key= `myKey` , Value= `myKeyValue` . You can
     * include multiple tags as shown following: Key= `myKey` , Value= `myKeyValue` Key= `mySecondKey`
     * , Value= `mySecondKeyValue` . Tags on replication groups will be replicated to all nodes.
     */
    override fun tags(tags: List) {
      cdkBuilder.tags(tags.map(CfnTag.Companion::unwrap))
    }

    /**
     * @param tags A list of tags to be added to this resource.
     * Tags are comma-separated key,value pairs (e.g. Key= `myKey` , Value= `myKeyValue` . You can
     * include multiple tags as shown following: Key= `myKey` , Value= `myKeyValue` Key= `mySecondKey`
     * , Value= `mySecondKeyValue` . Tags on replication groups will be replicated to all nodes.
     */
    override fun tags(vararg tags: CfnTag): Unit = tags(tags.toList())

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to `true`
     * .
     * You cannot modify the value of `TransitEncryptionEnabled` after the cluster is created. To
     * enable in-transit encryption on a cluster you must set `TransitEncryptionEnabled` to `true` when
     * you create a cluster.
     *
     * This parameter is valid only if the `Engine` parameter is `redis` , the `EngineVersion`
     * parameter is `3.2.6` or `4.x` onward, and the cluster is being created in an Amazon VPC.
     *
     * If you enable in-transit encryption, you must also specify a value for `CacheSubnetGroup` .
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     */
    override fun transitEncryptionEnabled(transitEncryptionEnabled: Boolean) {
      cdkBuilder.transitEncryptionEnabled(transitEncryptionEnabled)
    }

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to `true`
     * .
     * You cannot modify the value of `TransitEncryptionEnabled` after the cluster is created. To
     * enable in-transit encryption on a cluster you must set `TransitEncryptionEnabled` to `true` when
     * you create a cluster.
     *
     * This parameter is valid only if the `Engine` parameter is `redis` , the `EngineVersion`
     * parameter is `3.2.6` or `4.x` onward, and the cluster is being created in an Amazon VPC.
     *
     * If you enable in-transit encryption, you must also specify a value for `CacheSubnetGroup` .
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     */
    override fun transitEncryptionEnabled(transitEncryptionEnabled: IResolvable) {
      cdkBuilder.transitEncryptionEnabled(transitEncryptionEnabled.let(IResolvable.Companion::unwrap))
    }

    /**
     * @param transitEncryptionMode A setting that allows you to migrate your clients to use
     * in-transit encryption, with no downtime.
     * When setting `TransitEncryptionEnabled` to `true` , you can set your `TransitEncryptionMode`
     * to `preferred` in the same request, to allow both encrypted and unencrypted connections at the
     * same time. Once you migrate all your Redis OSS clients to use encrypted connections you can
     * modify the value to `required` to allow encrypted connections only.
     *
     * Setting `TransitEncryptionMode` to `required` is a two-step process that requires you to
     * first set the `TransitEncryptionMode` to `preferred` , after that you can set
     * `TransitEncryptionMode` to `required` .
     *
     * This process will not trigger the replacement of the replication group.
     */
    override fun transitEncryptionMode(transitEncryptionMode: String) {
      cdkBuilder.transitEncryptionMode(transitEncryptionMode)
    }

    /**
     * @param userGroupIds The ID of user group to associate with the replication group.
     */
    override fun userGroupIds(userGroupIds: List) {
      cdkBuilder.userGroupIds(userGroupIds)
    }

    /**
     * @param userGroupIds The ID of user group to associate with the replication group.
     */
    override fun userGroupIds(vararg userGroupIds: String): Unit =
        userGroupIds(userGroupIds.toList())

    public fun build(): software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps =
        cdkBuilder.build()
  }

  private class Wrapper(
    cdkObject: software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps,
  ) : CdkObject(cdkObject),
      CfnReplicationGroupProps {
    /**
     * A flag that enables encryption at rest when set to `true` .
     *
     * You cannot modify the value of `AtRestEncryptionEnabled` after the replication group is
     * created. To enable encryption at rest on a replication group you must set
     * `AtRestEncryptionEnabled` to `true` when you create the replication group.
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-atrestencryptionenabled)
     */
    override fun atRestEncryptionEnabled(): Any? = unwrap(this).getAtRestEncryptionEnabled()

    /**
     * *Reserved parameter.* The password used to access a password protected server.
     *
     * `AuthToken` can be specified only on replication groups where `TransitEncryptionEnabled` is
     * `true` . For more information, see [Authenticating Users with the Redis OSS AUTH
     * Command](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth.html) .
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     *
     *
     * Password constraints:
     *
     * * Must be only printable ASCII characters.
     * * Must be at least 16 characters and no more than 128 characters in length.
     * * Nonalphanumeric characters are restricted to (!, &, #, $, ^, <, >, -, ).
     *
     * For more information, see [AUTH
     * password](https://docs.aws.amazon.com/http://redis.io/commands/AUTH) at
     * http://redis.io/commands/AUTH.
     *
     *
     * If ADDING the AuthToken, update requires
     * [Replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-authtoken)
     */
    override fun authToken(): String? = unwrap(this).getAuthToken()

    /**
     * If you are running Redis OSS engine version 6.0 or later, set this parameter to yes if you
     * want to opt-in to the next minor version upgrade campaign. This parameter is disabled for
     * previous versions.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-autominorversionupgrade)
     */
    override fun autoMinorVersionUpgrade(): Any? = unwrap(this).getAutoMinorVersionUpgrade()

    /**
     * Specifies whether a read-only replica is automatically promoted to read/write primary if the
     * existing primary fails.
     *
     * `AutomaticFailoverEnabled` must be enabled for Redis OSS (cluster mode enabled) replication
     * groups.
     *
     * Default: false
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-automaticfailoverenabled)
     */
    override fun automaticFailoverEnabled(): Any? = unwrap(this).getAutomaticFailoverEnabled()

    /**
     * The compute and memory capacity of the nodes in the node group (shard).
     *
     * The following node types are supported by ElastiCache. Generally speaking, the current
     * generation types provide more memory and computational power at lower cost when compared to
     * their equivalent previous generation counterparts.
     *
     * * General purpose:
     * * Current generation:
     *
     * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
     * `cache.m6g.4xlarge` , `cache.m6g.12xlarge` , `cache.m6g.24xlarge`
     *
     * *M5 node types:* `cache.m5.large` , `cache.m5.xlarge` , `cache.m5.2xlarge` ,
     * `cache.m5.4xlarge` , `cache.m5.12xlarge` , `cache.m5.24xlarge`
     *
     * *M4 node types:* `cache.m4.large` , `cache.m4.xlarge` , `cache.m4.2xlarge` ,
     * `cache.m4.4xlarge` , `cache.m4.10xlarge`
     *
     * *T4g node types:* `cache.t4g.micro` , `cache.t4g.small` , `cache.t4g.medium`
     *
     * *T3 node types:* `cache.t3.micro` , `cache.t3.small` , `cache.t3.medium`
     *
     * *T2 node types:* `cache.t2.micro` , `cache.t2.small` , `cache.t2.medium`
     *
     * * Previous generation: (not recommended)
     *
     * *T1 node types:* `cache.t1.micro`
     *
     * *M1 node types:* `cache.m1.small` , `cache.m1.medium` , `cache.m1.large` , `cache.m1.xlarge`
     *
     * *M3 node types:* `cache.m3.medium` , `cache.m3.large` , `cache.m3.xlarge` ,
     * `cache.m3.2xlarge`
     *
     * * Compute optimized:
     * * Previous generation: (not recommended)
     *
     * *C1 node types:* `cache.c1.xlarge`
     *
     * * Memory optimized:
     * * Current generation:
     *
     * *R6gd node types:* `cache.r6gd.xlarge` , `cache.r6gd.2xlarge` , `cache.r6gd.4xlarge` ,
     * `cache.r6gd.8xlarge` , `cache.r6gd.12xlarge` , `cache.r6gd.16xlarge`
     *
     *
     * The `r6gd` family is available in the following regions: `us-east-2` , `us-east-1` ,
     * `us-west-2` , `us-west-1` , `eu-west-1` , `eu-central-1` , `ap-northeast-1` , `ap-southeast-1` ,
     * `ap-southeast-2` .
     *
     *
     * *R6g node types:* `cache.r6g.large` , `cache.r6g.xlarge` , `cache.r6g.2xlarge` ,
     * `cache.r6g.4xlarge` , `cache.r6g.12xlarge` , `cache.r6g.24xlarge`
     *
     * *R5 node types:* `cache.r5.large` , `cache.r5.xlarge` , `cache.r5.2xlarge` ,
     * `cache.r5.4xlarge` , `cache.r5.12xlarge` , `cache.r5.24xlarge`
     *
     * *R4 node types:* `cache.r4.large` , `cache.r4.xlarge` , `cache.r4.2xlarge` ,
     * `cache.r4.4xlarge` , `cache.r4.8xlarge` , `cache.r4.16xlarge`
     *
     * * Previous generation: (not recommended)
     *
     * *M2 node types:* `cache.m2.xlarge` , `cache.m2.2xlarge` , `cache.m2.4xlarge`
     *
     * *R3 node types:* `cache.r3.large` , `cache.r3.xlarge` , `cache.r3.2xlarge` ,
     * `cache.r3.4xlarge` , `cache.r3.8xlarge`
     *
     * For region availability, see [Supported Node Types by Amazon
     * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachenodetype)
     */
    override fun cacheNodeType(): String? = unwrap(this).getCacheNodeType()

    /**
     * The name of the parameter group to associate with this replication group.
     *
     * If this argument is omitted, the default cache parameter group for the specified engine is
     * used.
     *
     * If you are running Redis OSS version 3.2.4 or later, only one node group (shard), and want to
     * use a default parameter group, we recommend that you specify the parameter group by name.
     *
     * * To create a Redis OSS (cluster mode disabled) replication group, use
     * `CacheParameterGroupName=default.redis3.2` .
     * * To create a Redis OSS (cluster mode enabled) replication group, use
     * `CacheParameterGroupName=default.redis3.2.cluster.on` .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cacheparametergroupname)
     */
    override fun cacheParameterGroupName(): String? = unwrap(this).getCacheParameterGroupName()

    /**
     * A list of cache security group names to associate with this replication group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesecuritygroupnames)
     */
    override fun cacheSecurityGroupNames(): List = unwrap(this).getCacheSecurityGroupNames()
        ?: emptyList()

    /**
     * The name of the cache subnet group to be used for the replication group.
     *
     *
     * If you're going to launch your cluster in an Amazon VPC, you need to create a subnet group
     * before you start creating a cluster. For more information, see
     * [AWS::ElastiCache::SubnetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html)
     * .
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-cachesubnetgroupname)
     */
    override fun cacheSubnetGroupName(): String? = unwrap(this).getCacheSubnetGroupName()

    /**
     * Enabled or Disabled.
     *
     * To modify cluster mode from Disabled to Enabled, you must first set the cluster mode to
     * Compatible. Compatible mode allows your Redis OSS clients to connect using both cluster mode
     * enabled and cluster mode disabled. After you migrate all Redis OSS clients to use cluster mode
     * enabled, you can then complete cluster mode configuration and set the cluster mode to Enabled.
     * For more information, see [Modify cluster
     * mode](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/modify-cluster-mode.html) .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-clustermode)
     */
    override fun clusterMode(): String? = unwrap(this).getClusterMode()

    /**
     * Enables data tiering.
     *
     * Data tiering is only supported for replication groups using the r6gd node type. This
     * parameter must be set to true when using r6gd nodes. For more information, see [Data
     * tiering](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/data-tiering.html) .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-datatieringenabled)
     */
    override fun dataTieringEnabled(): Any? = unwrap(this).getDataTieringEnabled()

    /**
     * The name of the cache engine to be used for the clusters in this replication group.
     *
     * The value must be set to `Redis` .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engine)
     */
    override fun engine(): String? = unwrap(this).getEngine()

    /**
     * The version number of the cache engine to be used for the clusters in this replication group.
     *
     * To view the supported cache engine versions, use the `DescribeCacheEngineVersions` operation.
     *
     * *Important:* You can upgrade to a newer engine version (see [Selecting a Cache Engine and
     * Version](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html#VersionManagement)
     * ) in the *ElastiCache User Guide* , but you cannot downgrade to an earlier engine version. If
     * you want to use an earlier engine version, you must delete the existing cluster or replication
     * group and create it anew with the earlier engine version.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-engineversion)
     */
    override fun engineVersion(): String? = unwrap(this).getEngineVersion()

    /**
     * The name of the Global datastore.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-globalreplicationgroupid)
     */
    override fun globalReplicationGroupId(): String? = unwrap(this).getGlobalReplicationGroupId()

    /**
     * The network type you choose when creating a replication group, either `ipv4` | `ipv6` .
     *
     * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
     * version 1.6.6 on all instances built on the [Nitro
     * system](https://docs.aws.amazon.com/ec2/nitro/) .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-ipdiscovery)
     */
    override fun ipDiscovery(): String? = unwrap(this).getIpDiscovery()

    /**
     * The ID of the KMS key used to encrypt the disk on the cluster.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-kmskeyid)
     */
    override fun kmsKeyId(): String? = unwrap(this).getKmsKeyId()

    /**
     * Specifies the destination, format and type of the logs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-logdeliveryconfigurations)
     */
    override fun logDeliveryConfigurations(): Any? = unwrap(this).getLogDeliveryConfigurations()

    /**
     * A flag indicating if you have Multi-AZ enabled to enhance fault tolerance.
     *
     * For more information, see [Minimizing Downtime:
     * Multi-AZ](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html) .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-multiazenabled)
     */
    override fun multiAzEnabled(): Any? = unwrap(this).getMultiAzEnabled()

    /**
     * Must be either `ipv4` | `ipv6` | `dual_stack` .
     *
     * IPv6 is supported for workloads using Redis OSS engine version 6.2 onward or Memcached engine
     * version 1.6.6 on all instances built on the [Nitro
     * system](https://docs.aws.amazon.com/ec2/nitro/) .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-networktype)
     */
    override fun networkType(): String? = unwrap(this).getNetworkType()

    /**
     * `NodeGroupConfiguration` is a property of the `AWS::ElastiCache::ReplicationGroup` resource
     * that configures an Amazon ElastiCache (ElastiCache) Redis OSS cluster node group.
     *
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NodeGroupConfiguration` without interruption. When
     * `UseOnlineResharding` is set to `false` , or is not specified, updating `NodeGroupConfiguration`
     * results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-nodegroupconfiguration)
     */
    override fun nodeGroupConfiguration(): Any? = unwrap(this).getNodeGroupConfiguration()

    /**
     * The Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic to which
     * notifications are sent.
     *
     *
     * The Amazon SNS topic owner must be the same as the cluster owner.
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-notificationtopicarn)
     */
    override fun notificationTopicArn(): String? = unwrap(this).getNotificationTopicArn()

    /**
     * The number of clusters this replication group initially has.
     *
     * This parameter is not used if there is more than one node group (shard). You should use
     * `ReplicasPerNodeGroup` instead.
     *
     * If `AutomaticFailoverEnabled` is `true` , the value of this parameter must be at least 2. If
     * `AutomaticFailoverEnabled` is `false` you can omit this parameter (it will default to 1), or you
     * can explicitly set it to a value between 2 and 6.
     *
     * The maximum permitted value for `NumCacheClusters` is 6 (1 primary plus 5 replicas).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numcacheclusters)
     */
    override fun numCacheClusters(): Number? = unwrap(this).getNumCacheClusters()

    /**
     * An optional parameter that specifies the number of node groups (shards) for this Redis OSS
     * (cluster mode enabled) replication group.
     *
     * For Redis OSS (cluster mode disabled) either omit this parameter or set it to 1.
     *
     * If you set
     * [UseOnlineResharding](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-useonlineresharding)
     * to `true` , you can update `NumNodeGroups` without interruption. When `UseOnlineResharding` is
     * set to `false` , or is not specified, updating `NumNodeGroups` results in
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     *
     * Default: 1
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-numnodegroups)
     */
    override fun numNodeGroups(): Number? = unwrap(this).getNumNodeGroups()

    /**
     * The port number on which each member of the replication group accepts connections.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-port)
     */
    override fun port(): Number? = unwrap(this).getPort()

    /**
     * A list of EC2 Availability Zones in which the replication group's clusters are created.
     *
     * The order of the Availability Zones in the list is the order in which clusters are allocated.
     * The primary cluster is created in the first AZ in the list.
     *
     * This parameter is not used if there is more than one node group (shard). You should use
     * `NodeGroupConfiguration` instead.
     *
     *
     * If you are creating your replication group in an Amazon VPC (recommended), you can only
     * locate clusters in Availability Zones associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheClusters` .
     *
     *
     * Default: system chosen Availability Zones.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredcacheclusterazs)
     */
    override fun preferredCacheClusterAZs(): List =
        unwrap(this).getPreferredCacheClusterAZs() ?: emptyList()

    /**
     * Specifies the weekly time range during which maintenance on the cluster is performed.
     *
     * It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum
     * maintenance window is a 60 minute period.
     *
     * Valid values for `ddd` are:
     *
     * * `sun`
     * * `mon`
     * * `tue`
     * * `wed`
     * * `thu`
     * * `fri`
     * * `sat`
     *
     * Example: `sun:23:00-mon:01:30`
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-preferredmaintenancewindow)
     */
    override fun preferredMaintenanceWindow(): String? =
        unwrap(this).getPreferredMaintenanceWindow()

    /**
     * The identifier of the cluster that serves as the primary for this replication group.
     *
     * This cluster must already exist and have a status of `available` .
     *
     * This parameter is not required if `NumCacheClusters` , `NumNodeGroups` , or
     * `ReplicasPerNodeGroup` is specified.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-primaryclusterid)
     */
    override fun primaryClusterId(): String? = unwrap(this).getPrimaryClusterId()

    /**
     * An optional parameter that specifies the number of replica nodes in each node group (shard).
     *
     * Valid values are 0 to 5.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicaspernodegroup)
     */
    override fun replicasPerNodeGroup(): Number? = unwrap(this).getReplicasPerNodeGroup()

    /**
     * A user-created description for the replication group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupdescription)
     */
    override fun replicationGroupDescription(): String =
        unwrap(this).getReplicationGroupDescription()

    /**
     * The replication group identifier. This parameter is stored as a lowercase string.
     *
     * Constraints:
     *
     * * A name must contain from 1 to 40 alphanumeric characters or hyphens.
     * * The first character must be a letter.
     * * A name cannot end with a hyphen or contain two consecutive hyphens.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-replicationgroupid)
     */
    override fun replicationGroupId(): String? = unwrap(this).getReplicationGroupId()

    /**
     * One or more Amazon VPC security groups associated with this replication group.
     *
     * Use this parameter only when you are creating a replication group in an Amazon Virtual
     * Private Cloud (Amazon VPC).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-securitygroupids)
     */
    override fun securityGroupIds(): List = unwrap(this).getSecurityGroupIds() ?:
        emptyList()

    /**
     * A list of Amazon Resource Names (ARN) that uniquely identify the Redis OSS RDB snapshot files
     * stored in Amazon S3.
     *
     * The snapshot files are used to populate the new replication group. The Amazon S3 object name
     * in the ARN cannot contain any commas. The new replication group will have the number of node
     * groups (console: shards) specified by the parameter *NumNodeGroups* or the number of node groups
     * configured by *NodeGroupConfiguration* regardless of the number of ARNs specified here.
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotarns)
     */
    override fun snapshotArns(): List = unwrap(this).getSnapshotArns() ?: emptyList()

    /**
     * The name of a snapshot from which to restore data into the new replication group.
     *
     * The snapshot status changes to `restoring` while the new replication group is being created.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotname)
     */
    override fun snapshotName(): String? = unwrap(this).getSnapshotName()

    /**
     * The number of days for which ElastiCache retains automatic snapshots before deleting them.
     *
     * For example, if you set `SnapshotRetentionLimit` to 5, a snapshot that was taken today is
     * retained for 5 days before being deleted.
     *
     * Default: 0 (i.e., automatic backups are disabled for this cluster).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotretentionlimit)
     */
    override fun snapshotRetentionLimit(): Number? = unwrap(this).getSnapshotRetentionLimit()

    /**
     * The daily time range (in UTC) during which ElastiCache begins taking a daily snapshot of your
     * node group (shard).
     *
     * Example: `05:00-09:00`
     *
     * If you do not specify this parameter, ElastiCache automatically chooses an appropriate time
     * range.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshotwindow)
     */
    override fun snapshotWindow(): String? = unwrap(this).getSnapshotWindow()

    /**
     * The cluster ID that is used as the daily snapshot source for the replication group.
     *
     * This parameter cannot be set for Redis OSS (cluster mode enabled) replication groups.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-snapshottingclusterid)
     */
    override fun snapshottingClusterId(): String? = unwrap(this).getSnapshottingClusterId()

    /**
     * A list of tags to be added to this resource.
     *
     * Tags are comma-separated key,value pairs (e.g. Key= `myKey` , Value= `myKeyValue` . You can
     * include multiple tags as shown following: Key= `myKey` , Value= `myKeyValue` Key= `mySecondKey`
     * , Value= `mySecondKeyValue` . Tags on replication groups will be replicated to all nodes.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-tags)
     */
    override fun tags(): List = unwrap(this).getTags()?.map(CfnTag::wrap) ?: emptyList()

    /**
     * A flag that enables in-transit encryption when set to `true` .
     *
     * You cannot modify the value of `TransitEncryptionEnabled` after the cluster is created. To
     * enable in-transit encryption on a cluster you must set `TransitEncryptionEnabled` to `true` when
     * you create a cluster.
     *
     * This parameter is valid only if the `Engine` parameter is `redis` , the `EngineVersion`
     * parameter is `3.2.6` or `4.x` onward, and the cluster is being created in an Amazon VPC.
     *
     * If you enable in-transit encryption, you must also specify a value for `CacheSubnetGroup` .
     *
     * *Required:* Only available when creating a replication group in an Amazon VPC using Redis OSS
     * version `3.2.6` or `4.x` onward.
     *
     * Default: `false`
     *
     *
     * For HIPAA compliance, you must specify `TransitEncryptionEnabled` as `true` , an `AuthToken`
     * , and a `CacheSubnetGroup` .
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-transitencryptionenabled)
     */
    override fun transitEncryptionEnabled(): Any? = unwrap(this).getTransitEncryptionEnabled()

    /**
     * A setting that allows you to migrate your clients to use in-transit encryption, with no
     * downtime.
     *
     * When setting `TransitEncryptionEnabled` to `true` , you can set your `TransitEncryptionMode`
     * to `preferred` in the same request, to allow both encrypted and unencrypted connections at the
     * same time. Once you migrate all your Redis OSS clients to use encrypted connections you can
     * modify the value to `required` to allow encrypted connections only.
     *
     * Setting `TransitEncryptionMode` to `required` is a two-step process that requires you to
     * first set the `TransitEncryptionMode` to `preferred` , after that you can set
     * `TransitEncryptionMode` to `required` .
     *
     * This process will not trigger the replacement of the replication group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-transitencryptionmode)
     */
    override fun transitEncryptionMode(): String? = unwrap(this).getTransitEncryptionMode()

    /**
     * The ID of user group to associate with the replication group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html#cfn-elasticache-replicationgroup-usergroupids)
     */
    override fun userGroupIds(): List = unwrap(this).getUserGroupIds() ?: emptyList()
  }

  public companion object {
    public operator fun invoke(block: Builder.() -> Unit = {}): CfnReplicationGroupProps {
      val builderImpl = BuilderImpl()
      return Wrapper(builderImpl.apply(block).build())
    }

    internal
        fun wrap(cdkObject: software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps):
        CfnReplicationGroupProps = CdkObjectWrappers.wrap(cdkObject) as? CfnReplicationGroupProps ?:
        Wrapper(cdkObject)

    internal fun unwrap(wrapped: CfnReplicationGroupProps):
        software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps = (wrapped as
        CdkObject).cdkObject as software.amazon.awscdk.services.elasticache.CfnReplicationGroupProps
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy