packages feed

amazonka-sagemaker-2.0: gen/Amazonka/SageMaker/Types/ModelPackageContainerDefinition.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.SageMaker.Types.ModelPackageContainerDefinition
-- 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.ModelPackageContainerDefinition 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.ModelInput

-- | Describes the Docker container for the model package.
--
-- /See:/ 'newModelPackageContainerDefinition' smart constructor.
data ModelPackageContainerDefinition = ModelPackageContainerDefinition'
  { -- | The DNS host name for the Docker container.
    containerHostname :: Prelude.Maybe Prelude.Text,
    -- | The environment variables to set in the Docker container. Each key and
    -- value in the @Environment@ string to string map can have length of up to
    -- 1024. We support up to 16 entries in the map.
    environment :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The machine learning framework of the model package container image.
    framework :: Prelude.Maybe Prelude.Text,
    -- | The framework version of the Model Package Container Image.
    frameworkVersion :: Prelude.Maybe Prelude.Text,
    -- | An MD5 hash of the training algorithm that identifies the Docker image
    -- used for training.
    imageDigest :: Prelude.Maybe Prelude.Text,
    -- | The Amazon S3 path where the model artifacts, which result from model
    -- training, are stored. This path must point to a single @gzip@ compressed
    -- tar archive (@.tar.gz@ suffix).
    --
    -- The model artifacts must be in an S3 bucket that is in the same region
    -- as the model package.
    modelDataUrl :: Prelude.Maybe Prelude.Text,
    -- | A structure with Model Input details.
    modelInput :: Prelude.Maybe ModelInput,
    -- | The name of a pre-trained machine learning benchmarked by Amazon
    -- SageMaker Inference Recommender model that matches your model. You can
    -- find a list of benchmarked models by calling @ListModelMetadata@.
    nearestModelName :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services Marketplace product ID of the model package.
    productId :: Prelude.Maybe Prelude.Text,
    -- | The Amazon EC2 Container Registry (Amazon ECR) path where inference code
    -- is stored.
    --
    -- If you are using your own custom algorithm instead of an algorithm
    -- provided by SageMaker, the inference code must meet SageMaker
    -- requirements. SageMaker supports both @registry\/repository[:tag]@ and
    -- @registry\/repository[\@digest]@ image path formats. For more
    -- information, see
    -- <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html Using Your Own Algorithms with Amazon SageMaker>.
    image :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ModelPackageContainerDefinition' 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:
--
-- 'containerHostname', 'modelPackageContainerDefinition_containerHostname' - The DNS host name for the Docker container.
--
-- 'environment', 'modelPackageContainerDefinition_environment' - The environment variables to set in the Docker container. Each key and
-- value in the @Environment@ string to string map can have length of up to
-- 1024. We support up to 16 entries in the map.
--
-- 'framework', 'modelPackageContainerDefinition_framework' - The machine learning framework of the model package container image.
--
-- 'frameworkVersion', 'modelPackageContainerDefinition_frameworkVersion' - The framework version of the Model Package Container Image.
--
-- 'imageDigest', 'modelPackageContainerDefinition_imageDigest' - An MD5 hash of the training algorithm that identifies the Docker image
-- used for training.
--
-- 'modelDataUrl', 'modelPackageContainerDefinition_modelDataUrl' - The Amazon S3 path where the model artifacts, which result from model
-- training, are stored. This path must point to a single @gzip@ compressed
-- tar archive (@.tar.gz@ suffix).
--
-- The model artifacts must be in an S3 bucket that is in the same region
-- as the model package.
--
-- 'modelInput', 'modelPackageContainerDefinition_modelInput' - A structure with Model Input details.
--
-- 'nearestModelName', 'modelPackageContainerDefinition_nearestModelName' - The name of a pre-trained machine learning benchmarked by Amazon
-- SageMaker Inference Recommender model that matches your model. You can
-- find a list of benchmarked models by calling @ListModelMetadata@.
--
-- 'productId', 'modelPackageContainerDefinition_productId' - The Amazon Web Services Marketplace product ID of the model package.
--
-- 'image', 'modelPackageContainerDefinition_image' - The Amazon EC2 Container Registry (Amazon ECR) path where inference code
-- is stored.
--
-- If you are using your own custom algorithm instead of an algorithm
-- provided by SageMaker, the inference code must meet SageMaker
-- requirements. SageMaker supports both @registry\/repository[:tag]@ and
-- @registry\/repository[\@digest]@ image path formats. For more
-- information, see
-- <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html Using Your Own Algorithms with Amazon SageMaker>.
newModelPackageContainerDefinition ::
  -- | 'image'
  Prelude.Text ->
  ModelPackageContainerDefinition
newModelPackageContainerDefinition pImage_ =
  ModelPackageContainerDefinition'
    { containerHostname =
        Prelude.Nothing,
      environment = Prelude.Nothing,
      framework = Prelude.Nothing,
      frameworkVersion = Prelude.Nothing,
      imageDigest = Prelude.Nothing,
      modelDataUrl = Prelude.Nothing,
      modelInput = Prelude.Nothing,
      nearestModelName = Prelude.Nothing,
      productId = Prelude.Nothing,
      image = pImage_
    }

-- | The DNS host name for the Docker container.
modelPackageContainerDefinition_containerHostname :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_containerHostname = Lens.lens (\ModelPackageContainerDefinition' {containerHostname} -> containerHostname) (\s@ModelPackageContainerDefinition' {} a -> s {containerHostname = a} :: ModelPackageContainerDefinition)

-- | The environment variables to set in the Docker container. Each key and
-- value in the @Environment@ string to string map can have length of up to
-- 1024. We support up to 16 entries in the map.
modelPackageContainerDefinition_environment :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
modelPackageContainerDefinition_environment = Lens.lens (\ModelPackageContainerDefinition' {environment} -> environment) (\s@ModelPackageContainerDefinition' {} a -> s {environment = a} :: ModelPackageContainerDefinition) Prelude.. Lens.mapping Lens.coerced

-- | The machine learning framework of the model package container image.
modelPackageContainerDefinition_framework :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_framework = Lens.lens (\ModelPackageContainerDefinition' {framework} -> framework) (\s@ModelPackageContainerDefinition' {} a -> s {framework = a} :: ModelPackageContainerDefinition)

-- | The framework version of the Model Package Container Image.
modelPackageContainerDefinition_frameworkVersion :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_frameworkVersion = Lens.lens (\ModelPackageContainerDefinition' {frameworkVersion} -> frameworkVersion) (\s@ModelPackageContainerDefinition' {} a -> s {frameworkVersion = a} :: ModelPackageContainerDefinition)

-- | An MD5 hash of the training algorithm that identifies the Docker image
-- used for training.
modelPackageContainerDefinition_imageDigest :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_imageDigest = Lens.lens (\ModelPackageContainerDefinition' {imageDigest} -> imageDigest) (\s@ModelPackageContainerDefinition' {} a -> s {imageDigest = a} :: ModelPackageContainerDefinition)

-- | The Amazon S3 path where the model artifacts, which result from model
-- training, are stored. This path must point to a single @gzip@ compressed
-- tar archive (@.tar.gz@ suffix).
--
-- The model artifacts must be in an S3 bucket that is in the same region
-- as the model package.
modelPackageContainerDefinition_modelDataUrl :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_modelDataUrl = Lens.lens (\ModelPackageContainerDefinition' {modelDataUrl} -> modelDataUrl) (\s@ModelPackageContainerDefinition' {} a -> s {modelDataUrl = a} :: ModelPackageContainerDefinition)

-- | A structure with Model Input details.
modelPackageContainerDefinition_modelInput :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe ModelInput)
modelPackageContainerDefinition_modelInput = Lens.lens (\ModelPackageContainerDefinition' {modelInput} -> modelInput) (\s@ModelPackageContainerDefinition' {} a -> s {modelInput = a} :: ModelPackageContainerDefinition)

