amazonka-elastictranscoder-0.3.3: gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-- Module : Network.AWS.ElasticTranscoder.CreatePipeline
-- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
-- License : This Source Code Form is subject to the terms of
-- the Mozilla Public License, v. 2.0.
-- A copy of the MPL can be found in the LICENSE file or
-- you can obtain it at http://mozilla.org/MPL/2.0/.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : experimental
-- Portability : non-portable (GHC extensions)
--
-- Derived from AWS service descriptions, licensed under Apache 2.0.
-- | The CreatePipeline operation creates a pipeline with settings that you
-- specify.
--
-- <http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/CreatePipeline.html>
module Network.AWS.ElasticTranscoder.CreatePipeline
(
-- * Request
CreatePipeline
-- ** Request constructor
, createPipeline
-- ** Request lenses
, cp1AwsKmsKeyArn
, cp1ContentConfig
, cp1InputBucket
, cp1Name
, cp1Notifications
, cp1OutputBucket
, cp1Role
, cp1ThumbnailConfig
-- * Response
, CreatePipelineResponse
-- ** Response constructor
, createPipelineResponse
-- ** Response lenses
, cprPipeline
, cprWarnings
) where
import Network.AWS.Prelude
import Network.AWS.Request.RestJSON
import Network.AWS.ElasticTranscoder.Types
import qualified GHC.Exts
data CreatePipeline = CreatePipeline
{ _cp1AwsKmsKeyArn :: Maybe Text
, _cp1ContentConfig :: Maybe PipelineOutputConfig
, _cp1InputBucket :: Text
, _cp1Name :: Text
, _cp1Notifications :: Maybe Notifications
, _cp1OutputBucket :: Maybe Text
, _cp1Role :: Text
, _cp1ThumbnailConfig :: Maybe PipelineOutputConfig
} deriving (Eq, Read, Show)
-- | 'CreatePipeline' constructor.
--
-- The fields accessible through corresponding lenses are:
--
-- * 'cp1AwsKmsKeyArn' @::@ 'Maybe' 'Text'
--
-- * 'cp1ContentConfig' @::@ 'Maybe' 'PipelineOutputConfig'
--
-- * 'cp1InputBucket' @::@ 'Text'
--
-- * 'cp1Name' @::@ 'Text'
--
-- * 'cp1Notifications' @::@ 'Maybe' 'Notifications'
--
-- * 'cp1OutputBucket' @::@ 'Maybe' 'Text'
--
-- * 'cp1Role' @::@ 'Text'
--
-- * 'cp1ThumbnailConfig' @::@ 'Maybe' 'PipelineOutputConfig'
--
createPipeline :: Text -- ^ 'cp1Name'
-> Text -- ^ 'cp1InputBucket'
-> Text -- ^ 'cp1Role'
-> CreatePipeline
createPipeline p1 p2 p3 = CreatePipeline
{ _cp1Name = p1
, _cp1InputBucket = p2
, _cp1Role = p3
, _cp1OutputBucket = Nothing
, _cp1AwsKmsKeyArn = Nothing
, _cp1Notifications = Nothing
, _cp1ContentConfig = Nothing
, _cp1ThumbnailConfig = Nothing
}
-- | The AWS Key Management Service (AWS KMS) key that you want to use with this
-- pipeline.
--
-- If you use either 'S3' or 'S3-AWS-KMS' as your 'Encryption:Mode', you don't need
-- to provide a key with your job because a default key, known as an AWS-KMS
-- key, is created for you automatically. You need to provide an AWS-KMS key
-- only if you want to use a non-default AWS-KMS key, or if you are using an 'Encryption:Mode' of 'AES-PKCS7', 'AES-CTR', or 'AES-GCM'.
cp1AwsKmsKeyArn :: Lens' CreatePipeline (Maybe Text)
cp1AwsKmsKeyArn = lens _cp1AwsKmsKeyArn (\s a -> s { _cp1AwsKmsKeyArn = a })
-- | The optional 'ContentConfig' object specifies information about the Amazon S3
-- bucket in which you want Elastic Transcoder to save transcoded files and
-- playlists: which bucket to use, which users you want to have access to the
-- files, the type of access you want users to have, and the storage class that
-- you want to assign to the files.
--
-- If you specify values for 'ContentConfig', you must also specify values for 'ThumbnailConfig'.
--
-- If you specify values for 'ContentConfig' and 'ThumbnailConfig', omit the 'OutputBucket' object.
--
-- Bucket: The Amazon S3 bucket in which you want Elastic Transcoder to save
-- transcoded files and playlists. Permissions (Optional): The Permissions
-- object specifies which users you want to have access to transcoded files and
-- the type of access you want them to have. You can grant permissions to a
-- maximum of 30 users and/or predefined Amazon S3 groups. Grantee Type:
-- Specify the type of value that appears in the 'Grantee' object: Canonical:
-- The value in the 'Grantee' object is either the canonical user ID for an AWS
-- account or an origin access identity for an Amazon CloudFront distribution.
-- For more information about canonical user IDs, see Access Control List (ACL)
-- Overview in the Amazon Simple Storage Service Developer Guide. For more
-- information about using CloudFront origin access identities to require that
-- users use CloudFront URLs instead of Amazon S3 URLs, see Using an Origin
-- Access Identity to Restrict Access to Your Amazon S3 Content. A canonical
-- user ID is not the same as an AWS account number. Email: The value in the 'Grantee' object is the registered email address of an AWS account. Group: The value
-- in the 'Grantee' object is one of the following predefined Amazon S3 groups: 'AllUsers', 'AuthenticatedUsers', or 'LogDelivery'. Grantee: The AWS user or group that
-- you want to have access to transcoded files and playlists. To identify the
-- user or group, you can specify the canonical user ID for an AWS account, an
-- origin access identity for a CloudFront distribution, the registered email
-- address of an AWS account, or a predefined Amazon S3 group Access: The
-- permission that you want to give to the AWS user that you specified in 'Grantee'
-- . Permissions are granted on the files that Elastic Transcoder adds to the
-- bucket, including playlists and video files. Valid values include: 'READ':
-- The grantee can read the objects and metadata for objects that Elastic
-- Transcoder adds to the Amazon S3 bucket. 'READ_ACP': The grantee can read the
-- object ACL for objects that Elastic Transcoder adds to the Amazon S3 bucket.
-- 'WRITE_ACP': The grantee can write the ACL for the objects that Elastic
-- Transcoder adds to the Amazon S3 bucket. 'FULL_CONTROL': The grantee has 'READ', 'READ_ACP', and 'WRITE_ACP' permissions for the objects that Elastic Transcoder
-- adds to the Amazon S3 bucket. StorageClass: The Amazon S3 storage class, 'Standard' or 'ReducedRedundancy', that you want Elastic Transcoder to assign to the
-- video files and playlists that it stores in your Amazon S3 bucket.
cp1ContentConfig :: Lens' CreatePipeline (Maybe PipelineOutputConfig)
cp1ContentConfig = lens _cp1ContentConfig (\s a -> s { _cp1ContentConfig = a })
-- | The Amazon S3 bucket in which you saved the media files that you want to
-- transcode.
cp1InputBucket :: Lens' CreatePipeline Text
cp1InputBucket = lens _cp1InputBucket (\s a -> s { _cp1InputBucket = a })
-- | The name of the pipeline. We recommend that the name be unique within the AWS
-- account, but uniqueness is not enforced.
--
-- Constraints: Maximum 40 characters.
cp1Name :: Lens' CreatePipeline Text
cp1Name = lens _cp1Name (\s a -> s { _cp1Name = a })
-- | The Amazon Simple Notification Service (Amazon SNS) topic that you want to
-- notify to report job status.
--
-- To receive notifications, you must also subscribe to the new topic in the
-- Amazon SNS console. Progressing: The topic ARN for the Amazon Simple
-- Notification Service (Amazon SNS) topic that you want to notify when Elastic
-- Transcoder has started to process a job in this pipeline. This is the ARN
-- that Amazon SNS returned when you created the topic. For more information,
-- see Create a Topic in the Amazon Simple Notification Service Developer Guide.
-- Completed: The topic ARN for the Amazon SNS topic that you want to notify
-- when Elastic Transcoder has finished processing a job in this pipeline. This
-- is the ARN that Amazon SNS returned when you created the topic. Warning: The
-- topic ARN for the Amazon SNS topic that you want to notify when Elastic
-- Transcoder encounters a warning condition while processing a job in this
-- pipeline. This is the ARN that Amazon SNS returned when you created the topic.
-- Error: The topic ARN for the Amazon SNS topic that you want to notify when
-- Elastic Transcoder encounters an error condition while processing a job in
-- this pipeline. This is the ARN that Amazon SNS returned when you created the
-- topic.
cp1Notifications :: Lens' CreatePipeline (Maybe Notifications)
cp1Notifications = lens _cp1Notifications (\s a -> s { _cp1Notifications = a })
-- | The Amazon S3 bucket in which you want Elastic Transcoder to save the
-- transcoded files. (Use this, or use ContentConfig:Bucket plus
-- ThumbnailConfig:Bucket.)
--
-- Specify this value when all of the following are true: You want to save
-- transcoded files, thumbnails (if any), and playlists (if any) together in one
-- bucket. You do not want to specify the users or groups who have access to the
-- transcoded files, thumbnails, and playlists. You do not want to specify the
-- permissions that Elastic Transcoder grants to the files. When Elastic
-- Transcoder saves files in 'OutputBucket', it grants full control over the files
-- only to the AWS account that owns the role that is specified by 'Role'. You
-- want to associate the transcoded files and thumbnails with the Amazon S3
-- Standard storage class.
--
-- If you want to save transcoded files and playlists in one bucket and
-- thumbnails in another bucket, specify which users can access the transcoded
-- files or the permissions the users have, or change the Amazon S3 storage
-- class, omit 'OutputBucket' and specify values for 'ContentConfig' and 'ThumbnailConfig' instead.
cp1OutputBucket :: Lens' CreatePipeline (Maybe Text)
cp1OutputBucket = lens _cp1OutputBucket (\s a -> s { _cp1OutputBucket = a })
-- | The IAM Amazon Resource Name (ARN) for the role that you want Elastic
-- Transcoder to use to create the pipeline.
cp1Role :: Lens' CreatePipeline Text
cp1Role = lens _cp1Role (\s a -> s { _cp1Role = a })
-- | The 'ThumbnailConfig' object specifies several values, including the Amazon S3
-- bucket in which you want Elastic Transcoder to save thumbnail files, which
-- users you want to have access to the files, the type of access you want users
-- to have, and the storage class that you want to assign to the files.
--
-- If you specify values for 'ContentConfig', you must also specify values for 'ThumbnailConfig' even if you don't want to create thumbnails.
--
-- If you specify values for 'ContentConfig' and 'ThumbnailConfig', omit the 'OutputBucket' object.
--
-- Bucket: The Amazon S3 bucket in which you want Elastic Transcoder to save
-- thumbnail files. Permissions (Optional): The 'Permissions' object specifies
-- which users and/or predefined Amazon S3 groups you want to have access to
-- thumbnail files, and the type of access you want them to have. You can grant
-- permissions to a maximum of 30 users and/or predefined Amazon S3 groups. GranteeType
-- : Specify the type of value that appears in the Grantee object: Canonical:
-- The value in the 'Grantee' object is either the canonical user ID for an AWS
-- account or an origin access identity for an Amazon CloudFront distribution. A
-- canonical user ID is not the same as an AWS account number. Email: The
-- value in the 'Grantee' object is the registered email address of an AWS
-- account. Group: The value in the 'Grantee' object is one of the following
-- predefined Amazon S3 groups: 'AllUsers', 'AuthenticatedUsers', or 'LogDelivery'.
-- Grantee: The AWS user or group that you want to have access to thumbnail
-- files. To identify the user or group, you can specify the canonical user ID
-- for an AWS account, an origin access identity for a CloudFront distribution,
-- the registered email address of an AWS account, or a predefined Amazon S3
-- group. Access: The permission that you want to give to the AWS user that
-- you specified in 'Grantee'. Permissions are granted on the thumbnail files that
-- Elastic Transcoder adds to the bucket. Valid values include: 'READ': The
-- grantee can read the thumbnails and metadata for objects that Elastic
-- Transcoder adds to the Amazon S3 bucket. 'READ_ACP': The grantee can read the
-- object ACL for thumbnails that Elastic Transcoder adds to the Amazon S3
-- bucket. 'WRITE_ACP': The grantee can write the ACL for the thumbnails that
-- Elastic Transcoder adds to the Amazon S3 bucket. 'FULL_CONTROL': The grantee
-- has 'READ', 'READ_ACP', and 'WRITE_ACP' permissions for the thumbnails that Elastic
-- Transcoder adds to the Amazon S3 bucket. StorageClass: The Amazon S3
-- storage class, 'Standard' or 'ReducedRedundancy', that you want Elastic
-- Transcoder to assign to the thumbnails that it stores in your Amazon S3
-- bucket.
cp1ThumbnailConfig :: Lens' CreatePipeline (Maybe PipelineOutputConfig)
cp1ThumbnailConfig =
lens _cp1ThumbnailConfig (\s a -> s { _cp1ThumbnailConfig = a })
data CreatePipelineResponse = CreatePipelineResponse
{ _cprPipeline :: Maybe Pipeline
, _cprWarnings :: List "Warnings" Warning
} deriving (Eq, Read, Show)
-- | 'CreatePipelineResponse' constructor.
--
-- The fields accessible through corresponding lenses are:
--
-- * 'cprPipeline' @::@ 'Maybe' 'Pipeline'
--
-- * 'cprWarnings' @::@ ['Warning']
--
createPipelineResponse :: CreatePipelineResponse
createPipelineResponse = CreatePipelineResponse
{ _cprPipeline = Nothing
, _cprWarnings = mempty
}
-- | A section of the response body that provides information about the pipeline
-- that is created.
cprPipeline :: Lens' CreatePipelineResponse (Maybe Pipeline)
cprPipeline = lens _cprPipeline (\s a -> s { _cprPipeline = a })
-- | Elastic Transcoder returns a warning if the resources used by your pipeline
-- are not in the same region as the pipeline.
--
-- Using resources in the same region, such as your Amazon S3 buckets, Amazon
-- SNS notification topics, and AWS KMS key, reduces processing time and
-- prevents cross-regional charges.
cprWarnings :: Lens' CreatePipelineResponse [Warning]
cprWarnings = lens _cprWarnings (\s a -> s { _cprWarnings = a }) . _List
instance ToPath CreatePipeline where
toPath = const "/2012-09-25/pipelines"
instance ToQuery CreatePipeline where
toQuery = const mempty
instance ToHeaders CreatePipeline
instance ToJSON CreatePipeline where
toJSON CreatePipeline{..} = object
[ "Name" .= _cp1Name
, "InputBucket" .= _cp1InputBucket
, "OutputBucket" .= _cp1OutputBucket
, "Role" .= _cp1Role
, "AwsKmsKeyArn" .= _cp1AwsKmsKeyArn
, "Notifications" .= _cp1Notifications
, "ContentConfig" .= _cp1ContentConfig
, "ThumbnailConfig" .= _cp1ThumbnailConfig
]
instance AWSRequest CreatePipeline where
type Sv CreatePipeline = ElasticTranscoder
type Rs CreatePipeline = CreatePipelineResponse
request = post
response = jsonResponse
instance FromJSON CreatePipelineResponse where
parseJSON = withObject "CreatePipelineResponse" $ \o -> CreatePipelineResponse
<$> o .:? "Pipeline"
<*> o .:? "Warnings" .!= mempty