packages feed

amazonka-ecs-2.0: gen/Amazonka/ECS/Types/ServiceConnectService.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.ECS.Types.ServiceConnectService
-- 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.ECS.Types.ServiceConnectService where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.ECS.Types.ServiceConnectClientAlias
import qualified Amazonka.Prelude as Prelude

-- | The Service Connect service object configuration. For more information,
-- see
-- <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html Service Connect>
-- in the /Amazon Elastic Container Service Developer Guide/.
--
-- /See:/ 'newServiceConnectService' smart constructor.
data ServiceConnectService = ServiceConnectService'
  { -- | The list of client aliases for this Service Connect service. You use
    -- these to assign names that can be used by client applications. The
    -- maximum number of client aliases that you can have in this list is 1.
    --
    -- Each alias (\"endpoint\") is a fully-qualified name and port number that
    -- other Amazon ECS tasks (\"clients\") can use to connect to this service.
    --
    -- Each name and port mapping must be unique within the namespace.
    --
    -- For each @ServiceConnectService@, you must provide at least one
    -- @clientAlias@ with one @port@.
    clientAliases :: Prelude.Maybe [ServiceConnectClientAlias],
    -- | The @discoveryName@ is the name of the new Cloud Map service that Amazon
    -- ECS creates for this Amazon ECS service. This must be unique within the
    -- Cloud Map namespace. The name can contain up to 64 characters. The name
    -- can include lowercase letters, numbers, underscores (_), and hyphens
    -- (-). The name can\'t start with a hyphen.
    --
    -- If this parameter isn\'t specified, the default value of
    -- @discoveryName.namespace@ is used. If the @discoveryName@ isn\'t
    -- specified, the port mapping name from the task definition is used in
    -- @portName.namespace@.
    discoveryName :: Prelude.Maybe Prelude.Text,
    -- | The port number for the Service Connect proxy to listen on.
    --
    -- Use the value of this field to bypass the proxy for traffic on the port
    -- number specified in the named @portMapping@ in the task definition of
    -- this application, and then use it in your VPC security groups to allow
    -- traffic into the proxy for this Amazon ECS service.
    --
    -- In @awsvpc@ mode and Fargate, the default value is the container port
    -- number. The container port number is in the @portMapping@ in the task
    -- definition. In bridge mode, the default value is the ephemeral port of
    -- the Service Connect proxy.
    ingressPortOverride :: Prelude.Maybe Prelude.Natural,
    -- | The @portName@ must match the name of one of the @portMappings@ from all
    -- the containers in the task definition of this Amazon ECS service.
    portName :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ServiceConnectService' 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:
--
-- 'clientAliases', 'serviceConnectService_clientAliases' - The list of client aliases for this Service Connect service. You use
-- these to assign names that can be used by client applications. The
-- maximum number of client aliases that you can have in this list is 1.
--
-- Each alias (\"endpoint\") is a fully-qualified name and port number that
-- other Amazon ECS tasks (\"clients\") can use to connect to this service.
--
-- Each name and port mapping must be unique within the namespace.
--
-- For each @ServiceConnectService@, you must provide at least one
-- @clientAlias@ with one @port@.
--
-- 'discoveryName', 'serviceConnectService_discoveryName' - The @discoveryName@ is the name of the new Cloud Map service that Amazon
-- ECS creates for this Amazon ECS service. This must be unique within the
-- Cloud Map namespace. The name can contain up to 64 characters. The name
-- can include lowercase letters, numbers, underscores (_), and hyphens
-- (-). The name can\'t start with a hyphen.
--
-- If this parameter isn\'t specified, the default value of
-- @discoveryName.namespace@ is used. If the @discoveryName@ isn\'t
-- specified, the port mapping name from the task definition is used in
-- @portName.namespace@.
--
-- 'ingressPortOverride', 'serviceConnectService_ingressPortOverride' - The port number for the Service Connect proxy to listen on.
--
-- Use the value of this field to bypass the proxy for traffic on the port
-- number specified in the named @portMapping@ in the task definition of
-- this application, and then use it in your VPC security groups to allow
-- traffic into the proxy for this Amazon ECS service.
--
-- In @awsvpc@ mode and Fargate, the default value is the container port
-- number. The container port number is in the @portMapping@ in the task
-- definition. In bridge mode, the default value is the ephemeral port of
-- the Service Connect proxy.
--
-- 'portName', 'serviceConnectService_portName' - The @portName@ must match the name of one of the @portMappings@ from all
-- the containers in the task definition of this Amazon ECS service.
newServiceConnectService ::
  -- | 'portName'
  Prelude.Text ->
  ServiceConnectService
newServiceConnectService pPortName_ =
  ServiceConnectService'
    { clientAliases =
        Prelude.Nothing,
      discoveryName = Prelude.Nothing,
      ingressPortOverride = Prelude.Nothing,
      portName = pPortName_
    }

-- | The list of client aliases for this Service Connect service. You use
-- these to assign names that can be used by client applications. The
-- maximum number of client aliases that you can have in this list is 1.
--
-- Each alias (\"endpoint\") is a fully-qualified name and port number that
-- other Amazon ECS tasks (\"clients\") can use to connect to this service.
--
-- Each name and port mapping must be unique within the namespace.
--
-- For each @ServiceConnectService@, you must provide at least one
-- @clientAlias@ with one @port@.
serviceConnectService_clientAliases :: Lens.Lens' ServiceConnectService (Prelude.Maybe [ServiceConnectClientAlias])
serviceConnectService_clientAliases = Lens.lens (\ServiceConnectService' {clientAliases} -> clientAliases) (\s@ServiceConnectService' {} a -> s {clientAliases = a} :: ServiceConnectService) Prelude.. Lens.mapping Lens.coerced

-- | The @discoveryName@ is the name of the new Cloud Map service that Amazon
-- ECS creates for this Amazon ECS service. This must be unique within the
-- Cloud Map namespace. The name can contain up to 64 characters. The name
-- can include lowercase letters, numbers, underscores (_), and hyphens
-- (-). The name can\'t start with a hyphen.
--
-- If this parameter isn\'t specified, the default value of
-- @discoveryName.namespace@ is used. If the @discoveryName@ isn\'t
-- specified, the port mapping name from the task definition is used in
-- @portName.namespace@.
serviceConnectService_discoveryName :: Lens.Lens' ServiceConnectService (Prelude.Maybe Prelude.Text)
serviceConnectService_discoveryName = Lens.lens (\ServiceConnectService' {discoveryName} -> discoveryName) (\s@ServiceConnectService' {} a -> s {discoveryName = a} :: ServiceConnectService)

-- | The port number for the Service Connect proxy to listen on.
--
-- Use the value of this field to bypass the proxy for traffic on the port
-- number specified in the named @portMapping@ in the task definition of
-- this application, and then use it in your VPC security groups to allow
-- traffic into the proxy for this Amazon ECS service.
--
-- In @awsvpc@ mode and Fargate, the default value is the container port
-- number. The container port number is in the @portMapping@ in the task
-- definition. In bridge mode, the default value is the ephemeral port of
-- the Service Connect proxy.
serviceConnectService_ingressPortOverride :: Lens.Lens' ServiceConnectService (Prelude.Maybe Prelude.Natural)
serviceConnectService_ingressPortOverride = Lens.lens (\ServiceConnectService' {ingressPortOverride} -> ingressPortOverride) (\s@ServiceConnectService' {} a -> s {ingressPortOverride = a} :: ServiceConnectService)

-- | The @portName@ must match the name of one of the @portMappings@ from all
-- the containers in the task definition of this Amazon ECS service.
serviceConnectService_portName :: Lens.Lens' ServiceConnectService Prelude.Text
serviceConnectService_portName = Lens.lens (\ServiceConnectService' {portName} -> portName) (\s@ServiceConnectService' {} a -> s {portName = a} :: ServiceConnectService)

instance Data.FromJSON ServiceConnectService where
  parseJSON =
    Data.withObject
      "ServiceConnectService"
      ( \x ->
          ServiceConnectService'
            Prelude.<$> (x Data..:? "clientAliases" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "discoveryName")
            Prelude.<*> (x Data..:? "ingressPortOverride")
            Prelude.<*> (x Data..: "portName")
      )

instance Prelude.Hashable ServiceConnectService where
  hashWithSalt _salt ServiceConnectService' {..} =
    _salt
      `Prelude.hashWithSalt` clientAliases
      `Prelude.hashWithSalt` discoveryName
      `Prelude.hashWithSalt` ingressPortOverride
      `Prelude.hashWithSalt` portName

instance Prelude.NFData ServiceConnectService where
  rnf ServiceConnectService' {..} =
    Prelude.rnf clientAliases
      `Prelude.seq` Prelude.rnf discoveryName
      `Prelude.seq` Prelude.rnf ingressPortOverride
      `Prelude.seq` Prelude.rnf portName

instance Data.ToJSON ServiceConnectService where
  toJSON ServiceConnectService' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("clientAliases" Data..=) Prelude.<$> clientAliases,
            ("discoveryName" Data..=) Prelude.<$> discoveryName,
            ("ingressPortOverride" Data..=)
              Prelude.<$> ingressPortOverride,
            Prelude.Just ("portName" Data..= portName)
          ]
      )