-- | The name of a pre-trained machine learning benchmarked by Amazon
-- SageMaker Inference Recommender model that matches your model. You can
-- find a list of benchmarked models by calling @ListModelMetadata@.
modelPackageContainerDefinition_nearestModelName :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_nearestModelName = Lens.lens (\ModelPackageContainerDefinition' {nearestModelName} -> nearestModelName) (\s@ModelPackageContainerDefinition' {} a -> s {nearestModelName = a} :: ModelPackageContainerDefinition)

-- | The Amazon Web Services Marketplace product ID of the model package.
modelPackageContainerDefinition_productId :: Lens.Lens' ModelPackageContainerDefinition (Prelude.Maybe Prelude.Text)
modelPackageContainerDefinition_productId = Lens.lens (\ModelPackageContainerDefinition' {productId} -> productId) (\s@ModelPackageContainerDefinition' {} a -> s {productId = a} :: ModelPackageContainerDefinition)

-- | The Amazon EC2 Container Registry (Amazon ECR) path where inference code
-- is stored.
--
-- If you are using your own custom algorithm instead of an algorithm
-- provided by SageMaker, the inference code must meet SageMaker
-- requirements. SageMaker supports both @registry\/repository[:tag]@ and
-- @registry\/repository[\@digest]@ image path formats. For more
-- information, see
-- <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html Using Your Own Algorithms with Amazon SageMaker>.
modelPackageContainerDefinition_image :: Lens.Lens' ModelPackageContainerDefinition Prelude.Text
modelPackageContainerDefinition_image = Lens.lens (\ModelPackageContainerDefinition' {image} -> image) (\s@ModelPackageContainerDefinition' {} a -> s {image = a} :: ModelPackageContainerDefinition)

