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

io.cloudshiftdev.awscdk.services.elasticache.CfnCacheClusterProps.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 `CfnCacheCluster`.
 *
 * 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.*;
 * CfnCacheClusterProps cfnCacheClusterProps = CfnCacheClusterProps.builder()
 * .cacheNodeType("cacheNodeType")
 * .engine("engine")
 * .numCacheNodes(123)
 * // the properties below are optional
 * .autoMinorVersionUpgrade(false)
 * .azMode("azMode")
 * .cacheParameterGroupName("cacheParameterGroupName")
 * .cacheSecurityGroupNames(List.of("cacheSecurityGroupNames"))
 * .cacheSubnetGroupName("cacheSubnetGroupName")
 * .clusterName("clusterName")
 * .engineVersion("engineVersion")
 * .ipDiscovery("ipDiscovery")
 * .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()))
 * .networkType("networkType")
 * .notificationTopicArn("notificationTopicArn")
 * .port(123)
 * .preferredAvailabilityZone("preferredAvailabilityZone")
 * .preferredAvailabilityZones(List.of("preferredAvailabilityZones"))
 * .preferredMaintenanceWindow("preferredMaintenanceWindow")
 * .snapshotArns(List.of("snapshotArns"))
 * .snapshotName("snapshotName")
 * .snapshotRetentionLimit(123)
 * .snapshotWindow("snapshotWindow")
 * .tags(List.of(CfnTag.builder()
 * .key("key")
 * .value("value")
 * .build()))
 * .transitEncryptionEnabled(false)
 * .vpcSecurityGroupIds(List.of("vpcSecurityGroupIds"))
 * .build();
 * ```
 *
 * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html)
 */
public interface CfnCacheClusterProps {
  /**
   * 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-cachecluster.html#cfn-elasticache-cachecluster-autominorversionupgrade)
   */
  public fun autoMinorVersionUpgrade(): Any? = unwrap(this).getAutoMinorVersionUpgrade()

  /**
   * Specifies whether the nodes in this Memcached cluster are created in a single Availability Zone
   * or created across multiple Availability Zones in the cluster's region.
   *
   * This parameter is only supported for Memcached clusters.
   *
   * If the `AZMode` and `PreferredAvailabilityZones` are not specified, ElastiCache assumes
   * `single-az` mode.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-azmode)
   */
  public fun azMode(): String? = unwrap(this).getAzMode()

  /**
   * 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. Changing the CacheNodeType of a Memcached instance is
   * currently not supported. If you need to scale using Memcached, we recommend forcing a replacement
   * update by changing the `LogicalResourceId` of the resource.
   *
   * * General purpose:
   * * Current generation:
   *
   * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
   * `cache.m6g.4xlarge` , `cache.m6g.8xlarge` , `cache.m6g.12xlarge` , `cache.m6g.16xlarge` ,
   * `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.8xlarge` , `cache.r6g.12xlarge` , `cache.r6g.16xlarge` ,
   * `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
   * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
   *
   * *Additional node type info*
   *
   * * All current generation instance types are created in Amazon VPC by default.
   * * Redis OSS append-only files (AOF) are not supported for T1 or T2 instances.
   * * Redis OSS Multi-AZ with automatic failover is not supported on T1 instances.
   * * Redis OSS configuration variables `appendonly` and `appendfsync` are not supported on Redis
   * OSS version 2.8.22 and later.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-cachenodetype)
   */
  public fun cacheNodeType(): String

  /**
   * The name of the parameter group to associate with this cluster.
   *
   * If this argument is omitted, the default parameter group for the specified engine is used. You
   * cannot use any parameter group which has `cluster-enabled='yes'` when creating a cluster.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-cacheparametergroupname)
   */
  public fun cacheParameterGroupName(): String? = unwrap(this).getCacheParameterGroupName()

  /**
   * A list of security group names to associate with this cluster.
   *
   * Use this parameter only when you are creating a cluster outside of an Amazon Virtual Private
   * Cloud (Amazon VPC).
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-cachesecuritygroupnames)
   */
  public fun cacheSecurityGroupNames(): List = unwrap(this).getCacheSecurityGroupNames() ?:
      emptyList()

  /**
   * The name of the subnet group to be used for the cluster.
   *
   * Use this parameter only when you are creating a cluster in an Amazon Virtual Private Cloud
   * (Amazon VPC).
   *
   *
   * 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-cachecluster.html#cfn-elasticache-cachecluster-cachesubnetgroupname)
   */
  public fun cacheSubnetGroupName(): String? = unwrap(this).getCacheSubnetGroupName()

  /**
   * A name for the cache cluster.
   *
   * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID
   * for the cache cluster. For more information, see [Name
   * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
   *
   * The name must contain 1 to 50 alphanumeric characters or hyphens. The name must start with a
   * letter and cannot end with a hyphen or contain two consecutive hyphens.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-clustername)
   */
  public fun clusterName(): String? = unwrap(this).getClusterName()

  /**
   * The name of the cache engine to be used for this cluster.
   *
   * Valid values for this parameter are: `memcached` | `redis`
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-engine)
   */
  public fun engine(): String

  /**
   * The version number of the cache engine to be used for this cluster.
   *
   * 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)
   * ), 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-cachecluster.html#cfn-elasticache-cachecluster-engineversion)
   */
  public fun engineVersion(): String? = unwrap(this).getEngineVersion()

  /**
   * The network type you choose when modifying a cluster, 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-cachecluster.html#cfn-elasticache-cachecluster-ipdiscovery)
   */
  public fun ipDiscovery(): String? = unwrap(this).getIpDiscovery()

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

  /**
   * 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-cachecluster.html#cfn-elasticache-cachecluster-networktype)
   */
  public fun networkType(): String? = unwrap(this).getNetworkType()

  /**
   * 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-cachecluster.html#cfn-elasticache-cachecluster-notificationtopicarn)
   */
  public fun notificationTopicArn(): String? = unwrap(this).getNotificationTopicArn()

  /**
   * The number of cache nodes that the cache cluster should have.
   *
   *
   * However, if the `PreferredAvailabilityZone` and `PreferredAvailabilityZones` properties were
   * not previously specified and you don't specify any new values, an 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-cachecluster.html#cfn-elasticache-cachecluster-numcachenodes)
   */
  public fun numCacheNodes(): Number

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

  /**
   * The EC2 Availability Zone in which the cluster is created.
   *
   * All nodes belonging to this cluster are placed in the preferred Availability Zone. If you want
   * to create your nodes across multiple Availability Zones, use `PreferredAvailabilityZones` .
   *
   * Default: System chosen Availability Zone.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-preferredavailabilityzone)
   */
  public fun preferredAvailabilityZone(): String? = unwrap(this).getPreferredAvailabilityZone()

  /**
   * A list of the Availability Zones in which cache nodes are created.
   *
   * The order of the zones in the list is not important.
   *
   * This option is only supported on Memcached.
   *
   *
   * If you are creating your cluster in an Amazon VPC (recommended) you can only locate nodes in
   * Availability Zones that are associated with the subnets in the selected subnet group.
   *
   * The number of Availability Zones listed must equal the value of `NumCacheNodes` .
   *
   *
   * If you want all the nodes in the same Availability Zone, use `PreferredAvailabilityZone`
   * instead, or repeat the Availability Zone multiple times in the list.
   *
   * Default: System chosen Availability Zones.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-preferredavailabilityzones)
   */
  public fun preferredAvailabilityZones(): List =
      unwrap(this).getPreferredAvailabilityZones() ?: 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-cachecluster.html#cfn-elasticache-cachecluster-preferredmaintenancewindow)
   */
  public fun preferredMaintenanceWindow(): String? = unwrap(this).getPreferredMaintenanceWindow()

  /**
   * A single-element string list containing an Amazon Resource Name (ARN) that uniquely identifies
   * a Redis OSS RDB snapshot file stored in Amazon S3.
   *
   * The snapshot file is used to populate the node group (shard). The Amazon S3 object name in the
   * ARN cannot contain any commas.
   *
   *
   * This parameter is only valid if the `Engine` parameter is `redis` .
   *
   *
   * 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-cachecluster.html#cfn-elasticache-cachecluster-snapshotarns)
   */
  public fun snapshotArns(): List = unwrap(this).getSnapshotArns() ?: emptyList()

  /**
   * The name of a Redis OSS snapshot from which to restore data into the new node group (shard).
   *
   * The snapshot status changes to `restoring` while the new node group (shard) is being created.
   *
   *
   * This parameter is only valid if the `Engine` parameter is `redis` .
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-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 taken today is retained for 5
   * days before being deleted.
   *
   *
   * This parameter is only valid if the `Engine` parameter is `redis` .
   *
   *
   * Default: 0 (i.e., automatic backups are disabled for this cache cluster).
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-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.
   *
   *
   * This parameter is only valid if the `Engine` parameter is `redis` .
   *
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-snapshotwindow)
   */
  public fun snapshotWindow(): String? = unwrap(this).getSnapshotWindow()

  /**
   * A list of tags to be added to this resource.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-tags)
   */
  public fun tags(): List = unwrap(this).getTags()?.map(CfnTag::wrap) ?: emptyList()

  /**
   * A flag that enables in-transit encryption when set to true.
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-transitencryptionenabled)
   */
  public fun transitEncryptionEnabled(): Any? = unwrap(this).getTransitEncryptionEnabled()

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

  /**
   * A builder for [CfnCacheClusterProps]
   */
  @CdkDslMarker
  public interface Builder {
    /**
     * @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 azMode Specifies whether the nodes in this Memcached cluster are created in a single
     * Availability Zone or created across multiple Availability Zones in the cluster's region.
     * This parameter is only supported for Memcached clusters.
     *
     * If the `AZMode` and `PreferredAvailabilityZones` are not specified, ElastiCache assumes
     * `single-az` mode.
     */
    public fun azMode(azMode: String)

    /**
     * @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. Changing the CacheNodeType of a Memcached
     * instance is currently not supported. If you need to scale using Memcached, we recommend forcing
     * a replacement update by changing the `LogicalResourceId` of the resource.
     *
     * * General purpose:
     * * Current generation:
     *
     * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
     * `cache.m6g.4xlarge` , `cache.m6g.8xlarge` , `cache.m6g.12xlarge` , `cache.m6g.16xlarge` ,
     * `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.8xlarge` , `cache.r6g.12xlarge` , `cache.r6g.16xlarge` ,
     * `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
     * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
     *
     * *Additional node type info*
     *
     * * All current generation instance types are created in Amazon VPC by default.
     * * Redis OSS append-only files (AOF) are not supported for T1 or T2 instances.
     * * Redis OSS Multi-AZ with automatic failover is not supported on T1 instances.
     * * Redis OSS configuration variables `appendonly` and `appendfsync` are not supported on Redis
     * OSS version 2.8.22 and later.
     */
    public fun cacheNodeType(cacheNodeType: String)

    /**
     * @param cacheParameterGroupName The name of the parameter group to associate with this
     * cluster.
     * If this argument is omitted, the default parameter group for the specified engine is used.
     * You cannot use any parameter group which has `cluster-enabled='yes'` when creating a cluster.
     */
    public fun cacheParameterGroupName(cacheParameterGroupName: String)

    /**
     * @param cacheSecurityGroupNames A list of security group names to associate with this cluster.
     * Use this parameter only when you are creating a cluster outside of an Amazon Virtual Private
     * Cloud (Amazon VPC).
     */
    public fun cacheSecurityGroupNames(cacheSecurityGroupNames: List)

    /**
     * @param cacheSecurityGroupNames A list of security group names to associate with this cluster.
     * Use this parameter only when you are creating a cluster outside of an Amazon Virtual Private
     * Cloud (Amazon VPC).
     */
    public fun cacheSecurityGroupNames(vararg cacheSecurityGroupNames: String)

    /**
     * @param cacheSubnetGroupName The name of the subnet group to be used for the cluster.
     * Use this parameter only when you are creating a cluster in an Amazon Virtual Private Cloud
     * (Amazon VPC).
     *
     *
     * 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 clusterName A name for the cache cluster.
     * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that
     * ID for the cache cluster. For more information, see [Name
     * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     *
     * The name must contain 1 to 50 alphanumeric characters or hyphens. The name must start with a
     * letter and cannot end with a hyphen or contain two consecutive hyphens.
     */
    public fun clusterName(clusterName: String)

    /**
     * @param engine The name of the cache engine to be used for this cluster. 
     * Valid values for this parameter are: `memcached` | `redis`
     */
    public fun engine(engine: String)

    /**
     * @param engineVersion The version number of the cache engine to be used for this cluster.
     * 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)
     * ), 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 ipDiscovery The network type you choose when modifying a cluster, 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 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 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 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 numCacheNodes The number of cache nodes that the cache cluster should have. 
     *
     * However, if the `PreferredAvailabilityZone` and `PreferredAvailabilityZones` properties were
     * not previously specified and you don't specify any new values, an update requires
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    public fun numCacheNodes(numCacheNodes: Number)

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

    /**
     * @param preferredAvailabilityZone The EC2 Availability Zone in which the cluster is created.
     * All nodes belonging to this cluster are placed in the preferred Availability Zone. If you
     * want to create your nodes across multiple Availability Zones, use `PreferredAvailabilityZones` .
     *
     * Default: System chosen Availability Zone.
     */
    public fun preferredAvailabilityZone(preferredAvailabilityZone: String)

    /**
     * @param preferredAvailabilityZones A list of the Availability Zones in which cache nodes are
     * created.
     * The order of the zones in the list is not important.
     *
     * This option is only supported on Memcached.
     *
     *
     * If you are creating your cluster in an Amazon VPC (recommended) you can only locate nodes in
     * Availability Zones that are associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheNodes` .
     *
     *
     * If you want all the nodes in the same Availability Zone, use `PreferredAvailabilityZone`
     * instead, or repeat the Availability Zone multiple times in the list.
     *
     * Default: System chosen Availability Zones.
     */
    public fun preferredAvailabilityZones(preferredAvailabilityZones: List)

    /**
     * @param preferredAvailabilityZones A list of the Availability Zones in which cache nodes are
     * created.
     * The order of the zones in the list is not important.
     *
     * This option is only supported on Memcached.
     *
     *
     * If you are creating your cluster in an Amazon VPC (recommended) you can only locate nodes in
     * Availability Zones that are associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheNodes` .
     *
     *
     * If you want all the nodes in the same Availability Zone, use `PreferredAvailabilityZone`
     * instead, or repeat the Availability Zone multiple times in the list.
     *
     * Default: System chosen Availability Zones.
     */
    public fun preferredAvailabilityZones(vararg preferredAvailabilityZones: 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 snapshotArns A single-element string list containing an Amazon Resource Name (ARN)
     * that uniquely identifies a Redis OSS RDB snapshot file stored in Amazon S3.
     * The snapshot file is used to populate the node group (shard). The Amazon S3 object name in
     * the ARN cannot contain any commas.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     */
    public fun snapshotArns(snapshotArns: List)

    /**
     * @param snapshotArns A single-element string list containing an Amazon Resource Name (ARN)
     * that uniquely identifies a Redis OSS RDB snapshot file stored in Amazon S3.
     * The snapshot file is used to populate the node group (shard). The Amazon S3 object name in
     * the ARN cannot contain any commas.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * 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 Redis OSS snapshot from which to restore data into the new
     * node group (shard).
     * The snapshot status changes to `restoring` while the new node group (shard) is being created.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     */
    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 taken today is retained for
     * 5 days before being deleted.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * Default: 0 (i.e., automatic backups are disabled for this cache 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.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     */
    public fun snapshotWindow(snapshotWindow: String)

    /**
     * @param tags A list of tags to be added to this resource.
     */
    public fun tags(tags: List)

    /**
     * @param tags A list of tags to be added to this resource.
     */
    public fun tags(vararg tags: CfnTag)

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to true.
     */
    public fun transitEncryptionEnabled(transitEncryptionEnabled: Boolean)

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to true.
     */
    public fun transitEncryptionEnabled(transitEncryptionEnabled: IResolvable)

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

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

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

    /**
     * @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 azMode Specifies whether the nodes in this Memcached cluster are created in a single
     * Availability Zone or created across multiple Availability Zones in the cluster's region.
     * This parameter is only supported for Memcached clusters.
     *
     * If the `AZMode` and `PreferredAvailabilityZones` are not specified, ElastiCache assumes
     * `single-az` mode.
     */
    override fun azMode(azMode: String) {
      cdkBuilder.azMode(azMode)
    }

    /**
     * @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. Changing the CacheNodeType of a Memcached
     * instance is currently not supported. If you need to scale using Memcached, we recommend forcing
     * a replacement update by changing the `LogicalResourceId` of the resource.
     *
     * * General purpose:
     * * Current generation:
     *
     * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
     * `cache.m6g.4xlarge` , `cache.m6g.8xlarge` , `cache.m6g.12xlarge` , `cache.m6g.16xlarge` ,
     * `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.8xlarge` , `cache.r6g.12xlarge` , `cache.r6g.16xlarge` ,
     * `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
     * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
     *
     * *Additional node type info*
     *
     * * All current generation instance types are created in Amazon VPC by default.
     * * Redis OSS append-only files (AOF) are not supported for T1 or T2 instances.
     * * Redis OSS Multi-AZ with automatic failover is not supported on T1 instances.
     * * Redis OSS configuration variables `appendonly` and `appendfsync` are not supported on Redis
     * OSS version 2.8.22 and later.
     */
    override fun cacheNodeType(cacheNodeType: String) {
      cdkBuilder.cacheNodeType(cacheNodeType)
    }

    /**
     * @param cacheParameterGroupName The name of the parameter group to associate with this
     * cluster.
     * If this argument is omitted, the default parameter group for the specified engine is used.
     * You cannot use any parameter group which has `cluster-enabled='yes'` when creating a cluster.
     */
    override fun cacheParameterGroupName(cacheParameterGroupName: String) {
      cdkBuilder.cacheParameterGroupName(cacheParameterGroupName)
    }

    /**
     * @param cacheSecurityGroupNames A list of security group names to associate with this cluster.
     * Use this parameter only when you are creating a cluster outside of an Amazon Virtual Private
     * Cloud (Amazon VPC).
     */
    override fun cacheSecurityGroupNames(cacheSecurityGroupNames: List) {
      cdkBuilder.cacheSecurityGroupNames(cacheSecurityGroupNames)
    }

    /**
     * @param cacheSecurityGroupNames A list of security group names to associate with this cluster.
     * Use this parameter only when you are creating a cluster outside of an Amazon Virtual Private
     * Cloud (Amazon VPC).
     */
    override fun cacheSecurityGroupNames(vararg cacheSecurityGroupNames: String): Unit =
        cacheSecurityGroupNames(cacheSecurityGroupNames.toList())

    /**
     * @param cacheSubnetGroupName The name of the subnet group to be used for the cluster.
     * Use this parameter only when you are creating a cluster in an Amazon Virtual Private Cloud
     * (Amazon VPC).
     *
     *
     * 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 clusterName A name for the cache cluster.
     * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that
     * ID for the cache cluster. For more information, see [Name
     * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     *
     * The name must contain 1 to 50 alphanumeric characters or hyphens. The name must start with a
     * letter and cannot end with a hyphen or contain two consecutive hyphens.
     */
    override fun clusterName(clusterName: String) {
      cdkBuilder.clusterName(clusterName)
    }

    /**
     * @param engine The name of the cache engine to be used for this cluster. 
     * Valid values for this parameter are: `memcached` | `redis`
     */
    override fun engine(engine: String) {
      cdkBuilder.engine(engine)
    }

    /**
     * @param engineVersion The version number of the cache engine to be used for this cluster.
     * 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)
     * ), 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 ipDiscovery The network type you choose when modifying a cluster, 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 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 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 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 numCacheNodes The number of cache nodes that the cache cluster should have. 
     *
     * However, if the `PreferredAvailabilityZone` and `PreferredAvailabilityZones` properties were
     * not previously specified and you don't specify any new values, an update requires
     * [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)
     * .
     */
    override fun numCacheNodes(numCacheNodes: Number) {
      cdkBuilder.numCacheNodes(numCacheNodes)
    }

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

    /**
     * @param preferredAvailabilityZone The EC2 Availability Zone in which the cluster is created.
     * All nodes belonging to this cluster are placed in the preferred Availability Zone. If you
     * want to create your nodes across multiple Availability Zones, use `PreferredAvailabilityZones` .
     *
     * Default: System chosen Availability Zone.
     */
    override fun preferredAvailabilityZone(preferredAvailabilityZone: String) {
      cdkBuilder.preferredAvailabilityZone(preferredAvailabilityZone)
    }

    /**
     * @param preferredAvailabilityZones A list of the Availability Zones in which cache nodes are
     * created.
     * The order of the zones in the list is not important.
     *
     * This option is only supported on Memcached.
     *
     *
     * If you are creating your cluster in an Amazon VPC (recommended) you can only locate nodes in
     * Availability Zones that are associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheNodes` .
     *
     *
     * If you want all the nodes in the same Availability Zone, use `PreferredAvailabilityZone`
     * instead, or repeat the Availability Zone multiple times in the list.
     *
     * Default: System chosen Availability Zones.
     */
    override fun preferredAvailabilityZones(preferredAvailabilityZones: List) {
      cdkBuilder.preferredAvailabilityZones(preferredAvailabilityZones)
    }

    /**
     * @param preferredAvailabilityZones A list of the Availability Zones in which cache nodes are
     * created.
     * The order of the zones in the list is not important.
     *
     * This option is only supported on Memcached.
     *
     *
     * If you are creating your cluster in an Amazon VPC (recommended) you can only locate nodes in
     * Availability Zones that are associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheNodes` .
     *
     *
     * If you want all the nodes in the same Availability Zone, use `PreferredAvailabilityZone`
     * instead, or repeat the Availability Zone multiple times in the list.
     *
     * Default: System chosen Availability Zones.
     */
    override fun preferredAvailabilityZones(vararg preferredAvailabilityZones: String): Unit =
        preferredAvailabilityZones(preferredAvailabilityZones.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 snapshotArns A single-element string list containing an Amazon Resource Name (ARN)
     * that uniquely identifies a Redis OSS RDB snapshot file stored in Amazon S3.
     * The snapshot file is used to populate the node group (shard). The Amazon S3 object name in
     * the ARN cannot contain any commas.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * Example of an Amazon S3 ARN: `arn:aws:s3:::my_bucket/snapshot1.rdb`
     */
    override fun snapshotArns(snapshotArns: List) {
      cdkBuilder.snapshotArns(snapshotArns)
    }

    /**
     * @param snapshotArns A single-element string list containing an Amazon Resource Name (ARN)
     * that uniquely identifies a Redis OSS RDB snapshot file stored in Amazon S3.
     * The snapshot file is used to populate the node group (shard). The Amazon S3 object name in
     * the ARN cannot contain any commas.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * 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 Redis OSS snapshot from which to restore data into the new
     * node group (shard).
     * The snapshot status changes to `restoring` while the new node group (shard) is being created.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     */
    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 taken today is retained for
     * 5 days before being deleted.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * Default: 0 (i.e., automatic backups are disabled for this cache 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.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     */
    override fun snapshotWindow(snapshotWindow: String) {
      cdkBuilder.snapshotWindow(snapshotWindow)
    }

    /**
     * @param tags A list of tags to be added to this resource.
     */
    override fun tags(tags: List) {
      cdkBuilder.tags(tags.map(CfnTag.Companion::unwrap))
    }

    /**
     * @param tags A list of tags to be added to this resource.
     */
    override fun tags(vararg tags: CfnTag): Unit = tags(tags.toList())

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to true.
     */
    override fun transitEncryptionEnabled(transitEncryptionEnabled: Boolean) {
      cdkBuilder.transitEncryptionEnabled(transitEncryptionEnabled)
    }

    /**
     * @param transitEncryptionEnabled A flag that enables in-transit encryption when set to true.
     */
    override fun transitEncryptionEnabled(transitEncryptionEnabled: IResolvable) {
      cdkBuilder.transitEncryptionEnabled(transitEncryptionEnabled.let(IResolvable.Companion::unwrap))
    }

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

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

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

  private class Wrapper(
    cdkObject: software.amazon.awscdk.services.elasticache.CfnCacheClusterProps,
  ) : CdkObject(cdkObject),
      CfnCacheClusterProps {
    /**
     * 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-cachecluster.html#cfn-elasticache-cachecluster-autominorversionupgrade)
     */
    override fun autoMinorVersionUpgrade(): Any? = unwrap(this).getAutoMinorVersionUpgrade()

    /**
     * Specifies whether the nodes in this Memcached cluster are created in a single Availability
     * Zone or created across multiple Availability Zones in the cluster's region.
     *
     * This parameter is only supported for Memcached clusters.
     *
     * If the `AZMode` and `PreferredAvailabilityZones` are not specified, ElastiCache assumes
     * `single-az` mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-azmode)
     */
    override fun azMode(): String? = unwrap(this).getAzMode()

    /**
     * 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. Changing the CacheNodeType of a Memcached
     * instance is currently not supported. If you need to scale using Memcached, we recommend forcing
     * a replacement update by changing the `LogicalResourceId` of the resource.
     *
     * * General purpose:
     * * Current generation:
     *
     * *M6g node types:* `cache.m6g.large` , `cache.m6g.xlarge` , `cache.m6g.2xlarge` ,
     * `cache.m6g.4xlarge` , `cache.m6g.8xlarge` , `cache.m6g.12xlarge` , `cache.m6g.16xlarge` ,
     * `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.8xlarge` , `cache.r6g.12xlarge` , `cache.r6g.16xlarge` ,
     * `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
     * Region](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion)
     *
     * *Additional node type info*
     *
     * * All current generation instance types are created in Amazon VPC by default.
     * * Redis OSS append-only files (AOF) are not supported for T1 or T2 instances.
     * * Redis OSS Multi-AZ with automatic failover is not supported on T1 instances.
     * * Redis OSS configuration variables `appendonly` and `appendfsync` are not supported on Redis
     * OSS version 2.8.22 and later.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-cachenodetype)
     */
    override fun cacheNodeType(): String = unwrap(this).getCacheNodeType()

    /**
     * The name of the parameter group to associate with this cluster.
     *
     * If this argument is omitted, the default parameter group for the specified engine is used.
     * You cannot use any parameter group which has `cluster-enabled='yes'` when creating a cluster.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-cacheparametergroupname)
     */
    override fun cacheParameterGroupName(): String? = unwrap(this).getCacheParameterGroupName()

    /**
     * A list of security group names to associate with this cluster.
     *
     * Use this parameter only when you are creating a cluster outside of an Amazon Virtual Private
     * Cloud (Amazon VPC).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-cachesecuritygroupnames)
     */
    override fun cacheSecurityGroupNames(): List = unwrap(this).getCacheSecurityGroupNames()
        ?: emptyList()

    /**
     * The name of the subnet group to be used for the cluster.
     *
     * Use this parameter only when you are creating a cluster in an Amazon Virtual Private Cloud
     * (Amazon VPC).
     *
     *
     * 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-cachecluster.html#cfn-elasticache-cachecluster-cachesubnetgroupname)
     */
    override fun cacheSubnetGroupName(): String? = unwrap(this).getCacheSubnetGroupName()

    /**
     * A name for the cache cluster.
     *
     * If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that
     * ID for the cache cluster. For more information, see [Name
     * Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     *
     * The name must contain 1 to 50 alphanumeric characters or hyphens. The name must start with a
     * letter and cannot end with a hyphen or contain two consecutive hyphens.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-clustername)
     */
    override fun clusterName(): String? = unwrap(this).getClusterName()

    /**
     * The name of the cache engine to be used for this cluster.
     *
     * Valid values for this parameter are: `memcached` | `redis`
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-engine)
     */
    override fun engine(): String = unwrap(this).getEngine()

    /**
     * The version number of the cache engine to be used for this cluster.
     *
     * 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)
     * ), 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-cachecluster.html#cfn-elasticache-cachecluster-engineversion)
     */
    override fun engineVersion(): String? = unwrap(this).getEngineVersion()

    /**
     * The network type you choose when modifying a cluster, 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-cachecluster.html#cfn-elasticache-cachecluster-ipdiscovery)
     */
    override fun ipDiscovery(): String? = unwrap(this).getIpDiscovery()

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

    /**
     * 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-cachecluster.html#cfn-elasticache-cachecluster-networktype)
     */
    override fun networkType(): String? = unwrap(this).getNetworkType()

    /**
     * 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-cachecluster.html#cfn-elasticache-cachecluster-notificationtopicarn)
     */
    override fun notificationTopicArn(): String? = unwrap(this).getNotificationTopicArn()

    /**
     * The number of cache nodes that the cache cluster should have.
     *
     *
     * However, if the `PreferredAvailabilityZone` and `PreferredAvailabilityZones` properties were
     * not previously specified and you don't specify any new values, an 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-cachecluster.html#cfn-elasticache-cachecluster-numcachenodes)
     */
    override fun numCacheNodes(): Number = unwrap(this).getNumCacheNodes()

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

    /**
     * The EC2 Availability Zone in which the cluster is created.
     *
     * All nodes belonging to this cluster are placed in the preferred Availability Zone. If you
     * want to create your nodes across multiple Availability Zones, use `PreferredAvailabilityZones` .
     *
     * Default: System chosen Availability Zone.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-preferredavailabilityzone)
     */
    override fun preferredAvailabilityZone(): String? = unwrap(this).getPreferredAvailabilityZone()

    /**
     * A list of the Availability Zones in which cache nodes are created.
     *
     * The order of the zones in the list is not important.
     *
     * This option is only supported on Memcached.
     *
     *
     * If you are creating your cluster in an Amazon VPC (recommended) you can only locate nodes in
     * Availability Zones that are associated with the subnets in the selected subnet group.
     *
     * The number of Availability Zones listed must equal the value of `NumCacheNodes` .
     *
     *
     * If you want all the nodes in the same Availability Zone, use `PreferredAvailabilityZone`
     * instead, or repeat the Availability Zone multiple times in the list.
     *
     * Default: System chosen Availability Zones.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-preferredavailabilityzones)
     */
    override fun preferredAvailabilityZones(): List =
        unwrap(this).getPreferredAvailabilityZones() ?: 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-cachecluster.html#cfn-elasticache-cachecluster-preferredmaintenancewindow)
     */
    override fun preferredMaintenanceWindow(): String? =
        unwrap(this).getPreferredMaintenanceWindow()

    /**
     * A single-element string list containing an Amazon Resource Name (ARN) that uniquely
     * identifies a Redis OSS RDB snapshot file stored in Amazon S3.
     *
     * The snapshot file is used to populate the node group (shard). The Amazon S3 object name in
     * the ARN cannot contain any commas.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * 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-cachecluster.html#cfn-elasticache-cachecluster-snapshotarns)
     */
    override fun snapshotArns(): List = unwrap(this).getSnapshotArns() ?: emptyList()

    /**
     * The name of a Redis OSS snapshot from which to restore data into the new node group (shard).
     *
     * The snapshot status changes to `restoring` while the new node group (shard) is being created.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-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 taken today is retained for
     * 5 days before being deleted.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * Default: 0 (i.e., automatic backups are disabled for this cache cluster).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-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.
     *
     *
     * This parameter is only valid if the `Engine` parameter is `redis` .
     *
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-snapshotwindow)
     */
    override fun snapshotWindow(): String? = unwrap(this).getSnapshotWindow()

    /**
     * A list of tags to be added to this resource.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-tags)
     */
    override fun tags(): List = unwrap(this).getTags()?.map(CfnTag::wrap) ?: emptyList()

    /**
     * A flag that enables in-transit encryption when set to true.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-cachecluster.html#cfn-elasticache-cachecluster-transitencryptionenabled)
     */
    override fun transitEncryptionEnabled(): Any? = unwrap(this).getTransitEncryptionEnabled()

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

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

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

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy