{-# 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.SageMaker.Types.RecommendationJobInputConfig
-- 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.SageMaker.Types.RecommendationJobInputConfig where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SageMaker.Types.EndpointInfo
import Amazonka.SageMaker.Types.EndpointInputConfiguration
import Amazonka.SageMaker.Types.RecommendationJobContainerConfig
import Amazonka.SageMaker.Types.RecommendationJobResourceLimit
import Amazonka.SageMaker.Types.RecommendationJobVpcConfig
import Amazonka.SageMaker.Types.TrafficPattern

-- | The input configuration of the recommendation job.
--
-- /See:/ 'newRecommendationJobInputConfig' smart constructor.
data RecommendationJobInputConfig = RecommendationJobInputConfig'
  { -- | Specifies mandatory fields for running an Inference Recommender job. The
    -- fields specified in @ContainerConfig@ override the corresponding fields
    -- in the model package.
    RecommendationJobInputConfig
-> Maybe RecommendationJobContainerConfig
containerConfig :: Prelude.Maybe RecommendationJobContainerConfig,
    -- | Specifies the endpoint configuration to use for a job.
    RecommendationJobInputConfig
-> Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations :: Prelude.Maybe (Prelude.NonEmpty EndpointInputConfiguration),
    -- | Existing customer endpoints on which to run an Inference Recommender
    -- job.
    RecommendationJobInputConfig -> Maybe [EndpointInfo]
endpoints :: Prelude.Maybe [EndpointInfo],
    -- | Specifies the maximum duration of the job, in seconds.>
    RecommendationJobInputConfig -> Maybe Natural
jobDurationInSeconds :: Prelude.Maybe Prelude.Natural,
    -- | Defines the resource limit of the job.
    RecommendationJobInputConfig
-> Maybe RecommendationJobResourceLimit
resourceLimit :: Prelude.Maybe RecommendationJobResourceLimit,
    -- | Specifies the traffic pattern of the job.
    RecommendationJobInputConfig -> Maybe TrafficPattern
trafficPattern :: Prelude.Maybe TrafficPattern,
    -- | The Amazon Resource Name (ARN) of a Amazon Web Services Key Management
    -- Service (Amazon Web Services KMS) key that Amazon SageMaker uses to
    -- encrypt data on the storage volume attached to the ML compute instance
    -- that hosts the endpoint. This key will be passed to SageMaker Hosting
    -- for endpoint creation.
    --
    -- The SageMaker execution role must have @kms:CreateGrant@ permission in
    -- order to encrypt data on the storage volume of the endpoints created for
    -- inference recommendation. The inference recommendation job will fail
    -- asynchronously during endpoint configuration creation if the role passed
    -- does not have @kms:CreateGrant@ permission.
    --
    -- The @KmsKeyId@ can be any of the following formats:
    --
    -- -   \/\/ KMS Key ID
    --
    --     @\"1234abcd-12ab-34cd-56ef-1234567890ab\"@
    --
    -- -   \/\/ Amazon Resource Name (ARN) of a KMS Key
    --
    --     @\"arn:aws:kms:\<region>:\<account>:key\/\<key-id-12ab-34cd-56ef-1234567890ab>\"@
    --
    -- -   \/\/ KMS Key Alias
    --
    --     @\"alias\/ExampleAlias\"@
    --
    -- -   \/\/ Amazon Resource Name (ARN) of a KMS Key Alias
    --
    --     @\"arn:aws:kms:\<region>:\<account>:alias\/\<ExampleAlias>\"@
    --
    -- For more information about key identifiers, see
    -- <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id Key identifiers (KeyID)>
    -- in the Amazon Web Services Key Management Service (Amazon Web Services
    -- KMS) documentation.
    RecommendationJobInputConfig -> Maybe Text
volumeKmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | Inference Recommender provisions SageMaker endpoints with access to VPC
    -- in the inference recommendation job.
    RecommendationJobInputConfig -> Maybe RecommendationJobVpcConfig
vpcConfig :: Prelude.Maybe RecommendationJobVpcConfig,
    -- | The Amazon Resource Name (ARN) of a versioned model package.
    RecommendationJobInputConfig -> Text
modelPackageVersionArn :: Prelude.Text
  }
  deriving (RecommendationJobInputConfig
-> RecommendationJobInputConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RecommendationJobInputConfig
-> RecommendationJobInputConfig -> Bool
$c/= :: RecommendationJobInputConfig
-> RecommendationJobInputConfig -> Bool
== :: RecommendationJobInputConfig
-> RecommendationJobInputConfig -> Bool
$c== :: RecommendationJobInputConfig
-> RecommendationJobInputConfig -> Bool
Prelude.Eq, ReadPrec [RecommendationJobInputConfig]
ReadPrec RecommendationJobInputConfig
Int -> ReadS RecommendationJobInputConfig
ReadS [RecommendationJobInputConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RecommendationJobInputConfig]
$creadListPrec :: ReadPrec [RecommendationJobInputConfig]
readPrec :: ReadPrec RecommendationJobInputConfig
$creadPrec :: ReadPrec RecommendationJobInputConfig
readList :: ReadS [RecommendationJobInputConfig]
$creadList :: ReadS [RecommendationJobInputConfig]
readsPrec :: Int -> ReadS RecommendationJobInputConfig
$creadsPrec :: Int -> ReadS RecommendationJobInputConfig
Prelude.Read, Int -> RecommendationJobInputConfig -> ShowS
[RecommendationJobInputConfig] -> ShowS
RecommendationJobInputConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RecommendationJobInputConfig] -> ShowS
$cshowList :: [RecommendationJobInputConfig] -> ShowS
show :: RecommendationJobInputConfig -> String
$cshow :: RecommendationJobInputConfig -> String
showsPrec :: Int -> RecommendationJobInputConfig -> ShowS
$cshowsPrec :: Int -> RecommendationJobInputConfig -> ShowS
Prelude.Show, forall x.
Rep RecommendationJobInputConfig x -> RecommendationJobInputConfig
forall x.
RecommendationJobInputConfig -> Rep RecommendationJobInputConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RecommendationJobInputConfig x -> RecommendationJobInputConfig
$cfrom :: forall x.
RecommendationJobInputConfig -> Rep RecommendationJobInputConfig x
Prelude.Generic)

-- |
-- Create a value of 'RecommendationJobInputConfig' 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:
--
-- 'containerConfig', 'recommendationJobInputConfig_containerConfig' - Specifies mandatory fields for running an Inference Recommender job. The
-- fields specified in @ContainerConfig@ override the corresponding fields
-- in the model package.
--
-- 'endpointConfigurations', 'recommendationJobInputConfig_endpointConfigurations' - Specifies the endpoint configuration to use for a job.
--
-- 'endpoints', 'recommendationJobInputConfig_endpoints' - Existing customer endpoints on which to run an Inference Recommender
-- job.
--
-- 'jobDurationInSeconds', 'recommendationJobInputConfig_jobDurationInSeconds' - Specifies the maximum duration of the job, in seconds.>
--
-- 'resourceLimit', 'recommendationJobInputConfig_resourceLimit' - Defines the resource limit of the job.
--
-- 'trafficPattern', 'recommendationJobInputConfig_trafficPattern' - Specifies the traffic pattern of the job.
--
-- 'volumeKmsKeyId', 'recommendationJobInputConfig_volumeKmsKeyId' - The Amazon Resource Name (ARN) of a Amazon Web Services Key Management
-- Service (Amazon Web Services KMS) key that Amazon SageMaker uses to
-- encrypt data on the storage volume attached to the ML compute instance
-- that hosts the endpoint. This key will be passed to SageMaker Hosting
-- for endpoint creation.
--
-- The SageMaker execution role must have @kms:CreateGrant@ permission in
-- order to encrypt data on the storage volume of the endpoints created for
-- inference recommendation. The inference recommendation job will fail
-- asynchronously during endpoint configuration creation if the role passed
-- does not have @kms:CreateGrant@ permission.
--
-- The @KmsKeyId@ can be any of the following formats:
--
-- -   \/\/ KMS Key ID
--
--     @\"1234abcd-12ab-34cd-56ef-1234567890ab\"@
--
-- -   \/\/ Amazon Resource Name (ARN) of a KMS Key
--
--     @\"arn:aws:kms:\<region>:\<account>:key\/\<key-id-12ab-34cd-56ef-1234567890ab>\"@
--
-- -   \/\/ KMS Key Alias
--
--     @\"alias\/ExampleAlias\"@
--
-- -   \/\/ Amazon Resource Name (ARN) of a KMS Key Alias
--
--     @\"arn:aws:kms:\<region>:\<account>:alias\/\<ExampleAlias>\"@
--
-- For more information about key identifiers, see
-- <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id Key identifiers (KeyID)>
-- in the Amazon Web Services Key Management Service (Amazon Web Services
-- KMS) documentation.
--
-- 'vpcConfig', 'recommendationJobInputConfig_vpcConfig' - Inference Recommender provisions SageMaker endpoints with access to VPC
-- in the inference recommendation job.
--
-- 'modelPackageVersionArn', 'recommendationJobInputConfig_modelPackageVersionArn' - The Amazon Resource Name (ARN) of a versioned model package.
newRecommendationJobInputConfig ::
  -- | 'modelPackageVersionArn'
  Prelude.Text ->
  RecommendationJobInputConfig
newRecommendationJobInputConfig :: Text -> RecommendationJobInputConfig
newRecommendationJobInputConfig
  Text
pModelPackageVersionArn_ =
    RecommendationJobInputConfig'
      { $sel:containerConfig:RecommendationJobInputConfig' :: Maybe RecommendationJobContainerConfig
containerConfig =
          forall a. Maybe a
Prelude.Nothing,
        $sel:endpointConfigurations:RecommendationJobInputConfig' :: Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations = forall a. Maybe a
Prelude.Nothing,
        $sel:endpoints:RecommendationJobInputConfig' :: Maybe [EndpointInfo]
endpoints = forall a. Maybe a
Prelude.Nothing,
        $sel:jobDurationInSeconds:RecommendationJobInputConfig' :: Maybe Natural
jobDurationInSeconds = forall a. Maybe a
Prelude.Nothing,
        $sel:resourceLimit:RecommendationJobInputConfig' :: Maybe RecommendationJobResourceLimit
resourceLimit = forall a. Maybe a
Prelude.Nothing,
        $sel:trafficPattern:RecommendationJobInputConfig' :: Maybe TrafficPattern
trafficPattern = forall a. Maybe a
Prelude.Nothing,
        $sel:volumeKmsKeyId:RecommendationJobInputConfig' :: Maybe Text
volumeKmsKeyId = forall a. Maybe a
Prelude.Nothing,
        $sel:vpcConfig:RecommendationJobInputConfig' :: Maybe RecommendationJobVpcConfig
vpcConfig = forall a. Maybe a
Prelude.Nothing,
        $sel:modelPackageVersionArn:RecommendationJobInputConfig' :: Text
modelPackageVersionArn =
          Text
pModelPackageVersionArn_
      }

-- | Specifies mandatory fields for running an Inference Recommender job. The
-- fields specified in @ContainerConfig@ override the corresponding fields
-- in the model package.
recommendationJobInputConfig_containerConfig :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe RecommendationJobContainerConfig)
recommendationJobInputConfig_containerConfig :: Lens'
  RecommendationJobInputConfig
  (Maybe RecommendationJobContainerConfig)
