packages feed

amazonka-autoscaling-2.0: gen/Amazonka/AutoScaling/Types/InstanceRequirements.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.InstanceRequirements
-- 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.InstanceRequirements where

import Amazonka.AutoScaling.Types.AcceleratorCountRequest
import Amazonka.AutoScaling.Types.AcceleratorManufacturer
import Amazonka.AutoScaling.Types.AcceleratorName
import Amazonka.AutoScaling.Types.AcceleratorTotalMemoryMiBRequest
import Amazonka.AutoScaling.Types.AcceleratorType
import Amazonka.AutoScaling.Types.BareMetal
import Amazonka.AutoScaling.Types.BaselineEbsBandwidthMbpsRequest
import Amazonka.AutoScaling.Types.BurstablePerformance
import Amazonka.AutoScaling.Types.CpuManufacturer
import Amazonka.AutoScaling.Types.InstanceGeneration
import Amazonka.AutoScaling.Types.LocalStorage
import Amazonka.AutoScaling.Types.LocalStorageType
import Amazonka.AutoScaling.Types.MemoryGiBPerVCpuRequest
import Amazonka.AutoScaling.Types.MemoryMiBRequest
import Amazonka.AutoScaling.Types.NetworkBandwidthGbpsRequest
import Amazonka.AutoScaling.Types.NetworkInterfaceCountRequest
import Amazonka.AutoScaling.Types.TotalLocalStorageGBRequest
import Amazonka.AutoScaling.Types.VCpuCountRequest
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

