{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} -- Module : Network.AWS.Redshift.CreateCluster -- Copyright : (c) 2013-2014 Brendan Hay -- License : This Source Code Form is subject to the terms of -- the Mozilla Public License, v. 2.0. -- A copy of the MPL can be found in the LICENSE file or -- you can obtain it at http://mozilla.org/MPL/2.0/. -- Maintainer : Brendan Hay -- Stability : experimental -- Portability : non-portable (GHC extensions) -- -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | Creates a new cluster. To create the cluster in virtual private cloud (VPC), -- you must provide cluster subnet group name. If you don't provide a cluster -- subnet group name or the cluster security group parameter, Amazon Redshift -- creates a non-VPC cluster, it associates the default cluster security group -- with the cluster. For more information about managing clusters, go to in the /Amazon Redshift Cluster Management Guide/ . -- -- module Network.AWS.Redshift.CreateCluster ( -- * Request CreateCluster -- ** Request constructor , createCluster -- ** Request lenses , ccAllowVersionUpgrade , ccAutomatedSnapshotRetentionPeriod , ccAvailabilityZone , ccClusterIdentifier , ccClusterParameterGroupName , ccClusterSecurityGroups , ccClusterSubnetGroupName , ccClusterType , ccClusterVersion , ccDBName , ccElasticIp , ccEncrypted , ccHsmClientCertificateIdentifier , ccHsmConfigurationIdentifier , ccKmsKeyId , ccMasterUserPassword , ccMasterUsername , ccNodeType , ccNumberOfNodes , ccPort , ccPreferredMaintenanceWindow , ccPubliclyAccessible , ccTags , ccVpcSecurityGroupIds -- * Response , CreateClusterResponse -- ** Response constructor , createClusterResponse -- ** Response lenses , ccrCluster ) where import Network.AWS.Prelude import Network.AWS.Request.Query import Network.AWS.Redshift.Types import qualified GHC.Exts data CreateCluster = CreateCluster { _ccAllowVersionUpgrade :: Maybe Bool , _ccAutomatedSnapshotRetentionPeriod :: Maybe Int , _ccAvailabilityZone :: Maybe Text , _ccClusterIdentifier :: Text , _ccClusterParameterGroupName :: Maybe Text , _ccClusterSecurityGroups :: List "member" Text , _ccClusterSubnetGroupName :: Maybe Text , _ccClusterType :: Maybe Text , _ccClusterVersion :: Maybe Text , _ccDBName :: Maybe Text , _ccElasticIp :: Maybe Text , _ccEncrypted :: Maybe Bool , _ccHsmClientCertificateIdentifier :: Maybe Text , _ccHsmConfigurationIdentifier :: Maybe Text , _ccKmsKeyId :: Maybe Text , _ccMasterUserPassword :: Text , _ccMasterUsername :: Text , _ccNodeType :: Text , _ccNumberOfNodes :: Maybe Int , _ccPort :: Maybe Int , _ccPreferredMaintenanceWindow :: Maybe Text , _ccPubliclyAccessible :: Maybe Bool , _ccTags :: List "member" Tag , _ccVpcSecurityGroupIds :: List "member" Text } deriving (Eq, Show) -- | 'CreateCluster' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'ccAllowVersionUpgrade' @::@ 'Maybe' 'Bool' -- -- * 'ccAutomatedSnapshotRetentionPeriod' @::@ 'Maybe' 'Int' -- -- * 'ccAvailabilityZone' @::@ 'Maybe' 'Text' -- -- * 'ccClusterIdentifier' @::@ 'Text' -- -- * 'ccClusterParameterGroupName' @::@ 'Maybe' 'Text' -- -- * 'ccClusterSecurityGroups' @::@ ['Text'] -- -- * 'ccClusterSubnetGroupName' @::@ 'Maybe' 'Text' -- -- * 'ccClusterType' @::@ 'Maybe' 'Text' -- -- * 'ccClusterVersion' @::@ 'Maybe' 'Text' -- -- * 'ccDBName' @::@ 'Maybe' 'Text' -- -- * 'ccElasticIp' @::@ 'Maybe' 'Text' -- -- * 'ccEncrypted' @::@ 'Maybe' 'Bool' -- -- * 'ccHsmClientCertificateIdentifier' @::@ 'Maybe' 'Text' -- -- * 'ccHsmConfigurationIdentifier' @::@ 'Maybe' 'Text' -- -- * 'ccKmsKeyId' @::@ 'Maybe' 'Text' -- -- * 'ccMasterUserPassword' @::@ 'Text' -- -- * 'ccMasterUsername' @::@ 'Text' -- -- * 'ccNodeType' @::@ 'Text' -- -- * 'ccNumberOfNodes' @::@ 'Maybe' 'Int' -- -- * 'ccPort' @::@ 'Maybe' 'Int' -- -- * 'ccPreferredMaintenanceWindow' @::@ 'Maybe' 'Text' -- -- * 'ccPubliclyAccessible' @::@ 'Maybe' 'Bool' -- -- * 'ccTags' @::@ ['Tag'] -- -- * 'ccVpcSecurityGroupIds' @::@ ['Text'] -- createCluster :: Text -- ^ 'ccClusterIdentifier' -> Text -- ^ 'ccNodeType' -> Text -- ^ 'ccMasterUsername' -> Text -- ^ 'ccMasterUserPassword' -> CreateCluster createCluster p1 p2 p3 p4 = CreateCluster { _ccClusterIdentifier = p1 , _ccNodeType = p2 , _ccMasterUsername = p3 , _ccMasterUserPassword = p4 , _ccDBName = Nothing , _ccClusterType = Nothing , _ccClusterSecurityGroups = mempty , _ccVpcSecurityGroupIds = mempty , _ccClusterSubnetGroupName = Nothing , _ccAvailabilityZone = Nothing , _ccPreferredMaintenanceWindow = Nothing , _ccClusterParameterGroupName = Nothing , _ccAutomatedSnapshotRetentionPeriod = Nothing , _ccPort = Nothing , _ccClusterVersion = Nothing , _ccAllowVersionUpgrade = Nothing , _ccNumberOfNodes = Nothing , _ccPubliclyAccessible = Nothing , _ccEncrypted = Nothing , _ccHsmClientCertificateIdentifier = Nothing , _ccHsmConfigurationIdentifier = Nothing , _ccElasticIp = Nothing , _ccTags = mempty , _ccKmsKeyId = Nothing } -- | If 'true', major version upgrades can be applied during the maintenance window -- to the Amazon Redshift engine that is running on the cluster. -- -- When a new major version of the Amazon Redshift engine is released, you can -- request that the service automatically apply upgrades during the maintenance -- window to the Amazon Redshift engine that is running on your cluster. -- -- Default: 'true' ccAllowVersionUpgrade :: Lens' CreateCluster (Maybe Bool) ccAllowVersionUpgrade = lens _ccAllowVersionUpgrade (\s a -> s { _ccAllowVersionUpgrade = a }) -- | The number of days that automated snapshots are retained. If the value is 0, -- automated snapshots are disabled. Even if automated snapshots are disabled, -- you can still create manual snapshots when you want with 'CreateClusterSnapshot' -- . -- -- Default: '1' -- -- Constraints: Must be a value from 0 to 35. ccAutomatedSnapshotRetentionPeriod :: Lens' CreateCluster (Maybe Int) ccAutomatedSnapshotRetentionPeriod = lens _ccAutomatedSnapshotRetentionPeriod (\s a -> s { _ccAutomatedSnapshotRetentionPeriod = a }) -- | The EC2 Availability Zone (AZ) in which you want Amazon Redshift to -- provision the cluster. For example, if you have several EC2 instances running -- in a specific Availability Zone, then you might want the cluster to be -- provisioned in the same zone in order to decrease network latency. -- -- Default: A random, system-chosen Availability Zone in the region that is -- specified by the endpoint. -- -- Example: 'us-east-1d' -- -- Constraint: The specified Availability Zone must be in the same region as -- the current endpoint. ccAvailabilityZone :: Lens' CreateCluster (Maybe Text) ccAvailabilityZone = lens _ccAvailabilityZone (\s a -> s { _ccAvailabilityZone = a }) -- | A unique identifier for the cluster. You use this identifier to refer to the -- cluster for any subsequent cluster operations such as deleting or modifying. -- The identifier also appears in the Amazon Redshift console. -- -- Constraints: -- -- Must contain from 1 to 63 alphanumeric characters or hyphens. Alphabetic -- characters must be lowercase. First character must be a letter. Cannot end -- with a hyphen or contain two consecutive hyphens. Must be unique for all -- clusters within an AWS account. Example: 'myexamplecluster' ccClusterIdentifier :: Lens' CreateCluster Text ccClusterIdentifier = lens _ccClusterIdentifier (\s a -> s { _ccClusterIdentifier = a }) -- | The name of the parameter group to be associated with this cluster. -- -- Default: The default Amazon Redshift cluster parameter group. For -- information about the default parameter group, go to -- -- Constraints: -- -- Must be 1 to 255 alphanumeric characters or hyphens. First character must -- be a letter. Cannot end with a hyphen or contain two consecutive hyphens. ccClusterParameterGroupName :: Lens' CreateCluster (Maybe Text) ccClusterParameterGroupName = lens _ccClusterParameterGroupName (\s a -> s { _ccClusterParameterGroupName = a }) -- | A list of security groups to be associated with this cluster. -- -- Default: The default cluster security group for Amazon Redshift. ccClusterSecurityGroups :: Lens' CreateCluster [Text] ccClusterSecurityGroups = lens _ccClusterSecurityGroups (\s a -> s { _ccClusterSecurityGroups = a }) . _List -- | The name of a cluster subnet group to be associated with this cluster. -- -- If this parameter is not provided the resulting cluster will be deployed -- outside virtual private cloud (VPC). ccClusterSubnetGroupName :: Lens' CreateCluster (Maybe Text) ccClusterSubnetGroupName = lens _ccClusterSubnetGroupName (\s a -> s { _ccClusterSubnetGroupName = a }) -- | The type of the cluster. When cluster type is specified as 'single-node', -- the NumberOfNodes parameter is not required. 'multi-node', the NumberOfNodes -- parameter is required. -- -- Valid Values: 'multi-node' | 'single-node' -- -- Default: 'multi-node' ccClusterType :: Lens' CreateCluster (Maybe Text) ccClusterType = lens _ccClusterType (\s a -> s { _ccClusterType = a }) -- | The version of the Amazon Redshift engine software that you want to deploy -- on the cluster. -- -- The version selected runs on all the nodes in the cluster. -- -- Constraints: Only version 1.0 is currently available. -- -- Example: '1.0' ccClusterVersion :: Lens' CreateCluster (Maybe Text) ccClusterVersion = lens _ccClusterVersion (\s a -> s { _ccClusterVersion = a }) -- | The name of the first database to be created when the cluster is created. -- -- To create additional databases after the cluster is created, connect to the -- cluster with a SQL client and use SQL commands to create a database. For more -- information, go to in the Amazon Redshift Database -- Developer Guide. -- -- Default: 'dev' -- -- Constraints: -- -- Must contain 1 to 64 alphanumeric characters. Must contain only lowercase -- letters. Cannot be a word that is reserved by the service. A list of reserved -- words can be found in in the Amazon Redshift Database -- Developer Guide. ccDBName :: Lens' CreateCluster (Maybe Text) ccDBName = lens _ccDBName (\s a -> s { _ccDBName = a }) -- | The Elastic IP (EIP) address for the cluster. -- -- Constraints: The cluster must be provisioned in EC2-VPC and -- publicly-accessible through an Internet gateway. For more information about -- provisioning clusters in EC2-VPC, go to in the Amazon Redshift Cluster Management Guide. ccElasticIp :: Lens' CreateCluster (Maybe Text) ccElasticIp = lens _ccElasticIp (\s a -> s { _ccElasticIp = a }) -- | If 'true', the data in the cluster is encrypted at rest. -- -- Default: false ccEncrypted :: Lens' CreateCluster (Maybe Bool) ccEncrypted = lens _ccEncrypted (\s a -> s { _ccEncrypted = a }) -- | Specifies the name of the HSM client certificate the Amazon Redshift cluster -- uses to retrieve the data encryption keys stored in an HSM. ccHsmClientCertificateIdentifier :: Lens' CreateCluster (Maybe Text) ccHsmClientCertificateIdentifier = lens _ccHsmClientCertificateIdentifier (\s a -> s { _ccHsmClientCertificateIdentifier = a }) -- | Specifies the name of the HSM configuration that contains the information the -- Amazon Redshift cluster can use to retrieve and store keys in an HSM. ccHsmConfigurationIdentifier :: Lens' CreateCluster (Maybe Text) ccHsmConfigurationIdentifier = lens _ccHsmConfigurationIdentifier (\s a -> s { _ccHsmConfigurationIdentifier = a }) -- | The AWS Key Management Service (KMS) key ID of the encryption key that you -- want to use to encrypt data in the cluster. ccKmsKeyId :: Lens' CreateCluster (Maybe Text) ccKmsKeyId = lens _ccKmsKeyId (\s a -> s { _ccKmsKeyId = a }) -- | The password associated with the master user account for the cluster that is -- being created. -- -- Constraints: -- -- Must be between 8 and 64 characters in length. Must contain at least one -- uppercase letter. Must contain at least one lowercase letter. Must contain -- one number. Can be any printable ASCII character (ASCII code 33 to 126) -- except ' (single quote), " (double quote), \, /, @, or space. ccMasterUserPassword :: Lens' CreateCluster Text ccMasterUserPassword = lens _ccMasterUserPassword (\s a -> s { _ccMasterUserPassword = a }) -- | The user name associated with the master user account for the cluster that -- is being created. -- -- Constraints: -- -- Must be 1 - 128 alphanumeric characters. First character must be a letter. Cannot be a reserved word. A list of reserved words can be found in -- in the Amazon Redshift Database Developer Guide. ccMasterUsername :: Lens' CreateCluster Text ccMasterUsername = lens _ccMasterUsername (\s a -> s { _ccMasterUsername = a }) -- | The node type to be provisioned for the cluster. For information about node -- types, go to in the /Amazon Redshift Cluster ManagementGuide/. -- -- Valid Values: 'dw1.xlarge' | 'dw1.8xlarge' | 'dw2.large' | 'dw2.8xlarge'. ccNodeType :: Lens' CreateCluster Text ccNodeType = lens _ccNodeType (\s a -> s { _ccNodeType = a }) -- | The number of compute nodes in the cluster. This parameter is required when -- the ClusterType parameter is specified as 'multi-node'. -- -- For information about determining how many nodes you need, go to in the /Amazon Redshift Cluster Management Guide/. -- -- If you don't specify this parameter, you get a single-node cluster. When -- requesting a multi-node cluster, you must specify the number of nodes that -- you want in the cluster. -- -- Default: '1' -- -- Constraints: Value must be at least 1 and no more than 100. ccNumberOfNodes :: Lens' CreateCluster (Maybe Int) ccNumberOfNodes = lens _ccNumberOfNodes (\s a -> s { _ccNumberOfNodes = a }) -- | The port number on which the cluster accepts incoming connections. -- -- The cluster is accessible only via the JDBC and ODBC connection strings. -- Part of the connection string requires the port on which the cluster will -- listen for incoming connections. -- -- Default: '5439' -- -- Valid Values: '1150-65535' ccPort :: Lens' CreateCluster (Maybe Int) ccPort = lens _ccPort (\s a -> s { _ccPort = a }) -- | The weekly time range (in UTC) during which automated cluster maintenance -- can occur. -- -- Format: 'ddd:hh24:mi-ddd:hh24:mi' -- -- Default: A 30-minute window selected at random from an 8-hour block of time -- per region, occurring on a random day of the week. For more information about -- the time blocks for each region, see in Amazon Redshift -- Cluster Management Guide. -- -- Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun -- -- Constraints: Minimum 30-minute window. ccPreferredMaintenanceWindow :: Lens' CreateCluster (Maybe Text) ccPreferredMaintenanceWindow = lens _ccPreferredMaintenanceWindow (\s a -> s { _ccPreferredMaintenanceWindow = a }) -- | If 'true', the cluster can be accessed from a public network. ccPubliclyAccessible :: Lens' CreateCluster (Maybe Bool) ccPubliclyAccessible = lens _ccPubliclyAccessible (\s a -> s { _ccPubliclyAccessible = a }) -- | A list of tag instances. ccTags :: Lens' CreateCluster [Tag] ccTags = lens _ccTags (\s a -> s { _ccTags = a }) . _List -- | A list of Virtual Private Cloud (VPC) security groups to be associated with -- the cluster. -- -- Default: The default VPC security group is associated with the cluster. ccVpcSecurityGroupIds :: Lens' CreateCluster [Text] ccVpcSecurityGroupIds = lens _ccVpcSecurityGroupIds (\s a -> s { _ccVpcSecurityGroupIds = a }) . _List newtype CreateClusterResponse = CreateClusterResponse { _ccrCluster :: Maybe Cluster } deriving (Eq, Show) -- | 'CreateClusterResponse' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'ccrCluster' @::@ 'Maybe' 'Cluster' -- createClusterResponse :: CreateClusterResponse createClusterResponse = CreateClusterResponse { _ccrCluster = Nothing } ccrCluster :: Lens' CreateClusterResponse (Maybe Cluster) ccrCluster = lens _ccrCluster (\s a -> s { _ccrCluster = a }) instance ToPath CreateCluster where toPath = const "/" instance ToQuery CreateCluster where toQuery CreateCluster{..} = mconcat [ "AllowVersionUpgrade" =? _ccAllowVersionUpgrade , "AutomatedSnapshotRetentionPeriod" =? _ccAutomatedSnapshotRetentionPeriod , "AvailabilityZone" =? _ccAvailabilityZone , "ClusterIdentifier" =? _ccClusterIdentifier , "ClusterParameterGroupName" =? _ccClusterParameterGroupName , "ClusterSecurityGroups" =? _ccClusterSecurityGroups , "ClusterSubnetGroupName" =? _ccClusterSubnetGroupName , "ClusterType" =? _ccClusterType , "ClusterVersion" =? _ccClusterVersion , "DBName" =? _ccDBName , "ElasticIp" =? _ccElasticIp , "Encrypted" =? _ccEncrypted , "HsmClientCertificateIdentifier" =? _ccHsmClientCertificateIdentifier , "HsmConfigurationIdentifier" =? _ccHsmConfigurationIdentifier , "KmsKeyId" =? _ccKmsKeyId , "MasterUserPassword" =? _ccMasterUserPassword , "MasterUsername" =? _ccMasterUsername , "NodeType" =? _ccNodeType , "NumberOfNodes" =? _ccNumberOfNodes , "Port" =? _ccPort , "PreferredMaintenanceWindow" =? _ccPreferredMaintenanceWindow , "PubliclyAccessible" =? _ccPubliclyAccessible , "Tags" =? _ccTags , "VpcSecurityGroupIds" =? _ccVpcSecurityGroupIds ] instance ToHeaders CreateCluster instance AWSRequest CreateCluster where type Sv CreateCluster = Redshift type Rs CreateCluster = CreateClusterResponse request = post "CreateCluster" response = xmlResponse instance FromXML CreateClusterResponse where parseXML = withElement "CreateClusterResult" $ \x -> CreateClusterResponse <$> x .@? "Cluster"