amazonka-kinesis-firehose-1.4.1: gen/Network/AWS/Firehose/UpdateDestination.hs
{-# 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.UpdateDestination
-- Copyright : (c) 2013-2016 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the specified destination of the specified delivery stream.
-- Note: Switching between Elasticsearch and other services is not
-- supported. For Elasticsearch destination, you can only update an
-- existing Elasticsearch destination with this operation.
--
-- This operation can be used to change the destination type (for example,
-- to replace the Amazon S3 destination with Amazon Redshift) or change the
-- parameters associated with a given destination (for example, to change
-- the bucket name of the Amazon S3 destination). The update may not occur
-- immediately. The target delivery stream remains active while the
-- configurations are updated, so data writes to the delivery stream can
-- continue during this process. The updated configurations are normally
-- effective within a few minutes.
--
-- If the destination type is the same, Firehose merges the configuration
-- parameters specified in the < UpdateDestination> request with the
-- destination configuration that already exists on the delivery stream. If
-- any of the parameters are not specified in the update request, then the
-- existing configuration parameters are retained. For example, in the
-- Amazon S3 destination, if < EncryptionConfiguration> is not specified
-- then the existing < EncryptionConfiguration> is maintained on the
-- destination.
--
-- If the destination type is not the same, for example, changing the
-- destination from Amazon S3 to Amazon Redshift, Firehose does not merge
-- any parameters. In this case, all parameters must be specified.
--
-- Firehose uses the __CurrentDeliveryStreamVersionId__ to avoid race
-- conditions and conflicting merges. This is a required field in every
-- request and the service only updates the configuration if the existing
-- configuration matches the __VersionId__. After the update is applied
-- successfully, the __VersionId__ is updated, which can be retrieved with
-- the < DescribeDeliveryStream> operation. The new __VersionId__ should be
-- uses to set __CurrentDeliveryStreamVersionId__ in the next
-- < UpdateDestination> operation.
module Network.AWS.Firehose.UpdateDestination
(
-- * Creating a Request
updateDestination
, UpdateDestination
-- * Request Lenses
, udS3DestinationUpdate
, udRedshiftDestinationUpdate
, udElasticsearchDestinationUpdate
, udDeliveryStreamName
, udCurrentDeliveryStreamVersionId
, udDestinationId
-- * Destructuring the Response
, updateDestinationResponse
, UpdateDestinationResponse
-- * Response Lenses
, udrsResponseStatus
) 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 < UpdateDestination>.
--
-- /See:/ 'updateDestination' smart constructor.
data UpdateDestination = UpdateDestination'
{ _udS3DestinationUpdate :: !(Maybe S3DestinationUpdate)
, _udRedshiftDestinationUpdate :: !(Maybe RedshiftDestinationUpdate)
, _udElasticsearchDestinationUpdate :: !(Maybe ElasticsearchDestinationUpdate)
, _udDeliveryStreamName :: !Text
, _udCurrentDeliveryStreamVersionId :: !Text
, _udDestinationId :: !Text
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'UpdateDestination' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'udS3DestinationUpdate'
--
-- * 'udRedshiftDestinationUpdate'
--
-- * 'udElasticsearchDestinationUpdate'
--
-- * 'udDeliveryStreamName'
--
-- * 'udCurrentDeliveryStreamVersionId'
--
-- * 'udDestinationId'
updateDestination
:: Text -- ^ 'udDeliveryStreamName'
-> Text -- ^ 'udCurrentDeliveryStreamVersionId'
-> Text -- ^ 'udDestinationId'
-> UpdateDestination
updateDestination pDeliveryStreamName_ pCurrentDeliveryStreamVersionId_ pDestinationId_ =
UpdateDestination'
{ _udS3DestinationUpdate = Nothing
, _udRedshiftDestinationUpdate = Nothing
, _udElasticsearchDestinationUpdate = Nothing
, _udDeliveryStreamName = pDeliveryStreamName_
, _udCurrentDeliveryStreamVersionId = pCurrentDeliveryStreamVersionId_
, _udDestinationId = pDestinationId_
}
-- | Undocumented member.
udS3DestinationUpdate :: Lens' UpdateDestination (Maybe S3DestinationUpdate)
udS3DestinationUpdate = lens _udS3DestinationUpdate (\ s a -> s{_udS3DestinationUpdate = a});
-- | Undocumented member.
udRedshiftDestinationUpdate :: Lens' UpdateDestination (Maybe RedshiftDestinationUpdate)
udRedshiftDestinationUpdate = lens _udRedshiftDestinationUpdate (\ s a -> s{_udRedshiftDestinationUpdate = a});
-- | Describes an update for a destination in Amazon ES.
udElasticsearchDestinationUpdate :: Lens' UpdateDestination (Maybe ElasticsearchDestinationUpdate)
udElasticsearchDestinationUpdate = lens _udElasticsearchDestinationUpdate (\ s a -> s{_udElasticsearchDestinationUpdate = a});
-- | The name of the delivery stream.
udDeliveryStreamName :: Lens' UpdateDestination Text
udDeliveryStreamName = lens _udDeliveryStreamName (\ s a -> s{_udDeliveryStreamName = a});
-- | Obtain this value from the __VersionId__ result of the
-- < DeliveryStreamDescription> operation. This value is required, and
-- helps the service to perform conditional operations. For example, if
-- there is a interleaving update and this value is null, then the update
-- destination fails. After the update is successful, the __VersionId__
-- value is updated. The service then performs a merge of the old
-- configuration with the new configuration.
udCurrentDeliveryStreamVersionId :: Lens' UpdateDestination Text
udCurrentDeliveryStreamVersionId = lens _udCurrentDeliveryStreamVersionId (\ s a -> s{_udCurrentDeliveryStreamVersionId = a});
-- | The ID of the destination.
udDestinationId :: Lens' UpdateDestination Text
udDestinationId = lens _udDestinationId (\ s a -> s{_udDestinationId = a});
instance AWSRequest UpdateDestination where
type Rs UpdateDestination = UpdateDestinationResponse
request = postJSON firehose
response
= receiveEmpty
(\ s h x ->
UpdateDestinationResponse' <$> (pure (fromEnum s)))
instance Hashable UpdateDestination
instance NFData UpdateDestination
instance ToHeaders UpdateDestination where
toHeaders
= const
(mconcat
["X-Amz-Target" =#
("Firehose_20150804.UpdateDestination" ::
ByteString),
"Content-Type" =#
("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON UpdateDestination where
toJSON UpdateDestination'{..}
= object
(catMaybes
[("S3DestinationUpdate" .=) <$>
_udS3DestinationUpdate,
("RedshiftDestinationUpdate" .=) <$>
_udRedshiftDestinationUpdate,
("ElasticsearchDestinationUpdate" .=) <$>
_udElasticsearchDestinationUpdate,
Just ("DeliveryStreamName" .= _udDeliveryStreamName),
Just
("CurrentDeliveryStreamVersionId" .=
_udCurrentDeliveryStreamVersionId),
Just ("DestinationId" .= _udDestinationId)])
instance ToPath UpdateDestination where
toPath = const "/"
instance ToQuery UpdateDestination where
toQuery = const mempty
-- | Contains the output of < UpdateDestination>.
--
-- /See:/ 'updateDestinationResponse' smart constructor.
newtype UpdateDestinationResponse = UpdateDestinationResponse'
{ _udrsResponseStatus :: Int
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'UpdateDestinationResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'udrsResponseStatus'
updateDestinationResponse
:: Int -- ^ 'udrsResponseStatus'
-> UpdateDestinationResponse
updateDestinationResponse pResponseStatus_ =
UpdateDestinationResponse'
{ _udrsResponseStatus = pResponseStatus_
}
-- | The response status code.
udrsResponseStatus :: Lens' UpdateDestinationResponse Int
udrsResponseStatus = lens _udrsResponseStatus (\ s a -> s{_udrsResponseStatus = a});
instance NFData UpdateDestinationResponse