{-# 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.CreateCacheCluster -- 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 /CreateCacheCluster/ action creates a cache cluster. All nodes in -- the cache cluster run the same protocol-compliant cache engine software, -- either Memcached or Redis. -- -- /See:/ for CreateCacheCluster. module Network.AWS.ElastiCache.CreateCacheCluster ( -- * Creating a Request createCacheCluster , CreateCacheCluster -- * Request Lenses , cccEngineVersion , cccCacheNodeType , cccSecurityGroupIds , cccSnapshotARNs , cccAutoMinorVersionUpgrade , cccCacheParameterGroupName , cccSnapshotWindow , cccEngine , cccPreferredAvailabilityZones , cccPreferredMaintenanceWindow , cccCacheSubnetGroupName , cccPreferredAvailabilityZone , cccSnapshotRetentionLimit , cccAZMode , cccSnapshotName , cccReplicationGroupId , cccNotificationTopicARN , cccNumCacheNodes , cccTags , cccPort , cccCacheSecurityGroupNames , cccCacheClusterId -- * Destructuring the Response , createCacheClusterResponse , CreateCacheClusterResponse -- * Response Lenses , cccrsCacheCluster , cccrsResponseStatus ) 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 /CreateCacheCluster/ action. -- -- /See:/ 'createCacheCluster' smart constructor. data CreateCacheCluster = CreateCacheCluster' { _cccEngineVersion :: !(Maybe Text) , _cccCacheNodeType :: !(Maybe Text) , _cccSecurityGroupIds :: !(Maybe [Text]) , _cccSnapshotARNs :: !(Maybe [Text]) , _cccAutoMinorVersionUpgrade :: !(Maybe Bool) , _cccCacheParameterGroupName :: !(Maybe Text) , _cccSnapshotWindow :: !(Maybe Text) , _cccEngine :: !(Maybe Text) , _cccPreferredAvailabilityZones :: !(Maybe [Text]) , _cccPreferredMaintenanceWindow :: !(Maybe Text) , _cccCacheSubnetGroupName :: !(Maybe Text) , _cccPreferredAvailabilityZone :: !(Maybe Text) , _cccSnapshotRetentionLimit :: !(Maybe Int) , _cccAZMode :: !(Maybe AZMode) , _cccSnapshotName :: !(Maybe Text) , _cccReplicationGroupId :: !(Maybe Text) , _cccNotificationTopicARN :: !(Maybe Text) , _cccNumCacheNodes :: !(Maybe Int) , _cccTags :: !(Maybe [Tag]) , _cccPort :: !(Maybe Int) , _cccCacheSecurityGroupNames :: !(Maybe [Text]) , _cccCacheClusterId :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateCacheCluster' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cccEngineVersion' -- -- * 'cccCacheNodeType' -- -- * 'cccSecurityGroupIds' -- -- * 'cccSnapshotARNs' -- -- * 'cccAutoMinorVersionUpgrade' -- -- * 'cccCacheParameterGroupName' -- -- * 'cccSnapshotWindow' -- -- * 'cccEngine' -- -- * 'cccPreferredAvailabilityZones' -- -- * 'cccPreferredMaintenanceWindow' -- -- * 'cccCacheSubnetGroupName' -- -- * 'cccPreferredAvailabilityZone' -- -- * 'cccSnapshotRetentionLimit' -- -- * 'cccAZMode' -- -- * 'cccSnapshotName' -- -- * 'cccReplicationGroupId' -- -- * 'cccNotificationTopicARN' -- -- * 'cccNumCacheNodes' -- -- * 'cccTags' -- -- * 'cccPort' -- -- * 'cccCacheSecurityGroupNames' -- -- * 'cccCacheClusterId' createCacheCluster :: Text -- ^ 'cccCacheClusterId' -> CreateCacheCluster createCacheCluster pCacheClusterId_ = CreateCacheCluster' { _cccEngineVersion = Nothing , _cccCacheNodeType = Nothing , _cccSecurityGroupIds = Nothing , _cccSnapshotARNs = Nothing , _cccAutoMinorVersionUpgrade = Nothing , _cccCacheParameterGroupName = Nothing , _cccSnapshotWindow = Nothing , _cccEngine = Nothing , _cccPreferredAvailabilityZones = Nothing , _cccPreferredMaintenanceWindow = Nothing , _cccCacheSubnetGroupName = Nothing , _cccPreferredAvailabilityZone = Nothing , _cccSnapshotRetentionLimit = Nothing , _cccAZMode = Nothing , _cccSnapshotName = Nothing , _cccReplicationGroupId = Nothing , _cccNotificationTopicARN = Nothing , _cccNumCacheNodes = Nothing , _cccTags = Nothing , _cccPort = Nothing , _cccCacheSecurityGroupNames = Nothing , _cccCacheClusterId = pCacheClusterId_ } -- | The version number of the cache engine to be used for this cache -- cluster. To view the supported cache engine versions, use the -- /DescribeCacheEngineVersions/ action. cccEngineVersion :: Lens' CreateCacheCluster (Maybe Text) cccEngineVersion = lens _cccEngineVersion (\ s a -> s{_cccEngineVersion = 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 -- . cccCacheNodeType :: Lens' CreateCacheCluster (Maybe Text) cccCacheNodeType = lens _cccCacheNodeType (\ s a -> s{_cccCacheNodeType = a}); -- | One or more VPC security groups associated with the cache cluster. -- -- Use this parameter only when you are creating a cache cluster in an -- Amazon Virtual Private Cloud (VPC). cccSecurityGroupIds :: Lens' CreateCacheCluster [Text] cccSecurityGroupIds = lens _cccSecurityGroupIds (\ s a -> s{_cccSecurityGroupIds = 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' cccSnapshotARNs :: Lens' CreateCacheCluster [Text] cccSnapshotARNs = lens _cccSnapshotARNs (\ s a -> s{_cccSnapshotARNs = a}) . _Default . _Coerce; -- | This parameter is currently disabled. cccAutoMinorVersionUpgrade :: Lens' CreateCacheCluster (Maybe Bool) cccAutoMinorVersionUpgrade = lens _cccAutoMinorVersionUpgrade (\ s a -> s{_cccAutoMinorVersionUpgrade = a}); -- | The name of the parameter group to associate with this cache cluster. If -- this argument is omitted, the default parameter group for the specified -- engine is used. cccCacheParameterGroupName :: Lens' CreateCacheCluster (Maybe Text) cccCacheParameterGroupName = lens _cccCacheParameterGroupName (\ s a -> s{_cccCacheParameterGroupName = 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'. cccSnapshotWindow :: Lens' CreateCacheCluster (Maybe Text) cccSnapshotWindow = lens _cccSnapshotWindow (\ s a -> s{_cccSnapshotWindow = a}); -- | The name of the cache engine to be used for this cache cluster. -- -- Valid values for this parameter are: -- -- 'memcached' | 'redis' cccEngine :: Lens' CreateCacheCluster (Maybe Text) cccEngine = lens _cccEngine (\ s a -> s{_cccEngine = a}); -- | A list of the Availability Zones in which cache nodes will be created. -- The order of the zones in the list is not important. -- -- This option is only supported on Memcached. -- -- If you are creating your cache 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. -- -- Example: One Memcached node in each of three different Availability -- Zones: -- 'PreferredAvailabilityZones.member.1=us-west-2a&PreferredAvailabilityZones.member.2=us-west-2b&PreferredAvailabilityZones.member.3=us-west-2c' -- -- Example: All three Memcached nodes in one Availability Zone: -- 'PreferredAvailabilityZones.member.1=us-west-2a&PreferredAvailabilityZones.member.2=us-west-2a&PreferredAvailabilityZones.member.3=us-west-2a' cccPreferredAvailabilityZones :: Lens' CreateCacheCluster [Text] cccPreferredAvailabilityZones = lens _cccPreferredAvailabilityZones (\ s a -> s{_cccPreferredAvailabilityZones = a}) . _Default . _Coerce; -- | 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' cccPreferredMaintenanceWindow :: Lens' CreateCacheCluster (Maybe Text) cccPreferredMaintenanceWindow = lens _cccPreferredMaintenanceWindow (\ s a -> s{_cccPreferredMaintenanceWindow = a}); -- | The name of the subnet group to be used for the cache cluster. -- -- Use this parameter only when you are creating a cache cluster in an -- Amazon Virtual Private Cloud (VPC). cccCacheSubnetGroupName :: Lens' CreateCacheCluster (Maybe Text) cccCacheSubnetGroupName = lens _cccCacheSubnetGroupName (\ s a -> s{_cccCacheSubnetGroupName = a}); -- | The EC2 Availability Zone in which the cache cluster will be created. -- -- All nodes belonging to this Memcached cache 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. cccPreferredAvailabilityZone :: Lens' CreateCacheCluster (Maybe Text) cccPreferredAvailabilityZone = lens _cccPreferredAvailabilityZone (\ s a -> s{_cccPreferredAvailabilityZone = 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). cccSnapshotRetentionLimit :: Lens' CreateCacheCluster (Maybe Int) cccSnapshotRetentionLimit = lens _cccSnapshotRetentionLimit (\ s a -> s{_cccSnapshotRetentionLimit = a}); -- | Specifies whether the nodes in this Memcached node group 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 cache clusters. -- -- If the 'AZMode' and 'PreferredAvailabilityZones' are not specified, -- ElastiCache assumes 'single-az' mode. cccAZMode :: Lens' CreateCacheCluster (Maybe AZMode) cccAZMode = lens _cccAZMode (\ s a -> s{_cccAZMode = a}); -- | 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'. cccSnapshotName :: Lens' CreateCacheCluster (Maybe Text) cccSnapshotName = lens _cccSnapshotName (\ s a -> s{_cccSnapshotName = a}); -- | The ID of the replication group to which this cache cluster should -- belong. If this parameter is specified, the cache cluster will be added -- to the specified replication group as a read replica; otherwise, the -- cache cluster will be a standalone primary that is not part of any -- replication group. -- -- If the specified replication group is Multi-AZ enabled and the -- availability zone is not specified, the cache cluster will be created in -- availability zones that provide the best spread of read replicas across -- availability zones. -- -- __Note:__ This parameter is only valid if the 'Engine' parameter is -- 'redis'. cccReplicationGroupId :: Lens' CreateCacheCluster (Maybe Text) cccReplicationGroupId = lens _cccReplicationGroupId (\ s a -> s{_cccReplicationGroupId = 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. cccNotificationTopicARN :: Lens' CreateCacheCluster (Maybe Text) cccNotificationTopicARN = lens _cccNotificationTopicARN (\ s a -> s{_cccNotificationTopicARN = a}); -- | The initial number of cache nodes that the cache cluster will have. -- -- For clusters running Redis, this value must be 1. For clusters running -- Memcached, this value must be between 1 and 20. -- -- If you need more than 20 nodes for your Memcached cluster, please fill -- out the ElastiCache Limit Increase Request form at -- . cccNumCacheNodes :: Lens' CreateCacheCluster (Maybe Int) cccNumCacheNodes = lens _cccNumCacheNodes (\ s a -> s{_cccNumCacheNodes = 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. cccTags :: Lens' CreateCacheCluster [Tag] cccTags = lens _cccTags (\ s a -> s{_cccTags = a}) . _Default . _Coerce; -- | The port number on which each of the cache nodes will accept -- connections. cccPort :: Lens' CreateCacheCluster (Maybe Int) cccPort = lens _cccPort (\ s a -> s{_cccPort = a}); -- | A list of security group names to associate with this cache cluster. -- -- Use this parameter only when you are creating a cache cluster outside of -- an Amazon Virtual Private Cloud (VPC). cccCacheSecurityGroupNames :: Lens' CreateCacheCluster [Text] cccCacheSecurityGroupNames = lens _cccCacheSecurityGroupNames (\ s a -> s{_cccCacheSecurityGroupNames = a}) . _Default . _Coerce; -- | The node 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. cccCacheClusterId :: Lens' CreateCacheCluster Text cccCacheClusterId = lens _cccCacheClusterId (\ s a -> s{_cccCacheClusterId = a}); instance AWSRequest CreateCacheCluster where type Rs CreateCacheCluster = CreateCacheClusterResponse request = postQuery elastiCache response = receiveXMLWrapper "CreateCacheClusterResult" (\ s h x -> CreateCacheClusterResponse' <$> (x .@? "CacheCluster") <*> (pure (fromEnum s))) instance ToHeaders CreateCacheCluster where toHeaders = const mempty instance ToPath CreateCacheCluster where toPath = const "/" instance ToQuery CreateCacheCluster where toQuery CreateCacheCluster'{..} = mconcat ["Action" =: ("CreateCacheCluster" :: ByteString), "Version" =: ("2015-02-02" :: ByteString), "EngineVersion" =: _cccEngineVersion, "CacheNodeType" =: _cccCacheNodeType, "SecurityGroupIds" =: toQuery (toQueryList "SecurityGroupId" <$> _cccSecurityGroupIds), "SnapshotArns" =: toQuery (toQueryList "SnapshotArn" <$> _cccSnapshotARNs), "AutoMinorVersionUpgrade" =: _cccAutoMinorVersionUpgrade, "CacheParameterGroupName" =: _cccCacheParameterGroupName, "SnapshotWindow" =: _cccSnapshotWindow, "Engine" =: _cccEngine, "PreferredAvailabilityZones" =: toQuery (toQueryList "PreferredAvailabilityZone" <$> _cccPreferredAvailabilityZones), "PreferredMaintenanceWindow" =: _cccPreferredMaintenanceWindow, "CacheSubnetGroupName" =: _cccCacheSubnetGroupName, "PreferredAvailabilityZone" =: _cccPreferredAvailabilityZone, "SnapshotRetentionLimit" =: _cccSnapshotRetentionLimit, "AZMode" =: _cccAZMode, "SnapshotName" =: _cccSnapshotName, "ReplicationGroupId" =: _cccReplicationGroupId, "NotificationTopicArn" =: _cccNotificationTopicARN, "NumCacheNodes" =: _cccNumCacheNodes, "Tags" =: toQuery (toQueryList "Tag" <$> _cccTags), "Port" =: _cccPort, "CacheSecurityGroupNames" =: toQuery (toQueryList "CacheSecurityGroupName" <$> _cccCacheSecurityGroupNames), "CacheClusterId" =: _cccCacheClusterId] -- | /See:/ 'createCacheClusterResponse' smart constructor. data CreateCacheClusterResponse = CreateCacheClusterResponse' { _cccrsCacheCluster :: !(Maybe CacheCluster) , _cccrsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateCacheClusterResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cccrsCacheCluster' -- -- * 'cccrsResponseStatus' createCacheClusterResponse :: Int -- ^ 'cccrsResponseStatus' -> CreateCacheClusterResponse createCacheClusterResponse pResponseStatus_ = CreateCacheClusterResponse' { _cccrsCacheCluster = Nothing , _cccrsResponseStatus = pResponseStatus_ } -- | Undocumented member. cccrsCacheCluster :: Lens' CreateCacheClusterResponse (Maybe CacheCluster) cccrsCacheCluster = lens _cccrsCacheCluster (\ s a -> s{_cccrsCacheCluster = a}); -- | The response status code. cccrsResponseStatus :: Lens' CreateCacheClusterResponse Int cccrsResponseStatus = lens _cccrsResponseStatus (\ s a -> s{_cccrsResponseStatus = a});