recommendationJobInputConfig_containerConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe RecommendationJobContainerConfig
containerConfig :: Maybe RecommendationJobContainerConfig
$sel:containerConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobContainerConfig
containerConfig} -> Maybe RecommendationJobContainerConfig
containerConfig) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe RecommendationJobContainerConfig
a -> RecommendationJobInputConfig
s {$sel:containerConfig:RecommendationJobInputConfig' :: Maybe RecommendationJobContainerConfig
containerConfig = Maybe RecommendationJobContainerConfig
a} :: RecommendationJobInputConfig)

-- | Specifies the endpoint configuration to use for a job.
recommendationJobInputConfig_endpointConfigurations :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe (Prelude.NonEmpty EndpointInputConfiguration))
recommendationJobInputConfig_endpointConfigurations :: Lens'
  RecommendationJobInputConfig
  (Maybe (NonEmpty EndpointInputConfiguration))
recommendationJobInputConfig_endpointConfigurations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations :: Maybe (NonEmpty EndpointInputConfiguration)
$sel:endpointConfigurations:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations} -> Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe (NonEmpty EndpointInputConfiguration)
a -> RecommendationJobInputConfig
s {$sel:endpointConfigurations:RecommendationJobInputConfig' :: Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations = Maybe (NonEmpty EndpointInputConfiguration)
a} :: RecommendationJobInputConfig) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Existing customer endpoints on which to run an Inference Recommender
-- job.
recommendationJobInputConfig_endpoints :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe [EndpointInfo])
recommendationJobInputConfig_endpoints :: Lens' RecommendationJobInputConfig (Maybe [EndpointInfo])
recommendationJobInputConfig_endpoints = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe [EndpointInfo]
endpoints :: Maybe [EndpointInfo]
$sel:endpoints:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe [EndpointInfo]
endpoints} -> Maybe [EndpointInfo]
endpoints) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe [EndpointInfo]
a -> RecommendationJobInputConfig
s {$sel:endpoints:RecommendationJobInputConfig' :: Maybe [EndpointInfo]
endpoints = Maybe [EndpointInfo]
a} :: RecommendationJobInputConfig) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies the maximum duration of the job, in seconds.>
recommendationJobInputConfig_jobDurationInSeconds :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe Prelude.Natural)
recommendationJobInputConfig_jobDurationInSeconds :: Lens' RecommendationJobInputConfig (Maybe Natural)
recommendationJobInputConfig_jobDurationInSeconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe Natural
jobDurationInSeconds :: Maybe Natural
$sel:jobDurationInSeconds:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Natural
jobDurationInSeconds} -> Maybe Natural
jobDurationInSeconds) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe Natural
a -> RecommendationJobInputConfig
s {$sel:jobDurationInSeconds:RecommendationJobInputConfig' :: Maybe Natural
jobDurationInSeconds = Maybe Natural
a} :: RecommendationJobInputConfig)

-- | Defines the resource limit of the job.
recommendationJobInputConfig_resourceLimit :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe RecommendationJobResourceLimit)
recommendationJobInputConfig_resourceLimit :: Lens'
  RecommendationJobInputConfig (Maybe RecommendationJobResourceLimit)
recommendationJobInputConfig_resourceLimit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe RecommendationJobResourceLimit
resourceLimit :: Maybe RecommendationJobResourceLimit
$sel:resourceLimit:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobResourceLimit
resourceLimit} -> Maybe RecommendationJobResourceLimit
resourceLimit) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe RecommendationJobResourceLimit
a -> RecommendationJobInputConfig
s {$sel:resourceLimit:RecommendationJobInputConfig' :: Maybe RecommendationJobResourceLimit
resourceLimit = Maybe RecommendationJobResourceLimit
a} :: RecommendationJobInputConfig)

