{-# 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.Batch.Types.ResourceRequirement -- Copyright : (c) 2013-2021 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay <brendan.g.hay+amazonka@gmail.com> -- Stability : auto-generated -- Portability : non-portable (GHC extensions) module Amazonka.Batch.Types.ResourceRequirement where import Amazonka.Batch.Types.ResourceType import qualified Amazonka.Core as Core import qualified Amazonka.Lens as Lens import qualified Amazonka.Prelude as Prelude -- | The type and amount of a resource to assign to a container. The -- supported resources include @GPU@, @MEMORY@, and @VCPU@. -- -- /See:/ 'newResourceRequirement' smart constructor. data ResourceRequirement = ResourceRequirement' { -- | The quantity of the specified resource to reserve for the container. The -- values vary based on the @type@ specified. -- -- [type=\"GPU\"] -- The number of physical GPUs to reserve for the container. The number -- of GPUs reserved for all containers in a job shouldn\'t exceed the -- number of available GPUs on the compute resource that the job is -- launched on. -- -- GPUs are not available for jobs that are running on Fargate -- resources. -- -- [type=\"MEMORY\"] -- The memory hard limit (in MiB) present to the container. This -- parameter is supported for jobs that are running on EC2 resources. -- If your container attempts to exceed the memory specified, the -- container is terminated. This parameter maps to @Memory@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--memory@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. You must -- specify at least 4 MiB of memory for a job. This is required but can -- be specified in several places for multi-node parallel (MNP) jobs. -- It must be specified for each node at least once. This parameter -- maps to @Memory@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--memory@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. -- -- If you\'re trying to maximize your resource utilization by providing -- your jobs as much memory as possible for a particular instance type, -- see -- <https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html Memory Management> -- in the /Batch User Guide/. -- -- For jobs that are running on Fargate resources, then @value@ is the -- hard limit (in MiB), and must match one of the supported values and -- the @VCPU@ values must be one of the values supported for that -- memory value. -- -- [value = 512] -- @VCPU@ = 0.25 -- -- [value = 1024] -- @VCPU@ = 0.25 or 0.5 -- -- [value = 2048] -- @VCPU@ = 0.25, 0.5, or 1 -- -- [value = 3072] -- @VCPU@ = 0.5, or 1 -- -- [value = 4096] -- @VCPU@ = 0.5, 1, or 2 -- -- [value = 5120, 6144, or 7168] -- @VCPU@ = 1 or 2 -- -- [value = 8192] -- @VCPU@ = 1, 2, or 4 -- -- [value = 9216, 10240, 11264, 12288, 13312, 14336, 15360, or 16384] -- @VCPU@ = 2 or 4 -- -- [value = 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, 25600, 26624, 27648, 28672, 29696, or 30720] -- @VCPU@ = 4 -- -- [type=\"VCPU\"] -- The number of vCPUs reserved for the container. This parameter maps -- to @CpuShares@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--cpu-shares@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. Each -- vCPU is equivalent to 1,024 CPU shares. For EC2 resources, you must -- specify at least one vCPU. This is required but can be specified in -- several places; it must be specified for each node at least once. -- -- For jobs that are running on Fargate resources, then @value@ must -- match one of the supported values and the @MEMORY@ values must be -- one of the values supported for that VCPU value. The supported -- values are 0.25, 0.5, 1, 2, and 4 -- -- [value = 0.25] -- @MEMORY@ = 512, 1024, or 2048 -- -- [value = 0.5] -- @MEMORY@ = 1024, 2048, 3072, or 4096 -- -- [value = 1] -- @MEMORY@ = 2048, 3072, 4096, 5120, 6144, 7168, or 8192 -- -- [value = 2] -- @MEMORY@ = 4096, 5120, 6144, 7168, 8192, 9216, 10240, 11264, -- 12288, 13312, 14336, 15360, or 16384 -- -- [value = 4] -- @MEMORY@ = 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, -- 16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, -- 25600, 26624, 27648, 28672, 29696, or 30720 ResourceRequirement -> Text value :: Prelude.Text, -- | The type of resource to assign to a container. The supported resources -- include @GPU@, @MEMORY@, and @VCPU@. ResourceRequirement -> ResourceType type' :: ResourceType } deriving (ResourceRequirement -> ResourceRequirement -> Bool (ResourceRequirement -> ResourceRequirement -> Bool) -> (ResourceRequirement -> ResourceRequirement -> Bool) -> Eq ResourceRequirement forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ResourceRequirement -> ResourceRequirement -> Bool $c/= :: ResourceRequirement -> ResourceRequirement -> Bool == :: ResourceRequirement -> ResourceRequirement -> Bool $c== :: ResourceRequirement -> ResourceRequirement -> Bool Prelude.Eq, ReadPrec [ResourceRequirement] ReadPrec ResourceRequirement Int -> ReadS ResourceRequirement ReadS [ResourceRequirement] (Int -> ReadS ResourceRequirement) -> ReadS [ResourceRequirement] -> ReadPrec ResourceRequirement -> ReadPrec [ResourceRequirement] -> Read ResourceRequirement forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [ResourceRequirement] $creadListPrec :: ReadPrec [ResourceRequirement] readPrec :: ReadPrec ResourceRequirement $creadPrec :: ReadPrec ResourceRequirement readList :: ReadS [ResourceRequirement] $creadList :: ReadS [ResourceRequirement] readsPrec :: Int -> ReadS ResourceRequirement $creadsPrec :: Int -> ReadS ResourceRequirement Prelude.Read, Int -> ResourceRequirement -> ShowS [ResourceRequirement] -> ShowS ResourceRequirement -> String (Int -> ResourceRequirement -> ShowS) -> (ResourceRequirement -> String) -> ([ResourceRequirement] -> ShowS) -> Show ResourceRequirement forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ResourceRequirement] -> ShowS $cshowList :: [ResourceRequirement] -> ShowS show :: ResourceRequirement -> String $cshow :: ResourceRequirement -> String showsPrec :: Int -> ResourceRequirement -> ShowS $cshowsPrec :: Int -> ResourceRequirement -> ShowS Prelude.Show, (forall x. ResourceRequirement -> Rep ResourceRequirement x) -> (forall x. Rep ResourceRequirement x -> ResourceRequirement) -> Generic ResourceRequirement forall x. Rep ResourceRequirement x -> ResourceRequirement forall x. ResourceRequirement -> Rep ResourceRequirement x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep ResourceRequirement x -> ResourceRequirement $cfrom :: forall x. ResourceRequirement -> Rep ResourceRequirement x Prelude.Generic) -- | -- Create a value of 'ResourceRequirement' 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: -- -- 'value', 'resourceRequirement_value' - The quantity of the specified resource to reserve for the container. The -- values vary based on the @type@ specified. -- -- [type=\"GPU\"] -- The number of physical GPUs to reserve for the container. The number -- of GPUs reserved for all containers in a job shouldn\'t exceed the -- number of available GPUs on the compute resource that the job is -- launched on. -- -- GPUs are not available for jobs that are running on Fargate -- resources. -- -- [type=\"MEMORY\"] -- The memory hard limit (in MiB) present to the container. This -- parameter is supported for jobs that are running on EC2 resources. -- If your container attempts to exceed the memory specified, the -- container is terminated. This parameter maps to @Memory@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--memory@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. You must -- specify at least 4 MiB of memory for a job. This is required but can -- be specified in several places for multi-node parallel (MNP) jobs. -- It must be specified for each node at least once. This parameter -- maps to @Memory@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--memory@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. -- -- If you\'re trying to maximize your resource utilization by providing -- your jobs as much memory as possible for a particular instance type, -- see -- <https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html Memory Management> -- in the /Batch User Guide/. -- -- For jobs that are running on Fargate resources, then @value@ is the -- hard limit (in MiB), and must match one of the supported values and -- the @VCPU@ values must be one of the values supported for that -- memory value. -- -- [value = 512] -- @VCPU@ = 0.25 -- -- [value = 1024] -- @VCPU@ = 0.25 or 0.5 -- -- [value = 2048] -- @VCPU@ = 0.25, 0.5, or 1 -- -- [value = 3072] -- @VCPU@ = 0.5, or 1 -- -- [value = 4096] -- @VCPU@ = 0.5, 1, or 2 -- -- [value = 5120, 6144, or 7168] -- @VCPU@ = 1 or 2 -- -- [value = 8192] -- @VCPU@ = 1, 2, or 4 -- -- [value = 9216, 10240, 11264, 12288, 13312, 14336, 15360, or 16384] -- @VCPU@ = 2 or 4 -- -- [value = 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, 25600, 26624, 27648, 28672, 29696, or 30720] -- @VCPU@ = 4 -- -- [type=\"VCPU\"] -- The number of vCPUs reserved for the container. This parameter maps -- to @CpuShares@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--cpu-shares@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. Each -- vCPU is equivalent to 1,024 CPU shares. For EC2 resources, you must -- specify at least one vCPU. This is required but can be specified in -- several places; it must be specified for each node at least once. -- -- For jobs that are running on Fargate resources, then @value@ must -- match one of the supported values and the @MEMORY@ values must be -- one of the values supported for that VCPU value. The supported -- values are 0.25, 0.5, 1, 2, and 4 -- -- [value = 0.25] -- @MEMORY@ = 512, 1024, or 2048 -- -- [value = 0.5] -- @MEMORY@ = 1024, 2048, 3072, or 4096 -- -- [value = 1] -- @MEMORY@ = 2048, 3072, 4096, 5120, 6144, 7168, or 8192 -- -- [value = 2] -- @MEMORY@ = 4096, 5120, 6144, 7168, 8192, 9216, 10240, 11264, -- 12288, 13312, 14336, 15360, or 16384 -- -- [value = 4] -- @MEMORY@ = 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, -- 16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, -- 25600, 26624, 27648, 28672, 29696, or 30720 -- -- 'type'', 'resourceRequirement_type' - The type of resource to assign to a container. The supported resources -- include @GPU@, @MEMORY@, and @VCPU@. newResourceRequirement :: -- | 'value' Prelude.Text -> -- | 'type'' ResourceType -> ResourceRequirement newResourceRequirement :: Text -> ResourceType -> ResourceRequirement newResourceRequirement Text pValue_ ResourceType pType_ = ResourceRequirement' :: Text -> ResourceType -> ResourceRequirement ResourceRequirement' { $sel:value:ResourceRequirement' :: Text value = Text pValue_, $sel:type':ResourceRequirement' :: ResourceType type' = ResourceType pType_ } -- | The quantity of the specified resource to reserve for the container. The -- values vary based on the @type@ specified. -- -- [type=\"GPU\"] -- The number of physical GPUs to reserve for the container. The number -- of GPUs reserved for all containers in a job shouldn\'t exceed the -- number of available GPUs on the compute resource that the job is -- launched on. -- -- GPUs are not available for jobs that are running on Fargate -- resources. -- -- [type=\"MEMORY\"] -- The memory hard limit (in MiB) present to the container. This -- parameter is supported for jobs that are running on EC2 resources. -- If your container attempts to exceed the memory specified, the -- container is terminated. This parameter maps to @Memory@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--memory@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. You must -- specify at least 4 MiB of memory for a job. This is required but can -- be specified in several places for multi-node parallel (MNP) jobs. -- It must be specified for each node at least once. This parameter -- maps to @Memory@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--memory@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. -- -- If you\'re trying to maximize your resource utilization by providing -- your jobs as much memory as possible for a particular instance type, -- see -- <https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html Memory Management> -- in the /Batch User Guide/. -- -- For jobs that are running on Fargate resources, then @value@ is the -- hard limit (in MiB), and must match one of the supported values and -- the @VCPU@ values must be one of the values supported for that -- memory value. -- -- [value = 512] -- @VCPU@ = 0.25 -- -- [value = 1024] -- @VCPU@ = 0.25 or 0.5 -- -- [value = 2048] -- @VCPU@ = 0.25, 0.5, or 1 -- -- [value = 3072] -- @VCPU@ = 0.5, or 1 -- -- [value = 4096] -- @VCPU@ = 0.5, 1, or 2 -- -- [value = 5120, 6144, or 7168] -- @VCPU@ = 1 or 2 -- -- [value = 8192] -- @VCPU@ = 1, 2, or 4 -- -- [value = 9216, 10240, 11264, 12288, 13312, 14336, 15360, or 16384] -- @VCPU@ = 2 or 4 -- -- [value = 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, 25600, 26624, 27648, 28672, 29696, or 30720] -- @VCPU@ = 4 -- -- [type=\"VCPU\"] -- The number of vCPUs reserved for the container. This parameter maps -- to @CpuShares@ in the -- <https://docs.docker.com/engine/api/v1.23/#create-a-container Create a container> -- section of the -- <https://docs.docker.com/engine/api/v1.23/ Docker Remote API> and -- the @--cpu-shares@ option to -- <https://docs.docker.com/engine/reference/run/ docker run>. Each -- vCPU is equivalent to 1,024 CPU shares. For EC2 resources, you must -- specify at least one vCPU. This is required but can be specified in -- several places; it must be specified for each node at least once. -- -- For jobs that are running on Fargate resources, then @value@ must -- match one of the supported values and the @MEMORY@ values must be -- one of the values supported for that VCPU value. The supported -- values are 0.25, 0.5, 1, 2, and 4 -- -- [value = 0.25] -- @MEMORY@ = 512, 1024, or 2048 -- -- [value = 0.5] -- @MEMORY@ = 1024, 2048, 3072, or 4096 -- -- [value = 1] -- @MEMORY@ = 2048, 3072, 4096, 5120, 6144, 7168, or 8192 -- -- [value = 2] -- @MEMORY@ = 4096, 5120, 6144, 7168, 8192, 9216, 10240, 11264, -- 12288, 13312, 14336, 15360, or 16384 -- -- [value = 4] -- @MEMORY@ = 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, -- 16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, 24576, -- 25600, 26624, 27648, 28672, 29696, or 30720 resourceRequirement_value :: Lens.Lens' ResourceRequirement Prelude.Text resourceRequirement_value :: (Text -> f Text) -> ResourceRequirement -> f ResourceRequirement resourceRequirement_value = (ResourceRequirement -> Text) -> (ResourceRequirement -> Text -> ResourceRequirement) -> Lens ResourceRequirement ResourceRequirement Text Text forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\ResourceRequirement' {Text value :: Text $sel:value:ResourceRequirement' :: ResourceRequirement -> Text value} -> Text value) (\s :: ResourceRequirement s@ResourceRequirement' {} Text a -> ResourceRequirement s {$sel:value:ResourceRequirement' :: Text value = Text a} :: ResourceRequirement) -- | The type of resource to assign to a container. The supported resources -- include @GPU@, @MEMORY@, and @VCPU@. resourceRequirement_type :: Lens.Lens' ResourceRequirement ResourceType resourceRequirement_type :: (ResourceType -> f ResourceType) -> ResourceRequirement -> f ResourceRequirement resourceRequirement_type = (ResourceRequirement -> ResourceType) -> (ResourceRequirement -> ResourceType -> ResourceRequirement) -> Lens ResourceRequirement ResourceRequirement ResourceType ResourceType forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\ResourceRequirement' {ResourceType type' :: ResourceType $sel:type':ResourceRequirement' :: ResourceRequirement -> ResourceType type'} -> ResourceType type') (\s :: ResourceRequirement s@ResourceRequirement' {} ResourceType a -> ResourceRequirement s {$sel:type':ResourceRequirement' :: ResourceType type' = ResourceType a} :: ResourceRequirement) instance Core.FromJSON ResourceRequirement where parseJSON :: Value -> Parser ResourceRequirement parseJSON = String -> (Object -> Parser ResourceRequirement) -> Value -> Parser ResourceRequirement forall a. String -> (Object -> Parser a) -> Value -> Parser a Core.withObject String "ResourceRequirement" ( \Object x -> Text -> ResourceType -> ResourceRequirement ResourceRequirement' (Text -> ResourceType -> ResourceRequirement) -> Parser Text -> Parser (ResourceType -> ResourceRequirement) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b Prelude.<$> (Object x Object -> Text -> Parser Text forall a. FromJSON a => Object -> Text -> Parser a Core..: Text "value") Parser (ResourceType -> ResourceRequirement) -> Parser ResourceType -> Parser ResourceRequirement forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b Prelude.<*> (Object x Object -> Text -> Parser ResourceType forall a. FromJSON a => Object -> Text -> Parser a Core..: Text "type") ) instance Prelude.Hashable ResourceRequirement instance Prelude.NFData ResourceRequirement instance Core.ToJSON ResourceRequirement where toJSON :: ResourceRequirement -> Value toJSON ResourceRequirement' {Text ResourceType type' :: ResourceType value :: Text $sel:type':ResourceRequirement' :: ResourceRequirement -> ResourceType $sel:value:ResourceRequirement' :: ResourceRequirement -> Text ..} = [Pair] -> Value Core.object ( [Maybe Pair] -> [Pair] forall a. [Maybe a] -> [a] Prelude.catMaybes [ Pair -> Maybe Pair forall a. a -> Maybe a Prelude.Just (Text "value" Text -> Text -> Pair forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv Core..= Text value), Pair -> Maybe Pair forall a. a -> Maybe a Prelude.Just (Text "type" Text -> ResourceType -> Pair forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv Core..= ResourceType type') ] )