packages feed

amazonka-autoscaling-2.0: gen/Amazonka/AutoScaling/Types/PredictiveScalingConfiguration.hs

{-# 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 <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> 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
      ]