-- | Specifies the traffic pattern of the job.
recommendationJobInputConfig_trafficPattern :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe TrafficPattern)
recommendationJobInputConfig_trafficPattern :: Lens' RecommendationJobInputConfig (Maybe TrafficPattern)
recommendationJobInputConfig_trafficPattern = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe TrafficPattern
trafficPattern :: Maybe TrafficPattern
$sel:trafficPattern:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe TrafficPattern
trafficPattern} -> Maybe TrafficPattern
trafficPattern) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe TrafficPattern
a -> RecommendationJobInputConfig
s {$sel:trafficPattern:RecommendationJobInputConfig' :: Maybe TrafficPattern
trafficPattern = Maybe TrafficPattern
a} :: RecommendationJobInputConfig)

-- | The Amazon Resource Name (ARN) of a Amazon Web Services Key Management
-- Service (Amazon Web Services KMS) key that Amazon SageMaker uses to
-- encrypt data on the storage volume attached to the ML compute instance
-- that hosts the endpoint. This key will be passed to SageMaker Hosting
-- for endpoint creation.
--
-- The SageMaker execution role must have @kms:CreateGrant@ permission in
-- order to encrypt data on the storage volume of the endpoints created for
-- inference recommendation. The inference recommendation job will fail
-- asynchronously during endpoint configuration creation if the role passed
-- does not have @kms:CreateGrant@ permission.
--
-- The @KmsKeyId@ can be any of the following formats:
--
-- -   \/\/ KMS Key ID
--
--     @\"1234abcd-12ab-34cd-56ef-1234567890ab\"@
--
-- -   \/\/ Amazon Resource Name (ARN) of a KMS Key
--
--     @\"arn:aws:kms:\<region>:\<account>:key\/\<key-id-12ab-34cd-56ef-1234567890ab>\"@
--
-- -   \/\/ KMS Key Alias
--
--     @\"alias\/ExampleAlias\"@
--
-- -   \/\/ Amazon Resource Name (ARN) of a KMS Key Alias
--
--     @\"arn:aws:kms:\<region>:\<account>:alias\/\<ExampleAlias>\"@
--
-- For more information about key identifiers, see
-- <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id Key identifiers (KeyID)>
-- in the Amazon Web Services Key Management Service (Amazon Web Services
-- KMS) documentation.
recommendationJobInputConfig_volumeKmsKeyId :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe Prelude.Text)
recommendationJobInputConfig_volumeKmsKeyId :: Lens' RecommendationJobInputConfig (Maybe Text)
recommendationJobInputConfig_volumeKmsKeyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe Text
volumeKmsKeyId :: Maybe Text
$sel:volumeKmsKeyId:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Text
volumeKmsKeyId} -> Maybe Text
volumeKmsKeyId) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe Text
a -> RecommendationJobInputConfig
s {$sel:volumeKmsKeyId:RecommendationJobInputConfig' :: Maybe Text
volumeKmsKeyId = Maybe Text
a} :: RecommendationJobInputConfig)

-- | Inference Recommender provisions SageMaker endpoints with access to VPC
-- in the inference recommendation job.
recommendationJobInputConfig_vpcConfig :: Lens.Lens' RecommendationJobInputConfig (Prelude.Maybe RecommendationJobVpcConfig)
recommendationJobInputConfig_vpcConfig :: Lens'
  RecommendationJobInputConfig (Maybe RecommendationJobVpcConfig)
recommendationJobInputConfig_vpcConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Maybe RecommendationJobVpcConfig
vpcConfig :: Maybe RecommendationJobVpcConfig
$sel:vpcConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe RecommendationJobVpcConfig
vpcConfig} -> Maybe RecommendationJobVpcConfig
vpcConfig) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Maybe RecommendationJobVpcConfig
a -> RecommendationJobInputConfig
s {$sel:vpcConfig:RecommendationJobInputConfig' :: Maybe RecommendationJobVpcConfig
vpcConfig = Maybe RecommendationJobVpcConfig
a} :: RecommendationJobInputConfig)

