{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Amazonka.AutoScaling.Types.PredictiveScalingConfiguration -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) module Amazonka.AutoScaling.Types.PredictiveScalingConfiguration where import Amazonka.AutoScaling.Types.PredictiveScalingMaxCapacityBreachBehavior import Amazonka.AutoScaling.Types.PredictiveScalingMetricSpecification import Amazonka.AutoScaling.Types.PredictiveScalingMode import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import qualified Amazonka.Prelude as Prelude -- | Represents a predictive scaling policy configuration to use with Amazon -- EC2 Auto Scaling. -- -- /See:/ 'newPredictiveScalingConfiguration' smart constructor. data PredictiveScalingConfiguration = PredictiveScalingConfiguration' { -- | Defines the behavior that should be applied if the forecast capacity -- approaches or exceeds the maximum capacity of the Auto Scaling group. -- Defaults to @HonorMaxCapacity@ if not specified. -- -- The following are possible values: -- -- - @HonorMaxCapacity@ - Amazon EC2 Auto Scaling cannot scale out -- capacity higher than the maximum capacity. The maximum capacity is -- enforced as a hard limit. -- -- - @IncreaseMaxCapacity@ - Amazon EC2 Auto Scaling can scale out -- capacity higher than the maximum capacity when the forecast capacity -- is close to or exceeds the maximum capacity. The upper limit is -- determined by the forecasted capacity and the value for -- @MaxCapacityBuffer@. maxCapacityBreachBehavior :: Prelude.Maybe PredictiveScalingMaxCapacityBreachBehavior, -- | The size of the capacity buffer to use when the forecast capacity is -- close to or exceeds the maximum capacity. The value is specified as a -- percentage relative to the forecast capacity. For example, if the buffer -- is 10, this means a 10 percent buffer, such that if the forecast -- capacity is 50, and the maximum capacity is 40, then the effective -- maximum capacity is 55. -- -- If set to 0, Amazon EC2 Auto Scaling may scale capacity higher than the -- maximum capacity to equal but not exceed forecast capacity. -- -- Required if the @MaxCapacityBreachBehavior@ property is set to -- @IncreaseMaxCapacity@, and cannot be used otherwise. maxCapacityBuffer :: Prelude.Maybe Prelude.Natural, -- | The predictive scaling mode. Defaults to @ForecastOnly@ if not -- specified. mode :: Prelude.Maybe PredictiveScalingMode, -- | The amount of time, in seconds, by which the instance launch time can be -- advanced. For example, the forecast says to add capacity at 10:00 AM, -- and you choose to pre-launch instances by 5 minutes. In that case, the -- instances will be launched at 9:55 AM. The intention is to give -- resources time to be provisioned. It can take a few minutes to launch an -- EC2 instance. The actual amount of time required depends on several -- factors, such as the size of the instance and whether there are startup -- scripts to complete. -- -- The value must be less than the forecast interval duration of 3600 -- seconds (60 minutes). Defaults to 300 seconds if not specified. schedulingBufferTime :: Prelude.Maybe Prelude.Natural, -- | This structure includes the metrics and target utilization to use for -- predictive scaling. -- -- This is an array, but we currently only support a single metric -- specification. That is, you can specify a target value and a single -- metric pair, or a target value and one scaling metric and one load -- metric. metricSpecifications :: [PredictiveScalingMetricSpecification] } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'PredictiveScalingConfiguration' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'maxCapacityBreachBehavior', 'predictiveScalingConfiguration_maxCapacityBreachBehavior' - Defines the behavior that should be applied if the forecast capacity -- approaches or exceeds the maximum capacity of the Auto Scaling group. -- Defaults to @HonorMaxCapacity@ if not specified. -- -- The following are possible values: -- -- - @HonorMaxCapacity@ - Amazon EC2 Auto Scaling cannot scale out -- capacity higher than the maximum capacity. The maximum capacity is -- enforced as a hard limit. -- -- - @IncreaseMaxCapacity@ - Amazon EC2 Auto Scaling can scale out -- capacity higher than the maximum capacity when the forecast capacity -- is close to or exceeds the maximum capacity. The upper limit is -- determined by the forecasted capacity and the value for -- @MaxCapacityBuffer@. -- -- 'maxCapacityBuffer', 'predictiveScalingConfiguration_maxCapacityBuffer' - The size of the capacity buffer to use when the forecast capacity is -- close to or exceeds the maximum capacity. The value is specified as a -- percentage relative to the forecast capacity. For example, if the buffer -- is 10, this means a 10 percent buffer, such that if the forecast -- capacity is 50, and the maximum capacity is 40, then the effective -- maximum capacity is 55. -- -- If set to 0, Amazon EC2 Auto Scaling may scale capacity higher than the -- maximum capacity to equal but not exceed forecast capacity. -- -- Required if the @MaxCapacityBreachBehavior@ property is set to -- @IncreaseMaxCapacity@, and cannot be used otherwise. -- -- 'mode', 'predictiveScalingConfiguration_mode' - The predictive scaling mode. Defaults to @ForecastOnly@ if not -- specified. -- -- 'schedulingBufferTime', 'predictiveScalingConfiguration_schedulingBufferTime' - The amount of time, in seconds, by which the instance launch time can be -- advanced. For example, the forecast says to add capacity at 10:00 AM, -- and you choose to pre-launch instances by 5 minutes. In that case, the -- instances will be launched at 9:55 AM. The intention is to give -- resources time to be provisioned. It can take a few minutes to launch an -- EC2 instance. The actual amount of time required depends on several -- factors, such as the size of the instance and whether there are startup -- scripts to complete. -- -- The value must be less than the forecast interval duration of 3600 -- seconds (60 minutes). Defaults to 300 seconds if not specified. -- -- 'metricSpecifications', 'predictiveScalingConfiguration_metricSpecifications' - This structure includes the metrics and target utilization to use for -- predictive scaling. -- -- This is an array, but we currently only support a single metric -- specification. That is, you can specify a target value and a single -- metric pair, or a target value and one scaling metric and one load -- metric. newPredictiveScalingConfiguration :: PredictiveScalingConfiguration newPredictiveScalingConfiguration = PredictiveScalingConfiguration' { maxCapacityBreachBehavior = Prelude.Nothing, maxCapacityBuffer = Prelude.Nothing, mode = Prelude.Nothing, schedulingBufferTime = Prelude.Nothing, metricSpecifications = Prelude.mempty } -- | Defines the behavior that should be applied if the forecast capacity -- approaches or exceeds the maximum capacity of the Auto Scaling group. -- Defaults to @HonorMaxCapacity@ if not specified. -- -- The following are possible values: -- -- - @HonorMaxCapacity@ - Amazon EC2 Auto Scaling cannot scale out -- capacity higher than the maximum capacity. The maximum capacity is -- enforced as a hard limit. -- -- - @IncreaseMaxCapacity@ - Amazon EC2 Auto Scaling can scale out -- capacity higher than the maximum capacity when the forecast capacity -- is close to or exceeds the maximum capacity. The upper limit is -- determined by the forecasted capacity and the value for -- @MaxCapacityBuffer@. predictiveScalingConfiguration_maxCapacityBreachBehavior :: Lens.Lens' PredictiveScalingConfiguration (Prelude.Maybe PredictiveScalingMaxCapacityBreachBehavior) predictiveScalingConfiguration_maxCapacityBreachBehavior = Lens.lens (\PredictiveScalingConfiguration' {maxCapacityBreachBehavior} -> maxCapacityBreachBehavior) (\s@PredictiveScalingConfiguration' {} a -> s {maxCapacityBreachBehavior = a} :: PredictiveScalingConfiguration) -- | The size of the capacity buffer to use when the forecast capacity is -- close to or exceeds the maximum capacity. The value is specified as a -- percentage relative to the forecast capacity. For example, if the buffer -- is 10, this means a 10 percent buffer, such that if the forecast -- capacity is 50, and the maximum capacity is 40, then the effective -- maximum capacity is 55. -- -- If set to 0, Amazon EC2 Auto Scaling may scale capacity higher than the -- maximum capacity to equal but not exceed forecast capacity. -- -- Required if the @MaxCapacityBreachBehavior@ property is set to -- @IncreaseMaxCapacity@, and cannot be used otherwise. predictiveScalingConfiguration_maxCapacityBuffer :: Lens.Lens' PredictiveScalingConfiguration (Prelude.Maybe Prelude.Natural) predictiveScalingConfiguration_maxCapacityBuffer = Lens.lens (\PredictiveScalingConfiguration' {maxCapacityBuffer} -> maxCapacityBuffer) (\s@PredictiveScalingConfiguration' {} a -> s {maxCapacityBuffer = a} :: PredictiveScalingConfiguration) -- | The predictive scaling mode. Defaults to @ForecastOnly@ if not -- specified. predictiveScalingConfiguration_mode :: Lens.Lens' PredictiveScalingConfiguration (Prelude.Maybe PredictiveScalingMode) predictiveScalingConfiguration_mode = Lens.lens (\PredictiveScalingConfiguration' {mode} -> mode) (\s@PredictiveScalingConfiguration' {} a -> s {mode = a} :: PredictiveScalingConfiguration) -- | The amount of time, in seconds, by which the instance launch time can be -- advanced. For example, the forecast says to add capacity at 10:00 AM, -- and you choose to pre-launch instances by 5 minutes. In that case, the -- instances will be launched at 9:55 AM. The intention is to give -- resources time to be provisioned. It can take a few minutes to launch an -- EC2 instance. The actual amount of time required depends on several -- factors, such as the size of the instance and whether there are startup -- scripts to complete. -- -- The value must be less than the forecast interval duration of 3600 -- seconds (60 minutes). Defaults to 300 seconds if not specified. predictiveScalingConfiguration_schedulingBufferTime :: Lens.Lens' PredictiveScalingConfiguration (Prelude.Maybe Prelude.Natural) predictiveScalingConfiguration_schedulingBufferTime = Lens.lens (\PredictiveScalingConfiguration' {schedulingBufferTime} -> schedulingBufferTime) (\s@PredictiveScalingConfiguration' {} a -> s {schedulingBufferTime = a} :: PredictiveScalingConfiguration) -- | This structure includes the metrics and target utilization to use for -- predictive scaling. -- -- This is an array, but we currently only support a single metric -- specification. That is, you can specify a target value and a single -- metric pair, or a target value and one scaling metric and one load -- metric. predictiveScalingConfiguration_metricSpecifications :: Lens.Lens' PredictiveScalingConfiguration [PredictiveScalingMetricSpecification] predictiveScalingConfiguration_metricSpecifications = Lens.lens (\PredictiveScalingConfiguration' {metricSpecifications} -> metricSpecifications) (\s@PredictiveScalingConfiguration' {} a -> s {metricSpecifications = a} :: PredictiveScalingConfiguration) Prelude.. Lens.coerced instance Data.FromXML PredictiveScalingConfiguration where parseXML x = PredictiveScalingConfiguration' Prelude.<$> (x Data..@? "MaxCapacityBreachBehavior") Prelude.<*> (x Data..@? "MaxCapacityBuffer") Prelude.<*> (x Data..@? "Mode") Prelude.<*> (x Data..@? "SchedulingBufferTime") Prelude.<*> ( x Data..@? "MetricSpecifications" Core..!@ Prelude.mempty Prelude.>>= Data.parseXMLList "member" ) instance Prelude.Hashable PredictiveScalingConfiguration where hashWithSalt _salt PredictiveScalingConfiguration' {..} = _salt `Prelude.hashWithSalt` maxCapacityBreachBehavior `Prelude.hashWithSalt` maxCapacityBuffer `Prelude.hashWithSalt` mode `Prelude.hashWithSalt` schedulingBufferTime `Prelude.hashWithSalt` metricSpecifications instance Prelude.NFData PredictiveScalingConfiguration where rnf PredictiveScalingConfiguration' {..} = Prelude.rnf maxCapacityBreachBehavior `Prelude.seq` Prelude.rnf maxCapacityBuffer `Prelude.seq` Prelude.rnf mode `Prelude.seq` Prelude.rnf schedulingBufferTime `Prelude.seq` Prelude.rnf metricSpecifications instance Data.ToQuery PredictiveScalingConfiguration where toQuery PredictiveScalingConfiguration' {..} = Prelude.mconcat [ "MaxCapacityBreachBehavior" Data.=: maxCapacityBreachBehavior, "MaxCapacityBuffer" Data.=: maxCapacityBuffer, "Mode" Data.=: mode, "SchedulingBufferTime" Data.=: schedulingBufferTime, "MetricSpecifications" Data.=: Data.toQueryList "member" metricSpecifications ]