amazonka-autoscaling-2.0: gen/Amazonka/AutoScaling/Types/InstancesDistribution.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.InstancesDistribution
-- 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.InstancesDistribution where
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
-- | Use this structure to specify the distribution of On-Demand Instances
-- and Spot Instances and the allocation strategies used to fulfill
-- On-Demand and Spot capacities for a mixed instances policy.
--
-- /See:/ 'newInstancesDistribution' smart constructor.
data InstancesDistribution = InstancesDistribution'
{ -- | The allocation strategy to apply to your On-Demand Instances when they
-- are launched. Possible instance types are determined by the launch
-- template overrides that you specify.
--
-- The following lists the valid values:
--
-- [lowest-price]
-- Uses price to determine which instance types are the highest
-- priority, launching the lowest priced instance types within an
-- Availability Zone first. This is the default value for Auto Scaling
-- groups that specify InstanceRequirements.
--
-- [prioritized]
-- You set the order of instance types for the launch template
-- overrides from highest to lowest priority (from first to last in the
-- list). Amazon EC2 Auto Scaling launches your highest priority
-- instance types first. If all your On-Demand capacity cannot be
-- fulfilled using your highest priority instance type, then Amazon EC2
-- Auto Scaling launches the remaining capacity using the second
-- priority instance type, and so on. This is the default value for
-- Auto Scaling groups that don\'t specify InstanceRequirements and
-- cannot be used for groups that do.
onDemandAllocationStrategy :: Prelude.Maybe Prelude.Text,
-- | The minimum amount of the Auto Scaling group\'s capacity that must be
-- fulfilled by On-Demand Instances. This base portion is launched first as
-- your group scales.
--
-- This number has the same unit of measurement as the group\'s desired
-- capacity. If you change the default unit of measurement (number of
-- instances) by specifying weighted capacity values in your launch
-- template overrides list, or by changing the default desired capacity
-- type setting of the group, you must specify this number using the same
-- unit of measurement.
--
-- Default: 0
onDemandBaseCapacity :: Prelude.Maybe Prelude.Int,
-- | Controls the percentages of On-Demand Instances and Spot Instances for
-- your additional capacity beyond @OnDemandBaseCapacity@. Expressed as a
-- number (for example, 20 specifies 20% On-Demand Instances, 80% Spot
-- Instances). If set to 100, only On-Demand Instances are used.
--
-- Default: 100
onDemandPercentageAboveBaseCapacity :: Prelude.Maybe Prelude.Int,
-- | The allocation strategy to apply to your Spot Instances when they are
-- launched. Possible instance types are determined by the launch template
-- overrides that you specify.
--
-- The following lists the valid values:
--
-- [capacity-optimized]
-- Requests Spot Instances using pools that are optimally chosen based
-- on the available Spot capacity. This strategy has the lowest risk of
-- interruption. To give certain instance types a higher chance of
-- launching first, use @capacity-optimized-prioritized@.
--
-- [capacity-optimized-prioritized]
-- You set the order of instance types for the launch template
-- overrides from highest to lowest priority (from first to last in the
-- list). Amazon EC2 Auto Scaling honors the instance type priorities
-- on a best effort basis but optimizes for capacity first. Note that
-- if the On-Demand allocation strategy is set to @prioritized@, the
-- same priority is applied when fulfilling On-Demand capacity. This is
-- not a valid value for Auto Scaling groups that specify
-- InstanceRequirements.
--
-- [lowest-price]
-- Requests Spot Instances using the lowest priced pools within an
-- Availability Zone, across the number of Spot pools that you specify
-- for the @SpotInstancePools@ property. To ensure that your desired
-- capacity is met, you might receive Spot Instances from several
-- pools. This is the default value, but it might lead to high
-- interruption rates because this strategy only considers instance
-- price and not available capacity.
--
-- [price-capacity-optimized (recommended)]
-- The price and capacity optimized allocation strategy looks at both
-- price and capacity to select the Spot Instance pools that are the
-- least likely to be interrupted and have the lowest possible price.
spotAllocationStrategy :: Prelude.Maybe Prelude.Text,
-- | The number of Spot Instance pools across which to allocate your Spot
-- Instances. The Spot pools are determined from the different instance
-- types in the overrides. Valid only when the @SpotAllocationStrategy@ is
-- @lowest-price@. Value must be in the range of 1–20.
--
-- Default: 2
spotInstancePools :: Prelude.Maybe Prelude.Int,
-- | The maximum price per unit hour that you are willing to pay for a Spot
-- Instance. If your maximum price is lower than the Spot price for the
-- instance types that you selected, your Spot Instances are not launched.
-- We do not recommend specifying a maximum price because it can lead to
-- increased interruptions. When Spot Instances launch, you pay the current
-- Spot price. To remove a maximum price that you previously set, include
-- the property but specify an empty string (\"\") for the value.
--
-- If you specify a maximum price, your instances will be interrupted more
-- frequently than if you do not specify one.
--
-- Valid Range: Minimum value of 0.001
spotMaxPrice :: Prelude.Maybe Prelude.Text
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'InstancesDistribution' 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:
--
-- 'onDemandAllocationStrategy', 'instancesDistribution_onDemandAllocationStrategy' - The allocation strategy to apply to your On-Demand Instances when they
-- are launched. Possible instance types are determined by the launch
-- template overrides that you specify.
--
-- The following lists the valid values:
--
-- [lowest-price]
-- Uses price to determine which instance types are the highest
-- priority, launching the lowest priced instance types within an
-- Availability Zone first. This is the default value for Auto Scaling
-- groups that specify InstanceRequirements.
--
-- [prioritized]
-- You set the order of instance types for the launch template
-- overrides from highest to lowest priority (from first to last in the
-- list). Amazon EC2 Auto Scaling launches your highest priority
-- instance types first. If all your On-Demand capacity cannot be
-- fulfilled using your highest priority instance type, then Amazon EC2
-- Auto Scaling launches the remaining capacity using the second
-- priority instance type, and so on. This is the default value for
-- Auto Scaling groups that don\'t specify InstanceRequirements and
-- cannot be used for groups that do.
--
-- 'onDemandBaseCapacity', 'instancesDistribution_onDemandBaseCapacity' - The minimum amount of the Auto Scaling group\'s capacity that must be
-- fulfilled by On-Demand Instances. This base portion is launched first as
-- your group scales.
--
-- This number has the same unit of measurement as the group\'s desired
-- capacity. If you change the default unit of measurement (number of
-- instances) by specifying weighted capacity values in your launch
-- template overrides list, or by changing the default desired capacity
-- type setting of the group, you must specify this number using the same
-- unit of measurement.
--
-- Default: 0
--
-- 'onDemandPercentageAboveBaseCapacity', 'instancesDistribution_onDemandPercentageAboveBaseCapacity' - Controls the percentages of On-Demand Instances and Spot Instances for
-- your additional capacity beyond @OnDemandBaseCapacity@. Expressed as a
-- number (for example, 20 specifies 20% On-Demand Instances, 80% Spot
-- Instances). If set to 100, only On-Demand Instances are used.
--
-- Default: 100
--
-- 'spotAllocationStrategy', 'instancesDistribution_spotAllocationStrategy' - The allocation strategy to apply to your Spot Instances when they are
-- launched. Possible instance types are determined by the launch template
-- overrides that you specify.
--
-- The following lists the valid values:
--
-- [capacity-optimized]
-- Requests Spot Instances using pools that are optimally chosen based
-- on the available Spot capacity. This strategy has the lowest risk of
-- interruption. To give certain instance types a higher chance of
-- launching first, use @capacity-optimized-prioritized@.
--
-- [capacity-optimized-prioritized]
-- You set the order of instance types for the launch template
-- overrides from highest to lowest priority (from first to last in the
-- list). Amazon EC2 Auto Scaling honors the instance type priorities
-- on a best effort basis but optimizes for capacity first. Note that
-- if the On-Demand allocation strategy is set to @prioritized@, the
-- same priority is applied when fulfilling On-Demand capacity. This is
-- not a valid value for Auto Scaling groups that specify
-- InstanceRequirements.
--
-- [lowest-price]
-- Requests Spot Instances using the lowest priced pools within an
-- Availability Zone, across the number of Spot pools that you specify
-- for the @SpotInstancePools@ property. To ensure that your desired
-- capacity is met, you might receive Spot Instances from several
-- pools. This is the default value, but it might lead to high
-- interruption rates because this strategy only considers instance
-- price and not available capacity.
--
-- [price-capacity-optimized (recommended)]
-- The price and capacity optimized allocation strategy looks at both
-- price and capacity to select the Spot Instance pools that are the
-- least likely to be interrupted and have the lowest possible price.
--
-- 'spotInstancePools', 'instancesDistribution_spotInstancePools' - The number of Spot Instance pools across which to allocate your Spot
-- Instances. The Spot pools are determined from the different instance
-- types in the overrides. Valid only when the @SpotAllocationStrategy@ is
-- @lowest-price@. Value must be in the range of 1–20.
--
-- Default: 2
--
-- 'spotMaxPrice', 'instancesDistribution_spotMaxPrice' - The maximum price per unit hour that you are willing to pay for a Spot
-- Instance. If your maximum price is lower than the Spot price for the
-- instance types that you selected, your Spot Instances are not launched.
-- We do not recommend specifying a maximum price because it can lead to
-- increased interruptions. When Spot Instances launch, you pay the current
-- Spot price. To remove a maximum price that you previously set, include
-- the property but specify an empty string (\"\") for the value.
--
-- If you specify a maximum price, your instances will be interrupted more
-- frequently than if you do not specify one.
--
-- Valid Range: Minimum value of 0.001
newInstancesDistribution ::
InstancesDistribution
newInstancesDistribution =
InstancesDistribution'
{ onDemandAllocationStrategy =
Prelude.Nothing,
onDemandBaseCapacity = Prelude.Nothing,
onDemandPercentageAboveBaseCapacity =
Prelude.Nothing,
spotAllocationStrategy = Prelude.Nothing,
spotInstancePools = Prelude.Nothing,
spotMaxPrice = Prelude.Nothing
}
-- | The allocation strategy to apply to your On-Demand Instances when they
-- are launched. Possible instance types are determined by the launch
-- template overrides that you specify.
--
-- The following lists the valid values:
--
-- [lowest-price]
-- Uses price to determine which instance types are the highest
-- priority, launching the lowest priced instance types within an
-- Availability Zone first. This is the default value for Auto Scaling
-- groups that specify InstanceRequirements.
--
-- [prioritized]
-- You set the order of instance types for the launch template
-- overrides from highest to lowest priority (from first to last in the
-- list). Amazon EC2 Auto Scaling launches your highest priority
-- instance types first. If all your On-Demand capacity cannot be
-- fulfilled using your highest priority instance type, then Amazon EC2
-- Auto Scaling launches the remaining capacity using the second
-- priority instance type, and so on. This is the default value for
-- Auto Scaling groups that don\'t specify InstanceRequirements and
-- cannot be used for groups that do.
instancesDistribution_onDemandAllocationStrategy :: Lens.Lens' InstancesDistribution (Prelude.Maybe Prelude.Text)
instancesDistribution_onDemandAllocationStrategy = Lens.lens (\InstancesDistribution' {onDemandAllocationStrategy} -> onDemandAllocationStrategy) (\s@InstancesDistribution' {} a -> s {onDemandAllocationStrategy = a} :: InstancesDistribution)
-- | The minimum amount of the Auto Scaling group\'s capacity that must be
-- fulfilled by On-Demand Instances. This base portion is launched first as
-- your group scales.
--
-- This number has the same unit of measurement as the group\'s desired
-- capacity. If you change the default unit of measurement (number of
-- instances) by specifying weighted capacity values in your launch
-- template overrides list, or by changing the default desired capacity
-- type setting of the group, you must specify this number using the same
-- unit of measurement.
--
-- Default: 0
instancesDistribution_onDemandBaseCapacity :: Lens.Lens' InstancesDistribution (Prelude.Maybe Prelude.Int)
instancesDistribution_onDemandBaseCapacity = Lens.lens (\InstancesDistribution' {onDemandBaseCapacity} -> onDemandBaseCapacity) (\s@InstancesDistribution' {} a -> s {onDemandBaseCapacity = a} :: InstancesDistribution)
-- | Controls the percentages of On-Demand Instances and Spot Instances for
-- your additional capacity beyond @OnDemandBaseCapacity@. Expressed as a
-- number (for example, 20 specifies 20% On-Demand Instances, 80% Spot
-- Instances). If set to 100, only On-Demand Instances are used.
--
-- Default: 100
instancesDistribution_onDemandPercentageAboveBaseCapacity :: Lens.Lens' InstancesDistribution (Prelude.Maybe Prelude.Int)
instancesDistribution_onDemandPercentageAboveBaseCapacity = Lens.lens (\InstancesDistribution' {onDemandPercentageAboveBaseCapacity} -> onDemandPercentageAboveBaseCapacity) (\s@InstancesDistribution' {} a -> s {onDemandPercentageAboveBaseCapacity = a} :: InstancesDistribution)
-- | The allocation strategy to apply to your Spot Instances when they are
-- launched. Possible instance types are determined by the launch template
-- overrides that you specify.
--
-- The following lists the valid values:
--
-- [capacity-optimized]
-- Requests Spot Instances using pools that are optimally chosen based
-- on the available Spot capacity. This strategy has the lowest risk of
-- interruption. To give certain instance types a higher chance of
-- launching first, use @capacity-optimized-prioritized@.
--
-- [capacity-optimized-prioritized]
-- You set the order of instance types for the launch template
-- overrides from highest to lowest priority (from first to last in the
-- list). Amazon EC2 Auto Scaling honors the instance type priorities
-- on a best effort basis but optimizes for capacity first. Note that
-- if the On-Demand allocation strategy is set to @prioritized@, the
-- same priority is applied when fulfilling On-Demand capacity. This is
-- not a valid value for Auto Scaling groups that specify
-- InstanceRequirements.
--
-- [lowest-price]
-- Requests Spot Instances using the lowest priced pools within an
-- Availability Zone, across the number of Spot pools that you specify
-- for the @SpotInstancePools@ property. To ensure that your desired
-- capacity is met, you might receive Spot Instances from several
-- pools. This is the default value, but it might lead to high
-- interruption rates because this strategy only considers instance
-- price and not available capacity.
--
-- [price-capacity-optimized (recommended)]
-- The price and capacity optimized allocation strategy looks at both
-- price and capacity to select the Spot Instance pools that are the
-- least likely to be interrupted and have the lowest possible price.
instancesDistribution_spotAllocationStrategy :: Lens.Lens' InstancesDistribution (Prelude.Maybe Prelude.Text)
instancesDistribution_spotAllocationStrategy = Lens.lens (\InstancesDistribution' {spotAllocationStrategy} -> spotAllocationStrategy) (\s@InstancesDistribution' {} a -> s {spotAllocationStrategy = a} :: InstancesDistribution)
-- | The number of Spot Instance pools across which to allocate your Spot
-- Instances. The Spot pools are determined from the different instance
-- types in the overrides. Valid only when the @SpotAllocationStrategy@ is
-- @lowest-price@. Value must be in the range of 1–20.
--
-- Default: 2
instancesDistribution_spotInstancePools :: Lens.Lens' InstancesDistribution (Prelude.Maybe Prelude.Int)
instancesDistribution_spotInstancePools = Lens.lens (\InstancesDistribution' {spotInstancePools} -> spotInstancePools) (\s@InstancesDistribution' {} a -> s {spotInstancePools = a} :: InstancesDistribution)
-- | The maximum price per unit hour that you are willing to pay for a Spot
-- Instance. If your maximum price is lower than the Spot price for the
-- instance types that you selected, your Spot Instances are not launched.
-- We do not recommend specifying a maximum price because it can lead to
-- increased interruptions. When Spot Instances launch, you pay the current
-- Spot price. To remove a maximum price that you previously set, include
-- the property but specify an empty string (\"\") for the value.
--
-- If you specify a maximum price, your instances will be interrupted more
-- frequently than if you do not specify one.
--
-- Valid Range: Minimum value of 0.001
instancesDistribution_spotMaxPrice :: Lens.Lens' InstancesDistribution (Prelude.Maybe Prelude.Text)
instancesDistribution_spotMaxPrice = Lens.lens (\InstancesDistribution' {spotMaxPrice} -> spotMaxPrice) (\s@InstancesDistribution' {} a -> s {spotMaxPrice = a} :: InstancesDistribution)
instance Data.FromXML InstancesDistribution where
parseXML x =
InstancesDistribution'
Prelude.<$> (x Data..@? "OnDemandAllocationStrategy")
Prelude.<*> (x Data..@? "OnDemandBaseCapacity")
Prelude.<*> (x Data..@? "OnDemandPercentageAboveBaseCapacity")
Prelude.<*> (x Data..@? "SpotAllocationStrategy")
Prelude.<*> (x Data..@? "SpotInstancePools")
Prelude.<*> (x Data..@? "SpotMaxPrice")
instance Prelude.Hashable InstancesDistribution where
hashWithSalt _salt InstancesDistribution' {..} =
_salt
`Prelude.hashWithSalt` onDemandAllocationStrategy
`Prelude.hashWithSalt` onDemandBaseCapacity
`Prelude.hashWithSalt` onDemandPercentageAboveBaseCapacity
`Prelude.hashWithSalt` spotAllocationStrategy
`Prelude.hashWithSalt` spotInstancePools
`Prelude.hashWithSalt` spotMaxPrice
instance Prelude.NFData InstancesDistribution where
rnf InstancesDistribution' {..} =
Prelude.rnf onDemandAllocationStrategy
`Prelude.seq` Prelude.rnf onDemandBaseCapacity
`Prelude.seq` Prelude.rnf onDemandPercentageAboveBaseCapacity
`Prelude.seq` Prelude.rnf spotAllocationStrategy
`Prelude.seq` Prelude.rnf spotInstancePools
`Prelude.seq` Prelude.rnf spotMaxPrice
instance Data.ToQuery InstancesDistribution where
toQuery InstancesDistribution' {..} =
Prelude.mconcat
[ "OnDemandAllocationStrategy"
Data.=: onDemandAllocationStrategy,
"OnDemandBaseCapacity" Data.=: onDemandBaseCapacity,
"OnDemandPercentageAboveBaseCapacity"
Data.=: onDemandPercentageAboveBaseCapacity,
"SpotAllocationStrategy"
Data.=: spotAllocationStrategy,
"SpotInstancePools" Data.=: spotInstancePools,
"SpotMaxPrice" Data.=: spotMaxPrice
]