{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.Firehose.CreateDeliveryStream -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Creates a delivery stream. -- -- < CreateDeliveryStream> is an asynchronous operation that immediately returns. The initial status of the delivery stream is 'CREATING'. After the delivery stream is created, its status is 'ACTIVE' and it now accepts data. Attempts to send data to a delivery stream that is not in the 'ACTIVE' state cause an exception. To check the state of a delivery stream, use < DescribeDeliveryStream>. -- -- The name of a delivery stream identifies it. You can\'t have two delivery streams with the same name in the same region. Two delivery streams in different AWS accounts or different regions in the same AWS account can have the same name. -- -- By default, you can create up to 20 delivery streams per region. -- -- A delivery stream can only be configured with a single destination, Amazon S3, Amazon Elasticsearch Service, or Amazon Redshift. For correct < CreateDeliveryStream> request syntax, specify only one destination configuration parameter: either __S3DestinationConfiguration__, __ElasticsearchDestinationConfiguration__, or __RedshiftDestinationConfiguration__. -- -- As part of __S3DestinationConfiguration__, optional values __BufferingHints__, __EncryptionConfiguration__, and __CompressionFormat__ can be provided. By default, if no __BufferingHints__ value is provided, Firehose buffers data up to 5 MB or for 5 minutes, whichever condition is satisfied first. Note that __BufferingHints__ is a hint, so there are some cases where the service cannot adhere to these conditions strictly; for example, record boundaries are such that the size is a little over or under the configured buffering size. By default, no encryption is performed. We strongly recommend that you enable encryption to ensure secure data storage in Amazon S3. -- -- A few notes about __RedshiftDestinationConfiguration__: -- -- - An Amazon Redshift destination requires an S3 bucket as intermediate location, as Firehose first delivers data to S3 and then uses 'COPY' syntax to load data into an Amazon Redshift table. This is specified in the __RedshiftDestinationConfiguration.S3Configuration__ parameter element. -- -- - The compression formats 'SNAPPY' or 'ZIP' cannot be specified in __RedshiftDestinationConfiguration.S3Configuration__ because the Amazon Redshift 'COPY' operation that reads from the S3 bucket doesn\'t support these compression formats. -- -- - We strongly recommend that the username and password provided is used exclusively for Firehose purposes, and that the permissions for the account are restricted for Amazon Redshift 'INSERT' permissions. -- -- Firehose assumes the IAM role that is configured as part of destinations. The IAM role should allow the Firehose principal to assume the role, and the role should have permissions that allows the service to deliver the data. For more information, see in the /Amazon Kinesis Firehose Developer Guide/. module Network.AWS.Firehose.CreateDeliveryStream ( -- * Creating a Request createDeliveryStream , CreateDeliveryStream -- * Request Lenses , cdsS3DestinationConfiguration , cdsRedshiftDestinationConfiguration , cdsElasticsearchDestinationConfiguration , cdsDeliveryStreamName -- * Destructuring the Response , createDeliveryStreamResponse , CreateDeliveryStreamResponse -- * Response Lenses , cdsrsDeliveryStreamARN , cdsrsResponseStatus ) where import Network.AWS.Firehose.Types import Network.AWS.Firehose.Types.Product import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response -- | Contains the parameters for < CreateDeliveryStream>. -- -- /See:/ 'createDeliveryStream' smart constructor. data CreateDeliveryStream = CreateDeliveryStream' { _cdsS3DestinationConfiguration :: !(Maybe S3DestinationConfiguration) , _cdsRedshiftDestinationConfiguration :: !(Maybe RedshiftDestinationConfiguration) , _cdsElasticsearchDestinationConfiguration :: !(Maybe ElasticsearchDestinationConfiguration) , _cdsDeliveryStreamName :: !Text } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateDeliveryStream' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cdsS3DestinationConfiguration' -- -- * 'cdsRedshiftDestinationConfiguration' -- -- * 'cdsElasticsearchDestinationConfiguration' -- -- * 'cdsDeliveryStreamName' createDeliveryStream :: Text -- ^ 'cdsDeliveryStreamName' -> CreateDeliveryStream createDeliveryStream pDeliveryStreamName_ = CreateDeliveryStream' { _cdsS3DestinationConfiguration = Nothing , _cdsRedshiftDestinationConfiguration = Nothing , _cdsElasticsearchDestinationConfiguration = Nothing , _cdsDeliveryStreamName = pDeliveryStreamName_ } -- | The destination in Amazon S3. This value must be specified if __ElasticsearchDestinationConfiguration__ or __RedshiftDestinationConfiguration__ is specified (see restrictions listed above). cdsS3DestinationConfiguration :: Lens' CreateDeliveryStream (Maybe S3DestinationConfiguration) cdsS3DestinationConfiguration = lens _cdsS3DestinationConfiguration (\ s a -> s{_cdsS3DestinationConfiguration = a}); -- | The destination in Amazon Redshift. This value cannot be specified if Amazon S3 or Amazon Elasticsearch is the desired destination (see restrictions listed above). cdsRedshiftDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe RedshiftDestinationConfiguration) cdsRedshiftDestinationConfiguration = lens _cdsRedshiftDestinationConfiguration (\ s a -> s{_cdsRedshiftDestinationConfiguration = a}); -- | The destination in Amazon ES. This value cannot be specified if Amazon S3 or Amazon Redshift is the desired destination (see restrictions listed above). cdsElasticsearchDestinationConfiguration :: Lens' CreateDeliveryStream (Maybe ElasticsearchDestinationConfiguration) cdsElasticsearchDestinationConfiguration = lens _cdsElasticsearchDestinationConfiguration (\ s a -> s{_cdsElasticsearchDestinationConfiguration = a}); -- | The name of the delivery stream. cdsDeliveryStreamName :: Lens' CreateDeliveryStream Text cdsDeliveryStreamName = lens _cdsDeliveryStreamName (\ s a -> s{_cdsDeliveryStreamName = a}); instance AWSRequest CreateDeliveryStream where type Rs CreateDeliveryStream = CreateDeliveryStreamResponse request = postJSON firehose response = receiveJSON (\ s h x -> CreateDeliveryStreamResponse' <$> (x .?> "DeliveryStreamARN") <*> (pure (fromEnum s))) instance Hashable CreateDeliveryStream instance NFData CreateDeliveryStream instance ToHeaders CreateDeliveryStream where toHeaders = const (mconcat ["X-Amz-Target" =# ("Firehose_20150804.CreateDeliveryStream" :: ByteString), "Content-Type" =# ("application/x-amz-json-1.1" :: ByteString)]) instance ToJSON CreateDeliveryStream where toJSON CreateDeliveryStream'{..} = object (catMaybes [("S3DestinationConfiguration" .=) <$> _cdsS3DestinationConfiguration, ("RedshiftDestinationConfiguration" .=) <$> _cdsRedshiftDestinationConfiguration, ("ElasticsearchDestinationConfiguration" .=) <$> _cdsElasticsearchDestinationConfiguration, Just ("DeliveryStreamName" .= _cdsDeliveryStreamName)]) instance ToPath CreateDeliveryStream where toPath = const "/" instance ToQuery CreateDeliveryStream where toQuery = const mempty -- | Contains the output of < CreateDeliveryStream>. -- -- /See:/ 'createDeliveryStreamResponse' smart constructor. data CreateDeliveryStreamResponse = CreateDeliveryStreamResponse' { _cdsrsDeliveryStreamARN :: !(Maybe Text) , _cdsrsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'CreateDeliveryStreamResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cdsrsDeliveryStreamARN' -- -- * 'cdsrsResponseStatus' createDeliveryStreamResponse :: Int -- ^ 'cdsrsResponseStatus' -> CreateDeliveryStreamResponse createDeliveryStreamResponse pResponseStatus_ = CreateDeliveryStreamResponse' { _cdsrsDeliveryStreamARN = Nothing , _cdsrsResponseStatus = pResponseStatus_ } -- | The ARN of the delivery stream. cdsrsDeliveryStreamARN :: Lens' CreateDeliveryStreamResponse (Maybe Text) cdsrsDeliveryStreamARN = lens _cdsrsDeliveryStreamARN (\ s a -> s{_cdsrsDeliveryStreamARN = a}); -- | The response status code. cdsrsResponseStatus :: Lens' CreateDeliveryStreamResponse Int cdsrsResponseStatus = lens _cdsrsResponseStatus (\ s a -> s{_cdsrsResponseStatus = a}); instance NFData CreateDeliveryStreamResponse