{-# 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.CreateAutoScalingGroup -- 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) -- | Creates an Auto Scaling group with the specified name and attributes. If -- you exceed your maximum limit of Auto Scaling groups, which by default is -- 20 per region, the call fails. For information about viewing and updating -- these limits, see DescribeAccountLimits. -- -- module Network.AWS.AutoScaling.CreateAutoScalingGroup ( -- * Request CreateAutoScalingGroup -- ** Request constructor , createAutoScalingGroup -- ** Request lenses , casgAutoScalingGroupName , casgAvailabilityZones , casgDefaultCooldown , casgDesiredCapacity , casgHealthCheckGracePeriod , casgHealthCheckType , casgInstanceId , casgLaunchConfigurationName , casgLoadBalancerNames , casgMaxSize , casgMinSize , casgPlacementGroup , casgTags , casgTerminationPolicies , casgVPCZoneIdentifier -- * Response , CreateAutoScalingGroupResponse -- ** Response constructor , createAutoScalingGroupResponse ) where import Network.AWS.Prelude import Network.AWS.Request.Query import Network.AWS.AutoScaling.Types import qualified GHC.Exts data CreateAutoScalingGroup = CreateAutoScalingGroup { _casgAutoScalingGroupName :: Text , _casgAvailabilityZones :: List1 "AvailabilityZones" Text , _casgDefaultCooldown :: Maybe Int , _casgDesiredCapacity :: Maybe Int , _casgHealthCheckGracePeriod :: Maybe Int , _casgHealthCheckType :: Maybe Text , _casgInstanceId :: Maybe Text , _casgLaunchConfigurationName :: Maybe Text , _casgLoadBalancerNames :: List "LoadBalancerNames" Text , _casgMaxSize :: Int , _casgMinSize :: Int , _casgPlacementGroup :: Maybe Text , _casgTags :: List "Tags" Tag , _casgTerminationPolicies :: List "TerminationPolicies" Text , _casgVPCZoneIdentifier :: Maybe Text } deriving (Eq, Show) -- | 'CreateAutoScalingGroup' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'casgAutoScalingGroupName' @::@ 'Text' -- -- * 'casgAvailabilityZones' @::@ 'NonEmpty' 'Text' -- -- * 'casgDefaultCooldown' @::@ 'Maybe' 'Int' -- -- * 'casgDesiredCapacity' @::@ 'Maybe' 'Int' -- -- * 'casgHealthCheckGracePeriod' @::@ 'Maybe' 'Int' -- -- * 'casgHealthCheckType' @::@ 'Maybe' 'Text' -- -- * 'casgInstanceId' @::@ 'Maybe' 'Text' -- -- * 'casgLaunchConfigurationName' @::@ 'Maybe' 'Text' -- -- * 'casgLoadBalancerNames' @::@ ['Text'] -- -- * 'casgMaxSize' @::@ 'Int' -- -- * 'casgMinSize' @::@ 'Int' -- -- * 'casgPlacementGroup' @::@ 'Maybe' 'Text' -- -- * 'casgTags' @::@ ['Tag'] -- -- * 'casgTerminationPolicies' @::@ ['Text'] -- -- * 'casgVPCZoneIdentifier' @::@ 'Maybe' 'Text' -- createAutoScalingGroup :: Text -- ^ 'casgAutoScalingGroupName' -> Int -- ^ 'casgMinSize' -> Int -- ^ 'casgMaxSize' -> NonEmpty Text -- ^ 'casgAvailabilityZones' -> CreateAutoScalingGroup createAutoScalingGroup p1 p2 p3 p4 = CreateAutoScalingGroup { _casgAutoScalingGroupName = p1 , _casgMinSize = p2 , _casgMaxSize = p3 , _casgAvailabilityZones = withIso _List1 (const id) p4 , _casgLaunchConfigurationName = Nothing , _casgInstanceId = Nothing , _casgDesiredCapacity = Nothing , _casgDefaultCooldown = Nothing , _casgLoadBalancerNames = mempty , _casgHealthCheckType = Nothing , _casgHealthCheckGracePeriod = Nothing , _casgPlacementGroup = Nothing , _casgVPCZoneIdentifier = Nothing , _casgTerminationPolicies = mempty , _casgTags = mempty } -- | The name of the group. This name must be unique within the scope of your -- AWS account. casgAutoScalingGroupName :: Lens' CreateAutoScalingGroup Text casgAutoScalingGroupName = lens _casgAutoScalingGroupName (\s a -> s { _casgAutoScalingGroupName = a }) -- | One or more Availability Zones for the group. This parameter is optional -- if you specify subnets using the VPCZoneIdentifier parameter. casgAvailabilityZones :: Lens' CreateAutoScalingGroup (NonEmpty Text) casgAvailabilityZones = lens _casgAvailabilityZones (\s a -> s { _casgAvailabilityZones = a }) . _List1 -- | The amount of time, in seconds, after a scaling activity completes before -- another scaling activity can start. If DefaultCooldown is not specified, -- the default value is 300. For more information, see Understanding Auto -- Scaling Cooldowns in the Auto Scaling Developer Guide. casgDefaultCooldown :: Lens' CreateAutoScalingGroup (Maybe Int) casgDefaultCooldown = lens _casgDefaultCooldown (\s a -> s { _casgDefaultCooldown = a }) -- | The number of EC2 instances that should be running in the group. This -- value must be greater than or equal to the minimum size of the group and -- less than or equal to the maximum size of the group. casgDesiredCapacity :: Lens' CreateAutoScalingGroup (Maybe Int) casgDesiredCapacity = lens _casgDesiredCapacity (\s a -> s { _casgDesiredCapacity = a }) -- | The amount of time, in seconds, after an EC2 instance comes into service -- that Auto Scaling starts checking its health. During this time, any -- health check failures for the instance are ignored. This parameter is -- required if you are adding an ELB health check. Frequently, new instances -- need to warm up, briefly, before they can pass a health check. To provide -- ample warm-up time, set the health check grace period of the group to -- match the expected startup period of your application. For more -- information, see Add an Elastic Load Balancing Health Check to Your Auto -- Scaling Group in the Auto Scaling Developer Guide. casgHealthCheckGracePeriod :: Lens' CreateAutoScalingGroup (Maybe Int) casgHealthCheckGracePeriod = lens _casgHealthCheckGracePeriod (\s a -> s { _casgHealthCheckGracePeriod = a }) -- | The service to use for the health checks. The valid values are EC2 and -- ELB. By default, health checks use Amazon EC2 instance status checks to -- determine the health of an instance. For more information, see Health -- Checks. casgHealthCheckType :: Lens' CreateAutoScalingGroup (Maybe Text) casgHealthCheckType = lens _casgHealthCheckType (\s a -> s { _casgHealthCheckType = a }) -- | The ID of the EC2 instance used to create a launch configuration for the -- group. Alternatively, use the LaunchConfigurationName parameter to -- specify a launch configuration instead of an EC2 instance. When you -- specify an ID of an instance, Auto Scaling creates a new launch -- configuration and associates it with the group. This launch configuration -- derives its attributes from the specified instance, with the exception of -- the block device mapping. For more information, see Create an Auto -- Scaling Group Using an EC2 Instance ID in the Auto Scaling Developer -- Guide. casgInstanceId :: Lens' CreateAutoScalingGroup (Maybe Text) casgInstanceId = lens _casgInstanceId (\s a -> s { _casgInstanceId = a }) -- | The name of the launch configuration. Alternatively, use the InstanceId -- parameter to specify an EC2 instance instead of a launch configuration. casgLaunchConfigurationName :: Lens' CreateAutoScalingGroup (Maybe Text) casgLaunchConfigurationName = lens _casgLaunchConfigurationName (\s a -> s { _casgLaunchConfigurationName = a }) -- | One or more load balancers. For more information, see Load Balance Your -- Auto Scaling Group in the Auto Scaling Developer Guide. casgLoadBalancerNames :: Lens' CreateAutoScalingGroup [Text] casgLoadBalancerNames = lens _casgLoadBalancerNames (\s a -> s { _casgLoadBalancerNames = a }) . _List -- | The maximum size of the group. casgMaxSize :: Lens' CreateAutoScalingGroup Int casgMaxSize = lens _casgMaxSize (\s a -> s { _casgMaxSize = a }) -- | The minimum size of the group. casgMinSize :: Lens' CreateAutoScalingGroup Int casgMinSize = lens _casgMinSize (\s a -> s { _casgMinSize = a }) -- | The name of the placement group into which you'll launch your instances, -- if any. For more information, see Placement Groups. casgPlacementGroup :: Lens' CreateAutoScalingGroup (Maybe Text) casgPlacementGroup = lens _casgPlacementGroup (\s a -> s { _casgPlacementGroup = a }) -- | The tag to be created or updated. Each tag should be defined by its -- resource type, resource ID, key, value, and a propagate flag. Valid -- values: key=value, value=value, propagate=true or false. Value and -- propagate are optional parameters. For more information, see Add, Modify, -- or Remove Auto Scaling Group Tags in the Auto Scaling Developer Guide. casgTags :: Lens' CreateAutoScalingGroup [Tag] casgTags = lens _casgTags (\s a -> s { _casgTags = a }) . _List -- | One or more termination policies used to select the instance to -- terminate. These policies are executed in the order that they are listed. -- For more information, see Choosing a Termination Policy for Your Auto -- Scaling Group in the Auto Scaling Developer Guide. casgTerminationPolicies :: Lens' CreateAutoScalingGroup [Text] casgTerminationPolicies = lens _casgTerminationPolicies (\s a -> s { _casgTerminationPolicies = a }) . _List -- | A comma-separated list of subnet identifiers for your virtual private -- cloud (VPC). If you specify subnets and Availability Zones with this -- call, ensure that the subnets' Availability Zones match the Availability -- Zones specified. For more information, see Auto Scaling and Amazon VPC in -- the Auto Scaling Developer Guide. casgVPCZoneIdentifier :: Lens' CreateAutoScalingGroup (Maybe Text) casgVPCZoneIdentifier = lens _casgVPCZoneIdentifier (\s a -> s { _casgVPCZoneIdentifier = a }) data CreateAutoScalingGroupResponse = CreateAutoScalingGroupResponse deriving (Eq, Ord, Show, Generic) -- | 'CreateAutoScalingGroupResponse' constructor. createAutoScalingGroupResponse :: CreateAutoScalingGroupResponse createAutoScalingGroupResponse = CreateAutoScalingGroupResponse instance ToPath CreateAutoScalingGroup where toPath = const "/" instance ToQuery CreateAutoScalingGroup where toQuery CreateAutoScalingGroup{..} = mconcat [ "AutoScalingGroupName" =? _casgAutoScalingGroupName , "AvailabilityZones" =? _casgAvailabilityZones , "DefaultCooldown" =? _casgDefaultCooldown , "DesiredCapacity" =? _casgDesiredCapacity , "HealthCheckGracePeriod" =? _casgHealthCheckGracePeriod , "HealthCheckType" =? _casgHealthCheckType , "InstanceId" =? _casgInstanceId , "LaunchConfigurationName" =? _casgLaunchConfigurationName , "LoadBalancerNames" =? _casgLoadBalancerNames , "MaxSize" =? _casgMaxSize , "MinSize" =? _casgMinSize , "PlacementGroup" =? _casgPlacementGroup , "Tags" =? _casgTags , "TerminationPolicies" =? _casgTerminationPolicies , "VPCZoneIdentifier" =? _casgVPCZoneIdentifier ] instance ToHeaders CreateAutoScalingGroup instance AWSRequest CreateAutoScalingGroup where type Sv CreateAutoScalingGroup = AutoScaling type Rs CreateAutoScalingGroup = CreateAutoScalingGroupResponse request = post "CreateAutoScalingGroup" response = nullResponse CreateAutoScalingGroupResponse