instance
  Data.FromJSON
    ModelPackageContainerDefinition
  where
  parseJSON =
    Data.withObject
      "ModelPackageContainerDefinition"
      ( \x ->
          ModelPackageContainerDefinition'
            Prelude.<$> (x Data..:? "ContainerHostname")
            Prelude.<*> (x Data..:? "Environment" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "Framework")
            Prelude.<*> (x Data..:? "FrameworkVersion")
            Prelude.<*> (x Data..:? "ImageDigest")
            Prelude.<*> (x Data..:? "ModelDataUrl")
            Prelude.<*> (x Data..:? "ModelInput")
            Prelude.<*> (x Data..:? "NearestModelName")
            Prelude.<*> (x Data..:? "ProductId")
            Prelude.<*> (x Data..: "Image")
      )

instance
  Prelude.Hashable
    ModelPackageContainerDefinition
  where
  hashWithSalt
    _salt
    ModelPackageContainerDefinition' {..} =
      _salt
        `Prelude.hashWithSalt` containerHostname
        `Prelude.hashWithSalt` environment
        `Prelude.hashWithSalt` framework
        `Prelude.hashWithSalt` frameworkVersion
        `Prelude.hashWithSalt` imageDigest
        `Prelude.hashWithSalt` modelDataUrl
        `Prelude.hashWithSalt` modelInput
        `Prelude.hashWithSalt` nearestModelName
        `Prelude.hashWithSalt` productId
        `Prelude.hashWithSalt` image

instance
  Prelude.NFData
    ModelPackageContainerDefinition
  where
  rnf ModelPackageContainerDefinition' {..} =
    Prelude.rnf containerHostname
      `Prelude.seq` Prelude.rnf environment
      `Prelude.seq` Prelude.rnf framework
      `Prelude.seq` Prelude.rnf frameworkVersion
      `Prelude.seq` Prelude.rnf imageDigest
      `Prelude.seq` Prelude.rnf modelDataUrl
      `Prelude.seq` Prelude.rnf modelInput
      `Prelude.seq` Prelude.rnf nearestModelName
      `Prelude.seq` Prelude.rnf productId
      `Prelude.seq` Prelude.rnf image

instance Data.ToJSON ModelPackageContainerDefinition where
  toJSON ModelPackageContainerDefinition' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("ContainerHostname" Data..=)
              Prelude.<$> containerHostname,
            ("Environment" Data..=) Prelude.<$> environment,
            ("Framework" Data..=) Prelude.<$> framework,
            ("FrameworkVersion" Data..=)
              Prelude.<$> frameworkVersion,
            ("ImageDigest" Data..=) Prelude.<$> imageDigest,
            ("ModelDataUrl" Data..=) Prelude.<$> modelDataUrl,
            ("ModelInput" Data..=) Prelude.<$> modelInput,
            ("NearestModelName" Data..=)
              Prelude.<$> nearestModelName,
            ("ProductId" Data..=) Prelude.<$> productId,
            Prelude.Just ("Image" Data..= image)
          ]
      )