amazonka-autoscaling-0.2.2: gen/Network/AWS/AutoScaling/CreateLaunchConfiguration.hs
{-# 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.AutoScaling.CreateLaunchConfiguration
-- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
-- 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 <brendan.g.hay@gmail.com>
-- Stability : experimental
-- Portability : non-portable (GHC extensions)
--
-- Derived from AWS service descriptions, licensed under Apache 2.0.
-- | Creates a launch configuration.
--
-- If you exceed your maximum limit of launch configurations, which by default
-- is 100 per region, the call fails. For information about viewing and updating
-- these limits, see 'DescribeAccountLimits'.
--
-- <http://docs.aws.amazon.com/AutoScaling/latest/APIReference/API_CreateLaunchConfiguration.html>
module Network.AWS.AutoScaling.CreateLaunchConfiguration
(
-- * Request
CreateLaunchConfiguration
-- ** Request constructor
, createLaunchConfiguration
-- ** Request lenses
, clcAssociatePublicIpAddress
, clcBlockDeviceMappings
, clcClassicLinkVPCId
, clcClassicLinkVPCSecurityGroups
, clcEbsOptimized
, clcIamInstanceProfile
, clcImageId
, clcInstanceId
, clcInstanceMonitoring
, clcInstanceType
, clcKernelId
, clcKeyName
, clcLaunchConfigurationName
, clcPlacementTenancy
, clcRamdiskId
, clcSecurityGroups
, clcSpotPrice
, clcUserData
-- * Response
, CreateLaunchConfigurationResponse
-- ** Response constructor
, createLaunchConfigurationResponse
) where
import Network.AWS.Prelude
import Network.AWS.Request.Query
import Network.AWS.AutoScaling.Types
import qualified GHC.Exts
data CreateLaunchConfiguration = CreateLaunchConfiguration
{ _clcAssociatePublicIpAddress :: Maybe Bool
, _clcBlockDeviceMappings :: List "member" BlockDeviceMapping
, _clcClassicLinkVPCId :: Maybe Text
, _clcClassicLinkVPCSecurityGroups :: List "member" Text
, _clcEbsOptimized :: Maybe Bool
, _clcIamInstanceProfile :: Maybe Text
, _clcImageId :: Maybe Text
, _clcInstanceId :: Maybe Text
, _clcInstanceMonitoring :: Maybe InstanceMonitoring
, _clcInstanceType :: Maybe Text
, _clcKernelId :: Maybe Text
, _clcKeyName :: Maybe Text
, _clcLaunchConfigurationName :: Text
, _clcPlacementTenancy :: Maybe Text
, _clcRamdiskId :: Maybe Text
, _clcSecurityGroups :: List "member" Text
, _clcSpotPrice :: Maybe Text
, _clcUserData :: Maybe Text
} deriving (Eq, Read, Show)
-- | 'CreateLaunchConfiguration' constructor.
--
-- The fields accessible through corresponding lenses are:
--
-- * 'clcAssociatePublicIpAddress' @::@ 'Maybe' 'Bool'
--
-- * 'clcBlockDeviceMappings' @::@ ['BlockDeviceMapping']
--
-- * 'clcClassicLinkVPCId' @::@ 'Maybe' 'Text'
--
-- * 'clcClassicLinkVPCSecurityGroups' @::@ ['Text']
--
-- * 'clcEbsOptimized' @::@ 'Maybe' 'Bool'
--
-- * 'clcIamInstanceProfile' @::@ 'Maybe' 'Text'
--
-- * 'clcImageId' @::@ 'Maybe' 'Text'
--
-- * 'clcInstanceId' @::@ 'Maybe' 'Text'
--
-- * 'clcInstanceMonitoring' @::@ 'Maybe' 'InstanceMonitoring'
--
-- * 'clcInstanceType' @::@ 'Maybe' 'Text'
--
-- * 'clcKernelId' @::@ 'Maybe' 'Text'
--
-- * 'clcKeyName' @::@ 'Maybe' 'Text'
--
-- * 'clcLaunchConfigurationName' @::@ 'Text'
--
-- * 'clcPlacementTenancy' @::@ 'Maybe' 'Text'
--
-- * 'clcRamdiskId' @::@ 'Maybe' 'Text'
--
-- * 'clcSecurityGroups' @::@ ['Text']
--
-- * 'clcSpotPrice' @::@ 'Maybe' 'Text'
--
-- * 'clcUserData' @::@ 'Maybe' 'Text'
--
createLaunchConfiguration :: Text -- ^ 'clcLaunchConfigurationName'
-> CreateLaunchConfiguration
createLaunchConfiguration p1 = CreateLaunchConfiguration
{ _clcLaunchConfigurationName = p1
, _clcImageId = Nothing
, _clcKeyName = Nothing
, _clcSecurityGroups = mempty
, _clcClassicLinkVPCId = Nothing
, _clcClassicLinkVPCSecurityGroups = mempty
, _clcUserData = Nothing
, _clcInstanceId = Nothing
, _clcInstanceType = Nothing
, _clcKernelId = Nothing
, _clcRamdiskId = Nothing
, _clcBlockDeviceMappings = mempty
, _clcInstanceMonitoring = Nothing
, _clcSpotPrice = Nothing
, _clcIamInstanceProfile = Nothing
, _clcEbsOptimized = Nothing
, _clcAssociatePublicIpAddress = Nothing
, _clcPlacementTenancy = Nothing
}
-- | Used for groups that launch instances into a virtual private cloud (VPC).
-- Specifies whether to assign a public IP address to each instance. For more
-- information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/autoscalingsubnets.html Auto Scaling and Amazon VPC> in the /Auto Scaling DeveloperGuide/.
--
-- If you specify a value for this parameter, be sure to specify at least one
-- subnet using the /VPCZoneIdentifier/ parameter when you create your group.
--
-- Default: If the instance is launched into a default subnet, the default is 'true'. If the instance is launched into a nondefault subnet, the default is 'false'.
-- For more information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide//as-supported-platforms.html Supported Platforms> in the /Amazon Elastic ComputeCloud User Guide/.
clcAssociatePublicIpAddress :: Lens' CreateLaunchConfiguration (Maybe Bool)
clcAssociatePublicIpAddress =
lens _clcAssociatePublicIpAddress
(\s a -> s { _clcAssociatePublicIpAddress = a })
-- | One or more mappings that specify how block devices are exposed to the
-- instance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html Block Device Mapping> in the /AmazonElastic Compute Cloud User Guide/.
clcBlockDeviceMappings :: Lens' CreateLaunchConfiguration [BlockDeviceMapping]
clcBlockDeviceMappings =
lens _clcBlockDeviceMappings (\s a -> s { _clcBlockDeviceMappings = a })
. _List
-- | The ID of a ClassicLink-enabled VPC to link your EC2-Classic instances to.
-- This parameter can only be used if you are launching EC2-Classic instances.
-- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink> in the /Amazon Elastic Compute CloudUser Guide/.
clcClassicLinkVPCId :: Lens' CreateLaunchConfiguration (Maybe Text)
clcClassicLinkVPCId =
lens _clcClassicLinkVPCId (\s a -> s { _clcClassicLinkVPCId = a })
-- | The IDs of one or more security groups for the VPC specified in 'ClassicLinkVPCId'. This parameter is required if 'ClassicLinkVPCId' is specified, and cannot be
-- used otherwise. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink> in the /Amazon ElasticCompute Cloud User Guide/.
clcClassicLinkVPCSecurityGroups :: Lens' CreateLaunchConfiguration [Text]
clcClassicLinkVPCSecurityGroups =
lens _clcClassicLinkVPCSecurityGroups
(\s a -> s { _clcClassicLinkVPCSecurityGroups = a })
. _List
-- | Indicates whether the instance is optimized for Amazon EBS I/O. By default,
-- the instance is not optimized for EBS I/O. The optimization provides
-- dedicated throughput to Amazon EBS and an optimized configuration stack to
-- provide optimal I/O performance. This optimization is not available with all
-- instance types. Additional usage charges apply. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html Amazon EBS-Optimized Instances> in the /Amazon Elastic Compute Cloud User Guide/.
clcEbsOptimized :: Lens' CreateLaunchConfiguration (Maybe Bool)
clcEbsOptimized = lens _clcEbsOptimized (\s a -> s { _clcEbsOptimized = a })
-- | The name or the Amazon Resource Name (ARN) of the instance profile associated
-- with the IAM role for the instance.
--
-- Amazon EC2 instances launched with an IAM role will automatically have AWS
-- security credentials available. You can use IAM roles with Auto Scaling to
-- automatically enable applications running on your Amazon EC2 instances to
-- securely access other AWS resources. For more information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/us-iam-role.html Launch AutoScaling Instances with an IAM Role> in the /Auto Scaling Developer Guide/.
clcIamInstanceProfile :: Lens' CreateLaunchConfiguration (Maybe Text)
clcIamInstanceProfile =
lens _clcIamInstanceProfile (\s a -> s { _clcIamInstanceProfile = a })
-- | The ID of the Amazon Machine Image (AMI) to use to launch your EC2 instances.
-- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html Finding an AMI> in the /Amazon Elastic Compute CloudUser Guide/.
clcImageId :: Lens' CreateLaunchConfiguration (Maybe Text)
clcImageId = lens _clcImageId (\s a -> s { _clcImageId = a })
-- | The ID of the EC2 instance to use to create the launch configuration.
--
-- The new launch configuration derives attributes from the instance, with the
-- exception of the block device mapping.
--
-- To create a launch configuration with a block device mapping or override any
-- other instance attributes, specify them as part of the same request.
--
-- For more information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/create-lc-with-instanceID.html Create a Launch Configuration Using an EC2 Instance>
-- in the /Auto Scaling Developer Guide/.
clcInstanceId :: Lens' CreateLaunchConfiguration (Maybe Text)
clcInstanceId = lens _clcInstanceId (\s a -> s { _clcInstanceId = a })
-- | Enables detailed monitoring if it is disabled. Detailed monitoring is enabled
-- by default.
--
-- When detailed monitoring is enabled, Amazon Cloudwatch generates metrics
-- every minute and your account is charged a fee. When you disable detailed
-- monitoring, by specifying 'False', Cloudwatch generates metrics every 5
-- minutes. For more information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-instance-monitoring.html Monitor Your Auto Scaling Instances> in the /Auto Scaling Developer Guide/.
clcInstanceMonitoring :: Lens' CreateLaunchConfiguration (Maybe InstanceMonitoring)
clcInstanceMonitoring =
lens _clcInstanceMonitoring (\s a -> s { _clcInstanceMonitoring = a })
-- | The instance type of the Amazon EC2 instance. For information about
-- available Amazon EC2 instance types, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes Available Instance Types> in the /Amazon Elastic Cloud Compute User Guide./
clcInstanceType :: Lens' CreateLaunchConfiguration (Maybe Text)
clcInstanceType = lens _clcInstanceType (\s a -> s { _clcInstanceType = a })
-- | The ID of the kernel associated with the Amazon EC2 AMI.
clcKernelId :: Lens' CreateLaunchConfiguration (Maybe Text)
clcKernelId = lens _clcKernelId (\s a -> s { _clcKernelId = a })
-- | The name of the key pair. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 Key Pairs> in
-- the /Amazon Elastic Compute Cloud User Guide/.
clcKeyName :: Lens' CreateLaunchConfiguration (Maybe Text)
clcKeyName = lens _clcKeyName (\s a -> s { _clcKeyName = a })
-- | The name of the launch configuration. This name must be unique within the
-- scope of your AWS account.
clcLaunchConfigurationName :: Lens' CreateLaunchConfiguration Text
clcLaunchConfigurationName =
lens _clcLaunchConfigurationName
(\s a -> s { _clcLaunchConfigurationName = a })
-- | The tenancy of the instance. An instance with a tenancy of 'dedicated' runs on
-- single-tenant hardware and can only be launched in a VPC.
--
-- You must set the value of this parameter to 'dedicated' if want to launch
-- Dedicated Instances in a shared tenancy VPC (VPC with instance placement
-- tenancy attribute set to 'default').
--
-- If you specify a value for this parameter, be sure to specify at least one
-- VPC subnet using the /VPCZoneIdentifier/ parameter when you create your group.
--
-- For more information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/autoscalingsubnets.html Auto Scaling and Amazon VPC> in the /Auto ScalingDeveloper Guide/.
--
-- Valid values: 'default' | 'dedicated'
clcPlacementTenancy :: Lens' CreateLaunchConfiguration (Maybe Text)
clcPlacementTenancy =
lens _clcPlacementTenancy (\s a -> s { _clcPlacementTenancy = a })
-- | The ID of the RAM disk associated with the Amazon EC2 AMI.
clcRamdiskId :: Lens' CreateLaunchConfiguration (Maybe Text)
clcRamdiskId = lens _clcRamdiskId (\s a -> s { _clcRamdiskId = a })
-- | One or more security groups with which to associate the instances.
--
-- If your instances are launched in EC2-Classic, you can either specify
-- security group names or the security group IDs. For more information about
-- security groups for EC2-Classic, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Amazon EC2 Security Groups> in the /AmazonElastic Compute Cloud User Guide/.
--
-- If your instances are launched in a VPC, specify security group IDs. For
-- more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security Groups for Your VPC> in the /Amazon VirtualPrivate Cloud User Guide/.
clcSecurityGroups :: Lens' CreateLaunchConfiguration [Text]
clcSecurityGroups =
lens _clcSecurityGroups (\s a -> s { _clcSecurityGroups = a })
. _List
-- | The maximum hourly price to be paid for any Spot Instance launched to fulfill
-- the request. Spot Instances are launched when the price you specify exceeds
-- the current Spot market price. For more information, see <http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/US-SpotInstances.html Launch SpotInstances in Your Auto Scaling Group> in the /Auto Scaling Developer Guide/.
clcSpotPrice :: Lens' CreateLaunchConfiguration (Maybe Text)
clcSpotPrice = lens _clcSpotPrice (\s a -> s { _clcSpotPrice = a })
-- | The user data to make available to the launched EC2 instances. For more
-- information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance Metadata and User Data> in the /Amazon ElasticCompute Cloud User Guide/.
--
-- At this time, launch configurations don't support compressed (zipped) user
-- data files.
clcUserData :: Lens' CreateLaunchConfiguration (Maybe Text)
clcUserData = lens _clcUserData (\s a -> s { _clcUserData = a })
data CreateLaunchConfigurationResponse = CreateLaunchConfigurationResponse
deriving (Eq, Ord, Read, Show, Generic)
-- | 'CreateLaunchConfigurationResponse' constructor.
createLaunchConfigurationResponse :: CreateLaunchConfigurationResponse
createLaunchConfigurationResponse = CreateLaunchConfigurationResponse
instance ToPath CreateLaunchConfiguration where
toPath = const "/"
instance ToQuery CreateLaunchConfiguration where
toQuery CreateLaunchConfiguration{..} = mconcat
[ "AssociatePublicIpAddress" =? _clcAssociatePublicIpAddress
, "BlockDeviceMappings" =? _clcBlockDeviceMappings
, "ClassicLinkVPCId" =? _clcClassicLinkVPCId
, "ClassicLinkVPCSecurityGroups" =? _clcClassicLinkVPCSecurityGroups
, "EbsOptimized" =? _clcEbsOptimized
, "IamInstanceProfile" =? _clcIamInstanceProfile
, "ImageId" =? _clcImageId
, "InstanceId" =? _clcInstanceId
, "InstanceMonitoring" =? _clcInstanceMonitoring
, "InstanceType" =? _clcInstanceType
, "KernelId" =? _clcKernelId
, "KeyName" =? _clcKeyName
, "LaunchConfigurationName" =? _clcLaunchConfigurationName
, "PlacementTenancy" =? _clcPlacementTenancy
, "RamdiskId" =? _clcRamdiskId
, "SecurityGroups" =? _clcSecurityGroups
, "SpotPrice" =? _clcSpotPrice
, "UserData" =? _clcUserData
]
instance ToHeaders CreateLaunchConfiguration
instance AWSRequest CreateLaunchConfiguration where
type Sv CreateLaunchConfiguration = AutoScaling
type Rs CreateLaunchConfiguration = CreateLaunchConfigurationResponse
request = post "CreateLaunchConfiguration"
response = nullResponse CreateLaunchConfigurationResponse