diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.0`
+`1.4.1`
 
 
 ## Description
@@ -16,8 +16,9 @@
 Amazon Kinesis Firehose API Reference
 
 Amazon Kinesis Firehose is a fully-managed service that delivers
-real-time streaming data to destinations such as Amazon S3 and Amazon
-Redshift.
+real-time streaming data to destinations such as Amazon Simple Storage
+Service (Amazon S3), Amazon Elasticsearch Service (Amazon ES), and
+Amazon Redshift.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-kinesis-firehose)
 and the [AWS API Reference](https://aws.amazon.com/documentation/).
diff --git a/amazonka-kinesis-firehose.cabal b/amazonka-kinesis-firehose.cabal
--- a/amazonka-kinesis-firehose.cabal
+++ b/amazonka-kinesis-firehose.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-kinesis-firehose
-version:               1.4.0
+version:               1.4.1
 synopsis:              Amazon Kinesis Firehose SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -16,8 +16,9 @@
     Amazon Kinesis Firehose API Reference
 
     Amazon Kinesis Firehose is a fully-managed service that delivers
-    real-time streaming data to destinations such as Amazon S3 and Amazon
-    Redshift.
+    real-time streaming data to destinations such as Amazon Simple Storage
+    Service (Amazon S3), Amazon Elasticsearch Service (Amazon ES), and
+    Amazon Redshift.
     .
     The types from this library are intended to be used with
     <http://hackage.haskell.org/package/amazonka amazonka>, which provides
@@ -60,7 +61,7 @@
         , Network.AWS.Firehose.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.0.*
+          amazonka-core == 1.4.1.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-kinesis-firehose-test
@@ -80,9 +81,9 @@
         , Test.AWS.Firehose.Internal
 
     build-depends:
-          amazonka-core == 1.4.0.*
-        , amazonka-test == 1.4.0.*
-        , amazonka-kinesis-firehose == 1.4.0.*
+          amazonka-core == 1.4.1.*
+        , amazonka-test == 1.4.1.*
+        , amazonka-kinesis-firehose == 1.4.1.*
         , base
         , bytestring
         , tasty
diff --git a/gen/Network/AWS/Firehose.hs b/gen/Network/AWS/Firehose.hs
--- a/gen/Network/AWS/Firehose.hs
+++ b/gen/Network/AWS/Firehose.hs
@@ -14,8 +14,9 @@
 -- Amazon Kinesis Firehose API Reference
 --
 -- Amazon Kinesis Firehose is a fully-managed service that delivers
--- real-time streaming data to destinations such as Amazon S3 and Amazon
--- Redshift.
+-- real-time streaming data to destinations such as Amazon Simple Storage
+-- Service (Amazon S3), Amazon Elasticsearch Service (Amazon ES), and
+-- Amazon Redshift.
 module Network.AWS.Firehose
     (
     -- * Service Configuration
@@ -77,6 +78,12 @@
     -- ** DeliveryStreamStatus
     , DeliveryStreamStatus (..)
 
+    -- ** ElasticsearchIndexRotationPeriod
+    , ElasticsearchIndexRotationPeriod (..)
+
+    -- ** ElasticsearchS3BackupMode
+    , ElasticsearchS3BackupMode (..)
+
     -- ** NoEncryptionConfig
     , NoEncryptionConfig (..)
 
@@ -86,6 +93,13 @@
     , bhSizeInMBs
     , bhIntervalInSeconds
 
+    -- ** CloudWatchLoggingOptions
+    , CloudWatchLoggingOptions
+    , cloudWatchLoggingOptions
+    , cwloEnabled
+    , cwloLogGroupName
+    , cwloLogStreamName
+
     -- ** CopyCommand
     , CopyCommand
     , copyCommand
@@ -109,9 +123,62 @@
     , DestinationDescription
     , destinationDescription
     , ddS3DestinationDescription
+    , ddElasticsearchDestinationDescription
     , ddRedshiftDestinationDescription
     , ddDestinationId
 
+    -- ** ElasticsearchBufferingHints
+    , ElasticsearchBufferingHints
+    , elasticsearchBufferingHints
+    , ebhSizeInMBs
+    , ebhIntervalInSeconds
+
+    -- ** ElasticsearchDestinationConfiguration
+    , ElasticsearchDestinationConfiguration
+    , elasticsearchDestinationConfiguration
+    , edcIndexRotationPeriod
+    , edcS3BackupMode
+    , edcCloudWatchLoggingOptions
+    , edcBufferingHints
+    , edcRetryOptions
+    , edcRoleARN
+    , edcDomainARN
+    , edcIndexName
+    , edcTypeName
+    , edcS3Configuration
+
+    -- ** ElasticsearchDestinationDescription
+    , ElasticsearchDestinationDescription
+    , elasticsearchDestinationDescription
+    , eddIndexRotationPeriod
+    , eddTypeName
+    , eddS3BackupMode
+    , eddDomainARN
+    , eddCloudWatchLoggingOptions
+    , eddS3DestinationDescription
+    , eddBufferingHints
+    , eddRetryOptions
+    , eddRoleARN
+    , eddIndexName
+
+    -- ** ElasticsearchDestinationUpdate
+    , ElasticsearchDestinationUpdate
+    , elasticsearchDestinationUpdate
+    , eduIndexRotationPeriod
+    , eduTypeName
+    , eduDomainARN
+    , eduCloudWatchLoggingOptions
+    , eduS3Update
+    , eduBufferingHints
+    , eduRetryOptions
+    , eduRoleARN
+    , eduIndexName
+
+    -- ** ElasticsearchRetryOptions
+    , ElasticsearchRetryOptions
+    , elasticsearchRetryOptions
+    , eroDurationInSeconds
+
     -- ** EncryptionConfiguration
     , EncryptionConfiguration
     , encryptionConfiguration
@@ -138,6 +205,7 @@
     -- ** RedshiftDestinationConfiguration
     , RedshiftDestinationConfiguration
     , redshiftDestinationConfiguration
+    , rdcCloudWatchLoggingOptions
     , rdcRoleARN
     , rdcClusterJDBCURL
     , rdcCopyCommand
@@ -148,6 +216,7 @@
     -- ** RedshiftDestinationDescription
     , RedshiftDestinationDescription
     , redshiftDestinationDescription
+    , rddCloudWatchLoggingOptions
     , rddRoleARN
     , rddClusterJDBCURL
     , rddCopyCommand
@@ -157,6 +226,7 @@
     -- ** RedshiftDestinationUpdate
     , RedshiftDestinationUpdate
     , redshiftDestinationUpdate
+    , rduCloudWatchLoggingOptions
     , rduUsername
     , rduS3Update
     , rduPassword
@@ -168,6 +238,7 @@
     , S3DestinationConfiguration
     , s3DestinationConfiguration
     , sdcPrefix
+    , sdcCloudWatchLoggingOptions
     , sdcEncryptionConfiguration
     , sdcCompressionFormat
     , sdcBufferingHints
@@ -178,6 +249,7 @@
     , S3DestinationDescription
     , s3DestinationDescription
     , sddPrefix
+    , sddCloudWatchLoggingOptions
     , sddRoleARN
     , sddBucketARN
     , sddBufferingHints
@@ -188,6 +260,7 @@
     , S3DestinationUpdate
     , s3DestinationUpdate
     , sduPrefix
+    , sduCloudWatchLoggingOptions
     , sduEncryptionConfiguration
     , sduCompressionFormat
     , sduBufferingHints
diff --git a/gen/Network/AWS/Firehose/CreateDeliveryStream.hs b/gen/Network/AWS/Firehose/CreateDeliveryStream.hs
--- a/gen/Network/AWS/Firehose/CreateDeliveryStream.hs
+++ b/gen/Network/AWS/Firehose/CreateDeliveryStream.hs
@@ -32,46 +32,45 @@
 -- 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 5 delivery streams per region.
+-- 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 or Amazon Redshift. For correct < CreateDeliveryStream>
 -- request syntax, specify only one destination configuration parameter:
--- either 'RedshiftDestinationConfiguration' or
--- 'S3DestinationConfiguration'
+-- either __ElasticsearchDestinationConfiguration__,
+-- __RedshiftDestinationConfiguration__ or __S3DestinationConfiguration__
 --
--- As part of 'S3DestinationConfiguration', optional values
--- 'BufferingHints', 'EncryptionConfiguration', and 'CompressionFormat' can
--- be provided. By default, if no 'BufferingHints' value is provided,
--- Amazon Kinesis 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.
+-- 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':
+-- A few notes about __RedshiftDestinationConfiguration__:
 --
 -- -   An Amazon Redshift destination requires an S3 bucket as intermediate
---     location, as Amazon Kinesis 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.
+--     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
+--     __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 Amazon Kinesis Firehose purposes, and that the
---     permissions for the account are restricted for Amazon Redshift
---     'INSERT' permissions.
+--     used exclusively for Firehose purposes, and that the permissions for
+--     the account are restricted for Amazon Redshift 'INSERT' permissions.
 --
--- Amazon Kinesis Firehose assumes the IAM role that is configured as part
--- of destinations. The IAM role should allow the Amazon Kinesis Firehose
--- principal to assume the role, and the role should have permissions that
--- allows the service to deliver the data. For more information, see
+-- 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
 -- <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access>
 -- in the /Amazon Kinesis Firehose Developer Guide/.
 module Network.AWS.Firehose.CreateDeliveryStream
@@ -82,6 +81,7 @@
     -- * Request Lenses
     , cdsS3DestinationConfiguration
     , cdsRedshiftDestinationConfiguration
+    , cdsElasticsearchDestinationConfiguration
     , cdsDeliveryStreamName
 
     -- * Destructuring the Response
@@ -103,9 +103,10 @@
 --
 -- /See:/ 'createDeliveryStream' smart constructor.
 data CreateDeliveryStream = CreateDeliveryStream'
-    { _cdsS3DestinationConfiguration       :: !(Maybe S3DestinationConfiguration)
-    , _cdsRedshiftDestinationConfiguration :: !(Maybe RedshiftDestinationConfiguration)
-    , _cdsDeliveryStreamName               :: !Text
+    { _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.
@@ -116,6 +117,8 @@
 --
 -- * 'cdsRedshiftDestinationConfiguration'
 --
+-- * 'cdsElasticsearchDestinationConfiguration'
+--
 -- * 'cdsDeliveryStreamName'
 createDeliveryStream
     :: Text -- ^ 'cdsDeliveryStreamName'
@@ -124,20 +127,29 @@
     CreateDeliveryStream'
     { _cdsS3DestinationConfiguration = Nothing
     , _cdsRedshiftDestinationConfiguration = Nothing
+    , _cdsElasticsearchDestinationConfiguration = Nothing
     , _cdsDeliveryStreamName = pDeliveryStreamName_
     }
 
 -- | The destination in Amazon S3. This value must be specified if
--- 'RedshiftDestinationConfiguration' is specified (see restrictions listed
--- above).
+-- __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 is the desired destination (see restrictions listed above).
+-- 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});
@@ -154,6 +166,8 @@
 
 instance Hashable CreateDeliveryStream
 
+instance NFData CreateDeliveryStream
+
 instance ToHeaders CreateDeliveryStream where
         toHeaders
           = const
@@ -172,6 +186,8 @@
                     _cdsS3DestinationConfiguration,
                   ("RedshiftDestinationConfiguration" .=) <$>
                     _cdsRedshiftDestinationConfiguration,
+                  ("ElasticsearchDestinationConfiguration" .=) <$>
+                    _cdsElasticsearchDestinationConfiguration,
                   Just
                     ("DeliveryStreamName" .= _cdsDeliveryStreamName)])
 
@@ -212,3 +228,5 @@
 -- | The response status code.
 cdsrsResponseStatus :: Lens' CreateDeliveryStreamResponse Int
 cdsrsResponseStatus = lens _cdsrsResponseStatus (\ s a -> s{_cdsrsResponseStatus = a});
+
+instance NFData CreateDeliveryStreamResponse
diff --git a/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs b/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs
--- a/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs
+++ b/gen/Network/AWS/Firehose/DeleteDeliveryStream.hs
@@ -89,6 +89,8 @@
 
 instance Hashable DeleteDeliveryStream
 
+instance NFData DeleteDeliveryStream
+
 instance ToHeaders DeleteDeliveryStream where
         toHeaders
           = const
@@ -135,3 +137,5 @@
 -- | The response status code.
 drsResponseStatus :: Lens' DeleteDeliveryStreamResponse Int
 drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+
+instance NFData DeleteDeliveryStreamResponse
diff --git a/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs b/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs
--- a/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs
+++ b/gen/Network/AWS/Firehose/DescribeDeliveryStream.hs
@@ -76,8 +76,8 @@
     }
 
 -- | Specifies the destination ID to start returning the destination
--- information. Currently Amazon Kinesis Firehose supports one destination
--- per delivery stream.
+-- information. Currently Firehose supports one destination per delivery
+-- stream.
 ddsExclusiveStartDestinationId :: Lens' DescribeDeliveryStream (Maybe Text)
 ddsExclusiveStartDestinationId = lens _ddsExclusiveStartDestinationId (\ s a -> s{_ddsExclusiveStartDestinationId = a});
 
@@ -103,6 +103,8 @@
 
 instance Hashable DescribeDeliveryStream
 
+instance NFData DescribeDeliveryStream
+
 instance ToHeaders DescribeDeliveryStream where
         toHeaders
           = const
@@ -161,3 +163,5 @@
 -- | Information about the delivery stream.
 ddsrsDeliveryStreamDescription :: Lens' DescribeDeliveryStreamResponse DeliveryStreamDescription
 ddsrsDeliveryStreamDescription = lens _ddsrsDeliveryStreamDescription (\ s a -> s{_ddsrsDeliveryStreamDescription = a});
+
+instance NFData DescribeDeliveryStreamResponse
diff --git a/gen/Network/AWS/Firehose/ListDeliveryStreams.hs b/gen/Network/AWS/Firehose/ListDeliveryStreams.hs
--- a/gen/Network/AWS/Firehose/ListDeliveryStreams.hs
+++ b/gen/Network/AWS/Firehose/ListDeliveryStreams.hs
@@ -22,12 +22,12 @@
 --
 -- The number of delivery streams might be too large to return using a
 -- single call to < ListDeliveryStreams>. You can limit the number of
--- delivery streams returned, using the 'Limit' parameter. To determine
+-- delivery streams returned, using the __Limit__ parameter. To determine
 -- whether there are more delivery streams to list, check the value of
--- 'HasMoreDeliveryStreams' in the output. If there are more delivery
+-- __HasMoreDeliveryStreams__ in the output. If there are more delivery
 -- streams to list, you can request them by specifying the name of the last
 -- delivery stream returned in the call in the
--- 'ExclusiveStartDeliveryStreamName' parameter of a subsequent call.
+-- __ExclusiveStartDeliveryStreamName__ parameter of a subsequent call.
 module Network.AWS.Firehose.ListDeliveryStreams
     (
     -- * Creating a Request
@@ -98,6 +98,8 @@
 
 instance Hashable ListDeliveryStreams
 
+instance NFData ListDeliveryStreams
+
 instance ToHeaders ListDeliveryStreams where
         toHeaders
           = const
@@ -162,3 +164,5 @@
 -- | Indicates whether there are more delivery streams available to list.
 ldsrsHasMoreDeliveryStreams :: Lens' ListDeliveryStreamsResponse Bool
 ldsrsHasMoreDeliveryStreams = lens _ldsrsHasMoreDeliveryStreams (\ s a -> s{_ldsrsHasMoreDeliveryStreams = a});
+
+instance NFData ListDeliveryStreamsResponse
diff --git a/gen/Network/AWS/Firehose/PutRecord.hs b/gen/Network/AWS/Firehose/PutRecord.hs
--- a/gen/Network/AWS/Firehose/PutRecord.hs
+++ b/gen/Network/AWS/Firehose/PutRecord.hs
@@ -36,30 +36,25 @@
 -- segment from a log file, geographic location data, web site clickstream
 -- data, etc.
 --
--- Amazon Kinesis Firehose buffers records before delivering them to the
--- destination. To disambiguate the data blobs at the destination, a common
--- solution is to use delimiters in the data, such as a newline ('\\n') or
--- some other character unique within the data. This allows the consumer
+-- Firehose buffers records before delivering them to the destination. To
+-- disambiguate the data blobs at the destination, a common solution is to
+-- use delimiters in the data, such as a newline ('\\n') or some other
+-- character unique within the data. This allows the consumer
 -- application(s) to parse individual data items when reading the data from
 -- the destination.
 --
--- Amazon Kinesis Firehose does not maintain data record ordering. If the
--- destination data needs to be re-ordered by the consumer application, the
--- producer should include some form of sequence number in each data
--- record.
---
--- The < PutRecord> operation returns a 'RecordId', which is a unique
+-- The < PutRecord> operation returns a __RecordId__, which is a unique
 -- string assigned to each record. Producer applications can use this ID
 -- for purposes such as auditability and investigation.
 --
--- If the < PutRecord> operation throws a 'ServiceUnavailableException',
+-- If the < PutRecord> operation throws a __ServiceUnavailableException__,
 -- back off and retry. If the exception persists, it is possible that the
 -- throughput limits have been exceeded for the delivery stream.
 --
--- Data records sent to Amazon Kinesis Firehose are stored for 24 hours
--- from the time they are added to a delivery stream as it attempts to send
--- the records to the destination. If the destination is unreachable for
--- more than 24 hours, the data is no longer available.
+-- Data records sent to Firehose are stored for 24 hours from the time they
+-- are added to a delivery stream as it attempts to send the records to the
+-- destination. If the destination is unreachable for more than 24 hours,
+-- the data is no longer available.
 module Network.AWS.Firehose.PutRecord
     (
     -- * Creating a Request
@@ -128,6 +123,8 @@
 
 instance Hashable PutRecord
 
+instance NFData PutRecord
+
 instance ToHeaders PutRecord where
         toHeaders
           = const
@@ -183,3 +180,5 @@
 -- | The ID of the record.
 prrsRecordId :: Lens' PutRecordResponse Text
 prrsRecordId = lens _prrsRecordId (\ s a -> s{_prrsRecordId = a});
+
+instance NFData PutRecordResponse
diff --git a/gen/Network/AWS/Firehose/PutRecordBatch.hs b/gen/Network/AWS/Firehose/PutRecordBatch.hs
--- a/gen/Network/AWS/Firehose/PutRecordBatch.hs
+++ b/gen/Network/AWS/Firehose/PutRecordBatch.hs
@@ -40,48 +40,48 @@
 -- segment from a log file, geographic location data, web site clickstream
 -- data, and so on.
 --
--- Amazon Kinesis Firehose buffers records before delivering them to the
--- destination. To disambiguate the data blobs at the destination, a common
--- solution is to use delimiters in the data, such as a newline ('\\n') or
--- some other character unique within the data. This allows the consumer
+-- Firehose buffers records before delivering them to the destination. To
+-- disambiguate the data blobs at the destination, a common solution is to
+-- use delimiters in the data, such as a newline ('\\n') or some other
+-- character unique within the data. This allows the consumer
 -- application(s) to parse individual data items when reading the data from
 -- the destination.
 --
 -- The < PutRecordBatch> response includes a count of any failed records,
--- 'FailedPutCount', and an array of responses, 'RequestResponses'. The
--- 'FailedPutCount' value is a count of records that failed. Each entry in
--- the 'RequestResponses' array gives additional information of the
--- processed record. Each entry in 'RequestResponses' directly correlates
+-- __FailedPutCount__, and an array of responses, __RequestResponses__. The
+-- __FailedPutCount__ value is a count of records that failed. Each entry
+-- in the __RequestResponses__ array gives additional information of the
+-- processed record. Each entry in __RequestResponses__ directly correlates
 -- with a record in the request array using the same ordering, from the top
--- to the bottom of the request and response. 'RequestResponses' always
+-- to the bottom of the request and response. __RequestResponses__ always
 -- includes the same number of records as the request array.
--- 'RequestResponses' both successfully and unsuccessfully processed
--- records. Amazon Kinesis Firehose attempts to process all records in each
+-- __RequestResponses__ both successfully and unsuccessfully processed
+-- records. Firehose attempts to process all records in each
 -- < PutRecordBatch> request. A single record failure does not stop the
 -- processing of subsequent records.
 --
--- A successfully processed record includes a 'RecordId' value, which is a
--- unique value identified for the record. An unsuccessfully processed
--- record includes 'ErrorCode' and 'ErrorMessage' values. 'ErrorCode'
+-- A successfully processed record includes a __RecordId__ value, which is
+-- a unique value identified for the record. An unsuccessfully processed
+-- record includes __ErrorCode__ and __ErrorMessage__ values. __ErrorCode__
 -- reflects the type of error and is one of the following values:
 -- 'ServiceUnavailable' or 'InternalFailure'. 'ErrorMessage' provides more
 -- detailed information about the error.
 --
--- If 'FailedPutCount' is greater than 0 (zero), retry the request. A retry
--- of the entire batch of records is possible; however, we strongly
+-- If __FailedPutCount__ is greater than 0 (zero), retry the request. A
+-- retry of the entire batch of records is possible; however, we strongly
 -- recommend that you inspect the entire response and resend only those
 -- records that failed processing. This minimizes duplicate records and
 -- also reduces the total bytes sent (and corresponding charges).
 --
 -- If the < PutRecordBatch> operation throws a
--- 'ServiceUnavailableException', back off and retry. If the exception
+-- __ServiceUnavailableException__, back off and retry. If the exception
 -- persists, it is possible that the throughput limits have been exceeded
 -- for the delivery stream.
 --
--- Data records sent to Amazon Kinesis Firehose are stored for 24 hours
--- from the time they are added to a delivery stream as it attempts to send
--- the records to the destination. If the destination is unreachable for
--- more than 24 hours, the data is no longer available.
+-- Data records sent to Firehose are stored for 24 hours from the time they
+-- are added to a delivery stream as it attempts to send the records to the
+-- destination. If the destination is unreachable for more than 24 hours,
+-- the data is no longer available.
 module Network.AWS.Firehose.PutRecordBatch
     (
     -- * Creating a Request
@@ -152,6 +152,8 @@
 
 instance Hashable PutRecordBatch
 
+instance NFData PutRecordBatch
+
 instance ToHeaders PutRecordBatch where
         toHeaders
           = const
@@ -217,3 +219,5 @@
 -- matches the same index in which records were sent.
 prbrsRequestResponses :: Lens' PutRecordBatchResponse (NonEmpty PutRecordBatchResponseEntry)
 prbrsRequestResponses = lens _prbrsRequestResponses (\ s a -> s{_prbrsRequestResponses = a}) . _List1;
+
+instance NFData PutRecordBatchResponse
diff --git a/gen/Network/AWS/Firehose/Types.hs b/gen/Network/AWS/Firehose/Types.hs
--- a/gen/Network/AWS/Firehose/Types.hs
+++ b/gen/Network/AWS/Firehose/Types.hs
@@ -29,6 +29,12 @@
     -- * DeliveryStreamStatus
     , DeliveryStreamStatus (..)
 
+    -- * ElasticsearchIndexRotationPeriod
+    , ElasticsearchIndexRotationPeriod (..)
+
+    -- * ElasticsearchS3BackupMode
+    , ElasticsearchS3BackupMode (..)
+
     -- * NoEncryptionConfig
     , NoEncryptionConfig (..)
 
@@ -38,6 +44,13 @@
     , bhSizeInMBs
     , bhIntervalInSeconds
 
+    -- * CloudWatchLoggingOptions
+    , CloudWatchLoggingOptions
+    , cloudWatchLoggingOptions
+    , cwloEnabled
+    , cwloLogGroupName
+    , cwloLogStreamName
+
     -- * CopyCommand
     , CopyCommand
     , copyCommand
@@ -61,9 +74,62 @@
     , DestinationDescription
     , destinationDescription
     , ddS3DestinationDescription
+    , ddElasticsearchDestinationDescription
     , ddRedshiftDestinationDescription
     , ddDestinationId
 
+    -- * ElasticsearchBufferingHints
+    , ElasticsearchBufferingHints
+    , elasticsearchBufferingHints
+    , ebhSizeInMBs
+    , ebhIntervalInSeconds
+
+    -- * ElasticsearchDestinationConfiguration
+    , ElasticsearchDestinationConfiguration
+    , elasticsearchDestinationConfiguration
+    , edcIndexRotationPeriod
+    , edcS3BackupMode
+    , edcCloudWatchLoggingOptions
+    , edcBufferingHints
+    , edcRetryOptions
+    , edcRoleARN
+    , edcDomainARN
+    , edcIndexName
+    , edcTypeName
+    , edcS3Configuration
+
+    -- * ElasticsearchDestinationDescription
+    , ElasticsearchDestinationDescription
+    , elasticsearchDestinationDescription
+    , eddIndexRotationPeriod
+    , eddTypeName
+    , eddS3BackupMode
+    , eddDomainARN
+    , eddCloudWatchLoggingOptions
+    , eddS3DestinationDescription
+    , eddBufferingHints
+    , eddRetryOptions
+    , eddRoleARN
+    , eddIndexName
+
+    -- * ElasticsearchDestinationUpdate
+    , ElasticsearchDestinationUpdate
+    , elasticsearchDestinationUpdate
+    , eduIndexRotationPeriod
+    , eduTypeName
+    , eduDomainARN
+    , eduCloudWatchLoggingOptions
+    , eduS3Update
+    , eduBufferingHints
+    , eduRetryOptions
+    , eduRoleARN
+    , eduIndexName
+
+    -- * ElasticsearchRetryOptions
+    , ElasticsearchRetryOptions
+    , elasticsearchRetryOptions
+    , eroDurationInSeconds
+
     -- * EncryptionConfiguration
     , EncryptionConfiguration
     , encryptionConfiguration
@@ -90,6 +156,7 @@
     -- * RedshiftDestinationConfiguration
     , RedshiftDestinationConfiguration
     , redshiftDestinationConfiguration
+    , rdcCloudWatchLoggingOptions
     , rdcRoleARN
     , rdcClusterJDBCURL
     , rdcCopyCommand
@@ -100,6 +167,7 @@
     -- * RedshiftDestinationDescription
     , RedshiftDestinationDescription
     , redshiftDestinationDescription
+    , rddCloudWatchLoggingOptions
     , rddRoleARN
     , rddClusterJDBCURL
     , rddCopyCommand
@@ -109,6 +177,7 @@
     -- * RedshiftDestinationUpdate
     , RedshiftDestinationUpdate
     , redshiftDestinationUpdate
+    , rduCloudWatchLoggingOptions
     , rduUsername
     , rduS3Update
     , rduPassword
@@ -120,6 +189,7 @@
     , S3DestinationConfiguration
     , s3DestinationConfiguration
     , sdcPrefix
+    , sdcCloudWatchLoggingOptions
     , sdcEncryptionConfiguration
     , sdcCompressionFormat
     , sdcBufferingHints
@@ -130,6 +200,7 @@
     , S3DestinationDescription
     , s3DestinationDescription
     , sddPrefix
+    , sddCloudWatchLoggingOptions
     , sddRoleARN
     , sddBucketARN
     , sddBufferingHints
@@ -140,6 +211,7 @@
     , S3DestinationUpdate
     , s3DestinationUpdate
     , sduPrefix
+    , sduCloudWatchLoggingOptions
     , sduEncryptionConfiguration
     , sduCompressionFormat
     , sduBufferingHints
@@ -180,6 +252,8 @@
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
           Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
       | has (hasStatus 500) e = Just "general_server_error"
       | has (hasStatus 509) e = Just "limit_exceeded"
@@ -189,7 +263,7 @@
 _InvalidArgumentException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidArgumentException = _ServiceError . hasCode "InvalidArgumentException"
 
--- | Another modification has already happened. Fetch 'VersionId' again and
+-- | Another modification has already happened. Fetch __VersionId__ again and
 -- use it to update the destination.
 _ConcurrentModificationException :: AsError a => Getting (First ServiceError) a ServiceError
 _ConcurrentModificationException =
@@ -202,7 +276,7 @@
 -- <http://docs.aws.amazon.com/firehose/latest/dev/limits.html Amazon Kinesis Firehose Limits>.
 _ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
 _ServiceUnavailableException =
-    _ServiceError . hasStatus 503 . hasCode "ServiceUnavailableException"
+    _ServiceError . hasCode "ServiceUnavailableException"
 
 -- | The specified resource could not be found.
 _ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/Firehose/Types/Product.hs b/gen/Network/AWS/Firehose/Types/Product.hs
--- a/gen/Network/AWS/Firehose/Types/Product.hs
+++ b/gen/Network/AWS/Firehose/Types/Product.hs
@@ -21,8 +21,10 @@
 import           Network.AWS.Lens
 import           Network.AWS.Prelude
 
--- | Describes the buffering to perform before delivering data to the
--- destination.
+-- | Describes hints for the buffering to perform before delivering data to
+-- the destination. Please note that these options are treated as hints,
+-- and therefore Firehose may choose to use different values when it is
+-- optimal.
 --
 -- /See:/ 'bufferingHints' smart constructor.
 data BufferingHints = BufferingHints'
@@ -69,6 +71,8 @@
 
 instance Hashable BufferingHints
 
+instance NFData BufferingHints
+
 instance ToJSON BufferingHints where
         toJSON BufferingHints'{..}
           = object
@@ -76,6 +80,67 @@
                  [("SizeInMBs" .=) <$> _bhSizeInMBs,
                   ("IntervalInSeconds" .=) <$> _bhIntervalInSeconds])
 
+-- | Describes CloudWatch logging options for your delivery stream.
+--
+-- /See:/ 'cloudWatchLoggingOptions' smart constructor.
+data CloudWatchLoggingOptions = CloudWatchLoggingOptions'
+    { _cwloEnabled       :: !(Maybe Bool)
+    , _cwloLogGroupName  :: !(Maybe Text)
+    , _cwloLogStreamName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudWatchLoggingOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cwloEnabled'
+--
+-- * 'cwloLogGroupName'
+--
+-- * 'cwloLogStreamName'
+cloudWatchLoggingOptions
+    :: CloudWatchLoggingOptions
+cloudWatchLoggingOptions =
+    CloudWatchLoggingOptions'
+    { _cwloEnabled = Nothing
+    , _cwloLogGroupName = Nothing
+    , _cwloLogStreamName = Nothing
+    }
+
+-- | Enables or disables CloudWatch logging.
+cwloEnabled :: Lens' CloudWatchLoggingOptions (Maybe Bool)
+cwloEnabled = lens _cwloEnabled (\ s a -> s{_cwloEnabled = a});
+
+-- | The CloudWatch group name for logging. This value is required if Enabled
+-- is true.
+cwloLogGroupName :: Lens' CloudWatchLoggingOptions (Maybe Text)
+cwloLogGroupName = lens _cwloLogGroupName (\ s a -> s{_cwloLogGroupName = a});
+
+-- | The CloudWatch log stream name for logging. This value is required if
+-- Enabled is true.
+cwloLogStreamName :: Lens' CloudWatchLoggingOptions (Maybe Text)
+cwloLogStreamName = lens _cwloLogStreamName (\ s a -> s{_cwloLogStreamName = a});
+
+instance FromJSON CloudWatchLoggingOptions where
+        parseJSON
+          = withObject "CloudWatchLoggingOptions"
+              (\ x ->
+                 CloudWatchLoggingOptions' <$>
+                   (x .:? "Enabled") <*> (x .:? "LogGroupName") <*>
+                     (x .:? "LogStreamName"))
+
+instance Hashable CloudWatchLoggingOptions
+
+instance NFData CloudWatchLoggingOptions
+
+instance ToJSON CloudWatchLoggingOptions where
+        toJSON CloudWatchLoggingOptions'{..}
+          = object
+              (catMaybes
+                 [("Enabled" .=) <$> _cwloEnabled,
+                  ("LogGroupName" .=) <$> _cwloLogGroupName,
+                  ("LogStreamName" .=) <$> _cwloLogStreamName])
+
 -- | Describes a 'COPY' command for Amazon Redshift.
 --
 -- /See:/ 'copyCommand' smart constructor.
@@ -107,8 +172,7 @@
 -- | Optional parameters to use with the Amazon Redshift 'COPY' command. For
 -- more information, see the \"Optional Parameters\" section of
 -- <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html Amazon Redshift COPY command>.
--- Some possible examples that would apply to Amazon Kinesis Firehose are
--- as follows.
+-- Some possible examples that would apply to Firehose are as follows.
 --
 -- 'delimiter \'\\t\' lzop;' - fields are delimited with \"\\t\" (TAB
 -- character) and compressed using lzop.
@@ -125,8 +189,8 @@
 -- 'JSON \'s3:\/\/mybucket\/jsonpaths.txt\'' - data is in JSON format, and
 -- the path specified is the format of the data.
 --
--- For more examples, see and
--- <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html Amazon Redshift COPY command exmaples>.
+-- For more examples, see
+-- <http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html Amazon Redshift COPY command examples>.
 ccCopyOptions :: Lens' CopyCommand (Maybe Text)
 ccCopyOptions = lens _ccCopyOptions (\ s a -> s{_ccCopyOptions = a});
 
@@ -149,6 +213,8 @@
 
 instance Hashable CopyCommand
 
+instance NFData CopyCommand
+
 instance ToJSON CopyCommand where
         toJSON CopyCommand'{..}
           = object
@@ -261,13 +327,16 @@
 
 instance Hashable DeliveryStreamDescription
 
+instance NFData DeliveryStreamDescription
+
 -- | Describes the destination for a delivery stream.
 --
 -- /See:/ 'destinationDescription' smart constructor.
 data DestinationDescription = DestinationDescription'
-    { _ddS3DestinationDescription       :: !(Maybe S3DestinationDescription)
-    , _ddRedshiftDestinationDescription :: !(Maybe RedshiftDestinationDescription)
-    , _ddDestinationId                  :: !Text
+    { _ddS3DestinationDescription            :: !(Maybe S3DestinationDescription)
+    , _ddElasticsearchDestinationDescription :: !(Maybe ElasticsearchDestinationDescription)
+    , _ddRedshiftDestinationDescription      :: !(Maybe RedshiftDestinationDescription)
+    , _ddDestinationId                       :: !Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'DestinationDescription' with the minimum fields required to make a request.
@@ -276,6 +345,8 @@
 --
 -- * 'ddS3DestinationDescription'
 --
+-- * 'ddElasticsearchDestinationDescription'
+--
 -- * 'ddRedshiftDestinationDescription'
 --
 -- * 'ddDestinationId'
@@ -285,6 +356,7 @@
 destinationDescription pDestinationId_ =
     DestinationDescription'
     { _ddS3DestinationDescription = Nothing
+    , _ddElasticsearchDestinationDescription = Nothing
     , _ddRedshiftDestinationDescription = Nothing
     , _ddDestinationId = pDestinationId_
     }
@@ -293,6 +365,10 @@
 ddS3DestinationDescription :: Lens' DestinationDescription (Maybe S3DestinationDescription)
 ddS3DestinationDescription = lens _ddS3DestinationDescription (\ s a -> s{_ddS3DestinationDescription = a});
 
+-- | The destination in Amazon ES.
+ddElasticsearchDestinationDescription :: Lens' DestinationDescription (Maybe ElasticsearchDestinationDescription)
+ddElasticsearchDestinationDescription = lens _ddElasticsearchDestinationDescription (\ s a -> s{_ddElasticsearchDestinationDescription = a});
+
 -- | The destination in Amazon Redshift.
 ddRedshiftDestinationDescription :: Lens' DestinationDescription (Maybe RedshiftDestinationDescription)
 ddRedshiftDestinationDescription = lens _ddRedshiftDestinationDescription (\ s a -> s{_ddRedshiftDestinationDescription = a});
@@ -307,11 +383,491 @@
               (\ x ->
                  DestinationDescription' <$>
                    (x .:? "S3DestinationDescription") <*>
-                     (x .:? "RedshiftDestinationDescription")
+                     (x .:? "ElasticsearchDestinationDescription")
+                     <*> (x .:? "RedshiftDestinationDescription")
                      <*> (x .: "DestinationId"))
 
 instance Hashable DestinationDescription
 
+instance NFData DestinationDescription
+
+-- | Describes the buffering to perform before delivering data to the Amazon
+-- ES destination.
+--
+-- /See:/ 'elasticsearchBufferingHints' smart constructor.
+data ElasticsearchBufferingHints = ElasticsearchBufferingHints'
+    { _ebhSizeInMBs         :: !(Maybe Nat)
+    , _ebhIntervalInSeconds :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ElasticsearchBufferingHints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ebhSizeInMBs'
+--
+-- * 'ebhIntervalInSeconds'
+elasticsearchBufferingHints
+    :: ElasticsearchBufferingHints
+elasticsearchBufferingHints =
+    ElasticsearchBufferingHints'
+    { _ebhSizeInMBs = Nothing
+    , _ebhIntervalInSeconds = Nothing
+    }
+
+-- | Buffer incoming data to the specified size, in MBs, before delivering it
+-- to the destination. The default value is 5.
+--
+-- We recommend setting __SizeInMBs__ to a value greater than the amount of
+-- data you typically ingest into the delivery stream in 10 seconds. For
+-- example, if you typically ingest data at 1 MB\/sec, set __SizeInMBs__ to
+-- be 10 MB or higher.
+ebhSizeInMBs :: Lens' ElasticsearchBufferingHints (Maybe Natural)
+ebhSizeInMBs = lens _ebhSizeInMBs (\ s a -> s{_ebhSizeInMBs = a}) . mapping _Nat;
+
+-- | Buffer incoming data for the specified period of time, in seconds,
+-- before delivering it to the destination. The default value is 300 (5
+-- minutes).
+ebhIntervalInSeconds :: Lens' ElasticsearchBufferingHints (Maybe Natural)
+ebhIntervalInSeconds = lens _ebhIntervalInSeconds (\ s a -> s{_ebhIntervalInSeconds = a}) . mapping _Nat;
+
+instance FromJSON ElasticsearchBufferingHints where
+        parseJSON
+          = withObject "ElasticsearchBufferingHints"
+              (\ x ->
+                 ElasticsearchBufferingHints' <$>
+                   (x .:? "SizeInMBs") <*> (x .:? "IntervalInSeconds"))
+
+instance Hashable ElasticsearchBufferingHints
+
+instance NFData ElasticsearchBufferingHints
+
+instance ToJSON ElasticsearchBufferingHints where
+        toJSON ElasticsearchBufferingHints'{..}
+          = object
+              (catMaybes
+                 [("SizeInMBs" .=) <$> _ebhSizeInMBs,
+                  ("IntervalInSeconds" .=) <$> _ebhIntervalInSeconds])
+
+-- | Describes the configuration of a destination in Amazon ES.
+--
+-- /See:/ 'elasticsearchDestinationConfiguration' smart constructor.
+data ElasticsearchDestinationConfiguration = ElasticsearchDestinationConfiguration'
+    { _edcIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
+    , _edcS3BackupMode             :: !(Maybe ElasticsearchS3BackupMode)
+    , _edcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _edcBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
+    , _edcRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
+    , _edcRoleARN                  :: !Text
+    , _edcDomainARN                :: !Text
+    , _edcIndexName                :: !Text
+    , _edcTypeName                 :: !Text
+    , _edcS3Configuration          :: !S3DestinationConfiguration
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ElasticsearchDestinationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edcIndexRotationPeriod'
+--
+-- * 'edcS3BackupMode'
+--
+-- * 'edcCloudWatchLoggingOptions'
+--
+-- * 'edcBufferingHints'
+--
+-- * 'edcRetryOptions'
+--
+-- * 'edcRoleARN'
+--
+-- * 'edcDomainARN'
+--
+-- * 'edcIndexName'
+--
+-- * 'edcTypeName'
+--
+-- * 'edcS3Configuration'
+elasticsearchDestinationConfiguration
+    :: Text -- ^ 'edcRoleARN'
+    -> Text -- ^ 'edcDomainARN'
+    -> Text -- ^ 'edcIndexName'
+    -> Text -- ^ 'edcTypeName'
+    -> S3DestinationConfiguration -- ^ 'edcS3Configuration'
+    -> ElasticsearchDestinationConfiguration
+elasticsearchDestinationConfiguration pRoleARN_ pDomainARN_ pIndexName_ pTypeName_ pS3Configuration_ =
+    ElasticsearchDestinationConfiguration'
+    { _edcIndexRotationPeriod = Nothing
+    , _edcS3BackupMode = Nothing
+    , _edcCloudWatchLoggingOptions = Nothing
+    , _edcBufferingHints = Nothing
+    , _edcRetryOptions = Nothing
+    , _edcRoleARN = pRoleARN_
+    , _edcDomainARN = pDomainARN_
+    , _edcIndexName = pIndexName_
+    , _edcTypeName = pTypeName_
+    , _edcS3Configuration = pS3Configuration_
+    }
+
+-- | The Elasticsearch index rotation period. Index rotation appends a
+-- timestamp to the IndexName to facilitate expiration of old data. For
+-- more information, see
+-- <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for Amazon Elasticsearch Service Destination>.
+-- Default value is 'OneDay'.
+edcIndexRotationPeriod :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchIndexRotationPeriod)
+edcIndexRotationPeriod = lens _edcIndexRotationPeriod (\ s a -> s{_edcIndexRotationPeriod = a});
+
+-- | Defines how documents should be delivered to Amazon S3. When set to
+-- FailedDocumentsOnly, Firehose writes any documents that could not be
+-- indexed to the configured Amazon S3 destination, with
+-- elasticsearch-failed\/ appended to the key prefix. When set to
+-- AllDocuments, Firehose delivers all incoming records to Amazon S3, and
+-- also writes failed documents with elasticsearch-failed\/ appended to the
+-- prefix. For more information, see
+-- <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup Amazon S3 Backup for Amazon Elasticsearch Service Destination>.
+-- Default value is FailedDocumentsOnly.
+edcS3BackupMode :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchS3BackupMode)
+edcS3BackupMode = lens _edcS3BackupMode (\ s a -> s{_edcS3BackupMode = a});
+
+-- | Describes CloudWatch logging options for your delivery stream.
+edcCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationConfiguration (Maybe CloudWatchLoggingOptions)
+edcCloudWatchLoggingOptions = lens _edcCloudWatchLoggingOptions (\ s a -> s{_edcCloudWatchLoggingOptions = a});
+
+-- | Buffering options. If no value is specified,
+-- __ElasticsearchBufferingHints__ object default values are used.
+edcBufferingHints :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchBufferingHints)
+edcBufferingHints = lens _edcBufferingHints (\ s a -> s{_edcBufferingHints = a});
+
+-- | Configures retry behavior in the event that Firehose is unable to
+-- deliver documents to Amazon ES. Default value is 300 (5 minutes).
+edcRetryOptions :: Lens' ElasticsearchDestinationConfiguration (Maybe ElasticsearchRetryOptions)
+edcRetryOptions = lens _edcRetryOptions (\ s a -> s{_edcRetryOptions = a});
+
+-- | The ARN of the IAM role to be assumed by Firehose for calling the Amazon
+-- ES Configuration API and for indexing documents. For more information,
+-- see
+-- <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access>.
+edcRoleARN :: Lens' ElasticsearchDestinationConfiguration Text
+edcRoleARN = lens _edcRoleARN (\ s a -> s{_edcRoleARN = a});
+
+-- | The ARN of the Amazon ES domain. The IAM role must have permission
+-- for 'DescribeElasticsearchDomain', 'DescribeElasticsearchDomains' , and
+-- 'DescribeElasticsearchDomainConfig' after assuming __RoleARN__.
+edcDomainARN :: Lens' ElasticsearchDestinationConfiguration Text
+edcDomainARN = lens _edcDomainARN (\ s a -> s{_edcDomainARN = a});
+
+-- | The Elasticsearch index name.
+edcIndexName :: Lens' ElasticsearchDestinationConfiguration Text
+edcIndexName = lens _edcIndexName (\ s a -> s{_edcIndexName = a});
+
+-- | The Elasticsearch type name.
+edcTypeName :: Lens' ElasticsearchDestinationConfiguration Text
+edcTypeName = lens _edcTypeName (\ s a -> s{_edcTypeName = a});
+
+-- | Undocumented member.
+edcS3Configuration :: Lens' ElasticsearchDestinationConfiguration S3DestinationConfiguration
+edcS3Configuration = lens _edcS3Configuration (\ s a -> s{_edcS3Configuration = a});
+
+instance Hashable
+         ElasticsearchDestinationConfiguration
+
+instance NFData ElasticsearchDestinationConfiguration
+
+instance ToJSON ElasticsearchDestinationConfiguration
+         where
+        toJSON ElasticsearchDestinationConfiguration'{..}
+          = object
+              (catMaybes
+                 [("IndexRotationPeriod" .=) <$>
+                    _edcIndexRotationPeriod,
+                  ("S3BackupMode" .=) <$> _edcS3BackupMode,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _edcCloudWatchLoggingOptions,
+                  ("BufferingHints" .=) <$> _edcBufferingHints,
+                  ("RetryOptions" .=) <$> _edcRetryOptions,
+                  Just ("RoleARN" .= _edcRoleARN),
+                  Just ("DomainARN" .= _edcDomainARN),
+                  Just ("IndexName" .= _edcIndexName),
+                  Just ("TypeName" .= _edcTypeName),
+                  Just ("S3Configuration" .= _edcS3Configuration)])
+
+-- | The destination description in Amazon ES.
+--
+-- /See:/ 'elasticsearchDestinationDescription' smart constructor.
+data ElasticsearchDestinationDescription = ElasticsearchDestinationDescription'
+    { _eddIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
+    , _eddTypeName                 :: !(Maybe Text)
+    , _eddS3BackupMode             :: !(Maybe ElasticsearchS3BackupMode)
+    , _eddDomainARN                :: !(Maybe Text)
+    , _eddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _eddS3DestinationDescription :: !(Maybe S3DestinationDescription)
+    , _eddBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
+    , _eddRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
+    , _eddRoleARN                  :: !(Maybe Text)
+    , _eddIndexName                :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ElasticsearchDestinationDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eddIndexRotationPeriod'
+--
+-- * 'eddTypeName'
+--
+-- * 'eddS3BackupMode'
+--
+-- * 'eddDomainARN'
+--
+-- * 'eddCloudWatchLoggingOptions'
+--
+-- * 'eddS3DestinationDescription'
+--
+-- * 'eddBufferingHints'
+--
+-- * 'eddRetryOptions'
+--
+-- * 'eddRoleARN'
+--
+-- * 'eddIndexName'
+elasticsearchDestinationDescription
+    :: ElasticsearchDestinationDescription
+elasticsearchDestinationDescription =
+    ElasticsearchDestinationDescription'
+    { _eddIndexRotationPeriod = Nothing
+    , _eddTypeName = Nothing
+    , _eddS3BackupMode = Nothing
+    , _eddDomainARN = Nothing
+    , _eddCloudWatchLoggingOptions = Nothing
+    , _eddS3DestinationDescription = Nothing
+    , _eddBufferingHints = Nothing
+    , _eddRetryOptions = Nothing
+    , _eddRoleARN = Nothing
+    , _eddIndexName = Nothing
+    }
+
+-- | The Elasticsearch index rotation period
+eddIndexRotationPeriod :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchIndexRotationPeriod)
+eddIndexRotationPeriod = lens _eddIndexRotationPeriod (\ s a -> s{_eddIndexRotationPeriod = a});
+
+-- | The Elasticsearch type name.
+eddTypeName :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddTypeName = lens _eddTypeName (\ s a -> s{_eddTypeName = a});
+
+-- | Amazon S3 backup mode.
+eddS3BackupMode :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchS3BackupMode)
+eddS3BackupMode = lens _eddS3BackupMode (\ s a -> s{_eddS3BackupMode = a});
+
+-- | The ARN of the Amazon ES domain.
+eddDomainARN :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddDomainARN = lens _eddDomainARN (\ s a -> s{_eddDomainARN = a});
+
+-- | CloudWatch logging options.
+eddCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationDescription (Maybe CloudWatchLoggingOptions)
+eddCloudWatchLoggingOptions = lens _eddCloudWatchLoggingOptions (\ s a -> s{_eddCloudWatchLoggingOptions = a});
+
+-- | Undocumented member.
+eddS3DestinationDescription :: Lens' ElasticsearchDestinationDescription (Maybe S3DestinationDescription)
+eddS3DestinationDescription = lens _eddS3DestinationDescription (\ s a -> s{_eddS3DestinationDescription = a});
+
+-- | Buffering options.
+eddBufferingHints :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchBufferingHints)
+eddBufferingHints = lens _eddBufferingHints (\ s a -> s{_eddBufferingHints = a});
+
+-- | Elasticsearch retry options.
+eddRetryOptions :: Lens' ElasticsearchDestinationDescription (Maybe ElasticsearchRetryOptions)
+eddRetryOptions = lens _eddRetryOptions (\ s a -> s{_eddRetryOptions = a});
+
+-- | The ARN of the AWS credentials.
+eddRoleARN :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddRoleARN = lens _eddRoleARN (\ s a -> s{_eddRoleARN = a});
+
+-- | The Elasticsearch index name.
+eddIndexName :: Lens' ElasticsearchDestinationDescription (Maybe Text)
+eddIndexName = lens _eddIndexName (\ s a -> s{_eddIndexName = a});
+
+instance FromJSON ElasticsearchDestinationDescription
+         where
+        parseJSON
+          = withObject "ElasticsearchDestinationDescription"
+              (\ x ->
+                 ElasticsearchDestinationDescription' <$>
+                   (x .:? "IndexRotationPeriod") <*> (x .:? "TypeName")
+                     <*> (x .:? "S3BackupMode")
+                     <*> (x .:? "DomainARN")
+                     <*> (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .:? "S3DestinationDescription")
+                     <*> (x .:? "BufferingHints")
+                     <*> (x .:? "RetryOptions")
+                     <*> (x .:? "RoleARN")
+                     <*> (x .:? "IndexName"))
+
+instance Hashable ElasticsearchDestinationDescription
+
+instance NFData ElasticsearchDestinationDescription
+
+-- | Describes an update for a destination in Amazon ES.
+--
+-- /See:/ 'elasticsearchDestinationUpdate' smart constructor.
+data ElasticsearchDestinationUpdate = ElasticsearchDestinationUpdate'
+    { _eduIndexRotationPeriod      :: !(Maybe ElasticsearchIndexRotationPeriod)
+    , _eduTypeName                 :: !(Maybe Text)
+    , _eduDomainARN                :: !(Maybe Text)
+    , _eduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _eduS3Update                 :: !(Maybe S3DestinationUpdate)
+    , _eduBufferingHints           :: !(Maybe ElasticsearchBufferingHints)
+    , _eduRetryOptions             :: !(Maybe ElasticsearchRetryOptions)
+    , _eduRoleARN                  :: !(Maybe Text)
+    , _eduIndexName                :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ElasticsearchDestinationUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eduIndexRotationPeriod'
+--
+-- * 'eduTypeName'
+--
+-- * 'eduDomainARN'
+--
+-- * 'eduCloudWatchLoggingOptions'
+--
+-- * 'eduS3Update'
+--
+-- * 'eduBufferingHints'
+--
+-- * 'eduRetryOptions'
+--
+-- * 'eduRoleARN'
+--
+-- * 'eduIndexName'
+elasticsearchDestinationUpdate
+    :: ElasticsearchDestinationUpdate
+elasticsearchDestinationUpdate =
+    ElasticsearchDestinationUpdate'
+    { _eduIndexRotationPeriod = Nothing
+    , _eduTypeName = Nothing
+    , _eduDomainARN = Nothing
+    , _eduCloudWatchLoggingOptions = Nothing
+    , _eduS3Update = Nothing
+    , _eduBufferingHints = Nothing
+    , _eduRetryOptions = Nothing
+    , _eduRoleARN = Nothing
+    , _eduIndexName = Nothing
+    }
+
+-- | The Elasticsearch index rotation period. Index rotation appends a
+-- timestamp to the IndexName to facilitate the expiration of old data. For
+-- more information, see
+-- <http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation Index Rotation for Amazon Elasticsearch Service Destination>.
+-- Default value is 'OneDay'.
+eduIndexRotationPeriod :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchIndexRotationPeriod)
+eduIndexRotationPeriod = lens _eduIndexRotationPeriod (\ s a -> s{_eduIndexRotationPeriod = a});
+
+-- | The Elasticsearch type name.
+eduTypeName :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduTypeName = lens _eduTypeName (\ s a -> s{_eduTypeName = a});
+
+-- | The ARN of the Amazon ES domain. The IAM role must have permission
+-- for DescribeElasticsearchDomain, DescribeElasticsearchDomains , and
+-- DescribeElasticsearchDomainConfig after assuming __RoleARN__.
+eduDomainARN :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduDomainARN = lens _eduDomainARN (\ s a -> s{_eduDomainARN = a});
+
+-- | Describes CloudWatch logging options for your delivery stream.
+eduCloudWatchLoggingOptions :: Lens' ElasticsearchDestinationUpdate (Maybe CloudWatchLoggingOptions)
+eduCloudWatchLoggingOptions = lens _eduCloudWatchLoggingOptions (\ s a -> s{_eduCloudWatchLoggingOptions = a});
+
+-- | Undocumented member.
+eduS3Update :: Lens' ElasticsearchDestinationUpdate (Maybe S3DestinationUpdate)
+eduS3Update = lens _eduS3Update (\ s a -> s{_eduS3Update = a});
+
+-- | Buffering options. If no value is specified,
+-- __ElasticsearchBufferingHints__ object default values are used.
+eduBufferingHints :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchBufferingHints)
+eduBufferingHints = lens _eduBufferingHints (\ s a -> s{_eduBufferingHints = a});
+
+-- | Configures retry behavior in the event that Firehose is unable to
+-- deliver documents to Amazon ES. Default value is 300 (5 minutes).
+eduRetryOptions :: Lens' ElasticsearchDestinationUpdate (Maybe ElasticsearchRetryOptions)
+eduRetryOptions = lens _eduRetryOptions (\ s a -> s{_eduRetryOptions = a});
+
+-- | The ARN of the IAM role to be assumed by Firehose for calling the Amazon
+-- ES Configuration API and for indexing documents. For more information,
+-- see
+-- <http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 Amazon S3 Bucket Access>.
+eduRoleARN :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduRoleARN = lens _eduRoleARN (\ s a -> s{_eduRoleARN = a});
+
+-- | The Elasticsearch index name.
+eduIndexName :: Lens' ElasticsearchDestinationUpdate (Maybe Text)
+eduIndexName = lens _eduIndexName (\ s a -> s{_eduIndexName = a});
+
+instance Hashable ElasticsearchDestinationUpdate
+
+instance NFData ElasticsearchDestinationUpdate
+
+instance ToJSON ElasticsearchDestinationUpdate where
+        toJSON ElasticsearchDestinationUpdate'{..}
+          = object
+              (catMaybes
+                 [("IndexRotationPeriod" .=) <$>
+                    _eduIndexRotationPeriod,
+                  ("TypeName" .=) <$> _eduTypeName,
+                  ("DomainARN" .=) <$> _eduDomainARN,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _eduCloudWatchLoggingOptions,
+                  ("S3Update" .=) <$> _eduS3Update,
+                  ("BufferingHints" .=) <$> _eduBufferingHints,
+                  ("RetryOptions" .=) <$> _eduRetryOptions,
+                  ("RoleARN" .=) <$> _eduRoleARN,
+                  ("IndexName" .=) <$> _eduIndexName])
+
+-- | Configures retry behavior in the event that Firehose is unable to
+-- deliver documents to Amazon ES.
+--
+-- /See:/ 'elasticsearchRetryOptions' smart constructor.
+newtype ElasticsearchRetryOptions = ElasticsearchRetryOptions'
+    { _eroDurationInSeconds :: Maybe Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ElasticsearchRetryOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eroDurationInSeconds'
+elasticsearchRetryOptions
+    :: ElasticsearchRetryOptions
+elasticsearchRetryOptions =
+    ElasticsearchRetryOptions'
+    { _eroDurationInSeconds = Nothing
+    }
+
+-- | After an initial failure to deliver to Amazon ES, the total amount of
+-- time during which Firehose re-attempts delivery. After this time has
+-- elapsed, the failed documents are written to Amazon S3. Default value is
+-- 300 seconds. A value of 0 (zero) results in no retries.
+eroDurationInSeconds :: Lens' ElasticsearchRetryOptions (Maybe Natural)
+eroDurationInSeconds = lens _eroDurationInSeconds (\ s a -> s{_eroDurationInSeconds = a}) . mapping _Nat;
+
+instance FromJSON ElasticsearchRetryOptions where
+        parseJSON
+          = withObject "ElasticsearchRetryOptions"
+              (\ x ->
+                 ElasticsearchRetryOptions' <$>
+                   (x .:? "DurationInSeconds"))
+
+instance Hashable ElasticsearchRetryOptions
+
+instance NFData ElasticsearchRetryOptions
+
+instance ToJSON ElasticsearchRetryOptions where
+        toJSON ElasticsearchRetryOptions'{..}
+          = object
+              (catMaybes
+                 [("DurationInSeconds" .=) <$> _eroDurationInSeconds])
+
 -- | Describes the encryption for a destination in Amazon S3.
 --
 -- /See:/ 'encryptionConfiguration' smart constructor.
@@ -354,6 +910,8 @@
 
 instance Hashable EncryptionConfiguration
 
+instance NFData EncryptionConfiguration
+
 instance ToJSON EncryptionConfiguration where
         toJSON EncryptionConfiguration'{..}
           = object
@@ -395,6 +953,8 @@
 
 instance Hashable KMSEncryptionConfig
 
+instance NFData KMSEncryptionConfig
+
 instance ToJSON KMSEncryptionConfig where
         toJSON KMSEncryptionConfig'{..}
           = object
@@ -453,6 +1013,8 @@
 
 instance Hashable PutRecordBatchResponseEntry
 
+instance NFData PutRecordBatchResponseEntry
+
 -- | The unit of data in a delivery stream.
 --
 -- /See:/ 'record' smart constructor.
@@ -486,6 +1048,8 @@
 
 instance Hashable Record
 
+instance NFData Record
+
 instance ToJSON Record where
         toJSON Record'{..}
           = object (catMaybes [Just ("Data" .= _rData)])
@@ -494,18 +1058,21 @@
 --
 -- /See:/ 'redshiftDestinationConfiguration' smart constructor.
 data RedshiftDestinationConfiguration = RedshiftDestinationConfiguration'
-    { _rdcRoleARN         :: !Text
-    , _rdcClusterJDBCURL  :: !Text
-    , _rdcCopyCommand     :: !CopyCommand
-    , _rdcUsername        :: !(Sensitive Text)
-    , _rdcPassword        :: !(Sensitive Text)
-    , _rdcS3Configuration :: !S3DestinationConfiguration
+    { _rdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _rdcRoleARN                  :: !Text
+    , _rdcClusterJDBCURL           :: !Text
+    , _rdcCopyCommand              :: !CopyCommand
+    , _rdcUsername                 :: !(Sensitive Text)
+    , _rdcPassword                 :: !(Sensitive Text)
+    , _rdcS3Configuration          :: !S3DestinationConfiguration
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'RedshiftDestinationConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'rdcCloudWatchLoggingOptions'
+--
 -- * 'rdcRoleARN'
 --
 -- * 'rdcClusterJDBCURL'
@@ -527,7 +1094,8 @@
     -> RedshiftDestinationConfiguration
 redshiftDestinationConfiguration pRoleARN_ pClusterJDBCURL_ pCopyCommand_ pUsername_ pPassword_ pS3Configuration_ =
     RedshiftDestinationConfiguration'
-    { _rdcRoleARN = pRoleARN_
+    { _rdcCloudWatchLoggingOptions = Nothing
+    , _rdcRoleARN = pRoleARN_
     , _rdcClusterJDBCURL = pClusterJDBCURL_
     , _rdcCopyCommand = pCopyCommand_
     , _rdcUsername = _Sensitive # pUsername_
@@ -535,6 +1103,10 @@
     , _rdcS3Configuration = pS3Configuration_
     }
 
+-- | Describes CloudWatch logging options for your delivery stream.
+rdcCloudWatchLoggingOptions :: Lens' RedshiftDestinationConfiguration (Maybe CloudWatchLoggingOptions)
+rdcCloudWatchLoggingOptions = lens _rdcCloudWatchLoggingOptions (\ s a -> s{_rdcCloudWatchLoggingOptions = a});
+
 -- | The ARN of the AWS credentials.
 rdcRoleARN :: Lens' RedshiftDestinationConfiguration Text
 rdcRoleARN = lens _rdcRoleARN (\ s a -> s{_rdcRoleARN = a});
@@ -560,7 +1132,7 @@
 -- < CreateDeliveryStream>.
 --
 -- The compression formats 'SNAPPY' or 'ZIP' cannot be specified in
--- 'RedshiftDestinationConfiguration.S3Configuration' because the Amazon
+-- __RedshiftDestinationConfiguration.S3Configuration__ because the Amazon
 -- Redshift 'COPY' operation that reads from the S3 bucket doesn\'t support
 -- these compression formats.
 rdcS3Configuration :: Lens' RedshiftDestinationConfiguration S3DestinationConfiguration
@@ -568,12 +1140,16 @@
 
 instance Hashable RedshiftDestinationConfiguration
 
+instance NFData RedshiftDestinationConfiguration
+
 instance ToJSON RedshiftDestinationConfiguration
          where
         toJSON RedshiftDestinationConfiguration'{..}
           = object
               (catMaybes
-                 [Just ("RoleARN" .= _rdcRoleARN),
+                 [("CloudWatchLoggingOptions" .=) <$>
+                    _rdcCloudWatchLoggingOptions,
+                  Just ("RoleARN" .= _rdcRoleARN),
                   Just ("ClusterJDBCURL" .= _rdcClusterJDBCURL),
                   Just ("CopyCommand" .= _rdcCopyCommand),
                   Just ("Username" .= _rdcUsername),
@@ -584,7 +1160,8 @@
 --
 -- /See:/ 'redshiftDestinationDescription' smart constructor.
 data RedshiftDestinationDescription = RedshiftDestinationDescription'
-    { _rddRoleARN                  :: !Text
+    { _rddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _rddRoleARN                  :: !Text
     , _rddClusterJDBCURL           :: !Text
     , _rddCopyCommand              :: !CopyCommand
     , _rddUsername                 :: !(Sensitive Text)
@@ -595,6 +1172,8 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'rddCloudWatchLoggingOptions'
+--
 -- * 'rddRoleARN'
 --
 -- * 'rddClusterJDBCURL'
@@ -613,13 +1192,18 @@
     -> RedshiftDestinationDescription
 redshiftDestinationDescription pRoleARN_ pClusterJDBCURL_ pCopyCommand_ pUsername_ pS3DestinationDescription_ =
     RedshiftDestinationDescription'
-    { _rddRoleARN = pRoleARN_
+    { _rddCloudWatchLoggingOptions = Nothing
+    , _rddRoleARN = pRoleARN_
     , _rddClusterJDBCURL = pClusterJDBCURL_
     , _rddCopyCommand = pCopyCommand_
     , _rddUsername = _Sensitive # pUsername_
     , _rddS3DestinationDescription = pS3DestinationDescription_
     }
 
+-- | Describes CloudWatch logging options for your delivery stream.
+rddCloudWatchLoggingOptions :: Lens' RedshiftDestinationDescription (Maybe CloudWatchLoggingOptions)
+rddCloudWatchLoggingOptions = lens _rddCloudWatchLoggingOptions (\ s a -> s{_rddCloudWatchLoggingOptions = a});
+
 -- | The ARN of the AWS credentials.
 rddRoleARN :: Lens' RedshiftDestinationDescription Text
 rddRoleARN = lens _rddRoleARN (\ s a -> s{_rddRoleARN = a});
@@ -646,29 +1230,36 @@
           = withObject "RedshiftDestinationDescription"
               (\ x ->
                  RedshiftDestinationDescription' <$>
-                   (x .: "RoleARN") <*> (x .: "ClusterJDBCURL") <*>
-                     (x .: "CopyCommand")
+                   (x .:? "CloudWatchLoggingOptions") <*>
+                     (x .: "RoleARN")
+                     <*> (x .: "ClusterJDBCURL")
+                     <*> (x .: "CopyCommand")
                      <*> (x .: "Username")
                      <*> (x .: "S3DestinationDescription"))
 
 instance Hashable RedshiftDestinationDescription
 
+instance NFData RedshiftDestinationDescription
+
 -- | Describes an update for a destination in Amazon Redshift.
 --
 -- /See:/ 'redshiftDestinationUpdate' smart constructor.
 data RedshiftDestinationUpdate = RedshiftDestinationUpdate'
-    { _rduUsername       :: !(Maybe (Sensitive Text))
-    , _rduS3Update       :: !(Maybe S3DestinationUpdate)
-    , _rduPassword       :: !(Maybe (Sensitive Text))
-    , _rduCopyCommand    :: !(Maybe CopyCommand)
-    , _rduClusterJDBCURL :: !(Maybe Text)
-    , _rduRoleARN        :: !(Maybe Text)
+    { _rduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _rduUsername                 :: !(Maybe (Sensitive Text))
+    , _rduS3Update                 :: !(Maybe S3DestinationUpdate)
+    , _rduPassword                 :: !(Maybe (Sensitive Text))
+    , _rduCopyCommand              :: !(Maybe CopyCommand)
+    , _rduClusterJDBCURL           :: !(Maybe Text)
+    , _rduRoleARN                  :: !(Maybe Text)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'RedshiftDestinationUpdate' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'rduCloudWatchLoggingOptions'
+--
 -- * 'rduUsername'
 --
 -- * 'rduS3Update'
@@ -684,7 +1275,8 @@
     :: RedshiftDestinationUpdate
 redshiftDestinationUpdate =
     RedshiftDestinationUpdate'
-    { _rduUsername = Nothing
+    { _rduCloudWatchLoggingOptions = Nothing
+    , _rduUsername = Nothing
     , _rduS3Update = Nothing
     , _rduPassword = Nothing
     , _rduCopyCommand = Nothing
@@ -692,6 +1284,10 @@
     , _rduRoleARN = Nothing
     }
 
+-- | Describes CloudWatch logging options for your delivery stream.
+rduCloudWatchLoggingOptions :: Lens' RedshiftDestinationUpdate (Maybe CloudWatchLoggingOptions)
+rduCloudWatchLoggingOptions = lens _rduCloudWatchLoggingOptions (\ s a -> s{_rduCloudWatchLoggingOptions = a});
+
 -- | The name of the user.
 rduUsername :: Lens' RedshiftDestinationUpdate (Maybe Text)
 rduUsername = lens _rduUsername (\ s a -> s{_rduUsername = a}) . mapping _Sensitive;
@@ -699,8 +1295,8 @@
 -- | The Amazon S3 destination.
 --
 -- The compression formats 'SNAPPY' or 'ZIP' cannot be specified in
--- 'RedshiftDestinationUpdate.S3Update' because the Amazon Redshift 'COPY'
--- operation that reads from the S3 bucket doesn\'t support these
+-- __RedshiftDestinationUpdate.S3Update__ because the Amazon Redshift
+-- 'COPY' operation that reads from the S3 bucket doesn\'t support these
 -- compression formats.
 rduS3Update :: Lens' RedshiftDestinationUpdate (Maybe S3DestinationUpdate)
 rduS3Update = lens _rduS3Update (\ s a -> s{_rduS3Update = a});
@@ -723,11 +1319,15 @@
 
 instance Hashable RedshiftDestinationUpdate
 
+instance NFData RedshiftDestinationUpdate
+
 instance ToJSON RedshiftDestinationUpdate where
         toJSON RedshiftDestinationUpdate'{..}
           = object
               (catMaybes
-                 [("Username" .=) <$> _rduUsername,
+                 [("CloudWatchLoggingOptions" .=) <$>
+                    _rduCloudWatchLoggingOptions,
+                  ("Username" .=) <$> _rduUsername,
                   ("S3Update" .=) <$> _rduS3Update,
                   ("Password" .=) <$> _rduPassword,
                   ("CopyCommand" .=) <$> _rduCopyCommand,
@@ -738,12 +1338,13 @@
 --
 -- /See:/ 's3DestinationConfiguration' smart constructor.
 data S3DestinationConfiguration = S3DestinationConfiguration'
-    { _sdcPrefix                  :: !(Maybe Text)
-    , _sdcEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
-    , _sdcCompressionFormat       :: !(Maybe CompressionFormat)
-    , _sdcBufferingHints          :: !(Maybe BufferingHints)
-    , _sdcRoleARN                 :: !Text
-    , _sdcBucketARN               :: !Text
+    { _sdcPrefix                   :: !(Maybe Text)
+    , _sdcCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _sdcEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
+    , _sdcCompressionFormat        :: !(Maybe CompressionFormat)
+    , _sdcBufferingHints           :: !(Maybe BufferingHints)
+    , _sdcRoleARN                  :: !Text
+    , _sdcBucketARN                :: !Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'S3DestinationConfiguration' with the minimum fields required to make a request.
@@ -752,6 +1353,8 @@
 --
 -- * 'sdcPrefix'
 --
+-- * 'sdcCloudWatchLoggingOptions'
+--
 -- * 'sdcEncryptionConfiguration'
 --
 -- * 'sdcCompressionFormat'
@@ -768,6 +1371,7 @@
 s3DestinationConfiguration pRoleARN_ pBucketARN_ =
     S3DestinationConfiguration'
     { _sdcPrefix = Nothing
+    , _sdcCloudWatchLoggingOptions = Nothing
     , _sdcEncryptionConfiguration = Nothing
     , _sdcCompressionFormat = Nothing
     , _sdcBufferingHints = Nothing
@@ -784,6 +1388,10 @@
 sdcPrefix :: Lens' S3DestinationConfiguration (Maybe Text)
 sdcPrefix = lens _sdcPrefix (\ s a -> s{_sdcPrefix = a});
 
+-- | Describes CloudWatch logging options for your delivery stream.
+sdcCloudWatchLoggingOptions :: Lens' S3DestinationConfiguration (Maybe CloudWatchLoggingOptions)
+sdcCloudWatchLoggingOptions = lens _sdcCloudWatchLoggingOptions (\ s a -> s{_sdcCloudWatchLoggingOptions = a});
+
 -- | The encryption configuration. If no value is specified, the default is
 -- no encryption.
 sdcEncryptionConfiguration :: Lens' S3DestinationConfiguration (Maybe EncryptionConfiguration)
@@ -798,8 +1406,8 @@
 sdcCompressionFormat :: Lens' S3DestinationConfiguration (Maybe CompressionFormat)
 sdcCompressionFormat = lens _sdcCompressionFormat (\ s a -> s{_sdcCompressionFormat = a});
 
--- | The buffering option. If no value is specified, 'BufferingHints' object
--- default values are used.
+-- | The buffering option. If no value is specified, __BufferingHints__
+-- object default values are used.
 sdcBufferingHints :: Lens' S3DestinationConfiguration (Maybe BufferingHints)
 sdcBufferingHints = lens _sdcBufferingHints (\ s a -> s{_sdcBufferingHints = a});
 
@@ -813,11 +1421,15 @@
 
 instance Hashable S3DestinationConfiguration
 
+instance NFData S3DestinationConfiguration
+
 instance ToJSON S3DestinationConfiguration where
         toJSON S3DestinationConfiguration'{..}
           = object
               (catMaybes
                  [("Prefix" .=) <$> _sdcPrefix,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _sdcCloudWatchLoggingOptions,
                   ("EncryptionConfiguration" .=) <$>
                     _sdcEncryptionConfiguration,
                   ("CompressionFormat" .=) <$> _sdcCompressionFormat,
@@ -829,12 +1441,13 @@
 --
 -- /See:/ 's3DestinationDescription' smart constructor.
 data S3DestinationDescription = S3DestinationDescription'
-    { _sddPrefix                  :: !(Maybe Text)
-    , _sddRoleARN                 :: !Text
-    , _sddBucketARN               :: !Text
-    , _sddBufferingHints          :: !BufferingHints
-    , _sddCompressionFormat       :: !CompressionFormat
-    , _sddEncryptionConfiguration :: !EncryptionConfiguration
+    { _sddPrefix                   :: !(Maybe Text)
+    , _sddCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _sddRoleARN                  :: !Text
+    , _sddBucketARN                :: !Text
+    , _sddBufferingHints           :: !BufferingHints
+    , _sddCompressionFormat        :: !CompressionFormat
+    , _sddEncryptionConfiguration  :: !EncryptionConfiguration
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'S3DestinationDescription' with the minimum fields required to make a request.
@@ -843,6 +1456,8 @@
 --
 -- * 'sddPrefix'
 --
+-- * 'sddCloudWatchLoggingOptions'
+--
 -- * 'sddRoleARN'
 --
 -- * 'sddBucketARN'
@@ -862,6 +1477,7 @@
 s3DestinationDescription pRoleARN_ pBucketARN_ pBufferingHints_ pCompressionFormat_ pEncryptionConfiguration_ =
     S3DestinationDescription'
     { _sddPrefix = Nothing
+    , _sddCloudWatchLoggingOptions = Nothing
     , _sddRoleARN = pRoleARN_
     , _sddBucketARN = pBucketARN_
     , _sddBufferingHints = pBufferingHints_
@@ -878,6 +1494,10 @@
 sddPrefix :: Lens' S3DestinationDescription (Maybe Text)
 sddPrefix = lens _sddPrefix (\ s a -> s{_sddPrefix = a});
 
+-- | Describes CloudWatch logging options for your delivery stream.
+sddCloudWatchLoggingOptions :: Lens' S3DestinationDescription (Maybe CloudWatchLoggingOptions)
+sddCloudWatchLoggingOptions = lens _sddCloudWatchLoggingOptions (\ s a -> s{_sddCloudWatchLoggingOptions = a});
+
 -- | The ARN of the AWS credentials.
 sddRoleARN :: Lens' S3DestinationDescription Text
 sddRoleARN = lens _sddRoleARN (\ s a -> s{_sddRoleARN = a});
@@ -886,8 +1506,8 @@
 sddBucketARN :: Lens' S3DestinationDescription Text
 sddBucketARN = lens _sddBucketARN (\ s a -> s{_sddBucketARN = a});
 
--- | The buffering option. If no value is specified, 'BufferingHints' object
--- default values are used.
+-- | The buffering option. If no value is specified, __BufferingHints__
+-- object default values are used.
 sddBufferingHints :: Lens' S3DestinationDescription BufferingHints
 sddBufferingHints = lens _sddBufferingHints (\ s a -> s{_sddBufferingHints = a});
 
@@ -906,24 +1526,29 @@
           = withObject "S3DestinationDescription"
               (\ x ->
                  S3DestinationDescription' <$>
-                   (x .:? "Prefix") <*> (x .: "RoleARN") <*>
-                     (x .: "BucketARN")
+                   (x .:? "Prefix") <*>
+                     (x .:? "CloudWatchLoggingOptions")
+                     <*> (x .: "RoleARN")
+                     <*> (x .: "BucketARN")
                      <*> (x .: "BufferingHints")
                      <*> (x .: "CompressionFormat")
                      <*> (x .: "EncryptionConfiguration"))
 
 instance Hashable S3DestinationDescription
 
+instance NFData S3DestinationDescription
+
 -- | Describes an update for a destination in Amazon S3.
 --
 -- /See:/ 's3DestinationUpdate' smart constructor.
 data S3DestinationUpdate = S3DestinationUpdate'
-    { _sduPrefix                  :: !(Maybe Text)
-    , _sduEncryptionConfiguration :: !(Maybe EncryptionConfiguration)
-    , _sduCompressionFormat       :: !(Maybe CompressionFormat)
-    , _sduBufferingHints          :: !(Maybe BufferingHints)
-    , _sduBucketARN               :: !(Maybe Text)
-    , _sduRoleARN                 :: !(Maybe Text)
+    { _sduPrefix                   :: !(Maybe Text)
+    , _sduCloudWatchLoggingOptions :: !(Maybe CloudWatchLoggingOptions)
+    , _sduEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
+    , _sduCompressionFormat        :: !(Maybe CompressionFormat)
+    , _sduBufferingHints           :: !(Maybe BufferingHints)
+    , _sduBucketARN                :: !(Maybe Text)
+    , _sduRoleARN                  :: !(Maybe Text)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'S3DestinationUpdate' with the minimum fields required to make a request.
@@ -932,6 +1557,8 @@
 --
 -- * 'sduPrefix'
 --
+-- * 'sduCloudWatchLoggingOptions'
+--
 -- * 'sduEncryptionConfiguration'
 --
 -- * 'sduCompressionFormat'
@@ -946,6 +1573,7 @@
 s3DestinationUpdate =
     S3DestinationUpdate'
     { _sduPrefix = Nothing
+    , _sduCloudWatchLoggingOptions = Nothing
     , _sduEncryptionConfiguration = Nothing
     , _sduCompressionFormat = Nothing
     , _sduBufferingHints = Nothing
@@ -962,6 +1590,10 @@
 sduPrefix :: Lens' S3DestinationUpdate (Maybe Text)
 sduPrefix = lens _sduPrefix (\ s a -> s{_sduPrefix = a});
 
+-- | Describes CloudWatch logging options for your delivery stream.
+sduCloudWatchLoggingOptions :: Lens' S3DestinationUpdate (Maybe CloudWatchLoggingOptions)
+sduCloudWatchLoggingOptions = lens _sduCloudWatchLoggingOptions (\ s a -> s{_sduCloudWatchLoggingOptions = a});
+
 -- | The encryption configuration. If no value is specified, the default is
 -- no encryption.
 sduEncryptionConfiguration :: Lens' S3DestinationUpdate (Maybe EncryptionConfiguration)
@@ -976,8 +1608,8 @@
 sduCompressionFormat :: Lens' S3DestinationUpdate (Maybe CompressionFormat)
 sduCompressionFormat = lens _sduCompressionFormat (\ s a -> s{_sduCompressionFormat = a});
 
--- | The buffering option. If no value is specified, 'BufferingHints' object
--- default values are used.
+-- | The buffering option. If no value is specified, __BufferingHints__
+-- object default values are used.
 sduBufferingHints :: Lens' S3DestinationUpdate (Maybe BufferingHints)
 sduBufferingHints = lens _sduBufferingHints (\ s a -> s{_sduBufferingHints = a});
 
@@ -991,11 +1623,15 @@
 
 instance Hashable S3DestinationUpdate
 
+instance NFData S3DestinationUpdate
+
 instance ToJSON S3DestinationUpdate where
         toJSON S3DestinationUpdate'{..}
           = object
               (catMaybes
                  [("Prefix" .=) <$> _sduPrefix,
+                  ("CloudWatchLoggingOptions" .=) <$>
+                    _sduCloudWatchLoggingOptions,
                   ("EncryptionConfiguration" .=) <$>
                     _sduEncryptionConfiguration,
                   ("CompressionFormat" .=) <$> _sduCompressionFormat,
diff --git a/gen/Network/AWS/Firehose/Types/Sum.hs b/gen/Network/AWS/Firehose/Types/Sum.hs
--- a/gen/Network/AWS/Firehose/Types/Sum.hs
+++ b/gen/Network/AWS/Firehose/Types/Sum.hs
@@ -43,6 +43,7 @@
         Zip -> "ZIP"
 
 instance Hashable     CompressionFormat
+instance NFData       CompressionFormat
 instance ToByteString CompressionFormat
 instance ToQuery      CompressionFormat
 instance ToHeader     CompressionFormat
@@ -74,6 +75,7 @@
         Deleting -> "DELETING"
 
 instance Hashable     DeliveryStreamStatus
+instance NFData       DeliveryStreamStatus
 instance ToByteString DeliveryStreamStatus
 instance ToQuery      DeliveryStreamStatus
 instance ToHeader     DeliveryStreamStatus
@@ -81,6 +83,73 @@
 instance FromJSON DeliveryStreamStatus where
     parseJSON = parseJSONText "DeliveryStreamStatus"
 
+data ElasticsearchIndexRotationPeriod
+    = NoRotation
+    | OneDay
+    | OneHour
+    | OneMonth
+    | OneWeek
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ElasticsearchIndexRotationPeriod where
+    parser = takeLowerText >>= \case
+        "norotation" -> pure NoRotation
+        "oneday" -> pure OneDay
+        "onehour" -> pure OneHour
+        "onemonth" -> pure OneMonth
+        "oneweek" -> pure OneWeek
+        e -> fromTextError $ "Failure parsing ElasticsearchIndexRotationPeriod from value: '" <> e
+           <> "'. Accepted values: NoRotation, OneDay, OneHour, OneMonth, OneWeek"
+
+instance ToText ElasticsearchIndexRotationPeriod where
+    toText = \case
+        NoRotation -> "NoRotation"
+        OneDay -> "OneDay"
+        OneHour -> "OneHour"
+        OneMonth -> "OneMonth"
+        OneWeek -> "OneWeek"
+
+instance Hashable     ElasticsearchIndexRotationPeriod
+instance NFData       ElasticsearchIndexRotationPeriod
+instance ToByteString ElasticsearchIndexRotationPeriod
+instance ToQuery      ElasticsearchIndexRotationPeriod
+instance ToHeader     ElasticsearchIndexRotationPeriod
+
+instance ToJSON ElasticsearchIndexRotationPeriod where
+    toJSON = toJSONText
+
+instance FromJSON ElasticsearchIndexRotationPeriod where
+    parseJSON = parseJSONText "ElasticsearchIndexRotationPeriod"
+
+data ElasticsearchS3BackupMode
+    = AllDocuments
+    | FailedDocumentsOnly
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ElasticsearchS3BackupMode where
+    parser = takeLowerText >>= \case
+        "alldocuments" -> pure AllDocuments
+        "faileddocumentsonly" -> pure FailedDocumentsOnly
+        e -> fromTextError $ "Failure parsing ElasticsearchS3BackupMode from value: '" <> e
+           <> "'. Accepted values: AllDocuments, FailedDocumentsOnly"
+
+instance ToText ElasticsearchS3BackupMode where
+    toText = \case
+        AllDocuments -> "AllDocuments"
+        FailedDocumentsOnly -> "FailedDocumentsOnly"
+
+instance Hashable     ElasticsearchS3BackupMode
+instance NFData       ElasticsearchS3BackupMode
+instance ToByteString ElasticsearchS3BackupMode
+instance ToQuery      ElasticsearchS3BackupMode
+instance ToHeader     ElasticsearchS3BackupMode
+
+instance ToJSON ElasticsearchS3BackupMode where
+    toJSON = toJSONText
+
+instance FromJSON ElasticsearchS3BackupMode where
+    parseJSON = parseJSONText "ElasticsearchS3BackupMode"
+
 data NoEncryptionConfig =
     NoEncryption
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
@@ -96,6 +165,7 @@
         NoEncryption -> "NoEncryption"
 
 instance Hashable     NoEncryptionConfig
+instance NFData       NoEncryptionConfig
 instance ToByteString NoEncryptionConfig
 instance ToQuery      NoEncryptionConfig
 instance ToHeader     NoEncryptionConfig
diff --git a/gen/Network/AWS/Firehose/UpdateDestination.hs b/gen/Network/AWS/Firehose/UpdateDestination.hs
--- a/gen/Network/AWS/Firehose/UpdateDestination.hs
+++ b/gen/Network/AWS/Firehose/UpdateDestination.hs
@@ -19,6 +19,9 @@
 -- 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
@@ -29,27 +32,26 @@
 -- continue during this process. The updated configurations are normally
 -- effective within a few minutes.
 --
--- If the destination type is the same, Amazon Kinesis 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 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, Amazon Kinesis Firehose
--- does not merge any parameters. In this case, all parameters must be
--- specified.
+-- destination from Amazon S3 to Amazon Redshift, Firehose does not merge
+-- any parameters. In this case, all parameters must be specified.
 --
--- Amazon Kinesis 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
+-- 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
     (
@@ -59,6 +61,7 @@
     -- * Request Lenses
     , udS3DestinationUpdate
     , udRedshiftDestinationUpdate
+    , udElasticsearchDestinationUpdate
     , udDeliveryStreamName
     , udCurrentDeliveryStreamVersionId
     , udDestinationId
@@ -83,6 +86,7 @@
 data UpdateDestination = UpdateDestination'
     { _udS3DestinationUpdate            :: !(Maybe S3DestinationUpdate)
     , _udRedshiftDestinationUpdate      :: !(Maybe RedshiftDestinationUpdate)
+    , _udElasticsearchDestinationUpdate :: !(Maybe ElasticsearchDestinationUpdate)
     , _udDeliveryStreamName             :: !Text
     , _udCurrentDeliveryStreamVersionId :: !Text
     , _udDestinationId                  :: !Text
@@ -96,6 +100,8 @@
 --
 -- * 'udRedshiftDestinationUpdate'
 --
+-- * 'udElasticsearchDestinationUpdate'
+--
 -- * 'udDeliveryStreamName'
 --
 -- * 'udCurrentDeliveryStreamVersionId'
@@ -110,6 +116,7 @@
     UpdateDestination'
     { _udS3DestinationUpdate = Nothing
     , _udRedshiftDestinationUpdate = Nothing
+    , _udElasticsearchDestinationUpdate = Nothing
     , _udDeliveryStreamName = pDeliveryStreamName_
     , _udCurrentDeliveryStreamVersionId = pCurrentDeliveryStreamVersionId_
     , _udDestinationId = pDestinationId_
@@ -123,17 +130,21 @@
 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
+-- | 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.
+-- 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});
 
@@ -151,6 +162,8 @@
 
 instance Hashable UpdateDestination
 
+instance NFData UpdateDestination
+
 instance ToHeaders UpdateDestination where
         toHeaders
           = const
@@ -169,6 +182,8 @@
                     _udS3DestinationUpdate,
                   ("RedshiftDestinationUpdate" .=) <$>
                     _udRedshiftDestinationUpdate,
+                  ("ElasticsearchDestinationUpdate" .=) <$>
+                    _udElasticsearchDestinationUpdate,
                   Just ("DeliveryStreamName" .= _udDeliveryStreamName),
                   Just
                     ("CurrentDeliveryStreamVersionId" .=
@@ -204,3 +219,5 @@
 -- | The response status code.
 udrsResponseStatus :: Lens' UpdateDestinationResponse Int
 udrsResponseStatus = lens _udrsResponseStatus (\ s a -> s{_udrsResponseStatus = a});
+
+instance NFData UpdateDestinationResponse
