{-# 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.ECS.Types.PortMapping -- 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.ECS.Types.PortMapping where import qualified Amazonka.Core as Core import Amazonka.ECS.Types.TransportProtocol import qualified Amazonka.Lens as Lens import qualified Amazonka.Prelude as Prelude -- | Port mappings allow containers to access ports on the host container -- instance to send or receive traffic. Port mappings are specified as part -- of the container definition. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, exposed ports should be specified using @containerPort@. -- The @hostPort@ can be left blank or it must be the same value as the -- @containerPort@. -- -- You cannot expose the same container port for multiple protocols. An -- error will be returned if this is attempted -- -- After a task reaches the @RUNNING@ status, manual and automatic host and -- container port assignments are visible in the @networkBindings@ section -- of DescribeTasks API responses. -- -- /See:/ 'newPortMapping' smart constructor. data PortMapping = PortMapping' { -- | The protocol used for the port mapping. Valid values are @tcp@ and -- @udp@. The default is @tcp@. PortMapping -> Maybe TransportProtocol protocol :: Prelude.Maybe TransportProtocol, -- | The port number on the container instance to reserve for your container. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, the @hostPort@ can either be left blank or set to the same -- value as the @containerPort@. -- -- If you are using containers in a task with the @bridge@ network mode, -- you can specify a non-reserved host port for your container port -- mapping, or you can omit the @hostPort@ (or set it to @0@) while -- specifying a @containerPort@ and your container automatically receives a -- port in the ephemeral port range for your container instance operating -- system and Docker version. -- -- The default ephemeral port range for Docker version 1.6.0 and later is -- listed on the instance under -- @\/proc\/sys\/net\/ipv4\/ip_local_port_range@. If this kernel parameter -- is unavailable, the default ephemeral port range from 49153 through -- 65535 is used. Do not attempt to specify a host port in the ephemeral -- port range as these are reserved for automatic assignment. In general, -- ports below 32768 are outside of the ephemeral port range. -- -- The default ephemeral port range from 49153 through 65535 is always used -- for Docker versions before 1.6.0. -- -- The default reserved ports are 22 for SSH, the Docker ports 2375 and -- 2376, and the Amazon ECS container agent ports 51678-51680. Any host -- port that was previously specified in a running task is also reserved -- while the task is running (after a task stops, the host port is -- released). The current reserved ports are displayed in the -- @remainingResources@ of DescribeContainerInstances output. A container -- instance can have up to 100 reserved ports at a time, including the -- default reserved ports. Automatically assigned ports don\'t count toward -- the 100 reserved ports limit. PortMapping -> Maybe Int hostPort :: Prelude.Maybe Prelude.Int, -- | The port number on the container that is bound to the user-specified or -- automatically assigned host port. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, exposed ports should be specified using @containerPort@. -- -- If you are using containers in a task with the @bridge@ network mode and -- you specify a container port and not a host port, your container -- automatically receives a host port in the ephemeral port range. For more -- information, see @hostPort@. Port mappings that are automatically -- assigned in this way do not count toward the 100 reserved ports limit of -- a container instance. PortMapping -> Maybe Int containerPort :: Prelude.Maybe Prelude.Int } deriving (PortMapping -> PortMapping -> Bool (PortMapping -> PortMapping -> Bool) -> (PortMapping -> PortMapping -> Bool) -> Eq PortMapping forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: PortMapping -> PortMapping -> Bool $c/= :: PortMapping -> PortMapping -> Bool == :: PortMapping -> PortMapping -> Bool $c== :: PortMapping -> PortMapping -> Bool Prelude.Eq, ReadPrec [PortMapping] ReadPrec PortMapping Int -> ReadS PortMapping ReadS [PortMapping] (Int -> ReadS PortMapping) -> ReadS [PortMapping] -> ReadPrec PortMapping -> ReadPrec [PortMapping] -> Read PortMapping forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [PortMapping] $creadListPrec :: ReadPrec [PortMapping] readPrec :: ReadPrec PortMapping $creadPrec :: ReadPrec PortMapping readList :: ReadS [PortMapping] $creadList :: ReadS [PortMapping] readsPrec :: Int -> ReadS PortMapping $creadsPrec :: Int -> ReadS PortMapping Prelude.Read, Int -> PortMapping -> ShowS [PortMapping] -> ShowS PortMapping -> String (Int -> PortMapping -> ShowS) -> (PortMapping -> String) -> ([PortMapping] -> ShowS) -> Show PortMapping forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [PortMapping] -> ShowS $cshowList :: [PortMapping] -> ShowS show :: PortMapping -> String $cshow :: PortMapping -> String showsPrec :: Int -> PortMapping -> ShowS $cshowsPrec :: Int -> PortMapping -> ShowS Prelude.Show, (forall x. PortMapping -> Rep PortMapping x) -> (forall x. Rep PortMapping x -> PortMapping) -> Generic PortMapping forall x. Rep PortMapping x -> PortMapping forall x. PortMapping -> Rep PortMapping x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep PortMapping x -> PortMapping $cfrom :: forall x. PortMapping -> Rep PortMapping x Prelude.Generic) -- | -- Create a value of 'PortMapping' 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: -- -- 'protocol', 'portMapping_protocol' - The protocol used for the port mapping. Valid values are @tcp@ and -- @udp@. The default is @tcp@. -- -- 'hostPort', 'portMapping_hostPort' - The port number on the container instance to reserve for your container. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, the @hostPort@ can either be left blank or set to the same -- value as the @containerPort@. -- -- If you are using containers in a task with the @bridge@ network mode, -- you can specify a non-reserved host port for your container port -- mapping, or you can omit the @hostPort@ (or set it to @0@) while -- specifying a @containerPort@ and your container automatically receives a -- port in the ephemeral port range for your container instance operating -- system and Docker version. -- -- The default ephemeral port range for Docker version 1.6.0 and later is -- listed on the instance under -- @\/proc\/sys\/net\/ipv4\/ip_local_port_range@. If this kernel parameter -- is unavailable, the default ephemeral port range from 49153 through -- 65535 is used. Do not attempt to specify a host port in the ephemeral -- port range as these are reserved for automatic assignment. In general, -- ports below 32768 are outside of the ephemeral port range. -- -- The default ephemeral port range from 49153 through 65535 is always used -- for Docker versions before 1.6.0. -- -- The default reserved ports are 22 for SSH, the Docker ports 2375 and -- 2376, and the Amazon ECS container agent ports 51678-51680. Any host -- port that was previously specified in a running task is also reserved -- while the task is running (after a task stops, the host port is -- released). The current reserved ports are displayed in the -- @remainingResources@ of DescribeContainerInstances output. A container -- instance can have up to 100 reserved ports at a time, including the -- default reserved ports. Automatically assigned ports don\'t count toward -- the 100 reserved ports limit. -- -- 'containerPort', 'portMapping_containerPort' - The port number on the container that is bound to the user-specified or -- automatically assigned host port. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, exposed ports should be specified using @containerPort@. -- -- If you are using containers in a task with the @bridge@ network mode and -- you specify a container port and not a host port, your container -- automatically receives a host port in the ephemeral port range. For more -- information, see @hostPort@. Port mappings that are automatically -- assigned in this way do not count toward the 100 reserved ports limit of -- a container instance. newPortMapping :: PortMapping newPortMapping :: PortMapping newPortMapping = PortMapping' :: Maybe TransportProtocol -> Maybe Int -> Maybe Int -> PortMapping PortMapping' { $sel:protocol:PortMapping' :: Maybe TransportProtocol protocol = Maybe TransportProtocol forall a. Maybe a Prelude.Nothing, $sel:hostPort:PortMapping' :: Maybe Int hostPort = Maybe Int forall a. Maybe a Prelude.Nothing, $sel:containerPort:PortMapping' :: Maybe Int containerPort = Maybe Int forall a. Maybe a Prelude.Nothing } -- | The protocol used for the port mapping. Valid values are @tcp@ and -- @udp@. The default is @tcp@. portMapping_protocol :: Lens.Lens' PortMapping (Prelude.Maybe TransportProtocol) portMapping_protocol :: (Maybe TransportProtocol -> f (Maybe TransportProtocol)) -> PortMapping -> f PortMapping portMapping_protocol = (PortMapping -> Maybe TransportProtocol) -> (PortMapping -> Maybe TransportProtocol -> PortMapping) -> Lens PortMapping PortMapping (Maybe TransportProtocol) (Maybe TransportProtocol) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\PortMapping' {Maybe TransportProtocol protocol :: Maybe TransportProtocol $sel:protocol:PortMapping' :: PortMapping -> Maybe TransportProtocol protocol} -> Maybe TransportProtocol protocol) (\s :: PortMapping s@PortMapping' {} Maybe TransportProtocol a -> PortMapping s {$sel:protocol:PortMapping' :: Maybe TransportProtocol protocol = Maybe TransportProtocol a} :: PortMapping) -- | The port number on the container instance to reserve for your container. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, the @hostPort@ can either be left blank or set to the same -- value as the @containerPort@. -- -- If you are using containers in a task with the @bridge@ network mode, -- you can specify a non-reserved host port for your container port -- mapping, or you can omit the @hostPort@ (or set it to @0@) while -- specifying a @containerPort@ and your container automatically receives a -- port in the ephemeral port range for your container instance operating -- system and Docker version. -- -- The default ephemeral port range for Docker version 1.6.0 and later is -- listed on the instance under -- @\/proc\/sys\/net\/ipv4\/ip_local_port_range@. If this kernel parameter -- is unavailable, the default ephemeral port range from 49153 through -- 65535 is used. Do not attempt to specify a host port in the ephemeral -- port range as these are reserved for automatic assignment. In general, -- ports below 32768 are outside of the ephemeral port range. -- -- The default ephemeral port range from 49153 through 65535 is always used -- for Docker versions before 1.6.0. -- -- The default reserved ports are 22 for SSH, the Docker ports 2375 and -- 2376, and the Amazon ECS container agent ports 51678-51680. Any host -- port that was previously specified in a running task is also reserved -- while the task is running (after a task stops, the host port is -- released). The current reserved ports are displayed in the -- @remainingResources@ of DescribeContainerInstances output. A container -- instance can have up to 100 reserved ports at a time, including the -- default reserved ports. Automatically assigned ports don\'t count toward -- the 100 reserved ports limit. portMapping_hostPort :: Lens.Lens' PortMapping (Prelude.Maybe Prelude.Int) portMapping_hostPort :: (Maybe Int -> f (Maybe Int)) -> PortMapping -> f PortMapping portMapping_hostPort = (PortMapping -> Maybe Int) -> (PortMapping -> Maybe Int -> PortMapping) -> Lens PortMapping PortMapping (Maybe Int) (Maybe Int) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\PortMapping' {Maybe Int hostPort :: Maybe Int $sel:hostPort:PortMapping' :: PortMapping -> Maybe Int hostPort} -> Maybe Int hostPort) (\s :: PortMapping s@PortMapping' {} Maybe Int a -> PortMapping s {$sel:hostPort:PortMapping' :: Maybe Int hostPort = Maybe Int a} :: PortMapping) -- | The port number on the container that is bound to the user-specified or -- automatically assigned host port. -- -- If you are using containers in a task with the @awsvpc@ or @host@ -- network mode, exposed ports should be specified using @containerPort@. -- -- If you are using containers in a task with the @bridge@ network mode and -- you specify a container port and not a host port, your container -- automatically receives a host port in the ephemeral port range. For more -- information, see @hostPort@. Port mappings that are automatically -- assigned in this way do not count toward the 100 reserved ports limit of -- a container instance. portMapping_containerPort :: Lens.Lens' PortMapping (Prelude.Maybe Prelude.Int) portMapping_containerPort :: (Maybe Int -> f (Maybe Int)) -> PortMapping -> f PortMapping portMapping_containerPort = (PortMapping -> Maybe Int) -> (PortMapping -> Maybe Int -> PortMapping) -> Lens PortMapping PortMapping (Maybe Int) (Maybe Int) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\PortMapping' {Maybe Int containerPort :: Maybe Int $sel:containerPort:PortMapping' :: PortMapping -> Maybe Int containerPort} -> Maybe Int containerPort) (\s :: PortMapping s@PortMapping' {} Maybe Int a -> PortMapping s {$sel:containerPort:PortMapping' :: Maybe Int containerPort = Maybe Int a} :: PortMapping) instance Core.FromJSON PortMapping where parseJSON :: Value -> Parser PortMapping parseJSON = String -> (Object -> Parser PortMapping) -> Value -> Parser PortMapping forall a. String -> (Object -> Parser a) -> Value -> Parser a Core.withObject String "PortMapping" ( \Object x -> Maybe TransportProtocol -> Maybe Int -> Maybe Int -> PortMapping PortMapping' (Maybe TransportProtocol -> Maybe Int -> Maybe Int -> PortMapping) -> Parser (Maybe TransportProtocol) -> Parser (Maybe Int -> Maybe Int -> PortMapping) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b Prelude.<$> (Object x Object -> Text -> Parser (Maybe TransportProtocol) forall a. FromJSON a => Object -> Text -> Parser (Maybe a) Core..:? Text "protocol") Parser (Maybe Int -> Maybe Int -> PortMapping) -> Parser (Maybe Int) -> Parser (Maybe Int -> PortMapping) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b Prelude.<*> (Object x Object -> Text -> Parser (Maybe Int) forall a. FromJSON a => Object -> Text -> Parser (Maybe a) Core..:? Text "hostPort") Parser (Maybe Int -> PortMapping) -> Parser (Maybe Int) -> Parser PortMapping forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b Prelude.<*> (Object x Object -> Text -> Parser (Maybe Int) forall a. FromJSON a => Object -> Text -> Parser (Maybe a) Core..:? Text "containerPort") ) instance Prelude.Hashable PortMapping instance Prelude.NFData PortMapping instance Core.ToJSON PortMapping where toJSON :: PortMapping -> Value toJSON PortMapping' {Maybe Int Maybe TransportProtocol containerPort :: Maybe Int hostPort :: Maybe Int protocol :: Maybe TransportProtocol $sel:containerPort:PortMapping' :: PortMapping -> Maybe Int $sel:hostPort:PortMapping' :: PortMapping -> Maybe Int $sel:protocol:PortMapping' :: PortMapping -> Maybe TransportProtocol ..} = [Pair] -> Value Core.object ( [Maybe Pair] -> [Pair] forall a. [Maybe a] -> [a] Prelude.catMaybes [ (Text "protocol" Text -> TransportProtocol -> Pair forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv Core..=) (TransportProtocol -> Pair) -> Maybe TransportProtocol -> Maybe Pair forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b Prelude.<$> Maybe TransportProtocol protocol, (Text "hostPort" Text -> Int -> Pair forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv Core..=) (Int -> Pair) -> Maybe Int -> Maybe Pair forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b Prelude.<$> Maybe Int hostPort, (Text "containerPort" Text -> Int -> Pair forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv Core..=) (Int -> Pair) -> Maybe Int -> Maybe Pair forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b Prelude.<$> Maybe Int containerPort ] )