{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.ElastiCache.CreateReplicationGroup -- Copyright : (c) 2013-2015 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- The /CreateReplicationGroup/ action creates a replication group. A -- replication group is a collection of cache clusters, where one of the -- cache clusters is a read\/write primary and the others are read-only -- replicas. Writes to the primary are automatically propagated to the -- replicas. -- -- When you create a replication group, you must specify an existing cache -- cluster that is in the primary role. When the replication group has been -- successfully created, you can add one or more read replica replicas to -- it, up to a total of five read replicas. -- -- __Note:__ This action is valid only for Redis. -- -- /See:/ for CreateReplicationGroup. module Network.AWS.ElastiCache.CreateReplicationGroup ( -- * Creating a Request createReplicationGroup , CreateReplicationGroup -- * Request Lenses , crgAutomaticFailoverEnabled , crgEngineVersion , crgCacheNodeType , crgSecurityGroupIds , crgSnapshotARNs , crgAutoMinorVersionUpgrade , crgCacheParameterGroupName , crgSnapshotWindow , crgPrimaryClusterId , crgEngine , crgPreferredMaintenanceWindow , crgCacheSubnetGroupName , crgSnapshotRetentionLimit , crgNumCacheClusters , crgPreferredCacheClusterAZs , crgSnapshotName , crgNotificationTopicARN , crgTags , crgPort , crgCacheSecurityGroupNames , crgReplicationGroupId , crgReplicationGroupDescription -- * Destructuring the Response , createReplicationGroupResponse , CreateReplicationGroupResponse -- * Response Lenses , crgrsReplicationGroup , crgrsResponseStatus ) where import Network.AWS.ElastiCache.Types import Network.AWS.ElastiCache.Types.Product import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response -- | Represents the input of a /CreateReplicationGroup/ action. -- -- /See:/ 'createReplicationGroup' smart constructor. data CreateReplicationGroup = CreateReplicationGroup' { _crgAutomaticFailoverEnabled :: !(Maybe Bool) , _crgEngineVersion :: !(Maybe Text) , _crgCacheNodeType :: !(Maybe Text) , _crgSecurityGroupIds :: !(Maybe [Text]) , _crgSnapshotARNs :: !(Maybe [Text]) , _crgAutoMinorVersionUpgrade :: !(Maybe Bool) , _crgCacheParameterGroupName :: !(Maybe Text) , _crgSnapshotWindow :: !(Maybe Text) , _crgPrimaryClusterId :: !(Maybe Text) , _crgEngine :: !(Maybe Text) , _crgPreferredMaintenanceWindow :: !(Maybe Text) , _crgCacheSubnetGroupName :: !(Maybe Text) , _crgSnapshotRetentionLimit :: !(Maybe Int) , _crgNumCacheClusters :: !(Maybe Int) , _crgPreferredCacheClusterAZs :: !(Maybe [Text]) , _crgSnapshotName :: !(Maybe Text) , _crgNotificationTopicARN :: !(Maybe Text) , _crgTags :: !(Maybe [Tag]) , _crgPort :: !(Maybe Int) , _crgCacheSecurityGroupNames :: !(Maybe [Text]) , _crgReplicationGroupId :: !Text , _crgReplicationGroupDescription :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateReplicationGroup' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'crgAutomaticFailoverEnabled' -- -- * 'crgEngineVersion' -- -- * 'crgCacheNodeType' -- -- * 'crgSecurityGroupIds' -- -- * 'crgSnapshotARNs' -- -- * 'crgAutoMinorVersionUpgrade' -- -- * 'crgCacheParameterGroupName' -- -- * 'crgSnapshotWindow' -- -- * 'crgPrimaryClusterId' -- -- * 'crgEngine' -- -- * 'crgPreferredMaintenanceWindow' -- -- * 'crgCacheSubnetGroupName' -- -- * 'crgSnapshotRetentionLimit' -- -- * 'crgNumCacheClusters' -- -- * 'crgPreferredCacheClusterAZs' -- -- * 'crgSnapshotName' -- -- * 'crgNotificationTopicARN' -- -- * 'crgTags' -- -- * 'crgPort' -- -- * 'crgCacheSecurityGroupNames' -- -- * 'crgReplicationGroupId' -- -- * 'crgReplicationGroupDescription' createReplicationGroup :: Text -- ^ 'crgReplicationGroupId' -> Text -- ^ 'crgReplicationGroupDescription' -> CreateReplicationGroup createReplicationGroup pReplicationGroupId_ pReplicationGroupDescription_ = CreateReplicationGroup' { _crgAutomaticFailoverEnabled = Nothing , _crgEngineVersion = Nothing , _crgCacheNodeType = Nothing , _crgSecurityGroupIds = Nothing , _crgSnapshotARNs = Nothing , _crgAutoMinorVersionUpgrade = Nothing , _crgCacheParameterGroupName = Nothing , _crgSnapshotWindow = Nothing , _crgPrimaryClusterId = Nothing , _crgEngine = Nothing , _crgPreferredMaintenanceWindow = Nothing , _crgCacheSubnetGroupName = Nothing , _crgSnapshotRetentionLimit = Nothing , _crgNumCacheClusters = Nothing , _crgPreferredCacheClusterAZs = Nothing , _crgSnapshotName = Nothing , _crgNotificationTopicARN = Nothing , _crgTags = Nothing , _crgPort = Nothing , _crgCacheSecurityGroupNames = Nothing , _crgReplicationGroupId = pReplicationGroupId_ , _crgReplicationGroupDescription = pReplicationGroupDescription_ } -- | Specifies whether a read-only replica will be automatically promoted to -- read\/write primary if the existing primary fails. -- -- If 'true', Multi-AZ is enabled for this replication group. If 'false', -- Multi-AZ is disabled for this replication group. -- -- Default: false -- -- ElastiCache Multi-AZ replication groups is not supported on: -- -- - Redis versions earlier than 2.8.6. -- - T1 and T2 cache node types. crgAutomaticFailoverEnabled :: Lens' CreateReplicationGroup (Maybe Bool) crgAutomaticFailoverEnabled = lens _crgAutomaticFailoverEnabled (\ s a -> s{_crgAutomaticFailoverEnabled = a}); -- | The version number of the cache engine to be used for the cache clusters -- in this replication group. To view the supported cache engine versions, -- use the /DescribeCacheEngineVersions/ action. crgEngineVersion :: Lens' CreateReplicationGroup (Maybe Text) crgEngineVersion = lens _crgEngineVersion (\ s a -> s{_crgEngineVersion = a}); -- | The compute and memory capacity of the nodes in the node group. -- -- Valid node types are as follows: -- -- - General purpose: -- - Current generation: 'cache.t2.micro', 'cache.t2.small', -- 'cache.t2.medium', 'cache.m3.medium', 'cache.m3.large', -- 'cache.m3.xlarge', 'cache.m3.2xlarge' -- - Previous generation: 'cache.t1.micro', 'cache.m1.small', -- 'cache.m1.medium', 'cache.m1.large', 'cache.m1.xlarge' -- - Compute optimized: 'cache.c1.xlarge' -- - Memory optimized -- - Current generation: 'cache.r3.large', 'cache.r3.xlarge', -- 'cache.r3.2xlarge', 'cache.r3.4xlarge', 'cache.r3.8xlarge' -- - Previous generation: 'cache.m2.xlarge', 'cache.m2.2xlarge', -- 'cache.m2.4xlarge' -- -- __Notes:__ -- -- - All t2 instances are created in an Amazon Virtual Private Cloud -- (VPC). -- - Redis backup\/restore is not supported for t2 instances. -- - Redis Append-only files (AOF) functionality is not supported for t1 -- or t2 instances. -- -- For a complete listing of cache node types and specifications, see -- -- and -- -- or -- . crgCacheNodeType :: Lens' CreateReplicationGroup (Maybe Text) crgCacheNodeType = lens _crgCacheNodeType (\ s a -> s{_crgCacheNodeType = a}); -- | 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 (VPC). crgSecurityGroupIds :: Lens' CreateReplicationGroup [Text] crgSecurityGroupIds = lens _crgSecurityGroupIds (\ s a -> s{_crgSecurityGroupIds = a}) . _Default . _Coerce; -- | A single-element string list containing an Amazon Resource Name (ARN) -- that uniquely identifies a Redis RDB snapshot file stored in Amazon S3. -- The snapshot file will be used to populate the node group. The Amazon S3 -- object name in the ARN cannot contain any commas. -- -- __Note:__ This parameter is only valid if the 'Engine' parameter is -- 'redis'. -- -- Example of an Amazon S3 ARN: 'arn:aws:s3:::my_bucket\/snapshot1.rdb' crgSnapshotARNs :: Lens' CreateReplicationGroup [Text] crgSnapshotARNs = lens _crgSnapshotARNs (\ s a -> s{_crgSnapshotARNs = a}) . _Default . _Coerce; -- | This parameter is currently disabled. crgAutoMinorVersionUpgrade :: Lens' CreateReplicationGroup (Maybe Bool) crgAutoMinorVersionUpgrade = lens _crgAutoMinorVersionUpgrade (\ s a -> s{_crgAutoMinorVersionUpgrade = a}); -- | 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. crgCacheParameterGroupName :: Lens' CreateReplicationGroup (Maybe Text) crgCacheParameterGroupName = lens _crgCacheParameterGroupName (\ s a -> s{_crgCacheParameterGroupName = a}); -- | The daily time range (in UTC) during which ElastiCache will begin taking -- a daily snapshot of your node group. -- -- Example: '05:00-09:00' -- -- If you do not specify this parameter, then ElastiCache will -- automatically choose an appropriate time range. -- -- __Note:__ This parameter is only valid if the 'Engine' parameter is -- 'redis'. crgSnapshotWindow :: Lens' CreateReplicationGroup (Maybe Text) crgSnapshotWindow = lens _crgSnapshotWindow (\ s a -> s{_crgSnapshotWindow = a}); -- | The identifier of the cache cluster that will serve as the primary for -- this replication group. This cache cluster must already exist and have a -- status of /available/. -- -- This parameter is not required if /NumCacheClusters/ is specified. crgPrimaryClusterId :: Lens' CreateReplicationGroup (Maybe Text) crgPrimaryClusterId = lens _crgPrimaryClusterId (\ s a -> s{_crgPrimaryClusterId = a}); -- | The name of the cache engine to be used for the cache clusters in this -- replication group. -- -- Default: redis crgEngine :: Lens' CreateReplicationGroup (Maybe Text) crgEngine = lens _crgEngine (\ s a -> s{_crgEngine = a}); -- | Specifies the weekly time range during which maintenance on the cache -- 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:05:00-sun:09:00' crgPreferredMaintenanceWindow :: Lens' CreateReplicationGroup (Maybe Text) crgPreferredMaintenanceWindow = lens _crgPreferredMaintenanceWindow (\ s a -> s{_crgPreferredMaintenanceWindow = a}); -- | The name of the cache subnet group to be used for the replication group. crgCacheSubnetGroupName :: Lens' CreateReplicationGroup (Maybe Text) crgCacheSubnetGroupName = lens _crgCacheSubnetGroupName (\ s a -> s{_crgCacheSubnetGroupName = a}); -- | The number of days for which ElastiCache will retain automatic snapshots -- before deleting them. For example, if you set 'SnapshotRetentionLimit' -- to 5, then a snapshot that was taken today will be retained for 5 days -- before being deleted. -- -- __Note:__ This parameter is only valid if the 'Engine' parameter is -- 'redis'. -- -- Default: 0 (i.e., automatic backups are disabled for this cache -- cluster). crgSnapshotRetentionLimit :: Lens' CreateReplicationGroup (Maybe Int) crgSnapshotRetentionLimit = lens _crgSnapshotRetentionLimit (\ s a -> s{_crgSnapshotRetentionLimit = a}); -- | The number of cache clusters this replication group will initially have. -- -- If /Multi-AZ/ is 'enabled', the value of this parameter must be at least -- 2. -- -- The maximum permitted value for /NumCacheClusters/ is 6 (primary plus 5 -- replicas). If you need to exceed this limit, please fill out the -- ElastiCache Limit Increase Request form at -- . crgNumCacheClusters :: Lens' CreateReplicationGroup (Maybe Int) crgNumCacheClusters = lens _crgNumCacheClusters (\ s a -> s{_crgNumCacheClusters = a}); -- | A list of EC2 availability zones in which the replication group\'s cache -- clusters will be created. The order of the availability zones in the -- list is not important. -- -- If you are creating your replication group in an Amazon VPC -- (recommended), you can only locate cache 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. -- -- Example: One Redis cache cluster in each of three availability zones. -- PreferredAvailabilityZones.member.1=us-west-2a -- PreferredAvailabilityZones.member.2=us-west-2c -- PreferredAvailabilityZones.member.3=us-west-2c crgPreferredCacheClusterAZs :: Lens' CreateReplicationGroup [Text] crgPreferredCacheClusterAZs = lens _crgPreferredCacheClusterAZs (\ s a -> s{_crgPreferredCacheClusterAZs = a}) . _Default . _Coerce; -- | The name of a snapshot from which to restore data into the new node -- group. The snapshot status changes to 'restoring' while the new node -- group is being created. -- -- __Note:__ This parameter is only valid if the 'Engine' parameter is -- 'redis'. crgSnapshotName :: Lens' CreateReplicationGroup (Maybe Text) crgSnapshotName = lens _crgSnapshotName (\ s a -> s{_crgSnapshotName = a}); -- | The Amazon Resource Name (ARN) of the Amazon Simple Notification Service -- (SNS) topic to which notifications will be sent. -- -- The Amazon SNS topic owner must be the same as the cache cluster owner. crgNotificationTopicARN :: Lens' CreateReplicationGroup (Maybe Text) crgNotificationTopicARN = lens _crgNotificationTopicARN (\ s a -> s{_crgNotificationTopicARN = a}); -- | A list of cost allocation tags to be added to this resource. A tag is a -- key-value pair. A tag key must be accompanied by a tag value. crgTags :: Lens' CreateReplicationGroup [Tag] crgTags = lens _crgTags (\ s a -> s{_crgTags = a}) . _Default . _Coerce; -- | The port number on which each member of the replication group will -- accept connections. crgPort :: Lens' CreateReplicationGroup (Maybe Int) crgPort = lens _crgPort (\ s a -> s{_crgPort = a}); -- | A list of cache security group names to associate with this replication -- group. crgCacheSecurityGroupNames :: Lens' CreateReplicationGroup [Text] crgCacheSecurityGroupNames = lens _crgCacheSecurityGroupNames (\ s a -> s{_crgCacheSecurityGroupNames = a}) . _Default . _Coerce; -- | The replication group identifier. This parameter is stored as a -- lowercase string. -- -- Constraints: -- -- - A name must contain from 1 to 20 alphanumeric characters or hyphens. -- - The first character must be a letter. -- - A name cannot end with a hyphen or contain two consecutive hyphens. crgReplicationGroupId :: Lens' CreateReplicationGroup Text crgReplicationGroupId = lens _crgReplicationGroupId (\ s a -> s{_crgReplicationGroupId = a}); -- | A user-created description for the replication group. crgReplicationGroupDescription :: Lens' CreateReplicationGroup Text crgReplicationGroupDescription = lens _crgReplicationGroupDescription (\ s a -> s{_crgReplicationGroupDescription = a}); instance AWSRequest CreateReplicationGroup where type Rs CreateReplicationGroup = CreateReplicationGroupResponse request = postQuery elastiCache response = receiveXMLWrapper "CreateReplicationGroupResult" (\ s h x -> CreateReplicationGroupResponse' <$> (x .@? "ReplicationGroup") <*> (pure (fromEnum s))) instance ToHeaders CreateReplicationGroup where toHeaders = const mempty instance ToPath CreateReplicationGroup where toPath = const "/" instance ToQuery CreateReplicationGroup where toQuery CreateReplicationGroup'{..} = mconcat ["Action" =: ("CreateReplicationGroup" :: ByteString), "Version" =: ("2015-02-02" :: ByteString), "AutomaticFailoverEnabled" =: _crgAutomaticFailoverEnabled, "EngineVersion" =: _crgEngineVersion, "CacheNodeType" =: _crgCacheNodeType, "SecurityGroupIds" =: toQuery (toQueryList "SecurityGroupId" <$> _crgSecurityGroupIds), "SnapshotArns" =: toQuery (toQueryList "SnapshotArn" <$> _crgSnapshotARNs), "AutoMinorVersionUpgrade" =: _crgAutoMinorVersionUpgrade, "CacheParameterGroupName" =: _crgCacheParameterGroupName, "SnapshotWindow" =: _crgSnapshotWindow, "PrimaryClusterId" =: _crgPrimaryClusterId, "Engine" =: _crgEngine, "PreferredMaintenanceWindow" =: _crgPreferredMaintenanceWindow, "CacheSubnetGroupName" =: _crgCacheSubnetGroupName, "SnapshotRetentionLimit" =: _crgSnapshotRetentionLimit, "NumCacheClusters" =: _crgNumCacheClusters, "PreferredCacheClusterAZs" =: toQuery (toQueryList "AvailabilityZone" <$> _crgPreferredCacheClusterAZs), "SnapshotName" =: _crgSnapshotName, "NotificationTopicArn" =: _crgNotificationTopicARN, "Tags" =: toQuery (toQueryList "Tag" <$> _crgTags), "Port" =: _crgPort, "CacheSecurityGroupNames" =: toQuery (toQueryList "CacheSecurityGroupName" <$> _crgCacheSecurityGroupNames), "ReplicationGroupId" =: _crgReplicationGroupId, "ReplicationGroupDescription" =: _crgReplicationGroupDescription] -- | /See:/ 'createReplicationGroupResponse' smart constructor. data CreateReplicationGroupResponse = CreateReplicationGroupResponse' { _crgrsReplicationGroup :: !(Maybe ReplicationGroup) , _crgrsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateReplicationGroupResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'crgrsReplicationGroup' -- -- * 'crgrsResponseStatus' createReplicationGroupResponse :: Int -- ^ 'crgrsResponseStatus' -> CreateReplicationGroupResponse createReplicationGroupResponse pResponseStatus_ = CreateReplicationGroupResponse' { _crgrsReplicationGroup = Nothing , _crgrsResponseStatus = pResponseStatus_ } -- | Undocumented member. crgrsReplicationGroup :: Lens' CreateReplicationGroupResponse (Maybe ReplicationGroup) crgrsReplicationGroup = lens _crgrsReplicationGroup (\ s a -> s{_crgrsReplicationGroup = a}); -- | The response status code. crgrsResponseStatus :: Lens' CreateReplicationGroupResponse Int crgrsResponseStatus = lens _crgrsResponseStatus (\ s a -> s{_crgrsResponseStatus = a});