packages feed

amazonka-lookoutvision-2.0: gen/Amazonka/LookoutVision/StartModelPackagingJob.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.LookoutVision.StartModelPackagingJob
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Starts an Amazon Lookout for Vision model packaging job. A model
-- packaging job creates an AWS IoT Greengrass component for a Lookout for
-- Vision model. You can use the component to deploy your model to an edge
-- device managed by Greengrass.
--
-- Use the DescribeModelPackagingJob API to determine the current status of
-- the job. The model packaging job is complete if the value of @Status@ is
-- @SUCCEEDED@.
--
-- To deploy the component to the target device, use the component name and
-- component version with the AWS IoT Greengrass
-- <https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html CreateDeployment>
-- API.
--
-- This operation requires the following permissions:
--
-- -   @lookoutvision:StartModelPackagingJob@
--
-- -   @s3:PutObject@
--
-- -   @s3:GetBucketLocation@
--
-- -   @kms:GenerateDataKey@
--
-- -   @greengrass:CreateComponentVersion@
--
-- -   @greengrass:DescribeComponent@
--
-- -   (Optional) @greengrass:TagResource@. Only required if you want to
--     tag the component.
--
-- For more information, see /Using your Amazon Lookout for Vision model on
-- an edge device/ in the Amazon Lookout for Vision Developer Guide.
module Amazonka.LookoutVision.StartModelPackagingJob
  ( -- * Creating a Request
    StartModelPackagingJob (..),
    newStartModelPackagingJob,

    -- * Request Lenses
    startModelPackagingJob_clientToken,
    startModelPackagingJob_description,
    startModelPackagingJob_jobName,
    startModelPackagingJob_projectName,
    startModelPackagingJob_modelVersion,
    startModelPackagingJob_configuration,

    -- * Destructuring the Response
    StartModelPackagingJobResponse (..),
    newStartModelPackagingJobResponse,

    -- * Response Lenses
    startModelPackagingJobResponse_jobName,
    startModelPackagingJobResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.LookoutVision.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newStartModelPackagingJob' smart constructor.
data StartModelPackagingJob = StartModelPackagingJob'
  { -- | ClientToken is an idempotency token that ensures a call to
    -- @StartModelPackagingJob@ completes only once. You choose the value to
    -- pass. For example, An issue might prevent you from getting a response
    -- from @StartModelPackagingJob@. In this case, safely retry your call to
    -- @StartModelPackagingJob@ by using the same @ClientToken@ parameter
    -- value.
    --
    -- If you don\'t supply a value for @ClientToken@, the AWS SDK you are
    -- using inserts a value for you. This prevents retries after a network
    -- error from making multiple dataset creation requests. You\'ll need to
    -- provide your own value for other use cases.
    --
    -- An error occurs if the other input parameters are not the same as in the
    -- first request. Using a different value for @ClientToken@ is considered a
    -- new call to @StartModelPackagingJob@. An idempotency token is active for
    -- 8 hours.
    clientToken :: Prelude.Maybe Prelude.Text,
    -- | A description for the model packaging job.
    description :: Prelude.Maybe Prelude.Text,
    -- | A name for the model packaging job. If you don\'t supply a value, the
    -- service creates a job name for you.
    jobName :: Prelude.Maybe Prelude.Text,
    -- | The name of the project which contains the version of the model that you
    -- want to package.
    projectName :: Prelude.Text,
    -- | The version of the model within the project that you want to package.
    modelVersion :: Prelude.Text,
    -- | The configuration for the model packaging job.
    configuration :: ModelPackagingConfiguration
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'StartModelPackagingJob' 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:
--
-- 'clientToken', 'startModelPackagingJob_clientToken' - ClientToken is an idempotency token that ensures a call to
-- @StartModelPackagingJob@ completes only once. You choose the value to
-- pass. For example, An issue might prevent you from getting a response
-- from @StartModelPackagingJob@. In this case, safely retry your call to
-- @StartModelPackagingJob@ by using the same @ClientToken@ parameter
-- value.
--
-- If you don\'t supply a value for @ClientToken@, the AWS SDK you are
-- using inserts a value for you. This prevents retries after a network
-- error from making multiple dataset creation requests. You\'ll need to
-- provide your own value for other use cases.
--
-- An error occurs if the other input parameters are not the same as in the
-- first request. Using a different value for @ClientToken@ is considered a
-- new call to @StartModelPackagingJob@. An idempotency token is active for
-- 8 hours.
--
-- 'description', 'startModelPackagingJob_description' - A description for the model packaging job.
--
-- 'jobName', 'startModelPackagingJob_jobName' - A name for the model packaging job. If you don\'t supply a value, the
-- service creates a job name for you.
--
-- 'projectName', 'startModelPackagingJob_projectName' - The name of the project which contains the version of the model that you
-- want to package.
--
-- 'modelVersion', 'startModelPackagingJob_modelVersion' - The version of the model within the project that you want to package.
--
-- 'configuration', 'startModelPackagingJob_configuration' - The configuration for the model packaging job.
newStartModelPackagingJob ::
  -- | 'projectName'
  Prelude.Text ->
  -- | 'modelVersion'
  Prelude.Text ->
  -- | 'configuration'
  ModelPackagingConfiguration ->
  StartModelPackagingJob
newStartModelPackagingJob
  pProjectName_
  pModelVersion_
  pConfiguration_ =
    StartModelPackagingJob'
      { clientToken =
          Prelude.Nothing,
        description = Prelude.Nothing,
        jobName = Prelude.Nothing,
        projectName = pProjectName_,
        modelVersion = pModelVersion_,
        configuration = pConfiguration_
      }

-- | ClientToken is an idempotency token that ensures a call to
-- @StartModelPackagingJob@ completes only once. You choose the value to
-- pass. For example, An issue might prevent you from getting a response
-- from @StartModelPackagingJob@. In this case, safely retry your call to
-- @StartModelPackagingJob@ by using the same @ClientToken@ parameter
-- value.
--
-- If you don\'t supply a value for @ClientToken@, the AWS SDK you are
-- using inserts a value for you. This prevents retries after a network
-- error from making multiple dataset creation requests. You\'ll need to
-- provide your own value for other use cases.
--
-- An error occurs if the other input parameters are not the same as in the
-- first request. Using a different value for @ClientToken@ is considered a
-- new call to @StartModelPackagingJob@. An idempotency token is active for
-- 8 hours.
startModelPackagingJob_clientToken :: Lens.Lens' StartModelPackagingJob (Prelude.Maybe Prelude.Text)
startModelPackagingJob_clientToken = Lens.lens (\StartModelPackagingJob' {clientToken} -> clientToken) (\s@StartModelPackagingJob' {} a -> s {clientToken = a} :: StartModelPackagingJob)

-- | A description for the model packaging job.
startModelPackagingJob_description :: Lens.Lens' StartModelPackagingJob (Prelude.Maybe Prelude.Text)
startModelPackagingJob_description = Lens.lens (\StartModelPackagingJob' {description} -> description) (\s@StartModelPackagingJob' {} a -> s {description = a} :: StartModelPackagingJob)

-- | A name for the model packaging job. If you don\'t supply a value, the
-- service creates a job name for you.
startModelPackagingJob_jobName :: Lens.Lens' StartModelPackagingJob (Prelude.Maybe Prelude.Text)
startModelPackagingJob_jobName = Lens.lens (\StartModelPackagingJob' {jobName} -> jobName) (\s@StartModelPackagingJob' {} a -> s {jobName = a} :: StartModelPackagingJob)

-- | The name of the project which contains the version of the model that you
-- want to package.
startModelPackagingJob_projectName :: Lens.Lens' StartModelPackagingJob Prelude.Text
startModelPackagingJob_projectName = Lens.lens (\StartModelPackagingJob' {projectName} -> projectName) (\s@StartModelPackagingJob' {} a -> s {projectName = a} :: StartModelPackagingJob)

-- | The version of the model within the project that you want to package.
startModelPackagingJob_modelVersion :: Lens.Lens' StartModelPackagingJob Prelude.Text
startModelPackagingJob_modelVersion = Lens.lens (\StartModelPackagingJob' {modelVersion} -> modelVersion) (\s@StartModelPackagingJob' {} a -> s {modelVersion = a} :: StartModelPackagingJob)

-- | The configuration for the model packaging job.
startModelPackagingJob_configuration :: Lens.Lens' StartModelPackagingJob ModelPackagingConfiguration
startModelPackagingJob_configuration = Lens.lens (\StartModelPackagingJob' {configuration} -> configuration) (\s@StartModelPackagingJob' {} a -> s {configuration = a} :: StartModelPackagingJob)

instance Core.AWSRequest StartModelPackagingJob where
  type
    AWSResponse StartModelPackagingJob =
      StartModelPackagingJobResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          StartModelPackagingJobResponse'
            Prelude.<$> (x Data..?> "JobName")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable StartModelPackagingJob where
  hashWithSalt _salt StartModelPackagingJob' {..} =
    _salt
      `Prelude.hashWithSalt` clientToken
      `Prelude.hashWithSalt` description
      `Prelude.hashWithSalt` jobName
      `Prelude.hashWithSalt` projectName
      `Prelude.hashWithSalt` modelVersion
      `Prelude.hashWithSalt` configuration

instance Prelude.NFData StartModelPackagingJob where
  rnf StartModelPackagingJob' {..} =
    Prelude.rnf clientToken
      `Prelude.seq` Prelude.rnf description
      `Prelude.seq` Prelude.rnf jobName
      `Prelude.seq` Prelude.rnf projectName
      `Prelude.seq` Prelude.rnf modelVersion
      `Prelude.seq` Prelude.rnf configuration

instance Data.ToHeaders StartModelPackagingJob where
  toHeaders StartModelPackagingJob' {..} =
    Prelude.mconcat
      [ "X-Amzn-Client-Token" Data.=# clientToken,
        "Content-Type"
          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToJSON StartModelPackagingJob where
  toJSON StartModelPackagingJob' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("Description" Data..=) Prelude.<$> description,
            ("JobName" Data..=) Prelude.<$> jobName,
            Prelude.Just ("ModelVersion" Data..= modelVersion),
            Prelude.Just
              ("Configuration" Data..= configuration)
          ]
      )

instance Data.ToPath StartModelPackagingJob where
  toPath StartModelPackagingJob' {..} =
    Prelude.mconcat
      [ "/2020-11-20/projects/",
        Data.toBS projectName,
        "/modelpackagingjobs"
      ]

instance Data.ToQuery StartModelPackagingJob where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newStartModelPackagingJobResponse' smart constructor.
data StartModelPackagingJobResponse = StartModelPackagingJobResponse'
  { -- | The job name for the model packaging job. If you don\'t supply a job
    -- name in the @JobName@ input parameter, the service creates a job name
    -- for you.
    jobName :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'StartModelPackagingJobResponse' 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:
--
-- 'jobName', 'startModelPackagingJobResponse_jobName' - The job name for the model packaging job. If you don\'t supply a job
-- name in the @JobName@ input parameter, the service creates a job name
-- for you.
--
-- 'httpStatus', 'startModelPackagingJobResponse_httpStatus' - The response's http status code.
newStartModelPackagingJobResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  StartModelPackagingJobResponse
newStartModelPackagingJobResponse pHttpStatus_ =
  StartModelPackagingJobResponse'
    { jobName =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The job name for the model packaging job. If you don\'t supply a job
-- name in the @JobName@ input parameter, the service creates a job name
-- for you.
startModelPackagingJobResponse_jobName :: Lens.Lens' StartModelPackagingJobResponse (Prelude.Maybe Prelude.Text)
startModelPackagingJobResponse_jobName = Lens.lens (\StartModelPackagingJobResponse' {jobName} -> jobName) (\s@StartModelPackagingJobResponse' {} a -> s {jobName = a} :: StartModelPackagingJobResponse)

-- | The response's http status code.
startModelPackagingJobResponse_httpStatus :: Lens.Lens' StartModelPackagingJobResponse Prelude.Int
startModelPackagingJobResponse_httpStatus = Lens.lens (\StartModelPackagingJobResponse' {httpStatus} -> httpStatus) (\s@StartModelPackagingJobResponse' {} a -> s {httpStatus = a} :: StartModelPackagingJobResponse)

instance
  Prelude.NFData
    StartModelPackagingJobResponse
  where
  rnf StartModelPackagingJobResponse' {..} =
    Prelude.rnf jobName
      `Prelude.seq` Prelude.rnf httpStatus