-- | The Amazon Resource Name (ARN) of a versioned model package.
recommendationJobInputConfig_modelPackageVersionArn :: Lens.Lens' RecommendationJobInputConfig Prelude.Text
recommendationJobInputConfig_modelPackageVersionArn :: Lens' RecommendationJobInputConfig Text
recommendationJobInputConfig_modelPackageVersionArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RecommendationJobInputConfig' {Text
modelPackageVersionArn :: Text
$sel:modelPackageVersionArn:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Text
modelPackageVersionArn} -> Text
modelPackageVersionArn) (\s :: RecommendationJobInputConfig
s@RecommendationJobInputConfig' {} Text
a -> RecommendationJobInputConfig
s {$sel:modelPackageVersionArn:RecommendationJobInputConfig' :: Text
modelPackageVersionArn = Text
a} :: RecommendationJobInputConfig)

instance Data.FromJSON RecommendationJobInputConfig where
  parseJSON :: Value -> Parser RecommendationJobInputConfig
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"RecommendationJobInputConfig"
      ( \Object
x ->
          Maybe RecommendationJobContainerConfig
-> Maybe (NonEmpty EndpointInputConfiguration)
-> Maybe [EndpointInfo]
-> Maybe Natural
-> Maybe RecommendationJobResourceLimit
-> Maybe TrafficPattern
-> Maybe Text
-> Maybe RecommendationJobVpcConfig
-> Text
-> RecommendationJobInputConfig
RecommendationJobInputConfig'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ContainerConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"EndpointConfigurations")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Endpoints" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"JobDurationInSeconds")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ResourceLimit")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"TrafficPattern")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"VolumeKmsKeyId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"VpcConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"ModelPackageVersionArn")
      )

instance
  Prelude.Hashable
    RecommendationJobInputConfig
  where
  hashWithSalt :: Int -> RecommendationJobInputConfig -> Int
hashWithSalt Int
_salt RecommendationJobInputConfig' {Maybe Natural
Maybe [EndpointInfo]
Maybe (NonEmpty EndpointInputConfiguration)
Maybe Text
Maybe RecommendationJobContainerConfig
Maybe RecommendationJobResourceLimit
Maybe RecommendationJobVpcConfig
Maybe TrafficPattern
Text
modelPackageVersionArn :: Text
vpcConfig :: Maybe RecommendationJobVpcConfig
volumeKmsKeyId :: Maybe Text
trafficPattern :: Maybe TrafficPattern
resourceLimit :: Maybe RecommendationJobResourceLimit
jobDurationInSeconds :: Maybe Natural
endpoints :: Maybe [EndpointInfo]
endpointConfigurations :: Maybe (NonEmpty EndpointInputConfiguration)
containerConfig :: Maybe RecommendationJobContainerConfig
$sel:modelPackageVersionArn:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Text
$sel:vpcConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe RecommendationJobVpcConfig
$sel:volumeKmsKeyId:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Text
$sel:trafficPattern:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe TrafficPattern
$sel:resourceLimit:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobResourceLimit
$sel:jobDurationInSeconds:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Natural
$sel:endpoints:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe [EndpointInfo]
$sel:endpointConfigurations:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe (NonEmpty EndpointInputConfiguration)
$sel:containerConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobContainerConfig
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RecommendationJobContainerConfig
containerConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [EndpointInfo]
endpoints
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
jobDurationInSeconds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RecommendationJobResourceLimit
resourceLimit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TrafficPattern
trafficPattern
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
volumeKmsKeyId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RecommendationJobVpcConfig
vpcConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
modelPackageVersionArn

instance Prelude.NFData RecommendationJobInputConfig where
  rnf :: RecommendationJobInputConfig -> ()