-- | The attributes for the instance types for a mixed instances policy.
-- Amazon EC2 Auto Scaling uses your specified requirements to identify
-- instance types. Then, it uses your On-Demand and Spot allocation
-- strategies to launch instances from these instance types.
--
-- When you specify multiple attributes, you get instance types that
-- satisfy all of the specified attributes. If you specify multiple values
-- for an attribute, you get instance types that satisfy any of the
-- specified values.
--
-- To limit the list of instance types from which Amazon EC2 Auto Scaling
-- can identify matching instance types, you can use one of the following
-- parameters, but not both in the same request:
--
-- -   @AllowedInstanceTypes@ - The instance types to include in the list.
--     All other instance types are ignored, even if they match your
--     specified attributes.
--
-- -   @ExcludedInstanceTypes@ - The instance types to exclude from the
--     list, even if they match your specified attributes.
--
-- You must specify @VCpuCount@ and @MemoryMiB@. All other attributes are
-- optional. Any unspecified optional attribute is set to its default.
--
-- For more information, see
-- <https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html Creating an Auto Scaling group using attribute-based instance type selection>
-- in the /Amazon EC2 Auto Scaling User Guide/. For help determining which
-- instance types match your attributes before you apply them to your Auto
-- Scaling group, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements Preview instance types with specified attributes>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- /See:/ 'newInstanceRequirements' smart constructor.
data InstanceRequirements = InstanceRequirements'
  { -- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
    -- Web Services Inferentia chips) for an instance type.
    --
    -- To exclude accelerator-enabled instance types, set @Max@ to @0@.
    --
    -- Default: No minimum or maximum limits
    acceleratorCount :: Prelude.Maybe AcceleratorCountRequest,
    -- | Indicates whether instance types must have accelerators by specific
    -- manufacturers.
    --
    -- -   For instance types with NVIDIA devices, specify @nvidia@.
    --
    -- -   For instance types with AMD devices, specify @amd@.
    --
    -- -   For instance types with Amazon Web Services devices, specify
    --     @amazon-web-services@.
    --
    -- -   For instance types with Xilinx devices, specify @xilinx@.
    --
    -- Default: Any manufacturer
    acceleratorManufacturers :: Prelude.Maybe [AcceleratorManufacturer],
    -- | Lists the accelerators that must be on an instance type.
    --
    -- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
    --
    -- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
    --
    -- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
    --
    -- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
    --
    -- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
    --
    -- -   For instance types with AMD Radeon Pro V520 GPUs, specify
    --     @radeon-pro-v520@.
    --
    -- -   For instance types with Xilinx VU9P FPGAs, specify @vu9p@.
    --
    -- Default: Any accelerator
    acceleratorNames :: Prelude.Maybe [AcceleratorName],
    -- | The minimum and maximum total memory size for the accelerators on an
    -- instance type, in MiB.
    --
    -- Default: No minimum or maximum limits
    acceleratorTotalMemoryMiB :: Prelude.Maybe AcceleratorTotalMemoryMiBRequest,
    -- | Lists the accelerator types that must be on an instance type.
    --
    -- -   For instance types with GPU accelerators, specify @gpu@.
    --
    -- -   For instance types with FPGA accelerators, specify @fpga@.
    --
    -- -   For instance types with inference accelerators, specify @inference@.
    --
    -- Default: Any accelerator type
    acceleratorTypes :: Prelude.Maybe [AcceleratorType],
    -- | The instance types to apply your specified attributes against. All other
    -- instance types are ignored, even if they match your specified
    -- attributes.
    --
    -- You can use strings with one or more wild cards, represented by an
    -- asterisk (@*@), to allow an instance type, size, or generation. The
    -- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
    --
    -- For example, if you specify @c5*@, Amazon EC2 Auto Scaling will allow
    -- the entire C5 instance family, which includes all C5a and C5n instance
    -- types. If you specify @m5a.*@, Amazon EC2 Auto Scaling will allow all
    -- the M5a instance types, but not the M5n instance types.
    --
    -- If you specify @AllowedInstanceTypes@, you can\'t specify
    -- @ExcludedInstanceTypes@.
    --
    -- Default: All instance types
    allowedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | Indicates whether bare metal instance types are included, excluded, or
    -- required.
    --
    -- Default: @excluded@
    bareMetal :: Prelude.Maybe BareMetal,
    -- | The minimum and maximum baseline bandwidth performance for an instance
    -- type, in Mbps. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
    -- in the /Amazon EC2 User Guide for Linux Instances/.
    --
    -- Default: No minimum or maximum limits
    baselineEbsBandwidthMbps :: Prelude.Maybe BaselineEbsBandwidthMbpsRequest,
    -- | Indicates whether burstable performance instance types are included,
    -- excluded, or required. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
    -- in the /Amazon EC2 User Guide for Linux Instances/.
    --
    -- Default: @excluded@
    burstablePerformance :: Prelude.Maybe BurstablePerformance,
    -- | Lists which specific CPU manufacturers to include.
    --
    -- -   For instance types with Intel CPUs, specify @intel@.
    --
    -- -   For instance types with AMD CPUs, specify @amd@.
    --
    -- -   For instance types with Amazon Web Services CPUs, specify
    --     @amazon-web-services@.
    --
    -- Don\'t confuse the CPU hardware manufacturer with the CPU hardware
    -- architecture. Instances will be launched with a compatible CPU
    -- architecture based on the Amazon Machine Image (AMI) that you specify in
    -- your launch template.
    --
    -- Default: Any manufacturer
    cpuManufacturers :: Prelude.Maybe [CpuManufacturer],
    -- | The instance types to exclude. You can use strings with one or more wild
    -- cards, represented by an asterisk (@*@), to exclude an instance family,
    -- type, size, or generation. The following are examples: @m5.8xlarge@,
    -- @c5*.*@, @m5a.*@, @r*@, @*3*@.
    --
    -- For example, if you specify @c5*@, you are excluding the entire C5
    -- instance family, which includes all C5a and C5n instance types. If you
    -- specify @m5a.*@, Amazon EC2 Auto Scaling will exclude all the M5a
    -- instance types, but not the M5n instance types.
    --
    -- If you specify @ExcludedInstanceTypes@, you can\'t specify
    -- @AllowedInstanceTypes@.
    --
    -- Default: No excluded instance types
    excludedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | Indicates whether current or previous generation instance types are
    -- included.
    --
    -- -   For current generation instance types, specify @current@. The
    --     current generation includes EC2 instance types currently recommended
    --     for use. This typically includes the latest two to three generations
    --     in each instance family. For more information, see
    --     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
    --     in the /Amazon EC2 User Guide for Linux Instances/.
    --
    -- -   For previous generation instance types, specify @previous@.
    --
    -- Default: Any current or previous generation
    instanceGenerations :: Prelude.Maybe [InstanceGeneration],
    -- | Indicates whether instance types with instance store volumes are
    -- included, excluded, or required. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
    -- in the /Amazon EC2 User Guide for Linux Instances/.
    --
    -- Default: @included@
    localStorage :: Prelude.Maybe LocalStorage,
    -- | Indicates the type of local storage that is required.
    --
    -- -   For instance types with hard disk drive (HDD) storage, specify
    --     @hdd@.
    --
    -- -   For instance types with solid state drive (SSD) storage, specify
    --     @ssd@.
    --
    -- Default: Any local storage type
    localStorageTypes :: Prelude.Maybe [LocalStorageType],
    -- | The minimum and maximum amount of memory per vCPU for an instance type,
    -- in GiB.
    --
    -- Default: No minimum or maximum limits
    memoryGiBPerVCpu :: Prelude.Maybe MemoryGiBPerVCpuRequest,
    -- | The minimum and maximum amount of network bandwidth, in gigabits per
    -- second (Gbps).
    --
    -- Default: No minimum or maximum limits
    networkBandwidthGbps :: Prelude.Maybe NetworkBandwidthGbpsRequest,
    -- | The minimum and maximum number of network interfaces for an instance
    -- type.
    --
    -- Default: No minimum or maximum limits
    networkInterfaceCount :: Prelude.Maybe NetworkInterfaceCountRequest,
    -- | The price protection threshold for On-Demand Instances. This is the
    -- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
    -- higher than the least expensive current generation M, C, or R instance
    -- type with your specified attributes. When Amazon EC2 Auto Scaling
    -- selects instance types with your attributes, we will exclude instance
    -- types whose price is higher than your threshold. The parameter accepts
    -- an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To
    -- turn off price protection, specify a high value, such as @999999@.
    --
    -- If you set @DesiredCapacityType@ to @vcpu@ or @memory-mib@, the price
    -- protection threshold is applied based on the per vCPU or per memory
    -- price instead of the per instance price.
    --
    -- Default: @20@
    onDemandMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Natural,
    -- | Indicates whether instance types must provide On-Demand Instance
    -- hibernation support.
    --
    -- Default: @false@
    requireHibernateSupport :: Prelude.Maybe Prelude.Bool,
    -- | The price protection threshold for Spot Instances. This is the maximum
    -- you’ll pay for a Spot Instance, expressed as a percentage higher than
    -- the least expensive current generation M, C, or R instance type with
    -- your specified attributes. When Amazon EC2 Auto Scaling selects instance
    -- types with your attributes, we will exclude instance types whose price
    -- is higher than your threshold. The parameter accepts an integer, which
    -- Amazon EC2 Auto Scaling interprets as a percentage. To turn off price
    -- protection, specify a high value, such as @999999@.
    --
    -- If you set @DesiredCapacityType@ to @vcpu@ or @memory-mib@, the price
    -- protection threshold is applied based on the per vCPU or per memory
    -- price instead of the per instance price.
    --
    -- Default: @100@
    spotMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Natural,
    -- | The minimum and maximum total local storage size for an instance type,
    -- in GB.
    --
    -- Default: No minimum or maximum limits
    totalLocalStorageGB :: Prelude.Maybe TotalLocalStorageGBRequest,
    -- | The minimum and maximum number of vCPUs for an instance type.
    vCpuCount :: VCpuCountRequest,
    -- | The minimum and maximum instance memory size for an instance type, in
    -- MiB.
    memoryMiB :: MemoryMiBRequest
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'InstanceRequirements' 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:
--
-- 'acceleratorCount', 'instanceRequirements_acceleratorCount' - The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
-- Web Services Inferentia chips) for an instance type.
--
-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
--
-- Default: No minimum or maximum limits
--
-- 'acceleratorManufacturers', 'instanceRequirements_acceleratorManufacturers' - Indicates whether instance types must have accelerators by specific
-- manufacturers.
--
-- -   For instance types with NVIDIA devices, specify @nvidia@.
--
-- -   For instance types with AMD devices, specify @amd@.
--
-- -   For instance types with Amazon Web Services devices, specify
--     @amazon-web-services@.
--
-- -   For instance types with Xilinx devices, specify @xilinx@.
--
-- Default: Any manufacturer
--
-- 'acceleratorNames', 'instanceRequirements_acceleratorNames' - Lists the accelerators that must be on an instance type.
--
-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
--
-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
--
-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
--
-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
--
-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
--
-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
--     @radeon-pro-v520@.
--
-- -   For instance types with Xilinx VU9P FPGAs, specify @vu9p@.
--
-- Default: Any accelerator
--
-- 'acceleratorTotalMemoryMiB', 'instanceRequirements_acceleratorTotalMemoryMiB' - The minimum and maximum total memory size for the accelerators on an
-- instance type, in MiB.
--
-- Default: No minimum or maximum limits
--
-- 'acceleratorTypes', 'instanceRequirements_acceleratorTypes' - Lists the accelerator types that must be on an instance type.
--
-- -   For instance types with GPU accelerators, specify @gpu@.
--
-- -   For instance types with FPGA accelerators, specify @fpga@.
--
-- -   For instance types with inference accelerators, specify @inference@.
--
-- Default: Any accelerator type
--
-- 'allowedInstanceTypes', 'instanceRequirements_allowedInstanceTypes' - The instance types to apply your specified attributes against. All other
-- instance types are ignored, even if they match your specified
-- attributes.
--
-- You can use strings with one or more wild cards, represented by an
-- asterisk (@*@), to allow an instance type, size, or generation. The
-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
--
-- For example, if you specify @c5*@, Amazon EC2 Auto Scaling will allow
-- the entire C5 instance family, which includes all C5a and C5n instance
-- types. If you specify @m5a.*@, Amazon EC2 Auto Scaling will allow all
-- the M5a instance types, but not the M5n instance types.
--
-- If you specify @AllowedInstanceTypes@, you can\'t specify
-- @ExcludedInstanceTypes@.
--
-- Default: All instance types
--
-- 'bareMetal', 'instanceRequirements_bareMetal' - Indicates whether bare metal instance types are included, excluded, or
-- required.
--
-- Default: @excluded@
--
-- 'baselineEbsBandwidthMbps', 'instanceRequirements_baselineEbsBandwidthMbps' - The minimum and maximum baseline bandwidth performance for an instance
-- type, in Mbps. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: No minimum or maximum limits
--
-- 'burstablePerformance', 'instanceRequirements_burstablePerformance' - Indicates whether burstable performance instance types are included,
-- excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @excluded@
--
-- 'cpuManufacturers', 'instanceRequirements_cpuManufacturers' - Lists which specific CPU manufacturers to include.
--
-- -   For instance types with Intel CPUs, specify @intel@.
--
-- -   For instance types with AMD CPUs, specify @amd@.
--
-- -   For instance types with Amazon Web Services CPUs, specify
--     @amazon-web-services@.
--
-- Don\'t confuse the CPU hardware manufacturer with the CPU hardware
-- architecture. Instances will be launched with a compatible CPU
-- architecture based on the Amazon Machine Image (AMI) that you specify in
-- your launch template.
--
-- Default: Any manufacturer
--
-- 'excludedInstanceTypes', 'instanceRequirements_excludedInstanceTypes' - The instance types to exclude. You can use strings with one or more wild
-- cards, represented by an asterisk (@*@), to exclude an instance family,
-- type, size, or generation. The following are examples: @m5.8xlarge@,
-- @c5*.*@, @m5a.*@, @r*@, @*3*@.
--
-- For example, if you specify @c5*@, you are excluding the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 Auto Scaling will exclude all the M5a
-- instance types, but not the M5n instance types.
--
-- If you specify @ExcludedInstanceTypes@, you can\'t specify
-- @AllowedInstanceTypes@.
--
-- Default: No excluded instance types
--
-- 'instanceGenerations', 'instanceRequirements_instanceGenerations' - Indicates whether current or previous generation instance types are
-- included.
--
-- -   For current generation instance types, specify @current@. The
--     current generation includes EC2 instance types currently recommended
--     for use. This typically includes the latest two to three generations
--     in each instance family. For more information, see
--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
--     in the /Amazon EC2 User Guide for Linux Instances/.
--
-- -   For previous generation instance types, specify @previous@.
--
-- Default: Any current or previous generation
--
-- 'localStorage', 'instanceRequirements_localStorage' - Indicates whether instance types with instance store volumes are
-- included, excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @included@
--
-- 'localStorageTypes', 'instanceRequirements_localStorageTypes' - Indicates the type of local storage that is required.
--
-- -   For instance types with hard disk drive (HDD) storage, specify
--     @hdd@.
--
-- -   For instance types with solid state drive (SSD) storage, specify
--     @ssd@.
--
-- Default: Any local storage type
--
-- 'memoryGiBPerVCpu', 'instanceRequirements_memoryGiBPerVCpu' - The minimum and maximum amount of memory per vCPU for an instance type,
-- in GiB.
--
-- Default: No minimum or maximum limits
--
-- 'networkBandwidthGbps', 'instanceRequirements_networkBandwidthGbps' - The minimum and maximum amount of network bandwidth, in gigabits per
-- second (Gbps).
--
-- Default: No minimum or maximum limits
--
-- 'networkInterfaceCount', 'instanceRequirements_networkInterfaceCount' - The minimum and maximum number of network interfaces for an instance
-- type.
--
-- Default: No minimum or maximum limits
--
-- 'onDemandMaxPricePercentageOverLowestPrice', 'instanceRequirements_onDemandMaxPricePercentageOverLowestPrice' - The price protection threshold for On-Demand Instances. This is the
-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
-- higher than the least expensive current generation M, C, or R instance
-- type with your specified attributes. When Amazon EC2 Auto Scaling
-- selects instance types with your attributes, we will exclude instance
-- types whose price is higher than your threshold. The parameter accepts
-- an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To
-- turn off price protection, specify a high value, such as @999999@.
--
-- If you set @DesiredCapacityType@ to @vcpu@ or @memory-mib@, the price
-- protection threshold is applied based on the per vCPU or per memory
-- price instead of the per instance price.
--
-- Default: @20@
--
-- 'requireHibernateSupport', 'instanceRequirements_requireHibernateSupport' - Indicates whether instance types must provide On-Demand Instance
-- hibernation support.
--
-- Default: @false@
--
-- 'spotMaxPricePercentageOverLowestPrice', 'instanceRequirements_spotMaxPricePercentageOverLowestPrice' - The price protection threshold for Spot Instances. This is the maximum
-- you’ll pay for a Spot Instance, expressed as a percentage higher than
-- the least expensive current generation M, C, or R instance type with
-- your specified attributes. When Amazon EC2 Auto Scaling selects instance
-- types with your attributes, we will exclude instance types whose price
-- is higher than your threshold. The parameter accepts an integer, which
-- Amazon EC2 Auto Scaling interprets as a percentage. To turn off price
-- protection, specify a high value, such as @999999@.
--
-- If you set @DesiredCapacityType@ to @vcpu@ or @memory-mib@, the price
-- protection threshold is applied based on the per vCPU or per memory
-- price instead of the per instance price.
--
-- Default: @100@
--
-- 'totalLocalStorageGB', 'instanceRequirements_totalLocalStorageGB' - The minimum and maximum total local storage size for an instance type,
-- in GB.
--
-- Default: No minimum or maximum limits
--
-- 'vCpuCount', 'instanceRequirements_vCpuCount' - The minimum and maximum number of vCPUs for an instance type.
--
-- 'memoryMiB', 'instanceRequirements_memoryMiB' - The minimum and maximum instance memory size for an instance type, in
-- MiB.
newInstanceRequirements ::
  -- | 'vCpuCount'
  VCpuCountRequest ->
  -- | 'memoryMiB'
  MemoryMiBRequest ->
  InstanceRequirements
