diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.5`
+`1.5.0`
 
 
 ## Description
diff --git a/amazonka-cloudwatch.cabal b/amazonka-cloudwatch.cabal
--- a/amazonka-cloudwatch.cabal
+++ b/amazonka-cloudwatch.cabal
@@ -1,13 +1,13 @@
 name:                  amazonka-cloudwatch
-version:               1.4.5
+version:               1.5.0
 synopsis:              Amazon CloudWatch SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
+license:               MPL-2.0
 license-file:          LICENSE
 author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -29,25 +29,34 @@
     to get started.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-cloudwatch
 
 library
     default-language:  Haskell2010
     hs-source-dirs:    src gen
 
-    ghc-options:       -Wall
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
 
     exposed-modules:
           Network.AWS.CloudWatch
         , Network.AWS.CloudWatch.DeleteAlarms
+        , Network.AWS.CloudWatch.DeleteDashboards
         , Network.AWS.CloudWatch.DescribeAlarmHistory
         , Network.AWS.CloudWatch.DescribeAlarms
         , Network.AWS.CloudWatch.DescribeAlarmsForMetric
         , Network.AWS.CloudWatch.DisableAlarmActions
         , Network.AWS.CloudWatch.EnableAlarmActions
+        , Network.AWS.CloudWatch.GetDashboard
         , Network.AWS.CloudWatch.GetMetricStatistics
+        , Network.AWS.CloudWatch.ListDashboards
         , Network.AWS.CloudWatch.ListMetrics
+        , Network.AWS.CloudWatch.PutDashboard
         , Network.AWS.CloudWatch.PutMetricAlarm
         , Network.AWS.CloudWatch.PutMetricData
         , Network.AWS.CloudWatch.SetAlarmState
@@ -59,7 +68,7 @@
         , Network.AWS.CloudWatch.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.5.*
+          amazonka-core == 1.5.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-cloudwatch-test
@@ -79,9 +88,9 @@
         , Test.AWS.CloudWatch.Internal
 
     build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-cloudwatch == 1.4.5.*
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-cloudwatch
         , base
         , bytestring
         , tasty
diff --git a/fixture/DeleteDashboards.yaml b/fixture/DeleteDashboards.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDashboards.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/monitoring/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  monitoring.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDashboardsResponse.proto b/fixture/DeleteDashboardsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDashboardsResponse.proto
diff --git a/fixture/GetDashboard.yaml b/fixture/GetDashboard.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDashboard.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/monitoring/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  monitoring.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDashboardResponse.proto b/fixture/GetDashboardResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDashboardResponse.proto
diff --git a/fixture/ListDashboards.yaml b/fixture/ListDashboards.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDashboards.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/monitoring/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  monitoring.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDashboardsResponse.proto b/fixture/ListDashboardsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDashboardsResponse.proto
diff --git a/fixture/PutDashboard.yaml b/fixture/PutDashboard.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDashboard.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/monitoring/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  monitoring.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutDashboardResponse.proto b/fixture/PutDashboardResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDashboardResponse.proto
diff --git a/gen/Network/AWS/CloudWatch.hs b/gen/Network/AWS/CloudWatch.hs
--- a/gen/Network/AWS/CloudWatch.hs
+++ b/gen/Network/AWS/CloudWatch.hs
@@ -5,16 +5,16 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Amazon CloudWatch monitors your Amazon Web Services (AWS) resources and the applications you run on AWS in real-time. You can use CloudWatch to collect and track metrics, which are the variables you want to measure for your resources and applications.
+-- Amazon CloudWatch monitors your Amazon Web Services (AWS) resources and the applications you run on AWS in real time. You can use CloudWatch to collect and track metrics, which are the variables you want to measure for your resources and applications.
 --
 --
--- CloudWatch alarms send notifications or automatically make changes to the resources you are monitoring based on rules that you define. For example, you can monitor the CPU usage and disk reads and writes of your Amazon Elastic Compute Cloud (Amazon EC2) instances and then use this data to determine whether you should launch additional instances to handle increased load. You can also use this data to stop under-used instances to save money.
+-- CloudWatch alarms send notifications or automatically change the resources you are monitoring based on rules that you define. For example, you can monitor the CPU usage and disk reads and writes of your Amazon EC2 instances. Then, use this data to determine whether you should launch additional instances to handle increased load. You can also use this data to stop under-used instances to save money.
 --
 -- In addition to monitoring the built-in metrics that come with AWS, you can monitor your own custom metrics. With CloudWatch, you gain system-wide visibility into resource utilization, application performance, and operational health.
 --
@@ -29,12 +29,18 @@
     -- ** LimitExceededFault
     , _LimitExceededFault
 
+    -- ** DashboardNotFoundError
+    , _DashboardNotFoundError
+
     -- ** InvalidNextToken
     , _InvalidNextToken
 
     -- ** InternalServiceFault
     , _InternalServiceFault
 
+    -- ** DashboardInvalidInputError
+    , _DashboardInvalidInputError
+
     -- ** InvalidParameterValueException
     , _InvalidParameterValueException
 
@@ -53,21 +59,33 @@
     -- * Waiters
     -- $waiters
 
+    -- ** AlarmExists
+    , alarmExists
+
     -- * Operations
     -- $operations
 
     -- ** EnableAlarmActions
     , module Network.AWS.CloudWatch.EnableAlarmActions
 
+    -- ** GetDashboard
+    , module Network.AWS.CloudWatch.GetDashboard
+
     -- ** PutMetricData
     , module Network.AWS.CloudWatch.PutMetricData
 
+    -- ** ListDashboards
+    , module Network.AWS.CloudWatch.ListDashboards
+
     -- ** DescribeAlarms (Paginated)
     , module Network.AWS.CloudWatch.DescribeAlarms
 
     -- ** ListMetrics (Paginated)
     , module Network.AWS.CloudWatch.ListMetrics
 
+    -- ** DeleteDashboards
+    , module Network.AWS.CloudWatch.DeleteDashboards
+
     -- ** DeleteAlarms
     , module Network.AWS.CloudWatch.DeleteAlarms
 
@@ -83,6 +101,9 @@
     -- ** DisableAlarmActions
     , module Network.AWS.CloudWatch.DisableAlarmActions
 
+    -- ** PutDashboard
+    , module Network.AWS.CloudWatch.PutDashboard
+
     -- ** PutMetricAlarm
     , module Network.AWS.CloudWatch.PutMetricAlarm
 
@@ -115,6 +136,20 @@
     , ahiHistorySummary
     , ahiTimestamp
 
+    -- ** DashboardEntry
+    , DashboardEntry
+    , dashboardEntry
+    , deSize
+    , deDashboardName
+    , deLastModified
+    , deDashboardARN
+
+    -- ** DashboardValidationMessage
+    , DashboardValidationMessage
+    , dashboardValidationMessage
+    , dvmDataPath
+    , dvmMessage
+
     -- ** Datapoint
     , Datapoint
     , datapoint
@@ -151,6 +186,7 @@
     , metricAlarm
     , maAlarmName
     , maStateUpdatedTimestamp
+    , maTreatMissingData
     , maPeriod
     , maAlarmDescription
     , maEvaluationPeriods
@@ -158,6 +194,7 @@
     , maNamespace
     , maComparisonOperator
     , maOKActions
+    , maEvaluateLowSampleCountPercentile
     , maStateValue
     , maThreshold
     , maAlarmConfigurationUpdatedTimestamp
@@ -176,6 +213,7 @@
     , MetricDatum
     , metricDatum
     , mdValue
+    , mdStorageResolution
     , mdDimensions
     , mdUnit
     , mdTimestamp
@@ -191,19 +229,23 @@
     , ssMaximum
     ) where
 
-import           Network.AWS.CloudWatch.DeleteAlarms
-import           Network.AWS.CloudWatch.DescribeAlarmHistory
-import           Network.AWS.CloudWatch.DescribeAlarms
-import           Network.AWS.CloudWatch.DescribeAlarmsForMetric
-import           Network.AWS.CloudWatch.DisableAlarmActions
-import           Network.AWS.CloudWatch.EnableAlarmActions
-import           Network.AWS.CloudWatch.GetMetricStatistics
-import           Network.AWS.CloudWatch.ListMetrics
-import           Network.AWS.CloudWatch.PutMetricAlarm
-import           Network.AWS.CloudWatch.PutMetricData
-import           Network.AWS.CloudWatch.SetAlarmState
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Waiters
+import Network.AWS.CloudWatch.DeleteAlarms
+import Network.AWS.CloudWatch.DeleteDashboards
+import Network.AWS.CloudWatch.DescribeAlarmHistory
+import Network.AWS.CloudWatch.DescribeAlarms
+import Network.AWS.CloudWatch.DescribeAlarmsForMetric
+import Network.AWS.CloudWatch.DisableAlarmActions
+import Network.AWS.CloudWatch.EnableAlarmActions
+import Network.AWS.CloudWatch.GetDashboard
+import Network.AWS.CloudWatch.GetMetricStatistics
+import Network.AWS.CloudWatch.ListDashboards
+import Network.AWS.CloudWatch.ListMetrics
+import Network.AWS.CloudWatch.PutDashboard
+import Network.AWS.CloudWatch.PutMetricAlarm
+import Network.AWS.CloudWatch.PutMetricData
+import Network.AWS.CloudWatch.SetAlarmState
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Waiters
 
 {- $errors
 Error matchers are designed for use with the functions provided by
diff --git a/gen/Network/AWS/CloudWatch/DeleteAlarms.hs b/gen/Network/AWS/CloudWatch/DeleteAlarms.hs
--- a/gen/Network/AWS/CloudWatch/DeleteAlarms.hs
+++ b/gen/Network/AWS/CloudWatch/DeleteAlarms.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.DeleteAlarms
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,18 +34,19 @@
     , DeleteAlarmsResponse
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteAlarms' smart constructor.
 newtype DeleteAlarms = DeleteAlarms'
-    { _dAlarmNames :: [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dAlarmNames :: [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteAlarms' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -53,11 +54,9 @@
 -- * 'dAlarmNames' - The alarms to be deleted.
 deleteAlarms
     :: DeleteAlarms
-deleteAlarms =
-    DeleteAlarms'
-    { _dAlarmNames = mempty
-    }
+deleteAlarms = DeleteAlarms' {_dAlarmNames = mempty}
 
+
 -- | The alarms to be deleted.
 dAlarmNames :: Lens' DeleteAlarms [Text]
 dAlarmNames = lens _dAlarmNames (\ s a -> s{_dAlarmNames = a}) . _Coerce;
@@ -67,9 +66,9 @@
         request = postQuery cloudWatch
         response = receiveNull DeleteAlarmsResponse'
 
-instance Hashable DeleteAlarms
+instance Hashable DeleteAlarms where
 
-instance NFData DeleteAlarms
+instance NFData DeleteAlarms where
 
 instance ToHeaders DeleteAlarms where
         toHeaders = const mempty
@@ -86,13 +85,15 @@
 
 -- | /See:/ 'deleteAlarmsResponse' smart constructor.
 data DeleteAlarmsResponse =
-    DeleteAlarmsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteAlarmsResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteAlarmsResponse' with the minimum fields required to make a request.
 --
 deleteAlarmsResponse
     :: DeleteAlarmsResponse
 deleteAlarmsResponse = DeleteAlarmsResponse'
 
-instance NFData DeleteAlarmsResponse
+
+instance NFData DeleteAlarmsResponse where
diff --git a/gen/Network/AWS/CloudWatch/DeleteDashboards.hs b/gen/Network/AWS/CloudWatch/DeleteDashboards.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatch/DeleteDashboards.hs
@@ -0,0 +1,114 @@
+{-# 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.CloudWatch.DeleteDashboards
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes all dashboards that you specify. You may specify up to 100 dashboards to delete. If there is an error during this call, no dashboards are deleted.
+--
+--
+module Network.AWS.CloudWatch.DeleteDashboards
+    (
+    -- * Creating a Request
+      deleteDashboards
+    , DeleteDashboards
+    -- * Request Lenses
+    , ddDashboardNames
+
+    -- * Destructuring the Response
+    , deleteDashboardsResponse
+    , DeleteDashboardsResponse
+    -- * Response Lenses
+    , ddrsResponseStatus
+    ) where
+
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteDashboards' smart constructor.
+newtype DeleteDashboards = DeleteDashboards'
+  { _ddDashboardNames :: Maybe [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDashboards' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddDashboardNames' - The dashboards to be deleted.
+deleteDashboards
+    :: DeleteDashboards
+deleteDashboards = DeleteDashboards' {_ddDashboardNames = Nothing}
+
+
+-- | The dashboards to be deleted.
+ddDashboardNames :: Lens' DeleteDashboards [Text]
+ddDashboardNames = lens _ddDashboardNames (\ s a -> s{_ddDashboardNames = a}) . _Default . _Coerce;
+
+instance AWSRequest DeleteDashboards where
+        type Rs DeleteDashboards = DeleteDashboardsResponse
+        request = postQuery cloudWatch
+        response
+          = receiveXMLWrapper "DeleteDashboardsResult"
+              (\ s h x ->
+                 DeleteDashboardsResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteDashboards where
+
+instance NFData DeleteDashboards where
+
+instance ToHeaders DeleteDashboards where
+        toHeaders = const mempty
+
+instance ToPath DeleteDashboards where
+        toPath = const "/"
+
+instance ToQuery DeleteDashboards where
+        toQuery DeleteDashboards'{..}
+          = mconcat
+              ["Action" =: ("DeleteDashboards" :: ByteString),
+               "Version" =: ("2010-08-01" :: ByteString),
+               "DashboardNames" =:
+                 toQuery (toQueryList "member" <$> _ddDashboardNames)]
+
+-- | /See:/ 'deleteDashboardsResponse' smart constructor.
+newtype DeleteDashboardsResponse = DeleteDashboardsResponse'
+  { _ddrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDashboardsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddrsResponseStatus' - -- | The response status code.
+deleteDashboardsResponse
+    :: Int -- ^ 'ddrsResponseStatus'
+    -> DeleteDashboardsResponse
+deleteDashboardsResponse pResponseStatus_ =
+  DeleteDashboardsResponse' {_ddrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ddrsResponseStatus :: Lens' DeleteDashboardsResponse Int
+ddrsResponseStatus = lens _ddrsResponseStatus (\ s a -> s{_ddrsResponseStatus = a});
+
+instance NFData DeleteDashboardsResponse where
diff --git a/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs b/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs
--- a/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs
+++ b/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs
@@ -12,16 +12,16 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.DescribeAlarmHistory
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Retrieves the history for the specified alarm. You can filter the results by date range or item type. If an alarm name is not specified, the histories for all alarms are returned.
 --
 --
--- Note that Amazon CloudWatch retains the history of an alarm even if you delete the alarm.
+-- CloudWatch retains the history of an alarm even if you delete the alarm.
 --
 --
 -- This operation returns paginated results.
@@ -47,24 +47,25 @@
     , dahrsResponseStatus
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'describeAlarmHistory' smart constructor.
 data DescribeAlarmHistory = DescribeAlarmHistory'
-    { _dahAlarmName       :: !(Maybe Text)
-    , _dahHistoryItemType :: !(Maybe HistoryItemType)
-    , _dahEndDate         :: !(Maybe ISO8601)
-    , _dahStartDate       :: !(Maybe ISO8601)
-    , _dahNextToken       :: !(Maybe Text)
-    , _dahMaxRecords      :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dahAlarmName       :: !(Maybe Text)
+  , _dahHistoryItemType :: !(Maybe HistoryItemType)
+  , _dahEndDate         :: !(Maybe ISO8601)
+  , _dahStartDate       :: !(Maybe ISO8601)
+  , _dahNextToken       :: !(Maybe Text)
+  , _dahMaxRecords      :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeAlarmHistory' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -83,15 +84,16 @@
 describeAlarmHistory
     :: DescribeAlarmHistory
 describeAlarmHistory =
-    DescribeAlarmHistory'
-    { _dahAlarmName = Nothing
-    , _dahHistoryItemType = Nothing
-    , _dahEndDate = Nothing
-    , _dahStartDate = Nothing
-    , _dahNextToken = Nothing
-    , _dahMaxRecords = Nothing
-    }
+  DescribeAlarmHistory'
+  { _dahAlarmName = Nothing
+  , _dahHistoryItemType = Nothing
+  , _dahEndDate = Nothing
+  , _dahStartDate = Nothing
+  , _dahNextToken = Nothing
+  , _dahMaxRecords = Nothing
+  }
 
+
 -- | The name of the alarm.
 dahAlarmName :: Lens' DescribeAlarmHistory (Maybe Text)
 dahAlarmName = lens _dahAlarmName (\ s a -> s{_dahAlarmName = a});
@@ -136,9 +138,9 @@
                      <*> (x .@? "NextToken")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeAlarmHistory
+instance Hashable DescribeAlarmHistory where
 
-instance NFData DescribeAlarmHistory
+instance NFData DescribeAlarmHistory where
 
 instance ToHeaders DescribeAlarmHistory where
         toHeaders = const mempty
@@ -160,11 +162,12 @@
 
 -- | /See:/ 'describeAlarmHistoryResponse' smart constructor.
 data DescribeAlarmHistoryResponse = DescribeAlarmHistoryResponse'
-    { _dahrsAlarmHistoryItems :: !(Maybe [AlarmHistoryItem])
-    , _dahrsNextToken         :: !(Maybe Text)
-    , _dahrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dahrsAlarmHistoryItems :: !(Maybe [AlarmHistoryItem])
+  , _dahrsNextToken         :: !(Maybe Text)
+  , _dahrsResponseStatus    :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeAlarmHistoryResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -178,12 +181,13 @@
     :: Int -- ^ 'dahrsResponseStatus'
     -> DescribeAlarmHistoryResponse
 describeAlarmHistoryResponse pResponseStatus_ =
-    DescribeAlarmHistoryResponse'
-    { _dahrsAlarmHistoryItems = Nothing
-    , _dahrsNextToken = Nothing
-    , _dahrsResponseStatus = pResponseStatus_
-    }
+  DescribeAlarmHistoryResponse'
+  { _dahrsAlarmHistoryItems = Nothing
+  , _dahrsNextToken = Nothing
+  , _dahrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The alarm histories, in JSON format.
 dahrsAlarmHistoryItems :: Lens' DescribeAlarmHistoryResponse [AlarmHistoryItem]
 dahrsAlarmHistoryItems = lens _dahrsAlarmHistoryItems (\ s a -> s{_dahrsAlarmHistoryItems = a}) . _Default . _Coerce;
@@ -196,4 +200,4 @@
 dahrsResponseStatus :: Lens' DescribeAlarmHistoryResponse Int
 dahrsResponseStatus = lens _dahrsResponseStatus (\ s a -> s{_dahrsResponseStatus = a});
 
-instance NFData DescribeAlarmHistoryResponse
+instance NFData DescribeAlarmHistoryResponse where
diff --git a/gen/Network/AWS/CloudWatch/DescribeAlarms.hs b/gen/Network/AWS/CloudWatch/DescribeAlarms.hs
--- a/gen/Network/AWS/CloudWatch/DescribeAlarms.hs
+++ b/gen/Network/AWS/CloudWatch/DescribeAlarms.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.DescribeAlarms
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -45,29 +45,30 @@
     , darsResponseStatus
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'describeAlarms' smart constructor.
 data DescribeAlarms = DescribeAlarms'
-    { _daAlarmNamePrefix :: !(Maybe Text)
-    , _daActionPrefix    :: !(Maybe Text)
-    , _daNextToken       :: !(Maybe Text)
-    , _daStateValue      :: !(Maybe StateValue)
-    , _daAlarmNames      :: !(Maybe [Text])
-    , _daMaxRecords      :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _daAlarmNamePrefix :: !(Maybe Text)
+  , _daActionPrefix    :: !(Maybe Text)
+  , _daNextToken       :: !(Maybe Text)
+  , _daStateValue      :: !(Maybe StateValue)
+  , _daAlarmNames      :: !(Maybe [Text])
+  , _daMaxRecords      :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeAlarms' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'daAlarmNamePrefix' - The alarm name prefix. You cannot specify @AlarmNames@ if this parameter is specified.
+-- * 'daAlarmNamePrefix' - The alarm name prefix. If this parameter is specified, you cannot specify @AlarmNames@ .
 --
 -- * 'daActionPrefix' - The action name prefix.
 --
@@ -81,16 +82,17 @@
 describeAlarms
     :: DescribeAlarms
 describeAlarms =
-    DescribeAlarms'
-    { _daAlarmNamePrefix = Nothing
-    , _daActionPrefix = Nothing
-    , _daNextToken = Nothing
-    , _daStateValue = Nothing
-    , _daAlarmNames = Nothing
-    , _daMaxRecords = Nothing
-    }
+  DescribeAlarms'
+  { _daAlarmNamePrefix = Nothing
+  , _daActionPrefix = Nothing
+  , _daNextToken = Nothing
+  , _daStateValue = Nothing
+  , _daAlarmNames = Nothing
+  , _daMaxRecords = Nothing
+  }
 
--- | The alarm name prefix. You cannot specify @AlarmNames@ if this parameter is specified.
+
+-- | The alarm name prefix. If this parameter is specified, you cannot specify @AlarmNames@ .
 daAlarmNamePrefix :: Lens' DescribeAlarms (Maybe Text)
 daAlarmNamePrefix = lens _daAlarmNamePrefix (\ s a -> s{_daAlarmNamePrefix = a});
 
@@ -133,9 +135,9 @@
                      <*> (x .@? "NextToken")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeAlarms
+instance Hashable DescribeAlarms where
 
-instance NFData DescribeAlarms
+instance NFData DescribeAlarms where
 
 instance ToHeaders DescribeAlarms where
         toHeaders = const mempty
@@ -158,11 +160,12 @@
 
 -- | /See:/ 'describeAlarmsResponse' smart constructor.
 data DescribeAlarmsResponse = DescribeAlarmsResponse'
-    { _darsMetricAlarms   :: !(Maybe [MetricAlarm])
-    , _darsNextToken      :: !(Maybe Text)
-    , _darsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _darsMetricAlarms   :: !(Maybe [MetricAlarm])
+  , _darsNextToken      :: !(Maybe Text)
+  , _darsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeAlarmsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -176,12 +179,13 @@
     :: Int -- ^ 'darsResponseStatus'
     -> DescribeAlarmsResponse
 describeAlarmsResponse pResponseStatus_ =
-    DescribeAlarmsResponse'
-    { _darsMetricAlarms = Nothing
-    , _darsNextToken = Nothing
-    , _darsResponseStatus = pResponseStatus_
-    }
+  DescribeAlarmsResponse'
+  { _darsMetricAlarms = Nothing
+  , _darsNextToken = Nothing
+  , _darsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The information for the specified alarms.
 darsMetricAlarms :: Lens' DescribeAlarmsResponse [MetricAlarm]
 darsMetricAlarms = lens _darsMetricAlarms (\ s a -> s{_darsMetricAlarms = a}) . _Default . _Coerce;
@@ -194,4 +198,4 @@
 darsResponseStatus :: Lens' DescribeAlarmsResponse Int
 darsResponseStatus = lens _darsResponseStatus (\ s a -> s{_darsResponseStatus = a});
 
-instance NFData DescribeAlarmsResponse
+instance NFData DescribeAlarmsResponse where
diff --git a/gen/Network/AWS/CloudWatch/DescribeAlarmsForMetric.hs b/gen/Network/AWS/CloudWatch/DescribeAlarmsForMetric.hs
--- a/gen/Network/AWS/CloudWatch/DescribeAlarmsForMetric.hs
+++ b/gen/Network/AWS/CloudWatch/DescribeAlarmsForMetric.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.DescribeAlarmsForMetric
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Retrieves the alarms for the specified metric. Specify a statistic, period, or unit to filter the results.
+-- Retrieves the alarms for the specified metric. To filter the results, specify a statistic, period, or unit.
 --
 --
 module Network.AWS.CloudWatch.DescribeAlarmsForMetric
@@ -43,24 +43,25 @@
     , dafmrsResponseStatus
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'describeAlarmsForMetric' smart constructor.
 data DescribeAlarmsForMetric = DescribeAlarmsForMetric'
-    { _dafmPeriod            :: !(Maybe Nat)
-    , _dafmDimensions        :: !(Maybe [Dimension])
-    , _dafmUnit              :: !(Maybe StandardUnit)
-    , _dafmStatistic         :: !(Maybe Statistic)
-    , _dafmExtendedStatistic :: !(Maybe Text)
-    , _dafmMetricName        :: !Text
-    , _dafmNamespace         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dafmPeriod            :: !(Maybe Nat)
+  , _dafmDimensions        :: !(Maybe [Dimension])
+  , _dafmUnit              :: !(Maybe StandardUnit)
+  , _dafmStatistic         :: !(Maybe Statistic)
+  , _dafmExtendedStatistic :: !(Maybe Text)
+  , _dafmMetricName        :: !Text
+  , _dafmNamespace         :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeAlarmsForMetric' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -83,16 +84,17 @@
     -> Text -- ^ 'dafmNamespace'
     -> DescribeAlarmsForMetric
 describeAlarmsForMetric pMetricName_ pNamespace_ =
-    DescribeAlarmsForMetric'
-    { _dafmPeriod = Nothing
-    , _dafmDimensions = Nothing
-    , _dafmUnit = Nothing
-    , _dafmStatistic = Nothing
-    , _dafmExtendedStatistic = Nothing
-    , _dafmMetricName = pMetricName_
-    , _dafmNamespace = pNamespace_
-    }
+  DescribeAlarmsForMetric'
+  { _dafmPeriod = Nothing
+  , _dafmDimensions = Nothing
+  , _dafmUnit = Nothing
+  , _dafmStatistic = Nothing
+  , _dafmExtendedStatistic = Nothing
+  , _dafmMetricName = pMetricName_
+  , _dafmNamespace = pNamespace_
+  }
 
+
 -- | The period, in seconds, over which the statistic is applied.
 dafmPeriod :: Lens' DescribeAlarmsForMetric (Maybe Natural)
 dafmPeriod = lens _dafmPeriod (\ s a -> s{_dafmPeriod = a}) . mapping _Nat;
@@ -133,9 +135,9 @@
                       may (parseXMLList "member"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeAlarmsForMetric
+instance Hashable DescribeAlarmsForMetric where
 
-instance NFData DescribeAlarmsForMetric
+instance NFData DescribeAlarmsForMetric where
 
 instance ToHeaders DescribeAlarmsForMetric where
         toHeaders = const mempty
@@ -159,10 +161,11 @@
 
 -- | /See:/ 'describeAlarmsForMetricResponse' smart constructor.
 data DescribeAlarmsForMetricResponse = DescribeAlarmsForMetricResponse'
-    { _dafmrsMetricAlarms   :: !(Maybe [MetricAlarm])
-    , _dafmrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dafmrsMetricAlarms   :: !(Maybe [MetricAlarm])
+  , _dafmrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeAlarmsForMetricResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -174,11 +177,10 @@
     :: Int -- ^ 'dafmrsResponseStatus'
     -> DescribeAlarmsForMetricResponse
 describeAlarmsForMetricResponse pResponseStatus_ =
-    DescribeAlarmsForMetricResponse'
-    { _dafmrsMetricAlarms = Nothing
-    , _dafmrsResponseStatus = pResponseStatus_
-    }
+  DescribeAlarmsForMetricResponse'
+  {_dafmrsMetricAlarms = Nothing, _dafmrsResponseStatus = pResponseStatus_}
 
+
 -- | The information for each alarm with the specified metric.
 dafmrsMetricAlarms :: Lens' DescribeAlarmsForMetricResponse [MetricAlarm]
 dafmrsMetricAlarms = lens _dafmrsMetricAlarms (\ s a -> s{_dafmrsMetricAlarms = a}) . _Default . _Coerce;
@@ -187,4 +189,4 @@
 dafmrsResponseStatus :: Lens' DescribeAlarmsForMetricResponse Int
 dafmrsResponseStatus = lens _dafmrsResponseStatus (\ s a -> s{_dafmrsResponseStatus = a});
 
-instance NFData DescribeAlarmsForMetricResponse
+instance NFData DescribeAlarmsForMetricResponse where
diff --git a/gen/Network/AWS/CloudWatch/DisableAlarmActions.hs b/gen/Network/AWS/CloudWatch/DisableAlarmActions.hs
--- a/gen/Network/AWS/CloudWatch/DisableAlarmActions.hs
+++ b/gen/Network/AWS/CloudWatch/DisableAlarmActions.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.DisableAlarmActions
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,18 +34,19 @@
     , DisableAlarmActionsResponse
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'disableAlarmActions' smart constructor.
 newtype DisableAlarmActions = DisableAlarmActions'
-    { _daaAlarmNames :: [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _daaAlarmNames :: [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DisableAlarmActions' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -53,11 +54,9 @@
 -- * 'daaAlarmNames' - The names of the alarms.
 disableAlarmActions
     :: DisableAlarmActions
-disableAlarmActions =
-    DisableAlarmActions'
-    { _daaAlarmNames = mempty
-    }
+disableAlarmActions = DisableAlarmActions' {_daaAlarmNames = mempty}
 
+
 -- | The names of the alarms.
 daaAlarmNames :: Lens' DisableAlarmActions [Text]
 daaAlarmNames = lens _daaAlarmNames (\ s a -> s{_daaAlarmNames = a}) . _Coerce;
@@ -68,9 +67,9 @@
         request = postQuery cloudWatch
         response = receiveNull DisableAlarmActionsResponse'
 
-instance Hashable DisableAlarmActions
+instance Hashable DisableAlarmActions where
 
-instance NFData DisableAlarmActions
+instance NFData DisableAlarmActions where
 
 instance ToHeaders DisableAlarmActions where
         toHeaders = const mempty
@@ -87,13 +86,15 @@
 
 -- | /See:/ 'disableAlarmActionsResponse' smart constructor.
 data DisableAlarmActionsResponse =
-    DisableAlarmActionsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DisableAlarmActionsResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DisableAlarmActionsResponse' with the minimum fields required to make a request.
 --
 disableAlarmActionsResponse
     :: DisableAlarmActionsResponse
 disableAlarmActionsResponse = DisableAlarmActionsResponse'
 
-instance NFData DisableAlarmActionsResponse
+
+instance NFData DisableAlarmActionsResponse where
diff --git a/gen/Network/AWS/CloudWatch/EnableAlarmActions.hs b/gen/Network/AWS/CloudWatch/EnableAlarmActions.hs
--- a/gen/Network/AWS/CloudWatch/EnableAlarmActions.hs
+++ b/gen/Network/AWS/CloudWatch/EnableAlarmActions.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.EnableAlarmActions
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,18 +34,19 @@
     , EnableAlarmActionsResponse
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'enableAlarmActions' smart constructor.
 newtype EnableAlarmActions = EnableAlarmActions'
-    { _eaaAlarmNames :: [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _eaaAlarmNames :: [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'EnableAlarmActions' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -53,11 +54,9 @@
 -- * 'eaaAlarmNames' - The names of the alarms.
 enableAlarmActions
     :: EnableAlarmActions
-enableAlarmActions =
-    EnableAlarmActions'
-    { _eaaAlarmNames = mempty
-    }
+enableAlarmActions = EnableAlarmActions' {_eaaAlarmNames = mempty}
 
+
 -- | The names of the alarms.
 eaaAlarmNames :: Lens' EnableAlarmActions [Text]
 eaaAlarmNames = lens _eaaAlarmNames (\ s a -> s{_eaaAlarmNames = a}) . _Coerce;
@@ -68,9 +67,9 @@
         request = postQuery cloudWatch
         response = receiveNull EnableAlarmActionsResponse'
 
-instance Hashable EnableAlarmActions
+instance Hashable EnableAlarmActions where
 
-instance NFData EnableAlarmActions
+instance NFData EnableAlarmActions where
 
 instance ToHeaders EnableAlarmActions where
         toHeaders = const mempty
@@ -87,13 +86,15 @@
 
 -- | /See:/ 'enableAlarmActionsResponse' smart constructor.
 data EnableAlarmActionsResponse =
-    EnableAlarmActionsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  EnableAlarmActionsResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'EnableAlarmActionsResponse' with the minimum fields required to make a request.
 --
 enableAlarmActionsResponse
     :: EnableAlarmActionsResponse
 enableAlarmActionsResponse = EnableAlarmActionsResponse'
 
-instance NFData EnableAlarmActionsResponse
+
+instance NFData EnableAlarmActionsResponse where
diff --git a/gen/Network/AWS/CloudWatch/GetDashboard.hs b/gen/Network/AWS/CloudWatch/GetDashboard.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatch/GetDashboard.hs
@@ -0,0 +1,147 @@
+{-# 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.CloudWatch.GetDashboard
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the details of the dashboard that you specify.
+--
+--
+-- To copy an existing dashboard, use @GetDashboard@ , and then use the data returned within @DashboardBody@ as the template for the new dashboard when you call @PutDashboard@ to create the copy.
+--
+module Network.AWS.CloudWatch.GetDashboard
+    (
+    -- * Creating a Request
+      getDashboard
+    , GetDashboard
+    -- * Request Lenses
+    , gdDashboardName
+
+    -- * Destructuring the Response
+    , getDashboardResponse
+    , GetDashboardResponse
+    -- * Response Lenses
+    , gdrsDashboardName
+    , gdrsDashboardBody
+    , gdrsDashboardARN
+    , gdrsResponseStatus
+    ) where
+
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDashboard' smart constructor.
+newtype GetDashboard = GetDashboard'
+  { _gdDashboardName :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDashboard' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdDashboardName' - The name of the dashboard to be described.
+getDashboard
+    :: GetDashboard
+getDashboard = GetDashboard' {_gdDashboardName = Nothing}
+
+
+-- | The name of the dashboard to be described.
+gdDashboardName :: Lens' GetDashboard (Maybe Text)
+gdDashboardName = lens _gdDashboardName (\ s a -> s{_gdDashboardName = a});
+
+instance AWSRequest GetDashboard where
+        type Rs GetDashboard = GetDashboardResponse
+        request = postQuery cloudWatch
+        response
+          = receiveXMLWrapper "GetDashboardResult"
+              (\ s h x ->
+                 GetDashboardResponse' <$>
+                   (x .@? "DashboardName") <*> (x .@? "DashboardBody")
+                     <*> (x .@? "DashboardArn")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetDashboard where
+
+instance NFData GetDashboard where
+
+instance ToHeaders GetDashboard where
+        toHeaders = const mempty
+
+instance ToPath GetDashboard where
+        toPath = const "/"
+
+instance ToQuery GetDashboard where
+        toQuery GetDashboard'{..}
+          = mconcat
+              ["Action" =: ("GetDashboard" :: ByteString),
+               "Version" =: ("2010-08-01" :: ByteString),
+               "DashboardName" =: _gdDashboardName]
+
+-- | /See:/ 'getDashboardResponse' smart constructor.
+data GetDashboardResponse = GetDashboardResponse'
+  { _gdrsDashboardName  :: !(Maybe Text)
+  , _gdrsDashboardBody  :: !(Maybe Text)
+  , _gdrsDashboardARN   :: !(Maybe Text)
+  , _gdrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDashboardResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdrsDashboardName' - The name of the dashboard.
+--
+-- * 'gdrsDashboardBody' - The detailed information about the dashboard, including what widgets are included and their location on the dashboard. For more information about the @DashboardBody@ syntax, see 'CloudWatch-Dashboard-Body-Structure' .
+--
+-- * 'gdrsDashboardARN' - The Amazon Resource Name (ARN) of the dashboard.
+--
+-- * 'gdrsResponseStatus' - -- | The response status code.
+getDashboardResponse
+    :: Int -- ^ 'gdrsResponseStatus'
+    -> GetDashboardResponse
+getDashboardResponse pResponseStatus_ =
+  GetDashboardResponse'
+  { _gdrsDashboardName = Nothing
+  , _gdrsDashboardBody = Nothing
+  , _gdrsDashboardARN = Nothing
+  , _gdrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The name of the dashboard.
+gdrsDashboardName :: Lens' GetDashboardResponse (Maybe Text)
+gdrsDashboardName = lens _gdrsDashboardName (\ s a -> s{_gdrsDashboardName = a});
+
+-- | The detailed information about the dashboard, including what widgets are included and their location on the dashboard. For more information about the @DashboardBody@ syntax, see 'CloudWatch-Dashboard-Body-Structure' .
+gdrsDashboardBody :: Lens' GetDashboardResponse (Maybe Text)
+gdrsDashboardBody = lens _gdrsDashboardBody (\ s a -> s{_gdrsDashboardBody = a});
+
+-- | The Amazon Resource Name (ARN) of the dashboard.
+gdrsDashboardARN :: Lens' GetDashboardResponse (Maybe Text)
+gdrsDashboardARN = lens _gdrsDashboardARN (\ s a -> s{_gdrsDashboardARN = a});
+
+-- | -- | The response status code.
+gdrsResponseStatus :: Lens' GetDashboardResponse Int
+gdrsResponseStatus = lens _gdrsResponseStatus (\ s a -> s{_gdrsResponseStatus = a});
+
+instance NFData GetDashboardResponse where
diff --git a/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs b/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs
--- a/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs
+++ b/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs
@@ -12,32 +12,44 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.GetMetricStatistics
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Gets statistics for the specified metric.
 --
 --
+-- The maximum number of data points returned from a single call is 1,440. If you request more than 1,440 data points, CloudWatch returns an error. To reduce the number of data points, you can narrow the specified time range and make multiple requests across adjacent time ranges, or you can increase the specified period. Data points are not returned in chronological order.
+--
+-- CloudWatch aggregates data points based on the length of the period that you specify. For example, if you request statistics with a one-hour period, CloudWatch aggregates all data points with time stamps that fall within each one-hour period. Therefore, the number of values aggregated by CloudWatch is larger than the number of data points returned.
+--
+-- CloudWatch needs raw data points to calculate percentile statistics. If you publish data using a statistic set instead, you can only retrieve percentile statistics for this data if one of the following conditions is true:
+--
+--     * The SampleCount value of the statistic set is 1.
+--
+--     * The Min and the Max values of the statistic set are equal.
+--
+--
+--
 -- Amazon CloudWatch retains metric data as follows:
 --
---     * Data points with a period of 60 seconds (1 minute) are available for 15 days
+--     * Data points with a period of less than 60 seconds are available for 3 hours. These data points are high-resolution metrics and are available only for custom metrics that have been defined with a @StorageResolution@ of 1.
 --
---     * Data points with a period of 300 seconds (5 minute) are available for 63 days
+--     * Data points with a period of 60 seconds (1-minute) are available for 15 days.
 --
---     * Data points with a period of 3600 seconds (1 hour) are available for 455 days (15 months)
+--     * Data points with a period of 300 seconds (5-minute) are available for 63 days.
 --
+--     * Data points with a period of 3600 seconds (1 hour) are available for 455 days (15 months).
 --
 --
--- Note that CloudWatch started retaining 5-minute and 1-hour metric data as of 9 July 2016.
 --
--- The maximum number of data points returned from a single call is 1,440. If you request more than 1,440 data points, Amazon CloudWatch returns an error. To reduce the number of data points, you can narrow the specified time range and make multiple requests across adjacent time ranges, or you can increase the specified period. A period can be as short as one minute (60 seconds). Note that data points are not returned in chronological order.
+-- Data points that are initially published with a shorter period are aggregated together for long-term storage. For example, if you collect data using a period of 1 minute, the data remains available for 15 days with 1-minute resolution. After 15 days, this data is still available, but is aggregated and retrievable only with a resolution of 5 minutes. After 63 days, the data is further aggregated and is available with a resolution of 1 hour.
 --
--- Amazon CloudWatch aggregates data points based on the length of the period that you specify. For example, if you request statistics with a one-hour period, Amazon CloudWatch aggregates all data points with time stamps that fall within each one-hour period. Therefore, the number of values aggregated by CloudWatch is larger than the number of data points returned.
+-- CloudWatch started retaining 5-minute and 1-hour metric data as of July 9, 2016.
 --
--- For a list of metrics and dimensions supported by AWS services, see the <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html Amazon CloudWatch Metrics and Dimensions Reference> in the /Amazon CloudWatch User Guide/ .
+-- For information about metrics and dimensions supported by AWS services, see the <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html Amazon CloudWatch Metrics and Dimensions Reference> in the /Amazon CloudWatch User Guide/ .
 --
 module Network.AWS.CloudWatch.GetMetricStatistics
     (
@@ -64,35 +76,36 @@
     , gmsrsResponseStatus
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getMetricStatistics' smart constructor.
 data GetMetricStatistics = GetMetricStatistics'
-    { _gmsExtendedStatistics :: !(Maybe (List1 Text))
-    , _gmsStatistics         :: !(Maybe (List1 Statistic))
-    , _gmsDimensions         :: !(Maybe [Dimension])
-    , _gmsUnit               :: !(Maybe StandardUnit)
-    , _gmsNamespace          :: !Text
-    , _gmsMetricName         :: !Text
-    , _gmsStartTime          :: !ISO8601
-    , _gmsEndTime            :: !ISO8601
-    , _gmsPeriod             :: !Nat
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gmsExtendedStatistics :: !(Maybe (List1 Text))
+  , _gmsStatistics         :: !(Maybe (List1 Statistic))
+  , _gmsDimensions         :: !(Maybe [Dimension])
+  , _gmsUnit               :: !(Maybe StandardUnit)
+  , _gmsNamespace          :: !Text
+  , _gmsMetricName         :: !Text
+  , _gmsStartTime          :: !ISO8601
+  , _gmsEndTime            :: !ISO8601
+  , _gmsPeriod             :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetMetricStatistics' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gmsExtendedStatistics' - The percentile statistics. Specify values between p0.0 and p100.
+-- * 'gmsExtendedStatistics' - The percentile statistics. Specify values between p0.0 and p100. When calling @GetMetricStatistics@ , you must specify either @Statistics@ or @ExtendedStatistics@ , but not both.
 --
--- * 'gmsStatistics' - The metric statistics, other than percentile. For percentile statistics, use @ExtendedStatistic@ .
+-- * 'gmsStatistics' - The metric statistics, other than percentile. For percentile statistics, use @ExtendedStatistics@ . When calling @GetMetricStatistics@ , you must specify either @Statistics@ or @ExtendedStatistics@ , but not both.
 --
--- * 'gmsDimensions' - The dimensions. CloudWatch treats each unique combination of dimensions as a separate metric. You can't retrieve statistics using combinations of dimensions that were not specially published. You must specify the same dimensions that were used when the metrics were created. For an example, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#dimension-combinations Dimension Combinations> in the /Amazon CloudWatch User Guide/ .
+-- * 'gmsDimensions' - The dimensions. If the metric contains multiple dimensions, you must include a value for each dimension. CloudWatch treats each unique combination of dimensions as a separate metric. If a specific combination of dimensions was not published, you can't retrieve statistics for it. You must specify the same dimensions that were used when the metrics were created. For an example, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#dimension-combinations Dimension Combinations> in the /Amazon CloudWatch User Guide/ . For more information about specifying dimensions, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html Publishing Metrics> in the /Amazon CloudWatch User Guide/ .
 --
 -- * 'gmsUnit' - The unit for a given metric. Metrics may be reported in multiple units. Not supplying a unit results in all units being returned. If the metric only ever reports one unit, specifying a unit has no effect.
 --
@@ -100,11 +113,11 @@
 --
 -- * 'gmsMetricName' - The name of the metric, with or without spaces.
 --
--- * 'gmsStartTime' - The time stamp that determines the first data point to return. Note that start times are evaluated relative to the time that CloudWatch receives the request. The value specified is inclusive; results include data points with the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-03T23:00:00Z). CloudWatch rounds the specified time stamp as follows:     * Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.     * Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.     * Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00.
+-- * 'gmsStartTime' - The time stamp that determines the first data point to return. Start times are evaluated relative to the time that CloudWatch receives the request. The value specified is inclusive; results include data points with the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-03T23:00:00Z). CloudWatch rounds the specified time stamp as follows:     * Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.     * Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.     * Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00. If you set @Period@ to 5, 10, or 30, the start time of your request is rounded down to the nearest time that corresponds to even 5-, 10-, or 30-second divisions of a minute. For example, if you make a query at (HH:mm:ss) 01:05:23 for the previous 10-second period, the start time of your request is rounded down and you receive data from 01:05:10 to 01:05:20. If you make a query at 15:07:17 for the previous 5 minutes of data, using a period of 5 seconds, you receive data timestamped between 15:02:15 and 15:07:15.
 --
--- * 'gmsEndTime' - The time stamp that determines the last data point to return. The value specified is exclusive; results will include data points up to the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-10T23:00:00Z).
+-- * 'gmsEndTime' - The time stamp that determines the last data point to return. The value specified is exclusive; results include data points up to the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-10T23:00:00Z).
 --
--- * 'gmsPeriod' - The granularity, in seconds, of the returned data points. A period can be as short as one minute (60 seconds) and must be a multiple of 60. The default value is 60. If the @StartTime@ parameter specifies a time stamp that is greater than 15 days ago, you must specify the period as follows or no data points in that time range is returned:     * Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).     * Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).
+-- * 'gmsPeriod' - The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a @PutMetricData@ call that includes a @StorageResolution@ of 1 second. If the @StartTime@ parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned:     * Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute).     * Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).     * Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).
 getMetricStatistics
     :: Text -- ^ 'gmsNamespace'
     -> Text -- ^ 'gmsMetricName'
@@ -113,27 +126,28 @@
     -> Natural -- ^ 'gmsPeriod'
     -> GetMetricStatistics
 getMetricStatistics pNamespace_ pMetricName_ pStartTime_ pEndTime_ pPeriod_ =
-    GetMetricStatistics'
-    { _gmsExtendedStatistics = Nothing
-    , _gmsStatistics = Nothing
-    , _gmsDimensions = Nothing
-    , _gmsUnit = Nothing
-    , _gmsNamespace = pNamespace_
-    , _gmsMetricName = pMetricName_
-    , _gmsStartTime = _Time # pStartTime_
-    , _gmsEndTime = _Time # pEndTime_
-    , _gmsPeriod = _Nat # pPeriod_
-    }
+  GetMetricStatistics'
+  { _gmsExtendedStatistics = Nothing
+  , _gmsStatistics = Nothing
+  , _gmsDimensions = Nothing
+  , _gmsUnit = Nothing
+  , _gmsNamespace = pNamespace_
+  , _gmsMetricName = pMetricName_
+  , _gmsStartTime = _Time # pStartTime_
+  , _gmsEndTime = _Time # pEndTime_
+  , _gmsPeriod = _Nat # pPeriod_
+  }
 
--- | The percentile statistics. Specify values between p0.0 and p100.
+
+-- | The percentile statistics. Specify values between p0.0 and p100. When calling @GetMetricStatistics@ , you must specify either @Statistics@ or @ExtendedStatistics@ , but not both.
 gmsExtendedStatistics :: Lens' GetMetricStatistics (Maybe (NonEmpty Text))
 gmsExtendedStatistics = lens _gmsExtendedStatistics (\ s a -> s{_gmsExtendedStatistics = a}) . mapping _List1;
 
--- | The metric statistics, other than percentile. For percentile statistics, use @ExtendedStatistic@ .
+-- | The metric statistics, other than percentile. For percentile statistics, use @ExtendedStatistics@ . When calling @GetMetricStatistics@ , you must specify either @Statistics@ or @ExtendedStatistics@ , but not both.
 gmsStatistics :: Lens' GetMetricStatistics (Maybe (NonEmpty Statistic))
 gmsStatistics = lens _gmsStatistics (\ s a -> s{_gmsStatistics = a}) . mapping _List1;
 
--- | The dimensions. CloudWatch treats each unique combination of dimensions as a separate metric. You can't retrieve statistics using combinations of dimensions that were not specially published. You must specify the same dimensions that were used when the metrics were created. For an example, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#dimension-combinations Dimension Combinations> in the /Amazon CloudWatch User Guide/ .
+-- | The dimensions. If the metric contains multiple dimensions, you must include a value for each dimension. CloudWatch treats each unique combination of dimensions as a separate metric. If a specific combination of dimensions was not published, you can't retrieve statistics for it. You must specify the same dimensions that were used when the metrics were created. For an example, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#dimension-combinations Dimension Combinations> in the /Amazon CloudWatch User Guide/ . For more information about specifying dimensions, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html Publishing Metrics> in the /Amazon CloudWatch User Guide/ .
 gmsDimensions :: Lens' GetMetricStatistics [Dimension]
 gmsDimensions = lens _gmsDimensions (\ s a -> s{_gmsDimensions = a}) . _Default . _Coerce;
 
@@ -149,15 +163,15 @@
 gmsMetricName :: Lens' GetMetricStatistics Text
 gmsMetricName = lens _gmsMetricName (\ s a -> s{_gmsMetricName = a});
 
--- | The time stamp that determines the first data point to return. Note that start times are evaluated relative to the time that CloudWatch receives the request. The value specified is inclusive; results include data points with the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-03T23:00:00Z). CloudWatch rounds the specified time stamp as follows:     * Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.     * Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.     * Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00.
+-- | The time stamp that determines the first data point to return. Start times are evaluated relative to the time that CloudWatch receives the request. The value specified is inclusive; results include data points with the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-03T23:00:00Z). CloudWatch rounds the specified time stamp as follows:     * Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.     * Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.     * Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00. If you set @Period@ to 5, 10, or 30, the start time of your request is rounded down to the nearest time that corresponds to even 5-, 10-, or 30-second divisions of a minute. For example, if you make a query at (HH:mm:ss) 01:05:23 for the previous 10-second period, the start time of your request is rounded down and you receive data from 01:05:10 to 01:05:20. If you make a query at 15:07:17 for the previous 5 minutes of data, using a period of 5 seconds, you receive data timestamped between 15:02:15 and 15:07:15.
 gmsStartTime :: Lens' GetMetricStatistics UTCTime
 gmsStartTime = lens _gmsStartTime (\ s a -> s{_gmsStartTime = a}) . _Time;
 
--- | The time stamp that determines the last data point to return. The value specified is exclusive; results will include data points up to the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-10T23:00:00Z).
+-- | The time stamp that determines the last data point to return. The value specified is exclusive; results include data points up to the specified time stamp. The time stamp must be in ISO 8601 UTC format (for example, 2016-10-10T23:00:00Z).
 gmsEndTime :: Lens' GetMetricStatistics UTCTime
 gmsEndTime = lens _gmsEndTime (\ s a -> s{_gmsEndTime = a}) . _Time;
 
--- | The granularity, in seconds, of the returned data points. A period can be as short as one minute (60 seconds) and must be a multiple of 60. The default value is 60. If the @StartTime@ parameter specifies a time stamp that is greater than 15 days ago, you must specify the period as follows or no data points in that time range is returned:     * Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).     * Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).
+-- | The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a @PutMetricData@ call that includes a @StorageResolution@ of 1 second. If the @StartTime@ parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned:     * Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute).     * Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).     * Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).
 gmsPeriod :: Lens' GetMetricStatistics Natural
 gmsPeriod = lens _gmsPeriod (\ s a -> s{_gmsPeriod = a}) . _Nat;
 
@@ -174,9 +188,9 @@
                      <*> (x .@? "Label")
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetMetricStatistics
+instance Hashable GetMetricStatistics where
 
-instance NFData GetMetricStatistics
+instance NFData GetMetricStatistics where
 
 instance ToHeaders GetMetricStatistics where
         toHeaders = const mempty
@@ -203,11 +217,12 @@
 
 -- | /See:/ 'getMetricStatisticsResponse' smart constructor.
 data GetMetricStatisticsResponse = GetMetricStatisticsResponse'
-    { _gmsrsDatapoints     :: !(Maybe [Datapoint])
-    , _gmsrsLabel          :: !(Maybe Text)
-    , _gmsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gmsrsDatapoints     :: !(Maybe [Datapoint])
+  , _gmsrsLabel          :: !(Maybe Text)
+  , _gmsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetMetricStatisticsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -221,12 +236,13 @@
     :: Int -- ^ 'gmsrsResponseStatus'
     -> GetMetricStatisticsResponse
 getMetricStatisticsResponse pResponseStatus_ =
-    GetMetricStatisticsResponse'
-    { _gmsrsDatapoints = Nothing
-    , _gmsrsLabel = Nothing
-    , _gmsrsResponseStatus = pResponseStatus_
-    }
+  GetMetricStatisticsResponse'
+  { _gmsrsDatapoints = Nothing
+  , _gmsrsLabel = Nothing
+  , _gmsrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The data points for the specified metric.
 gmsrsDatapoints :: Lens' GetMetricStatisticsResponse [Datapoint]
 gmsrsDatapoints = lens _gmsrsDatapoints (\ s a -> s{_gmsrsDatapoints = a}) . _Default . _Coerce;
@@ -239,4 +255,4 @@
 gmsrsResponseStatus :: Lens' GetMetricStatisticsResponse Int
 gmsrsResponseStatus = lens _gmsrsResponseStatus (\ s a -> s{_gmsrsResponseStatus = a});
 
-instance NFData GetMetricStatisticsResponse
+instance NFData GetMetricStatisticsResponse where
diff --git a/gen/Network/AWS/CloudWatch/ListDashboards.hs b/gen/Network/AWS/CloudWatch/ListDashboards.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatch/ListDashboards.hs
@@ -0,0 +1,147 @@
+{-# 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.CloudWatch.ListDashboards
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the dashboards for your account. If you include @DashboardNamePrefix@ , only those dashboards with names starting with the prefix are listed. Otherwise, all dashboards in your account are listed.
+--
+--
+module Network.AWS.CloudWatch.ListDashboards
+    (
+    -- * Creating a Request
+      listDashboards
+    , ListDashboards
+    -- * Request Lenses
+    , ldDashboardNamePrefix
+    , ldNextToken
+
+    -- * Destructuring the Response
+    , listDashboardsResponse
+    , ListDashboardsResponse
+    -- * Response Lenses
+    , ldrsDashboardEntries
+    , ldrsNextToken
+    , ldrsResponseStatus
+    ) where
+
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listDashboards' smart constructor.
+data ListDashboards = ListDashboards'
+  { _ldDashboardNamePrefix :: !(Maybe Text)
+  , _ldNextToken           :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListDashboards' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldDashboardNamePrefix' - If you specify this parameter, only the dashboards with names starting with the specified string are listed. The maximum length is 255, and valid characters are A-Z, a-z, 0-9, ".", "-", and "_".
+--
+-- * 'ldNextToken' - The token returned by a previous call to indicate that there is more data available.
+listDashboards
+    :: ListDashboards
+listDashboards =
+  ListDashboards' {_ldDashboardNamePrefix = Nothing, _ldNextToken = Nothing}
+
+
+-- | If you specify this parameter, only the dashboards with names starting with the specified string are listed. The maximum length is 255, and valid characters are A-Z, a-z, 0-9, ".", "-", and "_".
+ldDashboardNamePrefix :: Lens' ListDashboards (Maybe Text)
+ldDashboardNamePrefix = lens _ldDashboardNamePrefix (\ s a -> s{_ldDashboardNamePrefix = a});
+
+-- | The token returned by a previous call to indicate that there is more data available.
+ldNextToken :: Lens' ListDashboards (Maybe Text)
+ldNextToken = lens _ldNextToken (\ s a -> s{_ldNextToken = a});
+
+instance AWSRequest ListDashboards where
+        type Rs ListDashboards = ListDashboardsResponse
+        request = postQuery cloudWatch
+        response
+          = receiveXMLWrapper "ListDashboardsResult"
+              (\ s h x ->
+                 ListDashboardsResponse' <$>
+                   (x .@? "DashboardEntries" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (x .@? "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListDashboards where
+
+instance NFData ListDashboards where
+
+instance ToHeaders ListDashboards where
+        toHeaders = const mempty
+
+instance ToPath ListDashboards where
+        toPath = const "/"
+
+instance ToQuery ListDashboards where
+        toQuery ListDashboards'{..}
+          = mconcat
+              ["Action" =: ("ListDashboards" :: ByteString),
+               "Version" =: ("2010-08-01" :: ByteString),
+               "DashboardNamePrefix" =: _ldDashboardNamePrefix,
+               "NextToken" =: _ldNextToken]
+
+-- | /See:/ 'listDashboardsResponse' smart constructor.
+data ListDashboardsResponse = ListDashboardsResponse'
+  { _ldrsDashboardEntries :: !(Maybe [DashboardEntry])
+  , _ldrsNextToken        :: !(Maybe Text)
+  , _ldrsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListDashboardsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrsDashboardEntries' - The list of matching dashboards.
+--
+-- * 'ldrsNextToken' - The token that marks the start of the next batch of returned results.
+--
+-- * 'ldrsResponseStatus' - -- | The response status code.
+listDashboardsResponse
+    :: Int -- ^ 'ldrsResponseStatus'
+    -> ListDashboardsResponse
+listDashboardsResponse pResponseStatus_ =
+  ListDashboardsResponse'
+  { _ldrsDashboardEntries = Nothing
+  , _ldrsNextToken = Nothing
+  , _ldrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The list of matching dashboards.
+ldrsDashboardEntries :: Lens' ListDashboardsResponse [DashboardEntry]
+ldrsDashboardEntries = lens _ldrsDashboardEntries (\ s a -> s{_ldrsDashboardEntries = a}) . _Default . _Coerce;
+
+-- | The token that marks the start of the next batch of returned results.
+ldrsNextToken :: Lens' ListDashboardsResponse (Maybe Text)
+ldrsNextToken = lens _ldrsNextToken (\ s a -> s{_ldrsNextToken = a});
+
+-- | -- | The response status code.
+ldrsResponseStatus :: Lens' ListDashboardsResponse Int
+ldrsResponseStatus = lens _ldrsResponseStatus (\ s a -> s{_ldrsResponseStatus = a});
+
+instance NFData ListDashboardsResponse where
diff --git a/gen/Network/AWS/CloudWatch/ListMetrics.hs b/gen/Network/AWS/CloudWatch/ListMetrics.hs
--- a/gen/Network/AWS/CloudWatch/ListMetrics.hs
+++ b/gen/Network/AWS/CloudWatch/ListMetrics.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.ListMetrics
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -47,22 +47,23 @@
     , lmrsResponseStatus
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'listMetrics' smart constructor.
 data ListMetrics = ListMetrics'
-    { _lmMetricName :: !(Maybe Text)
-    , _lmNamespace  :: !(Maybe Text)
-    , _lmNextToken  :: !(Maybe Text)
-    , _lmDimensions :: !(Maybe [DimensionFilter])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lmMetricName :: !(Maybe Text)
+  , _lmNamespace  :: !(Maybe Text)
+  , _lmNextToken  :: !(Maybe Text)
+  , _lmDimensions :: !(Maybe [DimensionFilter])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListMetrics' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -77,13 +78,14 @@
 listMetrics
     :: ListMetrics
 listMetrics =
-    ListMetrics'
-    { _lmMetricName = Nothing
-    , _lmNamespace = Nothing
-    , _lmNextToken = Nothing
-    , _lmDimensions = Nothing
-    }
+  ListMetrics'
+  { _lmMetricName = Nothing
+  , _lmNamespace = Nothing
+  , _lmNextToken = Nothing
+  , _lmDimensions = Nothing
+  }
 
+
 -- | The name of the metric to filter against.
 lmMetricName :: Lens' ListMetrics (Maybe Text)
 lmMetricName = lens _lmMetricName (\ s a -> s{_lmMetricName = a});
@@ -119,9 +121,9 @@
                      <*> (x .@? "NextToken")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListMetrics
+instance Hashable ListMetrics where
 
-instance NFData ListMetrics
+instance NFData ListMetrics where
 
 instance ToHeaders ListMetrics where
         toHeaders = const mempty
@@ -142,11 +144,12 @@
 
 -- | /See:/ 'listMetricsResponse' smart constructor.
 data ListMetricsResponse = ListMetricsResponse'
-    { _lmrsMetrics        :: !(Maybe [Metric])
-    , _lmrsNextToken      :: !(Maybe Text)
-    , _lmrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lmrsMetrics        :: !(Maybe [Metric])
+  , _lmrsNextToken      :: !(Maybe Text)
+  , _lmrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListMetricsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -160,12 +163,13 @@
     :: Int -- ^ 'lmrsResponseStatus'
     -> ListMetricsResponse
 listMetricsResponse pResponseStatus_ =
-    ListMetricsResponse'
-    { _lmrsMetrics = Nothing
-    , _lmrsNextToken = Nothing
-    , _lmrsResponseStatus = pResponseStatus_
-    }
+  ListMetricsResponse'
+  { _lmrsMetrics = Nothing
+  , _lmrsNextToken = Nothing
+  , _lmrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The metrics.
 lmrsMetrics :: Lens' ListMetricsResponse [Metric]
 lmrsMetrics = lens _lmrsMetrics (\ s a -> s{_lmrsMetrics = a}) . _Default . _Coerce;
@@ -178,4 +182,4 @@
 lmrsResponseStatus :: Lens' ListMetricsResponse Int
 lmrsResponseStatus = lens _lmrsResponseStatus (\ s a -> s{_lmrsResponseStatus = a});
 
-instance NFData ListMetricsResponse
+instance NFData ListMetricsResponse where
diff --git a/gen/Network/AWS/CloudWatch/PutDashboard.hs b/gen/Network/AWS/CloudWatch/PutDashboard.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudWatch/PutDashboard.hs
@@ -0,0 +1,143 @@
+{-# 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.CloudWatch.PutDashboard
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a dashboard if it does not already exist, or updates an existing dashboard. If you update a dashboard, the entire contents are replaced with what you specify here.
+--
+--
+-- You can have up to 500 dashboards per account. All dashboards in your account are global, not region-specific.
+--
+-- A simple way to create a dashboard using @PutDashboard@ is to copy an existing dashboard. To copy an existing dashboard using the console, you can load the dashboard and then use the View/edit source command in the Actions menu to display the JSON block for that dashboard. Another way to copy a dashboard is to use @GetDashboard@ , and then use the data returned within @DashboardBody@ as the template for the new dashboard when you call @PutDashboard@ .
+--
+-- When you create a dashboard with @PutDashboard@ , a good practice is to add a text widget at the top of the dashboard with a message that the dashboard was created by script and should not be changed in the console. This message could also point console users to the location of the @DashboardBody@ script or the CloudFormation template used to create the dashboard.
+--
+module Network.AWS.CloudWatch.PutDashboard
+    (
+    -- * Creating a Request
+      putDashboard
+    , PutDashboard
+    -- * Request Lenses
+    , pdDashboardName
+    , pdDashboardBody
+
+    -- * Destructuring the Response
+    , putDashboardResponse
+    , PutDashboardResponse
+    -- * Response Lenses
+    , pdrsDashboardValidationMessages
+    , pdrsResponseStatus
+    ) where
+
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'putDashboard' smart constructor.
+data PutDashboard = PutDashboard'
+  { _pdDashboardName :: !(Maybe Text)
+  , _pdDashboardBody :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutDashboard' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdDashboardName' - The name of the dashboard. If a dashboard with this name already exists, this call modifies that dashboard, replacing its current contents. Otherwise, a new dashboard is created. The maximum length is 255, and valid characters are A-Z, a-z, 0-9, "-", and "_".
+--
+-- * 'pdDashboardBody' - The detailed information about the dashboard in JSON format, including the widgets to include and their location on the dashboard. For more information about the syntax, see 'CloudWatch-Dashboard-Body-Structure' .
+putDashboard
+    :: PutDashboard
+putDashboard =
+  PutDashboard' {_pdDashboardName = Nothing, _pdDashboardBody = Nothing}
+
+
+-- | The name of the dashboard. If a dashboard with this name already exists, this call modifies that dashboard, replacing its current contents. Otherwise, a new dashboard is created. The maximum length is 255, and valid characters are A-Z, a-z, 0-9, "-", and "_".
+pdDashboardName :: Lens' PutDashboard (Maybe Text)
+pdDashboardName = lens _pdDashboardName (\ s a -> s{_pdDashboardName = a});
+
+-- | The detailed information about the dashboard in JSON format, including the widgets to include and their location on the dashboard. For more information about the syntax, see 'CloudWatch-Dashboard-Body-Structure' .
+pdDashboardBody :: Lens' PutDashboard (Maybe Text)
+pdDashboardBody = lens _pdDashboardBody (\ s a -> s{_pdDashboardBody = a});
+
+instance AWSRequest PutDashboard where
+        type Rs PutDashboard = PutDashboardResponse
+        request = postQuery cloudWatch
+        response
+          = receiveXMLWrapper "PutDashboardResult"
+              (\ s h x ->
+                 PutDashboardResponse' <$>
+                   (x .@? "DashboardValidationMessages" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (pure (fromEnum s)))
+
+instance Hashable PutDashboard where
+
+instance NFData PutDashboard where
+
+instance ToHeaders PutDashboard where
+        toHeaders = const mempty
+
+instance ToPath PutDashboard where
+        toPath = const "/"
+
+instance ToQuery PutDashboard where
+        toQuery PutDashboard'{..}
+          = mconcat
+              ["Action" =: ("PutDashboard" :: ByteString),
+               "Version" =: ("2010-08-01" :: ByteString),
+               "DashboardName" =: _pdDashboardName,
+               "DashboardBody" =: _pdDashboardBody]
+
+-- | /See:/ 'putDashboardResponse' smart constructor.
+data PutDashboardResponse = PutDashboardResponse'
+  { _pdrsDashboardValidationMessages :: !(Maybe [DashboardValidationMessage])
+  , _pdrsResponseStatus              :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutDashboardResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdrsDashboardValidationMessages' - If the input for @PutDashboard@ was correct and the dashboard was successfully created or modified, this result is empty. If this result includes only warning messages, then the input was valid enough for the dashboard to be created or modified, but some elements of the dashboard may not render. If this result includes error messages, the input was not valid and the operation failed.
+--
+-- * 'pdrsResponseStatus' - -- | The response status code.
+putDashboardResponse
+    :: Int -- ^ 'pdrsResponseStatus'
+    -> PutDashboardResponse
+putDashboardResponse pResponseStatus_ =
+  PutDashboardResponse'
+  { _pdrsDashboardValidationMessages = Nothing
+  , _pdrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If the input for @PutDashboard@ was correct and the dashboard was successfully created or modified, this result is empty. If this result includes only warning messages, then the input was valid enough for the dashboard to be created or modified, but some elements of the dashboard may not render. If this result includes error messages, the input was not valid and the operation failed.
+pdrsDashboardValidationMessages :: Lens' PutDashboardResponse [DashboardValidationMessage]
+pdrsDashboardValidationMessages = lens _pdrsDashboardValidationMessages (\ s a -> s{_pdrsDashboardValidationMessages = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+pdrsResponseStatus :: Lens' PutDashboardResponse Int
+pdrsResponseStatus = lens _pdrsResponseStatus (\ s a -> s{_pdrsResponseStatus = a});
+
+instance NFData PutDashboardResponse where
diff --git a/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs b/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs
--- a/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs
+++ b/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.PutMetricAlarm
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -25,7 +25,7 @@
 --
 -- When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm.
 --
--- If you are an AWS Identity and Access Management (IAM) user, you must have Amazon EC2 permissions for some operations:
+-- If you are an IAM user, you must have Amazon EC2 permissions for some operations:
 --
 --     * @ec2:DescribeInstanceStatus@ and @ec2:DescribeInstances@ for all alarms on EC2 instance status metrics
 --
@@ -37,13 +37,13 @@
 --
 --
 --
--- If you have read/write permissions for Amazon CloudWatch but not for Amazon EC2, you can still create an alarm, but the stop or terminate actions won't be performed. However, if you are later granted the required permissions, the alarm actions that you created earlier will be performed.
+-- If you have read/write permissions for Amazon CloudWatch but not for Amazon EC2, you can still create an alarm, but the stop or terminate actions are not performed. However, if you are later granted the required permissions, the alarm actions that you created earlier are performed.
 --
--- If you are using an IAM role (for example, an Amazon EC2 instance profile), you cannot stop or terminate the instance using alarm actions. However, you can still see the alarm state and perform any other actions such as Amazon SNS notifications or Auto Scaling policies.
+-- If you are using an IAM role (for example, an EC2 instance profile), you cannot stop or terminate the instance using alarm actions. However, you can still see the alarm state and perform any other actions such as Amazon SNS notifications or Auto Scaling policies.
 --
--- If you are using temporary security credentials granted using the AWS Security Token Service (AWS STS), you cannot stop or terminate an Amazon EC2 instance using alarm actions.
+-- If you are using temporary security credentials granted using AWS STS, you cannot stop or terminate an EC2 instance using alarm actions.
 --
--- Note that you must create at least one stop, terminate, or reboot alarm using the Amazon EC2 or CloudWatch console to create the __EC2ActionsAccess__ IAM role. After this IAM role is created, you can create stop, terminate, or reboot alarms using a command-line interface or an API.
+-- You must create at least one stop, terminate, or reboot alarm using either the Amazon EC2 or CloudWatch consoles to create the __EC2ActionsAccess__ IAM role. After this IAM role is created, you can create stop, terminate, or reboot alarms using a command-line interface or API.
 --
 module Network.AWS.CloudWatch.PutMetricAlarm
     (
@@ -51,8 +51,10 @@
       putMetricAlarm
     , PutMetricAlarm
     -- * Request Lenses
+    , pmaTreatMissingData
     , pmaAlarmDescription
     , pmaOKActions
+    , pmaEvaluateLowSampleCountPercentile
     , pmaActionsEnabled
     , pmaInsufficientDataActions
     , pmaDimensions
@@ -73,41 +75,48 @@
     , PutMetricAlarmResponse
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'putMetricAlarm' smart constructor.
 data PutMetricAlarm = PutMetricAlarm'
-    { _pmaAlarmDescription        :: !(Maybe Text)
-    , _pmaOKActions               :: !(Maybe [Text])
-    , _pmaActionsEnabled          :: !(Maybe Bool)
-    , _pmaInsufficientDataActions :: !(Maybe [Text])
-    , _pmaDimensions              :: !(Maybe [Dimension])
-    , _pmaAlarmActions            :: !(Maybe [Text])
-    , _pmaUnit                    :: !(Maybe StandardUnit)
-    , _pmaStatistic               :: !(Maybe Statistic)
-    , _pmaExtendedStatistic       :: !(Maybe Text)
-    , _pmaAlarmName               :: !Text
-    , _pmaMetricName              :: !Text
-    , _pmaNamespace               :: !Text
-    , _pmaPeriod                  :: !Nat
-    , _pmaEvaluationPeriods       :: !Nat
-    , _pmaThreshold               :: !Double
-    , _pmaComparisonOperator      :: !ComparisonOperator
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pmaTreatMissingData                 :: !(Maybe Text)
+  , _pmaAlarmDescription                 :: !(Maybe Text)
+  , _pmaOKActions                        :: !(Maybe [Text])
+  , _pmaEvaluateLowSampleCountPercentile :: !(Maybe Text)
+  , _pmaActionsEnabled                   :: !(Maybe Bool)
+  , _pmaInsufficientDataActions          :: !(Maybe [Text])
+  , _pmaDimensions                       :: !(Maybe [Dimension])
+  , _pmaAlarmActions                     :: !(Maybe [Text])
+  , _pmaUnit                             :: !(Maybe StandardUnit)
+  , _pmaStatistic                        :: !(Maybe Statistic)
+  , _pmaExtendedStatistic                :: !(Maybe Text)
+  , _pmaAlarmName                        :: !Text
+  , _pmaMetricName                       :: !Text
+  , _pmaNamespace                        :: !Text
+  , _pmaPeriod                           :: !Nat
+  , _pmaEvaluationPeriods                :: !Nat
+  , _pmaThreshold                        :: !Double
+  , _pmaComparisonOperator               :: !ComparisonOperator
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutMetricAlarm' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'pmaTreatMissingData' - Sets how this alarm is to handle missing data points. If @TreatMissingData@ is omitted, the default behavior of @missing@ is used. For more information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data Configuring How CloudWatch Alarms Treats Missing Data> . Valid Values: @breaching | notBreaching | ignore | missing@
+--
 -- * 'pmaAlarmDescription' - The description for the alarm.
 --
 -- * 'pmaOKActions' - The actions to execute when this alarm transitions to an @OK@ state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid Values: arn:aws:automate:/region/ :ec2:stop | arn:aws:automate:/region/ :ec2:terminate | arn:aws:automate:/region/ :ec2:recover Valid Values (for use with IAM roles): arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Stop/1.0 | arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Terminate/1.0 | arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Reboot/1.0
 --
+-- * 'pmaEvaluateLowSampleCountPercentile' - Used only for alarms based on percentiles. If you specify @ignore@ , the alarm state does not change during periods with too few data points to be statistically significant. If you specify @evaluate@ or omit this parameter, the alarm is always evaluated and possibly changes state no matter how many data points are available. For more information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#percentiles-with-low-samples Percentile-Based CloudWatch Alarms and Low Data Samples> . Valid Values: @evaluate | ignore@
+--
 -- * 'pmaActionsEnabled' - Indicates whether actions should be executed during any changes to the alarm state.
 --
 -- * 'pmaInsufficientDataActions' - The actions to execute when this alarm transitions to the @INSUFFICIENT_DATA@ state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid Values: arn:aws:automate:/region/ :ec2:stop | arn:aws:automate:/region/ :ec2:terminate | arn:aws:automate:/region/ :ec2:recover Valid Values (for use with IAM roles): arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Stop/1.0 | arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Terminate/1.0 | arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Reboot/1.0
@@ -116,7 +125,7 @@
 --
 -- * 'pmaAlarmActions' - The actions to execute when this alarm transitions to the @ALARM@ state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid Values: arn:aws:automate:/region/ :ec2:stop | arn:aws:automate:/region/ :ec2:terminate | arn:aws:automate:/region/ :ec2:recover Valid Values (for use with IAM roles): arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Stop/1.0 | arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Terminate/1.0 | arn:aws:swf:us-east-1:{/customer-account/ }:action/actions/AWS_EC2.InstanceId.Reboot/1.0
 --
--- * 'pmaUnit' - The unit of measure for the statistic. For example, the units for the Amazon EC2 NetworkIn metric are Bytes because NetworkIn tracks the number of bytes that an instance receives on all network interfaces. You can also specify a unit when you create a custom metric. Units help provide conceptual meaning to your data. Metric data points that specify a unit of measure, such as Percent, are aggregated separately. If you specify a unit, you must use a unit that is appropriate for the metric. Otherwise, the Amazon CloudWatch alarm can get stuck in the @INSUFFICIENT DATA@ state.
+-- * 'pmaUnit' - The unit of measure for the statistic. For example, the units for the Amazon EC2 NetworkIn metric are Bytes because NetworkIn tracks the number of bytes that an instance receives on all network interfaces. You can also specify a unit when you create a custom metric. Units help provide conceptual meaning to your data. Metric data points that specify a unit of measure, such as Percent, are aggregated separately. If you specify a unit, you must use a unit that is appropriate for the metric. Otherwise, the CloudWatch alarm can get stuck in the @INSUFFICIENT DATA@ state.
 --
 -- * 'pmaStatistic' - The statistic for the metric associated with the alarm, other than percentile. For percentile statistics, use @ExtendedStatistic@ .
 --
@@ -128,9 +137,9 @@
 --
 -- * 'pmaNamespace' - The namespace for the metric associated with the alarm.
 --
--- * 'pmaPeriod' - The period, in seconds, over which the specified statistic is applied.
+-- * 'pmaPeriod' - The period, in seconds, over which the specified statistic is applied. Valid values are 10, 30, and any multiple of 60. Be sure to specify 10 or 30 only for metrics that are stored by a @PutMetricData@ call with a @StorageResolution@ of 1. If you specify a Period of 10 or 30 for a metric that does not have sub-minute resolution, the alarm still attempts to gather data at the period rate that you specify. In this case, it does not receive data for the attempts that do not correspond to a one-minute data resolution, and the alarm may often lapse into INSUFFICENT_DATA status. Specifying 10 or 30 also sets this alarm as a high-resolution alarm, which has a higher charge than other alarms. For more information about pricing, see <https://aws.amazon.com/cloudwatch/pricing/ Amazon CloudWatch Pricing> . An alarm's total current evaluation period can be no longer than one day, so @Period@ multiplied by @EvaluationPeriods@ cannot be more than 86,400 seconds.
 --
--- * 'pmaEvaluationPeriods' - The number of periods over which data is compared to the specified threshold.
+-- * 'pmaEvaluationPeriods' - The number of periods over which data is compared to the specified threshold. An alarm's total current evaluation period can be no longer than one day, so this number multiplied by @Period@ cannot be more than 86,400 seconds.
 --
 -- * 'pmaThreshold' - The value against which the specified statistic is compared.
 --
@@ -145,25 +154,32 @@
     -> ComparisonOperator -- ^ 'pmaComparisonOperator'
     -> PutMetricAlarm
 putMetricAlarm pAlarmName_ pMetricName_ pNamespace_ pPeriod_ pEvaluationPeriods_ pThreshold_ pComparisonOperator_ =
-    PutMetricAlarm'
-    { _pmaAlarmDescription = Nothing
-    , _pmaOKActions = Nothing
-    , _pmaActionsEnabled = Nothing
-    , _pmaInsufficientDataActions = Nothing
-    , _pmaDimensions = Nothing
-    , _pmaAlarmActions = Nothing
-    , _pmaUnit = Nothing
-    , _pmaStatistic = Nothing
-    , _pmaExtendedStatistic = Nothing
-    , _pmaAlarmName = pAlarmName_
-    , _pmaMetricName = pMetricName_
-    , _pmaNamespace = pNamespace_
-    , _pmaPeriod = _Nat # pPeriod_
-    , _pmaEvaluationPeriods = _Nat # pEvaluationPeriods_
-    , _pmaThreshold = pThreshold_
-    , _pmaComparisonOperator = pComparisonOperator_
-    }
+  PutMetricAlarm'
+  { _pmaTreatMissingData = Nothing
+  , _pmaAlarmDescription = Nothing
+  , _pmaOKActions = Nothing
+  , _pmaEvaluateLowSampleCountPercentile = Nothing
+  , _pmaActionsEnabled = Nothing
+  , _pmaInsufficientDataActions = Nothing
+  , _pmaDimensions = Nothing
+  , _pmaAlarmActions = Nothing
+  , _pmaUnit = Nothing
+  , _pmaStatistic = Nothing
+  , _pmaExtendedStatistic = Nothing
+  , _pmaAlarmName = pAlarmName_
+  , _pmaMetricName = pMetricName_
+  , _pmaNamespace = pNamespace_
+  , _pmaPeriod = _Nat # pPeriod_
+  , _pmaEvaluationPeriods = _Nat # pEvaluationPeriods_
+  , _pmaThreshold = pThreshold_
+  , _pmaComparisonOperator = pComparisonOperator_
+  }
 
+
+-- | Sets how this alarm is to handle missing data points. If @TreatMissingData@ is omitted, the default behavior of @missing@ is used. For more information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data Configuring How CloudWatch Alarms Treats Missing Data> . Valid Values: @breaching | notBreaching | ignore | missing@
+pmaTreatMissingData :: Lens' PutMetricAlarm (Maybe Text)
+pmaTreatMissingData = lens _pmaTreatMissingData (\ s a -> s{_pmaTreatMissingData = a});
+
 -- | The description for the alarm.
 pmaAlarmDescription :: Lens' PutMetricAlarm (Maybe Text)
 pmaAlarmDescription = lens _pmaAlarmDescription (\ s a -> s{_pmaAlarmDescription = a});
@@ -172,6 +188,10 @@
 pmaOKActions :: Lens' PutMetricAlarm [Text]
 pmaOKActions = lens _pmaOKActions (\ s a -> s{_pmaOKActions = a}) . _Default . _Coerce;
 
+-- | Used only for alarms based on percentiles. If you specify @ignore@ , the alarm state does not change during periods with too few data points to be statistically significant. If you specify @evaluate@ or omit this parameter, the alarm is always evaluated and possibly changes state no matter how many data points are available. For more information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#percentiles-with-low-samples Percentile-Based CloudWatch Alarms and Low Data Samples> . Valid Values: @evaluate | ignore@
+pmaEvaluateLowSampleCountPercentile :: Lens' PutMetricAlarm (Maybe Text)
+pmaEvaluateLowSampleCountPercentile = lens _pmaEvaluateLowSampleCountPercentile (\ s a -> s{_pmaEvaluateLowSampleCountPercentile = a});
+
 -- | Indicates whether actions should be executed during any changes to the alarm state.
 pmaActionsEnabled :: Lens' PutMetricAlarm (Maybe Bool)
 pmaActionsEnabled = lens _pmaActionsEnabled (\ s a -> s{_pmaActionsEnabled = a});
@@ -188,7 +208,7 @@
 pmaAlarmActions :: Lens' PutMetricAlarm [Text]
 pmaAlarmActions = lens _pmaAlarmActions (\ s a -> s{_pmaAlarmActions = a}) . _Default . _Coerce;
 
--- | The unit of measure for the statistic. For example, the units for the Amazon EC2 NetworkIn metric are Bytes because NetworkIn tracks the number of bytes that an instance receives on all network interfaces. You can also specify a unit when you create a custom metric. Units help provide conceptual meaning to your data. Metric data points that specify a unit of measure, such as Percent, are aggregated separately. If you specify a unit, you must use a unit that is appropriate for the metric. Otherwise, the Amazon CloudWatch alarm can get stuck in the @INSUFFICIENT DATA@ state.
+-- | The unit of measure for the statistic. For example, the units for the Amazon EC2 NetworkIn metric are Bytes because NetworkIn tracks the number of bytes that an instance receives on all network interfaces. You can also specify a unit when you create a custom metric. Units help provide conceptual meaning to your data. Metric data points that specify a unit of measure, such as Percent, are aggregated separately. If you specify a unit, you must use a unit that is appropriate for the metric. Otherwise, the CloudWatch alarm can get stuck in the @INSUFFICIENT DATA@ state.
 pmaUnit :: Lens' PutMetricAlarm (Maybe StandardUnit)
 pmaUnit = lens _pmaUnit (\ s a -> s{_pmaUnit = a});
 
@@ -212,11 +232,11 @@
 pmaNamespace :: Lens' PutMetricAlarm Text
 pmaNamespace = lens _pmaNamespace (\ s a -> s{_pmaNamespace = a});
 
--- | The period, in seconds, over which the specified statistic is applied.
+-- | The period, in seconds, over which the specified statistic is applied. Valid values are 10, 30, and any multiple of 60. Be sure to specify 10 or 30 only for metrics that are stored by a @PutMetricData@ call with a @StorageResolution@ of 1. If you specify a Period of 10 or 30 for a metric that does not have sub-minute resolution, the alarm still attempts to gather data at the period rate that you specify. In this case, it does not receive data for the attempts that do not correspond to a one-minute data resolution, and the alarm may often lapse into INSUFFICENT_DATA status. Specifying 10 or 30 also sets this alarm as a high-resolution alarm, which has a higher charge than other alarms. For more information about pricing, see <https://aws.amazon.com/cloudwatch/pricing/ Amazon CloudWatch Pricing> . An alarm's total current evaluation period can be no longer than one day, so @Period@ multiplied by @EvaluationPeriods@ cannot be more than 86,400 seconds.
 pmaPeriod :: Lens' PutMetricAlarm Natural
 pmaPeriod = lens _pmaPeriod (\ s a -> s{_pmaPeriod = a}) . _Nat;
 
--- | The number of periods over which data is compared to the specified threshold.
+-- | The number of periods over which data is compared to the specified threshold. An alarm's total current evaluation period can be no longer than one day, so this number multiplied by @Period@ cannot be more than 86,400 seconds.
 pmaEvaluationPeriods :: Lens' PutMetricAlarm Natural
 pmaEvaluationPeriods = lens _pmaEvaluationPeriods (\ s a -> s{_pmaEvaluationPeriods = a}) . _Nat;
 
@@ -233,9 +253,9 @@
         request = postQuery cloudWatch
         response = receiveNull PutMetricAlarmResponse'
 
-instance Hashable PutMetricAlarm
+instance Hashable PutMetricAlarm where
 
-instance NFData PutMetricAlarm
+instance NFData PutMetricAlarm where
 
 instance ToHeaders PutMetricAlarm where
         toHeaders = const mempty
@@ -248,9 +268,12 @@
           = mconcat
               ["Action" =: ("PutMetricAlarm" :: ByteString),
                "Version" =: ("2010-08-01" :: ByteString),
+               "TreatMissingData" =: _pmaTreatMissingData,
                "AlarmDescription" =: _pmaAlarmDescription,
                "OKActions" =:
                  toQuery (toQueryList "member" <$> _pmaOKActions),
+               "EvaluateLowSampleCountPercentile" =:
+                 _pmaEvaluateLowSampleCountPercentile,
                "ActionsEnabled" =: _pmaActionsEnabled,
                "InsufficientDataActions" =:
                  toQuery
@@ -271,13 +294,15 @@
 
 -- | /See:/ 'putMetricAlarmResponse' smart constructor.
 data PutMetricAlarmResponse =
-    PutMetricAlarmResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutMetricAlarmResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutMetricAlarmResponse' with the minimum fields required to make a request.
 --
 putMetricAlarmResponse
     :: PutMetricAlarmResponse
 putMetricAlarmResponse = PutMetricAlarmResponse'
 
-instance NFData PutMetricAlarmResponse
+
+instance NFData PutMetricAlarmResponse where
diff --git a/gen/Network/AWS/CloudWatch/PutMetricData.hs b/gen/Network/AWS/CloudWatch/PutMetricData.hs
--- a/gen/Network/AWS/CloudWatch/PutMetricData.hs
+++ b/gen/Network/AWS/CloudWatch/PutMetricData.hs
@@ -12,21 +12,31 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.PutMetricData
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Publishes metric data points to Amazon CloudWatch. Amazon CloudWatch associates the data points with the specified metric. If the specified metric does not exist, Amazon CloudWatch creates the metric. When Amazon CloudWatch creates a metric, it can take up to fifteen minutes for the metric to appear in calls to 'ListMetrics' .
+-- Publishes metric data points to Amazon CloudWatch. CloudWatch associates the data points with the specified metric. If the specified metric does not exist, CloudWatch creates the metric. When CloudWatch creates a metric, it can take up to fifteen minutes for the metric to appear in calls to 'ListMetrics' .
 --
 --
--- Each @PutMetricData@ request is limited to 8 KB in size for HTTP GET requests and is limited to 40 KB in size for HTTP POST requests.
+-- Each @PutMetricData@ request is limited to 40 KB in size for HTTP POST requests.
 --
--- Although the @Value@ parameter accepts numbers of type @Double@ , Amazon CloudWatch rejects values that are either too small or too large. Values must be in the range of 8.515920e-109 to 1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2). In addition, special values (e.g., NaN, +Infinity, -Infinity) are not supported.
+-- Although the @Value@ parameter accepts numbers of type @Double@ , CloudWatch rejects values that are either too small or too large. Values must be in the range of 8.515920e-109 to 1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2). In addition, special values (for example, NaN, +Infinity, -Infinity) are not supported.
 --
+-- You can use up to 10 dimensions per metric to further clarify what data the metric collects. For more information about specifying dimensions, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html Publishing Metrics> in the /Amazon CloudWatch User Guide/ .
+--
 -- Data points with time stamps from 24 hours ago or longer can take at least 48 hours to become available for 'GetMetricStatistics' from the time they are submitted.
 --
+-- CloudWatch needs raw data points to calculate percentile statistics. If you publish data using a statistic set instead, you can only retrieve percentile statistics for this data if one of the following conditions is true:
+--
+--     * The SampleCount value of the statistic set is 1
+--
+--     * The Min and the Max values of the statistic set are equal
+--
+--
+--
 module Network.AWS.CloudWatch.PutMetricData
     (
     -- * Creating a Request
@@ -41,19 +51,20 @@
     , PutMetricDataResponse
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'putMetricData' smart constructor.
 data PutMetricData = PutMetricData'
-    { _pmdNamespace  :: !Text
-    , _pmdMetricData :: ![MetricDatum]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pmdNamespace  :: !Text
+  , _pmdMetricData :: ![MetricDatum]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutMetricData' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -65,11 +76,9 @@
     :: Text -- ^ 'pmdNamespace'
     -> PutMetricData
 putMetricData pNamespace_ =
-    PutMetricData'
-    { _pmdNamespace = pNamespace_
-    , _pmdMetricData = mempty
-    }
+  PutMetricData' {_pmdNamespace = pNamespace_, _pmdMetricData = mempty}
 
+
 -- | The namespace for the metric data. You cannot specify a namespace that begins with "AWS/". Namespaces that begin with "AWS/" are reserved for use by Amazon Web Services products.
 pmdNamespace :: Lens' PutMetricData Text
 pmdNamespace = lens _pmdNamespace (\ s a -> s{_pmdNamespace = a});
@@ -83,9 +92,9 @@
         request = postQuery cloudWatch
         response = receiveNull PutMetricDataResponse'
 
-instance Hashable PutMetricData
+instance Hashable PutMetricData where
 
-instance NFData PutMetricData
+instance NFData PutMetricData where
 
 instance ToHeaders PutMetricData where
         toHeaders = const mempty
@@ -103,13 +112,15 @@
 
 -- | /See:/ 'putMetricDataResponse' smart constructor.
 data PutMetricDataResponse =
-    PutMetricDataResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutMetricDataResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutMetricDataResponse' with the minimum fields required to make a request.
 --
 putMetricDataResponse
     :: PutMetricDataResponse
 putMetricDataResponse = PutMetricDataResponse'
 
-instance NFData PutMetricDataResponse
+
+instance NFData PutMetricDataResponse where
diff --git a/gen/Network/AWS/CloudWatch/SetAlarmState.hs b/gen/Network/AWS/CloudWatch/SetAlarmState.hs
--- a/gen/Network/AWS/CloudWatch/SetAlarmState.hs
+++ b/gen/Network/AWS/CloudWatch/SetAlarmState.hs
@@ -12,13 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.SetAlarmState
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Temporarily sets the state of an alarm for testing purposes. When the updated state differs from the previous value, the action configured for the appropriate state is invoked. For example, if your alarm is configured to send an Amazon SNS message when an alarm is triggered, temporarily changing the alarm state to @ALARM@ sends an Amazon SNS message. The alarm returns to its actual state (often within seconds). Because the alarm state change happens very quickly, it is typically only visible in the alarm's __History__ tab in the Amazon CloudWatch console or through 'DescribeAlarmHistory' .
+-- Temporarily sets the state of an alarm for testing purposes. When the updated state differs from the previous value, the action configured for the appropriate state is invoked. For example, if your alarm is configured to send an Amazon SNS message when an alarm is triggered, temporarily changing the alarm state to @ALARM@ sends an SNS message. The alarm returns to its actual state (often within seconds). Because the alarm state change happens quickly, it is typically only visible in the alarm's __History__ tab in the Amazon CloudWatch console or through 'DescribeAlarmHistory' .
 --
 --
 module Network.AWS.CloudWatch.SetAlarmState
@@ -37,21 +37,22 @@
     , SetAlarmStateResponse
     ) where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.CloudWatch.Types
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'setAlarmState' smart constructor.
 data SetAlarmState = SetAlarmState'
-    { _sasStateReasonData :: !(Maybe Text)
-    , _sasAlarmName       :: !Text
-    , _sasStateValue      :: !StateValue
-    , _sasStateReason     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _sasStateReasonData :: !(Maybe Text)
+  , _sasAlarmName       :: !Text
+  , _sasStateValue      :: !StateValue
+  , _sasStateReason     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetAlarmState' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -69,13 +70,14 @@
     -> Text -- ^ 'sasStateReason'
     -> SetAlarmState
 setAlarmState pAlarmName_ pStateValue_ pStateReason_ =
-    SetAlarmState'
-    { _sasStateReasonData = Nothing
-    , _sasAlarmName = pAlarmName_
-    , _sasStateValue = pStateValue_
-    , _sasStateReason = pStateReason_
-    }
+  SetAlarmState'
+  { _sasStateReasonData = Nothing
+  , _sasAlarmName = pAlarmName_
+  , _sasStateValue = pStateValue_
+  , _sasStateReason = pStateReason_
+  }
 
+
 -- | The reason that this alarm is set to this specific state, in JSON format.
 sasStateReasonData :: Lens' SetAlarmState (Maybe Text)
 sasStateReasonData = lens _sasStateReasonData (\ s a -> s{_sasStateReasonData = a});
@@ -97,9 +99,9 @@
         request = postQuery cloudWatch
         response = receiveNull SetAlarmStateResponse'
 
-instance Hashable SetAlarmState
+instance Hashable SetAlarmState where
 
-instance NFData SetAlarmState
+instance NFData SetAlarmState where
 
 instance ToHeaders SetAlarmState where
         toHeaders = const mempty
@@ -119,13 +121,15 @@
 
 -- | /See:/ 'setAlarmStateResponse' smart constructor.
 data SetAlarmStateResponse =
-    SetAlarmStateResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  SetAlarmStateResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SetAlarmStateResponse' with the minimum fields required to make a request.
 --
 setAlarmStateResponse
     :: SetAlarmStateResponse
 setAlarmStateResponse = SetAlarmStateResponse'
 
-instance NFData SetAlarmStateResponse
+
+instance NFData SetAlarmStateResponse where
diff --git a/gen/Network/AWS/CloudWatch/Types.hs b/gen/Network/AWS/CloudWatch/Types.hs
--- a/gen/Network/AWS/CloudWatch/Types.hs
+++ b/gen/Network/AWS/CloudWatch/Types.hs
@@ -4,9 +4,9 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -17,8 +17,10 @@
 
     -- * Errors
     , _LimitExceededFault
+    , _DashboardNotFoundError
     , _InvalidNextToken
     , _InternalServiceFault
+    , _DashboardInvalidInputError
     , _InvalidParameterValueException
     , _InvalidFormatFault
     , _MissingRequiredParameterException
@@ -49,6 +51,20 @@
     , ahiHistorySummary
     , ahiTimestamp
 
+    -- * DashboardEntry
+    , DashboardEntry
+    , dashboardEntry
+    , deSize
+    , deDashboardName
+    , deLastModified
+    , deDashboardARN
+
+    -- * DashboardValidationMessage
+    , DashboardValidationMessage
+    , dashboardValidationMessage
+    , dvmDataPath
+    , dvmMessage
+
     -- * Datapoint
     , Datapoint
     , datapoint
@@ -85,6 +101,7 @@
     , metricAlarm
     , maAlarmName
     , maStateUpdatedTimestamp
+    , maTreatMissingData
     , maPeriod
     , maAlarmDescription
     , maEvaluationPeriods
@@ -92,6 +109,7 @@
     , maNamespace
     , maComparisonOperator
     , maOKActions
+    , maEvaluateLowSampleCountPercentile
     , maStateValue
     , maThreshold
     , maAlarmConfigurationUpdatedTimestamp
@@ -110,6 +128,7 @@
     , MetricDatum
     , metricDatum
     , mdValue
+    , mdStorageResolution
     , mdDimensions
     , mdUnit
     , mdTimestamp
@@ -125,38 +144,40 @@
     , ssMaximum
     ) where
 
-import           Network.AWS.CloudWatch.Types.Product
-import           Network.AWS.CloudWatch.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Sign.V4
+import Network.AWS.CloudWatch.Types.Product
+import Network.AWS.CloudWatch.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
 
 -- | API version @2010-08-01@ of the Amazon CloudWatch SDK configuration.
 cloudWatch :: Service
 cloudWatch =
-    Service
-    { _svcAbbrev = "CloudWatch"
-    , _svcSigner = v4
-    , _svcPrefix = "monitoring"
-    , _svcVersion = "2010-08-01"
-    , _svcEndpoint = defaultEndpoint cloudWatch
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseXMLError "CloudWatch"
-    , _svcRetry = retry
-    }
+  Service
+  { _svcAbbrev = "CloudWatch"
+  , _svcSigner = v4
+  , _svcPrefix = "monitoring"
+  , _svcVersion = "2010-08-01"
+  , _svcEndpoint = defaultEndpoint cloudWatch
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseXMLError "CloudWatch"
+  , _svcRetry = retry
+  }
   where
     retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
     check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
       | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
+        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"
@@ -165,54 +186,83 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
+
 -- | The quota for alarms for this customer has already been reached.
 --
 --
 _LimitExceededFault :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededFault = _ServiceError . hasStatus 400 . hasCode "LimitExceeded"
+_LimitExceededFault =
+  _MatchServiceError cloudWatch "LimitExceeded" . hasStatus 400
 
+
+-- | The specified dashboard does not exist.
+--
+--
+_DashboardNotFoundError :: AsError a => Getting (First ServiceError) a ServiceError
+_DashboardNotFoundError =
+  _MatchServiceError cloudWatch "ResourceNotFound" . hasStatus 404
+
+
 -- | The next token specified is invalid.
 --
 --
 _InvalidNextToken :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidNextToken = _ServiceError . hasStatus 400 . hasCode "InvalidNextToken"
+_InvalidNextToken =
+  _MatchServiceError cloudWatch "InvalidNextToken" . hasStatus 400
 
+
 -- | Request processing has failed due to some unknown error, exception, or failure.
 --
 --
 _InternalServiceFault :: AsError a => Getting (First ServiceError) a ServiceError
 _InternalServiceFault =
-    _ServiceError . hasStatus 500 . hasCode "InternalServiceError"
+  _MatchServiceError cloudWatch "InternalServiceError" . hasStatus 500
 
+
+-- | Some part of the dashboard data is invalid.
+--
+--
+_DashboardInvalidInputError :: AsError a => Getting (First ServiceError) a ServiceError
+_DashboardInvalidInputError =
+  _MatchServiceError cloudWatch "InvalidParameterInput" . hasStatus 400
+
+
 -- | The value of an input parameter is bad or out-of-range.
 --
 --
 _InvalidParameterValueException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidParameterValueException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidParameterValue"
+  _MatchServiceError cloudWatch "InvalidParameterValue" . hasStatus 400
 
+
 -- | Data was not syntactically valid JSON.
 --
 --
 _InvalidFormatFault :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidFormatFault = _ServiceError . hasStatus 400 . hasCode "InvalidFormat"
+_InvalidFormatFault =
+  _MatchServiceError cloudWatch "InvalidFormat" . hasStatus 400
 
+
 -- | An input parameter that is required is missing.
 --
 --
 _MissingRequiredParameterException :: AsError a => Getting (First ServiceError) a ServiceError
 _MissingRequiredParameterException =
-    _ServiceError . hasStatus 400 . hasCode "MissingParameter"
+  _MatchServiceError cloudWatch "MissingParameter" . hasStatus 400
 
--- | Parameters that cannot be used together were used together.
+
+-- | Parameters were used together that cannot be used together.
 --
 --
 _InvalidParameterCombinationException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidParameterCombinationException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidParameterCombination"
+  _MatchServiceError cloudWatch "InvalidParameterCombination" . hasStatus 400
 
+
 -- | The named resource does not exist.
 --
 --
 _ResourceNotFound :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFound = _ServiceError . hasStatus 404 . hasCode "ResourceNotFound"
+_ResourceNotFound =
+  _MatchServiceError cloudWatch "ResourceNotFound" . hasStatus 404
+
diff --git a/gen/Network/AWS/CloudWatch/Types/Product.hs b/gen/Network/AWS/CloudWatch/Types/Product.hs
--- a/gen/Network/AWS/CloudWatch/Types/Product.hs
+++ b/gen/Network/AWS/CloudWatch/Types/Product.hs
@@ -9,17 +9,17 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.CloudWatch.Types.Product where
 
-import           Network.AWS.CloudWatch.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
+import Network.AWS.CloudWatch.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
 
 -- | Represents the history of a specific alarm.
 --
@@ -27,13 +27,14 @@
 --
 -- /See:/ 'alarmHistoryItem' smart constructor.
 data AlarmHistoryItem = AlarmHistoryItem'
-    { _ahiAlarmName       :: !(Maybe Text)
-    , _ahiHistoryItemType :: !(Maybe HistoryItemType)
-    , _ahiHistoryData     :: !(Maybe Text)
-    , _ahiHistorySummary  :: !(Maybe Text)
-    , _ahiTimestamp       :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ahiAlarmName       :: !(Maybe Text)
+  , _ahiHistoryItemType :: !(Maybe HistoryItemType)
+  , _ahiHistoryData     :: !(Maybe Text)
+  , _ahiHistorySummary  :: !(Maybe Text)
+  , _ahiTimestamp       :: !(Maybe ISO8601)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AlarmHistoryItem' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -50,14 +51,15 @@
 alarmHistoryItem
     :: AlarmHistoryItem
 alarmHistoryItem =
-    AlarmHistoryItem'
-    { _ahiAlarmName = Nothing
-    , _ahiHistoryItemType = Nothing
-    , _ahiHistoryData = Nothing
-    , _ahiHistorySummary = Nothing
-    , _ahiTimestamp = Nothing
-    }
+  AlarmHistoryItem'
+  { _ahiAlarmName = Nothing
+  , _ahiHistoryItemType = Nothing
+  , _ahiHistoryData = Nothing
+  , _ahiHistorySummary = Nothing
+  , _ahiTimestamp = Nothing
+  }
 
+
 -- | The descriptive name for the alarm.
 ahiAlarmName :: Lens' AlarmHistoryItem (Maybe Text)
 ahiAlarmName = lens _ahiAlarmName (\ s a -> s{_ahiAlarmName = a});
@@ -86,26 +88,130 @@
                 <*> (x .@? "HistorySummary")
                 <*> (x .@? "Timestamp")
 
-instance Hashable AlarmHistoryItem
+instance Hashable AlarmHistoryItem where
 
-instance NFData AlarmHistoryItem
+instance NFData AlarmHistoryItem where
 
--- | Encapsulates the statistical data that Amazon CloudWatch computes from metric data.
+-- | Represents a specific dashboard.
 --
 --
 --
+-- /See:/ 'dashboardEntry' smart constructor.
+data DashboardEntry = DashboardEntry'
+  { _deSize          :: !(Maybe Integer)
+  , _deDashboardName :: !(Maybe Text)
+  , _deLastModified  :: !(Maybe ISO8601)
+  , _deDashboardARN  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DashboardEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deSize' - The size of the dashboard, in bytes.
+--
+-- * 'deDashboardName' - The name of the dashboard.
+--
+-- * 'deLastModified' - The time stamp of when the dashboard was last modified, either by an API call or through the console. This number is expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC.
+--
+-- * 'deDashboardARN' - The Amazon Resource Name (ARN) of the dashboard.
+dashboardEntry
+    :: DashboardEntry
+dashboardEntry =
+  DashboardEntry'
+  { _deSize = Nothing
+  , _deDashboardName = Nothing
+  , _deLastModified = Nothing
+  , _deDashboardARN = Nothing
+  }
+
+
+-- | The size of the dashboard, in bytes.
+deSize :: Lens' DashboardEntry (Maybe Integer)
+deSize = lens _deSize (\ s a -> s{_deSize = a});
+
+-- | The name of the dashboard.
+deDashboardName :: Lens' DashboardEntry (Maybe Text)
+deDashboardName = lens _deDashboardName (\ s a -> s{_deDashboardName = a});
+
+-- | The time stamp of when the dashboard was last modified, either by an API call or through the console. This number is expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC.
+deLastModified :: Lens' DashboardEntry (Maybe UTCTime)
+deLastModified = lens _deLastModified (\ s a -> s{_deLastModified = a}) . mapping _Time;
+
+-- | The Amazon Resource Name (ARN) of the dashboard.
+deDashboardARN :: Lens' DashboardEntry (Maybe Text)
+deDashboardARN = lens _deDashboardARN (\ s a -> s{_deDashboardARN = a});
+
+instance FromXML DashboardEntry where
+        parseXML x
+          = DashboardEntry' <$>
+              (x .@? "Size") <*> (x .@? "DashboardName") <*>
+                (x .@? "LastModified")
+                <*> (x .@? "DashboardArn")
+
+instance Hashable DashboardEntry where
+
+instance NFData DashboardEntry where
+
+-- | An error or warning for the operation.
+--
+--
+--
+-- /See:/ 'dashboardValidationMessage' smart constructor.
+data DashboardValidationMessage = DashboardValidationMessage'
+  { _dvmDataPath :: !(Maybe Text)
+  , _dvmMessage  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DashboardValidationMessage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvmDataPath' - The data path related to the message.
+--
+-- * 'dvmMessage' - A message describing the error or warning.
+dashboardValidationMessage
+    :: DashboardValidationMessage
+dashboardValidationMessage =
+  DashboardValidationMessage' {_dvmDataPath = Nothing, _dvmMessage = Nothing}
+
+
+-- | The data path related to the message.
+dvmDataPath :: Lens' DashboardValidationMessage (Maybe Text)
+dvmDataPath = lens _dvmDataPath (\ s a -> s{_dvmDataPath = a});
+
+-- | A message describing the error or warning.
+dvmMessage :: Lens' DashboardValidationMessage (Maybe Text)
+dvmMessage = lens _dvmMessage (\ s a -> s{_dvmMessage = a});
+
+instance FromXML DashboardValidationMessage where
+        parseXML x
+          = DashboardValidationMessage' <$>
+              (x .@? "DataPath") <*> (x .@? "Message")
+
+instance Hashable DashboardValidationMessage where
+
+instance NFData DashboardValidationMessage where
+
+-- | Encapsulates the statistical data that CloudWatch computes from metric data.
+--
+--
+--
 -- /See:/ 'datapoint' smart constructor.
 data Datapoint = Datapoint'
-    { _dSampleCount        :: !(Maybe Double)
-    , _dMaximum            :: !(Maybe Double)
-    , _dAverage            :: !(Maybe Double)
-    , _dMinimum            :: !(Maybe Double)
-    , _dExtendedStatistics :: !(Maybe (Map Text Double))
-    , _dSum                :: !(Maybe Double)
-    , _dUnit               :: !(Maybe StandardUnit)
-    , _dTimestamp          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dSampleCount        :: !(Maybe Double)
+  , _dMaximum            :: !(Maybe Double)
+  , _dAverage            :: !(Maybe Double)
+  , _dMinimum            :: !(Maybe Double)
+  , _dExtendedStatistics :: !(Maybe (Map Text Double))
+  , _dSum                :: !(Maybe Double)
+  , _dUnit               :: !(Maybe StandardUnit)
+  , _dTimestamp          :: !(Maybe ISO8601)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Datapoint' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -128,17 +234,18 @@
 datapoint
     :: Datapoint
 datapoint =
-    Datapoint'
-    { _dSampleCount = Nothing
-    , _dMaximum = Nothing
-    , _dAverage = Nothing
-    , _dMinimum = Nothing
-    , _dExtendedStatistics = Nothing
-    , _dSum = Nothing
-    , _dUnit = Nothing
-    , _dTimestamp = Nothing
-    }
+  Datapoint'
+  { _dSampleCount = Nothing
+  , _dMaximum = Nothing
+  , _dAverage = Nothing
+  , _dMinimum = Nothing
+  , _dExtendedStatistics = Nothing
+  , _dSum = Nothing
+  , _dUnit = Nothing
+  , _dTimestamp = Nothing
+  }
 
+
 -- | The number of metric values that contributed to the aggregate value of this data point.
 dSampleCount :: Lens' Datapoint (Maybe Double)
 dSampleCount = lens _dSampleCount (\ s a -> s{_dSampleCount = a});
@@ -184,9 +291,9 @@
                 <*> (x .@? "Unit")
                 <*> (x .@? "Timestamp")
 
-instance Hashable Datapoint
+instance Hashable Datapoint where
 
-instance NFData Datapoint
+instance NFData Datapoint where
 
 -- | Expands the identity of a metric.
 --
@@ -194,10 +301,11 @@
 --
 -- /See:/ 'dimension' smart constructor.
 data Dimension = Dimension'
-    { _dName  :: !Text
-    , _dValue :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dName  :: !Text
+  , _dValue :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Dimension' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -209,12 +317,9 @@
     :: Text -- ^ 'dName'
     -> Text -- ^ 'dValue'
     -> Dimension
-dimension pName_ pValue_ =
-    Dimension'
-    { _dName = pName_
-    , _dValue = pValue_
-    }
+dimension pName_ pValue_ = Dimension' {_dName = pName_, _dValue = pValue_}
 
+
 -- | The name of the dimension.
 dName :: Lens' Dimension Text
 dName = lens _dName (\ s a -> s{_dName = a});
@@ -227,9 +332,9 @@
         parseXML x
           = Dimension' <$> (x .@ "Name") <*> (x .@ "Value")
 
-instance Hashable Dimension
+instance Hashable Dimension where
 
-instance NFData Dimension
+instance NFData Dimension where
 
 instance ToQuery Dimension where
         toQuery Dimension'{..}
@@ -241,10 +346,11 @@
 --
 -- /See:/ 'dimensionFilter' smart constructor.
 data DimensionFilter = DimensionFilter'
-    { _dfValue :: !(Maybe Text)
-    , _dfName  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dfValue :: !(Maybe Text)
+  , _dfName  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -255,12 +361,9 @@
 dimensionFilter
     :: Text -- ^ 'dfName'
     -> DimensionFilter
-dimensionFilter pName_ =
-    DimensionFilter'
-    { _dfValue = Nothing
-    , _dfName = pName_
-    }
+dimensionFilter pName_ = DimensionFilter' {_dfValue = Nothing, _dfName = pName_}
 
+
 -- | The value of the dimension to be matched.
 dfValue :: Lens' DimensionFilter (Maybe Text)
 dfValue = lens _dfValue (\ s a -> s{_dfValue = a});
@@ -269,9 +372,9 @@
 dfName :: Lens' DimensionFilter Text
 dfName = lens _dfName (\ s a -> s{_dfName = a});
 
-instance Hashable DimensionFilter
+instance Hashable DimensionFilter where
 
-instance NFData DimensionFilter
+instance NFData DimensionFilter where
 
 instance ToQuery DimensionFilter where
         toQuery DimensionFilter'{..}
@@ -283,11 +386,12 @@
 --
 -- /See:/ 'metric' smart constructor.
 data Metric = Metric'
-    { _mMetricName :: !(Maybe Text)
-    , _mNamespace  :: !(Maybe Text)
-    , _mDimensions :: !(Maybe [Dimension])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mMetricName :: !(Maybe Text)
+  , _mNamespace  :: !(Maybe Text)
+  , _mDimensions :: !(Maybe [Dimension])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Metric' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -300,12 +404,10 @@
 metric
     :: Metric
 metric =
-    Metric'
-    { _mMetricName = Nothing
-    , _mNamespace = Nothing
-    , _mDimensions = Nothing
-    }
+  Metric'
+  {_mMetricName = Nothing, _mNamespace = Nothing, _mDimensions = Nothing}
 
+
 -- | The name of the metric.
 mMetricName :: Lens' Metric (Maybe Text)
 mMetricName = lens _mMetricName (\ s a -> s{_mMetricName = a});
@@ -325,9 +427,9 @@
                 (x .@? "Dimensions" .!@ mempty >>=
                    may (parseXMLList "member"))
 
-instance Hashable Metric
+instance Hashable Metric where
 
-instance NFData Metric
+instance NFData Metric where
 
 -- | Represents an alarm.
 --
@@ -335,30 +437,33 @@
 --
 -- /See:/ 'metricAlarm' smart constructor.
 data MetricAlarm = MetricAlarm'
-    { _maAlarmName                          :: !(Maybe Text)
-    , _maStateUpdatedTimestamp              :: !(Maybe ISO8601)
-    , _maPeriod                             :: !(Maybe Nat)
-    , _maAlarmDescription                   :: !(Maybe Text)
-    , _maEvaluationPeriods                  :: !(Maybe Nat)
-    , _maMetricName                         :: !(Maybe Text)
-    , _maNamespace                          :: !(Maybe Text)
-    , _maComparisonOperator                 :: !(Maybe ComparisonOperator)
-    , _maOKActions                          :: !(Maybe [Text])
-    , _maStateValue                         :: !(Maybe StateValue)
-    , _maThreshold                          :: !(Maybe Double)
-    , _maAlarmConfigurationUpdatedTimestamp :: !(Maybe ISO8601)
-    , _maActionsEnabled                     :: !(Maybe Bool)
-    , _maInsufficientDataActions            :: !(Maybe [Text])
-    , _maStateReason                        :: !(Maybe Text)
-    , _maStateReasonData                    :: !(Maybe Text)
-    , _maDimensions                         :: !(Maybe [Dimension])
-    , _maAlarmARN                           :: !(Maybe Text)
-    , _maAlarmActions                       :: !(Maybe [Text])
-    , _maUnit                               :: !(Maybe StandardUnit)
-    , _maStatistic                          :: !(Maybe Statistic)
-    , _maExtendedStatistic                  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _maAlarmName                          :: !(Maybe Text)
+  , _maStateUpdatedTimestamp              :: !(Maybe ISO8601)
+  , _maTreatMissingData                   :: !(Maybe Text)
+  , _maPeriod                             :: !(Maybe Nat)
+  , _maAlarmDescription                   :: !(Maybe Text)
+  , _maEvaluationPeriods                  :: !(Maybe Nat)
+  , _maMetricName                         :: !(Maybe Text)
+  , _maNamespace                          :: !(Maybe Text)
+  , _maComparisonOperator                 :: !(Maybe ComparisonOperator)
+  , _maOKActions                          :: !(Maybe [Text])
+  , _maEvaluateLowSampleCountPercentile   :: !(Maybe Text)
+  , _maStateValue                         :: !(Maybe StateValue)
+  , _maThreshold                          :: !(Maybe Double)
+  , _maAlarmConfigurationUpdatedTimestamp :: !(Maybe ISO8601)
+  , _maActionsEnabled                     :: !(Maybe Bool)
+  , _maInsufficientDataActions            :: !(Maybe [Text])
+  , _maStateReason                        :: !(Maybe Text)
+  , _maStateReasonData                    :: !(Maybe Text)
+  , _maDimensions                         :: !(Maybe [Dimension])
+  , _maAlarmARN                           :: !(Maybe Text)
+  , _maAlarmActions                       :: !(Maybe [Text])
+  , _maUnit                               :: !(Maybe StandardUnit)
+  , _maStatistic                          :: !(Maybe Statistic)
+  , _maExtendedStatistic                  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'MetricAlarm' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -367,6 +472,8 @@
 --
 -- * 'maStateUpdatedTimestamp' - The time stamp of the last update to the alarm state.
 --
+-- * 'maTreatMissingData' - Sets how this alarm is to handle missing data points. If this parameter is omitted, the default behavior of @missing@ is used.
+--
 -- * 'maPeriod' - The period, in seconds, over which the statistic is applied.
 --
 -- * 'maAlarmDescription' - The description of the alarm.
@@ -381,6 +488,8 @@
 --
 -- * 'maOKActions' - The actions to execute when this alarm transitions to the @OK@ state from any other state. Each action is specified as an Amazon Resource Name (ARN).
 --
+-- * 'maEvaluateLowSampleCountPercentile' - Used only for alarms based on percentiles. If @ignore@ , the alarm state does not change during periods with too few data points to be statistically significant. If @evaluate@ or this parameter is not used, the alarm is always evaluated and possibly changes state no matter how many data points are available.
+--
 -- * 'maStateValue' - The state value for the alarm.
 --
 -- * 'maThreshold' - The value to compare with the specified statistic.
@@ -409,31 +518,34 @@
 metricAlarm
     :: MetricAlarm
 metricAlarm =
-    MetricAlarm'
-    { _maAlarmName = Nothing
-    , _maStateUpdatedTimestamp = Nothing
-    , _maPeriod = Nothing
-    , _maAlarmDescription = Nothing
-    , _maEvaluationPeriods = Nothing
-    , _maMetricName = Nothing
-    , _maNamespace = Nothing
-    , _maComparisonOperator = Nothing
-    , _maOKActions = Nothing
-    , _maStateValue = Nothing
-    , _maThreshold = Nothing
-    , _maAlarmConfigurationUpdatedTimestamp = Nothing
-    , _maActionsEnabled = Nothing
-    , _maInsufficientDataActions = Nothing
-    , _maStateReason = Nothing
-    , _maStateReasonData = Nothing
-    , _maDimensions = Nothing
-    , _maAlarmARN = Nothing
-    , _maAlarmActions = Nothing
-    , _maUnit = Nothing
-    , _maStatistic = Nothing
-    , _maExtendedStatistic = Nothing
-    }
+  MetricAlarm'
+  { _maAlarmName = Nothing
+  , _maStateUpdatedTimestamp = Nothing
+  , _maTreatMissingData = Nothing
+  , _maPeriod = Nothing
+  , _maAlarmDescription = Nothing
+  , _maEvaluationPeriods = Nothing
+  , _maMetricName = Nothing
+  , _maNamespace = Nothing
+  , _maComparisonOperator = Nothing
+  , _maOKActions = Nothing
+  , _maEvaluateLowSampleCountPercentile = Nothing
+  , _maStateValue = Nothing
+  , _maThreshold = Nothing
+  , _maAlarmConfigurationUpdatedTimestamp = Nothing
+  , _maActionsEnabled = Nothing
+  , _maInsufficientDataActions = Nothing
+  , _maStateReason = Nothing
+  , _maStateReasonData = Nothing
+  , _maDimensions = Nothing
+  , _maAlarmARN = Nothing
+  , _maAlarmActions = Nothing
+  , _maUnit = Nothing
+  , _maStatistic = Nothing
+  , _maExtendedStatistic = Nothing
+  }
 
+
 -- | The name of the alarm.
 maAlarmName :: Lens' MetricAlarm (Maybe Text)
 maAlarmName = lens _maAlarmName (\ s a -> s{_maAlarmName = a});
@@ -442,6 +554,10 @@
 maStateUpdatedTimestamp :: Lens' MetricAlarm (Maybe UTCTime)
 maStateUpdatedTimestamp = lens _maStateUpdatedTimestamp (\ s a -> s{_maStateUpdatedTimestamp = a}) . mapping _Time;
 
+-- | Sets how this alarm is to handle missing data points. If this parameter is omitted, the default behavior of @missing@ is used.
+maTreatMissingData :: Lens' MetricAlarm (Maybe Text)
+maTreatMissingData = lens _maTreatMissingData (\ s a -> s{_maTreatMissingData = a});
+
 -- | The period, in seconds, over which the statistic is applied.
 maPeriod :: Lens' MetricAlarm (Maybe Natural)
 maPeriod = lens _maPeriod (\ s a -> s{_maPeriod = a}) . mapping _Nat;
@@ -470,6 +586,10 @@
 maOKActions :: Lens' MetricAlarm [Text]
 maOKActions = lens _maOKActions (\ s a -> s{_maOKActions = a}) . _Default . _Coerce;
 
+-- | Used only for alarms based on percentiles. If @ignore@ , the alarm state does not change during periods with too few data points to be statistically significant. If @evaluate@ or this parameter is not used, the alarm is always evaluated and possibly changes state no matter how many data points are available.
+maEvaluateLowSampleCountPercentile :: Lens' MetricAlarm (Maybe Text)
+maEvaluateLowSampleCountPercentile = lens _maEvaluateLowSampleCountPercentile (\ s a -> s{_maEvaluateLowSampleCountPercentile = a});
+
 -- | The state value for the alarm.
 maStateValue :: Lens' MetricAlarm (Maybe StateValue)
 maStateValue = lens _maStateValue (\ s a -> s{_maStateValue = a});
@@ -527,6 +647,7 @@
           = MetricAlarm' <$>
               (x .@? "AlarmName") <*>
                 (x .@? "StateUpdatedTimestamp")
+                <*> (x .@? "TreatMissingData")
                 <*> (x .@? "Period")
                 <*> (x .@? "AlarmDescription")
                 <*> (x .@? "EvaluationPeriods")
@@ -536,6 +657,7 @@
                 <*>
                 (x .@? "OKActions" .!@ mempty >>=
                    may (parseXMLList "member"))
+                <*> (x .@? "EvaluateLowSampleCountPercentile")
                 <*> (x .@? "StateValue")
                 <*> (x .@? "Threshold")
                 <*> (x .@? "AlarmConfigurationUpdatedTimestamp")
@@ -556,9 +678,9 @@
                 <*> (x .@? "Statistic")
                 <*> (x .@? "ExtendedStatistic")
 
-instance Hashable MetricAlarm
+instance Hashable MetricAlarm where
 
-instance NFData MetricAlarm
+instance NFData MetricAlarm where
 
 -- | Encapsulates the information sent to either create a metric or add new values to be aggregated into an existing metric.
 --
@@ -566,20 +688,24 @@
 --
 -- /See:/ 'metricDatum' smart constructor.
 data MetricDatum = MetricDatum'
-    { _mdValue           :: !(Maybe Double)
-    , _mdDimensions      :: !(Maybe [Dimension])
-    , _mdUnit            :: !(Maybe StandardUnit)
-    , _mdTimestamp       :: !(Maybe ISO8601)
-    , _mdStatisticValues :: !(Maybe StatisticSet)
-    , _mdMetricName      :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _mdValue             :: !(Maybe Double)
+  , _mdStorageResolution :: !(Maybe Nat)
+  , _mdDimensions        :: !(Maybe [Dimension])
+  , _mdUnit              :: !(Maybe StandardUnit)
+  , _mdTimestamp         :: !(Maybe ISO8601)
+  , _mdStatisticValues   :: !(Maybe StatisticSet)
+  , _mdMetricName        :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'MetricDatum' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'mdValue' - The value for the metric. Although the parameter accepts numbers of type Double, Amazon CloudWatch rejects values that are either too small or too large. Values must be in the range of 8.515920e-109 to 1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2). In addition, special values (for example, NaN, +Infinity, -Infinity) are not supported.
+-- * 'mdValue' - The value for the metric. Although the parameter accepts numbers of type Double, CloudWatch rejects values that are either too small or too large. Values must be in the range of 8.515920e-109 to 1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2). In addition, special values (for example, NaN, +Infinity, -Infinity) are not supported.
 --
+-- * 'mdStorageResolution' - Valid values are 1 and 60. Setting this to 1 specifies this metric as a high-resolution metric, so that CloudWatch stores the metric with sub-minute resolution down to one second. Setting this to 60 specifies this metric as a regular-resolution metric, which CloudWatch stores at 1-minute resolution. Currently, high resolution is available only for custom metrics. For more information about high-resolution metrics, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html#high-resolution-metrics High-Resolution Metrics> in the /Amazon CloudWatch User Guide/ .  This field is optional, if you do not specify it the default of 60 is used.
+--
 -- * 'mdDimensions' - The dimensions associated with the metric.
 --
 -- * 'mdUnit' - The unit of the metric.
@@ -593,19 +719,25 @@
     :: Text -- ^ 'mdMetricName'
     -> MetricDatum
 metricDatum pMetricName_ =
-    MetricDatum'
-    { _mdValue = Nothing
-    , _mdDimensions = Nothing
-    , _mdUnit = Nothing
-    , _mdTimestamp = Nothing
-    , _mdStatisticValues = Nothing
-    , _mdMetricName = pMetricName_
-    }
+  MetricDatum'
+  { _mdValue = Nothing
+  , _mdStorageResolution = Nothing
+  , _mdDimensions = Nothing
+  , _mdUnit = Nothing
+  , _mdTimestamp = Nothing
+  , _mdStatisticValues = Nothing
+  , _mdMetricName = pMetricName_
+  }
 
--- | The value for the metric. Although the parameter accepts numbers of type Double, Amazon CloudWatch rejects values that are either too small or too large. Values must be in the range of 8.515920e-109 to 1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2). In addition, special values (for example, NaN, +Infinity, -Infinity) are not supported.
+
+-- | The value for the metric. Although the parameter accepts numbers of type Double, CloudWatch rejects values that are either too small or too large. Values must be in the range of 8.515920e-109 to 1.174271e+108 (Base 10) or 2e-360 to 2e360 (Base 2). In addition, special values (for example, NaN, +Infinity, -Infinity) are not supported.
 mdValue :: Lens' MetricDatum (Maybe Double)
 mdValue = lens _mdValue (\ s a -> s{_mdValue = a});
 
+-- | Valid values are 1 and 60. Setting this to 1 specifies this metric as a high-resolution metric, so that CloudWatch stores the metric with sub-minute resolution down to one second. Setting this to 60 specifies this metric as a regular-resolution metric, which CloudWatch stores at 1-minute resolution. Currently, high resolution is available only for custom metrics. For more information about high-resolution metrics, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html#high-resolution-metrics High-Resolution Metrics> in the /Amazon CloudWatch User Guide/ .  This field is optional, if you do not specify it the default of 60 is used.
+mdStorageResolution :: Lens' MetricDatum (Maybe Natural)
+mdStorageResolution = lens _mdStorageResolution (\ s a -> s{_mdStorageResolution = a}) . mapping _Nat;
+
 -- | The dimensions associated with the metric.
 mdDimensions :: Lens' MetricDatum [Dimension]
 mdDimensions = lens _mdDimensions (\ s a -> s{_mdDimensions = a}) . _Default . _Coerce;
@@ -626,14 +758,15 @@
 mdMetricName :: Lens' MetricDatum Text
 mdMetricName = lens _mdMetricName (\ s a -> s{_mdMetricName = a});
 
-instance Hashable MetricDatum
+instance Hashable MetricDatum where
 
-instance NFData MetricDatum
+instance NFData MetricDatum where
 
 instance ToQuery MetricDatum where
         toQuery MetricDatum'{..}
           = mconcat
               ["Value" =: _mdValue,
+               "StorageResolution" =: _mdStorageResolution,
                "Dimensions" =:
                  toQuery (toQueryList "member" <$> _mdDimensions),
                "Unit" =: _mdUnit, "Timestamp" =: _mdTimestamp,
@@ -646,12 +779,13 @@
 --
 -- /See:/ 'statisticSet' smart constructor.
 data StatisticSet = StatisticSet'
-    { _ssSampleCount :: !Double
-    , _ssSum         :: !Double
-    , _ssMinimum     :: !Double
-    , _ssMaximum     :: !Double
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ssSampleCount :: !Double
+  , _ssSum         :: !Double
+  , _ssMinimum     :: !Double
+  , _ssMaximum     :: !Double
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'StatisticSet' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -670,13 +804,14 @@
     -> Double -- ^ 'ssMaximum'
     -> StatisticSet
 statisticSet pSampleCount_ pSum_ pMinimum_ pMaximum_ =
-    StatisticSet'
-    { _ssSampleCount = pSampleCount_
-    , _ssSum = pSum_
-    , _ssMinimum = pMinimum_
-    , _ssMaximum = pMaximum_
-    }
+  StatisticSet'
+  { _ssSampleCount = pSampleCount_
+  , _ssSum = pSum_
+  , _ssMinimum = pMinimum_
+  , _ssMaximum = pMaximum_
+  }
 
+
 -- | The number of samples used for the statistic set.
 ssSampleCount :: Lens' StatisticSet Double
 ssSampleCount = lens _ssSampleCount (\ s a -> s{_ssSampleCount = a});
@@ -693,9 +828,9 @@
 ssMaximum :: Lens' StatisticSet Double
 ssMaximum = lens _ssMaximum (\ s a -> s{_ssMaximum = a});
 
-instance Hashable StatisticSet
+instance Hashable StatisticSet where
 
-instance NFData StatisticSet
+instance NFData StatisticSet where
 
 instance ToQuery StatisticSet where
         toQuery StatisticSet'{..}
diff --git a/gen/Network/AWS/CloudWatch/Types/Sum.hs b/gen/Network/AWS/CloudWatch/Types/Sum.hs
--- a/gen/Network/AWS/CloudWatch/Types/Sum.hs
+++ b/gen/Network/AWS/CloudWatch/Types/Sum.hs
@@ -9,23 +9,24 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.CloudWatch.Types.Sum where
 
-import           Network.AWS.Prelude
+import Network.AWS.Prelude
 
 data ComparisonOperator
-    = GreaterThanOrEqualToThreshold
-    | GreaterThanThreshold
-    | LessThanOrEqualToThreshold
-    | LessThanThreshold
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = GreaterThanOrEqualToThreshold
+  | GreaterThanThreshold
+  | LessThanOrEqualToThreshold
+  | LessThanThreshold
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ComparisonOperator where
     parser = takeLowerText >>= \case
         "greaterthanorequaltothreshold" -> pure GreaterThanOrEqualToThreshold
@@ -52,11 +53,12 @@
     parseXML = parseXMLText "ComparisonOperator"
 
 data HistoryItemType
-    = Action
-    | ConfigurationUpdate
-    | StateUpdate
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Action
+  | ConfigurationUpdate
+  | StateUpdate
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText HistoryItemType where
     parser = takeLowerText >>= \case
         "action" -> pure Action
@@ -81,35 +83,36 @@
     parseXML = parseXMLText "HistoryItemType"
 
 data StandardUnit
-    = Bits
-    | BitsSecond
-    | Bytes
-    | BytesSecond
-    | Count
-    | CountSecond
-    | Gigabits
-    | GigabitsSecond
-    | Gigabytes
-    | GigabytesSecond
-    | Kilobits
-    | KilobitsSecond
-    | Kilobytes
-    | KilobytesSecond
-    | Megabits
-    | MegabitsSecond
-    | Megabytes
-    | MegabytesSecond
-    | Microseconds
-    | Milliseconds
-    | None
-    | Percent
-    | Seconds
-    | Terabits
-    | TerabitsSecond
-    | Terabytes
-    | TerabytesSecond
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Bits
+  | BitsSecond
+  | Bytes
+  | BytesSecond
+  | Count
+  | CountSecond
+  | Gigabits
+  | GigabitsSecond
+  | Gigabytes
+  | GigabytesSecond
+  | Kilobits
+  | KilobitsSecond
+  | Kilobytes
+  | KilobytesSecond
+  | Megabits
+  | MegabitsSecond
+  | Megabytes
+  | MegabytesSecond
+  | Microseconds
+  | Milliseconds
+  | None
+  | Percent
+  | Seconds
+  | Terabits
+  | TerabitsSecond
+  | Terabytes
+  | TerabytesSecond
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText StandardUnit where
     parser = takeLowerText >>= \case
         "bits" -> pure Bits
@@ -182,11 +185,12 @@
     parseXML = parseXMLText "StandardUnit"
 
 data StateValue
-    = Alarm
-    | InsufficientData
-    | OK
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Alarm
+  | InsufficientData
+  | OK
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText StateValue where
     parser = takeLowerText >>= \case
         "alarm" -> pure Alarm
@@ -211,12 +215,13 @@
     parseXML = parseXMLText "StateValue"
 
 data Statistic
-    = Average
-    | Maximum
-    | Minimum
-    | SampleCount
-    | Sum
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Average
+  | Maximum
+  | Minimum
+  | SampleCount
+  | Sum
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
 
 instance FromText Statistic where
     parser = takeLowerText >>= \case
diff --git a/gen/Network/AWS/CloudWatch/Waiters.hs b/gen/Network/AWS/CloudWatch/Waiters.hs
--- a/gen/Network/AWS/CloudWatch/Waiters.hs
+++ b/gen/Network/AWS/CloudWatch/Waiters.hs
@@ -7,15 +7,28 @@
 
 -- |
 -- Module      : Network.AWS.CloudWatch.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.CloudWatch.Waiters where
 
-import           Network.AWS.CloudWatch.Types
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Waiter
+import Network.AWS.CloudWatch.DescribeAlarms
+import Network.AWS.CloudWatch.Types
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Waiter
+
+-- | Polls 'Network.AWS.CloudWatch.DescribeAlarms' every 5 seconds until a successful state is reached. An error is returned after 40 failed checks.
+alarmExists :: Wait DescribeAlarms
+alarmExists =
+  Wait
+  { _waitName = "AlarmExists"
+  , _waitAttempts = 40
+  , _waitDelay = 5
+  , _waitAcceptors =
+      [matchNonEmpty True AcceptSuccess (folding (concatOf darsMetricAlarms))]
+  }
+
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,9 +2,9 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
diff --git a/test/Test/AWS/Gen/CloudWatch.hs b/test/Test/AWS/Gen/CloudWatch.hs
--- a/test/Test/AWS/Gen/CloudWatch.hs
+++ b/test/Test/AWS/Gen/CloudWatch.hs
@@ -5,20 +5,20 @@
 
 -- |
 -- Module      : Test.AWS.Gen.CloudWatch
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Test.AWS.Gen.CloudWatch where
 
 import Data.Proxy
+import Network.AWS.CloudWatch
+import Test.AWS.CloudWatch.Internal
 import Test.AWS.Fixture
 import Test.AWS.Prelude
 import Test.Tasty
-import Network.AWS.CloudWatch
-import Test.AWS.CloudWatch.Internal
 
 -- Auto-generated: the actual test selection needs to be manually placed into
 -- the top-level so that real test data can be incrementally added.
@@ -31,15 +31,24 @@
 --         [ requestEnableAlarmActions $
 --             enableAlarmActions
 --
+--         , requestGetDashboard $
+--             getDashboard
+--
 --         , requestPutMetricData $
 --             putMetricData
 --
+--         , requestListDashboards $
+--             listDashboards
+--
 --         , requestDescribeAlarms $
 --             describeAlarms
 --
 --         , requestListMetrics $
 --             listMetrics
 --
+--         , requestDeleteDashboards $
+--             deleteDashboards
+--
 --         , requestDeleteAlarms $
 --             deleteAlarms
 --
@@ -55,6 +64,9 @@
 --         , requestDisableAlarmActions $
 --             disableAlarmActions
 --
+--         , requestPutDashboard $
+--             putDashboard
+--
 --         , requestPutMetricAlarm $
 --             putMetricAlarm
 --
@@ -67,15 +79,24 @@
 --         [ responseEnableAlarmActions $
 --             enableAlarmActionsResponse
 --
+--         , responseGetDashboard $
+--             getDashboardResponse
+--
 --         , responsePutMetricData $
 --             putMetricDataResponse
 --
+--         , responseListDashboards $
+--             listDashboardsResponse
+--
 --         , responseDescribeAlarms $
 --             describeAlarmsResponse
 --
 --         , responseListMetrics $
 --             listMetricsResponse
 --
+--         , responseDeleteDashboards $
+--             deleteDashboardsResponse
+--
 --         , responseDeleteAlarms $
 --             deleteAlarmsResponse
 --
@@ -91,6 +112,9 @@
 --         , responseDisableAlarmActions $
 --             disableAlarmActionsResponse
 --
+--         , responsePutDashboard $
+--             putDashboardResponse
+--
 --         , responsePutMetricAlarm $
 --             putMetricAlarmResponse
 --
@@ -107,11 +131,21 @@
     "EnableAlarmActions"
     "fixture/EnableAlarmActions.yaml"
 
+requestGetDashboard :: GetDashboard -> TestTree
+requestGetDashboard = req
+    "GetDashboard"
+    "fixture/GetDashboard.yaml"
+
 requestPutMetricData :: PutMetricData -> TestTree
 requestPutMetricData = req
     "PutMetricData"
     "fixture/PutMetricData.yaml"
 
+requestListDashboards :: ListDashboards -> TestTree
+requestListDashboards = req
+    "ListDashboards"
+    "fixture/ListDashboards.yaml"
+
 requestDescribeAlarms :: DescribeAlarms -> TestTree
 requestDescribeAlarms = req
     "DescribeAlarms"
@@ -122,6 +156,11 @@
     "ListMetrics"
     "fixture/ListMetrics.yaml"
 
+requestDeleteDashboards :: DeleteDashboards -> TestTree
+requestDeleteDashboards = req
+    "DeleteDashboards"
+    "fixture/DeleteDashboards.yaml"
+
 requestDeleteAlarms :: DeleteAlarms -> TestTree
 requestDeleteAlarms = req
     "DeleteAlarms"
@@ -147,6 +186,11 @@
     "DisableAlarmActions"
     "fixture/DisableAlarmActions.yaml"
 
+requestPutDashboard :: PutDashboard -> TestTree
+requestPutDashboard = req
+    "PutDashboard"
+    "fixture/PutDashboard.yaml"
+
 requestPutMetricAlarm :: PutMetricAlarm -> TestTree
 requestPutMetricAlarm = req
     "PutMetricAlarm"
@@ -166,6 +210,13 @@
     cloudWatch
     (Proxy :: Proxy EnableAlarmActions)
 
+responseGetDashboard :: GetDashboardResponse -> TestTree
+responseGetDashboard = res
+    "GetDashboardResponse"
+    "fixture/GetDashboardResponse.proto"
+    cloudWatch
+    (Proxy :: Proxy GetDashboard)
+
 responsePutMetricData :: PutMetricDataResponse -> TestTree
 responsePutMetricData = res
     "PutMetricDataResponse"
@@ -173,6 +224,13 @@
     cloudWatch
     (Proxy :: Proxy PutMetricData)
 
+responseListDashboards :: ListDashboardsResponse -> TestTree
+responseListDashboards = res
+    "ListDashboardsResponse"
+    "fixture/ListDashboardsResponse.proto"
+    cloudWatch
+    (Proxy :: Proxy ListDashboards)
+
 responseDescribeAlarms :: DescribeAlarmsResponse -> TestTree
 responseDescribeAlarms = res
     "DescribeAlarmsResponse"
@@ -187,6 +245,13 @@
     cloudWatch
     (Proxy :: Proxy ListMetrics)
 
+responseDeleteDashboards :: DeleteDashboardsResponse -> TestTree
+responseDeleteDashboards = res
+    "DeleteDashboardsResponse"
+    "fixture/DeleteDashboardsResponse.proto"
+    cloudWatch
+    (Proxy :: Proxy DeleteDashboards)
+
 responseDeleteAlarms :: DeleteAlarmsResponse -> TestTree
 responseDeleteAlarms = res
     "DeleteAlarmsResponse"
@@ -221,6 +286,13 @@
     "fixture/DisableAlarmActionsResponse.proto"
     cloudWatch
     (Proxy :: Proxy DisableAlarmActions)
+
+responsePutDashboard :: PutDashboardResponse -> TestTree
+responsePutDashboard = res
+    "PutDashboardResponse"
+    "fixture/PutDashboardResponse.proto"
+    cloudWatch
+    (Proxy :: Proxy PutDashboard)
 
 responsePutMetricAlarm :: PutMetricAlarmResponse -> TestTree
 responsePutMetricAlarm = res
