diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.1`
+`1.3.2`
 
 
 ## Description
diff --git a/amazonka-cloudwatch-logs.cabal b/amazonka-cloudwatch-logs.cabal
--- a/amazonka-cloudwatch-logs.cabal
+++ b/amazonka-cloudwatch-logs.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-cloudwatch-logs
-version:               1.3.1
+version:               1.3.2
 synopsis:              Amazon CloudWatch Logs SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -81,6 +81,8 @@
 
     exposed-modules:
           Network.AWS.CloudWatchLogs
+        , Network.AWS.CloudWatchLogs.CancelExportTask
+        , Network.AWS.CloudWatchLogs.CreateExportTask
         , Network.AWS.CloudWatchLogs.CreateLogGroup
         , Network.AWS.CloudWatchLogs.CreateLogStream
         , Network.AWS.CloudWatchLogs.DeleteDestination
@@ -90,6 +92,7 @@
         , Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
         , Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
         , Network.AWS.CloudWatchLogs.DescribeDestinations
+        , Network.AWS.CloudWatchLogs.DescribeExportTasks
         , Network.AWS.CloudWatchLogs.DescribeLogGroups
         , Network.AWS.CloudWatchLogs.DescribeLogStreams
         , Network.AWS.CloudWatchLogs.DescribeMetricFilters
@@ -111,7 +114,7 @@
         , Network.AWS.CloudWatchLogs.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.1.*
+          amazonka-core == 1.3.2.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-cloudwatch-logs-test
@@ -131,9 +134,9 @@
         , Test.AWS.CloudWatchLogs.Internal
 
     build-depends:
-          amazonka-core == 1.3.1.*
-        , amazonka-test == 1.3.1.*
-        , amazonka-cloudwatch-logs == 1.3.1.*
+          amazonka-core == 1.3.2.*
+        , amazonka-test == 1.3.2.*
+        , amazonka-cloudwatch-logs == 1.3.2.*
         , base
         , bytestring
         , lens
diff --git a/fixture/CancelExportTask.yaml b/fixture/CancelExportTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelExportTask.yaml
diff --git a/fixture/CancelExportTaskResponse.proto b/fixture/CancelExportTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelExportTaskResponse.proto
diff --git a/fixture/CreateExportTask.yaml b/fixture/CreateExportTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExportTask.yaml
diff --git a/fixture/CreateExportTaskResponse.proto b/fixture/CreateExportTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExportTaskResponse.proto
diff --git a/fixture/DescribeExportTasks.yaml b/fixture/DescribeExportTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExportTasks.yaml
diff --git a/fixture/DescribeExportTasksResponse.proto b/fixture/DescribeExportTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExportTasksResponse.proto
diff --git a/gen/Network/AWS/CloudWatchLogs.hs b/gen/Network/AWS/CloudWatchLogs.hs
--- a/gen/Network/AWS/CloudWatchLogs.hs
+++ b/gen/Network/AWS/CloudWatchLogs.hs
@@ -80,6 +80,9 @@
     -- ** DataAlreadyAcceptedException
     , _DataAlreadyAcceptedException
 
+    -- ** InvalidOperationException
+    , _InvalidOperationException
+
     -- ** ResourceNotFoundException
     , _ResourceNotFoundException
 
@@ -95,6 +98,9 @@
     -- ** DescribeDestinations (Paginated)
     , module Network.AWS.CloudWatchLogs.DescribeDestinations
 
+    -- ** CreateExportTask
+    , module Network.AWS.CloudWatchLogs.CreateExportTask
+
     -- ** PutDestination
     , module Network.AWS.CloudWatchLogs.PutDestination
 
@@ -122,6 +128,12 @@
     -- ** CreateLogGroup
     , module Network.AWS.CloudWatchLogs.CreateLogGroup
 
+    -- ** DescribeExportTasks
+    , module Network.AWS.CloudWatchLogs.DescribeExportTasks
+
+    -- ** CancelExportTask
+    , module Network.AWS.CloudWatchLogs.CancelExportTask
+
     -- ** PutSubscriptionFilter
     , module Network.AWS.CloudWatchLogs.PutSubscriptionFilter
 
@@ -160,6 +172,9 @@
 
     -- * Types
 
+    -- ** ExportTaskStatusCode
+    , ExportTaskStatusCode (..)
+
     -- ** OrderBy
     , OrderBy (..)
 
@@ -173,6 +188,31 @@
     , dDestinationName
     , dRoleARN
 
+    -- ** ExportTask
+    , ExportTask
+    , exportTask
+    , etDestinationPrefix
+    , etDestination
+    , etStatus
+    , etTaskName
+    , etTaskId
+    , etTo
+    , etFrom
+    , etLogGroupName
+    , etExecutionInfo
+
+    -- ** ExportTaskExecutionInfo
+    , ExportTaskExecutionInfo
+    , exportTaskExecutionInfo
+    , eteiCreationTime
+    , eteiCompletionTime
+
+    -- ** ExportTaskStatus
+    , ExportTaskStatus
+    , exportTaskStatus
+    , etsCode
+    , etsMessage
+
     -- ** FilteredLogEvent
     , FilteredLogEvent
     , filteredLogEvent
@@ -263,6 +303,8 @@
     , sfRoleARN
     ) where
 
+import           Network.AWS.CloudWatchLogs.CancelExportTask
+import           Network.AWS.CloudWatchLogs.CreateExportTask
 import           Network.AWS.CloudWatchLogs.CreateLogGroup
 import           Network.AWS.CloudWatchLogs.CreateLogStream
 import           Network.AWS.CloudWatchLogs.DeleteDestination
@@ -272,6 +314,7 @@
 import           Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
 import           Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
 import           Network.AWS.CloudWatchLogs.DescribeDestinations
+import           Network.AWS.CloudWatchLogs.DescribeExportTasks
 import           Network.AWS.CloudWatchLogs.DescribeLogGroups
 import           Network.AWS.CloudWatchLogs.DescribeLogStreams
 import           Network.AWS.CloudWatchLogs.DescribeMetricFilters
diff --git a/gen/Network/AWS/CloudWatchLogs/CancelExportTask.hs b/gen/Network/AWS/CloudWatchLogs/CancelExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/CancelExportTask.hs
@@ -0,0 +1,98 @@
+{-# 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.CloudWatchLogs.CancelExportTask
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Cancels an export task if it is in 'PENDING' or 'RUNNING' state.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CancelExportTask.html AWS API Reference> for CancelExportTask.
+module Network.AWS.CloudWatchLogs.CancelExportTask
+    (
+    -- * Creating a Request
+      cancelExportTask
+    , CancelExportTask
+    -- * Request Lenses
+    , cetTaskId
+
+    -- * Destructuring the Response
+    , cancelExportTaskResponse
+    , CancelExportTaskResponse
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'cancelExportTask' smart constructor.
+newtype CancelExportTask = CancelExportTask'
+    { _cetTaskId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelExportTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cetTaskId'
+cancelExportTask
+    :: Text -- ^ 'cetTaskId'
+    -> CancelExportTask
+cancelExportTask pTaskId_ =
+    CancelExportTask'
+    { _cetTaskId = pTaskId_
+    }
+
+-- | Id of the export task to cancel.
+cetTaskId :: Lens' CancelExportTask Text
+cetTaskId = lens _cetTaskId (\ s a -> s{_cetTaskId = a});
+
+instance AWSRequest CancelExportTask where
+        type Rs CancelExportTask = CancelExportTaskResponse
+        request = postJSON cloudWatchLogs
+        response = receiveNull CancelExportTaskResponse'
+
+instance ToHeaders CancelExportTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.CancelExportTask" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CancelExportTask where
+        toJSON CancelExportTask'{..}
+          = object (catMaybes [Just ("taskId" .= _cetTaskId)])
+
+instance ToPath CancelExportTask where
+        toPath = const "/"
+
+instance ToQuery CancelExportTask where
+        toQuery = const mempty
+
+-- | /See:/ 'cancelExportTaskResponse' smart constructor.
+data CancelExportTaskResponse =
+    CancelExportTaskResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelExportTaskResponse' with the minimum fields required to make a request.
+--
+cancelExportTaskResponse
+    :: CancelExportTaskResponse
+cancelExportTaskResponse = CancelExportTaskResponse'
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateExportTask.hs b/gen/Network/AWS/CloudWatchLogs/CreateExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/CreateExportTask.hs
@@ -0,0 +1,201 @@
+{-# 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.CloudWatchLogs.CreateExportTask
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Creates an 'ExportTask' which allows you to efficiently export data from
+-- a Log Group to your Amazon S3 bucket.
+--
+-- This is an asynchronous call. If all the required information is
+-- provided, this API will initiate an export task and respond with the
+-- task Id. Once started, 'DescribeExportTasks' can be used to get the
+-- status of an export task.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateExportTask.html AWS API Reference> for CreateExportTask.
+module Network.AWS.CloudWatchLogs.CreateExportTask
+    (
+    -- * Creating a Request
+      createExportTask
+    , CreateExportTask
+    -- * Request Lenses
+    , cetDestinationPrefix
+    , cetTaskName
+    , cetLogStreamNamePrefix
+    , cetLogGroupName
+    , cetFrom
+    , cetTo
+    , cetDestination
+
+    -- * Destructuring the Response
+    , createExportTaskResponse
+    , CreateExportTaskResponse
+    -- * Response Lenses
+    , cetrsTaskId
+    , cetrsResponseStatus
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'createExportTask' smart constructor.
+data CreateExportTask = CreateExportTask'
+    { _cetDestinationPrefix   :: !(Maybe Text)
+    , _cetTaskName            :: !(Maybe Text)
+    , _cetLogStreamNamePrefix :: !(Maybe Text)
+    , _cetLogGroupName        :: !Text
+    , _cetFrom                :: !Nat
+    , _cetTo                  :: !Nat
+    , _cetDestination         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateExportTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cetDestinationPrefix'
+--
+-- * 'cetTaskName'
+--
+-- * 'cetLogStreamNamePrefix'
+--
+-- * 'cetLogGroupName'
+--
+-- * 'cetFrom'
+--
+-- * 'cetTo'
+--
+-- * 'cetDestination'
+createExportTask
+    :: Text -- ^ 'cetLogGroupName'
+    -> Natural -- ^ 'cetFrom'
+    -> Natural -- ^ 'cetTo'
+    -> Text -- ^ 'cetDestination'
+    -> CreateExportTask
+createExportTask pLogGroupName_ pFrom_ pTo_ pDestination_ =
+    CreateExportTask'
+    { _cetDestinationPrefix = Nothing
+    , _cetTaskName = Nothing
+    , _cetLogStreamNamePrefix = Nothing
+    , _cetLogGroupName = pLogGroupName_
+    , _cetFrom = _Nat # pFrom_
+    , _cetTo = _Nat # pTo_
+    , _cetDestination = pDestination_
+    }
+
+-- | Prefix that will be used as the start of Amazon S3 key for every object
+-- exported. If not specified, this defaults to \'exportedlogs\'.
+cetDestinationPrefix :: Lens' CreateExportTask (Maybe Text)
+cetDestinationPrefix = lens _cetDestinationPrefix (\ s a -> s{_cetDestinationPrefix = a});
+
+-- | The name of the export task.
+cetTaskName :: Lens' CreateExportTask (Maybe Text)
+cetTaskName = lens _cetTaskName (\ s a -> s{_cetTaskName = a});
+
+-- | Will only export log streams that match the provided
+-- logStreamNamePrefix. If you don\'t specify a value, no prefix filter is
+-- applied.
+cetLogStreamNamePrefix :: Lens' CreateExportTask (Maybe Text)
+cetLogStreamNamePrefix = lens _cetLogStreamNamePrefix (\ s a -> s{_cetLogStreamNamePrefix = a});
+
+-- | The name of the log group to export.
+cetLogGroupName :: Lens' CreateExportTask Text
+cetLogGroupName = lens _cetLogGroupName (\ s a -> s{_cetLogGroupName = a});
+
+-- | A unix timestamp indicating the start time of the range for the request.
+-- Events with a timestamp prior to this time will not be exported.
+cetFrom :: Lens' CreateExportTask Natural
+cetFrom = lens _cetFrom (\ s a -> s{_cetFrom = a}) . _Nat;
+
+-- | A unix timestamp indicating the end time of the range for the request.
+-- Events with a timestamp later than this time will not be exported.
+cetTo :: Lens' CreateExportTask Natural
+cetTo = lens _cetTo (\ s a -> s{_cetTo = a}) . _Nat;
+
+-- | Name of Amazon S3 bucket to which the log data will be exported.
+-- __NOTE: Only buckets in the same AWS region are supported__
+cetDestination :: Lens' CreateExportTask Text
+cetDestination = lens _cetDestination (\ s a -> s{_cetDestination = a});
+
+instance AWSRequest CreateExportTask where
+        type Rs CreateExportTask = CreateExportTaskResponse
+        request = postJSON cloudWatchLogs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateExportTaskResponse' <$>
+                   (x .?> "taskId") <*> (pure (fromEnum s)))
+
+instance ToHeaders CreateExportTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.CreateExportTask" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateExportTask where
+        toJSON CreateExportTask'{..}
+          = object
+              (catMaybes
+                 [("destinationPrefix" .=) <$> _cetDestinationPrefix,
+                  ("taskName" .=) <$> _cetTaskName,
+                  ("logStreamNamePrefix" .=) <$>
+                    _cetLogStreamNamePrefix,
+                  Just ("logGroupName" .= _cetLogGroupName),
+                  Just ("from" .= _cetFrom), Just ("to" .= _cetTo),
+                  Just ("destination" .= _cetDestination)])
+
+instance ToPath CreateExportTask where
+        toPath = const "/"
+
+instance ToQuery CreateExportTask where
+        toQuery = const mempty
+
+-- | /See:/ 'createExportTaskResponse' smart constructor.
+data CreateExportTaskResponse = CreateExportTaskResponse'
+    { _cetrsTaskId         :: !(Maybe Text)
+    , _cetrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateExportTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cetrsTaskId'
+--
+-- * 'cetrsResponseStatus'
+createExportTaskResponse
+    :: Int -- ^ 'cetrsResponseStatus'
+    -> CreateExportTaskResponse
+createExportTaskResponse pResponseStatus_ =
+    CreateExportTaskResponse'
+    { _cetrsTaskId = Nothing
+    , _cetrsResponseStatus = pResponseStatus_
+    }
+
+-- | Id of the export task that got created.
+cetrsTaskId :: Lens' CreateExportTaskResponse (Maybe Text)
+cetrsTaskId = lens _cetrsTaskId (\ s a -> s{_cetrsTaskId = a});
+
+-- | The response status code.
+cetrsResponseStatus :: Lens' CreateExportTaskResponse Int
+cetrsResponseStatus = lens _cetrsResponseStatus (\ s a -> s{_cetrsResponseStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeExportTasks.hs b/gen/Network/AWS/CloudWatchLogs/DescribeExportTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatchLogs/DescribeExportTasks.hs
@@ -0,0 +1,180 @@
+{-# 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.CloudWatchLogs.DescribeExportTasks
+-- Copyright   : (c) 2013-2015 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)
+--
+-- Returns all the export tasks that are associated with the AWS account
+-- making the request. The export tasks can be filtered based on 'TaskId'
+-- or 'TaskStatus'.
+--
+-- By default, this operation returns up to 50 export tasks that satisfy
+-- the specified filters. If there are more export tasks to list, the
+-- response would contain a 'nextToken' value in the response body. You can
+-- also limit the number of export tasks returned in the response by
+-- specifying the 'limit' parameter in the request.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeExportTasks.html AWS API Reference> for DescribeExportTasks.
+module Network.AWS.CloudWatchLogs.DescribeExportTasks
+    (
+    -- * Creating a Request
+      describeExportTasks
+    , DescribeExportTasks
+    -- * Request Lenses
+    , detTaskId
+    , detNextToken
+    , detLimit
+    , detStatusCode
+
+    -- * Destructuring the Response
+    , describeExportTasksResponse
+    , DescribeExportTasksResponse
+    -- * Response Lenses
+    , detrsNextToken
+    , detrsExportTasks
+    , detrsResponseStatus
+    ) where
+
+import           Network.AWS.CloudWatchLogs.Types
+import           Network.AWS.CloudWatchLogs.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeExportTasks' smart constructor.
+data DescribeExportTasks = DescribeExportTasks'
+    { _detTaskId     :: !(Maybe Text)
+    , _detNextToken  :: !(Maybe Text)
+    , _detLimit      :: !(Maybe Nat)
+    , _detStatusCode :: !(Maybe ExportTaskStatusCode)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeExportTasks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'detTaskId'
+--
+-- * 'detNextToken'
+--
+-- * 'detLimit'
+--
+-- * 'detStatusCode'
+describeExportTasks
+    :: DescribeExportTasks
+describeExportTasks =
+    DescribeExportTasks'
+    { _detTaskId = Nothing
+    , _detNextToken = Nothing
+    , _detLimit = Nothing
+    , _detStatusCode = Nothing
+    }
+
+-- | Export task that matches the specified task Id will be returned. This
+-- can result in zero or one export task.
+detTaskId :: Lens' DescribeExportTasks (Maybe Text)
+detTaskId = lens _detTaskId (\ s a -> s{_detTaskId = a});
+
+-- | A string token used for pagination that points to the next page of
+-- results. It must be a value obtained from the response of the previous
+-- 'DescribeExportTasks' request.
+detNextToken :: Lens' DescribeExportTasks (Maybe Text)
+detNextToken = lens _detNextToken (\ s a -> s{_detNextToken = a});
+
+-- | The maximum number of items returned in the response. If you don\'t
+-- specify a value, the request would return up to 50 items.
+detLimit :: Lens' DescribeExportTasks (Maybe Natural)
+detLimit = lens _detLimit (\ s a -> s{_detLimit = a}) . mapping _Nat;
+
+-- | All export tasks that matches the specified status code will be
+-- returned. This can return zero or more export tasks.
+detStatusCode :: Lens' DescribeExportTasks (Maybe ExportTaskStatusCode)
+detStatusCode = lens _detStatusCode (\ s a -> s{_detStatusCode = a});
+
+instance AWSRequest DescribeExportTasks where
+        type Rs DescribeExportTasks =
+             DescribeExportTasksResponse
+        request = postJSON cloudWatchLogs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeExportTasksResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "exportTasks" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeExportTasks where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("Logs_20140328.DescribeExportTasks" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeExportTasks where
+        toJSON DescribeExportTasks'{..}
+          = object
+              (catMaybes
+                 [("taskId" .=) <$> _detTaskId,
+                  ("nextToken" .=) <$> _detNextToken,
+                  ("limit" .=) <$> _detLimit,
+                  ("statusCode" .=) <$> _detStatusCode])
+
+instance ToPath DescribeExportTasks where
+        toPath = const "/"
+
+instance ToQuery DescribeExportTasks where
+        toQuery = const mempty
+
+-- | /See:/ 'describeExportTasksResponse' smart constructor.
+data DescribeExportTasksResponse = DescribeExportTasksResponse'
+    { _detrsNextToken      :: !(Maybe Text)
+    , _detrsExportTasks    :: !(Maybe [ExportTask])
+    , _detrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeExportTasksResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'detrsNextToken'
+--
+-- * 'detrsExportTasks'
+--
+-- * 'detrsResponseStatus'
+describeExportTasksResponse
+    :: Int -- ^ 'detrsResponseStatus'
+    -> DescribeExportTasksResponse
+describeExportTasksResponse pResponseStatus_ =
+    DescribeExportTasksResponse'
+    { _detrsNextToken = Nothing
+    , _detrsExportTasks = Nothing
+    , _detrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+detrsNextToken :: Lens' DescribeExportTasksResponse (Maybe Text)
+detrsNextToken = lens _detrsNextToken (\ s a -> s{_detrsNextToken = a});
+
+-- | Undocumented member.
+detrsExportTasks :: Lens' DescribeExportTasksResponse [ExportTask]
+detrsExportTasks = lens _detrsExportTasks (\ s a -> s{_detrsExportTasks = a}) . _Default . _Coerce;
+
+-- | The response status code.
+detrsResponseStatus :: Lens' DescribeExportTasksResponse Int
+detrsResponseStatus = lens _detrsResponseStatus (\ s a -> s{_detrsResponseStatus = a});
diff --git a/gen/Network/AWS/CloudWatchLogs/Types.hs b/gen/Network/AWS/CloudWatchLogs/Types.hs
--- a/gen/Network/AWS/CloudWatchLogs/Types.hs
+++ b/gen/Network/AWS/CloudWatchLogs/Types.hs
@@ -22,9 +22,13 @@
     , _OperationAbortedException
     , _ServiceUnavailableException
     , _DataAlreadyAcceptedException
+    , _InvalidOperationException
     , _ResourceNotFoundException
     , _LimitExceededException
 
+    -- * ExportTaskStatusCode
+    , ExportTaskStatusCode (..)
+
     -- * OrderBy
     , OrderBy (..)
 
@@ -38,6 +42,31 @@
     , dDestinationName
     , dRoleARN
 
+    -- * ExportTask
+    , ExportTask
+    , exportTask
+    , etDestinationPrefix
+    , etDestination
+    , etStatus
+    , etTaskName
+    , etTaskId
+    , etTo
+    , etFrom
+    , etLogGroupName
+    , etExecutionInfo
+
+    -- * ExportTaskExecutionInfo
+    , ExportTaskExecutionInfo
+    , exportTaskExecutionInfo
+    , eteiCreationTime
+    , eteiCompletionTime
+
+    -- * ExportTaskStatus
+    , ExportTaskStatus
+    , exportTaskStatus
+    , etsCode
+    , etsMessage
+
     -- * FilteredLogEvent
     , FilteredLogEvent
     , filteredLogEvent
@@ -194,6 +223,11 @@
 _DataAlreadyAcceptedException :: AsError a => Getting (First ServiceError) a ServiceError
 _DataAlreadyAcceptedException =
     _ServiceError . hasCode "DataAlreadyAcceptedException"
+
+-- | Returned if the operation is not valid on the specified resource
+_InvalidOperationException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidOperationException =
+    _ServiceError . hasCode "InvalidOperationException"
 
 -- | Returned if the specified resource does not exist.
 _ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
--- a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
+++ b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
@@ -20,7 +20,10 @@
 import           Network.AWS.CloudWatchLogs.Types.Sum
 import           Network.AWS.Prelude
 
--- | /See:/ 'destination' smart constructor.
+-- | A cross account destination that is the recipient of subscription log
+-- events.
+--
+-- /See:/ 'destination' smart constructor.
 data Destination = Destination'
     { _dTargetARN       :: !(Maybe Text)
     , _dCreationTime    :: !(Maybe Nat)
@@ -57,27 +60,30 @@
     , _dRoleARN = Nothing
     }
 
--- | Undocumented member.
+-- | ARN of the physical target where the log events will be delivered (eg.
+-- ARN of a Kinesis stream).
 dTargetARN :: Lens' Destination (Maybe Text)
 dTargetARN = lens _dTargetARN (\ s a -> s{_dTargetARN = a});
 
--- | Undocumented member.
+-- | A point in time expressed as the number of milliseconds since Jan 1,
+-- 1970 00:00:00 UTC specifying when this destination was created.
 dCreationTime :: Lens' Destination (Maybe Natural)
 dCreationTime = lens _dCreationTime (\ s a -> s{_dCreationTime = a}) . mapping _Nat;
 
--- | Undocumented member.
+-- | ARN of this destination.
 dArn :: Lens' Destination (Maybe Text)
 dArn = lens _dArn (\ s a -> s{_dArn = a});
 
--- | Undocumented member.
+-- | An IAM policy document that governs which AWS accounts can create
+-- subscription filters against this destination.
 dAccessPolicy :: Lens' Destination (Maybe Text)
 dAccessPolicy = lens _dAccessPolicy (\ s a -> s{_dAccessPolicy = a});
 
--- | Undocumented member.
+-- | Name of the destination.
 dDestinationName :: Lens' Destination (Maybe Text)
 dDestinationName = lens _dDestinationName (\ s a -> s{_dDestinationName = a});
 
--- | Undocumented member.
+-- | A role for impersonation for delivering log events to the target.
 dRoleARN :: Lens' Destination (Maybe Text)
 dRoleARN = lens _dRoleARN (\ s a -> s{_dRoleARN = a});
 
@@ -91,6 +97,186 @@
                      <*> (x .:? "accessPolicy")
                      <*> (x .:? "destinationName")
                      <*> (x .:? "roleArn"))
+
+-- | Represents an export task.
+--
+-- /See:/ 'exportTask' smart constructor.
+data ExportTask = ExportTask'
+    { _etDestinationPrefix :: !(Maybe Text)
+    , _etDestination       :: !(Maybe Text)
+    , _etStatus            :: !(Maybe ExportTaskStatus)
+    , _etTaskName          :: !(Maybe Text)
+    , _etTaskId            :: !(Maybe Text)
+    , _etTo                :: !(Maybe Nat)
+    , _etFrom              :: !(Maybe Nat)
+    , _etLogGroupName      :: !(Maybe Text)
+    , _etExecutionInfo     :: !(Maybe ExportTaskExecutionInfo)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etDestinationPrefix'
+--
+-- * 'etDestination'
+--
+-- * 'etStatus'
+--
+-- * 'etTaskName'
+--
+-- * 'etTaskId'
+--
+-- * 'etTo'
+--
+-- * 'etFrom'
+--
+-- * 'etLogGroupName'
+--
+-- * 'etExecutionInfo'
+exportTask
+    :: ExportTask
+exportTask =
+    ExportTask'
+    { _etDestinationPrefix = Nothing
+    , _etDestination = Nothing
+    , _etStatus = Nothing
+    , _etTaskName = Nothing
+    , _etTaskId = Nothing
+    , _etTo = Nothing
+    , _etFrom = Nothing
+    , _etLogGroupName = Nothing
+    , _etExecutionInfo = Nothing
+    }
+
+-- | Prefix that was used as the start of Amazon S3 key for every object
+-- exported.
+etDestinationPrefix :: Lens' ExportTask (Maybe Text)
+etDestinationPrefix = lens _etDestinationPrefix (\ s a -> s{_etDestinationPrefix = a});
+
+-- | Name of Amazon S3 bucket to which the log data was exported.
+etDestination :: Lens' ExportTask (Maybe Text)
+etDestination = lens _etDestination (\ s a -> s{_etDestination = a});
+
+-- | Status of the export task.
+etStatus :: Lens' ExportTask (Maybe ExportTaskStatus)
+etStatus = lens _etStatus (\ s a -> s{_etStatus = a});
+
+-- | The name of the export task.
+etTaskName :: Lens' ExportTask (Maybe Text)
+etTaskName = lens _etTaskName (\ s a -> s{_etTaskName = a});
+
+-- | Id of the export task.
+etTaskId :: Lens' ExportTask (Maybe Text)
+etTaskId = lens _etTaskId (\ s a -> s{_etTaskId = a});
+
+-- | A unix timestamp indicating the end time of the range for the request.
+-- Events with a timestamp later than this time were not exported.
+etTo :: Lens' ExportTask (Maybe Natural)
+etTo = lens _etTo (\ s a -> s{_etTo = a}) . mapping _Nat;
+
+-- | A unix timestamp indicating the start time of the range for the request.
+-- Events with a timestamp prior to this time were not exported.
+etFrom :: Lens' ExportTask (Maybe Natural)
+etFrom = lens _etFrom (\ s a -> s{_etFrom = a}) . mapping _Nat;
+
+-- | The name of the log group from which logs data was exported.
+etLogGroupName :: Lens' ExportTask (Maybe Text)
+etLogGroupName = lens _etLogGroupName (\ s a -> s{_etLogGroupName = a});
+
+-- | Execution info about the export task.
+etExecutionInfo :: Lens' ExportTask (Maybe ExportTaskExecutionInfo)
+etExecutionInfo = lens _etExecutionInfo (\ s a -> s{_etExecutionInfo = a});
+
+instance FromJSON ExportTask where
+        parseJSON
+          = withObject "ExportTask"
+              (\ x ->
+                 ExportTask' <$>
+                   (x .:? "destinationPrefix") <*> (x .:? "destination")
+                     <*> (x .:? "status")
+                     <*> (x .:? "taskName")
+                     <*> (x .:? "taskId")
+                     <*> (x .:? "to")
+                     <*> (x .:? "from")
+                     <*> (x .:? "logGroupName")
+                     <*> (x .:? "executionInfo"))
+
+-- | Represents the status of an export task.
+--
+-- /See:/ 'exportTaskExecutionInfo' smart constructor.
+data ExportTaskExecutionInfo = ExportTaskExecutionInfo'
+    { _eteiCreationTime   :: !(Maybe Nat)
+    , _eteiCompletionTime :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportTaskExecutionInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eteiCreationTime'
+--
+-- * 'eteiCompletionTime'
+exportTaskExecutionInfo
+    :: ExportTaskExecutionInfo
+exportTaskExecutionInfo =
+    ExportTaskExecutionInfo'
+    { _eteiCreationTime = Nothing
+    , _eteiCompletionTime = Nothing
+    }
+
+-- | A point in time when the export task got created.
+eteiCreationTime :: Lens' ExportTaskExecutionInfo (Maybe Natural)
+eteiCreationTime = lens _eteiCreationTime (\ s a -> s{_eteiCreationTime = a}) . mapping _Nat;
+
+-- | A point in time when the export task got completed.
+eteiCompletionTime :: Lens' ExportTaskExecutionInfo (Maybe Natural)
+eteiCompletionTime = lens _eteiCompletionTime (\ s a -> s{_eteiCompletionTime = a}) . mapping _Nat;
+
+instance FromJSON ExportTaskExecutionInfo where
+        parseJSON
+          = withObject "ExportTaskExecutionInfo"
+              (\ x ->
+                 ExportTaskExecutionInfo' <$>
+                   (x .:? "creationTime") <*> (x .:? "completionTime"))
+
+-- | Represents the status of an export task.
+--
+-- /See:/ 'exportTaskStatus' smart constructor.
+data ExportTaskStatus = ExportTaskStatus'
+    { _etsCode    :: !(Maybe ExportTaskStatusCode)
+    , _etsMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportTaskStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etsCode'
+--
+-- * 'etsMessage'
+exportTaskStatus
+    :: ExportTaskStatus
+exportTaskStatus =
+    ExportTaskStatus'
+    { _etsCode = Nothing
+    , _etsMessage = Nothing
+    }
+
+-- | Status code of the export task.
+etsCode :: Lens' ExportTaskStatus (Maybe ExportTaskStatusCode)
+etsCode = lens _etsCode (\ s a -> s{_etsCode = a});
+
+-- | Status message related to the 'code'.
+etsMessage :: Lens' ExportTaskStatus (Maybe Text)
+etsMessage = lens _etsMessage (\ s a -> s{_etsMessage = a});
+
+instance FromJSON ExportTaskStatus where
+        parseJSON
+          = withObject "ExportTaskStatus"
+              (\ x ->
+                 ExportTaskStatus' <$>
+                   (x .:? "code") <*> (x .:? "message"))
 
 -- | Represents a matched event from a 'FilterLogEvents' request.
 --
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs b/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
--- a/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
+++ b/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
@@ -19,6 +19,46 @@
 
 import           Network.AWS.Prelude
 
+data ExportTaskStatusCode
+    = Cancelled
+    | Completed
+    | Failed
+    | Pending
+    | PendingCancel
+    | Running
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ExportTaskStatusCode where
+    parser = takeLowerText >>= \case
+        "cancelled" -> pure Cancelled
+        "completed" -> pure Completed
+        "failed" -> pure Failed
+        "pending" -> pure Pending
+        "pending_cancel" -> pure PendingCancel
+        "running" -> pure Running
+        e -> fromTextError $ "Failure parsing ExportTaskStatusCode from value: '" <> e
+           <> "'. Accepted values: CANCELLED, COMPLETED, FAILED, PENDING, PENDING_CANCEL, RUNNING"
+
+instance ToText ExportTaskStatusCode where
+    toText = \case
+        Cancelled -> "CANCELLED"
+        Completed -> "COMPLETED"
+        Failed -> "FAILED"
+        Pending -> "PENDING"
+        PendingCancel -> "PENDING_CANCEL"
+        Running -> "RUNNING"
+
+instance Hashable     ExportTaskStatusCode
+instance ToByteString ExportTaskStatusCode
+instance ToQuery      ExportTaskStatusCode
+instance ToHeader     ExportTaskStatusCode
+
+instance ToJSON ExportTaskStatusCode where
+    toJSON = toJSONText
+
+instance FromJSON ExportTaskStatusCode where
+    parseJSON = parseJSONText "ExportTaskStatusCode"
+
 data OrderBy
     = LastEventTime
     | LogStreamName
diff --git a/test/Test/AWS/Gen/CloudWatchLogs.hs b/test/Test/AWS/Gen/CloudWatchLogs.hs
--- a/test/Test/AWS/Gen/CloudWatchLogs.hs
+++ b/test/Test/AWS/Gen/CloudWatchLogs.hs
@@ -31,6 +31,9 @@
 --         [ testDescribeDestinations $
 --             describeDestinations
 --
+--         , testCreateExportTask $
+--             createExportTask
+--
 --         , testPutDestination $
 --             putDestination
 --
@@ -58,6 +61,12 @@
 --         , testCreateLogGroup $
 --             createLogGroup
 --
+--         , testDescribeExportTasks $
+--             describeExportTasks
+--
+--         , testCancelExportTask $
+--             cancelExportTask
+--
 --         , testPutSubscriptionFilter $
 --             putSubscriptionFilter
 --
@@ -100,6 +109,9 @@
 --         [ testDescribeDestinationsResponse $
 --             describeDestinationsResponse
 --
+--         , testCreateExportTaskResponse $
+--             createExportTaskResponse
+--
 --         , testPutDestinationResponse $
 --             putDestinationResponse
 --
@@ -127,6 +139,12 @@
 --         , testCreateLogGroupResponse $
 --             createLogGroupResponse
 --
+--         , testDescribeExportTasksResponse $
+--             describeExportTasksResponse
+--
+--         , testCancelExportTaskResponse $
+--             cancelExportTaskResponse
+--
 --         , testPutSubscriptionFilterResponse $
 --             putSubscriptionFilterResponse
 --
@@ -173,6 +191,11 @@
     "DescribeDestinations"
     "fixture/DescribeDestinations.yaml"
 
+testCreateExportTask :: CreateExportTask -> TestTree
+testCreateExportTask = req
+    "CreateExportTask"
+    "fixture/CreateExportTask.yaml"
+
 testPutDestination :: PutDestination -> TestTree
 testPutDestination = req
     "PutDestination"
@@ -218,6 +241,16 @@
     "CreateLogGroup"
     "fixture/CreateLogGroup.yaml"
 
+testDescribeExportTasks :: DescribeExportTasks -> TestTree
+testDescribeExportTasks = req
+    "DescribeExportTasks"
+    "fixture/DescribeExportTasks.yaml"
+
+testCancelExportTask :: CancelExportTask -> TestTree
+testCancelExportTask = req
+    "CancelExportTask"
+    "fixture/CancelExportTask.yaml"
+
 testPutSubscriptionFilter :: PutSubscriptionFilter -> TestTree
 testPutSubscriptionFilter = req
     "PutSubscriptionFilter"
@@ -287,6 +320,13 @@
     cloudWatchLogs
     (Proxy :: Proxy DescribeDestinations)
 
+testCreateExportTaskResponse :: CreateExportTaskResponse -> TestTree
+testCreateExportTaskResponse = res
+    "CreateExportTaskResponse"
+    "fixture/CreateExportTaskResponse.proto"
+    cloudWatchLogs
+    (Proxy :: Proxy CreateExportTask)
+
 testPutDestinationResponse :: PutDestinationResponse -> TestTree
 testPutDestinationResponse = res
     "PutDestinationResponse"
@@ -349,6 +389,20 @@
     "fixture/CreateLogGroupResponse.proto"
     cloudWatchLogs
     (Proxy :: Proxy CreateLogGroup)
+
+testDescribeExportTasksResponse :: DescribeExportTasksResponse -> TestTree
+testDescribeExportTasksResponse = res
+    "DescribeExportTasksResponse"
+    "fixture/DescribeExportTasksResponse.proto"
+    cloudWatchLogs
+    (Proxy :: Proxy DescribeExportTasks)
+
+testCancelExportTaskResponse :: CancelExportTaskResponse -> TestTree
+testCancelExportTaskResponse = res
+    "CancelExportTaskResponse"
+    "fixture/CancelExportTaskResponse.proto"
+    cloudWatchLogs
+    (Proxy :: Proxy CancelExportTask)
 
 testPutSubscriptionFilterResponse :: PutSubscriptionFilterResponse -> TestTree
 testPutSubscriptionFilterResponse = res