newInstanceRequirements pVCpuCount_ pMemoryMiB_ =
  InstanceRequirements'
    { acceleratorCount =
        Prelude.Nothing,
      acceleratorManufacturers = Prelude.Nothing,
      acceleratorNames = Prelude.Nothing,
      acceleratorTotalMemoryMiB = Prelude.Nothing,
      acceleratorTypes = Prelude.Nothing,
      allowedInstanceTypes = Prelude.Nothing,
      bareMetal = Prelude.Nothing,
      baselineEbsBandwidthMbps = Prelude.Nothing,
      burstablePerformance = Prelude.Nothing,
      cpuManufacturers = Prelude.Nothing,
      excludedInstanceTypes = Prelude.Nothing,
      instanceGenerations = Prelude.Nothing,
      localStorage = Prelude.Nothing,
      localStorageTypes = Prelude.Nothing,
      memoryGiBPerVCpu = Prelude.Nothing,
      networkBandwidthGbps = Prelude.Nothing,
      networkInterfaceCount = Prelude.Nothing,
      onDemandMaxPricePercentageOverLowestPrice =
        Prelude.Nothing,
      requireHibernateSupport = Prelude.Nothing,
      spotMaxPricePercentageOverLowestPrice =
        Prelude.Nothing,
      totalLocalStorageGB = Prelude.Nothing,
      vCpuCount = pVCpuCount_,
      memoryMiB = pMemoryMiB_
    }

-- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
-- Web Services Inferentia chips) for an instance type.
--
-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
--
-- Default: No minimum or maximum limits
instanceRequirements_acceleratorCount :: Lens.Lens' InstanceRequirements (Prelude.Maybe AcceleratorCountRequest)
instanceRequirements_acceleratorCount = Lens.lens (\InstanceRequirements' {acceleratorCount} -> acceleratorCount) (\s@InstanceRequirements' {} a -> s {acceleratorCount = a} :: InstanceRequirements)

-- | Indicates whether instance types must have accelerators by specific
-- manufacturers.
--
-- -   For instance types with NVIDIA devices, specify @nvidia@.
--
-- -   For instance types with AMD devices, specify @amd@.
--
-- -   For instance types with Amazon Web Services devices, specify
--     @amazon-web-services@.
--
-- -   For instance types with Xilinx devices, specify @xilinx@.
--
-- Default: Any manufacturer
instanceRequirements_acceleratorManufacturers :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorManufacturer])
instanceRequirements_acceleratorManufacturers = Lens.lens (\InstanceRequirements' {acceleratorManufacturers} -> acceleratorManufacturers) (\s@InstanceRequirements' {} a -> s {acceleratorManufacturers = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | Lists the accelerators that must be on an instance type.
--
-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
--
-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
--
-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
--
-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
--
-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
--
-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
--     @radeon-pro-v520@.
--
-- -   For instance types with Xilinx VU9P FPGAs, specify @vu9p@.
--
-- Default: Any accelerator
instanceRequirements_acceleratorNames :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorName])
instanceRequirements_acceleratorNames = Lens.lens (\InstanceRequirements' {acceleratorNames} -> acceleratorNames) (\s@InstanceRequirements' {} a -> s {acceleratorNames = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | The minimum and maximum total memory size for the accelerators on an
-- instance type, in MiB.
--
-- Default: No minimum or maximum limits
instanceRequirements_acceleratorTotalMemoryMiB :: Lens.Lens' InstanceRequirements (Prelude.Maybe AcceleratorTotalMemoryMiBRequest)
instanceRequirements_acceleratorTotalMemoryMiB = Lens.lens (\InstanceRequirements' {acceleratorTotalMemoryMiB} -> acceleratorTotalMemoryMiB) (\s@InstanceRequirements' {} a -> s {acceleratorTotalMemoryMiB = a} :: InstanceRequirements)

-- | Lists the accelerator types that must be on an instance type.
--
-- -   For instance types with GPU accelerators, specify @gpu@.
--
-- -   For instance types with FPGA accelerators, specify @fpga@.
--
-- -   For instance types with inference accelerators, specify @inference@.
--
-- Default: Any accelerator type
instanceRequirements_acceleratorTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorType])
instanceRequirements_acceleratorTypes = Lens.lens (\InstanceRequirements' {acceleratorTypes} -> acceleratorTypes) (\s@InstanceRequirements' {} a -> s {acceleratorTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | The instance types to apply your specified attributes against. All other
-- instance types are ignored, even if they match your specified
-- attributes.
--
-- You can use strings with one or more wild cards, represented by an
-- asterisk (@*@), to allow an instance type, size, or generation. The
-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
--
-- For example, if you specify @c5*@, Amazon EC2 Auto Scaling will allow
-- the entire C5 instance family, which includes all C5a and C5n instance
-- types. If you specify @m5a.*@, Amazon EC2 Auto Scaling will allow all
-- the M5a instance types, but not the M5n instance types.
--
-- If you specify @AllowedInstanceTypes@, you can\'t specify
-- @ExcludedInstanceTypes@.
--
-- Default: All instance types
instanceRequirements_allowedInstanceTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [Prelude.Text])
instanceRequirements_allowedInstanceTypes = Lens.lens (\InstanceRequirements' {allowedInstanceTypes} -> allowedInstanceTypes) (\s@InstanceRequirements' {} a -> s {allowedInstanceTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | Indicates whether bare metal instance types are included, excluded, or
-- required.
--
-- Default: @excluded@
instanceRequirements_bareMetal :: Lens.Lens' InstanceRequirements (Prelude.Maybe BareMetal)
instanceRequirements_bareMetal = Lens.lens (\InstanceRequirements' {bareMetal} -> bareMetal) (\s@InstanceRequirements' {} a -> s {bareMetal = a} :: InstanceRequirements)

-- | The minimum and maximum baseline bandwidth performance for an instance
-- type, in Mbps. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: No minimum or maximum limits
instanceRequirements_baselineEbsBandwidthMbps :: Lens.Lens' InstanceRequirements (Prelude.Maybe BaselineEbsBandwidthMbpsRequest)
instanceRequirements_baselineEbsBandwidthMbps = Lens.lens (\InstanceRequirements' {baselineEbsBandwidthMbps} -> baselineEbsBandwidthMbps) (\s@InstanceRequirements' {} a -> s {baselineEbsBandwidthMbps = a} :: InstanceRequirements)

-- | Indicates whether burstable performance instance types are included,
-- excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @excluded@
instanceRequirements_burstablePerformance :: Lens.Lens' InstanceRequirements (Prelude.Maybe BurstablePerformance)
instanceRequirements_burstablePerformance = Lens.lens (\InstanceRequirements' {burstablePerformance} -> burstablePerformance) (\s@InstanceRequirements' {} a -> s {burstablePerformance = a} :: InstanceRequirements)

-- | Lists which specific CPU manufacturers to include.
--
-- -   For instance types with Intel CPUs, specify @intel@.
--
-- -   For instance types with AMD CPUs, specify @amd@.
--
-- -   For instance types with Amazon Web Services CPUs, specify
--     @amazon-web-services@.
--
-- Don\'t confuse the CPU hardware manufacturer with the CPU hardware
-- architecture. Instances will be launched with a compatible CPU
-- architecture based on the Amazon Machine Image (AMI) that you specify in
-- your launch template.
--
-- Default: Any manufacturer
instanceRequirements_cpuManufacturers :: Lens.Lens' InstanceRequirements (Prelude.Maybe [CpuManufacturer])
instanceRequirements_cpuManufacturers = Lens.lens (\InstanceRequirements' {cpuManufacturers} -> cpuManufacturers) (\s@InstanceRequirements' {} a -> s {cpuManufacturers = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | The instance types to exclude. You can use strings with one or more wild
-- cards, represented by an asterisk (@*@), to exclude an instance family,
-- type, size, or generation. The following are examples: @m5.8xlarge@,
-- @c5*.*@, @m5a.*@, @r*@, @*3*@.
--
-- For example, if you specify @c5*@, you are excluding the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 Auto Scaling will exclude all the M5a
-- instance types, but not the M5n instance types.
--
-- If you specify @ExcludedInstanceTypes@, you can\'t specify
-- @AllowedInstanceTypes@.
--
-- Default: No excluded instance types
instanceRequirements_excludedInstanceTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [Prelude.Text])
instanceRequirements_excludedInstanceTypes = Lens.lens (\InstanceRequirements' {excludedInstanceTypes} -> excludedInstanceTypes) (\s@InstanceRequirements' {} a -> s {excludedInstanceTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | Indicates whether current or previous generation instance types are
-- included.
--
-- -   For current generation instance types, specify @current@. The
--     current generation includes EC2 instance types currently recommended
--     for use. This typically includes the latest two to three generations
--     in each instance family. For more information, see
--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
--     in the /Amazon EC2 User Guide for Linux Instances/.
--
-- -   For previous generation instance types, specify @previous@.
--
-- Default: Any current or previous generation
instanceRequirements_instanceGenerations :: Lens.Lens' InstanceRequirements (Prelude.Maybe [InstanceGeneration])
instanceRequirements_instanceGenerations = Lens.lens (\InstanceRequirements' {instanceGenerations} -> instanceGenerations) (\s@InstanceRequirements' {} a -> s {instanceGenerations = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | Indicates whether instance types with instance store volumes are
-- included, excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @included@
instanceRequirements_localStorage :: Lens.Lens' InstanceRequirements (Prelude.Maybe LocalStorage)
instanceRequirements_localStorage = Lens.lens (\InstanceRequirements' {localStorage} -> localStorage) (\s@InstanceRequirements' {} a -> s {localStorage = a} :: InstanceRequirements)

-- | Indicates the type of local storage that is required.
--
-- -   For instance types with hard disk drive (HDD) storage, specify
--     @hdd@.
--
-- -   For instance types with solid state drive (SSD) storage, specify
--     @ssd@.
--
-- Default: Any local storage type
instanceRequirements_localStorageTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [LocalStorageType])
instanceRequirements_localStorageTypes = Lens.lens (\InstanceRequirements' {localStorageTypes} -> localStorageTypes) (\s@InstanceRequirements' {} a -> s {localStorageTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced

-- | The minimum and maximum amount of memory per vCPU for an instance type,
-- in GiB.
--
-- Default: No minimum or maximum limits
instanceRequirements_memoryGiBPerVCpu :: Lens.Lens' InstanceRequirements (Prelude.Maybe MemoryGiBPerVCpuRequest)
instanceRequirements_memoryGiBPerVCpu = Lens.lens (\InstanceRequirements' {memoryGiBPerVCpu} -> memoryGiBPerVCpu) (\s@InstanceRequirements' {} a -> s {memoryGiBPerVCpu = a} :: InstanceRequirements)

-- | The minimum and maximum amount of network bandwidth, in gigabits per
-- second (Gbps).
--
-- Default: No minimum or maximum limits
instanceRequirements_networkBandwidthGbps :: Lens.Lens' InstanceRequirements (Prelude.Maybe NetworkBandwidthGbpsRequest)
instanceRequirements_networkBandwidthGbps = Lens.lens (\InstanceRequirements' {networkBandwidthGbps} -> networkBandwidthGbps) (\s@InstanceRequirements' {} a -> s {networkBandwidthGbps = a} :: InstanceRequirements)

-- | The minimum and maximum number of network interfaces for an instance
-- type.
--
-- Default: No minimum or maximum limits
instanceRequirements_networkInterfaceCount :: Lens.Lens' InstanceRequirements (Prelude.Maybe NetworkInterfaceCountRequest)
instanceRequirements_networkInterfaceCount = Lens.lens (\InstanceRequirements' {networkInterfaceCount} -> networkInterfaceCount) (\s@InstanceRequirements' {} a -> s {networkInterfaceCount = a} :: InstanceRequirements)

-- | The price protection threshold for On-Demand Instances. This is the
-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
-- higher than the least expensive current generation M, C, or R instance
-- type with your specified attributes. When Amazon EC2 Auto Scaling
-- selects instance types with your attributes, we will exclude instance
-- types whose price is higher than your threshold. The parameter accepts
-- an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To
-- turn off price protection, specify a high value, such as @999999@.
--
-- If you set @DesiredCapacityType@ to @vcpu@ or @memory-mib@, the price
-- protection threshold is applied based on the per vCPU or per memory
-- price instead of the per instance price.
--
-- Default: @20@
instanceRequirements_onDemandMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Natural)
instanceRequirements_onDemandMaxPricePercentageOverLowestPrice = Lens.lens (\InstanceRequirements' {onDemandMaxPricePercentageOverLowestPrice} -> onDemandMaxPricePercentageOverLowestPrice) (\s@InstanceRequirements' {} a -> s {onDemandMaxPricePercentageOverLowestPrice = a} :: InstanceRequirements)

-- | Indicates whether instance types must provide On-Demand Instance
-- hibernation support.
--
-- Default: @false@
instanceRequirements_requireHibernateSupport :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Bool)
instanceRequirements_requireHibernateSupport = Lens.lens (\InstanceRequirements' {requireHibernateSupport} -> requireHibernateSupport) (\s@InstanceRequirements' {} a -> s {requireHibernateSupport = a} :: InstanceRequirements)

-- | The price protection threshold for Spot Instances. This is the maximum
-- you’ll pay for a Spot Instance, expressed as a percentage higher than
-- the least expensive current generation M, C, or R instance type with
-- your specified attributes. When Amazon EC2 Auto Scaling selects instance
-- types with your attributes, we will exclude instance types whose price
-- is higher than your threshold. The parameter accepts an integer, which
-- Amazon EC2 Auto Scaling interprets as a percentage. To turn off price
-- protection, specify a high value, such as @999999@.
--
-- If you set @DesiredCapacityType@ to @vcpu@ or @memory-mib@, the price
-- protection threshold is applied based on the per vCPU or per memory
-- price instead of the per instance price.
--
-- Default: @100@
instanceRequirements_spotMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Natural)
instanceRequirements_spotMaxPricePercentageOverLowestPrice = Lens.lens (\InstanceRequirements' {spotMaxPricePercentageOverLowestPrice} -> spotMaxPricePercentageOverLowestPrice) (\s@InstanceRequirements' {} a -> s {spotMaxPricePercentageOverLowestPrice = a} :: InstanceRequirements)

-- | The minimum and maximum total local storage size for an instance type,
-- in GB.
--
-- Default: No minimum or maximum limits
instanceRequirements_totalLocalStorageGB :: Lens.Lens' InstanceRequirements (Prelude.Maybe TotalLocalStorageGBRequest)
instanceRequirements_totalLocalStorageGB = Lens.lens (\InstanceRequirements' {totalLocalStorageGB} -> totalLocalStorageGB) (\s@InstanceRequirements' {} a -> s {totalLocalStorageGB = a} :: InstanceRequirements)

-- | The minimum and maximum number of vCPUs for an instance type.
instanceRequirements_vCpuCount :: Lens.Lens' InstanceRequirements VCpuCountRequest
instanceRequirements_vCpuCount = Lens.lens (\InstanceRequirements' {vCpuCount} -> vCpuCount) (\s@InstanceRequirements' {} a -> s {vCpuCount = a} :: InstanceRequirements)

-- | The minimum and maximum instance memory size for an instance type, in
-- MiB.
instanceRequirements_memoryMiB :: Lens.Lens' InstanceRequirements MemoryMiBRequest
instanceRequirements_memoryMiB = Lens.lens (\InstanceRequirements' {memoryMiB} -> memoryMiB) (\s@InstanceRequirements' {} a -> s {memoryMiB = a} :: InstanceRequirements)

instance Data.FromXML InstanceRequirements where
  parseXML x =
    InstanceRequirements'
      Prelude.<$> (x Data..@? "AcceleratorCount")
      Prelude.<*> ( x
                      Data..@? "AcceleratorManufacturers"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> ( x
                      Data..@? "AcceleratorNames"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> (x Data..@? "AcceleratorTotalMemoryMiB")
      Prelude.<*> ( x
                      Data..@? "AcceleratorTypes"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> ( x
                      Data..@? "AllowedInstanceTypes"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> (x Data..@? "BareMetal")
      Prelude.<*> (x Data..@? "BaselineEbsBandwidthMbps")
      Prelude.<*> (x Data..@? "BurstablePerformance")
      Prelude.<*> ( x
                      Data..@? "CpuManufacturers"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> ( x
                      Data..@? "ExcludedInstanceTypes"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> ( x
                      Data..@? "InstanceGenerations"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> (x Data..@? "LocalStorage")
      Prelude.<*> ( x
                      Data..@? "LocalStorageTypes"
                      Core..!@ Prelude.mempty
                      Prelude.>>= Core.may (Data.parseXMLList "member")
                  )
      Prelude.<*> (x Data..@? "MemoryGiBPerVCpu")
      Prelude.<*> (x Data..@? "NetworkBandwidthGbps")
      Prelude.<*> (x Data..@? "NetworkInterfaceCount")
      Prelude.<*> ( x
                      Data..@? "OnDemandMaxPricePercentageOverLowestPrice"
                  )
      Prelude.<*> (x Data..@? "RequireHibernateSupport")
      Prelude.<*> (x Data..@? "SpotMaxPricePercentageOverLowestPrice")
      Prelude.<*> (x Data..@? "TotalLocalStorageGB")
      Prelude.<*> (x Data..@ "VCpuCount")
      Prelude.<*> (x Data..@ "MemoryMiB")

instance Prelude.Hashable InstanceRequirements where
  hashWithSalt _salt InstanceRequirements' {..} =
    _salt
      `Prelude.hashWithSalt` acceleratorCount
      `Prelude.hashWithSalt` acceleratorManufacturers
      `Prelude.hashWithSalt` acceleratorNames
      `Prelude.hashWithSalt` acceleratorTotalMemoryMiB
      `Prelude.hashWithSalt` acceleratorTypes
      `Prelude.hashWithSalt` allowedInstanceTypes
      `Prelude.hashWithSalt` bareMetal
      `Prelude.hashWithSalt` baselineEbsBandwidthMbps
      `Prelude.hashWithSalt` burstablePerformance
      `Prelude.hashWithSalt` cpuManufacturers
      `Prelude.hashWithSalt` excludedInstanceTypes
      `Prelude.hashWithSalt` instanceGenerations
      `Prelude.hashWithSalt` localStorage
      `Prelude.hashWithSalt` localStorageTypes
      `Prelude.hashWithSalt` memoryGiBPerVCpu
      `Prelude.hashWithSalt` networkBandwidthGbps
      `Prelude.hashWithSalt` networkInterfaceCount
      `Prelude.hashWithSalt` onDemandMaxPricePercentageOverLowestPrice
      `Prelude.hashWithSalt` requireHibernateSupport
      `Prelude.hashWithSalt` spotMaxPricePercentageOverLowestPrice
      `Prelude.hashWithSalt` totalLocalStorageGB
      `Prelude.hashWithSalt` vCpuCount
      `Prelude.hashWithSalt` memoryMiB

instance Prelude.NFData InstanceRequirements where
  rnf InstanceRequirements' {..} =
    Prelude.rnf acceleratorCount
      `Prelude.seq` Prelude.rnf acceleratorManufacturers
      `Prelude.seq` Prelude.rnf acceleratorNames
      `Prelude.seq` Prelude.rnf acceleratorTotalMemoryMiB
      `Prelude.seq` Prelude.rnf acceleratorTypes
      `Prelude.seq` Prelude.rnf allowedInstanceTypes
      `Prelude.seq` Prelude.rnf bareMetal
      `Prelude.seq` Prelude.rnf baselineEbsBandwidthMbps
      `Prelude.seq` Prelude.rnf burstablePerformance
      `Prelude.seq` Prelude.rnf cpuManufacturers
      `Prelude.seq` Prelude.rnf excludedInstanceTypes
      `Prelude.seq` Prelude.rnf instanceGenerations
      `Prelude.seq` Prelude.rnf localStorage
      `Prelude.seq` Prelude.rnf localStorageTypes
      `Prelude.seq` Prelude.rnf memoryGiBPerVCpu
      `Prelude.seq` Prelude.rnf networkBandwidthGbps
      `Prelude.seq` Prelude.rnf networkInterfaceCount
      `Prelude.seq` Prelude.rnf
        onDemandMaxPricePercentageOverLowestPrice
      `Prelude.seq` Prelude.rnf
        requireHibernateSupport
      `Prelude.seq` Prelude.rnf
        spotMaxPricePercentageOverLowestPrice
      `Prelude.seq` Prelude.rnf
        totalLocalStorageGB
      `Prelude.seq` Prelude.rnf vCpuCount
      `Prelude.seq` Prelude.rnf memoryMiB

instance Data.ToQuery InstanceRequirements where
  toQuery InstanceRequirements' {..} =
    Prelude.mconcat
      [ "AcceleratorCount" Data.=: acceleratorCount,
        "AcceleratorManufacturers"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> acceleratorManufacturers
            ),
        "AcceleratorNames"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> acceleratorNames
            ),
        "AcceleratorTotalMemoryMiB"
          Data.=: acceleratorTotalMemoryMiB,
        "AcceleratorTypes"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> acceleratorTypes
            ),
        "AllowedInstanceTypes"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> allowedInstanceTypes
            ),
        "BareMetal" Data.=: bareMetal,
        "BaselineEbsBandwidthMbps"
          Data.=: baselineEbsBandwidthMbps,
        "BurstablePerformance" Data.=: burstablePerformance,
        "CpuManufacturers"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> cpuManufacturers
            ),
        "ExcludedInstanceTypes"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> excludedInstanceTypes
            ),
        "InstanceGenerations"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> instanceGenerations
            ),
        "LocalStorage" Data.=: localStorage,
        "LocalStorageTypes"
          Data.=: Data.toQuery
            ( Data.toQueryList "member"
                Prelude.<$> localStorageTypes
            ),
        "MemoryGiBPerVCpu" Data.=: memoryGiBPerVCpu,
        "NetworkBandwidthGbps" Data.=: networkBandwidthGbps,
        "NetworkInterfaceCount"
          Data.=: networkInterfaceCount,
        "OnDemandMaxPricePercentageOverLowestPrice"
          Data.=: onDemandMaxPricePercentageOverLowestPrice,
        "RequireHibernateSupport"
          Data.=: requireHibernateSupport,
        "SpotMaxPricePercentageOverLowestPrice"
          Data.=: spotMaxPricePercentageOverLowestPrice,
        "TotalLocalStorageGB" Data.=: totalLocalStorageGB,
        "VCpuCount" Data.=: vCpuCount,
        "MemoryMiB" Data.=: memoryMiB
      ]