/*******************************************************************************
* Copyright 2012-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
* this file except in compliance with the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file.
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
* *****************************************************************************
*
* AWS Tools for Windows (TM) PowerShell (TM)
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation;
using System.Text;
using Amazon.PowerShell.Common;
using Amazon.Runtime;
using Amazon.ElastiCache;
using Amazon.ElastiCache.Model;
namespace Amazon.PowerShell.Cmdlets.EC
{
///
/// Creates a Redis (cluster mode disabled) or a Redis (cluster mode enabled) replication
/// group.
///
///
///
/// This API can be used to create a standalone regional replication group or a secondary
/// replication group associated with a Global datastore.
///
/// A Redis (cluster mode disabled) replication group is a collection of clusters, where
/// one of the clusters is a read/write primary and the others are read-only replicas.
/// Writes to the primary are asynchronously propagated to the replicas.
///
/// A Redis cluster-mode enabled cluster is comprised of from 1 to 90 shards (API/CLI:
/// node groups). Each shard has a primary node and up to 5 read-only replica nodes. The
/// configuration can range from 90 shards and 0 replicas to 15 shards and 5 replicas,
/// which is the maximum number or replicas allowed.
///
/// The node or shard limit can be increased to a maximum of 500 per cluster if the Redis
/// engine version is 5.0.6 or higher. For example, you can choose to configure a 500
/// node cluster that ranges between 83 shards (one primary and 5 replicas per shard)
/// and 500 shards (single primary and no replicas). Make sure there are enough available
/// IP addresses to accommodate the increase. Common pitfalls include the subnets in the
/// subnet group have too small a CIDR range or the subnets are shared and heavily used
/// by other clusters. For more information, see Creating
/// a Subnet Group. For versions below 5.0.6, the limit is 250 per cluster.
///
/// To request a limit increase, see Amazon
/// Service Limits and choose the limit type Nodes per cluster per instance type.
///
///
/// When a Redis (cluster mode disabled) replication group has been successfully created,
/// you can add one or more read replicas to it, up to a total of 5 read replicas. If
/// you need to increase or decrease the number of node groups (console: shards), you
/// can avail yourself of ElastiCache for Redis' scaling. For more information, see Scaling
/// ElastiCache for Redis Clusters in the ElastiCache User Guide.
///
/// This operation is valid for Redis only.
///
///
[Cmdlet("New", "ECReplicationGroup", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)]
[OutputType("Amazon.ElastiCache.Model.ReplicationGroup")]
[AWSCmdlet("Calls the Amazon ElastiCache CreateReplicationGroup API operation.", Operation = new[] {"CreateReplicationGroup"}, SelectReturnType = typeof(Amazon.ElastiCache.Model.CreateReplicationGroupResponse))]
[AWSCmdletOutput("Amazon.ElastiCache.Model.ReplicationGroup or Amazon.ElastiCache.Model.CreateReplicationGroupResponse",
"This cmdlet returns an Amazon.ElastiCache.Model.ReplicationGroup object.",
"The service call response (type Amazon.ElastiCache.Model.CreateReplicationGroupResponse) can also be referenced from properties attached to the cmdlet entry in the $AWSHistory stack."
)]
public partial class NewECReplicationGroupCmdlet : AmazonElastiCacheClientCmdlet, IExecutor
{
#region Parameter 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 version 3.2.6
, 4.x
or later.Default: false
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? AtRestEncryptionEnabled { get; set; }
#endregion
#region Parameter 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 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.
- The only permitted printable special characters are !, &, #, $, ^, <, >,
/// and -. Other printable special characters cannot be used in the AUTH token.
For more information, see AUTH password
/// at http://redis.io/commands/AUTH.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String AuthToken { get; set; }
#endregion
#region Parameter 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 (cluster mode enabled)
/// replication groups.Default: false
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? AutomaticFailoverEnabled { get; set; }
#endregion
#region Parameter AutoMinorVersionUpgrade
///
///
/// If you are running Redis engine version 6.0 or later, set this parameter to yes if
/// you want to opt-in to the next auto minor version upgrade campaign. This parameter
/// is disabled for previous versions.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? AutoMinorVersionUpgrade { get; set; }
#endregion
#region Parameter 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 (available only for Redis engine version 5.0.6 onward and for
/// Memcached engine version 1.5.16 onward):
cache.m6g.large
, cache.m6g.xlarge
,
/// cache.m6g.2xlarge
, cache.m6g.4xlarge
, cache.m6g.8xlarge
,
/// cache.m6g.12xlarge
, cache.m6g.16xlarge
For region availability, see Supported
/// Node TypesM5 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 (available only for Redis engine version 5.0.6 onward and Memcached
/// engine version 1.5.16 onward): 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. Existing clusters are still supported but creation
/// of new clusters is not supported for these types.)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. Existing clusters are still supported but creation
/// of new clusters is not supported for these types.)C1 node types:
cache.c1.xlarge
- Memory optimized:
- Current generation: R6g node types (available only for Redis engine version 5.0.6 onward and for
/// Memcached engine version 1.5.16 onward).
cache.r6g.large
, cache.r6g.xlarge
, cache.r6g.2xlarge
,
/// cache.r6g.4xlarge
, cache.r6g.8xlarge
, cache.r6g.12xlarge
,
/// cache.r6g.16xlarge
For region availability, see Supported
/// Node TypesR5 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. Existing clusters are still supported but creation
/// of new clusters is not supported for these types.)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
Additional node type info- All current generation instance types are created in Amazon VPC by default.
- Redis append-only files (AOF) are not supported for T1 or T2 instances.
- Redis Multi-AZ with automatic failover is not supported on T1 instances.
- Redis configuration variables
appendonly
and appendfsync
/// are not supported on Redis version 2.8.22 and later.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String CacheNodeType { get; set; }
#endregion
#region Parameter 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 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 (cluster mode disabled) replication group, use
CacheParameterGroupName=default.redis3.2
. - To create a Redis (cluster mode enabled) replication group, use
CacheParameterGroupName=default.redis3.2.cluster.on
.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String CacheParameterGroupName { get; set; }
#endregion
#region Parameter CacheSecurityGroupName
///
///
/// A list of cache security group names to associate with this replication group.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("CacheSecurityGroupNames")]
public System.String[] CacheSecurityGroupName { get; set; }
#endregion
#region Parameter 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 Subnets
/// and Subnet Groups.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String CacheSubnetGroupName { get; set; }
#endregion
#region Parameter 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 clients to connect
/// using both cluster mode enabled and cluster mode disabled. After you migrate all Redis
/// clients to use cluster mode enabled, you can then complete cluster mode configuration
/// and set the cluster mode to Enabled.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[AWSConstantClassSource("Amazon.ElastiCache.ClusterMode")]
public Amazon.ElastiCache.ClusterMode ClusterMode { get; set; }
#endregion
#region Parameter 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? DataTieringEnabled { get; set; }
#endregion
#region Parameter Engine
///
///
/// The name of the cache engine to be used for the clusters in this replication group.
/// The value must be set to Redis
.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String Engine { get; set; }
#endregion
#region Parameter 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) 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String EngineVersion { get; set; }
#endregion
#region Parameter GlobalReplicationGroupId
///
///
/// The name of the Global datastore
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String GlobalReplicationGroupId { get; set; }
#endregion
#region Parameter IpDiscovery
///
///
/// The network type you choose when creating a replication group, either ipv4
/// | ipv6
. IPv6 is supported for workloads using Redis engine version 6.2
/// onward or Memcached engine version 1.6.6 on all instances built on the Nitro
/// system.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[AWSConstantClassSource("Amazon.ElastiCache.IpDiscovery")]
public Amazon.ElastiCache.IpDiscovery IpDiscovery { get; set; }
#endregion
#region Parameter KmsKeyId
///
///
/// The ID of the KMS key used to encrypt the disk in the cluster.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String KmsKeyId { get; set; }
#endregion
#region Parameter LogDeliveryConfiguration
///
///
/// Specifies the destination, format and type of the logs.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("LogDeliveryConfigurations")]
public Amazon.ElastiCache.Model.LogDeliveryConfigurationRequest[] LogDeliveryConfiguration { get; set; }
#endregion
#region Parameter MultiAZEnabled
///
///
/// A flag indicating if you have Multi-AZ enabled to enhance fault tolerance. For more
/// information, see Minimizing
/// Downtime: Multi-AZ.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? MultiAZEnabled { get; set; }
#endregion
#region Parameter NetworkType
///
///
/// Must be either ipv4
| ipv6
| dual_stack
. IPv6
/// is supported for workloads using Redis engine version 6.2 onward or Memcached engine
/// version 1.6.6 on all instances built on the Nitro
/// system.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[AWSConstantClassSource("Amazon.ElastiCache.NetworkType")]
public Amazon.ElastiCache.NetworkType NetworkType { get; set; }
#endregion
#region Parameter NodeGroupConfiguration
///
///
/// A list of node group (shard) configuration options. Each node group (shard) configuration
/// has the following members: PrimaryAvailabilityZone
, ReplicaAvailabilityZones
,
/// ReplicaCount
, and Slots
.If you're creating a Redis (cluster mode disabled) or a Redis (cluster mode enabled)
/// replication group, you can use this parameter to individually configure each node
/// group (shard), or you can omit this parameter. However, it is required when seeding
/// a Redis (cluster mode enabled) cluster from a S3 rdb file. You must configure each
/// node group (shard) using this parameter because you must specify the slots for each
/// node group.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public Amazon.ElastiCache.Model.NodeGroupConfiguration[] NodeGroupConfiguration { get; set; }
#endregion
#region Parameter 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String NotificationTopicArn { get; set; }
#endregion
#region Parameter NumCacheCluster
///
///
/// 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).
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("NumCacheClusters")]
public System.Int32? NumCacheCluster { get; set; }
#endregion
#region Parameter NumNodeGroup
///
///
/// An optional parameter that specifies the number of node groups (shards) for this Redis
/// (cluster mode enabled) replication group. For Redis (cluster mode disabled) either
/// omit this parameter or set it to 1.Default: 1
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("NumNodeGroups")]
public System.Int32? NumNodeGroup { get; set; }
#endregion
#region Parameter Port
///
///
/// The port number on which each member of the replication group accepts connections.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Int32? Port { get; set; }
#endregion
#region Parameter 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String[] PreferredCacheClusterAZs { get; set; }
#endregion
#region Parameter 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: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:Example: sun:23:00-mon:01:30
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String PreferredMaintenanceWindow { get; set; }
#endregion
#region Parameter 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.
///
///
[System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true)]
public System.String PrimaryClusterId { get; set; }
#endregion
#region Parameter ReplicasPerNodeGroup
///
///
/// An optional parameter that specifies the number of replica nodes in each node group
/// (shard). Valid values are 0 to 5.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Int32? ReplicasPerNodeGroup { get; set; }
#endregion
#region Parameter ReplicationGroupDescription
///
///
/// A user-created description for the replication group.
///
///
#if !MODULAR
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
#else
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true)]
[System.Management.Automation.AllowEmptyString]
[System.Management.Automation.AllowNull]
#endif
[Amazon.PowerShell.Common.AWSRequiredParameter]
public System.String ReplicationGroupDescription { get; set; }
#endregion
#region Parameter 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.
///
///
#if !MODULAR
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
#else
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true)]
[System.Management.Automation.AllowEmptyString]
[System.Management.Automation.AllowNull]
#endif
[Amazon.PowerShell.Common.AWSRequiredParameter]
public System.String ReplicationGroupId { get; set; }
#endregion
#region Parameter SecurityGroupId
///
///
/// 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).
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("SecurityGroupIds")]
public System.String[] SecurityGroupId { get; set; }
#endregion
#region Parameter SnapshotArn
///
///
/// A list of Amazon Resource Names (ARN) that uniquely identify the Redis 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
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("SnapshotArns")]
public System.String[] SnapshotArn { get; set; }
#endregion
#region Parameter 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String SnapshotName { get; set; }
#endregion
#region Parameter 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).
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Int32? SnapshotRetentionLimit { get; set; }
#endregion
#region Parameter 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String SnapshotWindow { get; set; }
#endregion
#region Parameter Tag
///
///
/// 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("Tags")]
public Amazon.ElastiCache.Model.Tag[] Tag { get; set; }
#endregion
#region Parameter TransitEncryptionEnabled
///
///
/// A flag that enables in-transit encryption when set to true
.This parameter is valid only if the Engine
parameter is redis
,
/// the EngineVersion
parameter is 3.2.6
, 4.x
or
/// later, 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 version 3.2.6
, 4.x
or later.Default: false
For HIPAA compliance, you must specify TransitEncryptionEnabled
as true
,
/// an AuthToken
, and a CacheSubnetGroup
.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? TransitEncryptionEnabled { get; set; }
#endregion
#region Parameter 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 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.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[AWSConstantClassSource("Amazon.ElastiCache.TransitEncryptionMode")]
public Amazon.ElastiCache.TransitEncryptionMode TransitEncryptionMode { get; set; }
#endregion
#region Parameter UserGroupId
///
///
/// The user group to associate with the replication group.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
[Alias("UserGroupIds")]
public System.String[] UserGroupId { get; set; }
#endregion
#region Parameter Select
///
/// Use the -Select parameter to control the cmdlet output. The default value is 'ReplicationGroup'.
/// Specifying -Select '*' will result in the cmdlet returning the whole service response (Amazon.ElastiCache.Model.CreateReplicationGroupResponse).
/// Specifying the name of a property of type Amazon.ElastiCache.Model.CreateReplicationGroupResponse will result in that property being returned.
/// Specifying -Select '^ParameterName' will result in the cmdlet returning the selected cmdlet parameter value.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public string Select { get; set; } = "ReplicationGroup";
#endregion
#region Parameter PassThru
///
/// Changes the cmdlet behavior to return the value passed to the PrimaryClusterId parameter.
/// The -PassThru parameter is deprecated, use -Select '^PrimaryClusterId' instead. This parameter will be removed in a future version.
///
[System.Obsolete("The -PassThru parameter is deprecated, use -Select '^PrimaryClusterId' instead. This parameter will be removed in a future version.")]
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public SwitchParameter PassThru { get; set; }
#endregion
#region Parameter Force
///
/// This parameter overrides confirmation prompts to force
/// the cmdlet to continue its operation. This parameter should always
/// be used with caution.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public SwitchParameter Force { get; set; }
#endregion
protected override void ProcessRecord()
{
this._AWSSignerType = "v4";
base.ProcessRecord();
var resourceIdentifiersText = FormatParameterValuesForConfirmationMsg(nameof(this.PrimaryClusterId), MyInvocation.BoundParameters);
if (!ConfirmShouldProceed(this.Force.IsPresent, resourceIdentifiersText, "New-ECReplicationGroup (CreateReplicationGroup)"))
{
return;
}
var context = new CmdletContext();
// allow for manipulation of parameters prior to loading into context
PreExecutionContextLoad(context);
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (ParameterWasBound(nameof(this.Select)))
{
context.Select = CreateSelectDelegate(Select) ??
throw new System.ArgumentException("Invalid value for -Select parameter.", nameof(this.Select));
if (this.PassThru.IsPresent)
{
throw new System.ArgumentException("-PassThru cannot be used when -Select is specified.", nameof(this.Select));
}
}
else if (this.PassThru.IsPresent)
{
context.Select = (response, cmdlet) => this.PrimaryClusterId;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
context.AtRestEncryptionEnabled = this.AtRestEncryptionEnabled;
context.AuthToken = this.AuthToken;
context.AutomaticFailoverEnabled = this.AutomaticFailoverEnabled;
context.AutoMinorVersionUpgrade = this.AutoMinorVersionUpgrade;
context.CacheNodeType = this.CacheNodeType;
context.CacheParameterGroupName = this.CacheParameterGroupName;
if (this.CacheSecurityGroupName != null)
{
context.CacheSecurityGroupName = new List(this.CacheSecurityGroupName);
}
context.CacheSubnetGroupName = this.CacheSubnetGroupName;
context.ClusterMode = this.ClusterMode;
context.DataTieringEnabled = this.DataTieringEnabled;
context.Engine = this.Engine;
context.EngineVersion = this.EngineVersion;
context.GlobalReplicationGroupId = this.GlobalReplicationGroupId;
context.IpDiscovery = this.IpDiscovery;
context.KmsKeyId = this.KmsKeyId;
if (this.LogDeliveryConfiguration != null)
{
context.LogDeliveryConfiguration = new List(this.LogDeliveryConfiguration);
}
context.MultiAZEnabled = this.MultiAZEnabled;
context.NetworkType = this.NetworkType;
if (this.NodeGroupConfiguration != null)
{
context.NodeGroupConfiguration = new List(this.NodeGroupConfiguration);
}
context.NotificationTopicArn = this.NotificationTopicArn;
context.NumCacheCluster = this.NumCacheCluster;
context.NumNodeGroup = this.NumNodeGroup;
context.Port = this.Port;
if (this.PreferredCacheClusterAZs != null)
{
context.PreferredCacheClusterAZs = new List(this.PreferredCacheClusterAZs);
}
context.PreferredMaintenanceWindow = this.PreferredMaintenanceWindow;
context.PrimaryClusterId = this.PrimaryClusterId;
context.ReplicasPerNodeGroup = this.ReplicasPerNodeGroup;
context.ReplicationGroupDescription = this.ReplicationGroupDescription;
#if MODULAR
if (this.ReplicationGroupDescription == null && ParameterWasBound(nameof(this.ReplicationGroupDescription)))
{
WriteWarning("You are passing $null as a value for parameter ReplicationGroupDescription which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.");
}
#endif
context.ReplicationGroupId = this.ReplicationGroupId;
#if MODULAR
if (this.ReplicationGroupId == null && ParameterWasBound(nameof(this.ReplicationGroupId)))
{
WriteWarning("You are passing $null as a value for parameter ReplicationGroupId which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.");
}
#endif
if (this.SecurityGroupId != null)
{
context.SecurityGroupId = new List(this.SecurityGroupId);
}
if (this.SnapshotArn != null)
{
context.SnapshotArn = new List(this.SnapshotArn);
}
context.SnapshotName = this.SnapshotName;
context.SnapshotRetentionLimit = this.SnapshotRetentionLimit;
context.SnapshotWindow = this.SnapshotWindow;
if (this.Tag != null)
{
context.Tag = new List(this.Tag);
}
context.TransitEncryptionEnabled = this.TransitEncryptionEnabled;
context.TransitEncryptionMode = this.TransitEncryptionMode;
if (this.UserGroupId != null)
{
context.UserGroupId = new List(this.UserGroupId);
}
// allow further manipulation of loaded context prior to processing
PostExecutionContextLoad(context);
var output = Execute(context) as CmdletOutput;
ProcessOutput(output);
}
#region IExecutor Members
public object Execute(ExecutorContext context)
{
var cmdletContext = context as CmdletContext;
// create request
var request = new Amazon.ElastiCache.Model.CreateReplicationGroupRequest();
if (cmdletContext.AtRestEncryptionEnabled != null)
{
request.AtRestEncryptionEnabled = cmdletContext.AtRestEncryptionEnabled.Value;
}
if (cmdletContext.AuthToken != null)
{
request.AuthToken = cmdletContext.AuthToken;
}
if (cmdletContext.AutomaticFailoverEnabled != null)
{
request.AutomaticFailoverEnabled = cmdletContext.AutomaticFailoverEnabled.Value;
}
if (cmdletContext.AutoMinorVersionUpgrade != null)
{
request.AutoMinorVersionUpgrade = cmdletContext.AutoMinorVersionUpgrade.Value;
}
if (cmdletContext.CacheNodeType != null)
{
request.CacheNodeType = cmdletContext.CacheNodeType;
}
if (cmdletContext.CacheParameterGroupName != null)
{
request.CacheParameterGroupName = cmdletContext.CacheParameterGroupName;
}
if (cmdletContext.CacheSecurityGroupName != null)
{
request.CacheSecurityGroupNames = cmdletContext.CacheSecurityGroupName;
}
if (cmdletContext.CacheSubnetGroupName != null)
{
request.CacheSubnetGroupName = cmdletContext.CacheSubnetGroupName;
}
if (cmdletContext.ClusterMode != null)
{
request.ClusterMode = cmdletContext.ClusterMode;
}
if (cmdletContext.DataTieringEnabled != null)
{
request.DataTieringEnabled = cmdletContext.DataTieringEnabled.Value;
}
if (cmdletContext.Engine != null)
{
request.Engine = cmdletContext.Engine;
}
if (cmdletContext.EngineVersion != null)
{
request.EngineVersion = cmdletContext.EngineVersion;
}
if (cmdletContext.GlobalReplicationGroupId != null)
{
request.GlobalReplicationGroupId = cmdletContext.GlobalReplicationGroupId;
}
if (cmdletContext.IpDiscovery != null)
{
request.IpDiscovery = cmdletContext.IpDiscovery;
}
if (cmdletContext.KmsKeyId != null)
{
request.KmsKeyId = cmdletContext.KmsKeyId;
}
if (cmdletContext.LogDeliveryConfiguration != null)
{
request.LogDeliveryConfigurations = cmdletContext.LogDeliveryConfiguration;
}
if (cmdletContext.MultiAZEnabled != null)
{
request.MultiAZEnabled = cmdletContext.MultiAZEnabled.Value;
}
if (cmdletContext.NetworkType != null)
{
request.NetworkType = cmdletContext.NetworkType;
}
if (cmdletContext.NodeGroupConfiguration != null)
{
request.NodeGroupConfiguration = cmdletContext.NodeGroupConfiguration;
}
if (cmdletContext.NotificationTopicArn != null)
{
request.NotificationTopicArn = cmdletContext.NotificationTopicArn;
}
if (cmdletContext.NumCacheCluster != null)
{
request.NumCacheClusters = cmdletContext.NumCacheCluster.Value;
}
if (cmdletContext.NumNodeGroup != null)
{
request.NumNodeGroups = cmdletContext.NumNodeGroup.Value;
}
if (cmdletContext.Port != null)
{
request.Port = cmdletContext.Port.Value;
}
if (cmdletContext.PreferredCacheClusterAZs != null)
{
request.PreferredCacheClusterAZs = cmdletContext.PreferredCacheClusterAZs;
}
if (cmdletContext.PreferredMaintenanceWindow != null)
{
request.PreferredMaintenanceWindow = cmdletContext.PreferredMaintenanceWindow;
}
if (cmdletContext.PrimaryClusterId != null)
{
request.PrimaryClusterId = cmdletContext.PrimaryClusterId;
}
if (cmdletContext.ReplicasPerNodeGroup != null)
{
request.ReplicasPerNodeGroup = cmdletContext.ReplicasPerNodeGroup.Value;
}
if (cmdletContext.ReplicationGroupDescription != null)
{
request.ReplicationGroupDescription = cmdletContext.ReplicationGroupDescription;
}
if (cmdletContext.ReplicationGroupId != null)
{
request.ReplicationGroupId = cmdletContext.ReplicationGroupId;
}
if (cmdletContext.SecurityGroupId != null)
{
request.SecurityGroupIds = cmdletContext.SecurityGroupId;
}
if (cmdletContext.SnapshotArn != null)
{
request.SnapshotArns = cmdletContext.SnapshotArn;
}
if (cmdletContext.SnapshotName != null)
{
request.SnapshotName = cmdletContext.SnapshotName;
}
if (cmdletContext.SnapshotRetentionLimit != null)
{
request.SnapshotRetentionLimit = cmdletContext.SnapshotRetentionLimit.Value;
}
if (cmdletContext.SnapshotWindow != null)
{
request.SnapshotWindow = cmdletContext.SnapshotWindow;
}
if (cmdletContext.Tag != null)
{
request.Tags = cmdletContext.Tag;
}
if (cmdletContext.TransitEncryptionEnabled != null)
{
request.TransitEncryptionEnabled = cmdletContext.TransitEncryptionEnabled.Value;
}
if (cmdletContext.TransitEncryptionMode != null)
{
request.TransitEncryptionMode = cmdletContext.TransitEncryptionMode;
}
if (cmdletContext.UserGroupId != null)
{
request.UserGroupIds = cmdletContext.UserGroupId;
}
CmdletOutput output;
// issue call
var client = Client ?? CreateClient(_CurrentCredentials, _RegionEndpoint);
try
{
var response = CallAWSServiceOperation(client, request);
object pipelineOutput = null;
pipelineOutput = cmdletContext.Select(response, this);
output = new CmdletOutput
{
PipelineOutput = pipelineOutput,
ServiceResponse = response
};
}
catch (Exception e)
{
output = new CmdletOutput { ErrorResponse = e };
}
return output;
}
public ExecutorContext CreateContext()
{
return new CmdletContext();
}
#endregion
#region AWS Service Operation Call
private Amazon.ElastiCache.Model.CreateReplicationGroupResponse CallAWSServiceOperation(IAmazonElastiCache client, Amazon.ElastiCache.Model.CreateReplicationGroupRequest request)
{
Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon ElastiCache", "CreateReplicationGroup");
try
{
#if DESKTOP
return client.CreateReplicationGroup(request);
#elif CORECLR
return client.CreateReplicationGroupAsync(request).GetAwaiter().GetResult();
#else
#error "Unknown build edition"
#endif
}
catch (AmazonServiceException exc)
{
var webException = exc.InnerException as System.Net.WebException;
if (webException != null)
{
throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException);
}
throw;
}
}
#endregion
internal partial class CmdletContext : ExecutorContext
{
public System.Boolean? AtRestEncryptionEnabled { get; set; }
public System.String AuthToken { get; set; }
public System.Boolean? AutomaticFailoverEnabled { get; set; }
public System.Boolean? AutoMinorVersionUpgrade { get; set; }
public System.String CacheNodeType { get; set; }
public System.String CacheParameterGroupName { get; set; }
public List CacheSecurityGroupName { get; set; }
public System.String CacheSubnetGroupName { get; set; }
public Amazon.ElastiCache.ClusterMode ClusterMode { get; set; }
public System.Boolean? DataTieringEnabled { get; set; }
public System.String Engine { get; set; }
public System.String EngineVersion { get; set; }
public System.String GlobalReplicationGroupId { get; set; }
public Amazon.ElastiCache.IpDiscovery IpDiscovery { get; set; }
public System.String KmsKeyId { get; set; }
public List LogDeliveryConfiguration { get; set; }
public System.Boolean? MultiAZEnabled { get; set; }
public Amazon.ElastiCache.NetworkType NetworkType { get; set; }
public List NodeGroupConfiguration { get; set; }
public System.String NotificationTopicArn { get; set; }
public System.Int32? NumCacheCluster { get; set; }
public System.Int32? NumNodeGroup { get; set; }
public System.Int32? Port { get; set; }
public List PreferredCacheClusterAZs { get; set; }
public System.String PreferredMaintenanceWindow { get; set; }
public System.String PrimaryClusterId { get; set; }
public System.Int32? ReplicasPerNodeGroup { get; set; }
public System.String ReplicationGroupDescription { get; set; }
public System.String ReplicationGroupId { get; set; }
public List SecurityGroupId { get; set; }
public List SnapshotArn { get; set; }
public System.String SnapshotName { get; set; }
public System.Int32? SnapshotRetentionLimit { get; set; }
public System.String SnapshotWindow { get; set; }
public List Tag { get; set; }
public System.Boolean? TransitEncryptionEnabled { get; set; }
public Amazon.ElastiCache.TransitEncryptionMode TransitEncryptionMode { get; set; }
public List UserGroupId { get; set; }
public System.Func Select { get; set; } =
(response, cmdlet) => response.ReplicationGroup;
}
}
}