{-# 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.UpdateAutoScalingGroup -- 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) -- | Updates the configuration for the specified AutoScalingGroup. To update an -- Auto Scaling group with a launch configuration that has the -- InstanceMonitoring flag set to False, you must first ensure that collection -- of group metrics is disabled. Otherwise, calls to UpdateAutoScalingGroup -- will fail. If you have previously enabled group metrics collection, you can -- disable collection of all group metrics by calling -- DisableMetricsCollection. The new settings are registered upon the -- completion of this call. Any launch configuration settings take effect on -- any triggers after this call returns. Scaling activities that are currently -- in progress aren't affected. If a new value is specified for MinSize -- without specifying the value for DesiredCapacity, and if the new MinSize is -- larger than the current size of the Auto Scaling group, there will be an -- implicit call to SetDesiredCapacity to set the group to the new MinSize. If -- a new value is specified for MaxSize without specifying the value for -- DesiredCapacity, and the new MaxSize is smaller than the current size of -- the Auto Scaling group, there will be an implicit call to -- SetDesiredCapacity to set the group to the new MaxSize. All other optional -- parameters are left unchanged if not passed in the request. -- -- module Network.AWS.AutoScaling.UpdateAutoScalingGroup ( -- * Request UpdateAutoScalingGroup -- ** Request constructor , updateAutoScalingGroup -- ** Request lenses , uasgAutoScalingGroupName , uasgAvailabilityZones , uasgDefaultCooldown , uasgDesiredCapacity , uasgHealthCheckGracePeriod , uasgHealthCheckType , uasgLaunchConfigurationName , uasgMaxSize , uasgMinSize , uasgPlacementGroup , uasgTerminationPolicies , uasgVPCZoneIdentifier -- * Response , UpdateAutoScalingGroupResponse -- ** Response constructor , updateAutoScalingGroupResponse ) where import Network.AWS.Prelude import Network.AWS.Request.Query import Network.AWS.AutoScaling.Types import qualified GHC.Exts data UpdateAutoScalingGroup = UpdateAutoScalingGroup { _uasgAutoScalingGroupName :: Text , _uasgAvailabilityZones :: List1 "AvailabilityZones" Text , _uasgDefaultCooldown :: Maybe Int , _uasgDesiredCapacity :: Maybe Int , _uasgHealthCheckGracePeriod :: Maybe Int , _uasgHealthCheckType :: Maybe Text , _uasgLaunchConfigurationName :: Maybe Text , _uasgMaxSize :: Maybe Int , _uasgMinSize :: Maybe Int , _uasgPlacementGroup :: Maybe Text , _uasgTerminationPolicies :: List "TerminationPolicies" Text , _uasgVPCZoneIdentifier :: Maybe Text } deriving (Eq, Ord, Show) -- | 'UpdateAutoScalingGroup' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'uasgAutoScalingGroupName' @::@ 'Text' -- -- * 'uasgAvailabilityZones' @::@ 'NonEmpty' 'Text' -- -- * 'uasgDefaultCooldown' @::@ 'Maybe' 'Int' -- -- * 'uasgDesiredCapacity' @::@ 'Maybe' 'Int' -- -- * 'uasgHealthCheckGracePeriod' @::@ 'Maybe' 'Int' -- -- * 'uasgHealthCheckType' @::@ 'Maybe' 'Text' -- -- * 'uasgLaunchConfigurationName' @::@ 'Maybe' 'Text' -- -- * 'uasgMaxSize' @::@ 'Maybe' 'Int' -- -- * 'uasgMinSize' @::@ 'Maybe' 'Int' -- -- * 'uasgPlacementGroup' @::@ 'Maybe' 'Text' -- -- * 'uasgTerminationPolicies' @::@ ['Text'] -- -- * 'uasgVPCZoneIdentifier' @::@ 'Maybe' 'Text' -- updateAutoScalingGroup :: Text -- ^ 'uasgAutoScalingGroupName' -> NonEmpty Text -- ^ 'uasgAvailabilityZones' -> UpdateAutoScalingGroup updateAutoScalingGroup p1 p2 = UpdateAutoScalingGroup { _uasgAutoScalingGroupName = p1 , _uasgAvailabilityZones = withIso _List1 (const id) p2 , _uasgLaunchConfigurationName = Nothing , _uasgMinSize = Nothing , _uasgMaxSize = Nothing , _uasgDesiredCapacity = Nothing , _uasgDefaultCooldown = Nothing , _uasgHealthCheckType = Nothing , _uasgHealthCheckGracePeriod = Nothing , _uasgPlacementGroup = Nothing , _uasgVPCZoneIdentifier = Nothing , _uasgTerminationPolicies = mempty } -- | The name of the Auto Scaling group. uasgAutoScalingGroupName :: Lens' UpdateAutoScalingGroup Text uasgAutoScalingGroupName = lens _uasgAutoScalingGroupName (\s a -> s { _uasgAutoScalingGroupName = a }) -- | One or more Availability Zones for the group. uasgAvailabilityZones :: Lens' UpdateAutoScalingGroup (NonEmpty Text) uasgAvailabilityZones = lens _uasgAvailabilityZones (\s a -> s { _uasgAvailabilityZones = a }) . _List1 -- | The amount of time, in seconds, after a scaling activity completes before -- another scaling activity can start. For more information, see -- Understanding Auto Scaling Cooldowns. uasgDefaultCooldown :: Lens' UpdateAutoScalingGroup (Maybe Int) uasgDefaultCooldown = lens _uasgDefaultCooldown (\s a -> s { _uasgDefaultCooldown = a }) -- | The number of EC2 instances that should be running in the Auto Scaling -- 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. uasgDesiredCapacity :: Lens' UpdateAutoScalingGroup (Maybe Int) uasgDesiredCapacity = lens _uasgDesiredCapacity (\s a -> s { _uasgDesiredCapacity = a }) -- | The amount of time, in second, that Auto Scaling waits before checking -- the health status of an instance. The grace period begins when the -- instance passes System Status and the Instance Status checks from Amazon -- EC2. For more information, see DescribeInstanceStatus. uasgHealthCheckGracePeriod :: Lens' UpdateAutoScalingGroup (Maybe Int) uasgHealthCheckGracePeriod = lens _uasgHealthCheckGracePeriod (\s a -> s { _uasgHealthCheckGracePeriod = a }) -- | The type of health check for the instances in the Auto Scaling group. The -- health check type can either be EC2 for Amazon EC2 or ELB for Elastic -- Load Balancing. uasgHealthCheckType :: Lens' UpdateAutoScalingGroup (Maybe Text) uasgHealthCheckType = lens _uasgHealthCheckType (\s a -> s { _uasgHealthCheckType = a }) -- | The name of the launch configuration. uasgLaunchConfigurationName :: Lens' UpdateAutoScalingGroup (Maybe Text) uasgLaunchConfigurationName = lens _uasgLaunchConfigurationName (\s a -> s { _uasgLaunchConfigurationName = a }) -- | The maximum size of the Auto Scaling group. uasgMaxSize :: Lens' UpdateAutoScalingGroup (Maybe Int) uasgMaxSize = lens _uasgMaxSize (\s a -> s { _uasgMaxSize = a }) -- | The minimum size of the Auto Scaling group. uasgMinSize :: Lens' UpdateAutoScalingGroup (Maybe Int) uasgMinSize = lens _uasgMinSize (\s a -> s { _uasgMinSize = a }) -- | The name of the placement group into which you'll launch your instances, -- if any. For more information, see Placement Groups. uasgPlacementGroup :: Lens' UpdateAutoScalingGroup (Maybe Text) uasgPlacementGroup = lens _uasgPlacementGroup (\s a -> s { _uasgPlacementGroup = a }) -- | A standalone termination policy or a list of termination policies used to -- select the instance to terminate. The 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. uasgTerminationPolicies :: Lens' UpdateAutoScalingGroup [Text] uasgTerminationPolicies = lens _uasgTerminationPolicies (\s a -> s { _uasgTerminationPolicies = a }) . _List -- | The subnet identifier for the Amazon VPC connection, if applicable. You -- can specify several subnets in a comma-separated list. When you specify -- VPCZoneIdentifier with AvailabilityZones, ensure that the subnets' -- Availability Zones match the values you specify for AvailabilityZones. -- For more information, see Auto Scaling and Amazon VPC in the Auto Scaling -- Developer Guide. uasgVPCZoneIdentifier :: Lens' UpdateAutoScalingGroup (Maybe Text) uasgVPCZoneIdentifier = lens _uasgVPCZoneIdentifier (\s a -> s { _uasgVPCZoneIdentifier = a }) data UpdateAutoScalingGroupResponse = UpdateAutoScalingGroupResponse deriving (Eq, Ord, Show, Generic) -- | 'UpdateAutoScalingGroupResponse' constructor. updateAutoScalingGroupResponse :: UpdateAutoScalingGroupResponse updateAutoScalingGroupResponse = UpdateAutoScalingGroupResponse instance ToPath UpdateAutoScalingGroup where toPath = const "/" instance ToQuery UpdateAutoScalingGroup where toQuery UpdateAutoScalingGroup{..} = mconcat [ "AutoScalingGroupName" =? _uasgAutoScalingGroupName , "AvailabilityZones" =? _uasgAvailabilityZones , "DefaultCooldown" =? _uasgDefaultCooldown , "DesiredCapacity" =? _uasgDesiredCapacity , "HealthCheckGracePeriod" =? _uasgHealthCheckGracePeriod , "HealthCheckType" =? _uasgHealthCheckType , "LaunchConfigurationName" =? _uasgLaunchConfigurationName , "MaxSize" =? _uasgMaxSize , "MinSize" =? _uasgMinSize , "PlacementGroup" =? _uasgPlacementGroup , "TerminationPolicies" =? _uasgTerminationPolicies , "VPCZoneIdentifier" =? _uasgVPCZoneIdentifier ] instance ToHeaders UpdateAutoScalingGroup instance AWSRequest UpdateAutoScalingGroup where type Sv UpdateAutoScalingGroup = AutoScaling type Rs UpdateAutoScalingGroup = UpdateAutoScalingGroupResponse request = post "UpdateAutoScalingGroup" response = nullResponse UpdateAutoScalingGroupResponse