rnf RecommendationJobInputConfig' {Maybe Natural
Maybe [EndpointInfo]
Maybe (NonEmpty EndpointInputConfiguration)
Maybe Text
Maybe RecommendationJobContainerConfig
Maybe RecommendationJobResourceLimit
Maybe RecommendationJobVpcConfig
Maybe TrafficPattern
Text
modelPackageVersionArn :: Text
vpcConfig :: Maybe RecommendationJobVpcConfig
volumeKmsKeyId :: Maybe Text
trafficPattern :: Maybe TrafficPattern
resourceLimit :: Maybe RecommendationJobResourceLimit
jobDurationInSeconds :: Maybe Natural
endpoints :: Maybe [EndpointInfo]
endpointConfigurations :: Maybe (NonEmpty EndpointInputConfiguration)
containerConfig :: Maybe RecommendationJobContainerConfig
$sel:modelPackageVersionArn:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Text
$sel:vpcConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe RecommendationJobVpcConfig
$sel:volumeKmsKeyId:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Text
$sel:trafficPattern:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe TrafficPattern
$sel:resourceLimit:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobResourceLimit
$sel:jobDurationInSeconds:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Natural
$sel:endpoints:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe [EndpointInfo]
$sel:endpointConfigurations:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe (NonEmpty EndpointInputConfiguration)
$sel:containerConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobContainerConfig
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe RecommendationJobContainerConfig
containerConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [EndpointInfo]
endpoints
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
jobDurationInSeconds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RecommendationJobResourceLimit
resourceLimit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TrafficPattern
trafficPattern
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
volumeKmsKeyId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RecommendationJobVpcConfig
vpcConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
modelPackageVersionArn

instance Data.ToJSON RecommendationJobInputConfig where
  toJSON :: RecommendationJobInputConfig -> Value
toJSON RecommendationJobInputConfig' {Maybe Natural
Maybe [EndpointInfo]
Maybe (NonEmpty EndpointInputConfiguration)
Maybe Text
Maybe RecommendationJobContainerConfig
Maybe RecommendationJobResourceLimit
Maybe RecommendationJobVpcConfig
Maybe TrafficPattern
Text
modelPackageVersionArn :: Text
vpcConfig :: Maybe RecommendationJobVpcConfig
volumeKmsKeyId :: Maybe Text
trafficPattern :: Maybe TrafficPattern
resourceLimit :: Maybe RecommendationJobResourceLimit
jobDurationInSeconds :: Maybe Natural
endpoints :: Maybe [EndpointInfo]
endpointConfigurations :: Maybe (NonEmpty EndpointInputConfiguration)
containerConfig :: Maybe RecommendationJobContainerConfig
$sel:modelPackageVersionArn:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Text
$sel:vpcConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe RecommendationJobVpcConfig
$sel:volumeKmsKeyId:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Text
$sel:trafficPattern:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe TrafficPattern
$sel:resourceLimit:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobResourceLimit
$sel:jobDurationInSeconds:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe Natural
$sel:endpoints:RecommendationJobInputConfig' :: RecommendationJobInputConfig -> Maybe [EndpointInfo]
$sel:endpointConfigurations:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe (NonEmpty EndpointInputConfiguration)
$sel:containerConfig:RecommendationJobInputConfig' :: RecommendationJobInputConfig
-> Maybe RecommendationJobContainerConfig
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ContainerConfig" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RecommendationJobContainerConfig
containerConfig,
            (Key
"EndpointConfigurations" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty EndpointInputConfiguration)
endpointConfigurations,
            (Key
"Endpoints" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [EndpointInfo]
endpoints,
            (Key
"JobDurationInSeconds" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
jobDurationInSeconds,
            (Key
"ResourceLimit" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RecommendationJobResourceLimit
resourceLimit,
            (Key
"TrafficPattern" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe TrafficPattern
trafficPattern,
            (Key
"VolumeKmsKeyId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
volumeKmsKeyId,
            (Key
"VpcConfig" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RecommendationJobVpcConfig
vpcConfig,
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"ModelPackageVersionArn"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
modelPackageVersionArn
              )
          ]
      )