diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,29 +1,44 @@
 # Amazon EC2 Container Service SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon EC2 Container Service is a highly scalable, high performance container
-management service that supports Docker containers and allows you to easily
-run distributed applications on a managed cluster of Amazon EC2 instances.
-Amazon EC2 Container Service lets you launch and stop container-enabled
-applications with simple API calls, allows you to query the state of your
-cluster from a centralized service, and gives you access to many familiar
-Amazon EC2 features like security groups, EBS volumes and IAM roles. You can
-use EC2 Container Service to schedule the placement of containers across your
-cluster based on your resource needs, isolation policies, and availability
-requirements. Amazon EC2 Container Service eliminates the need for you to
-operate your own cluster management and configuration management systems or
-worry about scaling your management infrastructure.
+Amazon EC2 Container Service (Amazon ECS) is a highly scalable, fast,
+container management service that makes it easy to run, stop, and manage
+Docker containers on a cluster of Amazon EC2 instances. Amazon ECS lets
+you launch and stop container-enabled applications with simple API
+calls, allows you to get the state of your cluster from a centralized
+service, and gives you access to many familiar Amazon EC2 features like
+security groups, Amazon EBS volumes, and IAM roles.
 
+You can use Amazon ECS to schedule the placement of containers across
+your cluster based on your resource needs, isolation policies, and
+availability requirements. Amazon EC2 Container Service eliminates the
+need for you to operate your own cluster management and configuration
+management systems or worry about scaling your management
+infrastructure.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-ecs)
 and the [AWS API Reference](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-ecs.cabal b/amazonka-ecs.cabal
--- a/amazonka-ecs.cabal
+++ b/amazonka-ecs.cabal
@@ -1,36 +1,46 @@
 name:                  amazonka-ecs
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon EC2 Container Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon EC2 Container Service is a highly scalable, high performance container
-    management service that supports Docker containers and allows you to easily
-    run distributed applications on a managed cluster of Amazon EC2 instances.
-    Amazon EC2 Container Service lets you launch and stop container-enabled
-    applications with simple API calls, allows you to query the state of your
-    cluster from a centralized service, and gives you access to many familiar
-    Amazon EC2 features like security groups, EBS volumes and IAM roles. You can
-    use EC2 Container Service to schedule the placement of containers across your
-    cluster based on your resource needs, isolation policies, and availability
-    requirements. Amazon EC2 Container Service eliminates the need for you to
-    operate your own cluster management and configuration management systems or
-    worry about scaling your management infrastructure.
+    Amazon EC2 Container Service (Amazon ECS) is a highly scalable, fast,
+    container management service that makes it easy to run, stop, and manage
+    Docker containers on a cluster of Amazon EC2 instances. Amazon ECS lets
+    you launch and stop container-enabled applications with simple API
+    calls, allows you to get the state of your cluster from a centralized
+    service, and gives you access to many familiar Amazon EC2 features like
+    security groups, Amazon EBS volumes, and IAM roles.
 
+    You can use Amazon ECS to schedule the placement of containers across
+    your cluster based on your resource needs, isolation policies, and
+    availability requirements. Amazon EC2 Container Service eliminates the
+    need for you to operate your own cluster management and configuration
+    management systems or worry about scaling your management
+    infrastructure.
     .
-    /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.ECS" and the <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -70,10 +80,42 @@
         , Network.AWS.ECS.SubmitContainerStateChange
         , Network.AWS.ECS.SubmitTaskStateChange
         , Network.AWS.ECS.Types
+        , Network.AWS.ECS.UpdateContainerAgent
         , Network.AWS.ECS.UpdateService
+        , Network.AWS.ECS.Waiters
 
     other-modules:
+          Network.AWS.ECS.Types.Product
+        , Network.AWS.ECS.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-ecs-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.ECS
+        , Test.AWS.Gen.ECS
+        , Test.AWS.ECS.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-ecs == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/ECS.hs b/gen/Network/AWS/ECS.hs
--- a/gen/Network/AWS/ECS.hs
+++ b/gen/Network/AWS/ECS.hs
@@ -1,81 +1,440 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.ECS
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon EC2 Container Service is a highly scalable, high performance container
--- management service that supports Docker containers and allows you to easily
--- run distributed applications on a managed cluster of Amazon EC2 instances.
--- Amazon EC2 Container Service lets you launch and stop container-enabled
--- applications with simple API calls, allows you to query the state of your
--- cluster from a centralized service, and gives you access to many familiar
--- Amazon EC2 features like security groups, EBS volumes and IAM roles. You can
--- use EC2 Container Service to schedule the placement of containers across your
--- cluster based on your resource needs, isolation policies, and availability
--- requirements. Amazon EC2 Container Service eliminates the need for you to
--- operate your own cluster management and configuration management systems or
--- worry about scaling your management infrastructure.
+-- Amazon EC2 Container Service (Amazon ECS) is a highly scalable, fast,
+-- container management service that makes it easy to run, stop, and manage
+-- Docker containers on a cluster of Amazon EC2 instances. Amazon ECS lets
+-- you launch and stop container-enabled applications with simple API
+-- calls, allows you to get the state of your cluster from a centralized
+-- service, and gives you access to many familiar Amazon EC2 features like
+-- security groups, Amazon EBS volumes, and IAM roles.
+--
+-- You can use Amazon ECS to schedule the placement of containers across
+-- your cluster based on your resource needs, isolation policies, and
+-- availability requirements. Amazon EC2 Container Service eliminates the
+-- need for you to operate your own cluster management and configuration
+-- management systems or worry about scaling your management
+-- infrastructure.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.ECS
-    ( module Network.AWS.ECS.CreateCluster
-    , module Network.AWS.ECS.CreateService
-    , module Network.AWS.ECS.DeleteCluster
-    , module Network.AWS.ECS.DeleteService
-    , module Network.AWS.ECS.DeregisterContainerInstance
-    , module Network.AWS.ECS.DeregisterTaskDefinition
+    (
+    -- * Service
+      ECS
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidParameterException
+    , _InvalidParameterException
+
+    -- ** ServerException
+    , _ServerException
+
+    -- ** ClusterContainsServicesException
+    , _ClusterContainsServicesException
+
+    -- ** ClusterContainsContainerInstancesException
+    , _ClusterContainsContainerInstancesException
+
+    -- ** ServiceNotActiveException
+    , _ServiceNotActiveException
+
+    -- ** NoUpdateAvailableException
+    , _NoUpdateAvailableException
+
+    -- ** ClusterNotFoundException
+    , _ClusterNotFoundException
+
+    -- ** ServiceNotFoundException
+    , _ServiceNotFoundException
+
+    -- ** MissingVersionException
+    , _MissingVersionException
+
+    -- ** UpdateInProgressException
+    , _UpdateInProgressException
+
+    -- ** ClientException
+    , _ClientException
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** ServicesInactive
+    , servicesInactive
+
+    -- ** TasksRunning
+    , tasksRunning
+
+    -- ** TasksStopped
+    , tasksStopped
+
+    -- * Operations
+    -- $operations
+
+    -- ** ListServices (Paginated)
+    , module Network.AWS.ECS.ListServices
+
+    -- ** DescribeClusters
     , module Network.AWS.ECS.DescribeClusters
-    , module Network.AWS.ECS.DescribeContainerInstances
-    , module Network.AWS.ECS.DescribeServices
-    , module Network.AWS.ECS.DescribeTaskDefinition
-    , module Network.AWS.ECS.DescribeTasks
+
+    -- ** DeleteService
+    , module Network.AWS.ECS.DeleteService
+
+    -- ** UpdateService
+    , module Network.AWS.ECS.UpdateService
+
+    -- ** DiscoverPollEndpoint
     , module Network.AWS.ECS.DiscoverPollEndpoint
-    , module Network.AWS.ECS.ListClusters
-    , module Network.AWS.ECS.ListContainerInstances
-    , module Network.AWS.ECS.ListServices
-    , module Network.AWS.ECS.ListTaskDefinitionFamilies
+
+    -- ** SubmitContainerStateChange
+    , module Network.AWS.ECS.SubmitContainerStateChange
+
+    -- ** StopTask
+    , module Network.AWS.ECS.StopTask
+
+    -- ** DescribeTaskDefinition
+    , module Network.AWS.ECS.DescribeTaskDefinition
+
+    -- ** SubmitTaskStateChange
+    , module Network.AWS.ECS.SubmitTaskStateChange
+
+    -- ** DescribeContainerInstances
+    , module Network.AWS.ECS.DescribeContainerInstances
+
+    -- ** DeleteCluster
+    , module Network.AWS.ECS.DeleteCluster
+
+    -- ** CreateCluster
+    , module Network.AWS.ECS.CreateCluster
+
+    -- ** ListTaskDefinitions (Paginated)
     , module Network.AWS.ECS.ListTaskDefinitions
+
+    -- ** ListTasks (Paginated)
     , module Network.AWS.ECS.ListTasks
-    , module Network.AWS.ECS.RegisterContainerInstance
-    , module Network.AWS.ECS.RegisterTaskDefinition
+
+    -- ** RunTask
     , module Network.AWS.ECS.RunTask
+
+    -- ** ListContainerInstances (Paginated)
+    , module Network.AWS.ECS.ListContainerInstances
+
+    -- ** RegisterContainerInstance
+    , module Network.AWS.ECS.RegisterContainerInstance
+
+    -- ** UpdateContainerAgent
+    , module Network.AWS.ECS.UpdateContainerAgent
+
+    -- ** ListTaskDefinitionFamilies (Paginated)
+    , module Network.AWS.ECS.ListTaskDefinitionFamilies
+
+    -- ** StartTask
     , module Network.AWS.ECS.StartTask
-    , module Network.AWS.ECS.StopTask
-    , module Network.AWS.ECS.SubmitContainerStateChange
-    , module Network.AWS.ECS.SubmitTaskStateChange
-    , module Network.AWS.ECS.Types
-    , module Network.AWS.ECS.UpdateService
+
+    -- ** DeregisterTaskDefinition
+    , module Network.AWS.ECS.DeregisterTaskDefinition
+
+    -- ** DescribeTasks
+    , module Network.AWS.ECS.DescribeTasks
+
+    -- ** ListClusters (Paginated)
+    , module Network.AWS.ECS.ListClusters
+
+    -- ** DescribeServices
+    , module Network.AWS.ECS.DescribeServices
+
+    -- ** DeregisterContainerInstance
+    , module Network.AWS.ECS.DeregisterContainerInstance
+
+    -- ** RegisterTaskDefinition
+    , module Network.AWS.ECS.RegisterTaskDefinition
+
+    -- ** CreateService
+    , module Network.AWS.ECS.CreateService
+
+    -- * Types
+
+    -- ** AgentUpdateStatus
+    , AgentUpdateStatus (..)
+
+    -- ** DesiredStatus
+    , DesiredStatus (..)
+
+    -- ** SortOrder
+    , SortOrder (..)
+
+    -- ** TaskDefinitionStatus
+    , TaskDefinitionStatus (..)
+
+    -- ** TransportProtocol
+    , TransportProtocol (..)
+
+    -- ** Cluster
+    , Cluster
+    , cluster
+    , cStatus
+    , cClusterARN
+    , cRunningTasksCount
+    , cRegisteredContainerInstancesCount
+    , cPendingTasksCount
+    , cClusterName
+    , cActiveServicesCount
+
+    -- ** Container
+    , Container
+    , container
+    , cNetworkBindings
+    , cContainerARN
+    , cTaskARN
+    , cLastStatus
+    , cReason
+    , cName
+    , cExitCode
+
+    -- ** ContainerDefinition
+    , ContainerDefinition
+    , containerDefinition
+    , cdImage
+    , cdCommand
+    , cdVolumesFrom
+    , cdEnvironment
+    , cdEntryPoint
+    , cdPortMappings
+    , cdMemory
+    , cdName
+    , cdMountPoints
+    , cdLinks
+    , cdEssential
+    , cdCpu
+
+    -- ** ContainerInstance
+    , ContainerInstance
+    , containerInstance
+    , ciStatus
+    , ciRunningTasksCount
+    , ciRemainingResources
+    , ciEc2InstanceId
+    , ciContainerInstanceARN
+    , ciAgentConnected
+    , ciVersionInfo
+    , ciAgentUpdateStatus
+    , ciPendingTasksCount
+    , ciRegisteredResources
+
+    -- ** ContainerOverride
+    , ContainerOverride
+    , containerOverride
+    , coCommand
+    , coEnvironment
+    , coName
+
+    -- ** ContainerService
+    , ContainerService
+    , containerService
+    , csStatus
+    , csRunningCount
+    , csClusterARN
+    , csDesiredCount
+    , csLoadBalancers
+    , csPendingCount
+    , csEvents
+    , csServiceName
+    , csDeployments
+    , csTaskDefinition
+    , csServiceARN
+    , csRoleARN
+
+    -- ** Deployment
+    , Deployment
+    , deployment
+    , dStatus
+    , dRunningCount
+    , dCreatedAt
+    , dDesiredCount
+    , dPendingCount
+    , dId
+    , dTaskDefinition
+    , dUpdatedAt
+
+    -- ** Failure
+    , Failure
+    , failure
+    , fArn
+    , fReason
+
+    -- ** HostVolumeProperties
+    , HostVolumeProperties
+    , hostVolumeProperties
+    , hvpSourcePath
+
+    -- ** KeyValuePair
+    , KeyValuePair
+    , keyValuePair
+    , kvpValue
+    , kvpName
+
+    -- ** LoadBalancer
+    , LoadBalancer
+    , loadBalancer
+    , lbLoadBalancerName
+    , lbContainerName
+    , lbContainerPort
+
+    -- ** MountPoint
+    , MountPoint
+    , mountPoint
+    , mpContainerPath
+    , mpSourceVolume
+    , mpReadOnly
+
+    -- ** NetworkBinding
+    , NetworkBinding
+    , networkBinding
+    , nbBindIP
+    , nbProtocol
+    , nbHostPort
+    , nbContainerPort
+
+    -- ** PortMapping
+    , PortMapping
+    , portMapping
+    , pmProtocol
+    , pmHostPort
+    , pmContainerPort
+
+    -- ** Resource
+    , Resource
+    , resource
+    , rStringSetValue
+    , rIntegerValue
+    , rDoubleValue
+    , rLongValue
+    , rName
+    , rType
+
+    -- ** ServiceEvent
+    , ServiceEvent
+    , serviceEvent
+    , seCreatedAt
+    , seId
+    , seMessage
+
+    -- ** Task
+    , Task
+    , task
+    , tDesiredStatus
+    , tClusterARN
+    , tOverrides
+    , tTaskARN
+    , tContainerInstanceARN
+    , tLastStatus
+    , tContainers
+    , tStartedBy
+    , tTaskDefinitionARN
+
+    -- ** TaskDefinition
+    , TaskDefinition
+    , taskDefinition
+    , tdStatus
+    , tdFamily
+    , tdContainerDefinitions
+    , tdTaskDefinitionARN
+    , tdRevision
+    , tdVolumes
+
+    -- ** TaskOverride
+    , TaskOverride
+    , taskOverride
+    , toContainerOverrides
+
+    -- ** VersionInfo
+    , VersionInfo
+    , versionInfo
+    , viAgentVersion
+    , viAgentHash
+    , viDockerVersion
+
+    -- ** Volume
+    , Volume
+    , volume
+    , vName
+    , vHost
+
+    -- ** VolumeFrom
+    , VolumeFrom
+    , volumeFrom
+    , vfSourceContainer
+    , vfReadOnly
     ) where
 
-import Network.AWS.ECS.CreateCluster
-import Network.AWS.ECS.CreateService
-import Network.AWS.ECS.DeleteCluster
-import Network.AWS.ECS.DeleteService
-import Network.AWS.ECS.DeregisterContainerInstance
-import Network.AWS.ECS.DeregisterTaskDefinition
-import Network.AWS.ECS.DescribeClusters
-import Network.AWS.ECS.DescribeContainerInstances
-import Network.AWS.ECS.DescribeServices
-import Network.AWS.ECS.DescribeTaskDefinition
-import Network.AWS.ECS.DescribeTasks
-import Network.AWS.ECS.DiscoverPollEndpoint
-import Network.AWS.ECS.ListClusters
-import Network.AWS.ECS.ListContainerInstances
-import Network.AWS.ECS.ListServices
-import Network.AWS.ECS.ListTaskDefinitionFamilies
-import Network.AWS.ECS.ListTaskDefinitions
-import Network.AWS.ECS.ListTasks
-import Network.AWS.ECS.RegisterContainerInstance
-import Network.AWS.ECS.RegisterTaskDefinition
-import Network.AWS.ECS.RunTask
-import Network.AWS.ECS.StartTask
-import Network.AWS.ECS.StopTask
-import Network.AWS.ECS.SubmitContainerStateChange
-import Network.AWS.ECS.SubmitTaskStateChange
-import Network.AWS.ECS.Types
-import Network.AWS.ECS.UpdateService
+import           Network.AWS.ECS.CreateCluster
+import           Network.AWS.ECS.CreateService
+import           Network.AWS.ECS.DeleteCluster
+import           Network.AWS.ECS.DeleteService
+import           Network.AWS.ECS.DeregisterContainerInstance
+import           Network.AWS.ECS.DeregisterTaskDefinition
+import           Network.AWS.ECS.DescribeClusters
+import           Network.AWS.ECS.DescribeContainerInstances
+import           Network.AWS.ECS.DescribeServices
+import           Network.AWS.ECS.DescribeTaskDefinition
+import           Network.AWS.ECS.DescribeTasks
+import           Network.AWS.ECS.DiscoverPollEndpoint
+import           Network.AWS.ECS.ListClusters
+import           Network.AWS.ECS.ListContainerInstances
+import           Network.AWS.ECS.ListServices
+import           Network.AWS.ECS.ListTaskDefinitionFamilies
+import           Network.AWS.ECS.ListTaskDefinitions
+import           Network.AWS.ECS.ListTasks
+import           Network.AWS.ECS.RegisterContainerInstance
+import           Network.AWS.ECS.RegisterTaskDefinition
+import           Network.AWS.ECS.RunTask
+import           Network.AWS.ECS.StartTask
+import           Network.AWS.ECS.StopTask
+import           Network.AWS.ECS.SubmitContainerStateChange
+import           Network.AWS.ECS.SubmitTaskStateChange
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.UpdateContainerAgent
+import           Network.AWS.ECS.UpdateService
+import           Network.AWS.ECS.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'ECS'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/ECS/CreateCluster.hs b/gen/Network/AWS/ECS/CreateCluster.hs
--- a/gen/Network/AWS/ECS/CreateCluster.hs
+++ b/gen/Network/AWS/ECS/CreateCluster.hs
@@ -1,114 +1,130 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.CreateCluster
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new Amazon ECS cluster. By default, your account will receive a 'default' cluster when you launch your first container instance. However, you can
--- create your own cluster with a unique name with the 'CreateCluster' action.
+-- Creates a new Amazon ECS cluster. By default, your account will receive
+-- a 'default' cluster when you launch your first container instance.
+-- However, you can create your own cluster with a unique name with the
+-- 'CreateCluster' action.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCluster.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCluster.html AWS API Reference> for CreateCluster.
 module Network.AWS.ECS.CreateCluster
     (
-    -- * Request
-      CreateCluster
-    -- ** Request constructor
-    , createCluster
-    -- ** Request lenses
+    -- * Creating a Request
+      createCluster
+    , CreateCluster
+    -- * Request Lenses
     , ccClusterName
 
-    -- * Response
-    , CreateClusterResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createClusterResponse
-    -- ** Response lenses
-    , ccrCluster
+    , CreateClusterResponse
+    -- * Response Lenses
+    , ccrsCluster
+    , ccrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype CreateCluster = CreateCluster
+-- | /See:/ 'createCluster' smart constructor.
+newtype CreateCluster = CreateCluster'
     { _ccClusterName :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateCluster' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateCluster' with the minimum fields required to make a request.
 --
--- * 'ccClusterName' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-createCluster :: CreateCluster
-createCluster = CreateCluster
+-- * 'ccClusterName'
+createCluster
+    :: CreateCluster
+createCluster =
+    CreateCluster'
     { _ccClusterName = Nothing
     }
 
--- | The name of your cluster. If you do not specify a name for your cluster, you
--- will create a cluster named 'default'. Up to 255 letters (uppercase and
--- lowercase), numbers, hyphens, and underscores are allowed.
+-- | The name of your cluster. If you do not specify a name for your cluster,
+-- you will create a cluster named 'default'. Up to 255 letters (uppercase
+-- and lowercase), numbers, hyphens, and underscores are allowed.
 ccClusterName :: Lens' CreateCluster (Maybe Text)
-ccClusterName = lens _ccClusterName (\s a -> s { _ccClusterName = a })
+ccClusterName = lens _ccClusterName (\ s a -> s{_ccClusterName = a});
 
-newtype CreateClusterResponse = CreateClusterResponse
-    { _ccrCluster :: Maybe Cluster
-    } deriving (Eq, Read, Show)
+instance AWSRequest CreateCluster where
+        type Sv CreateCluster = ECS
+        type Rs CreateCluster = CreateClusterResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateClusterResponse' <$>
+                   (x .?> "cluster") <*> (pure (fromEnum s)))
 
--- | 'CreateClusterResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ccrCluster' @::@ 'Maybe' 'Cluster'
---
-createClusterResponse :: CreateClusterResponse
-createClusterResponse = CreateClusterResponse
-    { _ccrCluster = Nothing
-    }
+instance ToHeaders CreateCluster where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.CreateCluster"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The full description of your new cluster.
-ccrCluster :: Lens' CreateClusterResponse (Maybe Cluster)
-ccrCluster = lens _ccrCluster (\s a -> s { _ccrCluster = a })
+instance ToJSON CreateCluster where
+        toJSON CreateCluster'{..}
+          = object ["clusterName" .= _ccClusterName]
 
 instance ToPath CreateCluster where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateCluster where
-    toQuery = const mempty
-
-instance ToHeaders CreateCluster
+        toQuery = const mempty
 
-instance ToJSON CreateCluster where
-    toJSON CreateCluster{..} = object
-        [ "clusterName" .= _ccClusterName
-        ]
+-- | /See:/ 'createClusterResponse' smart constructor.
+data CreateClusterResponse = CreateClusterResponse'
+    { _ccrsCluster :: !(Maybe Cluster)
+    , _ccrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateCluster where
-    type Sv CreateCluster = ECS
-    type Rs CreateCluster = CreateClusterResponse
+-- | Creates a value of 'CreateClusterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccrsCluster'
+--
+-- * 'ccrsStatus'
+createClusterResponse
+    :: Int -- ^ 'ccrsStatus'
+    -> CreateClusterResponse
+createClusterResponse pStatus_ =
+    CreateClusterResponse'
+    { _ccrsCluster = Nothing
+    , _ccrsStatus = pStatus_
+    }
 
-    request  = post "CreateCluster"
-    response = jsonResponse
+-- | The full description of your new cluster.
+ccrsCluster :: Lens' CreateClusterResponse (Maybe Cluster)
+ccrsCluster = lens _ccrsCluster (\ s a -> s{_ccrsCluster = a});
 
-instance FromJSON CreateClusterResponse where
-    parseJSON = withObject "CreateClusterResponse" $ \o -> CreateClusterResponse
-        <$> o .:? "cluster"
+-- | The response status code.
+ccrsStatus :: Lens' CreateClusterResponse Int
+ccrsStatus = lens _ccrsStatus (\ s a -> s{_ccrsStatus = a});
diff --git a/gen/Network/AWS/ECS/CreateService.hs b/gen/Network/AWS/ECS/CreateService.hs
--- a/gen/Network/AWS/ECS/CreateService.hs
+++ b/gen/Network/AWS/ECS/CreateService.hs
@@ -1,186 +1,205 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.CreateService
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Runs and maintains a desired number of tasks from a specified task
--- definition. If the number of tasks running in a service drops below 'desiredCount', Amazon ECS will spawn another instantiation of the task in the specified
--- cluster.
+-- Runs and maintains a desired number of tasks from a specified task
+-- definition. If the number of tasks running in a service drops below
+-- 'desiredCount', Amazon ECS will spawn another instantiation of the task
+-- in the specified cluster.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html AWS API Reference> for CreateService.
 module Network.AWS.ECS.CreateService
     (
-    -- * Request
-      CreateService
-    -- ** Request constructor
-    , createService
-    -- ** Request lenses
-    , cs1ClientToken
-    , cs1Cluster
-    , cs1DesiredCount
-    , cs1LoadBalancers
-    , cs1Role
-    , cs1ServiceName
-    , cs1TaskDefinition
+    -- * Creating a Request
+      createService
+    , CreateService
+    -- * Request Lenses
+    , cCluster
+    , cClientToken
+    , cLoadBalancers
+    , cRole
+    , cServiceName
+    , cTaskDefinition
+    , cDesiredCount
 
-    -- * Response
-    , CreateServiceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createServiceResponse
-    -- ** Response lenses
-    , csrService
+    , CreateServiceResponse
+    -- * Response Lenses
+    , csrsService
+    , csrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data CreateService = CreateService
-    { _cs1ClientToken    :: Maybe Text
-    , _cs1Cluster        :: Maybe Text
-    , _cs1DesiredCount   :: Maybe Int
-    , _cs1LoadBalancers  :: List "loadBalancers" LoadBalancer
-    , _cs1Role           :: Maybe Text
-    , _cs1ServiceName    :: Text
-    , _cs1TaskDefinition :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createService' smart constructor.
+data CreateService = CreateService'
+    { _cCluster        :: !(Maybe Text)
+    , _cClientToken    :: !(Maybe Text)
+    , _cLoadBalancers  :: !(Maybe [LoadBalancer])
+    , _cRole           :: !(Maybe Text)
+    , _cServiceName    :: !Text
+    , _cTaskDefinition :: !Text
+    , _cDesiredCount   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateService' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateService' with the minimum fields required to make a request.
 --
--- * 'cs1ClientToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cs1Cluster' @::@ 'Maybe' 'Text'
+-- * 'cCluster'
 --
--- * 'cs1DesiredCount' @::@ 'Maybe' 'Int'
+-- * 'cClientToken'
 --
--- * 'cs1LoadBalancers' @::@ ['LoadBalancer']
+-- * 'cLoadBalancers'
 --
--- * 'cs1Role' @::@ 'Maybe' 'Text'
+-- * 'cRole'
 --
--- * 'cs1ServiceName' @::@ 'Text'
+-- * 'cServiceName'
 --
--- * 'cs1TaskDefinition' @::@ 'Maybe' 'Text'
+-- * 'cTaskDefinition'
 --
-createService :: Text -- ^ 'cs1ServiceName'
-              -> CreateService
-createService p1 = CreateService
-    { _cs1ServiceName    = p1
-    , _cs1Cluster        = Nothing
-    , _cs1TaskDefinition = Nothing
-    , _cs1LoadBalancers  = mempty
-    , _cs1DesiredCount   = Nothing
-    , _cs1ClientToken    = Nothing
-    , _cs1Role           = Nothing
+-- * 'cDesiredCount'
+createService
+    :: Text -- ^ 'cServiceName'
+    -> Text -- ^ 'cTaskDefinition'
+    -> Int -- ^ 'cDesiredCount'
+    -> CreateService
+createService pServiceName_ pTaskDefinition_ pDesiredCount_ =
+    CreateService'
+    { _cCluster = Nothing
+    , _cClientToken = Nothing
+    , _cLoadBalancers = Nothing
+    , _cRole = Nothing
+    , _cServiceName = pServiceName_
+    , _cTaskDefinition = pTaskDefinition_
+    , _cDesiredCount = pDesiredCount_
     }
 
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of
--- the request. Up to 32 ASCII characters are allowed.
-cs1ClientToken :: Lens' CreateService (Maybe Text)
-cs1ClientToken = lens _cs1ClientToken (\s a -> s { _cs1ClientToken = a })
-
--- | The short name or full Amazon Resource Name (ARN) of the cluster that you
--- want to run your service on. If you do not specify a cluster, the default
--- cluster is assumed.
-cs1Cluster :: Lens' CreateService (Maybe Text)
-cs1Cluster = lens _cs1Cluster (\s a -> s { _cs1Cluster = a })
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- you want to run your service on. If you do not specify a cluster, the
+-- default cluster is assumed.
+cCluster :: Lens' CreateService (Maybe Text)
+cCluster = lens _cCluster (\ s a -> s{_cCluster = a});
 
--- | The number of instantiations of the specified task definition that you would
--- like to place and keep running on your cluster.
-cs1DesiredCount :: Lens' CreateService (Maybe Int)
-cs1DesiredCount = lens _cs1DesiredCount (\s a -> s { _cs1DesiredCount = a })
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. Up to 32 ASCII characters are allowed.
+cClientToken :: Lens' CreateService (Maybe Text)
+cClientToken = lens _cClientToken (\ s a -> s{_cClientToken = a});
 
 -- | A list of load balancer objects, containing the load balancer name, the
--- container name (as it appears in a container definition), and the container
--- port to access from the load balancer.
-cs1LoadBalancers :: Lens' CreateService [LoadBalancer]
-cs1LoadBalancers = lens _cs1LoadBalancers (\s a -> s { _cs1LoadBalancers = a }) . _List
+-- container name (as it appears in a container definition), and the
+-- container port to access from the load balancer.
+cLoadBalancers :: Lens' CreateService [LoadBalancer]
+cLoadBalancers = lens _cLoadBalancers (\ s a -> s{_cLoadBalancers = a}) . _Default . _Coerce;
 
--- | The name or full Amazon Resource Name (ARN) of the IAM role that allows your
--- Amazon ECS container agent to make calls to your load balancer on your
--- behalf. This parameter is only required if you are using a load balancer with
--- your service.
-cs1Role :: Lens' CreateService (Maybe Text)
-cs1Role = lens _cs1Role (\s a -> s { _cs1Role = a })
+-- | The name or full Amazon Resource Name (ARN) of the IAM role that allows
+-- your Amazon ECS container agent to make calls to your load balancer on
+-- your behalf. This parameter is only required if you are using a load
+-- balancer with your service.
+cRole :: Lens' CreateService (Maybe Text)
+cRole = lens _cRole (\ s a -> s{_cRole = a});
 
 -- | The name of your service. Up to 255 letters (uppercase and lowercase),
--- numbers, hyphens, and underscores are allowed.
-cs1ServiceName :: Lens' CreateService Text
-cs1ServiceName = lens _cs1ServiceName (\s a -> s { _cs1ServiceName = a })
+-- numbers, hyphens, and underscores are allowed. Service names must be
+-- unique within a cluster, but you can have similarly named services in
+-- multiple clusters within a region or across multiple regions.
+cServiceName :: Lens' CreateService Text
+cServiceName = lens _cServiceName (\ s a -> s{_cServiceName = a});
 
--- | The 'family' and 'revision' ('family:revision') or full Amazon Resource Name (ARN)
--- of the task definition that you want to run in your service.
-cs1TaskDefinition :: Lens' CreateService (Maybe Text)
-cs1TaskDefinition =
-    lens _cs1TaskDefinition (\s a -> s { _cs1TaskDefinition = a })
+-- | The 'family' and 'revision' ('family:revision') or full Amazon Resource
+-- Name (ARN) of the task definition that you want to run in your service.
+-- If a 'revision' is not specified, the latest 'ACTIVE' revision is used.
+cTaskDefinition :: Lens' CreateService Text
+cTaskDefinition = lens _cTaskDefinition (\ s a -> s{_cTaskDefinition = a});
 
-newtype CreateServiceResponse = CreateServiceResponse
-    { _csrService :: Maybe ContainerService
-    } deriving (Eq, Read, Show)
+-- | The number of instantiations of the specified task definition that you
+-- would like to place and keep running on your cluster.
+cDesiredCount :: Lens' CreateService Int
+cDesiredCount = lens _cDesiredCount (\ s a -> s{_cDesiredCount = a});
 
--- | 'CreateServiceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'csrService' @::@ 'Maybe' 'ContainerService'
---
-createServiceResponse :: CreateServiceResponse
-createServiceResponse = CreateServiceResponse
-    { _csrService = Nothing
-    }
+instance AWSRequest CreateService where
+        type Sv CreateService = ECS
+        type Rs CreateService = CreateServiceResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateServiceResponse' <$>
+                   (x .?> "service") <*> (pure (fromEnum s)))
 
--- | The full description of your service following the create call.
-csrService :: Lens' CreateServiceResponse (Maybe ContainerService)
-csrService = lens _csrService (\s a -> s { _csrService = a })
+instance ToHeaders CreateService where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.CreateService"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON CreateService where
+        toJSON CreateService'{..}
+          = object
+              ["cluster" .= _cCluster,
+               "clientToken" .= _cClientToken,
+               "loadBalancers" .= _cLoadBalancers, "role" .= _cRole,
+               "serviceName" .= _cServiceName,
+               "taskDefinition" .= _cTaskDefinition,
+               "desiredCount" .= _cDesiredCount]
+
 instance ToPath CreateService where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateService where
-    toQuery = const mempty
-
-instance ToHeaders CreateService
+        toQuery = const mempty
 
-instance ToJSON CreateService where
-    toJSON CreateService{..} = object
-        [ "cluster"        .= _cs1Cluster
-        , "serviceName"    .= _cs1ServiceName
-        , "taskDefinition" .= _cs1TaskDefinition
-        , "loadBalancers"  .= _cs1LoadBalancers
-        , "desiredCount"   .= _cs1DesiredCount
-        , "clientToken"    .= _cs1ClientToken
-        , "role"           .= _cs1Role
-        ]
+-- | /See:/ 'createServiceResponse' smart constructor.
+data CreateServiceResponse = CreateServiceResponse'
+    { _csrsService :: !(Maybe ContainerService)
+    , _csrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateService where
-    type Sv CreateService = ECS
-    type Rs CreateService = CreateServiceResponse
+-- | Creates a value of 'CreateServiceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csrsService'
+--
+-- * 'csrsStatus'
+createServiceResponse
+    :: Int -- ^ 'csrsStatus'
+    -> CreateServiceResponse
+createServiceResponse pStatus_ =
+    CreateServiceResponse'
+    { _csrsService = Nothing
+    , _csrsStatus = pStatus_
+    }
 
-    request  = post "CreateService"
-    response = jsonResponse
+-- | The full description of your service following the create call.
+csrsService :: Lens' CreateServiceResponse (Maybe ContainerService)
+csrsService = lens _csrsService (\ s a -> s{_csrsService = a});
 
-instance FromJSON CreateServiceResponse where
-    parseJSON = withObject "CreateServiceResponse" $ \o -> CreateServiceResponse
-        <$> o .:? "service"
+-- | The response status code.
+csrsStatus :: Lens' CreateServiceResponse Int
+csrsStatus = lens _csrsStatus (\ s a -> s{_csrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DeleteCluster.hs b/gen/Network/AWS/ECS/DeleteCluster.hs
--- a/gen/Network/AWS/ECS/DeleteCluster.hs
+++ b/gen/Network/AWS/ECS/DeleteCluster.hs
@@ -1,115 +1,130 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DeleteCluster
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the specified cluster. You must deregister all container instances
--- from this cluster before you may delete it. You can list the container
--- instances in a cluster with 'ListContainerInstances' and deregister them with 'DeregisterContainerInstance'.
+-- Deletes the specified cluster. You must deregister all container
+-- instances from this cluster before you may delete it. You can list the
+-- container instances in a cluster with ListContainerInstances and
+-- deregister them with DeregisterContainerInstance.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteCluster.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteCluster.html AWS API Reference> for DeleteCluster.
 module Network.AWS.ECS.DeleteCluster
     (
-    -- * Request
-      DeleteCluster
-    -- ** Request constructor
-    , deleteCluster
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteCluster
+    , DeleteCluster
+    -- * Request Lenses
     , dcCluster
 
-    -- * Response
-    , DeleteClusterResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteClusterResponse
-    -- ** Response lenses
-    , dcrCluster
+    , DeleteClusterResponse
+    -- * Response Lenses
+    , drsCluster
+    , drsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteCluster = DeleteCluster
+-- | /See:/ 'deleteCluster' smart constructor.
+newtype DeleteCluster = DeleteCluster'
     { _dcCluster :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteCluster' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteCluster' with the minimum fields required to make a request.
 --
--- * 'dcCluster' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteCluster :: Text -- ^ 'dcCluster'
-              -> DeleteCluster
-deleteCluster p1 = DeleteCluster
-    { _dcCluster = p1
+-- * 'dcCluster'
+deleteCluster
+    :: Text -- ^ 'dcCluster'
+    -> DeleteCluster
+deleteCluster pCluster_ =
+    DeleteCluster'
+    { _dcCluster = pCluster_
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that you
--- want to delete.
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- you want to delete.
 dcCluster :: Lens' DeleteCluster Text
-dcCluster = lens _dcCluster (\s a -> s { _dcCluster = a })
+dcCluster = lens _dcCluster (\ s a -> s{_dcCluster = a});
 
-newtype DeleteClusterResponse = DeleteClusterResponse
-    { _dcrCluster :: Maybe Cluster
-    } deriving (Eq, Read, Show)
+instance AWSRequest DeleteCluster where
+        type Sv DeleteCluster = ECS
+        type Rs DeleteCluster = DeleteClusterResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteClusterResponse' <$>
+                   (x .?> "cluster") <*> (pure (fromEnum s)))
 
--- | 'DeleteClusterResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dcrCluster' @::@ 'Maybe' 'Cluster'
---
-deleteClusterResponse :: DeleteClusterResponse
-deleteClusterResponse = DeleteClusterResponse
-    { _dcrCluster = Nothing
-    }
+instance ToHeaders DeleteCluster where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DeleteCluster"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The full description of the deleted cluster.
-dcrCluster :: Lens' DeleteClusterResponse (Maybe Cluster)
-dcrCluster = lens _dcrCluster (\s a -> s { _dcrCluster = a })
+instance ToJSON DeleteCluster where
+        toJSON DeleteCluster'{..}
+          = object ["cluster" .= _dcCluster]
 
 instance ToPath DeleteCluster where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteCluster where
-    toQuery = const mempty
-
-instance ToHeaders DeleteCluster
+        toQuery = const mempty
 
-instance ToJSON DeleteCluster where
-    toJSON DeleteCluster{..} = object
-        [ "cluster" .= _dcCluster
-        ]
+-- | /See:/ 'deleteClusterResponse' smart constructor.
+data DeleteClusterResponse = DeleteClusterResponse'
+    { _drsCluster :: !(Maybe Cluster)
+    , _drsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteCluster where
-    type Sv DeleteCluster = ECS
-    type Rs DeleteCluster = DeleteClusterResponse
+-- | Creates a value of 'DeleteClusterResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsCluster'
+--
+-- * 'drsStatus'
+deleteClusterResponse
+    :: Int -- ^ 'drsStatus'
+    -> DeleteClusterResponse
+deleteClusterResponse pStatus_ =
+    DeleteClusterResponse'
+    { _drsCluster = Nothing
+    , _drsStatus = pStatus_
+    }
 
-    request  = post "DeleteCluster"
-    response = jsonResponse
+-- | The full description of the deleted cluster.
+drsCluster :: Lens' DeleteClusterResponse (Maybe Cluster)
+drsCluster = lens _drsCluster (\ s a -> s{_drsCluster = a});
 
-instance FromJSON DeleteClusterResponse where
-    parseJSON = withObject "DeleteClusterResponse" $ \o -> DeleteClusterResponse
-        <$> o .:? "cluster"
+-- | The response status code.
+drsStatus :: Lens' DeleteClusterResponse Int
+drsStatus = lens _drsStatus (\ s a -> s{_drsStatus = a});
diff --git a/gen/Network/AWS/ECS/DeleteService.hs b/gen/Network/AWS/ECS/DeleteService.hs
--- a/gen/Network/AWS/ECS/DeleteService.hs
+++ b/gen/Network/AWS/ECS/DeleteService.hs
@@ -1,121 +1,136 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DeleteService
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes a specified service within a cluster.
+-- Deletes a specified service within a cluster.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteService.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteService.html AWS API Reference> for DeleteService.
 module Network.AWS.ECS.DeleteService
     (
-    -- * Request
-      DeleteService
-    -- ** Request constructor
-    , deleteService
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteService
+    , DeleteService
+    -- * Request Lenses
     , dsCluster
     , dsService
 
-    -- * Response
-    , DeleteServiceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteServiceResponse
-    -- ** Response lenses
-    , dsrService
+    , DeleteServiceResponse
+    -- * Response Lenses
+    , dsrsService
+    , dsrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DeleteService = DeleteService
-    { _dsCluster :: Maybe Text
-    , _dsService :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'deleteService' smart constructor.
+data DeleteService = DeleteService'
+    { _dsCluster :: !(Maybe Text)
+    , _dsService :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteService' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteService' with the minimum fields required to make a request.
 --
--- * 'dsCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dsService' @::@ 'Text'
+-- * 'dsCluster'
 --
-deleteService :: Text -- ^ 'dsService'
-              -> DeleteService
-deleteService p1 = DeleteService
-    { _dsService = p1
-    , _dsCluster = Nothing
+-- * 'dsService'
+deleteService
+    :: Text -- ^ 'dsService'
+    -> DeleteService
+deleteService pService_ =
+    DeleteService'
+    { _dsCluster = Nothing
+    , _dsService = pService_
     }
 
 -- | The name of the cluster that hosts the service you want to delete.
 dsCluster :: Lens' DeleteService (Maybe Text)
-dsCluster = lens _dsCluster (\s a -> s { _dsCluster = a })
+dsCluster = lens _dsCluster (\ s a -> s{_dsCluster = a});
 
 -- | The name of the service you want to delete.
 dsService :: Lens' DeleteService Text
-dsService = lens _dsService (\s a -> s { _dsService = a })
+dsService = lens _dsService (\ s a -> s{_dsService = a});
 
-newtype DeleteServiceResponse = DeleteServiceResponse
-    { _dsrService :: Maybe ContainerService
-    } deriving (Eq, Read, Show)
+instance AWSRequest DeleteService where
+        type Sv DeleteService = ECS
+        type Rs DeleteService = DeleteServiceResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteServiceResponse' <$>
+                   (x .?> "service") <*> (pure (fromEnum s)))
 
--- | 'DeleteServiceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsrService' @::@ 'Maybe' 'ContainerService'
---
-deleteServiceResponse :: DeleteServiceResponse
-deleteServiceResponse = DeleteServiceResponse
-    { _dsrService = Nothing
-    }
+instance ToHeaders DeleteService where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DeleteService"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dsrService :: Lens' DeleteServiceResponse (Maybe ContainerService)
-dsrService = lens _dsrService (\s a -> s { _dsrService = a })
+instance ToJSON DeleteService where
+        toJSON DeleteService'{..}
+          = object
+              ["cluster" .= _dsCluster, "service" .= _dsService]
 
 instance ToPath DeleteService where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteService where
-    toQuery = const mempty
-
-instance ToHeaders DeleteService
+        toQuery = const mempty
 
-instance ToJSON DeleteService where
-    toJSON DeleteService{..} = object
-        [ "cluster" .= _dsCluster
-        , "service" .= _dsService
-        ]
+-- | /See:/ 'deleteServiceResponse' smart constructor.
+data DeleteServiceResponse = DeleteServiceResponse'
+    { _dsrsService :: !(Maybe ContainerService)
+    , _dsrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeleteService where
-    type Sv DeleteService = ECS
-    type Rs DeleteService = DeleteServiceResponse
+-- | Creates a value of 'DeleteServiceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrsService'
+--
+-- * 'dsrsStatus'
+deleteServiceResponse
+    :: Int -- ^ 'dsrsStatus'
+    -> DeleteServiceResponse
+deleteServiceResponse pStatus_ =
+    DeleteServiceResponse'
+    { _dsrsService = Nothing
+    , _dsrsStatus = pStatus_
+    }
 
-    request  = post "DeleteService"
-    response = jsonResponse
+-- | Undocumented member.
+dsrsService :: Lens' DeleteServiceResponse (Maybe ContainerService)
+dsrsService = lens _dsrsService (\ s a -> s{_dsrsService = a});
 
-instance FromJSON DeleteServiceResponse where
-    parseJSON = withObject "DeleteServiceResponse" $ \o -> DeleteServiceResponse
-        <$> o .:? "service"
+-- | The response status code.
+dsrsStatus :: Lens' DeleteServiceResponse Int
+dsrsStatus = lens _dsrsStatus (\ s a -> s{_dsrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DeregisterContainerInstance.hs b/gen/Network/AWS/ECS/DeregisterContainerInstance.hs
--- a/gen/Network/AWS/ECS/DeregisterContainerInstance.hs
+++ b/gen/Network/AWS/ECS/DeregisterContainerInstance.hs
@@ -1,143 +1,177 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DeregisterContainerInstance
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deregisters an Amazon ECS container instance from the specified cluster. This
--- instance will no longer be available to run tasks.
+-- Deregisters an Amazon ECS container instance from the specified cluster.
+-- This instance will no longer be available to run tasks.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterContainerInstance.html>
+-- If you intend to use the container instance for some other purpose after
+-- deregistration, you should stop all of the tasks running on the
+-- container instance before deregistration to avoid any orphaned tasks
+-- from consuming resources.
+--
+-- Deregistering a container instance removes the instance from a cluster,
+-- but it does not terminate the EC2 instance; if you are finished using
+-- the instance, be sure to terminate it in the Amazon EC2 console to stop
+-- billing.
+--
+-- When you terminate a container instance, it is automatically
+-- deregistered from your cluster.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterContainerInstance.html AWS API Reference> for DeregisterContainerInstance.
 module Network.AWS.ECS.DeregisterContainerInstance
     (
-    -- * Request
-      DeregisterContainerInstance
-    -- ** Request constructor
-    , deregisterContainerInstance
-    -- ** Request lenses
-    , dci1Cluster
-    , dci1ContainerInstance
-    , dci1Force
+    -- * Creating a Request
+      deregisterContainerInstance
+    , DeregisterContainerInstance
+    -- * Request Lenses
+    , derCluster
+    , derForce
+    , derContainerInstance
 
-    -- * Response
-    , DeregisterContainerInstanceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deregisterContainerInstanceResponse
-    -- ** Response lenses
-    , dcirContainerInstance
+    , DeregisterContainerInstanceResponse
+    -- * Response Lenses
+    , dcirsContainerInstance
+    , dcirsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DeregisterContainerInstance = DeregisterContainerInstance
-    { _dci1Cluster           :: Maybe Text
-    , _dci1ContainerInstance :: Text
-    , _dci1Force             :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'deregisterContainerInstance' smart constructor.
+data DeregisterContainerInstance = DeregisterContainerInstance'
+    { _derCluster           :: !(Maybe Text)
+    , _derForce             :: !(Maybe Bool)
+    , _derContainerInstance :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeregisterContainerInstance' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeregisterContainerInstance' with the minimum fields required to make a request.
 --
--- * 'dci1Cluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dci1ContainerInstance' @::@ 'Text'
+-- * 'derCluster'
 --
--- * 'dci1Force' @::@ 'Maybe' 'Bool'
+-- * 'derForce'
 --
-deregisterContainerInstance :: Text -- ^ 'dci1ContainerInstance'
-                            -> DeregisterContainerInstance
-deregisterContainerInstance p1 = DeregisterContainerInstance
-    { _dci1ContainerInstance = p1
-    , _dci1Cluster           = Nothing
-    , _dci1Force             = Nothing
+-- * 'derContainerInstance'
+deregisterContainerInstance
+    :: Text -- ^ 'derContainerInstance'
+    -> DeregisterContainerInstance
+deregisterContainerInstance pContainerInstance_ =
+    DeregisterContainerInstance'
+    { _derCluster = Nothing
+    , _derForce = Nothing
+    , _derContainerInstance = pContainerInstance_
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the container instance you want to deregister. If you do not specify a
--- cluster, the default cluster is assumed.
-dci1Cluster :: Lens' DeregisterContainerInstance (Maybe Text)
-dci1Cluster = lens _dci1Cluster (\s a -> s { _dci1Cluster = a })
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the container instance you want to deregister. If you do not
+-- specify a cluster, the default cluster is assumed.
+derCluster :: Lens' DeregisterContainerInstance (Maybe Text)
+derCluster = lens _derCluster (\ s a -> s{_derCluster = a});
 
--- | The container instance UUID or full Amazon Resource Name (ARN) of the
--- container instance you want to deregister. The ARN contains the 'arn:aws:ecs'
--- namespace, followed by the region of the container instance, the AWS account
--- ID of the container instance owner, the 'container-instance' namespace, and
--- then the container instance UUID. For example, arn:aws:ecs:/region/:/aws_account_id/:container-instance//container_instance_UUID/.
-dci1ContainerInstance :: Lens' DeregisterContainerInstance Text
-dci1ContainerInstance =
-    lens _dci1ContainerInstance (\s a -> s { _dci1ContainerInstance = a })
+-- | Force the deregistration of the container instance. If you have tasks
+-- running on the container instance when you deregister it with the
+-- 'force' option, these tasks remain running and they will continue to
+-- pass Elastic Load Balancing load balancer health checks until you
+-- terminate the instance or the tasks stop through some other means, but
+-- they are orphaned (no longer monitored or accounted for by Amazon ECS).
+-- If an orphaned task on your container instance is part of an Amazon ECS
+-- service, then the service scheduler will start another copy of that task
+-- on a different container instance if possible.
+derForce :: Lens' DeregisterContainerInstance (Maybe Bool)
+derForce = lens _derForce (\ s a -> s{_derForce = a});
 
--- | Force the deregistration of the container instance. You can use the 'force'
--- parameter if you have several tasks running on a container instance and you
--- don't want to run 'StopTask' for each task before deregistering the container
--- instance.
-dci1Force :: Lens' DeregisterContainerInstance (Maybe Bool)
-dci1Force = lens _dci1Force (\s a -> s { _dci1Force = a })
+-- | The container instance UUID or full Amazon Resource Name (ARN) of the
+-- container instance you want to deregister. The ARN contains the
+-- 'arn:aws:ecs' namespace, followed by the region of the container
+-- instance, the AWS account ID of the container instance owner, the
+-- 'container-instance' namespace, and then the container instance UUID.
+-- For example,
+-- arn:aws:ecs:/region/:/aws_account_id/:container-instance\//container_instance_UUID/.
+derContainerInstance :: Lens' DeregisterContainerInstance Text
+derContainerInstance = lens _derContainerInstance (\ s a -> s{_derContainerInstance = a});
 
-newtype DeregisterContainerInstanceResponse = DeregisterContainerInstanceResponse
-    { _dcirContainerInstance :: Maybe ContainerInstance
-    } deriving (Eq, Read, Show)
+instance AWSRequest DeregisterContainerInstance where
+        type Sv DeregisterContainerInstance = ECS
+        type Rs DeregisterContainerInstance =
+             DeregisterContainerInstanceResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeregisterContainerInstanceResponse' <$>
+                   (x .?> "containerInstance") <*> (pure (fromEnum s)))
 
--- | 'DeregisterContainerInstanceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dcirContainerInstance' @::@ 'Maybe' 'ContainerInstance'
---
-deregisterContainerInstanceResponse :: DeregisterContainerInstanceResponse
-deregisterContainerInstanceResponse = DeregisterContainerInstanceResponse
-    { _dcirContainerInstance = Nothing
-    }
+instance ToHeaders DeregisterContainerInstance where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DeregisterContainerInstance"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dcirContainerInstance :: Lens' DeregisterContainerInstanceResponse (Maybe ContainerInstance)
-dcirContainerInstance =
-    lens _dcirContainerInstance (\s a -> s { _dcirContainerInstance = a })
+instance ToJSON DeregisterContainerInstance where
+        toJSON DeregisterContainerInstance'{..}
+          = object
+              ["cluster" .= _derCluster, "force" .= _derForce,
+               "containerInstance" .= _derContainerInstance]
 
 instance ToPath DeregisterContainerInstance where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeregisterContainerInstance where
-    toQuery = const mempty
-
-instance ToHeaders DeregisterContainerInstance
+        toQuery = const mempty
 
-instance ToJSON DeregisterContainerInstance where
-    toJSON DeregisterContainerInstance{..} = object
-        [ "cluster"           .= _dci1Cluster
-        , "containerInstance" .= _dci1ContainerInstance
-        , "force"             .= _dci1Force
-        ]
+-- | /See:/ 'deregisterContainerInstanceResponse' smart constructor.
+data DeregisterContainerInstanceResponse = DeregisterContainerInstanceResponse'
+    { _dcirsContainerInstance :: !(Maybe ContainerInstance)
+    , _dcirsStatus            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeregisterContainerInstance where
-    type Sv DeregisterContainerInstance = ECS
-    type Rs DeregisterContainerInstance = DeregisterContainerInstanceResponse
+-- | Creates a value of 'DeregisterContainerInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcirsContainerInstance'
+--
+-- * 'dcirsStatus'
+deregisterContainerInstanceResponse
+    :: Int -- ^ 'dcirsStatus'
+    -> DeregisterContainerInstanceResponse
+deregisterContainerInstanceResponse pStatus_ =
+    DeregisterContainerInstanceResponse'
+    { _dcirsContainerInstance = Nothing
+    , _dcirsStatus = pStatus_
+    }
 
-    request  = post "DeregisterContainerInstance"
-    response = jsonResponse
+-- | Undocumented member.
+dcirsContainerInstance :: Lens' DeregisterContainerInstanceResponse (Maybe ContainerInstance)
+dcirsContainerInstance = lens _dcirsContainerInstance (\ s a -> s{_dcirsContainerInstance = a});
 
-instance FromJSON DeregisterContainerInstanceResponse where
-    parseJSON = withObject "DeregisterContainerInstanceResponse" $ \o -> DeregisterContainerInstanceResponse
-        <$> o .:? "containerInstance"
+-- | The response status code.
+dcirsStatus :: Lens' DeregisterContainerInstanceResponse Int
+dcirsStatus = lens _dcirsStatus (\ s a -> s{_dcirsStatus = a});
diff --git a/gen/Network/AWS/ECS/DeregisterTaskDefinition.hs b/gen/Network/AWS/ECS/DeregisterTaskDefinition.hs
--- a/gen/Network/AWS/ECS/DeregisterTaskDefinition.hs
+++ b/gen/Network/AWS/ECS/DeregisterTaskDefinition.hs
@@ -1,118 +1,140 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DeregisterTaskDefinition
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | NOT YET IMPLEMENTED.
+-- Deregisters the specified task definition by family and revision. Upon
+-- deregistration, the task definition is marked as 'INACTIVE'. Existing
+-- tasks and services that reference an 'INACTIVE' task definition continue
+-- to run without disruption. Existing services that reference an
+-- 'INACTIVE' task definition can still scale up or down by modifying the
+-- service\'s desired count.
 --
--- Deregisters the specified task definition. You will no longer be able to run
--- tasks from this definition after deregistration.
+-- You cannot use an 'INACTIVE' task definition to run new tasks or create
+-- new services, and you cannot update an existing service to reference an
+-- 'INACTIVE' task definition (although there may be up to a 10 minute
+-- window following deregistration where these restrictions have not yet
+-- taken effect).
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterTaskDefinition.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterTaskDefinition.html AWS API Reference> for DeregisterTaskDefinition.
 module Network.AWS.ECS.DeregisterTaskDefinition
     (
-    -- * Request
-      DeregisterTaskDefinition
-    -- ** Request constructor
-    , deregisterTaskDefinition
-    -- ** Request lenses
-    , dtd1TaskDefinition
+    -- * Creating a Request
+      deregisterTaskDefinition
+    , DeregisterTaskDefinition
+    -- * Request Lenses
+    , derTaskDefinition
 
-    -- * Response
-    , DeregisterTaskDefinitionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deregisterTaskDefinitionResponse
-    -- ** Response lenses
-    , dtdrTaskDefinition
+    , DeregisterTaskDefinitionResponse
+    -- * Response Lenses
+    , dtdrsTaskDefinition
+    , dtdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeregisterTaskDefinition = DeregisterTaskDefinition
-    { _dtd1TaskDefinition :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deregisterTaskDefinition' smart constructor.
+newtype DeregisterTaskDefinition = DeregisterTaskDefinition'
+    { _derTaskDefinition :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeregisterTaskDefinition' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeregisterTaskDefinition' with the minimum fields required to make a request.
 --
--- * 'dtd1TaskDefinition' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deregisterTaskDefinition :: Text -- ^ 'dtd1TaskDefinition'
-                         -> DeregisterTaskDefinition
-deregisterTaskDefinition p1 = DeregisterTaskDefinition
-    { _dtd1TaskDefinition = p1
+-- * 'derTaskDefinition'
+deregisterTaskDefinition
+    :: Text -- ^ 'derTaskDefinition'
+    -> DeregisterTaskDefinition
+deregisterTaskDefinition pTaskDefinition_ =
+    DeregisterTaskDefinition'
+    { _derTaskDefinition = pTaskDefinition_
     }
 
--- | The 'family' and 'revision' ('family:revision') or full Amazon Resource Name (ARN)
--- of the task definition that you want to deregister.
-dtd1TaskDefinition :: Lens' DeregisterTaskDefinition Text
-dtd1TaskDefinition =
-    lens _dtd1TaskDefinition (\s a -> s { _dtd1TaskDefinition = a })
+-- | The 'family' and 'revision' ('family:revision') or full Amazon Resource
+-- Name (ARN) of the task definition that you want to deregister. You must
+-- specify a 'revision'.
+derTaskDefinition :: Lens' DeregisterTaskDefinition Text
+derTaskDefinition = lens _derTaskDefinition (\ s a -> s{_derTaskDefinition = a});
 
-newtype DeregisterTaskDefinitionResponse = DeregisterTaskDefinitionResponse
-    { _dtdrTaskDefinition :: Maybe TaskDefinition
-    } deriving (Eq, Read, Show)
+instance AWSRequest DeregisterTaskDefinition where
+        type Sv DeregisterTaskDefinition = ECS
+        type Rs DeregisterTaskDefinition =
+             DeregisterTaskDefinitionResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeregisterTaskDefinitionResponse' <$>
+                   (x .?> "taskDefinition") <*> (pure (fromEnum s)))
 
--- | 'DeregisterTaskDefinitionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dtdrTaskDefinition' @::@ 'Maybe' 'TaskDefinition'
---
-deregisterTaskDefinitionResponse :: DeregisterTaskDefinitionResponse
-deregisterTaskDefinitionResponse = DeregisterTaskDefinitionResponse
-    { _dtdrTaskDefinition = Nothing
-    }
+instance ToHeaders DeregisterTaskDefinition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DeregisterTaskDefinition"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The full description of the deregistered task.
-dtdrTaskDefinition :: Lens' DeregisterTaskDefinitionResponse (Maybe TaskDefinition)
-dtdrTaskDefinition =
-    lens _dtdrTaskDefinition (\s a -> s { _dtdrTaskDefinition = a })
+instance ToJSON DeregisterTaskDefinition where
+        toJSON DeregisterTaskDefinition'{..}
+          = object ["taskDefinition" .= _derTaskDefinition]
 
 instance ToPath DeregisterTaskDefinition where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeregisterTaskDefinition where
-    toQuery = const mempty
-
-instance ToHeaders DeregisterTaskDefinition
+        toQuery = const mempty
 
-instance ToJSON DeregisterTaskDefinition where
-    toJSON DeregisterTaskDefinition{..} = object
-        [ "taskDefinition" .= _dtd1TaskDefinition
-        ]
+-- | /See:/ 'deregisterTaskDefinitionResponse' smart constructor.
+data DeregisterTaskDefinitionResponse = DeregisterTaskDefinitionResponse'
+    { _dtdrsTaskDefinition :: !(Maybe TaskDefinition)
+    , _dtdrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DeregisterTaskDefinition where
-    type Sv DeregisterTaskDefinition = ECS
-    type Rs DeregisterTaskDefinition = DeregisterTaskDefinitionResponse
+-- | Creates a value of 'DeregisterTaskDefinitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtdrsTaskDefinition'
+--
+-- * 'dtdrsStatus'
+deregisterTaskDefinitionResponse
+    :: Int -- ^ 'dtdrsStatus'
+    -> DeregisterTaskDefinitionResponse
+deregisterTaskDefinitionResponse pStatus_ =
+    DeregisterTaskDefinitionResponse'
+    { _dtdrsTaskDefinition = Nothing
+    , _dtdrsStatus = pStatus_
+    }
 
-    request  = post "DeregisterTaskDefinition"
-    response = jsonResponse
+-- | The full description of the deregistered task.
+dtdrsTaskDefinition :: Lens' DeregisterTaskDefinitionResponse (Maybe TaskDefinition)
+dtdrsTaskDefinition = lens _dtdrsTaskDefinition (\ s a -> s{_dtdrsTaskDefinition = a});
 
-instance FromJSON DeregisterTaskDefinitionResponse where
-    parseJSON = withObject "DeregisterTaskDefinitionResponse" $ \o -> DeregisterTaskDefinitionResponse
-        <$> o .:? "taskDefinition"
+-- | The response status code.
+dtdrsStatus :: Lens' DeregisterTaskDefinitionResponse Int
+dtdrsStatus = lens _dtdrsStatus (\ s a -> s{_dtdrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DescribeClusters.hs b/gen/Network/AWS/ECS/DescribeClusters.hs
--- a/gen/Network/AWS/ECS/DescribeClusters.hs
+++ b/gen/Network/AWS/ECS/DescribeClusters.hs
@@ -1,128 +1,138 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DescribeClusters
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes one or more of your clusters.
+-- Describes one or more of your clusters.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeClusters.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeClusters.html AWS API Reference> for DescribeClusters.
 module Network.AWS.ECS.DescribeClusters
     (
-    -- * Request
-      DescribeClusters
-    -- ** Request constructor
-    , describeClusters
-    -- ** Request lenses
+    -- * Creating a Request
+      describeClusters
+    , DescribeClusters
+    -- * Request Lenses
     , dcClusters
 
-    -- * Response
-    , DescribeClustersResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeClustersResponse
-    -- ** Response lenses
-    , dcrClusters
-    , dcrFailures
+    , DescribeClustersResponse
+    -- * Response Lenses
+    , dcrsFailures
+    , dcrsClusters
+    , dcrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
-
-newtype DescribeClusters = DescribeClusters
-    { _dcClusters :: List "clusters" Text
-    } deriving (Eq, Ord, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList DescribeClusters where
-    type Item DescribeClusters = Text
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-    fromList = DescribeClusters . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _dcClusters
+-- | /See:/ 'describeClusters' smart constructor.
+newtype DescribeClusters = DescribeClusters'
+    { _dcClusters :: Maybe [Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeClusters' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeClusters' with the minimum fields required to make a request.
 --
--- * 'dcClusters' @::@ ['Text']
+-- Use one of the following lenses to modify other fields as desired:
 --
-describeClusters :: DescribeClusters
-describeClusters = DescribeClusters
-    { _dcClusters = mempty
+-- * 'dcClusters'
+describeClusters
+    :: DescribeClusters
+describeClusters =
+    DescribeClusters'
+    { _dcClusters = Nothing
     }
 
--- | A space-separated list of cluster names or full cluster Amazon Resource Name
--- (ARN) entries. If you do not specify a cluster, the default cluster is
--- assumed.
+-- | A space-separated list of cluster names or full cluster Amazon Resource
+-- Name (ARN) entries. If you do not specify a cluster, the default cluster
+-- is assumed.
 dcClusters :: Lens' DescribeClusters [Text]
-dcClusters = lens _dcClusters (\s a -> s { _dcClusters = a }) . _List
-
-data DescribeClustersResponse = DescribeClustersResponse
-    { _dcrClusters :: List "clusters" Cluster
-    , _dcrFailures :: List "failures" Failure
-    } deriving (Eq, Read, Show)
+dcClusters = lens _dcClusters (\ s a -> s{_dcClusters = a}) . _Default . _Coerce;
 
--- | 'DescribeClustersResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dcrClusters' @::@ ['Cluster']
---
--- * 'dcrFailures' @::@ ['Failure']
---
-describeClustersResponse :: DescribeClustersResponse
-describeClustersResponse = DescribeClustersResponse
-    { _dcrClusters = mempty
-    , _dcrFailures = mempty
-    }
+instance AWSRequest DescribeClusters where
+        type Sv DescribeClusters = ECS
+        type Rs DescribeClusters = DescribeClustersResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeClustersResponse' <$>
+                   (x .?> "failures" .!@ mempty) <*>
+                     (x .?> "clusters" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | The list of clusters.
-dcrClusters :: Lens' DescribeClustersResponse [Cluster]
-dcrClusters = lens _dcrClusters (\s a -> s { _dcrClusters = a }) . _List
+instance ToHeaders DescribeClusters where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DescribeClusters"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dcrFailures :: Lens' DescribeClustersResponse [Failure]
-dcrFailures = lens _dcrFailures (\s a -> s { _dcrFailures = a }) . _List
+instance ToJSON DescribeClusters where
+        toJSON DescribeClusters'{..}
+          = object ["clusters" .= _dcClusters]
 
 instance ToPath DescribeClusters where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeClusters where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeClusters
+-- | /See:/ 'describeClustersResponse' smart constructor.
+data DescribeClustersResponse = DescribeClustersResponse'
+    { _dcrsFailures :: !(Maybe [Failure])
+    , _dcrsClusters :: !(Maybe [Cluster])
+    , _dcrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeClusters where
-    toJSON DescribeClusters{..} = object
-        [ "clusters" .= _dcClusters
-        ]
+-- | Creates a value of 'DescribeClustersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrsFailures'
+--
+-- * 'dcrsClusters'
+--
+-- * 'dcrsStatus'
+describeClustersResponse
+    :: Int -- ^ 'dcrsStatus'
+    -> DescribeClustersResponse
+describeClustersResponse pStatus_ =
+    DescribeClustersResponse'
+    { _dcrsFailures = Nothing
+    , _dcrsClusters = Nothing
+    , _dcrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeClusters where
-    type Sv DescribeClusters = ECS
-    type Rs DescribeClusters = DescribeClustersResponse
+-- | Undocumented member.
+dcrsFailures :: Lens' DescribeClustersResponse [Failure]
+dcrsFailures = lens _dcrsFailures (\ s a -> s{_dcrsFailures = a}) . _Default . _Coerce;
 
-    request  = post "DescribeClusters"
-    response = jsonResponse
+-- | The list of clusters.
+dcrsClusters :: Lens' DescribeClustersResponse [Cluster]
+dcrsClusters = lens _dcrsClusters (\ s a -> s{_dcrsClusters = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeClustersResponse where
-    parseJSON = withObject "DescribeClustersResponse" $ \o -> DescribeClustersResponse
-        <$> o .:? "clusters" .!= mempty
-        <*> o .:? "failures" .!= mempty
+-- | The response status code.
+dcrsStatus :: Lens' DescribeClustersResponse Int
+dcrsStatus = lens _dcrsStatus (\ s a -> s{_dcrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DescribeContainerInstances.hs b/gen/Network/AWS/ECS/DescribeContainerInstances.hs
--- a/gen/Network/AWS/ECS/DescribeContainerInstances.hs
+++ b/gen/Network/AWS/ECS/DescribeContainerInstances.hs
@@ -1,138 +1,153 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DescribeContainerInstances
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes Amazon EC2 Container Service container instances. Returns metadata
--- about registered and remaining resources on each container instance requested.
+-- Describes Amazon EC2 Container Service container instances. Returns
+-- metadata about registered and remaining resources on each container
+-- instance requested.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html AWS API Reference> for DescribeContainerInstances.
 module Network.AWS.ECS.DescribeContainerInstances
     (
-    -- * Request
-      DescribeContainerInstances
-    -- ** Request constructor
-    , describeContainerInstances
-    -- ** Request lenses
+    -- * Creating a Request
+      describeContainerInstances
+    , DescribeContainerInstances
+    -- * Request Lenses
     , dciCluster
     , dciContainerInstances
 
-    -- * Response
-    , DescribeContainerInstancesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeContainerInstancesResponse
-    -- ** Response lenses
-    , dcirContainerInstances
-    , dcirFailures
+    , DescribeContainerInstancesResponse
+    -- * Response Lenses
+    , dcisrsFailures
+    , dcisrsContainerInstances
+    , dcisrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DescribeContainerInstances = DescribeContainerInstances
-    { _dciCluster            :: Maybe Text
-    , _dciContainerInstances :: List "containerInstances" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'describeContainerInstances' smart constructor.
+data DescribeContainerInstances = DescribeContainerInstances'
+    { _dciCluster            :: !(Maybe Text)
+    , _dciContainerInstances :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeContainerInstances' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeContainerInstances' with the minimum fields required to make a request.
 --
--- * 'dciCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dciContainerInstances' @::@ ['Text']
+-- * 'dciCluster'
 --
-describeContainerInstances :: DescribeContainerInstances
-describeContainerInstances = DescribeContainerInstances
-    { _dciCluster            = Nothing
+-- * 'dciContainerInstances'
+describeContainerInstances
+    :: DescribeContainerInstances
+describeContainerInstances =
+    DescribeContainerInstances'
+    { _dciCluster = Nothing
     , _dciContainerInstances = mempty
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the container instances you want to describe. If you do not specify a
--- cluster, the default cluster is assumed.
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the container instances you want to describe. If you do not
+-- specify a cluster, the default cluster is assumed.
 dciCluster :: Lens' DescribeContainerInstances (Maybe Text)
-dciCluster = lens _dciCluster (\s a -> s { _dciCluster = a })
+dciCluster = lens _dciCluster (\ s a -> s{_dciCluster = a});
 
--- | A space-separated list of container instance UUIDs or full Amazon Resource
--- Name (ARN) entries.
+-- | A space-separated list of container instance UUIDs or full Amazon
+-- Resource Name (ARN) entries.
 dciContainerInstances :: Lens' DescribeContainerInstances [Text]
-dciContainerInstances =
-    lens _dciContainerInstances (\s a -> s { _dciContainerInstances = a })
-        . _List
-
-data DescribeContainerInstancesResponse = DescribeContainerInstancesResponse
-    { _dcirContainerInstances :: List "containerInstances" ContainerInstance
-    , _dcirFailures           :: List "failures" Failure
-    } deriving (Eq, Read, Show)
+dciContainerInstances = lens _dciContainerInstances (\ s a -> s{_dciContainerInstances = a}) . _Coerce;
 
--- | 'DescribeContainerInstancesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dcirContainerInstances' @::@ ['ContainerInstance']
---
--- * 'dcirFailures' @::@ ['Failure']
---
-describeContainerInstancesResponse :: DescribeContainerInstancesResponse
-describeContainerInstancesResponse = DescribeContainerInstancesResponse
-    { _dcirContainerInstances = mempty
-    , _dcirFailures           = mempty
-    }
+instance AWSRequest DescribeContainerInstances where
+        type Sv DescribeContainerInstances = ECS
+        type Rs DescribeContainerInstances =
+             DescribeContainerInstancesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeContainerInstancesResponse' <$>
+                   (x .?> "failures" .!@ mempty) <*>
+                     (x .?> "containerInstances" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | The list of container instances.
-dcirContainerInstances :: Lens' DescribeContainerInstancesResponse [ContainerInstance]
-dcirContainerInstances =
-    lens _dcirContainerInstances (\s a -> s { _dcirContainerInstances = a })
-        . _List
+instance ToHeaders DescribeContainerInstances where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DescribeContainerInstances"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-dcirFailures :: Lens' DescribeContainerInstancesResponse [Failure]
-dcirFailures = lens _dcirFailures (\s a -> s { _dcirFailures = a }) . _List
+instance ToJSON DescribeContainerInstances where
+        toJSON DescribeContainerInstances'{..}
+          = object
+              ["cluster" .= _dciCluster,
+               "containerInstances" .= _dciContainerInstances]
 
 instance ToPath DescribeContainerInstances where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeContainerInstances where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeContainerInstances
+-- | /See:/ 'describeContainerInstancesResponse' smart constructor.
+data DescribeContainerInstancesResponse = DescribeContainerInstancesResponse'
+    { _dcisrsFailures           :: !(Maybe [Failure])
+    , _dcisrsContainerInstances :: !(Maybe [ContainerInstance])
+    , _dcisrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeContainerInstances where
-    toJSON DescribeContainerInstances{..} = object
-        [ "cluster"            .= _dciCluster
-        , "containerInstances" .= _dciContainerInstances
-        ]
+-- | Creates a value of 'DescribeContainerInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcisrsFailures'
+--
+-- * 'dcisrsContainerInstances'
+--
+-- * 'dcisrsStatus'
+describeContainerInstancesResponse
+    :: Int -- ^ 'dcisrsStatus'
+    -> DescribeContainerInstancesResponse
+describeContainerInstancesResponse pStatus_ =
+    DescribeContainerInstancesResponse'
+    { _dcisrsFailures = Nothing
+    , _dcisrsContainerInstances = Nothing
+    , _dcisrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeContainerInstances where
-    type Sv DescribeContainerInstances = ECS
-    type Rs DescribeContainerInstances = DescribeContainerInstancesResponse
+-- | Undocumented member.
+dcisrsFailures :: Lens' DescribeContainerInstancesResponse [Failure]
+dcisrsFailures = lens _dcisrsFailures (\ s a -> s{_dcisrsFailures = a}) . _Default . _Coerce;
 
-    request  = post "DescribeContainerInstances"
-    response = jsonResponse
+-- | The list of container instances.
+dcisrsContainerInstances :: Lens' DescribeContainerInstancesResponse [ContainerInstance]
+dcisrsContainerInstances = lens _dcisrsContainerInstances (\ s a -> s{_dcisrsContainerInstances = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeContainerInstancesResponse where
-    parseJSON = withObject "DescribeContainerInstancesResponse" $ \o -> DescribeContainerInstancesResponse
-        <$> o .:? "containerInstances" .!= mempty
-        <*> o .:? "failures" .!= mempty
+-- | The response status code.
+dcisrsStatus :: Lens' DescribeContainerInstancesResponse Int
+dcisrsStatus = lens _dcisrsStatus (\ s a -> s{_dcisrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DescribeServices.hs b/gen/Network/AWS/ECS/DescribeServices.hs
--- a/gen/Network/AWS/ECS/DescribeServices.hs
+++ b/gen/Network/AWS/ECS/DescribeServices.hs
@@ -1,131 +1,146 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DescribeServices
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes the specified services running in your cluster.
+-- Describes the specified services running in your cluster.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeServices.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeServices.html AWS API Reference> for DescribeServices.
 module Network.AWS.ECS.DescribeServices
     (
-    -- * Request
-      DescribeServices
-    -- ** Request constructor
-    , describeServices
-    -- ** Request lenses
-    , ds1Cluster
-    , ds1Services
+    -- * Creating a Request
+      describeServices
+    , DescribeServices
+    -- * Request Lenses
+    , dCluster
+    , dServices
 
-    -- * Response
-    , DescribeServicesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeServicesResponse
-    -- ** Response lenses
-    , dsrFailures
-    , dsrServices
+    , DescribeServicesResponse
+    -- * Response Lenses
+    , dssrsFailures
+    , dssrsServices
+    , dssrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DescribeServices = DescribeServices
-    { _ds1Cluster  :: Maybe Text
-    , _ds1Services :: List "services" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'describeServices' smart constructor.
+data DescribeServices = DescribeServices'
+    { _dCluster  :: !(Maybe Text)
+    , _dServices :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeServices' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeServices' with the minimum fields required to make a request.
 --
--- * 'ds1Cluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ds1Services' @::@ ['Text']
+-- * 'dCluster'
 --
-describeServices :: DescribeServices
-describeServices = DescribeServices
-    { _ds1Cluster  = Nothing
-    , _ds1Services = mempty
+-- * 'dServices'
+describeServices
+    :: DescribeServices
+describeServices =
+    DescribeServices'
+    { _dCluster = Nothing
+    , _dServices = mempty
     }
 
 -- | The name of the cluster that hosts the service you want to describe.
-ds1Cluster :: Lens' DescribeServices (Maybe Text)
-ds1Cluster = lens _ds1Cluster (\s a -> s { _ds1Cluster = a })
+dCluster :: Lens' DescribeServices (Maybe Text)
+dCluster = lens _dCluster (\ s a -> s{_dCluster = a});
 
 -- | A list of services you want to describe.
-ds1Services :: Lens' DescribeServices [Text]
-ds1Services = lens _ds1Services (\s a -> s { _ds1Services = a }) . _List
-
-data DescribeServicesResponse = DescribeServicesResponse
-    { _dsrFailures :: List "failures" Failure
-    , _dsrServices :: List "services" ContainerService
-    } deriving (Eq, Read, Show)
+dServices :: Lens' DescribeServices [Text]
+dServices = lens _dServices (\ s a -> s{_dServices = a}) . _Coerce;
 
--- | 'DescribeServicesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsrFailures' @::@ ['Failure']
---
--- * 'dsrServices' @::@ ['ContainerService']
---
-describeServicesResponse :: DescribeServicesResponse
-describeServicesResponse = DescribeServicesResponse
-    { _dsrServices = mempty
-    , _dsrFailures = mempty
-    }
+instance AWSRequest DescribeServices where
+        type Sv DescribeServices = ECS
+        type Rs DescribeServices = DescribeServicesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeServicesResponse' <$>
+                   (x .?> "failures" .!@ mempty) <*>
+                     (x .?> "services" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | Any failures associated with the call.
-dsrFailures :: Lens' DescribeServicesResponse [Failure]
-dsrFailures = lens _dsrFailures (\s a -> s { _dsrFailures = a }) . _List
+instance ToHeaders DescribeServices where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DescribeServices"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The list of services described.
-dsrServices :: Lens' DescribeServicesResponse [ContainerService]
-dsrServices = lens _dsrServices (\s a -> s { _dsrServices = a }) . _List
+instance ToJSON DescribeServices where
+        toJSON DescribeServices'{..}
+          = object
+              ["cluster" .= _dCluster, "services" .= _dServices]
 
 instance ToPath DescribeServices where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeServices where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeServices
+-- | /See:/ 'describeServicesResponse' smart constructor.
+data DescribeServicesResponse = DescribeServicesResponse'
+    { _dssrsFailures :: !(Maybe [Failure])
+    , _dssrsServices :: !(Maybe [ContainerService])
+    , _dssrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeServices where
-    toJSON DescribeServices{..} = object
-        [ "cluster"  .= _ds1Cluster
-        , "services" .= _ds1Services
-        ]
+-- | Creates a value of 'DescribeServicesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dssrsFailures'
+--
+-- * 'dssrsServices'
+--
+-- * 'dssrsStatus'
+describeServicesResponse
+    :: Int -- ^ 'dssrsStatus'
+    -> DescribeServicesResponse
+describeServicesResponse pStatus_ =
+    DescribeServicesResponse'
+    { _dssrsFailures = Nothing
+    , _dssrsServices = Nothing
+    , _dssrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeServices where
-    type Sv DescribeServices = ECS
-    type Rs DescribeServices = DescribeServicesResponse
+-- | Any failures associated with the call.
+dssrsFailures :: Lens' DescribeServicesResponse [Failure]
+dssrsFailures = lens _dssrsFailures (\ s a -> s{_dssrsFailures = a}) . _Default . _Coerce;
 
-    request  = post "DescribeServices"
-    response = jsonResponse
+-- | The list of services described.
+dssrsServices :: Lens' DescribeServicesResponse [ContainerService]
+dssrsServices = lens _dssrsServices (\ s a -> s{_dssrsServices = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeServicesResponse where
-    parseJSON = withObject "DescribeServicesResponse" $ \o -> DescribeServicesResponse
-        <$> o .:? "failures" .!= mempty
-        <*> o .:? "services" .!= mempty
+-- | The response status code.
+dssrsStatus :: Lens' DescribeServicesResponse Int
+dssrsStatus = lens _dssrsStatus (\ s a -> s{_dssrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DescribeTaskDefinition.hs b/gen/Network/AWS/ECS/DescribeTaskDefinition.hs
--- a/gen/Network/AWS/ECS/DescribeTaskDefinition.hs
+++ b/gen/Network/AWS/ECS/DescribeTaskDefinition.hs
@@ -1,118 +1,135 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DescribeTaskDefinition
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes a task definition. You can specify a 'family' and 'revision' to find
--- information on a specific task definition, or you can simply specify the
--- family to find the latest revision in that family.
+-- Describes a task definition. You can specify a 'family' and 'revision'
+-- to find information on a specific task definition, or you can simply
+-- specify the family to find the latest 'ACTIVE' revision in that family.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTaskDefinition.html>
+-- You can only describe 'INACTIVE' task definitions while an active task
+-- or service references them.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTaskDefinition.html AWS API Reference> for DescribeTaskDefinition.
 module Network.AWS.ECS.DescribeTaskDefinition
     (
-    -- * Request
-      DescribeTaskDefinition
-    -- ** Request constructor
-    , describeTaskDefinition
-    -- ** Request lenses
+    -- * Creating a Request
+      describeTaskDefinition
+    , DescribeTaskDefinition
+    -- * Request Lenses
     , dtdTaskDefinition
 
-    -- * Response
-    , DescribeTaskDefinitionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeTaskDefinitionResponse
-    -- ** Response lenses
-    , dtdr1TaskDefinition
+    , DescribeTaskDefinitionResponse
+    -- * Response Lenses
+    , desrsTaskDefinition
+    , desrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DescribeTaskDefinition = DescribeTaskDefinition
+-- | /See:/ 'describeTaskDefinition' smart constructor.
+newtype DescribeTaskDefinition = DescribeTaskDefinition'
     { _dtdTaskDefinition :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeTaskDefinition' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeTaskDefinition' with the minimum fields required to make a request.
 --
--- * 'dtdTaskDefinition' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-describeTaskDefinition :: Text -- ^ 'dtdTaskDefinition'
-                       -> DescribeTaskDefinition
-describeTaskDefinition p1 = DescribeTaskDefinition
-    { _dtdTaskDefinition = p1
+-- * 'dtdTaskDefinition'
+describeTaskDefinition
+    :: Text -- ^ 'dtdTaskDefinition'
+    -> DescribeTaskDefinition
+describeTaskDefinition pTaskDefinition_ =
+    DescribeTaskDefinition'
+    { _dtdTaskDefinition = pTaskDefinition_
     }
 
--- | The 'family' for the latest revision, 'family' and 'revision' ('family:revision') for
--- a specific revision in the family, or full Amazon Resource Name (ARN) of the
--- task definition that you want to describe.
+-- | The 'family' for the latest 'ACTIVE' revision, 'family' and 'revision'
+-- ('family:revision') for a specific revision in the family, or full
+-- Amazon Resource Name (ARN) of the task definition that you want to
+-- describe.
 dtdTaskDefinition :: Lens' DescribeTaskDefinition Text
-dtdTaskDefinition =
-    lens _dtdTaskDefinition (\s a -> s { _dtdTaskDefinition = a })
+dtdTaskDefinition = lens _dtdTaskDefinition (\ s a -> s{_dtdTaskDefinition = a});
 
-newtype DescribeTaskDefinitionResponse = DescribeTaskDefinitionResponse
-    { _dtdr1TaskDefinition :: Maybe TaskDefinition
-    } deriving (Eq, Read, Show)
+instance AWSRequest DescribeTaskDefinition where
+        type Sv DescribeTaskDefinition = ECS
+        type Rs DescribeTaskDefinition =
+             DescribeTaskDefinitionResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeTaskDefinitionResponse' <$>
+                   (x .?> "taskDefinition") <*> (pure (fromEnum s)))
 
--- | 'DescribeTaskDefinitionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dtdr1TaskDefinition' @::@ 'Maybe' 'TaskDefinition'
---
-describeTaskDefinitionResponse :: DescribeTaskDefinitionResponse
-describeTaskDefinitionResponse = DescribeTaskDefinitionResponse
-    { _dtdr1TaskDefinition = Nothing
-    }
+instance ToHeaders DescribeTaskDefinition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DescribeTaskDefinition"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The full task definition description.
-dtdr1TaskDefinition :: Lens' DescribeTaskDefinitionResponse (Maybe TaskDefinition)
-dtdr1TaskDefinition =
-    lens _dtdr1TaskDefinition (\s a -> s { _dtdr1TaskDefinition = a })
+instance ToJSON DescribeTaskDefinition where
+        toJSON DescribeTaskDefinition'{..}
+          = object ["taskDefinition" .= _dtdTaskDefinition]
 
 instance ToPath DescribeTaskDefinition where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeTaskDefinition where
-    toQuery = const mempty
-
-instance ToHeaders DescribeTaskDefinition
+        toQuery = const mempty
 
-instance ToJSON DescribeTaskDefinition where
-    toJSON DescribeTaskDefinition{..} = object
-        [ "taskDefinition" .= _dtdTaskDefinition
-        ]
+-- | /See:/ 'describeTaskDefinitionResponse' smart constructor.
+data DescribeTaskDefinitionResponse = DescribeTaskDefinitionResponse'
+    { _desrsTaskDefinition :: !(Maybe TaskDefinition)
+    , _desrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeTaskDefinition where
-    type Sv DescribeTaskDefinition = ECS
-    type Rs DescribeTaskDefinition = DescribeTaskDefinitionResponse
+-- | Creates a value of 'DescribeTaskDefinitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'desrsTaskDefinition'
+--
+-- * 'desrsStatus'
+describeTaskDefinitionResponse
+    :: Int -- ^ 'desrsStatus'
+    -> DescribeTaskDefinitionResponse
+describeTaskDefinitionResponse pStatus_ =
+    DescribeTaskDefinitionResponse'
+    { _desrsTaskDefinition = Nothing
+    , _desrsStatus = pStatus_
+    }
 
-    request  = post "DescribeTaskDefinition"
-    response = jsonResponse
+-- | The full task definition description.
+desrsTaskDefinition :: Lens' DescribeTaskDefinitionResponse (Maybe TaskDefinition)
+desrsTaskDefinition = lens _desrsTaskDefinition (\ s a -> s{_desrsTaskDefinition = a});
 
-instance FromJSON DescribeTaskDefinitionResponse where
-    parseJSON = withObject "DescribeTaskDefinitionResponse" $ \o -> DescribeTaskDefinitionResponse
-        <$> o .:? "taskDefinition"
+-- | The response status code.
+desrsStatus :: Lens' DescribeTaskDefinitionResponse Int
+desrsStatus = lens _desrsStatus (\ s a -> s{_desrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DescribeTasks.hs b/gen/Network/AWS/ECS/DescribeTasks.hs
--- a/gen/Network/AWS/ECS/DescribeTasks.hs
+++ b/gen/Network/AWS/ECS/DescribeTasks.hs
@@ -1,133 +1,149 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DescribeTasks
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Describes a specified task or tasks.
+-- Describes a specified task or tasks.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html AWS API Reference> for DescribeTasks.
 module Network.AWS.ECS.DescribeTasks
     (
-    -- * Request
-      DescribeTasks
-    -- ** Request constructor
-    , describeTasks
-    -- ** Request lenses
+    -- * Creating a Request
+      describeTasks
+    , DescribeTasks
+    -- * Request Lenses
     , dtCluster
     , dtTasks
 
-    -- * Response
-    , DescribeTasksResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeTasksResponse
-    -- ** Response lenses
-    , dtrFailures
-    , dtrTasks
+    , DescribeTasksResponse
+    -- * Response Lenses
+    , dtrsFailures
+    , dtrsTasks
+    , dtrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DescribeTasks = DescribeTasks
-    { _dtCluster :: Maybe Text
-    , _dtTasks   :: List "tasks" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'describeTasks' smart constructor.
+data DescribeTasks = DescribeTasks'
+    { _dtCluster :: !(Maybe Text)
+    , _dtTasks   :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DescribeTasks' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DescribeTasks' with the minimum fields required to make a request.
 --
--- * 'dtCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dtTasks' @::@ ['Text']
+-- * 'dtCluster'
 --
-describeTasks :: DescribeTasks
-describeTasks = DescribeTasks
+-- * 'dtTasks'
+describeTasks
+    :: DescribeTasks
+describeTasks =
+    DescribeTasks'
     { _dtCluster = Nothing
-    , _dtTasks   = mempty
+    , _dtTasks = mempty
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the task you want to describe. If you do not specify a cluster, the default
--- cluster is assumed.
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the task you want to describe. If you do not specify a cluster,
+-- the default cluster is assumed.
 dtCluster :: Lens' DescribeTasks (Maybe Text)
-dtCluster = lens _dtCluster (\s a -> s { _dtCluster = a })
+dtCluster = lens _dtCluster (\ s a -> s{_dtCluster = a});
 
 -- | A space-separated list of task UUIDs or full Amazon Resource Name (ARN)
 -- entries.
 dtTasks :: Lens' DescribeTasks [Text]
-dtTasks = lens _dtTasks (\s a -> s { _dtTasks = a }) . _List
-
-data DescribeTasksResponse = DescribeTasksResponse
-    { _dtrFailures :: List "failures" Failure
-    , _dtrTasks    :: List "tasks" Task
-    } deriving (Eq, Read, Show)
+dtTasks = lens _dtTasks (\ s a -> s{_dtTasks = a}) . _Coerce;
 
--- | 'DescribeTasksResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dtrFailures' @::@ ['Failure']
---
--- * 'dtrTasks' @::@ ['Task']
---
-describeTasksResponse :: DescribeTasksResponse
-describeTasksResponse = DescribeTasksResponse
-    { _dtrTasks    = mempty
-    , _dtrFailures = mempty
-    }
+instance AWSRequest DescribeTasks where
+        type Sv DescribeTasks = ECS
+        type Rs DescribeTasks = DescribeTasksResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeTasksResponse' <$>
+                   (x .?> "failures" .!@ mempty) <*>
+                     (x .?> "tasks" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
-dtrFailures :: Lens' DescribeTasksResponse [Failure]
-dtrFailures = lens _dtrFailures (\s a -> s { _dtrFailures = a }) . _List
+instance ToHeaders DescribeTasks where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DescribeTasks"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The list of tasks.
-dtrTasks :: Lens' DescribeTasksResponse [Task]
-dtrTasks = lens _dtrTasks (\s a -> s { _dtrTasks = a }) . _List
+instance ToJSON DescribeTasks where
+        toJSON DescribeTasks'{..}
+          = object
+              ["cluster" .= _dtCluster, "tasks" .= _dtTasks]
 
 instance ToPath DescribeTasks where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeTasks where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DescribeTasks
+-- | /See:/ 'describeTasksResponse' smart constructor.
+data DescribeTasksResponse = DescribeTasksResponse'
+    { _dtrsFailures :: !(Maybe [Failure])
+    , _dtrsTasks    :: !(Maybe [Task])
+    , _dtrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DescribeTasks where
-    toJSON DescribeTasks{..} = object
-        [ "cluster" .= _dtCluster
-        , "tasks"   .= _dtTasks
-        ]
+-- | Creates a value of 'DescribeTasksResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrsFailures'
+--
+-- * 'dtrsTasks'
+--
+-- * 'dtrsStatus'
+describeTasksResponse
+    :: Int -- ^ 'dtrsStatus'
+    -> DescribeTasksResponse
+describeTasksResponse pStatus_ =
+    DescribeTasksResponse'
+    { _dtrsFailures = Nothing
+    , _dtrsTasks = Nothing
+    , _dtrsStatus = pStatus_
+    }
 
-instance AWSRequest DescribeTasks where
-    type Sv DescribeTasks = ECS
-    type Rs DescribeTasks = DescribeTasksResponse
+-- | Undocumented member.
+dtrsFailures :: Lens' DescribeTasksResponse [Failure]
+dtrsFailures = lens _dtrsFailures (\ s a -> s{_dtrsFailures = a}) . _Default . _Coerce;
 
-    request  = post "DescribeTasks"
-    response = jsonResponse
+-- | The list of tasks.
+dtrsTasks :: Lens' DescribeTasksResponse [Task]
+dtrsTasks = lens _dtrsTasks (\ s a -> s{_dtrsTasks = a}) . _Default . _Coerce;
 
-instance FromJSON DescribeTasksResponse where
-    parseJSON = withObject "DescribeTasksResponse" $ \o -> DescribeTasksResponse
-        <$> o .:? "failures" .!= mempty
-        <*> o .:? "tasks" .!= mempty
+-- | The response status code.
+dtrsStatus :: Lens' DescribeTasksResponse Int
+dtrsStatus = lens _dtrsStatus (\ s a -> s{_dtrsStatus = a});
diff --git a/gen/Network/AWS/ECS/DiscoverPollEndpoint.hs b/gen/Network/AWS/ECS/DiscoverPollEndpoint.hs
--- a/gen/Network/AWS/ECS/DiscoverPollEndpoint.hs
+++ b/gen/Network/AWS/ECS/DiscoverPollEndpoint.hs
@@ -1,131 +1,156 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.DiscoverPollEndpoint
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action is only used by the Amazon EC2 Container Service agent, and it is
--- not intended for use outside of the agent.
+-- This action is only used by the Amazon EC2 Container Service agent, and
+-- it is not intended for use outside of the agent.
 --
--- Returns an endpoint for the Amazon EC2 Container Service agent to poll for
--- updates.
+-- Returns an endpoint for the Amazon EC2 Container Service agent to poll
+-- for updates.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DiscoverPollEndpoint.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DiscoverPollEndpoint.html AWS API Reference> for DiscoverPollEndpoint.
 module Network.AWS.ECS.DiscoverPollEndpoint
     (
-    -- * Request
-      DiscoverPollEndpoint
-    -- ** Request constructor
-    , discoverPollEndpoint
-    -- ** Request lenses
+    -- * Creating a Request
+      discoverPollEndpoint
+    , DiscoverPollEndpoint
+    -- * Request Lenses
     , dpeCluster
     , dpeContainerInstance
 
-    -- * Response
-    , DiscoverPollEndpointResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , discoverPollEndpointResponse
-    -- ** Response lenses
-    , dperEndpoint
+    , DiscoverPollEndpointResponse
+    -- * Response Lenses
+    , dpersTelemetryEndpoint
+    , dpersEndpoint
+    , dpersStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data DiscoverPollEndpoint = DiscoverPollEndpoint
-    { _dpeCluster           :: Maybe Text
-    , _dpeContainerInstance :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'discoverPollEndpoint' smart constructor.
+data DiscoverPollEndpoint = DiscoverPollEndpoint'
+    { _dpeCluster           :: !(Maybe Text)
+    , _dpeContainerInstance :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DiscoverPollEndpoint' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DiscoverPollEndpoint' with the minimum fields required to make a request.
 --
--- * 'dpeCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dpeContainerInstance' @::@ 'Maybe' 'Text'
+-- * 'dpeCluster'
 --
-discoverPollEndpoint :: DiscoverPollEndpoint
-discoverPollEndpoint = DiscoverPollEndpoint
-    { _dpeContainerInstance = Nothing
-    , _dpeCluster           = Nothing
+-- * 'dpeContainerInstance'
+discoverPollEndpoint
+    :: DiscoverPollEndpoint
+discoverPollEndpoint =
+    DiscoverPollEndpoint'
+    { _dpeCluster = Nothing
+    , _dpeContainerInstance = Nothing
     }
 
 -- | The cluster that the container instance belongs to.
 dpeCluster :: Lens' DiscoverPollEndpoint (Maybe Text)
-dpeCluster = lens _dpeCluster (\s a -> s { _dpeCluster = a })
+dpeCluster = lens _dpeCluster (\ s a -> s{_dpeCluster = a});
 
 -- | The container instance UUID or full Amazon Resource Name (ARN) of the
--- container instance. The ARN contains the 'arn:aws:ecs' namespace, followed by
--- the region of the container instance, the AWS account ID of the container
--- instance owner, the 'container-instance' namespace, and then the container
--- instance UUID. For example, arn:aws:ecs:/region/:/aws_account_id/:container-instance/
--- /container_instance_UUID/.
+-- container instance. The ARN contains the 'arn:aws:ecs' namespace,
+-- followed by the region of the container instance, the AWS account ID of
+-- the container instance owner, the 'container-instance' namespace, and
+-- then the container instance UUID. For example,
+-- arn:aws:ecs:/region/:/aws_account_id/:container-instance\//container_instance_UUID/.
 dpeContainerInstance :: Lens' DiscoverPollEndpoint (Maybe Text)
-dpeContainerInstance =
-    lens _dpeContainerInstance (\s a -> s { _dpeContainerInstance = a })
+dpeContainerInstance = lens _dpeContainerInstance (\ s a -> s{_dpeContainerInstance = a});
 
-newtype DiscoverPollEndpointResponse = DiscoverPollEndpointResponse
-    { _dperEndpoint :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+instance AWSRequest DiscoverPollEndpoint where
+        type Sv DiscoverPollEndpoint = ECS
+        type Rs DiscoverPollEndpoint =
+             DiscoverPollEndpointResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DiscoverPollEndpointResponse' <$>
+                   (x .?> "telemetryEndpoint") <*> (x .?> "endpoint")
+                     <*> (pure (fromEnum s)))
 
--- | 'DiscoverPollEndpointResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dperEndpoint' @::@ 'Maybe' 'Text'
---
-discoverPollEndpointResponse :: DiscoverPollEndpointResponse
-discoverPollEndpointResponse = DiscoverPollEndpointResponse
-    { _dperEndpoint = Nothing
-    }
+instance ToHeaders DiscoverPollEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.DiscoverPollEndpoint"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The endpoint for the Amazon ECS agent to poll.
-dperEndpoint :: Lens' DiscoverPollEndpointResponse (Maybe Text)
-dperEndpoint = lens _dperEndpoint (\s a -> s { _dperEndpoint = a })
+instance ToJSON DiscoverPollEndpoint where
+        toJSON DiscoverPollEndpoint'{..}
+          = object
+              ["cluster" .= _dpeCluster,
+               "containerInstance" .= _dpeContainerInstance]
 
 instance ToPath DiscoverPollEndpoint where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DiscoverPollEndpoint where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders DiscoverPollEndpoint
+-- | /See:/ 'discoverPollEndpointResponse' smart constructor.
+data DiscoverPollEndpointResponse = DiscoverPollEndpointResponse'
+    { _dpersTelemetryEndpoint :: !(Maybe Text)
+    , _dpersEndpoint          :: !(Maybe Text)
+    , _dpersStatus            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON DiscoverPollEndpoint where
-    toJSON DiscoverPollEndpoint{..} = object
-        [ "containerInstance" .= _dpeContainerInstance
-        , "cluster"           .= _dpeCluster
-        ]
+-- | Creates a value of 'DiscoverPollEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpersTelemetryEndpoint'
+--
+-- * 'dpersEndpoint'
+--
+-- * 'dpersStatus'
+discoverPollEndpointResponse
+    :: Int -- ^ 'dpersStatus'
+    -> DiscoverPollEndpointResponse
+discoverPollEndpointResponse pStatus_ =
+    DiscoverPollEndpointResponse'
+    { _dpersTelemetryEndpoint = Nothing
+    , _dpersEndpoint = Nothing
+    , _dpersStatus = pStatus_
+    }
 
-instance AWSRequest DiscoverPollEndpoint where
-    type Sv DiscoverPollEndpoint = ECS
-    type Rs DiscoverPollEndpoint = DiscoverPollEndpointResponse
+-- | The telemetry endpoint for the Amazon ECS agent.
+dpersTelemetryEndpoint :: Lens' DiscoverPollEndpointResponse (Maybe Text)
+dpersTelemetryEndpoint = lens _dpersTelemetryEndpoint (\ s a -> s{_dpersTelemetryEndpoint = a});
 
-    request  = post "DiscoverPollEndpoint"
-    response = jsonResponse
+-- | The endpoint for the Amazon ECS agent to poll.
+dpersEndpoint :: Lens' DiscoverPollEndpointResponse (Maybe Text)
+dpersEndpoint = lens _dpersEndpoint (\ s a -> s{_dpersEndpoint = a});
 
-instance FromJSON DiscoverPollEndpointResponse where
-    parseJSON = withObject "DiscoverPollEndpointResponse" $ \o -> DiscoverPollEndpointResponse
-        <$> o .:? "endpoint"
+-- | The response status code.
+dpersStatus :: Lens' DiscoverPollEndpointResponse Int
+dpersStatus = lens _dpersStatus (\ s a -> s{_dpersStatus = a});
diff --git a/gen/Network/AWS/ECS/ListClusters.hs b/gen/Network/AWS/ECS/ListClusters.hs
--- a/gen/Network/AWS/ECS/ListClusters.hs
+++ b/gen/Network/AWS/ECS/ListClusters.hs
@@ -1,144 +1,172 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.ListClusters
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of existing clusters.
+-- Returns a list of existing clusters.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListClusters.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListClusters.html AWS API Reference> for ListClusters.
+--
+-- This operation returns paginated results.
 module Network.AWS.ECS.ListClusters
     (
-    -- * Request
-      ListClusters
-    -- ** Request constructor
-    , listClusters
-    -- ** Request lenses
-    , lcMaxResults
+    -- * Creating a Request
+      listClusters
+    , ListClusters
+    -- * Request Lenses
     , lcNextToken
+    , lcMaxResults
 
-    -- * Response
-    , ListClustersResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listClustersResponse
-    -- ** Response lenses
-    , lcrClusterArns
-    , lcrNextToken
+    , ListClustersResponse
+    -- * Response Lenses
+    , lcrsClusterARNs
+    , lcrsNextToken
+    , lcrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListClusters = ListClusters
-    { _lcMaxResults :: Maybe Int
-    , _lcNextToken  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listClusters' smart constructor.
+data ListClusters = ListClusters'
+    { _lcNextToken  :: !(Maybe Text)
+    , _lcMaxResults :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListClusters' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListClusters' with the minimum fields required to make a request.
 --
--- * 'lcMaxResults' @::@ 'Maybe' 'Int'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lcNextToken' @::@ 'Maybe' 'Text'
+-- * 'lcNextToken'
 --
-listClusters :: ListClusters
-listClusters = ListClusters
-    { _lcNextToken  = Nothing
+-- * 'lcMaxResults'
+listClusters
+    :: ListClusters
+listClusters =
+    ListClusters'
+    { _lcNextToken = Nothing
     , _lcMaxResults = Nothing
     }
 
--- | The maximum number of cluster results returned by 'ListClusters' in paginated
--- output. When this parameter is used, 'ListClusters' only returns 'maxResults'
--- results in a single page along with a 'nextToken' response element. The
--- remaining results of the initial request can be seen by sending another 'ListClusters' request with the returned 'nextToken' value. This value can be between 1 and
--- 100. If this parameter is not used, then 'ListClusters' returns up to 100
--- results and a 'nextToken' value if applicable.
-lcMaxResults :: Lens' ListClusters (Maybe Int)
-lcMaxResults = lens _lcMaxResults (\s a -> s { _lcMaxResults = a })
-
--- | The 'nextToken' value returned from a previous paginated 'ListClusters' request
--- where 'maxResults' was used and the results exceeded the value of that
--- parameter. Pagination continues from the end of the previous results that
--- returned the 'nextToken' value. This value is 'null' when there are no more
--- results to return.
+-- | The 'nextToken' value returned from a previous paginated 'ListClusters'
+-- request where 'maxResults' was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the 'nextToken' value. This value is 'null' when
+-- there are no more results to return.
 lcNextToken :: Lens' ListClusters (Maybe Text)
-lcNextToken = lens _lcNextToken (\s a -> s { _lcNextToken = a })
+lcNextToken = lens _lcNextToken (\ s a -> s{_lcNextToken = a});
 
-data ListClustersResponse = ListClustersResponse
-    { _lcrClusterArns :: List "clusterArns" Text
-    , _lcrNextToken   :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The maximum number of cluster results returned by 'ListClusters' in
+-- paginated output. When this parameter is used, 'ListClusters' only
+-- returns 'maxResults' results in a single page along with a 'nextToken'
+-- response element. The remaining results of the initial request can be
+-- seen by sending another 'ListClusters' request with the returned
+-- 'nextToken' value. This value can be between 1 and 100. If this
+-- parameter is not used, then 'ListClusters' returns up to 100 results and
+-- a 'nextToken' value if applicable.
+lcMaxResults :: Lens' ListClusters (Maybe Int)
+lcMaxResults = lens _lcMaxResults (\ s a -> s{_lcMaxResults = a});
 
--- | 'ListClustersResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lcrClusterArns' @::@ ['Text']
---
--- * 'lcrNextToken' @::@ 'Maybe' 'Text'
---
-listClustersResponse :: ListClustersResponse
-listClustersResponse = ListClustersResponse
-    { _lcrClusterArns = mempty
-    , _lcrNextToken   = Nothing
-    }
+instance AWSPager ListClusters where
+        page rq rs
+          | stop (rs ^. lcrsNextToken) = Nothing
+          | stop (rs ^. lcrsClusterARNs) = Nothing
+          | otherwise =
+            Just $ rq & lcNextToken .~ rs ^. lcrsNextToken
 
--- | The list of full Amazon Resource Name (ARN) entries for each cluster
--- associated with your account.
-lcrClusterArns :: Lens' ListClustersResponse [Text]
-lcrClusterArns = lens _lcrClusterArns (\s a -> s { _lcrClusterArns = a }) . _List
+instance AWSRequest ListClusters where
+        type Sv ListClusters = ECS
+        type Rs ListClusters = ListClustersResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListClustersResponse' <$>
+                   (x .?> "clusterArns" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
 
--- | The 'nextToken' value to include in a future 'ListClusters' request. When the
--- results of a 'ListClusters' request exceed 'maxResults', this value can be used
--- to retrieve the next page of results. This value is 'null' when there are no
--- more results to return.
-lcrNextToken :: Lens' ListClustersResponse (Maybe Text)
-lcrNextToken = lens _lcrNextToken (\s a -> s { _lcrNextToken = a })
+instance ToHeaders ListClusters where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.ListClusters" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON ListClusters where
+        toJSON ListClusters'{..}
+          = object
+              ["nextToken" .= _lcNextToken,
+               "maxResults" .= _lcMaxResults]
+
 instance ToPath ListClusters where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListClusters where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListClusters
+-- | /See:/ 'listClustersResponse' smart constructor.
+data ListClustersResponse = ListClustersResponse'
+    { _lcrsClusterARNs :: !(Maybe [Text])
+    , _lcrsNextToken   :: !(Maybe Text)
+    , _lcrsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListClusters where
-    toJSON ListClusters{..} = object
-        [ "nextToken"  .= _lcNextToken
-        , "maxResults" .= _lcMaxResults
-        ]
+-- | Creates a value of 'ListClustersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcrsClusterARNs'
+--
+-- * 'lcrsNextToken'
+--
+-- * 'lcrsStatus'
+listClustersResponse
+    :: Int -- ^ 'lcrsStatus'
+    -> ListClustersResponse
+listClustersResponse pStatus_ =
+    ListClustersResponse'
+    { _lcrsClusterARNs = Nothing
+    , _lcrsNextToken = Nothing
+    , _lcrsStatus = pStatus_
+    }
 
-instance AWSRequest ListClusters where
-    type Sv ListClusters = ECS
-    type Rs ListClusters = ListClustersResponse
+-- | The list of full Amazon Resource Name (ARN) entries for each cluster
+-- associated with your account.
+lcrsClusterARNs :: Lens' ListClustersResponse [Text]
+lcrsClusterARNs = lens _lcrsClusterARNs (\ s a -> s{_lcrsClusterARNs = a}) . _Default . _Coerce;
 
-    request  = post "ListClusters"
-    response = jsonResponse
+-- | The 'nextToken' value to include in a future 'ListClusters' request.
+-- When the results of a 'ListClusters' request exceed 'maxResults', this
+-- value can be used to retrieve the next page of results. This value is
+-- 'null' when there are no more results to return.
+lcrsNextToken :: Lens' ListClustersResponse (Maybe Text)
+lcrsNextToken = lens _lcrsNextToken (\ s a -> s{_lcrsNextToken = a});
 
-instance FromJSON ListClustersResponse where
-    parseJSON = withObject "ListClustersResponse" $ \o -> ListClustersResponse
-        <$> o .:? "clusterArns" .!= mempty
-        <*> o .:? "nextToken"
+-- | The response status code.
+lcrsStatus :: Lens' ListClustersResponse Int
+lcrsStatus = lens _lcrsStatus (\ s a -> s{_lcrsStatus = a});
diff --git a/gen/Network/AWS/ECS/ListContainerInstances.hs b/gen/Network/AWS/ECS/ListContainerInstances.hs
--- a/gen/Network/AWS/ECS/ListContainerInstances.hs
+++ b/gen/Network/AWS/ECS/ListContainerInstances.hs
@@ -1,160 +1,186 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.ListContainerInstances
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of container instances in a specified cluster.
+-- Returns a list of container instances in a specified cluster.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListContainerInstances.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListContainerInstances.html AWS API Reference> for ListContainerInstances.
+--
+-- This operation returns paginated results.
 module Network.AWS.ECS.ListContainerInstances
     (
-    -- * Request
-      ListContainerInstances
-    -- ** Request constructor
-    , listContainerInstances
-    -- ** Request lenses
+    -- * Creating a Request
+      listContainerInstances
+    , ListContainerInstances
+    -- * Request Lenses
     , lciCluster
-    , lciMaxResults
     , lciNextToken
+    , lciMaxResults
 
-    -- * Response
-    , ListContainerInstancesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listContainerInstancesResponse
-    -- ** Response lenses
-    , lcirContainerInstanceArns
-    , lcirNextToken
+    , ListContainerInstancesResponse
+    -- * Response Lenses
+    , lcirsContainerInstanceARNs
+    , lcirsNextToken
+    , lcirsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListContainerInstances = ListContainerInstances
-    { _lciCluster    :: Maybe Text
-    , _lciMaxResults :: Maybe Int
-    , _lciNextToken  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listContainerInstances' smart constructor.
+data ListContainerInstances = ListContainerInstances'
+    { _lciCluster    :: !(Maybe Text)
+    , _lciNextToken  :: !(Maybe Text)
+    , _lciMaxResults :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListContainerInstances' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListContainerInstances' with the minimum fields required to make a request.
 --
--- * 'lciCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lciMaxResults' @::@ 'Maybe' 'Int'
+-- * 'lciCluster'
 --
--- * 'lciNextToken' @::@ 'Maybe' 'Text'
+-- * 'lciNextToken'
 --
-listContainerInstances :: ListContainerInstances
-listContainerInstances = ListContainerInstances
-    { _lciCluster    = Nothing
-    , _lciNextToken  = Nothing
+-- * 'lciMaxResults'
+listContainerInstances
+    :: ListContainerInstances
+listContainerInstances =
+    ListContainerInstances'
+    { _lciCluster = Nothing
+    , _lciNextToken = Nothing
     , _lciMaxResults = Nothing
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the container instances you want to list. If you do not specify a cluster,
--- the default cluster is assumed..
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the container instances you want to list. If you do not specify a
+-- cluster, the default cluster is assumed..
 lciCluster :: Lens' ListContainerInstances (Maybe Text)
-lciCluster = lens _lciCluster (\s a -> s { _lciCluster = a })
-
--- | The maximum number of container instance results returned by 'ListContainerInstances' in paginated output. When this parameter is used, 'ListContainerInstances'
--- only returns 'maxResults' results in a single page along with a 'nextToken'
--- response element. The remaining results of the initial request can be seen by
--- sending another 'ListContainerInstances' request with the returned 'nextToken'
--- value. This value can be between 1 and 100. If this parameter is not used,
--- then 'ListContainerInstances' returns up to 100 results and a 'nextToken' value
--- if applicable.
-lciMaxResults :: Lens' ListContainerInstances (Maybe Int)
-lciMaxResults = lens _lciMaxResults (\s a -> s { _lciMaxResults = a })
+lciCluster = lens _lciCluster (\ s a -> s{_lciCluster = a});
 
--- | The 'nextToken' value returned from a previous paginated 'ListContainerInstances'
--- request where 'maxResults' was used and the results exceeded the value of that
--- parameter. Pagination continues from the end of the previous results that
--- returned the 'nextToken' value. This value is 'null' when there are no more
--- results to return.
+-- | The 'nextToken' value returned from a previous paginated
+-- 'ListContainerInstances' request where 'maxResults' was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the 'nextToken' value.
+-- This value is 'null' when there are no more results to return.
 lciNextToken :: Lens' ListContainerInstances (Maybe Text)
-lciNextToken = lens _lciNextToken (\s a -> s { _lciNextToken = a })
+lciNextToken = lens _lciNextToken (\ s a -> s{_lciNextToken = a});
 
-data ListContainerInstancesResponse = ListContainerInstancesResponse
-    { _lcirContainerInstanceArns :: List "containerInstanceArns" Text
-    , _lcirNextToken             :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The maximum number of container instance results returned by
+-- 'ListContainerInstances' in paginated output. When this parameter is
+-- used, 'ListContainerInstances' only returns 'maxResults' results in a
+-- single page along with a 'nextToken' response element. The remaining
+-- results of the initial request can be seen by sending another
+-- 'ListContainerInstances' request with the returned 'nextToken' value.
+-- This value can be between 1 and 100. If this parameter is not used, then
+-- 'ListContainerInstances' returns up to 100 results and a 'nextToken'
+-- value if applicable.
+lciMaxResults :: Lens' ListContainerInstances (Maybe Int)
+lciMaxResults = lens _lciMaxResults (\ s a -> s{_lciMaxResults = a});
 
--- | 'ListContainerInstancesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lcirContainerInstanceArns' @::@ ['Text']
---
--- * 'lcirNextToken' @::@ 'Maybe' 'Text'
---
-listContainerInstancesResponse :: ListContainerInstancesResponse
-listContainerInstancesResponse = ListContainerInstancesResponse
-    { _lcirContainerInstanceArns = mempty
-    , _lcirNextToken             = Nothing
-    }
+instance AWSPager ListContainerInstances where
+        page rq rs
+          | stop (rs ^. lcirsNextToken) = Nothing
+          | stop (rs ^. lcirsContainerInstanceARNs) = Nothing
+          | otherwise =
+            Just $ rq & lciNextToken .~ rs ^. lcirsNextToken
 
--- | The list of container instance full Amazon Resource Name (ARN) entries for
--- each container instance associated with the specified cluster.
-lcirContainerInstanceArns :: Lens' ListContainerInstancesResponse [Text]
-lcirContainerInstanceArns =
-    lens _lcirContainerInstanceArns
-        (\s a -> s { _lcirContainerInstanceArns = a })
-            . _List
+instance AWSRequest ListContainerInstances where
+        type Sv ListContainerInstances = ECS
+        type Rs ListContainerInstances =
+             ListContainerInstancesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListContainerInstancesResponse' <$>
+                   (x .?> "containerInstanceArns" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
 
--- | The 'nextToken' value to include in a future 'ListContainerInstances' request.
--- When the results of a 'ListContainerInstances' request exceed 'maxResults', this
--- value can be used to retrieve the next page of results. This value is 'null'
--- when there are no more results to return.
-lcirNextToken :: Lens' ListContainerInstancesResponse (Maybe Text)
-lcirNextToken = lens _lcirNextToken (\s a -> s { _lcirNextToken = a })
+instance ToHeaders ListContainerInstances where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.ListContainerInstances"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON ListContainerInstances where
+        toJSON ListContainerInstances'{..}
+          = object
+              ["cluster" .= _lciCluster,
+               "nextToken" .= _lciNextToken,
+               "maxResults" .= _lciMaxResults]
+
 instance ToPath ListContainerInstances where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListContainerInstances where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListContainerInstances
+-- | /See:/ 'listContainerInstancesResponse' smart constructor.
+data ListContainerInstancesResponse = ListContainerInstancesResponse'
+    { _lcirsContainerInstanceARNs :: !(Maybe [Text])
+    , _lcirsNextToken             :: !(Maybe Text)
+    , _lcirsStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListContainerInstances where
-    toJSON ListContainerInstances{..} = object
-        [ "cluster"    .= _lciCluster
-        , "nextToken"  .= _lciNextToken
-        , "maxResults" .= _lciMaxResults
-        ]
+-- | Creates a value of 'ListContainerInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcirsContainerInstanceARNs'
+--
+-- * 'lcirsNextToken'
+--
+-- * 'lcirsStatus'
+listContainerInstancesResponse
+    :: Int -- ^ 'lcirsStatus'
+    -> ListContainerInstancesResponse
+listContainerInstancesResponse pStatus_ =
+    ListContainerInstancesResponse'
+    { _lcirsContainerInstanceARNs = Nothing
+    , _lcirsNextToken = Nothing
+    , _lcirsStatus = pStatus_
+    }
 
-instance AWSRequest ListContainerInstances where
-    type Sv ListContainerInstances = ECS
-    type Rs ListContainerInstances = ListContainerInstancesResponse
+-- | The list of container instance full Amazon Resource Name (ARN) entries
+-- for each container instance associated with the specified cluster.
+lcirsContainerInstanceARNs :: Lens' ListContainerInstancesResponse [Text]
+lcirsContainerInstanceARNs = lens _lcirsContainerInstanceARNs (\ s a -> s{_lcirsContainerInstanceARNs = a}) . _Default . _Coerce;
 
-    request  = post "ListContainerInstances"
-    response = jsonResponse
+-- | The 'nextToken' value to include in a future 'ListContainerInstances'
+-- request. When the results of a 'ListContainerInstances' request exceed
+-- 'maxResults', this value can be used to retrieve the next page of
+-- results. This value is 'null' when there are no more results to return.
+lcirsNextToken :: Lens' ListContainerInstancesResponse (Maybe Text)
+lcirsNextToken = lens _lcirsNextToken (\ s a -> s{_lcirsNextToken = a});
 
-instance FromJSON ListContainerInstancesResponse where
-    parseJSON = withObject "ListContainerInstancesResponse" $ \o -> ListContainerInstancesResponse
-        <$> o .:? "containerInstanceArns" .!= mempty
-        <*> o .:? "nextToken"
+-- | The response status code.
+lcirsStatus :: Lens' ListContainerInstancesResponse Int
+lcirsStatus = lens _lcirsStatus (\ s a -> s{_lcirsStatus = a});
diff --git a/gen/Network/AWS/ECS/ListServices.hs b/gen/Network/AWS/ECS/ListServices.hs
--- a/gen/Network/AWS/ECS/ListServices.hs
+++ b/gen/Network/AWS/ECS/ListServices.hs
@@ -1,155 +1,184 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.ListServices
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Lists the services that are running in a specified cluster.
+-- Lists the services that are running in a specified cluster.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListServices.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListServices.html AWS API Reference> for ListServices.
+--
+-- This operation returns paginated results.
 module Network.AWS.ECS.ListServices
     (
-    -- * Request
-      ListServices
-    -- ** Request constructor
-    , listServices
-    -- ** Request lenses
+    -- * Creating a Request
+      listServices
+    , ListServices
+    -- * Request Lenses
     , lsCluster
-    , lsMaxResults
     , lsNextToken
+    , lsMaxResults
 
-    -- * Response
-    , ListServicesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listServicesResponse
-    -- ** Response lenses
-    , lsrNextToken
-    , lsrServiceArns
+    , ListServicesResponse
+    -- * Response Lenses
+    , lsrsServiceARNs
+    , lsrsNextToken
+    , lsrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListServices = ListServices
-    { _lsCluster    :: Maybe Text
-    , _lsMaxResults :: Maybe Int
-    , _lsNextToken  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listServices' smart constructor.
+data ListServices = ListServices'
+    { _lsCluster    :: !(Maybe Text)
+    , _lsNextToken  :: !(Maybe Text)
+    , _lsMaxResults :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListServices' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListServices' with the minimum fields required to make a request.
 --
--- * 'lsCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lsMaxResults' @::@ 'Maybe' 'Int'
+-- * 'lsCluster'
 --
--- * 'lsNextToken' @::@ 'Maybe' 'Text'
+-- * 'lsNextToken'
 --
-listServices :: ListServices
-listServices = ListServices
-    { _lsCluster    = Nothing
-    , _lsNextToken  = Nothing
+-- * 'lsMaxResults'
+listServices
+    :: ListServices
+listServices =
+    ListServices'
+    { _lsCluster = Nothing
+    , _lsNextToken = Nothing
     , _lsMaxResults = Nothing
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the services you want to list. If you do not specify a cluster, the default
--- cluster is assumed..
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the services you want to list. If you do not specify a cluster,
+-- the default cluster is assumed..
 lsCluster :: Lens' ListServices (Maybe Text)
-lsCluster = lens _lsCluster (\s a -> s { _lsCluster = a })
-
--- | The maximum number of container instance results returned by 'ListServices' in
--- paginated output. When this parameter is used, 'ListServices' only returns 'maxResults' results in a single page along with a 'nextToken' response element. The
--- remaining results of the initial request can be seen by sending another 'ListServices' request with the returned 'nextToken' value. This value can be between 1 and
--- 100. If this parameter is not used, then 'ListServices' returns up to 100
--- results and a 'nextToken' value if applicable.
-lsMaxResults :: Lens' ListServices (Maybe Int)
-lsMaxResults = lens _lsMaxResults (\s a -> s { _lsMaxResults = a })
+lsCluster = lens _lsCluster (\ s a -> s{_lsCluster = a});
 
--- | The 'nextToken' value returned from a previous paginated 'ListServices' request
--- where 'maxResults' was used and the results exceeded the value of that
--- parameter. Pagination continues from the end of the previous results that
--- returned the 'nextToken' value. This value is 'null' when there are no more
--- results to return.
+-- | The 'nextToken' value returned from a previous paginated 'ListServices'
+-- request where 'maxResults' was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the 'nextToken' value. This value is 'null' when
+-- there are no more results to return.
 lsNextToken :: Lens' ListServices (Maybe Text)
-lsNextToken = lens _lsNextToken (\s a -> s { _lsNextToken = a })
+lsNextToken = lens _lsNextToken (\ s a -> s{_lsNextToken = a});
 
-data ListServicesResponse = ListServicesResponse
-    { _lsrNextToken   :: Maybe Text
-    , _lsrServiceArns :: List "serviceArns" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The maximum number of container instance results returned by
+-- 'ListServices' in paginated output. When this parameter is used,
+-- 'ListServices' only returns 'maxResults' results in a single page along
+-- with a 'nextToken' response element. The remaining results of the
+-- initial request can be seen by sending another 'ListServices' request
+-- with the returned 'nextToken' value. This value can be between 1 and
+-- 100. If this parameter is not used, then 'ListServices' returns up to
+-- 100 results and a 'nextToken' value if applicable.
+lsMaxResults :: Lens' ListServices (Maybe Int)
+lsMaxResults = lens _lsMaxResults (\ s a -> s{_lsMaxResults = a});
 
--- | 'ListServicesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lsrNextToken' @::@ 'Maybe' 'Text'
---
--- * 'lsrServiceArns' @::@ ['Text']
---
-listServicesResponse :: ListServicesResponse
-listServicesResponse = ListServicesResponse
-    { _lsrServiceArns = mempty
-    , _lsrNextToken   = Nothing
-    }
+instance AWSPager ListServices where
+        page rq rs
+          | stop (rs ^. lsrsNextToken) = Nothing
+          | stop (rs ^. lsrsServiceARNs) = Nothing
+          | otherwise =
+            Just $ rq & lsNextToken .~ rs ^. lsrsNextToken
 
--- | The 'nextToken' value to include in a future 'ListServices' request. When the
--- results of a 'ListServices' request exceed 'maxResults', this value can be used
--- to retrieve the next page of results. This value is 'null' when there are no
--- more results to return.
-lsrNextToken :: Lens' ListServicesResponse (Maybe Text)
-lsrNextToken = lens _lsrNextToken (\s a -> s { _lsrNextToken = a })
+instance AWSRequest ListServices where
+        type Sv ListServices = ECS
+        type Rs ListServices = ListServicesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListServicesResponse' <$>
+                   (x .?> "serviceArns" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
 
--- | The list of full Amazon Resource Name (ARN) entries for each service
--- associated with the specified cluster.
-lsrServiceArns :: Lens' ListServicesResponse [Text]
-lsrServiceArns = lens _lsrServiceArns (\s a -> s { _lsrServiceArns = a }) . _List
+instance ToHeaders ListServices where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.ListServices" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON ListServices where
+        toJSON ListServices'{..}
+          = object
+              ["cluster" .= _lsCluster,
+               "nextToken" .= _lsNextToken,
+               "maxResults" .= _lsMaxResults]
+
 instance ToPath ListServices where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListServices where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListServices
+-- | /See:/ 'listServicesResponse' smart constructor.
+data ListServicesResponse = ListServicesResponse'
+    { _lsrsServiceARNs :: !(Maybe [Text])
+    , _lsrsNextToken   :: !(Maybe Text)
+    , _lsrsStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListServices where
-    toJSON ListServices{..} = object
-        [ "cluster"    .= _lsCluster
-        , "nextToken"  .= _lsNextToken
-        , "maxResults" .= _lsMaxResults
-        ]
+-- | Creates a value of 'ListServicesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsrsServiceARNs'
+--
+-- * 'lsrsNextToken'
+--
+-- * 'lsrsStatus'
+listServicesResponse
+    :: Int -- ^ 'lsrsStatus'
+    -> ListServicesResponse
+listServicesResponse pStatus_ =
+    ListServicesResponse'
+    { _lsrsServiceARNs = Nothing
+    , _lsrsNextToken = Nothing
+    , _lsrsStatus = pStatus_
+    }
 
-instance AWSRequest ListServices where
-    type Sv ListServices = ECS
-    type Rs ListServices = ListServicesResponse
+-- | The list of full Amazon Resource Name (ARN) entries for each service
+-- associated with the specified cluster.
+lsrsServiceARNs :: Lens' ListServicesResponse [Text]
+lsrsServiceARNs = lens _lsrsServiceARNs (\ s a -> s{_lsrsServiceARNs = a}) . _Default . _Coerce;
 
-    request  = post "ListServices"
-    response = jsonResponse
+-- | The 'nextToken' value to include in a future 'ListServices' request.
+-- When the results of a 'ListServices' request exceed 'maxResults', this
+-- value can be used to retrieve the next page of results. This value is
+-- 'null' when there are no more results to return.
+lsrsNextToken :: Lens' ListServicesResponse (Maybe Text)
+lsrsNextToken = lens _lsrsNextToken (\ s a -> s{_lsrsNextToken = a});
 
-instance FromJSON ListServicesResponse where
-    parseJSON = withObject "ListServicesResponse" $ \o -> ListServicesResponse
-        <$> o .:? "nextToken"
-        <*> o .:? "serviceArns" .!= mempty
+-- | The response status code.
+lsrsStatus :: Lens' ListServicesResponse Int
+lsrsStatus = lens _lsrsStatus (\ s a -> s{_lsrsStatus = a});
diff --git a/gen/Network/AWS/ECS/ListTaskDefinitionFamilies.hs b/gen/Network/AWS/ECS/ListTaskDefinitionFamilies.hs
--- a/gen/Network/AWS/ECS/ListTaskDefinitionFamilies.hs
+++ b/gen/Network/AWS/ECS/ListTaskDefinitionFamilies.hs
@@ -1,151 +1,190 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.ListTaskDefinitionFamilies
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of task definition families that are registered to your
--- account. You can filter the results with the 'familyPrefix' parameter.
+-- Returns a list of task definition families that are registered to your
+-- account (which may include task definition families that no longer have
+-- any 'ACTIVE' task definitions). You can filter the results with the
+-- 'familyPrefix' parameter.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTaskDefinitionFamilies.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTaskDefinitionFamilies.html AWS API Reference> for ListTaskDefinitionFamilies.
+--
+-- This operation returns paginated results.
 module Network.AWS.ECS.ListTaskDefinitionFamilies
     (
-    -- * Request
-      ListTaskDefinitionFamilies
-    -- ** Request constructor
-    , listTaskDefinitionFamilies
-    -- ** Request lenses
+    -- * Creating a Request
+      listTaskDefinitionFamilies
+    , ListTaskDefinitionFamilies
+    -- * Request Lenses
     , ltdfFamilyPrefix
-    , ltdfMaxResults
     , ltdfNextToken
+    , ltdfMaxResults
 
-    -- * Response
-    , ListTaskDefinitionFamiliesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTaskDefinitionFamiliesResponse
-    -- ** Response lenses
-    , ltdfrFamilies
-    , ltdfrNextToken
+    , ListTaskDefinitionFamiliesResponse
+    -- * Response Lenses
+    , ltdfrsFamilies
+    , ltdfrsNextToken
+    , ltdfrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListTaskDefinitionFamilies = ListTaskDefinitionFamilies
-    { _ltdfFamilyPrefix :: Maybe Text
-    , _ltdfMaxResults   :: Maybe Int
-    , _ltdfNextToken    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listTaskDefinitionFamilies' smart constructor.
+data ListTaskDefinitionFamilies = ListTaskDefinitionFamilies'
+    { _ltdfFamilyPrefix :: !(Maybe Text)
+    , _ltdfNextToken    :: !(Maybe Text)
+    , _ltdfMaxResults   :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListTaskDefinitionFamilies' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListTaskDefinitionFamilies' with the minimum fields required to make a request.
 --
--- * 'ltdfFamilyPrefix' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ltdfMaxResults' @::@ 'Maybe' 'Int'
+-- * 'ltdfFamilyPrefix'
 --
--- * 'ltdfNextToken' @::@ 'Maybe' 'Text'
+-- * 'ltdfNextToken'
 --
-listTaskDefinitionFamilies :: ListTaskDefinitionFamilies
-listTaskDefinitionFamilies = ListTaskDefinitionFamilies
+-- * 'ltdfMaxResults'
+listTaskDefinitionFamilies
+    :: ListTaskDefinitionFamilies
+listTaskDefinitionFamilies =
+    ListTaskDefinitionFamilies'
     { _ltdfFamilyPrefix = Nothing
-    , _ltdfNextToken    = Nothing
-    , _ltdfMaxResults   = Nothing
+    , _ltdfNextToken = Nothing
+    , _ltdfMaxResults = Nothing
     }
 
--- | The 'familyPrefix' is a string that is used to filter the results of 'ListTaskDefinitionFamilies'. If you specify a 'familyPrefix', only task definition family names that begin
--- with the 'familyPrefix' string are returned.
+-- | The 'familyPrefix' is a string that is used to filter the results of
+-- 'ListTaskDefinitionFamilies'. If you specify a 'familyPrefix', only task
+-- definition family names that begin with the 'familyPrefix' string are
+-- returned.
 ltdfFamilyPrefix :: Lens' ListTaskDefinitionFamilies (Maybe Text)
-ltdfFamilyPrefix = lens _ltdfFamilyPrefix (\s a -> s { _ltdfFamilyPrefix = a })
-
--- | The maximum number of task definition family results returned by 'ListTaskDefinitionFamilies' in paginated output. When this parameter is used, 'ListTaskDefinitions' only
--- returns 'maxResults' results in a single page along with a 'nextToken' response
--- element. The remaining results of the initial request can be seen by sending
--- another 'ListTaskDefinitionFamilies' request with the returned 'nextToken' value.
--- This value can be between 1 and 100. If this parameter is not used, then 'ListTaskDefinitionFamilies' returns up to 100 results and a 'nextToken' value if applicable.
-ltdfMaxResults :: Lens' ListTaskDefinitionFamilies (Maybe Int)
-ltdfMaxResults = lens _ltdfMaxResults (\s a -> s { _ltdfMaxResults = a })
+ltdfFamilyPrefix = lens _ltdfFamilyPrefix (\ s a -> s{_ltdfFamilyPrefix = a});
 
--- | The 'nextToken' value returned from a previous paginated 'ListTaskDefinitionFamilies' request where 'maxResults' was used and the results exceeded the value of that
--- parameter. Pagination continues from the end of the previous results that
--- returned the 'nextToken' value. This value is 'null' when there are no more
--- results to return.
+-- | The 'nextToken' value returned from a previous paginated
+-- 'ListTaskDefinitionFamilies' request where 'maxResults' was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the 'nextToken' value.
+-- This value is 'null' when there are no more results to return.
 ltdfNextToken :: Lens' ListTaskDefinitionFamilies (Maybe Text)
-ltdfNextToken = lens _ltdfNextToken (\s a -> s { _ltdfNextToken = a })
+ltdfNextToken = lens _ltdfNextToken (\ s a -> s{_ltdfNextToken = a});
 
-data ListTaskDefinitionFamiliesResponse = ListTaskDefinitionFamiliesResponse
-    { _ltdfrFamilies  :: List "families" Text
-    , _ltdfrNextToken :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The maximum number of task definition family results returned by
+-- 'ListTaskDefinitionFamilies' in paginated output. When this parameter is
+-- used, 'ListTaskDefinitions' only returns 'maxResults' results in a
+-- single page along with a 'nextToken' response element. The remaining
+-- results of the initial request can be seen by sending another
+-- 'ListTaskDefinitionFamilies' request with the returned 'nextToken'
+-- value. This value can be between 1 and 100. If this parameter is not
+-- used, then 'ListTaskDefinitionFamilies' returns up to 100 results and a
+-- 'nextToken' value if applicable.
+ltdfMaxResults :: Lens' ListTaskDefinitionFamilies (Maybe Int)
+ltdfMaxResults = lens _ltdfMaxResults (\ s a -> s{_ltdfMaxResults = a});
 
--- | 'ListTaskDefinitionFamiliesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ltdfrFamilies' @::@ ['Text']
---
--- * 'ltdfrNextToken' @::@ 'Maybe' 'Text'
---
-listTaskDefinitionFamiliesResponse :: ListTaskDefinitionFamiliesResponse
-listTaskDefinitionFamiliesResponse = ListTaskDefinitionFamiliesResponse
-    { _ltdfrFamilies  = mempty
-    , _ltdfrNextToken = Nothing
-    }
+instance AWSPager ListTaskDefinitionFamilies where
+        page rq rs
+          | stop (rs ^. ltdfrsNextToken) = Nothing
+          | stop (rs ^. ltdfrsFamilies) = Nothing
+          | otherwise =
+            Just $ rq & ltdfNextToken .~ rs ^. ltdfrsNextToken
 
--- | The list of task definition family names that match the 'ListTaskDefinitionFamilies' request.
-ltdfrFamilies :: Lens' ListTaskDefinitionFamiliesResponse [Text]
-ltdfrFamilies = lens _ltdfrFamilies (\s a -> s { _ltdfrFamilies = a }) . _List
+instance AWSRequest ListTaskDefinitionFamilies where
+        type Sv ListTaskDefinitionFamilies = ECS
+        type Rs ListTaskDefinitionFamilies =
+             ListTaskDefinitionFamiliesResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTaskDefinitionFamiliesResponse' <$>
+                   (x .?> "families" .!@ mempty) <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
 
--- | The 'nextToken' value to include in a future 'ListTaskDefinitionFamilies'
--- request. When the results of a 'ListTaskDefinitionFamilies' request exceed 'maxResults', this value can be used to retrieve the next page of results. This value is 'null' when there are no more results to return.
-ltdfrNextToken :: Lens' ListTaskDefinitionFamiliesResponse (Maybe Text)
-ltdfrNextToken = lens _ltdfrNextToken (\s a -> s { _ltdfrNextToken = a })
+instance ToHeaders ListTaskDefinitionFamilies where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.ListTaskDefinitionFamilies"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON ListTaskDefinitionFamilies where
+        toJSON ListTaskDefinitionFamilies'{..}
+          = object
+              ["familyPrefix" .= _ltdfFamilyPrefix,
+               "nextToken" .= _ltdfNextToken,
+               "maxResults" .= _ltdfMaxResults]
+
 instance ToPath ListTaskDefinitionFamilies where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListTaskDefinitionFamilies where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListTaskDefinitionFamilies
+-- | /See:/ 'listTaskDefinitionFamiliesResponse' smart constructor.
+data ListTaskDefinitionFamiliesResponse = ListTaskDefinitionFamiliesResponse'
+    { _ltdfrsFamilies  :: !(Maybe [Text])
+    , _ltdfrsNextToken :: !(Maybe Text)
+    , _ltdfrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListTaskDefinitionFamilies where
-    toJSON ListTaskDefinitionFamilies{..} = object
-        [ "familyPrefix" .= _ltdfFamilyPrefix
-        , "nextToken"    .= _ltdfNextToken
-        , "maxResults"   .= _ltdfMaxResults
-        ]
+-- | Creates a value of 'ListTaskDefinitionFamiliesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltdfrsFamilies'
+--
+-- * 'ltdfrsNextToken'
+--
+-- * 'ltdfrsStatus'
+listTaskDefinitionFamiliesResponse
+    :: Int -- ^ 'ltdfrsStatus'
+    -> ListTaskDefinitionFamiliesResponse
+listTaskDefinitionFamiliesResponse pStatus_ =
+    ListTaskDefinitionFamiliesResponse'
+    { _ltdfrsFamilies = Nothing
+    , _ltdfrsNextToken = Nothing
+    , _ltdfrsStatus = pStatus_
+    }
 
-instance AWSRequest ListTaskDefinitionFamilies where
-    type Sv ListTaskDefinitionFamilies = ECS
-    type Rs ListTaskDefinitionFamilies = ListTaskDefinitionFamiliesResponse
+-- | The list of task definition family names that match the
+-- 'ListTaskDefinitionFamilies' request.
+ltdfrsFamilies :: Lens' ListTaskDefinitionFamiliesResponse [Text]
+ltdfrsFamilies = lens _ltdfrsFamilies (\ s a -> s{_ltdfrsFamilies = a}) . _Default . _Coerce;
 
-    request  = post "ListTaskDefinitionFamilies"
-    response = jsonResponse
+-- | The 'nextToken' value to include in a future
+-- 'ListTaskDefinitionFamilies' request. When the results of a
+-- 'ListTaskDefinitionFamilies' request exceed 'maxResults', this value can
+-- be used to retrieve the next page of results. This value is 'null' when
+-- there are no more results to return.
+ltdfrsNextToken :: Lens' ListTaskDefinitionFamiliesResponse (Maybe Text)
+ltdfrsNextToken = lens _ltdfrsNextToken (\ s a -> s{_ltdfrsNextToken = a});
 
-instance FromJSON ListTaskDefinitionFamiliesResponse where
-    parseJSON = withObject "ListTaskDefinitionFamiliesResponse" $ \o -> ListTaskDefinitionFamiliesResponse
-        <$> o .:? "families" .!= mempty
-        <*> o .:? "nextToken"
+-- | The response status code.
+ltdfrsStatus :: Lens' ListTaskDefinitionFamiliesResponse Int
+ltdfrsStatus = lens _ltdfrsStatus (\ s a -> s{_ltdfrsStatus = a});
diff --git a/gen/Network/AWS/ECS/ListTaskDefinitions.hs b/gen/Network/AWS/ECS/ListTaskDefinitions.hs
--- a/gen/Network/AWS/ECS/ListTaskDefinitions.hs
+++ b/gen/Network/AWS/ECS/ListTaskDefinitions.hs
@@ -1,158 +1,217 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.ListTaskDefinitions
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of task definitions that are registered to your account. You
--- can filter the results by family name with the 'familyPrefix' parameter.
+-- Returns a list of task definitions that are registered to your account.
+-- You can filter the results by family name with the 'familyPrefix'
+-- parameter or by status with the 'status' parameter.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTaskDefinitions.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTaskDefinitions.html AWS API Reference> for ListTaskDefinitions.
+--
+-- This operation returns paginated results.
 module Network.AWS.ECS.ListTaskDefinitions
     (
-    -- * Request
-      ListTaskDefinitions
-    -- ** Request constructor
-    , listTaskDefinitions
-    -- ** Request lenses
+    -- * Creating a Request
+      listTaskDefinitions
+    , ListTaskDefinitions
+    -- * Request Lenses
+    , ltdStatus
     , ltdFamilyPrefix
-    , ltdMaxResults
     , ltdNextToken
+    , ltdSort
+    , ltdMaxResults
 
-    -- * Response
-    , ListTaskDefinitionsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTaskDefinitionsResponse
-    -- ** Response lenses
-    , ltdrNextToken
-    , ltdrTaskDefinitionArns
+    , ListTaskDefinitionsResponse
+    -- * Response Lenses
+    , ltdrsTaskDefinitionARNs
+    , ltdrsNextToken
+    , ltdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListTaskDefinitions = ListTaskDefinitions
-    { _ltdFamilyPrefix :: Maybe Text
-    , _ltdMaxResults   :: Maybe Int
-    , _ltdNextToken    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listTaskDefinitions' smart constructor.
+data ListTaskDefinitions = ListTaskDefinitions'
+    { _ltdStatus       :: !(Maybe TaskDefinitionStatus)
+    , _ltdFamilyPrefix :: !(Maybe Text)
+    , _ltdNextToken    :: !(Maybe Text)
+    , _ltdSort         :: !(Maybe SortOrder)
+    , _ltdMaxResults   :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListTaskDefinitions' constructor.
+-- | Creates a value of 'ListTaskDefinitions' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ltdFamilyPrefix' @::@ 'Maybe' 'Text'
+-- * 'ltdStatus'
 --
--- * 'ltdMaxResults' @::@ 'Maybe' 'Int'
+-- * 'ltdFamilyPrefix'
 --
--- * 'ltdNextToken' @::@ 'Maybe' 'Text'
+-- * 'ltdNextToken'
 --
-listTaskDefinitions :: ListTaskDefinitions
-listTaskDefinitions = ListTaskDefinitions
-    { _ltdFamilyPrefix = Nothing
-    , _ltdNextToken    = Nothing
-    , _ltdMaxResults   = Nothing
+-- * 'ltdSort'
+--
+-- * 'ltdMaxResults'
+listTaskDefinitions
+    :: ListTaskDefinitions
+listTaskDefinitions =
+    ListTaskDefinitions'
+    { _ltdStatus = Nothing
+    , _ltdFamilyPrefix = Nothing
+    , _ltdNextToken = Nothing
+    , _ltdSort = Nothing
+    , _ltdMaxResults = Nothing
     }
 
--- | The full family name that you want to filter the 'ListTaskDefinitions' results
--- with. Specifying a 'familyPrefix' will limit the listed task definitions to
--- task definition revisions that belong to that family.
-ltdFamilyPrefix :: Lens' ListTaskDefinitions (Maybe Text)
-ltdFamilyPrefix = lens _ltdFamilyPrefix (\s a -> s { _ltdFamilyPrefix = a })
+-- | The task definition status that you want to filter the
+-- 'ListTaskDefinitions' results with. By default, only 'ACTIVE' task
+-- definitions are listed. By setting this parameter to 'INACTIVE', you can
+-- view task definitions that are 'INACTIVE' as long as an active task or
+-- service still references them. If you paginate the resulting output, be
+-- sure to keep the 'status' value constant in each subsequent request.
+ltdStatus :: Lens' ListTaskDefinitions (Maybe TaskDefinitionStatus)
+ltdStatus = lens _ltdStatus (\ s a -> s{_ltdStatus = a});
 
--- | The maximum number of task definition results returned by 'ListTaskDefinitions'
--- in paginated output. When this parameter is used, 'ListTaskDefinitions' only
--- returns 'maxResults' results in a single page along with a 'nextToken' response
--- element. The remaining results of the initial request can be seen by sending
--- another 'ListTaskDefinitions' request with the returned 'nextToken' value. This
--- value can be between 1 and 100. If this parameter is not used, then 'ListTaskDefinitions' returns up to 100 results and a 'nextToken' value if applicable.
-ltdMaxResults :: Lens' ListTaskDefinitions (Maybe Int)
-ltdMaxResults = lens _ltdMaxResults (\s a -> s { _ltdMaxResults = a })
+-- | The full family name that you want to filter the 'ListTaskDefinitions'
+-- results with. Specifying a 'familyPrefix' will limit the listed task
+-- definitions to task definition revisions that belong to that family.
+ltdFamilyPrefix :: Lens' ListTaskDefinitions (Maybe Text)
+ltdFamilyPrefix = lens _ltdFamilyPrefix (\ s a -> s{_ltdFamilyPrefix = a});
 
--- | The 'nextToken' value returned from a previous paginated 'ListTaskDefinitions'
--- request where 'maxResults' was used and the results exceeded the value of that
--- parameter. Pagination continues from the end of the previous results that
--- returned the 'nextToken' value. This value is 'null' when there are no more
--- results to return.
+-- | The 'nextToken' value returned from a previous paginated
+-- 'ListTaskDefinitions' request where 'maxResults' was used and the
+-- results exceeded the value of that parameter. Pagination continues from
+-- the end of the previous results that returned the 'nextToken' value.
+-- This value is 'null' when there are no more results to return.
 ltdNextToken :: Lens' ListTaskDefinitions (Maybe Text)
-ltdNextToken = lens _ltdNextToken (\s a -> s { _ltdNextToken = a })
+ltdNextToken = lens _ltdNextToken (\ s a -> s{_ltdNextToken = a});
 
-data ListTaskDefinitionsResponse = ListTaskDefinitionsResponse
-    { _ltdrNextToken          :: Maybe Text
-    , _ltdrTaskDefinitionArns :: List "taskDefinitionArns" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The order in which to sort the results. Valid values are 'ASC' and
+-- 'DESC'. By default ('ASC'), task definitions are listed
+-- lexicographically by family name and in ascending numerical order by
+-- revision so that the newest task definitions in a family are listed
+-- last. Setting this parameter to 'DESC' reverses the sort order on family
+-- name and revision so that the newest task definitions in a family are
+-- listed first.
+ltdSort :: Lens' ListTaskDefinitions (Maybe SortOrder)
+ltdSort = lens _ltdSort (\ s a -> s{_ltdSort = a});
 
--- | 'ListTaskDefinitionsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ltdrNextToken' @::@ 'Maybe' 'Text'
---
--- * 'ltdrTaskDefinitionArns' @::@ ['Text']
---
-listTaskDefinitionsResponse :: ListTaskDefinitionsResponse
-listTaskDefinitionsResponse = ListTaskDefinitionsResponse
-    { _ltdrTaskDefinitionArns = mempty
-    , _ltdrNextToken          = Nothing
-    }
+-- | The maximum number of task definition results returned by
+-- 'ListTaskDefinitions' in paginated output. When this parameter is used,
+-- 'ListTaskDefinitions' only returns 'maxResults' results in a single page
+-- along with a 'nextToken' response element. The remaining results of the
+-- initial request can be seen by sending another 'ListTaskDefinitions'
+-- request with the returned 'nextToken' value. This value can be between 1
+-- and 100. If this parameter is not used, then 'ListTaskDefinitions'
+-- returns up to 100 results and a 'nextToken' value if applicable.
+ltdMaxResults :: Lens' ListTaskDefinitions (Maybe Int)
+ltdMaxResults = lens _ltdMaxResults (\ s a -> s{_ltdMaxResults = a});
 
--- | The 'nextToken' value to include in a future 'ListTaskDefinitions' request. When
--- the results of a 'ListTaskDefinitions' request exceed 'maxResults', this value
--- can be used to retrieve the next page of results. This value is 'null' when
--- there are no more results to return.
-ltdrNextToken :: Lens' ListTaskDefinitionsResponse (Maybe Text)
-ltdrNextToken = lens _ltdrNextToken (\s a -> s { _ltdrNextToken = a })
+instance AWSPager ListTaskDefinitions where
+        page rq rs
+          | stop (rs ^. ltdrsNextToken) = Nothing
+          | stop (rs ^. ltdrsTaskDefinitionARNs) = Nothing
+          | otherwise =
+            Just $ rq & ltdNextToken .~ rs ^. ltdrsNextToken
 
--- | The list of task definition Amazon Resource Name (ARN) entries for the 'ListTaskDefintions' request.
-ltdrTaskDefinitionArns :: Lens' ListTaskDefinitionsResponse [Text]
-ltdrTaskDefinitionArns =
-    lens _ltdrTaskDefinitionArns (\s a -> s { _ltdrTaskDefinitionArns = a })
-        . _List
+instance AWSRequest ListTaskDefinitions where
+        type Sv ListTaskDefinitions = ECS
+        type Rs ListTaskDefinitions =
+             ListTaskDefinitionsResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTaskDefinitionsResponse' <$>
+                   (x .?> "taskDefinitionArns" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
 
+instance ToHeaders ListTaskDefinitions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.ListTaskDefinitions"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListTaskDefinitions where
+        toJSON ListTaskDefinitions'{..}
+          = object
+              ["status" .= _ltdStatus,
+               "familyPrefix" .= _ltdFamilyPrefix,
+               "nextToken" .= _ltdNextToken, "sort" .= _ltdSort,
+               "maxResults" .= _ltdMaxResults]
+
 instance ToPath ListTaskDefinitions where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListTaskDefinitions where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListTaskDefinitions
+-- | /See:/ 'listTaskDefinitionsResponse' smart constructor.
+data ListTaskDefinitionsResponse = ListTaskDefinitionsResponse'
+    { _ltdrsTaskDefinitionARNs :: !(Maybe [Text])
+    , _ltdrsNextToken          :: !(Maybe Text)
+    , _ltdrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListTaskDefinitions where
-    toJSON ListTaskDefinitions{..} = object
-        [ "familyPrefix" .= _ltdFamilyPrefix
-        , "nextToken"    .= _ltdNextToken
-        , "maxResults"   .= _ltdMaxResults
-        ]
+-- | Creates a value of 'ListTaskDefinitionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltdrsTaskDefinitionARNs'
+--
+-- * 'ltdrsNextToken'
+--
+-- * 'ltdrsStatus'
+listTaskDefinitionsResponse
+    :: Int -- ^ 'ltdrsStatus'
+    -> ListTaskDefinitionsResponse
+listTaskDefinitionsResponse pStatus_ =
+    ListTaskDefinitionsResponse'
+    { _ltdrsTaskDefinitionARNs = Nothing
+    , _ltdrsNextToken = Nothing
+    , _ltdrsStatus = pStatus_
+    }
 
-instance AWSRequest ListTaskDefinitions where
-    type Sv ListTaskDefinitions = ECS
-    type Rs ListTaskDefinitions = ListTaskDefinitionsResponse
+-- | The list of task definition Amazon Resource Name (ARN) entries for the
+-- 'ListTaskDefintions' request.
+ltdrsTaskDefinitionARNs :: Lens' ListTaskDefinitionsResponse [Text]
+ltdrsTaskDefinitionARNs = lens _ltdrsTaskDefinitionARNs (\ s a -> s{_ltdrsTaskDefinitionARNs = a}) . _Default . _Coerce;
 
-    request  = post "ListTaskDefinitions"
-    response = jsonResponse
+-- | The 'nextToken' value to include in a future 'ListTaskDefinitions'
+-- request. When the results of a 'ListTaskDefinitions' request exceed
+-- 'maxResults', this value can be used to retrieve the next page of
+-- results. This value is 'null' when there are no more results to return.
+ltdrsNextToken :: Lens' ListTaskDefinitionsResponse (Maybe Text)
+ltdrsNextToken = lens _ltdrsNextToken (\ s a -> s{_ltdrsNextToken = a});
 
-instance FromJSON ListTaskDefinitionsResponse where
-    parseJSON = withObject "ListTaskDefinitionsResponse" $ \o -> ListTaskDefinitionsResponse
-        <$> o .:? "nextToken"
-        <*> o .:? "taskDefinitionArns" .!= mempty
+-- | The response status code.
+ltdrsStatus :: Lens' ListTaskDefinitionsResponse Int
+ltdrsStatus = lens _ltdrsStatus (\ s a -> s{_ltdrsStatus = a});
diff --git a/gen/Network/AWS/ECS/ListTasks.hs b/gen/Network/AWS/ECS/ListTasks.hs
--- a/gen/Network/AWS/ECS/ListTasks.hs
+++ b/gen/Network/AWS/ECS/ListTasks.hs
@@ -1,206 +1,248 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.ListTasks
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of tasks for a specified cluster. You can filter the results
--- by family name or by a particular container instance with the 'family' and 'containerInstance' parameters.
+-- Returns a list of tasks for a specified cluster. You can filter the
+-- results by family name, by a particular container instance, or by the
+-- desired status of the task with the 'family', 'containerInstance', and
+-- 'desiredStatus' parameters.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTasks.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTasks.html AWS API Reference> for ListTasks.
+--
+-- This operation returns paginated results.
 module Network.AWS.ECS.ListTasks
     (
-    -- * Request
-      ListTasks
-    -- ** Request constructor
-    , listTasks
-    -- ** Request lenses
+    -- * Creating a Request
+      listTasks
+    , ListTasks
+    -- * Request Lenses
+    , ltDesiredStatus
     , ltCluster
-    , ltContainerInstance
     , ltFamily
-    , ltMaxResults
     , ltNextToken
-    , ltServiceName
     , ltStartedBy
+    , ltServiceName
+    , ltContainerInstance
+    , ltMaxResults
 
-    -- * Response
-    , ListTasksResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listTasksResponse
-    -- ** Response lenses
-    , ltrNextToken
-    , ltrTaskArns
+    , ListTasksResponse
+    -- * Response Lenses
+    , ltrsNextToken
+    , ltrsTaskARNs
+    , ltrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data ListTasks = ListTasks
-    { _ltCluster           :: Maybe Text
-    , _ltContainerInstance :: Maybe Text
-    , _ltFamily            :: Maybe Text
-    , _ltMaxResults        :: Maybe Int
-    , _ltNextToken         :: Maybe Text
-    , _ltServiceName       :: Maybe Text
-    , _ltStartedBy         :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'listTasks' smart constructor.
+data ListTasks = ListTasks'
+    { _ltDesiredStatus     :: !(Maybe DesiredStatus)
+    , _ltCluster           :: !(Maybe Text)
+    , _ltFamily            :: !(Maybe Text)
+    , _ltNextToken         :: !(Maybe Text)
+    , _ltStartedBy         :: !(Maybe Text)
+    , _ltServiceName       :: !(Maybe Text)
+    , _ltContainerInstance :: !(Maybe Text)
+    , _ltMaxResults        :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListTasks' constructor.
+-- | Creates a value of 'ListTasks' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ltCluster' @::@ 'Maybe' 'Text'
+-- * 'ltDesiredStatus'
 --
--- * 'ltContainerInstance' @::@ 'Maybe' 'Text'
+-- * 'ltCluster'
 --
--- * 'ltFamily' @::@ 'Maybe' 'Text'
+-- * 'ltFamily'
 --
--- * 'ltMaxResults' @::@ 'Maybe' 'Int'
+-- * 'ltNextToken'
 --
--- * 'ltNextToken' @::@ 'Maybe' 'Text'
+-- * 'ltStartedBy'
 --
--- * 'ltServiceName' @::@ 'Maybe' 'Text'
+-- * 'ltServiceName'
 --
--- * 'ltStartedBy' @::@ 'Maybe' 'Text'
+-- * 'ltContainerInstance'
 --
-listTasks :: ListTasks
-listTasks = ListTasks
-    { _ltCluster           = Nothing
+-- * 'ltMaxResults'
+listTasks
+    :: ListTasks
+listTasks =
+    ListTasks'
+    { _ltDesiredStatus = Nothing
+    , _ltCluster = Nothing
+    , _ltFamily = Nothing
+    , _ltNextToken = Nothing
+    , _ltStartedBy = Nothing
+    , _ltServiceName = Nothing
     , _ltContainerInstance = Nothing
-    , _ltFamily            = Nothing
-    , _ltNextToken         = Nothing
-    , _ltMaxResults        = Nothing
-    , _ltStartedBy         = Nothing
-    , _ltServiceName       = Nothing
+    , _ltMaxResults = Nothing
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the tasks you want to list. If you do not specify a cluster, the default
--- cluster is assumed..
-ltCluster :: Lens' ListTasks (Maybe Text)
-ltCluster = lens _ltCluster (\s a -> s { _ltCluster = a })
+-- | The task status that you want to filter the 'ListTasks' results with.
+-- Specifying a 'desiredStatus' of 'STOPPED' will limit the results to
+-- tasks that are in the 'STOPPED' status, which can be useful for
+-- debugging tasks that are not starting properly or have died or finished.
+-- The default status filter is 'RUNNING'.
+ltDesiredStatus :: Lens' ListTasks (Maybe DesiredStatus)
+ltDesiredStatus = lens _ltDesiredStatus (\ s a -> s{_ltDesiredStatus = a});
 
--- | The container instance UUID or full Amazon Resource Name (ARN) of the
--- container instance that you want to filter the 'ListTasks' results with.
--- Specifying a 'containerInstance' will limit the results to tasks that belong to
--- that container instance.
-ltContainerInstance :: Lens' ListTasks (Maybe Text)
-ltContainerInstance =
-    lens _ltContainerInstance (\s a -> s { _ltContainerInstance = a })
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the tasks you want to list. If you do not specify a cluster, the
+-- default cluster is assumed..
+ltCluster :: Lens' ListTasks (Maybe Text)
+ltCluster = lens _ltCluster (\ s a -> s{_ltCluster = a});
 
--- | The name of the family that you want to filter the 'ListTasks' results with.
--- Specifying a 'family' will limit the results to tasks that belong to that
--- family.
+-- | The name of the family that you want to filter the 'ListTasks' results
+-- with. Specifying a 'family' will limit the results to tasks that belong
+-- to that family.
 ltFamily :: Lens' ListTasks (Maybe Text)
-ltFamily = lens _ltFamily (\s a -> s { _ltFamily = a })
-
--- | The maximum number of task results returned by 'ListTasks' in paginated output.
--- When this parameter is used, 'ListTasks' only returns 'maxResults' results in a
--- single page along with a 'nextToken' response element. The remaining results of
--- the initial request can be seen by sending another 'ListTasks' request with the
--- returned 'nextToken' value. This value can be between 1 and 100. If this
--- parameter is not used, then 'ListTasks' returns up to 100 results and a 'nextToken' value if applicable.
-ltMaxResults :: Lens' ListTasks (Maybe Int)
-ltMaxResults = lens _ltMaxResults (\s a -> s { _ltMaxResults = a })
+ltFamily = lens _ltFamily (\ s a -> s{_ltFamily = a});
 
--- | The 'nextToken' value returned from a previous paginated 'ListTasks' request
--- where 'maxResults' was used and the results exceeded the value of that
--- parameter. Pagination continues from the end of the previous results that
--- returned the 'nextToken' value. This value is 'null' when there are no more
--- results to return.
+-- | The 'nextToken' value returned from a previous paginated 'ListTasks'
+-- request where 'maxResults' was used and the results exceeded the value
+-- of that parameter. Pagination continues from the end of the previous
+-- results that returned the 'nextToken' value. This value is 'null' when
+-- there are no more results to return.
 ltNextToken :: Lens' ListTasks (Maybe Text)
-ltNextToken = lens _ltNextToken (\s a -> s { _ltNextToken = a })
+ltNextToken = lens _ltNextToken (\ s a -> s{_ltNextToken = a});
 
--- | The name of the service that you want to filter the 'ListTasks' results with.
--- Specifying a 'serviceName' will limit the results to tasks that belong to that
--- service.
+-- | The 'startedBy' value that you want to filter the task results with.
+-- Specifying a 'startedBy' value will limit the results to tasks that were
+-- started with that value.
+ltStartedBy :: Lens' ListTasks (Maybe Text)
+ltStartedBy = lens _ltStartedBy (\ s a -> s{_ltStartedBy = a});
+
+-- | The name of the service that you want to filter the 'ListTasks' results
+-- with. Specifying a 'serviceName' will limit the results to tasks that
+-- belong to that service.
 ltServiceName :: Lens' ListTasks (Maybe Text)
-ltServiceName = lens _ltServiceName (\s a -> s { _ltServiceName = a })
+ltServiceName = lens _ltServiceName (\ s a -> s{_ltServiceName = a});
 
--- | The 'startedBy' value that you want to filter the task results with. Specifying
--- a 'startedBy' value will limit the results to tasks that were started with that
--- value.
-ltStartedBy :: Lens' ListTasks (Maybe Text)
-ltStartedBy = lens _ltStartedBy (\s a -> s { _ltStartedBy = a })
+-- | The container instance UUID or full Amazon Resource Name (ARN) of the
+-- container instance that you want to filter the 'ListTasks' results with.
+-- Specifying a 'containerInstance' will limit the results to tasks that
+-- belong to that container instance.
+ltContainerInstance :: Lens' ListTasks (Maybe Text)
+ltContainerInstance = lens _ltContainerInstance (\ s a -> s{_ltContainerInstance = a});
 
-data ListTasksResponse = ListTasksResponse
-    { _ltrNextToken :: Maybe Text
-    , _ltrTaskArns  :: List "taskArns" Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The maximum number of task results returned by 'ListTasks' in paginated
+-- output. When this parameter is used, 'ListTasks' only returns
+-- 'maxResults' results in a single page along with a 'nextToken' response
+-- element. The remaining results of the initial request can be seen by
+-- sending another 'ListTasks' request with the returned 'nextToken' value.
+-- This value can be between 1 and 100. If this parameter is not used, then
+-- 'ListTasks' returns up to 100 results and a 'nextToken' value if
+-- applicable.
+ltMaxResults :: Lens' ListTasks (Maybe Int)
+ltMaxResults = lens _ltMaxResults (\ s a -> s{_ltMaxResults = a});
 
--- | 'ListTasksResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ltrNextToken' @::@ 'Maybe' 'Text'
---
--- * 'ltrTaskArns' @::@ ['Text']
---
-listTasksResponse :: ListTasksResponse
-listTasksResponse = ListTasksResponse
-    { _ltrTaskArns  = mempty
-    , _ltrNextToken = Nothing
-    }
+instance AWSPager ListTasks where
+        page rq rs
+          | stop (rs ^. ltrsNextToken) = Nothing
+          | stop (rs ^. ltrsTaskARNs) = Nothing
+          | otherwise =
+            Just $ rq & ltNextToken .~ rs ^. ltrsNextToken
 
--- | The 'nextToken' value to include in a future 'ListTasks' request. When the
--- results of a 'ListTasks' request exceed 'maxResults', this value can be used to
--- retrieve the next page of results. This value is 'null' when there are no more
--- results to return.
-ltrNextToken :: Lens' ListTasksResponse (Maybe Text)
-ltrNextToken = lens _ltrNextToken (\s a -> s { _ltrNextToken = a })
+instance AWSRequest ListTasks where
+        type Sv ListTasks = ECS
+        type Rs ListTasks = ListTasksResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTasksResponse' <$>
+                   (x .?> "nextToken") <*> (x .?> "taskArns" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | The list of task Amazon Resource Name (ARN) entries for the 'ListTasks' request.
-ltrTaskArns :: Lens' ListTasksResponse [Text]
-ltrTaskArns = lens _ltrTaskArns (\s a -> s { _ltrTaskArns = a }) . _List
+instance ToHeaders ListTasks where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.ListTasks" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON ListTasks where
+        toJSON ListTasks'{..}
+          = object
+              ["desiredStatus" .= _ltDesiredStatus,
+               "cluster" .= _ltCluster, "family" .= _ltFamily,
+               "nextToken" .= _ltNextToken,
+               "startedBy" .= _ltStartedBy,
+               "serviceName" .= _ltServiceName,
+               "containerInstance" .= _ltContainerInstance,
+               "maxResults" .= _ltMaxResults]
+
 instance ToPath ListTasks where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListTasks where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders ListTasks
+-- | /See:/ 'listTasksResponse' smart constructor.
+data ListTasksResponse = ListTasksResponse'
+    { _ltrsNextToken :: !(Maybe Text)
+    , _ltrsTaskARNs  :: !(Maybe [Text])
+    , _ltrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON ListTasks where
-    toJSON ListTasks{..} = object
-        [ "cluster"           .= _ltCluster
-        , "containerInstance" .= _ltContainerInstance
-        , "family"            .= _ltFamily
-        , "nextToken"         .= _ltNextToken
-        , "maxResults"        .= _ltMaxResults
-        , "startedBy"         .= _ltStartedBy
-        , "serviceName"       .= _ltServiceName
-        ]
+-- | Creates a value of 'ListTasksResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrsNextToken'
+--
+-- * 'ltrsTaskARNs'
+--
+-- * 'ltrsStatus'
+listTasksResponse
+    :: Int -- ^ 'ltrsStatus'
+    -> ListTasksResponse
+listTasksResponse pStatus_ =
+    ListTasksResponse'
+    { _ltrsNextToken = Nothing
+    , _ltrsTaskARNs = Nothing
+    , _ltrsStatus = pStatus_
+    }
 
-instance AWSRequest ListTasks where
-    type Sv ListTasks = ECS
-    type Rs ListTasks = ListTasksResponse
+-- | The 'nextToken' value to include in a future 'ListTasks' request. When
+-- the results of a 'ListTasks' request exceed 'maxResults', this value can
+-- be used to retrieve the next page of results. This value is 'null' when
+-- there are no more results to return.
+ltrsNextToken :: Lens' ListTasksResponse (Maybe Text)
+ltrsNextToken = lens _ltrsNextToken (\ s a -> s{_ltrsNextToken = a});
 
-    request  = post "ListTasks"
-    response = jsonResponse
+-- | The list of task Amazon Resource Name (ARN) entries for the 'ListTasks'
+-- request.
+ltrsTaskARNs :: Lens' ListTasksResponse [Text]
+ltrsTaskARNs = lens _ltrsTaskARNs (\ s a -> s{_ltrsTaskARNs = a}) . _Default . _Coerce;
 
-instance FromJSON ListTasksResponse where
-    parseJSON = withObject "ListTasksResponse" $ \o -> ListTasksResponse
-        <$> o .:? "nextToken"
-        <*> o .:? "taskArns" .!= mempty
+-- | The response status code.
+ltrsStatus :: Lens' ListTasksResponse Int
+ltrsStatus = lens _ltrsStatus (\ s a -> s{_ltrsStatus = a});
diff --git a/gen/Network/AWS/ECS/RegisterContainerInstance.hs b/gen/Network/AWS/ECS/RegisterContainerInstance.hs
--- a/gen/Network/AWS/ECS/RegisterContainerInstance.hs
+++ b/gen/Network/AWS/ECS/RegisterContainerInstance.hs
@@ -1,159 +1,193 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.RegisterContainerInstance
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action is only used by the Amazon EC2 Container Service agent, and it is
--- not intended for use outside of the agent.
+-- This action is only used by the Amazon EC2 Container Service agent, and
+-- it is not intended for use outside of the agent.
 --
--- Registers an Amazon EC2 instance into the specified cluster. This instance
--- will become available to place containers on.
+-- Registers an Amazon EC2 instance into the specified cluster. This
+-- instance will become available to place containers on.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterContainerInstance.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterContainerInstance.html AWS API Reference> for RegisterContainerInstance.
 module Network.AWS.ECS.RegisterContainerInstance
     (
-    -- * Request
-      RegisterContainerInstance
-    -- ** Request constructor
-    , registerContainerInstance
-    -- ** Request lenses
+    -- * Creating a Request
+      registerContainerInstance
+    , RegisterContainerInstance
+    -- * Request Lenses
+    , rciInstanceIdentityDocumentSignature
     , rciCluster
     , rciInstanceIdentityDocument
-    , rciInstanceIdentityDocumentSignature
-    , rciTotalResources
+    , rciContainerInstanceARN
     , rciVersionInfo
+    , rciTotalResources
 
-    -- * Response
-    , RegisterContainerInstanceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , registerContainerInstanceResponse
-    -- ** Response lenses
-    , rcirContainerInstance
+    , RegisterContainerInstanceResponse
+    -- * Response Lenses
+    , rcirsContainerInstance
+    , rcirsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data RegisterContainerInstance = RegisterContainerInstance
-    { _rciCluster                           :: Maybe Text
-    , _rciInstanceIdentityDocument          :: Maybe Text
-    , _rciInstanceIdentityDocumentSignature :: Maybe Text
-    , _rciTotalResources                    :: List "totalResources" Resource
-    , _rciVersionInfo                       :: Maybe VersionInfo
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'registerContainerInstance' smart constructor.
+data RegisterContainerInstance = RegisterContainerInstance'
+    { _rciInstanceIdentityDocumentSignature :: !(Maybe Text)
+    , _rciCluster                           :: !(Maybe Text)
+    , _rciInstanceIdentityDocument          :: !(Maybe Text)
+    , _rciContainerInstanceARN              :: !(Maybe Text)
+    , _rciVersionInfo                       :: !(Maybe VersionInfo)
+    , _rciTotalResources                    :: !(Maybe [Resource])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RegisterContainerInstance' constructor.
+-- | Creates a value of 'RegisterContainerInstance' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rciCluster' @::@ 'Maybe' 'Text'
+-- * 'rciInstanceIdentityDocumentSignature'
 --
--- * 'rciInstanceIdentityDocument' @::@ 'Maybe' 'Text'
+-- * 'rciCluster'
 --
--- * 'rciInstanceIdentityDocumentSignature' @::@ 'Maybe' 'Text'
+-- * 'rciInstanceIdentityDocument'
 --
--- * 'rciTotalResources' @::@ ['Resource']
+-- * 'rciContainerInstanceARN'
 --
--- * 'rciVersionInfo' @::@ 'Maybe' 'VersionInfo'
+-- * 'rciVersionInfo'
 --
-registerContainerInstance :: RegisterContainerInstance
-registerContainerInstance = RegisterContainerInstance
-    { _rciCluster                           = Nothing
-    , _rciInstanceIdentityDocument          = Nothing
-    , _rciInstanceIdentityDocumentSignature = Nothing
-    , _rciTotalResources                    = mempty
-    , _rciVersionInfo                       = Nothing
+-- * 'rciTotalResources'
+registerContainerInstance
+    :: RegisterContainerInstance
+registerContainerInstance =
+    RegisterContainerInstance'
+    { _rciInstanceIdentityDocumentSignature = Nothing
+    , _rciCluster = Nothing
+    , _rciInstanceIdentityDocument = Nothing
+    , _rciContainerInstanceARN = Nothing
+    , _rciVersionInfo = Nothing
+    , _rciTotalResources = Nothing
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that you
--- want to register your container instance with. If you do not specify a
--- cluster, the default cluster is assumed..
+-- | The instance identity document signature for the Amazon EC2 instance to
+-- register. This signature can be found by running the following command
+-- from the instance:
+-- 'curl http:\/\/169.254.169.254\/latest\/dynamic\/instance-identity\/signature\/'
+rciInstanceIdentityDocumentSignature :: Lens' RegisterContainerInstance (Maybe Text)
+rciInstanceIdentityDocumentSignature = lens _rciInstanceIdentityDocumentSignature (\ s a -> s{_rciInstanceIdentityDocumentSignature = a});
+
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- you want to register your container instance with. If you do not specify
+-- a cluster, the default cluster is assumed..
 rciCluster :: Lens' RegisterContainerInstance (Maybe Text)
-rciCluster = lens _rciCluster (\s a -> s { _rciCluster = a })
+rciCluster = lens _rciCluster (\ s a -> s{_rciCluster = a});
 
+-- | The instance identity document for the Amazon EC2 instance to register.
+-- This document can be found by running the following command from the
+-- instance:
+-- 'curl http:\/\/169.254.169.254\/latest\/dynamic\/instance-identity\/document\/'
 rciInstanceIdentityDocument :: Lens' RegisterContainerInstance (Maybe Text)
-rciInstanceIdentityDocument =
-    lens _rciInstanceIdentityDocument
-        (\s a -> s { _rciInstanceIdentityDocument = a })
-
-rciInstanceIdentityDocumentSignature :: Lens' RegisterContainerInstance (Maybe Text)
-rciInstanceIdentityDocumentSignature =
-    lens _rciInstanceIdentityDocumentSignature
-        (\s a -> s { _rciInstanceIdentityDocumentSignature = a })
+rciInstanceIdentityDocument = lens _rciInstanceIdentityDocument (\ s a -> s{_rciInstanceIdentityDocument = a});
 
-rciTotalResources :: Lens' RegisterContainerInstance [Resource]
-rciTotalResources =
-    lens _rciTotalResources (\s a -> s { _rciTotalResources = a })
-        . _List
+-- | The Amazon Resource Name (ARN) of the container instance (if it was
+-- previously registered).
+rciContainerInstanceARN :: Lens' RegisterContainerInstance (Maybe Text)
+rciContainerInstanceARN = lens _rciContainerInstanceARN (\ s a -> s{_rciContainerInstanceARN = a});
 
+-- | The version information for the Amazon ECS container agent and Docker
+-- daemon running on the container instance.
 rciVersionInfo :: Lens' RegisterContainerInstance (Maybe VersionInfo)
-rciVersionInfo = lens _rciVersionInfo (\s a -> s { _rciVersionInfo = a })
+rciVersionInfo = lens _rciVersionInfo (\ s a -> s{_rciVersionInfo = a});
 
-newtype RegisterContainerInstanceResponse = RegisterContainerInstanceResponse
-    { _rcirContainerInstance :: Maybe ContainerInstance
-    } deriving (Eq, Read, Show)
+-- | The resources available on the instance.
+rciTotalResources :: Lens' RegisterContainerInstance [Resource]
+rciTotalResources = lens _rciTotalResources (\ s a -> s{_rciTotalResources = a}) . _Default . _Coerce;
 
--- | 'RegisterContainerInstanceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rcirContainerInstance' @::@ 'Maybe' 'ContainerInstance'
---
-registerContainerInstanceResponse :: RegisterContainerInstanceResponse
-registerContainerInstanceResponse = RegisterContainerInstanceResponse
-    { _rcirContainerInstance = Nothing
-    }
+instance AWSRequest RegisterContainerInstance where
+        type Sv RegisterContainerInstance = ECS
+        type Rs RegisterContainerInstance =
+             RegisterContainerInstanceResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RegisterContainerInstanceResponse' <$>
+                   (x .?> "containerInstance") <*> (pure (fromEnum s)))
 
-rcirContainerInstance :: Lens' RegisterContainerInstanceResponse (Maybe ContainerInstance)
-rcirContainerInstance =
-    lens _rcirContainerInstance (\s a -> s { _rcirContainerInstance = a })
+instance ToHeaders RegisterContainerInstance where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.RegisterContainerInstance"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON RegisterContainerInstance where
+        toJSON RegisterContainerInstance'{..}
+          = object
+              ["instanceIdentityDocumentSignature" .=
+                 _rciInstanceIdentityDocumentSignature,
+               "cluster" .= _rciCluster,
+               "instanceIdentityDocument" .=
+                 _rciInstanceIdentityDocument,
+               "containerInstanceArn" .= _rciContainerInstanceARN,
+               "versionInfo" .= _rciVersionInfo,
+               "totalResources" .= _rciTotalResources]
+
 instance ToPath RegisterContainerInstance where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RegisterContainerInstance where
-    toQuery = const mempty
-
-instance ToHeaders RegisterContainerInstance
+        toQuery = const mempty
 
-instance ToJSON RegisterContainerInstance where
-    toJSON RegisterContainerInstance{..} = object
-        [ "cluster"                           .= _rciCluster
-        , "instanceIdentityDocument"          .= _rciInstanceIdentityDocument
-        , "instanceIdentityDocumentSignature" .= _rciInstanceIdentityDocumentSignature
-        , "totalResources"                    .= _rciTotalResources
-        , "versionInfo"                       .= _rciVersionInfo
-        ]
+-- | /See:/ 'registerContainerInstanceResponse' smart constructor.
+data RegisterContainerInstanceResponse = RegisterContainerInstanceResponse'
+    { _rcirsContainerInstance :: !(Maybe ContainerInstance)
+    , _rcirsStatus            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest RegisterContainerInstance where
-    type Sv RegisterContainerInstance = ECS
-    type Rs RegisterContainerInstance = RegisterContainerInstanceResponse
+-- | Creates a value of 'RegisterContainerInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcirsContainerInstance'
+--
+-- * 'rcirsStatus'
+registerContainerInstanceResponse
+    :: Int -- ^ 'rcirsStatus'
+    -> RegisterContainerInstanceResponse
+registerContainerInstanceResponse pStatus_ =
+    RegisterContainerInstanceResponse'
+    { _rcirsContainerInstance = Nothing
+    , _rcirsStatus = pStatus_
+    }
 
-    request  = post "RegisterContainerInstance"
-    response = jsonResponse
+-- | Undocumented member.
+rcirsContainerInstance :: Lens' RegisterContainerInstanceResponse (Maybe ContainerInstance)
+rcirsContainerInstance = lens _rcirsContainerInstance (\ s a -> s{_rcirsContainerInstance = a});
 
-instance FromJSON RegisterContainerInstanceResponse where
-    parseJSON = withObject "RegisterContainerInstanceResponse" $ \o -> RegisterContainerInstanceResponse
-        <$> o .:? "containerInstance"
+-- | The response status code.
+rcirsStatus :: Lens' RegisterContainerInstanceResponse Int
+rcirsStatus = lens _rcirsStatus (\ s a -> s{_rcirsStatus = a});
diff --git a/gen/Network/AWS/ECS/RegisterTaskDefinition.hs b/gen/Network/AWS/ECS/RegisterTaskDefinition.hs
--- a/gen/Network/AWS/ECS/RegisterTaskDefinition.hs
+++ b/gen/Network/AWS/ECS/RegisterTaskDefinition.hs
@@ -1,141 +1,158 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.RegisterTaskDefinition
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Registers a new task definition from the supplied 'family' and 'containerDefinitions'. Optionally, you can add data volumes to your containers with the 'volumes'
--- parameter. For more information on task definition parameters and defaults,
--- see <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html Amazon ECS Task Definitions> in the /Amazon EC2 Container Service DeveloperGuide/.
+-- Registers a new task definition from the supplied 'family' and
+-- 'containerDefinitions'. Optionally, you can add data volumes to your
+-- containers with the 'volumes' parameter. For more information on task
+-- definition parameters and defaults, see
+-- <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html Amazon ECS Task Definitions>
+-- in the /Amazon EC2 Container Service Developer Guide/.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html AWS API Reference> for RegisterTaskDefinition.
 module Network.AWS.ECS.RegisterTaskDefinition
     (
-    -- * Request
-      RegisterTaskDefinition
-    -- ** Request constructor
-    , registerTaskDefinition
-    -- ** Request lenses
-    , rtdContainerDefinitions
-    , rtdFamily
+    -- * Creating a Request
+      registerTaskDefinition
+    , RegisterTaskDefinition
+    -- * Request Lenses
     , rtdVolumes
+    , rtdFamily
+    , rtdContainerDefinitions
 
-    -- * Response
-    , RegisterTaskDefinitionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , registerTaskDefinitionResponse
-    -- ** Response lenses
-    , rtdrTaskDefinition
+    , RegisterTaskDefinitionResponse
+    -- * Response Lenses
+    , rtdrsTaskDefinition
+    , rtdrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data RegisterTaskDefinition = RegisterTaskDefinition
-    { _rtdContainerDefinitions :: List "containerDefinitions" ContainerDefinition
-    , _rtdFamily               :: Text
-    , _rtdVolumes              :: List "volumes" Volume
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'registerTaskDefinition' smart constructor.
+data RegisterTaskDefinition = RegisterTaskDefinition'
+    { _rtdVolumes              :: !(Maybe [Volume])
+    , _rtdFamily               :: !Text
+    , _rtdContainerDefinitions :: ![ContainerDefinition]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RegisterTaskDefinition' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RegisterTaskDefinition' with the minimum fields required to make a request.
 --
--- * 'rtdContainerDefinitions' @::@ ['ContainerDefinition']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rtdFamily' @::@ 'Text'
+-- * 'rtdVolumes'
 --
--- * 'rtdVolumes' @::@ ['Volume']
+-- * 'rtdFamily'
 --
-registerTaskDefinition :: Text -- ^ 'rtdFamily'
-                       -> RegisterTaskDefinition
-registerTaskDefinition p1 = RegisterTaskDefinition
-    { _rtdFamily               = p1
+-- * 'rtdContainerDefinitions'
+registerTaskDefinition
+    :: Text -- ^ 'rtdFamily'
+    -> RegisterTaskDefinition
+registerTaskDefinition pFamily_ =
+    RegisterTaskDefinition'
+    { _rtdVolumes = Nothing
+    , _rtdFamily = pFamily_
     , _rtdContainerDefinitions = mempty
-    , _rtdVolumes              = mempty
     }
 
--- | A list of container definitions in JSON format that describe the different
--- containers that make up your task.
-rtdContainerDefinitions :: Lens' RegisterTaskDefinition [ContainerDefinition]
-rtdContainerDefinitions =
-    lens _rtdContainerDefinitions (\s a -> s { _rtdContainerDefinitions = a })
-        . _List
+-- | A list of volume definitions in JSON format that containers in your task
+-- may use.
+rtdVolumes :: Lens' RegisterTaskDefinition [Volume]
+rtdVolumes = lens _rtdVolumes (\ s a -> s{_rtdVolumes = a}) . _Default . _Coerce;
 
--- | You must specify a 'family' for a task definition, which allows you to track
--- multiple versions of the same task definition. You can think of the 'family' as
--- a name for your task definition. Up to 255 letters (uppercase and lowercase),
--- numbers, hyphens, and underscores are allowed.
+-- | You must specify a 'family' for a task definition, which allows you to
+-- track multiple versions of the same task definition. You can think of
+-- the 'family' as a name for your task definition. Up to 255 letters
+-- (uppercase and lowercase), numbers, hyphens, and underscores are
+-- allowed.
 rtdFamily :: Lens' RegisterTaskDefinition Text
-rtdFamily = lens _rtdFamily (\s a -> s { _rtdFamily = a })
+rtdFamily = lens _rtdFamily (\ s a -> s{_rtdFamily = a});
 
--- | A list of volume definitions in JSON format that containers in your task may
--- use.
-rtdVolumes :: Lens' RegisterTaskDefinition [Volume]
-rtdVolumes = lens _rtdVolumes (\s a -> s { _rtdVolumes = a }) . _List
+-- | A list of container definitions in JSON format that describe the
+-- different containers that make up your task.
+rtdContainerDefinitions :: Lens' RegisterTaskDefinition [ContainerDefinition]
+rtdContainerDefinitions = lens _rtdContainerDefinitions (\ s a -> s{_rtdContainerDefinitions = a}) . _Coerce;
 
-newtype RegisterTaskDefinitionResponse = RegisterTaskDefinitionResponse
-    { _rtdrTaskDefinition :: Maybe TaskDefinition
-    } deriving (Eq, Read, Show)
+instance AWSRequest RegisterTaskDefinition where
+        type Sv RegisterTaskDefinition = ECS
+        type Rs RegisterTaskDefinition =
+             RegisterTaskDefinitionResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RegisterTaskDefinitionResponse' <$>
+                   (x .?> "taskDefinition") <*> (pure (fromEnum s)))
 
--- | 'RegisterTaskDefinitionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rtdrTaskDefinition' @::@ 'Maybe' 'TaskDefinition'
---
-registerTaskDefinitionResponse :: RegisterTaskDefinitionResponse
-registerTaskDefinitionResponse = RegisterTaskDefinitionResponse
-    { _rtdrTaskDefinition = Nothing
-    }
+instance ToHeaders RegisterTaskDefinition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.RegisterTaskDefinition"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-rtdrTaskDefinition :: Lens' RegisterTaskDefinitionResponse (Maybe TaskDefinition)
-rtdrTaskDefinition =
-    lens _rtdrTaskDefinition (\s a -> s { _rtdrTaskDefinition = a })
+instance ToJSON RegisterTaskDefinition where
+        toJSON RegisterTaskDefinition'{..}
+          = object
+              ["volumes" .= _rtdVolumes, "family" .= _rtdFamily,
+               "containerDefinitions" .= _rtdContainerDefinitions]
 
 instance ToPath RegisterTaskDefinition where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RegisterTaskDefinition where
-    toQuery = const mempty
-
-instance ToHeaders RegisterTaskDefinition
+        toQuery = const mempty
 
-instance ToJSON RegisterTaskDefinition where
-    toJSON RegisterTaskDefinition{..} = object
-        [ "family"               .= _rtdFamily
-        , "containerDefinitions" .= _rtdContainerDefinitions
-        , "volumes"              .= _rtdVolumes
-        ]
+-- | /See:/ 'registerTaskDefinitionResponse' smart constructor.
+data RegisterTaskDefinitionResponse = RegisterTaskDefinitionResponse'
+    { _rtdrsTaskDefinition :: !(Maybe TaskDefinition)
+    , _rtdrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest RegisterTaskDefinition where
-    type Sv RegisterTaskDefinition = ECS
-    type Rs RegisterTaskDefinition = RegisterTaskDefinitionResponse
+-- | Creates a value of 'RegisterTaskDefinitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtdrsTaskDefinition'
+--
+-- * 'rtdrsStatus'
+registerTaskDefinitionResponse
+    :: Int -- ^ 'rtdrsStatus'
+    -> RegisterTaskDefinitionResponse
+registerTaskDefinitionResponse pStatus_ =
+    RegisterTaskDefinitionResponse'
+    { _rtdrsTaskDefinition = Nothing
+    , _rtdrsStatus = pStatus_
+    }
 
-    request  = post "RegisterTaskDefinition"
-    response = jsonResponse
+-- | Undocumented member.
+rtdrsTaskDefinition :: Lens' RegisterTaskDefinitionResponse (Maybe TaskDefinition)
+rtdrsTaskDefinition = lens _rtdrsTaskDefinition (\ s a -> s{_rtdrsTaskDefinition = a});
 
-instance FromJSON RegisterTaskDefinitionResponse where
-    parseJSON = withObject "RegisterTaskDefinitionResponse" $ \o -> RegisterTaskDefinitionResponse
-        <$> o .:? "taskDefinition"
+-- | The response status code.
+rtdrsStatus :: Lens' RegisterTaskDefinitionResponse Int
+rtdrsStatus = lens _rtdrsStatus (\ s a -> s{_rtdrsStatus = a});
diff --git a/gen/Network/AWS/ECS/RunTask.hs b/gen/Network/AWS/ECS/RunTask.hs
--- a/gen/Network/AWS/ECS/RunTask.hs
+++ b/gen/Network/AWS/ECS/RunTask.hs
@@ -1,187 +1,205 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.RunTask
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Start a task using random placement and the default Amazon ECS scheduler. If
--- you want to use your own scheduler or place a task on a specific container
--- instance, use 'StartTask' instead.
+-- Start a task using random placement and the default Amazon ECS
+-- scheduler. If you want to use your own scheduler or place a task on a
+-- specific container instance, use 'StartTask' instead.
 --
 -- The 'count' parameter is limited to 10 tasks per call.
 --
---
---
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html AWS API Reference> for RunTask.
 module Network.AWS.ECS.RunTask
     (
-    -- * Request
-      RunTask
-    -- ** Request constructor
-    , runTask
-    -- ** Request lenses
+    -- * Creating a Request
+      runTask
+    , RunTask
+    -- * Request Lenses
+    , rtOverrides
     , rtCluster
     , rtCount
-    , rtOverrides
     , rtStartedBy
     , rtTaskDefinition
 
-    -- * Response
-    , RunTaskResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , runTaskResponse
-    -- ** Response lenses
-    , rtrFailures
-    , rtrTasks
+    , RunTaskResponse
+    -- * Response Lenses
+    , rtrsFailures
+    , rtrsTasks
+    , rtrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data RunTask = RunTask
-    { _rtCluster        :: Maybe Text
-    , _rtCount          :: Maybe Int
-    , _rtOverrides      :: Maybe TaskOverride
-    , _rtStartedBy      :: Maybe Text
-    , _rtTaskDefinition :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'runTask' smart constructor.
+data RunTask = RunTask'
+    { _rtOverrides      :: !(Maybe TaskOverride)
+    , _rtCluster        :: !(Maybe Text)
+    , _rtCount          :: !(Maybe Int)
+    , _rtStartedBy      :: !(Maybe Text)
+    , _rtTaskDefinition :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RunTask' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RunTask' with the minimum fields required to make a request.
 --
--- * 'rtCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rtCount' @::@ 'Maybe' 'Int'
+-- * 'rtOverrides'
 --
--- * 'rtOverrides' @::@ 'Maybe' 'TaskOverride'
+-- * 'rtCluster'
 --
--- * 'rtStartedBy' @::@ 'Maybe' 'Text'
+-- * 'rtCount'
 --
--- * 'rtTaskDefinition' @::@ 'Text'
+-- * 'rtStartedBy'
 --
-runTask :: Text -- ^ 'rtTaskDefinition'
-        -> RunTask
-runTask p1 = RunTask
-    { _rtTaskDefinition = p1
-    , _rtCluster        = Nothing
-    , _rtOverrides      = Nothing
-    , _rtCount          = Nothing
-    , _rtStartedBy      = Nothing
+-- * 'rtTaskDefinition'
+runTask
+    :: Text -- ^ 'rtTaskDefinition'
+    -> RunTask
+runTask pTaskDefinition_ =
+    RunTask'
+    { _rtOverrides = Nothing
+    , _rtCluster = Nothing
+    , _rtCount = Nothing
+    , _rtStartedBy = Nothing
+    , _rtTaskDefinition = pTaskDefinition_
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that you
--- want to run your task on. If you do not specify a cluster, the default
--- cluster is assumed..
+-- | A list of container overrides in JSON format that specify the name of a
+-- container in the specified task definition and the overrides it should
+-- receive. You can override the default command for a container (that is
+-- specified in the task definition or Docker image) with a 'command'
+-- override. You can also override existing environment variables (that are
+-- specified in the task definition or Docker image) on a container or add
+-- new environment variables to it with an 'environment' override.
+--
+-- A total of 8192 characters are allowed for overrides. This limit
+-- includes the JSON formatting characters of the override structure.
+rtOverrides :: Lens' RunTask (Maybe TaskOverride)
+rtOverrides = lens _rtOverrides (\ s a -> s{_rtOverrides = a});
+
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- you want to run your task on. If you do not specify a cluster, the
+-- default cluster is assumed..
 rtCluster :: Lens' RunTask (Maybe Text)
-rtCluster = lens _rtCluster (\s a -> s { _rtCluster = a })
+rtCluster = lens _rtCluster (\ s a -> s{_rtCluster = a});
 
--- | The number of instantiations of the specified task that you would like to
--- place on your cluster.
+-- | The number of instantiations of the specified task that you would like
+-- to place on your cluster.
 --
 -- The 'count' parameter is limited to 10 tasks per call.
---
---
 rtCount :: Lens' RunTask (Maybe Int)
-rtCount = lens _rtCount (\s a -> s { _rtCount = a })
-
--- | A list of container overrides in JSON format that specify the name of a
--- container in the specified task definition and the command it should run
--- instead of its default. A total of 8192 characters are allowed for overrides.
--- This limit includes the JSON formatting characters of the override structure.
-rtOverrides :: Lens' RunTask (Maybe TaskOverride)
-rtOverrides = lens _rtOverrides (\s a -> s { _rtOverrides = a })
+rtCount = lens _rtCount (\ s a -> s{_rtCount = a});
 
 -- | An optional tag specified when a task is started. For example if you
--- automatically trigger a task to run a batch process job, you could apply a
--- unique identifier for that job to your task with the 'startedBy' parameter. You
--- can then identify which tasks belong to that job by filtering the results of
--- a 'ListTasks' call with the 'startedBy' value.
+-- automatically trigger a task to run a batch process job, you could apply
+-- a unique identifier for that job to your task with the 'startedBy'
+-- parameter. You can then identify which tasks belong to that job by
+-- filtering the results of a ListTasks call with the 'startedBy' value.
 --
--- If a task is started by an Amazon ECS service, then the 'startedBy' parameter
--- contains the deployment ID of the service that starts it.
+-- If a task is started by an Amazon ECS service, then the 'startedBy'
+-- parameter contains the deployment ID of the service that starts it.
 rtStartedBy :: Lens' RunTask (Maybe Text)
-rtStartedBy = lens _rtStartedBy (\s a -> s { _rtStartedBy = a })
+rtStartedBy = lens _rtStartedBy (\ s a -> s{_rtStartedBy = a});
 
--- | The 'family' and 'revision' ('family:revision') or full Amazon Resource Name (ARN)
--- of the task definition that you want to run.
+-- | The 'family' and 'revision' ('family:revision') or full Amazon Resource
+-- Name (ARN) of the task definition that you want to run. If a 'revision'
+-- is not specified, the latest 'ACTIVE' revision is used.
 rtTaskDefinition :: Lens' RunTask Text
-rtTaskDefinition = lens _rtTaskDefinition (\s a -> s { _rtTaskDefinition = a })
+rtTaskDefinition = lens _rtTaskDefinition (\ s a -> s{_rtTaskDefinition = a});
 
-data RunTaskResponse = RunTaskResponse
-    { _rtrFailures :: List "failures" Failure
-    , _rtrTasks    :: List "tasks" Task
-    } deriving (Eq, Read, Show)
+instance AWSRequest RunTask where
+        type Sv RunTask = ECS
+        type Rs RunTask = RunTaskResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RunTaskResponse' <$>
+                   (x .?> "failures" .!@ mempty) <*>
+                     (x .?> "tasks" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | 'RunTaskResponse' constructor.
+instance ToHeaders RunTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.RunTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RunTask where
+        toJSON RunTask'{..}
+          = object
+              ["overrides" .= _rtOverrides,
+               "cluster" .= _rtCluster, "count" .= _rtCount,
+               "startedBy" .= _rtStartedBy,
+               "taskDefinition" .= _rtTaskDefinition]
+
+instance ToPath RunTask where
+        toPath = const "/"
+
+instance ToQuery RunTask where
+        toQuery = const mempty
+
+-- | /See:/ 'runTaskResponse' smart constructor.
+data RunTaskResponse = RunTaskResponse'
+    { _rtrsFailures :: !(Maybe [Failure])
+    , _rtrsTasks    :: !(Maybe [Task])
+    , _rtrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunTaskResponse' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rtrFailures' @::@ ['Failure']
+-- * 'rtrsFailures'
 --
--- * 'rtrTasks' @::@ ['Task']
+-- * 'rtrsTasks'
 --
-runTaskResponse :: RunTaskResponse
-runTaskResponse = RunTaskResponse
-    { _rtrTasks    = mempty
-    , _rtrFailures = mempty
+-- * 'rtrsStatus'
+runTaskResponse
+    :: Int -- ^ 'rtrsStatus'
+    -> RunTaskResponse
+runTaskResponse pStatus_ =
+    RunTaskResponse'
+    { _rtrsFailures = Nothing
+    , _rtrsTasks = Nothing
+    , _rtrsStatus = pStatus_
     }
 
 -- | Any failed tasks from your 'RunTask' action are listed here.
-rtrFailures :: Lens' RunTaskResponse [Failure]
-rtrFailures = lens _rtrFailures (\s a -> s { _rtrFailures = a }) . _List
+rtrsFailures :: Lens' RunTaskResponse [Failure]
+rtrsFailures = lens _rtrsFailures (\ s a -> s{_rtrsFailures = a}) . _Default . _Coerce;
 
 -- | A full description of the tasks that were run. Each task that was
 -- successfully placed on your cluster will be described here.
-rtrTasks :: Lens' RunTaskResponse [Task]
-rtrTasks = lens _rtrTasks (\s a -> s { _rtrTasks = a }) . _List
-
-instance ToPath RunTask where
-    toPath = const "/"
-
-instance ToQuery RunTask where
-    toQuery = const mempty
-
-instance ToHeaders RunTask
-
-instance ToJSON RunTask where
-    toJSON RunTask{..} = object
-        [ "cluster"        .= _rtCluster
-        , "taskDefinition" .= _rtTaskDefinition
-        , "overrides"      .= _rtOverrides
-        , "count"          .= _rtCount
-        , "startedBy"      .= _rtStartedBy
-        ]
-
-instance AWSRequest RunTask where
-    type Sv RunTask = ECS
-    type Rs RunTask = RunTaskResponse
-
-    request  = post "RunTask"
-    response = jsonResponse
+rtrsTasks :: Lens' RunTaskResponse [Task]
+rtrsTasks = lens _rtrsTasks (\ s a -> s{_rtrsTasks = a}) . _Default . _Coerce;
 
-instance FromJSON RunTaskResponse where
-    parseJSON = withObject "RunTaskResponse" $ \o -> RunTaskResponse
-        <$> o .:? "failures" .!= mempty
-        <*> o .:? "tasks" .!= mempty
+-- | The response status code.
+rtrsStatus :: Lens' RunTaskResponse Int
+rtrsStatus = lens _rtrsStatus (\ s a -> s{_rtrsStatus = a});
diff --git a/gen/Network/AWS/ECS/StartTask.hs b/gen/Network/AWS/ECS/StartTask.hs
--- a/gen/Network/AWS/ECS/StartTask.hs
+++ b/gen/Network/AWS/ECS/StartTask.hs
@@ -1,190 +1,205 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.StartTask
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Starts a new task from the specified task definition on the specified
--- container instance or instances. If you want to use the default Amazon ECS
--- scheduler to place your task, use 'RunTask' instead.
+-- Starts a new task from the specified task definition on the specified
+-- container instance or instances. If you want to use the default Amazon
+-- ECS scheduler to place your task, use 'RunTask' instead.
 --
 -- The list of container instances to start tasks on is limited to 10.
 --
---
---
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StartTask.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StartTask.html AWS API Reference> for StartTask.
 module Network.AWS.ECS.StartTask
     (
-    -- * Request
-      StartTask
-    -- ** Request constructor
-    , startTask
-    -- ** Request lenses
-    , st1Cluster
-    , st1ContainerInstances
-    , st1Overrides
-    , st1StartedBy
-    , st1TaskDefinition
+    -- * Creating a Request
+      startTask
+    , StartTask
+    -- * Request Lenses
+    , sOverrides
+    , sCluster
+    , sStartedBy
+    , sTaskDefinition
+    , sContainerInstances
 
-    -- * Response
-    , StartTaskResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , startTaskResponse
-    -- ** Response lenses
-    , strFailures
-    , strTasks
+    , StartTaskResponse
+    -- * Response Lenses
+    , strsFailures
+    , strsTasks
+    , strsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data StartTask = StartTask
-    { _st1Cluster            :: Maybe Text
-    , _st1ContainerInstances :: List "containerInstances" Text
-    , _st1Overrides          :: Maybe TaskOverride
-    , _st1StartedBy          :: Maybe Text
-    , _st1TaskDefinition     :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'startTask' smart constructor.
+data StartTask = StartTask'
+    { _sOverrides          :: !(Maybe TaskOverride)
+    , _sCluster            :: !(Maybe Text)
+    , _sStartedBy          :: !(Maybe Text)
+    , _sTaskDefinition     :: !Text
+    , _sContainerInstances :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'StartTask' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'StartTask' with the minimum fields required to make a request.
 --
--- * 'st1Cluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'st1ContainerInstances' @::@ ['Text']
+-- * 'sOverrides'
 --
--- * 'st1Overrides' @::@ 'Maybe' 'TaskOverride'
+-- * 'sCluster'
 --
--- * 'st1StartedBy' @::@ 'Maybe' 'Text'
+-- * 'sStartedBy'
 --
--- * 'st1TaskDefinition' @::@ 'Text'
+-- * 'sTaskDefinition'
 --
-startTask :: Text -- ^ 'st1TaskDefinition'
-          -> StartTask
-startTask p1 = StartTask
-    { _st1TaskDefinition     = p1
-    , _st1Cluster            = Nothing
-    , _st1Overrides          = Nothing
-    , _st1ContainerInstances = mempty
-    , _st1StartedBy          = Nothing
+-- * 'sContainerInstances'
+startTask
+    :: Text -- ^ 'sTaskDefinition'
+    -> StartTask
+startTask pTaskDefinition_ =
+    StartTask'
+    { _sOverrides = Nothing
+    , _sCluster = Nothing
+    , _sStartedBy = Nothing
+    , _sTaskDefinition = pTaskDefinition_
+    , _sContainerInstances = mempty
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that you
--- want to start your task on. If you do not specify a cluster, the default
--- cluster is assumed..
-st1Cluster :: Lens' StartTask (Maybe Text)
-st1Cluster = lens _st1Cluster (\s a -> s { _st1Cluster = a })
-
--- | The container instance UUIDs or full Amazon Resource Name (ARN) entries for
--- the container instances on which you would like to place your task.
---
--- The list of container instances to start tasks on is limited to 10.
---
+-- | A list of container overrides in JSON format that specify the name of a
+-- container in the specified task definition and the overrides it should
+-- receive. You can override the default command for a container (that is
+-- specified in the task definition or Docker image) with a 'command'
+-- override. You can also override existing environment variables (that are
+-- specified in the task definition or Docker image) on a container or add
+-- new environment variables to it with an 'environment' override.
 --
-st1ContainerInstances :: Lens' StartTask [Text]
-st1ContainerInstances =
-    lens _st1ContainerInstances (\s a -> s { _st1ContainerInstances = a })
-        . _List
+-- A total of 8192 characters are allowed for overrides. This limit
+-- includes the JSON formatting characters of the override structure.
+sOverrides :: Lens' StartTask (Maybe TaskOverride)
+sOverrides = lens _sOverrides (\ s a -> s{_sOverrides = a});
 
--- | A list of container overrides in JSON format that specify the name of a
--- container in the specified task definition and the command it should run
--- instead of its default. A total of 8192 characters are allowed for overrides.
--- This limit includes the JSON formatting characters of the override structure.
-st1Overrides :: Lens' StartTask (Maybe TaskOverride)
-st1Overrides = lens _st1Overrides (\s a -> s { _st1Overrides = a })
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- you want to start your task on. If you do not specify a cluster, the
+-- default cluster is assumed..
+sCluster :: Lens' StartTask (Maybe Text)
+sCluster = lens _sCluster (\ s a -> s{_sCluster = a});
 
 -- | An optional tag specified when a task is started. For example if you
--- automatically trigger a task to run a batch process job, you could apply a
--- unique identifier for that job to your task with the 'startedBy' parameter. You
--- can then identify which tasks belong to that job by filtering the results of
--- a 'ListTasks' call with the 'startedBy' value.
+-- automatically trigger a task to run a batch process job, you could apply
+-- a unique identifier for that job to your task with the 'startedBy'
+-- parameter. You can then identify which tasks belong to that job by
+-- filtering the results of a ListTasks call with the 'startedBy' value.
 --
--- If a task is started by an Amazon ECS service, then the 'startedBy' parameter
--- contains the deployment ID of the service that starts it.
-st1StartedBy :: Lens' StartTask (Maybe Text)
-st1StartedBy = lens _st1StartedBy (\s a -> s { _st1StartedBy = a })
-
--- | The 'family' and 'revision' ('family:revision') or full Amazon Resource Name (ARN)
--- of the task definition that you want to start.
-st1TaskDefinition :: Lens' StartTask Text
-st1TaskDefinition =
-    lens _st1TaskDefinition (\s a -> s { _st1TaskDefinition = a })
+-- If a task is started by an Amazon ECS service, then the 'startedBy'
+-- parameter contains the deployment ID of the service that starts it.
+sStartedBy :: Lens' StartTask (Maybe Text)
+sStartedBy = lens _sStartedBy (\ s a -> s{_sStartedBy = a});
 
-data StartTaskResponse = StartTaskResponse
-    { _strFailures :: List "failures" Failure
-    , _strTasks    :: List "tasks" Task
-    } deriving (Eq, Read, Show)
+-- | The 'family' and 'revision' ('family:revision') or full Amazon Resource
+-- Name (ARN) of the task definition that you want to start. If a
+-- 'revision' is not specified, the latest 'ACTIVE' revision is used.
+sTaskDefinition :: Lens' StartTask Text
+sTaskDefinition = lens _sTaskDefinition (\ s a -> s{_sTaskDefinition = a});
 
--- | 'StartTaskResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'strFailures' @::@ ['Failure']
---
--- * 'strTasks' @::@ ['Task']
+-- | The container instance UUIDs or full Amazon Resource Name (ARN) entries
+-- for the container instances on which you would like to place your task.
 --
-startTaskResponse :: StartTaskResponse
-startTaskResponse = StartTaskResponse
-    { _strTasks    = mempty
-    , _strFailures = mempty
-    }
+-- The list of container instances to start tasks on is limited to 10.
+sContainerInstances :: Lens' StartTask [Text]
+sContainerInstances = lens _sContainerInstances (\ s a -> s{_sContainerInstances = a}) . _Coerce;
 
--- | Any failed tasks from your 'StartTask' action are listed here.
-strFailures :: Lens' StartTaskResponse [Failure]
-strFailures = lens _strFailures (\s a -> s { _strFailures = a }) . _List
+instance AWSRequest StartTask where
+        type Sv StartTask = ECS
+        type Rs StartTask = StartTaskResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartTaskResponse' <$>
+                   (x .?> "failures" .!@ mempty) <*>
+                     (x .?> "tasks" .!@ mempty)
+                     <*> (pure (fromEnum s)))
 
--- | A full description of the tasks that were started. Each task that was
--- successfully placed on your container instances will be described here.
-strTasks :: Lens' StartTaskResponse [Task]
-strTasks = lens _strTasks (\s a -> s { _strTasks = a }) . _List
+instance ToHeaders StartTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.StartTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
+instance ToJSON StartTask where
+        toJSON StartTask'{..}
+          = object
+              ["overrides" .= _sOverrides, "cluster" .= _sCluster,
+               "startedBy" .= _sStartedBy,
+               "taskDefinition" .= _sTaskDefinition,
+               "containerInstances" .= _sContainerInstances]
+
 instance ToPath StartTask where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery StartTask where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders StartTask
+-- | /See:/ 'startTaskResponse' smart constructor.
+data StartTaskResponse = StartTaskResponse'
+    { _strsFailures :: !(Maybe [Failure])
+    , _strsTasks    :: !(Maybe [Task])
+    , _strsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToJSON StartTask where
-    toJSON StartTask{..} = object
-        [ "cluster"            .= _st1Cluster
-        , "taskDefinition"     .= _st1TaskDefinition
-        , "overrides"          .= _st1Overrides
-        , "containerInstances" .= _st1ContainerInstances
-        , "startedBy"          .= _st1StartedBy
-        ]
+-- | Creates a value of 'StartTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'strsFailures'
+--
+-- * 'strsTasks'
+--
+-- * 'strsStatus'
+startTaskResponse
+    :: Int -- ^ 'strsStatus'
+    -> StartTaskResponse
+startTaskResponse pStatus_ =
+    StartTaskResponse'
+    { _strsFailures = Nothing
+    , _strsTasks = Nothing
+    , _strsStatus = pStatus_
+    }
 
-instance AWSRequest StartTask where
-    type Sv StartTask = ECS
-    type Rs StartTask = StartTaskResponse
+-- | Any failed tasks from your 'StartTask' action are listed here.
+strsFailures :: Lens' StartTaskResponse [Failure]
+strsFailures = lens _strsFailures (\ s a -> s{_strsFailures = a}) . _Default . _Coerce;
 
-    request  = post "StartTask"
-    response = jsonResponse
+-- | A full description of the tasks that were started. Each task that was
+-- successfully placed on your container instances will be described here.
+strsTasks :: Lens' StartTaskResponse [Task]
+strsTasks = lens _strsTasks (\ s a -> s{_strsTasks = a}) . _Default . _Coerce;
 
-instance FromJSON StartTaskResponse where
-    parseJSON = withObject "StartTaskResponse" $ \o -> StartTaskResponse
-        <$> o .:? "failures" .!= mempty
-        <*> o .:? "tasks" .!= mempty
+-- | The response status code.
+strsStatus :: Lens' StartTaskResponse Int
+strsStatus = lens _strsStatus (\ s a -> s{_strsStatus = a});
diff --git a/gen/Network/AWS/ECS/StopTask.hs b/gen/Network/AWS/ECS/StopTask.hs
--- a/gen/Network/AWS/ECS/StopTask.hs
+++ b/gen/Network/AWS/ECS/StopTask.hs
@@ -1,124 +1,138 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.StopTask
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Stops a running task.
+-- Stops a running task.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StopTask.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StopTask.html AWS API Reference> for StopTask.
 module Network.AWS.ECS.StopTask
     (
-    -- * Request
-      StopTask
-    -- ** Request constructor
-    , stopTask
-    -- ** Request lenses
+    -- * Creating a Request
+      stopTask
+    , StopTask
+    -- * Request Lenses
     , stCluster
     , stTask
 
-    -- * Response
-    , StopTaskResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , stopTaskResponse
-    -- ** Response lenses
-    , strTask
+    , StopTaskResponse
+    -- * Response Lenses
+    , srsTask
+    , srsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data StopTask = StopTask
-    { _stCluster :: Maybe Text
-    , _stTask    :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'stopTask' smart constructor.
+data StopTask = StopTask'
+    { _stCluster :: !(Maybe Text)
+    , _stTask    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'StopTask' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'StopTask' with the minimum fields required to make a request.
 --
--- * 'stCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'stTask' @::@ 'Text'
+-- * 'stCluster'
 --
-stopTask :: Text -- ^ 'stTask'
-         -> StopTask
-stopTask p1 = StopTask
-    { _stTask    = p1
-    , _stCluster = Nothing
+-- * 'stTask'
+stopTask
+    :: Text -- ^ 'stTask'
+    -> StopTask
+stopTask pTask_ =
+    StopTask'
+    { _stCluster = Nothing
+    , _stTask = pTask_
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the task you want to stop. If you do not specify a cluster, the default
--- cluster is assumed..
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the task you want to stop. If you do not specify a cluster, the
+-- default cluster is assumed..
 stCluster :: Lens' StopTask (Maybe Text)
-stCluster = lens _stCluster (\s a -> s { _stCluster = a })
+stCluster = lens _stCluster (\ s a -> s{_stCluster = a});
 
--- | The task UUIDs or full Amazon Resource Name (ARN) entry of the task you would
--- like to stop.
+-- | The task UUIDs or full Amazon Resource Name (ARN) entry of the task you
+-- would like to stop.
 stTask :: Lens' StopTask Text
-stTask = lens _stTask (\s a -> s { _stTask = a })
+stTask = lens _stTask (\ s a -> s{_stTask = a});
 
-newtype StopTaskResponse = StopTaskResponse
-    { _strTask :: Maybe Task
-    } deriving (Eq, Read, Show)
+instance AWSRequest StopTask where
+        type Sv StopTask = ECS
+        type Rs StopTask = StopTaskResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StopTaskResponse' <$>
+                   (x .?> "task") <*> (pure (fromEnum s)))
 
--- | 'StopTaskResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'strTask' @::@ 'Maybe' 'Task'
---
-stopTaskResponse :: StopTaskResponse
-stopTaskResponse = StopTaskResponse
-    { _strTask = Nothing
-    }
+instance ToHeaders StopTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.StopTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
-strTask :: Lens' StopTaskResponse (Maybe Task)
-strTask = lens _strTask (\s a -> s { _strTask = a })
+instance ToJSON StopTask where
+        toJSON StopTask'{..}
+          = object ["cluster" .= _stCluster, "task" .= _stTask]
 
 instance ToPath StopTask where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery StopTask where
-    toQuery = const mempty
-
-instance ToHeaders StopTask
+        toQuery = const mempty
 
-instance ToJSON StopTask where
-    toJSON StopTask{..} = object
-        [ "cluster" .= _stCluster
-        , "task"    .= _stTask
-        ]
+-- | /See:/ 'stopTaskResponse' smart constructor.
+data StopTaskResponse = StopTaskResponse'
+    { _srsTask   :: !(Maybe Task)
+    , _srsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest StopTask where
-    type Sv StopTask = ECS
-    type Rs StopTask = StopTaskResponse
+-- | Creates a value of 'StopTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsTask'
+--
+-- * 'srsStatus'
+stopTaskResponse
+    :: Int -- ^ 'srsStatus'
+    -> StopTaskResponse
+stopTaskResponse pStatus_ =
+    StopTaskResponse'
+    { _srsTask = Nothing
+    , _srsStatus = pStatus_
+    }
 
-    request  = post "StopTask"
-    response = jsonResponse
+-- | Undocumented member.
+srsTask :: Lens' StopTaskResponse (Maybe Task)
+srsTask = lens _srsTask (\ s a -> s{_srsTask = a});
 
-instance FromJSON StopTaskResponse where
-    parseJSON = withObject "StopTaskResponse" $ \o -> StopTaskResponse
-        <$> o .:? "task"
+-- | The response status code.
+srsStatus :: Lens' StopTaskResponse Int
+srsStatus = lens _srsStatus (\ s a -> s{_srsStatus = a});
diff --git a/gen/Network/AWS/ECS/SubmitContainerStateChange.hs b/gen/Network/AWS/ECS/SubmitContainerStateChange.hs
--- a/gen/Network/AWS/ECS/SubmitContainerStateChange.hs
+++ b/gen/Network/AWS/ECS/SubmitContainerStateChange.hs
@@ -1,180 +1,190 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.SubmitContainerStateChange
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action is only used by the Amazon EC2 Container Service agent, and it is
--- not intended for use outside of the agent.
+-- This action is only used by the Amazon EC2 Container Service agent, and
+-- it is not intended for use outside of the agent.
 --
 -- Sent to acknowledge that a container changed states.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_SubmitContainerStateChange.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_SubmitContainerStateChange.html AWS API Reference> for SubmitContainerStateChange.
 module Network.AWS.ECS.SubmitContainerStateChange
     (
-    -- * Request
-      SubmitContainerStateChange
-    -- ** Request constructor
-    , submitContainerStateChange
-    -- ** Request lenses
+    -- * Creating a Request
+      submitContainerStateChange
+    , SubmitContainerStateChange
+    -- * Request Lenses
+    , scscNetworkBindings
+    , scscStatus
     , scscCluster
     , scscContainerName
-    , scscExitCode
-    , scscNetworkBindings
     , scscReason
-    , scscStatus
+    , scscExitCode
     , scscTask
 
-    -- * Response
-    , SubmitContainerStateChangeResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , submitContainerStateChangeResponse
-    -- ** Response lenses
-    , scscrAcknowledgment
+    , SubmitContainerStateChangeResponse
+    -- * Response Lenses
+    , scscrsAcknowledgment
+    , scscrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data SubmitContainerStateChange = SubmitContainerStateChange
-    { _scscCluster         :: Maybe Text
-    , _scscContainerName   :: Maybe Text
-    , _scscExitCode        :: Maybe Int
-    , _scscNetworkBindings :: List "networkBindings" NetworkBinding
-    , _scscReason          :: Maybe Text
-    , _scscStatus          :: Maybe Text
-    , _scscTask            :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'submitContainerStateChange' smart constructor.
+data SubmitContainerStateChange = SubmitContainerStateChange'
+    { _scscNetworkBindings :: !(Maybe [NetworkBinding])
+    , _scscStatus          :: !(Maybe Text)
+    , _scscCluster         :: !(Maybe Text)
+    , _scscContainerName   :: !(Maybe Text)
+    , _scscReason          :: !(Maybe Text)
+    , _scscExitCode        :: !(Maybe Int)
+    , _scscTask            :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'SubmitContainerStateChange' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'SubmitContainerStateChange' with the minimum fields required to make a request.
 --
--- * 'scscCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'scscContainerName' @::@ 'Maybe' 'Text'
+-- * 'scscNetworkBindings'
 --
--- * 'scscExitCode' @::@ 'Maybe' 'Int'
+-- * 'scscStatus'
 --
--- * 'scscNetworkBindings' @::@ ['NetworkBinding']
+-- * 'scscCluster'
 --
--- * 'scscReason' @::@ 'Maybe' 'Text'
+-- * 'scscContainerName'
 --
--- * 'scscStatus' @::@ 'Maybe' 'Text'
+-- * 'scscReason'
 --
--- * 'scscTask' @::@ 'Maybe' 'Text'
+-- * 'scscExitCode'
 --
-submitContainerStateChange :: SubmitContainerStateChange
-submitContainerStateChange = SubmitContainerStateChange
-    { _scscCluster         = Nothing
-    , _scscTask            = Nothing
-    , _scscContainerName   = Nothing
-    , _scscStatus          = Nothing
-    , _scscExitCode        = Nothing
-    , _scscReason          = Nothing
-    , _scscNetworkBindings = mempty
+-- * 'scscTask'
+submitContainerStateChange
+    :: SubmitContainerStateChange
+submitContainerStateChange =
+    SubmitContainerStateChange'
+    { _scscNetworkBindings = Nothing
+    , _scscStatus = Nothing
+    , _scscCluster = Nothing
+    , _scscContainerName = Nothing
+    , _scscReason = Nothing
+    , _scscExitCode = Nothing
+    , _scscTask = Nothing
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the container.
+-- | The network bindings of the container.
+scscNetworkBindings :: Lens' SubmitContainerStateChange [NetworkBinding]
+scscNetworkBindings = lens _scscNetworkBindings (\ s a -> s{_scscNetworkBindings = a}) . _Default . _Coerce;
+
+-- | The status of the state change request.
+scscStatus :: Lens' SubmitContainerStateChange (Maybe Text)
+scscStatus = lens _scscStatus (\ s a -> s{_scscStatus = a});
+
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the container.
 scscCluster :: Lens' SubmitContainerStateChange (Maybe Text)
-scscCluster = lens _scscCluster (\s a -> s { _scscCluster = a })
+scscCluster = lens _scscCluster (\ s a -> s{_scscCluster = a});
 
 -- | The name of the container.
 scscContainerName :: Lens' SubmitContainerStateChange (Maybe Text)
-scscContainerName =
-    lens _scscContainerName (\s a -> s { _scscContainerName = a })
-
--- | The exit code returned for the state change request.
-scscExitCode :: Lens' SubmitContainerStateChange (Maybe Int)
-scscExitCode = lens _scscExitCode (\s a -> s { _scscExitCode = a })
-
--- | The network bindings of the container.
-scscNetworkBindings :: Lens' SubmitContainerStateChange [NetworkBinding]
-scscNetworkBindings =
-    lens _scscNetworkBindings (\s a -> s { _scscNetworkBindings = a })
-        . _List
+scscContainerName = lens _scscContainerName (\ s a -> s{_scscContainerName = a});
 
 -- | The reason for the state change request.
 scscReason :: Lens' SubmitContainerStateChange (Maybe Text)
-scscReason = lens _scscReason (\s a -> s { _scscReason = a })
+scscReason = lens _scscReason (\ s a -> s{_scscReason = a});
 
--- | The status of the state change request.
-scscStatus :: Lens' SubmitContainerStateChange (Maybe Text)
-scscStatus = lens _scscStatus (\s a -> s { _scscStatus = a })
+-- | The exit code returned for the state change request.
+scscExitCode :: Lens' SubmitContainerStateChange (Maybe Int)
+scscExitCode = lens _scscExitCode (\ s a -> s{_scscExitCode = a});
 
--- | The task UUID or full Amazon Resource Name (ARN) of the task that hosts the
--- container.
+-- | The task UUID or full Amazon Resource Name (ARN) of the task that hosts
+-- the container.
 scscTask :: Lens' SubmitContainerStateChange (Maybe Text)
-scscTask = lens _scscTask (\s a -> s { _scscTask = a })
+scscTask = lens _scscTask (\ s a -> s{_scscTask = a});
 
-newtype SubmitContainerStateChangeResponse = SubmitContainerStateChangeResponse
-    { _scscrAcknowledgment :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+instance AWSRequest SubmitContainerStateChange where
+        type Sv SubmitContainerStateChange = ECS
+        type Rs SubmitContainerStateChange =
+             SubmitContainerStateChangeResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 SubmitContainerStateChangeResponse' <$>
+                   (x .?> "acknowledgment") <*> (pure (fromEnum s)))
 
--- | 'SubmitContainerStateChangeResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'scscrAcknowledgment' @::@ 'Maybe' 'Text'
---
-submitContainerStateChangeResponse :: SubmitContainerStateChangeResponse
-submitContainerStateChangeResponse = SubmitContainerStateChangeResponse
-    { _scscrAcknowledgment = Nothing
-    }
+instance ToHeaders SubmitContainerStateChange where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.SubmitContainerStateChange"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Acknowledgement of the state change.
-scscrAcknowledgment :: Lens' SubmitContainerStateChangeResponse (Maybe Text)
-scscrAcknowledgment =
-    lens _scscrAcknowledgment (\s a -> s { _scscrAcknowledgment = a })
+instance ToJSON SubmitContainerStateChange where
+        toJSON SubmitContainerStateChange'{..}
+          = object
+              ["networkBindings" .= _scscNetworkBindings,
+               "status" .= _scscStatus, "cluster" .= _scscCluster,
+               "containerName" .= _scscContainerName,
+               "reason" .= _scscReason, "exitCode" .= _scscExitCode,
+               "task" .= _scscTask]
 
 instance ToPath SubmitContainerStateChange where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SubmitContainerStateChange where
-    toQuery = const mempty
-
-instance ToHeaders SubmitContainerStateChange
+        toQuery = const mempty
 
-instance ToJSON SubmitContainerStateChange where
-    toJSON SubmitContainerStateChange{..} = object
-        [ "cluster"         .= _scscCluster
-        , "task"            .= _scscTask
-        , "containerName"   .= _scscContainerName
-        , "status"          .= _scscStatus
-        , "exitCode"        .= _scscExitCode
-        , "reason"          .= _scscReason
-        , "networkBindings" .= _scscNetworkBindings
-        ]
+-- | /See:/ 'submitContainerStateChangeResponse' smart constructor.
+data SubmitContainerStateChangeResponse = SubmitContainerStateChangeResponse'
+    { _scscrsAcknowledgment :: !(Maybe Text)
+    , _scscrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest SubmitContainerStateChange where
-    type Sv SubmitContainerStateChange = ECS
-    type Rs SubmitContainerStateChange = SubmitContainerStateChangeResponse
+-- | Creates a value of 'SubmitContainerStateChangeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scscrsAcknowledgment'
+--
+-- * 'scscrsStatus'
+submitContainerStateChangeResponse
+    :: Int -- ^ 'scscrsStatus'
+    -> SubmitContainerStateChangeResponse
+submitContainerStateChangeResponse pStatus_ =
+    SubmitContainerStateChangeResponse'
+    { _scscrsAcknowledgment = Nothing
+    , _scscrsStatus = pStatus_
+    }
 
-    request  = post "SubmitContainerStateChange"
-    response = jsonResponse
+-- | Acknowledgement of the state change.
+scscrsAcknowledgment :: Lens' SubmitContainerStateChangeResponse (Maybe Text)
+scscrsAcknowledgment = lens _scscrsAcknowledgment (\ s a -> s{_scscrsAcknowledgment = a});
 
-instance FromJSON SubmitContainerStateChangeResponse where
-    parseJSON = withObject "SubmitContainerStateChangeResponse" $ \o -> SubmitContainerStateChangeResponse
-        <$> o .:? "acknowledgment"
+-- | The response status code.
+scscrsStatus :: Lens' SubmitContainerStateChangeResponse Int
+scscrsStatus = lens _scscrsStatus (\ s a -> s{_scscrsStatus = a});
diff --git a/gen/Network/AWS/ECS/SubmitTaskStateChange.hs b/gen/Network/AWS/ECS/SubmitTaskStateChange.hs
--- a/gen/Network/AWS/ECS/SubmitTaskStateChange.hs
+++ b/gen/Network/AWS/ECS/SubmitTaskStateChange.hs
@@ -1,147 +1,160 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.SubmitTaskStateChange
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | This action is only used by the Amazon EC2 Container Service agent, and it is
--- not intended for use outside of the agent.
+-- This action is only used by the Amazon EC2 Container Service agent, and
+-- it is not intended for use outside of the agent.
 --
 -- Sent to acknowledge that a task changed states.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_SubmitTaskStateChange.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_SubmitTaskStateChange.html AWS API Reference> for SubmitTaskStateChange.
 module Network.AWS.ECS.SubmitTaskStateChange
     (
-    -- * Request
-      SubmitTaskStateChange
-    -- ** Request constructor
-    , submitTaskStateChange
-    -- ** Request lenses
+    -- * Creating a Request
+      submitTaskStateChange
+    , SubmitTaskStateChange
+    -- * Request Lenses
+    , stscStatus
     , stscCluster
     , stscReason
-    , stscStatus
     , stscTask
 
-    -- * Response
-    , SubmitTaskStateChangeResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , submitTaskStateChangeResponse
-    -- ** Response lenses
-    , stscrAcknowledgment
+    , SubmitTaskStateChangeResponse
+    -- * Response Lenses
+    , stscrsAcknowledgment
+    , stscrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data SubmitTaskStateChange = SubmitTaskStateChange
-    { _stscCluster :: Maybe Text
-    , _stscReason  :: Maybe Text
-    , _stscStatus  :: Maybe Text
-    , _stscTask    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'submitTaskStateChange' smart constructor.
+data SubmitTaskStateChange = SubmitTaskStateChange'
+    { _stscStatus  :: !(Maybe Text)
+    , _stscCluster :: !(Maybe Text)
+    , _stscReason  :: !(Maybe Text)
+    , _stscTask    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'SubmitTaskStateChange' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'SubmitTaskStateChange' with the minimum fields required to make a request.
 --
--- * 'stscCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'stscReason' @::@ 'Maybe' 'Text'
+-- * 'stscStatus'
 --
--- * 'stscStatus' @::@ 'Maybe' 'Text'
+-- * 'stscCluster'
 --
--- * 'stscTask' @::@ 'Maybe' 'Text'
+-- * 'stscReason'
 --
-submitTaskStateChange :: SubmitTaskStateChange
-submitTaskStateChange = SubmitTaskStateChange
-    { _stscCluster = Nothing
-    , _stscTask    = Nothing
-    , _stscStatus  = Nothing
-    , _stscReason  = Nothing
+-- * 'stscTask'
+submitTaskStateChange
+    :: SubmitTaskStateChange
+submitTaskStateChange =
+    SubmitTaskStateChange'
+    { _stscStatus = Nothing
+    , _stscCluster = Nothing
+    , _stscReason = Nothing
+    , _stscTask = Nothing
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that hosts
--- the task.
+-- | The status of the state change request.
+stscStatus :: Lens' SubmitTaskStateChange (Maybe Text)
+stscStatus = lens _stscStatus (\ s a -> s{_stscStatus = a});
+
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- hosts the task.
 stscCluster :: Lens' SubmitTaskStateChange (Maybe Text)
-stscCluster = lens _stscCluster (\s a -> s { _stscCluster = a })
+stscCluster = lens _stscCluster (\ s a -> s{_stscCluster = a});
 
 -- | The reason for the state change request.
 stscReason :: Lens' SubmitTaskStateChange (Maybe Text)
-stscReason = lens _stscReason (\s a -> s { _stscReason = a })
-
--- | The status of the state change request.
-stscStatus :: Lens' SubmitTaskStateChange (Maybe Text)
-stscStatus = lens _stscStatus (\s a -> s { _stscStatus = a })
+stscReason = lens _stscReason (\ s a -> s{_stscReason = a});
 
--- | The task UUID or full Amazon Resource Name (ARN) of the task in the state
--- change request.
+-- | The task UUID or full Amazon Resource Name (ARN) of the task in the
+-- state change request.
 stscTask :: Lens' SubmitTaskStateChange (Maybe Text)
-stscTask = lens _stscTask (\s a -> s { _stscTask = a })
+stscTask = lens _stscTask (\ s a -> s{_stscTask = a});
 
-newtype SubmitTaskStateChangeResponse = SubmitTaskStateChangeResponse
-    { _stscrAcknowledgment :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+instance AWSRequest SubmitTaskStateChange where
+        type Sv SubmitTaskStateChange = ECS
+        type Rs SubmitTaskStateChange =
+             SubmitTaskStateChangeResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 SubmitTaskStateChangeResponse' <$>
+                   (x .?> "acknowledgment") <*> (pure (fromEnum s)))
 
--- | 'SubmitTaskStateChangeResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'stscrAcknowledgment' @::@ 'Maybe' 'Text'
---
-submitTaskStateChangeResponse :: SubmitTaskStateChangeResponse
-submitTaskStateChangeResponse = SubmitTaskStateChangeResponse
-    { _stscrAcknowledgment = Nothing
-    }
+instance ToHeaders SubmitTaskStateChange where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.SubmitTaskStateChange"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | Acknowledgement of the state change.
-stscrAcknowledgment :: Lens' SubmitTaskStateChangeResponse (Maybe Text)
-stscrAcknowledgment =
-    lens _stscrAcknowledgment (\s a -> s { _stscrAcknowledgment = a })
+instance ToJSON SubmitTaskStateChange where
+        toJSON SubmitTaskStateChange'{..}
+          = object
+              ["status" .= _stscStatus, "cluster" .= _stscCluster,
+               "reason" .= _stscReason, "task" .= _stscTask]
 
 instance ToPath SubmitTaskStateChange where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SubmitTaskStateChange where
-    toQuery = const mempty
-
-instance ToHeaders SubmitTaskStateChange
+        toQuery = const mempty
 
-instance ToJSON SubmitTaskStateChange where
-    toJSON SubmitTaskStateChange{..} = object
-        [ "cluster" .= _stscCluster
-        , "task"    .= _stscTask
-        , "status"  .= _stscStatus
-        , "reason"  .= _stscReason
-        ]
+-- | /See:/ 'submitTaskStateChangeResponse' smart constructor.
+data SubmitTaskStateChangeResponse = SubmitTaskStateChangeResponse'
+    { _stscrsAcknowledgment :: !(Maybe Text)
+    , _stscrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest SubmitTaskStateChange where
-    type Sv SubmitTaskStateChange = ECS
-    type Rs SubmitTaskStateChange = SubmitTaskStateChangeResponse
+-- | Creates a value of 'SubmitTaskStateChangeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stscrsAcknowledgment'
+--
+-- * 'stscrsStatus'
+submitTaskStateChangeResponse
+    :: Int -- ^ 'stscrsStatus'
+    -> SubmitTaskStateChangeResponse
+submitTaskStateChangeResponse pStatus_ =
+    SubmitTaskStateChangeResponse'
+    { _stscrsAcknowledgment = Nothing
+    , _stscrsStatus = pStatus_
+    }
 
-    request  = post "SubmitTaskStateChange"
-    response = jsonResponse
+-- | Acknowledgement of the state change.
+stscrsAcknowledgment :: Lens' SubmitTaskStateChangeResponse (Maybe Text)
+stscrsAcknowledgment = lens _stscrsAcknowledgment (\ s a -> s{_stscrsAcknowledgment = a});
 
-instance FromJSON SubmitTaskStateChangeResponse where
-    parseJSON = withObject "SubmitTaskStateChangeResponse" $ \o -> SubmitTaskStateChangeResponse
-        <$> o .:? "acknowledgment"
+-- | The response status code.
+stscrsStatus :: Lens' SubmitTaskStateChangeResponse Int
+stscrsStatus = lens _stscrsStatus (\ s a -> s{_stscrsStatus = a});
diff --git a/gen/Network/AWS/ECS/Types.hs b/gen/Network/AWS/ECS/Types.hs
--- a/gen/Network/AWS/ECS/Types.hs
+++ b/gen/Network/AWS/ECS/Types.hs
@@ -1,1795 +1,355 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.ECS.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
-module Network.AWS.ECS.Types
-    (
-    -- * Service
-      ECS
-    -- ** Error
-    , JSONError
-
-    -- * NetworkBinding
-    , NetworkBinding
-    , networkBinding
-    , nbBindIP
-    , nbContainerPort
-    , nbHostPort
-
-    -- * ContainerService
-    , ContainerService
-    , containerService
-    , csClusterArn
-    , csDeployments
-    , csDesiredCount
-    , csEvents
-    , csLoadBalancers
-    , csPendingCount
-    , csRoleArn
-    , csRunningCount
-    , csServiceArn
-    , csServiceName
-    , csStatus
-    , csTaskDefinition
-
-    -- * Cluster
-    , Cluster
-    , cluster
-    , cClusterArn
-    , cClusterName
-    , cPendingTasksCount
-    , cRegisteredContainerInstancesCount
-    , cRunningTasksCount
-    , cStatus
-
-    -- * Volume
-    , Volume
-    , volume
-    , vHost
-    , vName
-
-    -- * ContainerOverride
-    , ContainerOverride
-    , containerOverride
-    , coCommand
-    , coName
-
-    -- * KeyValuePair
-    , KeyValuePair
-    , keyValuePair
-    , kvpName
-    , kvpValue
-
-    -- * VolumeFrom
-    , VolumeFrom
-    , volumeFrom
-    , vfReadOnly
-    , vfSourceContainer
-
-    -- * TaskOverride
-    , TaskOverride
-    , taskOverride
-    , toContainerOverrides
-
-    -- * HostVolumeProperties
-    , HostVolumeProperties
-    , hostVolumeProperties
-    , hvpSourcePath
-
-    -- * VersionInfo
-    , VersionInfo
-    , versionInfo
-    , viAgentHash
-    , viAgentVersion
-    , viDockerVersion
-
-    -- * Container
-    , Container
-    , container
-    , cContainerArn
-    , cExitCode
-    , cLastStatus
-    , cName
-    , cNetworkBindings
-    , cReason
-    , cTaskArn
-
-    -- * LoadBalancer
-    , LoadBalancer
-    , loadBalancer
-    , lbContainerName
-    , lbContainerPort
-    , lbLoadBalancerName
-
-    -- * ContainerDefinition
-    , ContainerDefinition
-    , containerDefinition
-    , cdCommand
-    , cdCpu
-    , cdEntryPoint
-    , cdEnvironment
-    , cdEssential
-    , cdImage
-    , cdLinks
-    , cdMemory
-    , cdMountPoints
-    , cdName
-    , cdPortMappings
-    , cdVolumesFrom
-
-    -- * Resource
-    , Resource
-    , resource
-    , rDoubleValue
-    , rIntegerValue
-    , rLongValue
-    , rName
-    , rStringSetValue
-    , rType
-
-    -- * Task
-    , Task
-    , task
-    , tClusterArn
-    , tContainerInstanceArn
-    , tContainers
-    , tDesiredStatus
-    , tLastStatus
-    , tOverrides
-    , tStartedBy
-    , tTaskArn
-    , tTaskDefinitionArn
-
-    -- * PortMapping
-    , PortMapping
-    , portMapping
-    , pmContainerPort
-    , pmHostPort
-
-    -- * TaskDefinition
-    , TaskDefinition
-    , taskDefinition
-    , tdContainerDefinitions
-    , tdFamily
-    , tdRevision
-    , tdTaskDefinitionArn
-    , tdVolumes
-
-    -- * Failure
-    , Failure
-    , failure
-    , fArn
-    , fReason
-
-    -- * ContainerInstance
-    , ContainerInstance
-    , containerInstance
-    , ciAgentConnected
-    , ciContainerInstanceArn
-    , ciEc2InstanceId
-    , ciPendingTasksCount
-    , ciRegisteredResources
-    , ciRemainingResources
-    , ciRunningTasksCount
-    , ciStatus
-
-    -- * ServiceEvent
-    , ServiceEvent
-    , serviceEvent
-    , seCreatedAt
-    , seId
-    , seMessage
-
-    -- * Deployment
-    , Deployment
-    , deployment
-    , dCreatedAt
-    , dDesiredCount
-    , dId
-    , dPendingCount
-    , dRunningCount
-    , dStatus
-    , dTaskDefinition
-    , dUpdatedAt
-
-    -- * MountPoint
-    , MountPoint
-    , mountPoint
-    , mpContainerPath
-    , mpReadOnly
-    , mpSourceVolume
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
-
--- | Version @2014-11-13@ of the Amazon EC2 Container Service service.
-data ECS
-
-instance AWSService ECS where
-    type Sg ECS = V4
-    type Er ECS = JSONError
-
-    service = service'
-      where
-        service' :: Service ECS
-        service' = Service
-            { _svcAbbrev       = "ECS"
-            , _svcPrefix       = "ecs"
-            , _svcVersion      = "2014-11-13"
-            , _svcTargetPrefix = Just "AmazonEC2ContainerServiceV20141113"
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry ECS
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data NetworkBinding = NetworkBinding
-    { _nbBindIP        :: Maybe Text
-    , _nbContainerPort :: Maybe Int
-    , _nbHostPort      :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'NetworkBinding' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'nbBindIP' @::@ 'Maybe' 'Text'
---
--- * 'nbContainerPort' @::@ 'Maybe' 'Int'
---
--- * 'nbHostPort' @::@ 'Maybe' 'Int'
---
-networkBinding :: NetworkBinding
-networkBinding = NetworkBinding
-    { _nbBindIP        = Nothing
-    , _nbContainerPort = Nothing
-    , _nbHostPort      = Nothing
-    }
-
--- | The IP address that the container is bound to on the container instance.
-nbBindIP :: Lens' NetworkBinding (Maybe Text)
-nbBindIP = lens _nbBindIP (\s a -> s { _nbBindIP = a })
-
--- | The port number on the container that is be used with the network binding.
-nbContainerPort :: Lens' NetworkBinding (Maybe Int)
-nbContainerPort = lens _nbContainerPort (\s a -> s { _nbContainerPort = a })
-
--- | The port number on the host that is used with the network binding.
-nbHostPort :: Lens' NetworkBinding (Maybe Int)
-nbHostPort = lens _nbHostPort (\s a -> s { _nbHostPort = a })
-
-instance FromJSON NetworkBinding where
-    parseJSON = withObject "NetworkBinding" $ \o -> NetworkBinding
-        <$> o .:? "bindIP"
-        <*> o .:? "containerPort"
-        <*> o .:? "hostPort"
-
-instance ToJSON NetworkBinding where
-    toJSON NetworkBinding{..} = object
-        [ "bindIP"        .= _nbBindIP
-        , "containerPort" .= _nbContainerPort
-        , "hostPort"      .= _nbHostPort
-        ]
-
-data ContainerService = ContainerService
-    { _csClusterArn     :: Maybe Text
-    , _csDeployments    :: List "deployments" Deployment
-    , _csDesiredCount   :: Maybe Int
-    , _csEvents         :: List "events" ServiceEvent
-    , _csLoadBalancers  :: List "loadBalancers" LoadBalancer
-    , _csPendingCount   :: Maybe Int
-    , _csRoleArn        :: Maybe Text
-    , _csRunningCount   :: Maybe Int
-    , _csServiceArn     :: Maybe Text
-    , _csServiceName    :: Maybe Text
-    , _csStatus         :: Maybe Text
-    , _csTaskDefinition :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ContainerService' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'csClusterArn' @::@ 'Maybe' 'Text'
---
--- * 'csDeployments' @::@ ['Deployment']
---
--- * 'csDesiredCount' @::@ 'Maybe' 'Int'
---
--- * 'csEvents' @::@ ['ServiceEvent']
---
--- * 'csLoadBalancers' @::@ ['LoadBalancer']
---
--- * 'csPendingCount' @::@ 'Maybe' 'Int'
---
--- * 'csRoleArn' @::@ 'Maybe' 'Text'
---
--- * 'csRunningCount' @::@ 'Maybe' 'Int'
---
--- * 'csServiceArn' @::@ 'Maybe' 'Text'
---
--- * 'csServiceName' @::@ 'Maybe' 'Text'
---
--- * 'csStatus' @::@ 'Maybe' 'Text'
---
--- * 'csTaskDefinition' @::@ 'Maybe' 'Text'
---
-containerService :: ContainerService
-containerService = ContainerService
-    { _csServiceArn     = Nothing
-    , _csServiceName    = Nothing
-    , _csClusterArn     = Nothing
-    , _csLoadBalancers  = mempty
-    , _csStatus         = Nothing
-    , _csDesiredCount   = Nothing
-    , _csRunningCount   = Nothing
-    , _csPendingCount   = Nothing
-    , _csTaskDefinition = Nothing
-    , _csDeployments    = mempty
-    , _csRoleArn        = Nothing
-    , _csEvents         = mempty
-    }
-
--- | The Amazon Resource Name (ARN) of the of the cluster that hosts the service.
-csClusterArn :: Lens' ContainerService (Maybe Text)
-csClusterArn = lens _csClusterArn (\s a -> s { _csClusterArn = a })
-
--- | The current state of deployments for the service.
-csDeployments :: Lens' ContainerService [Deployment]
-csDeployments = lens _csDeployments (\s a -> s { _csDeployments = a }) . _List
-
--- | The desired number of instantiations of the task definition to keep running
--- on the service. This value is specified when the service is created with 'CreateService', and it can be modified with 'UpdateService'.
-csDesiredCount :: Lens' ContainerService (Maybe Int)
-csDesiredCount = lens _csDesiredCount (\s a -> s { _csDesiredCount = a })
-
--- | The event stream for your service. A maximum of 100 of the latest events are
--- displayed.
-csEvents :: Lens' ContainerService [ServiceEvent]
-csEvents = lens _csEvents (\s a -> s { _csEvents = a }) . _List
-
--- | A list of load balancer objects, containing the load balancer name, the
--- container name (as it appears in a container definition), and the container
--- port to access from the load balancer.
-csLoadBalancers :: Lens' ContainerService [LoadBalancer]
-csLoadBalancers = lens _csLoadBalancers (\s a -> s { _csLoadBalancers = a }) . _List
-
--- | The number of tasks in the cluster that are in the 'PENDING' state.
-csPendingCount :: Lens' ContainerService (Maybe Int)
-csPendingCount = lens _csPendingCount (\s a -> s { _csPendingCount = a })
-
--- | The Amazon Resource Name (ARN) of the IAM role associated with the service
--- that allows the Amazon ECS container agent to register container instances
--- with a load balancer.
-csRoleArn :: Lens' ContainerService (Maybe Text)
-csRoleArn = lens _csRoleArn (\s a -> s { _csRoleArn = a })
-
--- | The number of tasks in the cluster that are in the 'RUNNING' state.
-csRunningCount :: Lens' ContainerService (Maybe Int)
-csRunningCount = lens _csRunningCount (\s a -> s { _csRunningCount = a })
-
--- | The Amazon Resource Name (ARN) that identifies the service. The ARN contains
--- the 'arn:aws:ecs' namespace, followed by the region of the service, the AWS
--- account ID of the service owner, the 'service' namespace, and then the service
--- name. For example, arn:aws:ecs:/region/:/012345678910/:service//my-service/.
-csServiceArn :: Lens' ContainerService (Maybe Text)
-csServiceArn = lens _csServiceArn (\s a -> s { _csServiceArn = a })
-
--- | A user-generated string that you can use to identify your service.
-csServiceName :: Lens' ContainerService (Maybe Text)
-csServiceName = lens _csServiceName (\s a -> s { _csServiceName = a })
-
--- | The status of the service. The valid values are 'ACTIVE', 'DRAINING', or 'INACTIVE'.
-csStatus :: Lens' ContainerService (Maybe Text)
-csStatus = lens _csStatus (\s a -> s { _csStatus = a })
-
--- | The task definition to use for tasks in the service. This value is specified
--- when the service is created with 'CreateService', and it can be modified with 'UpdateService'.
-csTaskDefinition :: Lens' ContainerService (Maybe Text)
-csTaskDefinition = lens _csTaskDefinition (\s a -> s { _csTaskDefinition = a })
-
-instance FromJSON ContainerService where
-    parseJSON = withObject "ContainerService" $ \o -> ContainerService
-        <$> o .:? "clusterArn"
-        <*> o .:? "deployments" .!= mempty
-        <*> o .:? "desiredCount"
-        <*> o .:? "events" .!= mempty
-        <*> o .:? "loadBalancers" .!= mempty
-        <*> o .:? "pendingCount"
-        <*> o .:? "roleArn"
-        <*> o .:? "runningCount"
-        <*> o .:? "serviceArn"
-        <*> o .:? "serviceName"
-        <*> o .:? "status"
-        <*> o .:? "taskDefinition"
-
-instance ToJSON ContainerService where
-    toJSON ContainerService{..} = object
-        [ "serviceArn"     .= _csServiceArn
-        , "serviceName"    .= _csServiceName
-        , "clusterArn"     .= _csClusterArn
-        , "loadBalancers"  .= _csLoadBalancers
-        , "status"         .= _csStatus
-        , "desiredCount"   .= _csDesiredCount
-        , "runningCount"   .= _csRunningCount
-        , "pendingCount"   .= _csPendingCount
-        , "taskDefinition" .= _csTaskDefinition
-        , "deployments"    .= _csDeployments
-        , "roleArn"        .= _csRoleArn
-        , "events"         .= _csEvents
-        ]
-
-data Cluster = Cluster
-    { _cClusterArn                        :: Maybe Text
-    , _cClusterName                       :: Maybe Text
-    , _cPendingTasksCount                 :: Maybe Int
-    , _cRegisteredContainerInstancesCount :: Maybe Int
-    , _cRunningTasksCount                 :: Maybe Int
-    , _cStatus                            :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Cluster' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cClusterArn' @::@ 'Maybe' 'Text'
---
--- * 'cClusterName' @::@ 'Maybe' 'Text'
---
--- * 'cPendingTasksCount' @::@ 'Maybe' 'Int'
---
--- * 'cRegisteredContainerInstancesCount' @::@ 'Maybe' 'Int'
---
--- * 'cRunningTasksCount' @::@ 'Maybe' 'Int'
---
--- * 'cStatus' @::@ 'Maybe' 'Text'
---
-cluster :: Cluster
-cluster = Cluster
-    { _cClusterArn                        = Nothing
-    , _cClusterName                       = Nothing
-    , _cStatus                            = Nothing
-    , _cRegisteredContainerInstancesCount = Nothing
-    , _cRunningTasksCount                 = Nothing
-    , _cPendingTasksCount                 = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) that identifies the cluster. The ARN contains
--- the 'arn:aws:ecs' namespace, followed by the region of the cluster, the AWS
--- account ID of the cluster owner, the 'cluster' namespace, and then the cluster
--- name. For example, arn:aws:ecs:/region/:/012345678910/:cluster//test/.
-cClusterArn :: Lens' Cluster (Maybe Text)
-cClusterArn = lens _cClusterArn (\s a -> s { _cClusterArn = a })
-
--- | A user-generated string that you can use to identify your cluster.
-cClusterName :: Lens' Cluster (Maybe Text)
-cClusterName = lens _cClusterName (\s a -> s { _cClusterName = a })
-
--- | The number of tasks in the cluster that are in the 'PENDING' state.
-cPendingTasksCount :: Lens' Cluster (Maybe Int)
-cPendingTasksCount =
-    lens _cPendingTasksCount (\s a -> s { _cPendingTasksCount = a })
-
--- | The number of container instances registered into the cluster.
-cRegisteredContainerInstancesCount :: Lens' Cluster (Maybe Int)
-cRegisteredContainerInstancesCount =
-    lens _cRegisteredContainerInstancesCount
-        (\s a -> s { _cRegisteredContainerInstancesCount = a })
-
--- | The number of tasks in the cluster that are in the 'RUNNING' state.
-cRunningTasksCount :: Lens' Cluster (Maybe Int)
-cRunningTasksCount =
-    lens _cRunningTasksCount (\s a -> s { _cRunningTasksCount = a })
-
--- | The status of the cluster. The valid values are 'ACTIVE' or 'INACTIVE'. 'ACTIVE'
--- indicates that you can register container instances with the cluster and the
--- associated instances can accept tasks.
-cStatus :: Lens' Cluster (Maybe Text)
-cStatus = lens _cStatus (\s a -> s { _cStatus = a })
-
-instance FromJSON Cluster where
-    parseJSON = withObject "Cluster" $ \o -> Cluster
-        <$> o .:? "clusterArn"
-        <*> o .:? "clusterName"
-        <*> o .:? "pendingTasksCount"
-        <*> o .:? "registeredContainerInstancesCount"
-        <*> o .:? "runningTasksCount"
-        <*> o .:? "status"
-
-instance ToJSON Cluster where
-    toJSON Cluster{..} = object
-        [ "clusterArn"                        .= _cClusterArn
-        , "clusterName"                       .= _cClusterName
-        , "status"                            .= _cStatus
-        , "registeredContainerInstancesCount" .= _cRegisteredContainerInstancesCount
-        , "runningTasksCount"                 .= _cRunningTasksCount
-        , "pendingTasksCount"                 .= _cPendingTasksCount
-        ]
-
-data Volume = Volume
-    { _vHost :: Maybe HostVolumeProperties
-    , _vName :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Volume' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vHost' @::@ 'Maybe' 'HostVolumeProperties'
---
--- * 'vName' @::@ 'Maybe' 'Text'
---
-volume :: Volume
-volume = Volume
-    { _vName = Nothing
-    , _vHost = Nothing
-    }
-
--- | The path on the host container instance that is presented to the containers
--- which access the volume. If this parameter is empty, then the Docker daemon
--- assigns a host path for you.
-vHost :: Lens' Volume (Maybe HostVolumeProperties)
-vHost = lens _vHost (\s a -> s { _vHost = a })
-
--- | The name of the volume. This name is referenced in the 'sourceVolume' parameter
--- of container definition 'mountPoints'.
-vName :: Lens' Volume (Maybe Text)
-vName = lens _vName (\s a -> s { _vName = a })
-
-instance FromJSON Volume where
-    parseJSON = withObject "Volume" $ \o -> Volume
-        <$> o .:? "host"
-        <*> o .:? "name"
-
-instance ToJSON Volume where
-    toJSON Volume{..} = object
-        [ "name" .= _vName
-        , "host" .= _vHost
-        ]
-
-data ContainerOverride = ContainerOverride
-    { _coCommand :: List "command" Text
-    , _coName    :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'ContainerOverride' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'coCommand' @::@ ['Text']
---
--- * 'coName' @::@ 'Maybe' 'Text'
---
-containerOverride :: ContainerOverride
-containerOverride = ContainerOverride
-    { _coName    = Nothing
-    , _coCommand = mempty
-    }
-
--- | The command to send to the container that overrides the default command from
--- the Docker image or the task definition.
-coCommand :: Lens' ContainerOverride [Text]
-coCommand = lens _coCommand (\s a -> s { _coCommand = a }) . _List
-
--- | The name of the container that receives the override.
-coName :: Lens' ContainerOverride (Maybe Text)
-coName = lens _coName (\s a -> s { _coName = a })
-
-instance FromJSON ContainerOverride where
-    parseJSON = withObject "ContainerOverride" $ \o -> ContainerOverride
-        <$> o .:? "command" .!= mempty
-        <*> o .:? "name"
-
-instance ToJSON ContainerOverride where
-    toJSON ContainerOverride{..} = object
-        [ "name"    .= _coName
-        , "command" .= _coCommand
-        ]
-
-data KeyValuePair = KeyValuePair
-    { _kvpName  :: Maybe Text
-    , _kvpValue :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'KeyValuePair' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'kvpName' @::@ 'Maybe' 'Text'
---
--- * 'kvpValue' @::@ 'Maybe' 'Text'
---
-keyValuePair :: KeyValuePair
-keyValuePair = KeyValuePair
-    { _kvpName  = Nothing
-    , _kvpValue = Nothing
-    }
-
--- | The name of the key value pair.
-kvpName :: Lens' KeyValuePair (Maybe Text)
-kvpName = lens _kvpName (\s a -> s { _kvpName = a })
-
--- | The value of the key value pair.
-kvpValue :: Lens' KeyValuePair (Maybe Text)
-kvpValue = lens _kvpValue (\s a -> s { _kvpValue = a })
-
-instance FromJSON KeyValuePair where
-    parseJSON = withObject "KeyValuePair" $ \o -> KeyValuePair
-        <$> o .:? "name"
-        <*> o .:? "value"
-
-instance ToJSON KeyValuePair where
-    toJSON KeyValuePair{..} = object
-        [ "name"  .= _kvpName
-        , "value" .= _kvpValue
-        ]
-
-data VolumeFrom = VolumeFrom
-    { _vfReadOnly        :: Maybe Bool
-    , _vfSourceContainer :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'VolumeFrom' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vfReadOnly' @::@ 'Maybe' 'Bool'
---
--- * 'vfSourceContainer' @::@ 'Maybe' 'Text'
---
-volumeFrom :: VolumeFrom
-volumeFrom = VolumeFrom
-    { _vfSourceContainer = Nothing
-    , _vfReadOnly        = Nothing
-    }
-
--- | If this value is 'true', the container has read-only access to the volume. If
--- this value is 'false', then the container can write to the volume. The default
--- value is 'false'.
-vfReadOnly :: Lens' VolumeFrom (Maybe Bool)
-vfReadOnly = lens _vfReadOnly (\s a -> s { _vfReadOnly = a })
-
--- | The name of the container to mount volumes from.
-vfSourceContainer :: Lens' VolumeFrom (Maybe Text)
-vfSourceContainer =
-    lens _vfSourceContainer (\s a -> s { _vfSourceContainer = a })
-
-instance FromJSON VolumeFrom where
-    parseJSON = withObject "VolumeFrom" $ \o -> VolumeFrom
-        <$> o .:? "readOnly"
-        <*> o .:? "sourceContainer"
-
-instance ToJSON VolumeFrom where
-    toJSON VolumeFrom{..} = object
-        [ "sourceContainer" .= _vfSourceContainer
-        , "readOnly"        .= _vfReadOnly
-        ]
-
-newtype TaskOverride = TaskOverride
-    { _toContainerOverrides :: List "containerOverrides" ContainerOverride
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList TaskOverride where
-    type Item TaskOverride = ContainerOverride
-
-    fromList = TaskOverride . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _toContainerOverrides
-
--- | 'TaskOverride' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'toContainerOverrides' @::@ ['ContainerOverride']
---
-taskOverride :: TaskOverride
-taskOverride = TaskOverride
-    { _toContainerOverrides = mempty
-    }
-
--- | One or more container overrides sent to a task.
-toContainerOverrides :: Lens' TaskOverride [ContainerOverride]
-toContainerOverrides =
-    lens _toContainerOverrides (\s a -> s { _toContainerOverrides = a })
-        . _List
-
-instance FromJSON TaskOverride where
-    parseJSON = withObject "TaskOverride" $ \o -> TaskOverride
-        <$> o .:? "containerOverrides" .!= mempty
-
-instance ToJSON TaskOverride where
-    toJSON TaskOverride{..} = object
-        [ "containerOverrides" .= _toContainerOverrides
-        ]
-
-newtype HostVolumeProperties = HostVolumeProperties
-    { _hvpSourcePath :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
-
--- | 'HostVolumeProperties' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'hvpSourcePath' @::@ 'Maybe' 'Text'
---
-hostVolumeProperties :: HostVolumeProperties
-hostVolumeProperties = HostVolumeProperties
-    { _hvpSourcePath = Nothing
-    }
-
--- | The path on the host container instance that is presented to the container.
--- If this parameter is empty, then the Docker daemon has assigned a host path
--- for you.
-hvpSourcePath :: Lens' HostVolumeProperties (Maybe Text)
-hvpSourcePath = lens _hvpSourcePath (\s a -> s { _hvpSourcePath = a })
-
-instance FromJSON HostVolumeProperties where
-    parseJSON = withObject "HostVolumeProperties" $ \o -> HostVolumeProperties
-        <$> o .:? "sourcePath"
-
-instance ToJSON HostVolumeProperties where
-    toJSON HostVolumeProperties{..} = object
-        [ "sourcePath" .= _hvpSourcePath
-        ]
-
-data VersionInfo = VersionInfo
-    { _viAgentHash     :: Maybe Text
-    , _viAgentVersion  :: Maybe Text
-    , _viDockerVersion :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'VersionInfo' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'viAgentHash' @::@ 'Maybe' 'Text'
---
--- * 'viAgentVersion' @::@ 'Maybe' 'Text'
---
--- * 'viDockerVersion' @::@ 'Maybe' 'Text'
---
-versionInfo :: VersionInfo
-versionInfo = VersionInfo
-    { _viAgentVersion  = Nothing
-    , _viAgentHash     = Nothing
-    , _viDockerVersion = Nothing
-    }
-
--- | The Git commit hash for the Amazon ECS container agent build on the <https://github.com/aws/amazon-ecs-agent/commits/master amazon-ecs-agent > GitHub repository.
-viAgentHash :: Lens' VersionInfo (Maybe Text)
-viAgentHash = lens _viAgentHash (\s a -> s { _viAgentHash = a })
-
--- | The version number of the Amazon ECS container agent.
-viAgentVersion :: Lens' VersionInfo (Maybe Text)
-viAgentVersion = lens _viAgentVersion (\s a -> s { _viAgentVersion = a })
-
--- | The Docker version running on the container instance.
-viDockerVersion :: Lens' VersionInfo (Maybe Text)
-viDockerVersion = lens _viDockerVersion (\s a -> s { _viDockerVersion = a })
-
-instance FromJSON VersionInfo where
-    parseJSON = withObject "VersionInfo" $ \o -> VersionInfo
-        <$> o .:? "agentHash"
-        <*> o .:? "agentVersion"
-        <*> o .:? "dockerVersion"
-
-instance ToJSON VersionInfo where
-    toJSON VersionInfo{..} = object
-        [ "agentVersion"  .= _viAgentVersion
-        , "agentHash"     .= _viAgentHash
-        , "dockerVersion" .= _viDockerVersion
-        ]
-
-data Container = Container
-    { _cContainerArn    :: Maybe Text
-    , _cExitCode        :: Maybe Int
-    , _cLastStatus      :: Maybe Text
-    , _cName            :: Maybe Text
-    , _cNetworkBindings :: List "networkBindings" NetworkBinding
-    , _cReason          :: Maybe Text
-    , _cTaskArn         :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Container' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cContainerArn' @::@ 'Maybe' 'Text'
---
--- * 'cExitCode' @::@ 'Maybe' 'Int'
---
--- * 'cLastStatus' @::@ 'Maybe' 'Text'
---
--- * 'cName' @::@ 'Maybe' 'Text'
---
--- * 'cNetworkBindings' @::@ ['NetworkBinding']
---
--- * 'cReason' @::@ 'Maybe' 'Text'
---
--- * 'cTaskArn' @::@ 'Maybe' 'Text'
---
-container :: Container
-container = Container
-    { _cContainerArn    = Nothing
-    , _cTaskArn         = Nothing
-    , _cName            = Nothing
-    , _cLastStatus      = Nothing
-    , _cExitCode        = Nothing
-    , _cReason          = Nothing
-    , _cNetworkBindings = mempty
-    }
-
--- | The Amazon Resource Name (ARN) of the container.
-cContainerArn :: Lens' Container (Maybe Text)
-cContainerArn = lens _cContainerArn (\s a -> s { _cContainerArn = a })
-
--- | The exit code returned from the container.
-cExitCode :: Lens' Container (Maybe Int)
-cExitCode = lens _cExitCode (\s a -> s { _cExitCode = a })
-
--- | The last known status of the container.
-cLastStatus :: Lens' Container (Maybe Text)
-cLastStatus = lens _cLastStatus (\s a -> s { _cLastStatus = a })
-
--- | The name of the container.
-cName :: Lens' Container (Maybe Text)
-cName = lens _cName (\s a -> s { _cName = a })
-
-cNetworkBindings :: Lens' Container [NetworkBinding]
-cNetworkBindings = lens _cNetworkBindings (\s a -> s { _cNetworkBindings = a }) . _List
-
--- | A short (255 max characters) human-readable string to provide additional
--- detail about a running or stopped container.
-cReason :: Lens' Container (Maybe Text)
-cReason = lens _cReason (\s a -> s { _cReason = a })
-
--- | The Amazon Resource Name (ARN) of the task.
-cTaskArn :: Lens' Container (Maybe Text)
-cTaskArn = lens _cTaskArn (\s a -> s { _cTaskArn = a })
-
-instance FromJSON Container where
-    parseJSON = withObject "Container" $ \o -> Container
-        <$> o .:? "containerArn"
-        <*> o .:? "exitCode"
-        <*> o .:? "lastStatus"
-        <*> o .:? "name"
-        <*> o .:? "networkBindings" .!= mempty
-        <*> o .:? "reason"
-        <*> o .:? "taskArn"
-
-instance ToJSON Container where
-    toJSON Container{..} = object
-        [ "containerArn"    .= _cContainerArn
-        , "taskArn"         .= _cTaskArn
-        , "name"            .= _cName
-        , "lastStatus"      .= _cLastStatus
-        , "exitCode"        .= _cExitCode
-        , "reason"          .= _cReason
-        , "networkBindings" .= _cNetworkBindings
-        ]
-
-data LoadBalancer = LoadBalancer
-    { _lbContainerName    :: Maybe Text
-    , _lbContainerPort    :: Maybe Int
-    , _lbLoadBalancerName :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'LoadBalancer' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lbContainerName' @::@ 'Maybe' 'Text'
---
--- * 'lbContainerPort' @::@ 'Maybe' 'Int'
---
--- * 'lbLoadBalancerName' @::@ 'Maybe' 'Text'
---
-loadBalancer :: LoadBalancer
-loadBalancer = LoadBalancer
-    { _lbLoadBalancerName = Nothing
-    , _lbContainerName    = Nothing
-    , _lbContainerPort    = Nothing
-    }
-
--- | The name of the container to associate with the load balancer.
-lbContainerName :: Lens' LoadBalancer (Maybe Text)
-lbContainerName = lens _lbContainerName (\s a -> s { _lbContainerName = a })
-
--- | The port on the container to associate with the load balancer.
-lbContainerPort :: Lens' LoadBalancer (Maybe Int)
-lbContainerPort = lens _lbContainerPort (\s a -> s { _lbContainerPort = a })
-
--- | The name of the load balancer.
-lbLoadBalancerName :: Lens' LoadBalancer (Maybe Text)
-lbLoadBalancerName =
-    lens _lbLoadBalancerName (\s a -> s { _lbLoadBalancerName = a })
-
-instance FromJSON LoadBalancer where
-    parseJSON = withObject "LoadBalancer" $ \o -> LoadBalancer
-        <$> o .:? "containerName"
-        <*> o .:? "containerPort"
-        <*> o .:? "loadBalancerName"
-
-instance ToJSON LoadBalancer where
-    toJSON LoadBalancer{..} = object
-        [ "loadBalancerName" .= _lbLoadBalancerName
-        , "containerName"    .= _lbContainerName
-        , "containerPort"    .= _lbContainerPort
-        ]
-
-data ContainerDefinition = ContainerDefinition
-    { _cdCommand      :: List "command" Text
-    , _cdCpu          :: Maybe Int
-    , _cdEntryPoint   :: List "entryPoint" Text
-    , _cdEnvironment  :: List "environment" KeyValuePair
-    , _cdEssential    :: Maybe Bool
-    , _cdImage        :: Maybe Text
-    , _cdLinks        :: List "links" Text
-    , _cdMemory       :: Maybe Int
-    , _cdMountPoints  :: List "mountPoints" MountPoint
-    , _cdName         :: Maybe Text
-    , _cdPortMappings :: List "portMappings" PortMapping
-    , _cdVolumesFrom  :: List "volumesFrom" VolumeFrom
-    } deriving (Eq, Read, Show)
-
--- | 'ContainerDefinition' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cdCommand' @::@ ['Text']
---
--- * 'cdCpu' @::@ 'Maybe' 'Int'
---
--- * 'cdEntryPoint' @::@ ['Text']
---
--- * 'cdEnvironment' @::@ ['KeyValuePair']
---
--- * 'cdEssential' @::@ 'Maybe' 'Bool'
---
--- * 'cdImage' @::@ 'Maybe' 'Text'
---
--- * 'cdLinks' @::@ ['Text']
---
--- * 'cdMemory' @::@ 'Maybe' 'Int'
---
--- * 'cdMountPoints' @::@ ['MountPoint']
---
--- * 'cdName' @::@ 'Maybe' 'Text'
---
--- * 'cdPortMappings' @::@ ['PortMapping']
---
--- * 'cdVolumesFrom' @::@ ['VolumeFrom']
---
-containerDefinition :: ContainerDefinition
-containerDefinition = ContainerDefinition
-    { _cdName         = Nothing
-    , _cdImage        = Nothing
-    , _cdCpu          = Nothing
-    , _cdMemory       = Nothing
-    , _cdLinks        = mempty
-    , _cdPortMappings = mempty
-    , _cdEssential    = Nothing
-    , _cdEntryPoint   = mempty
-    , _cdCommand      = mempty
-    , _cdEnvironment  = mempty
-    , _cdMountPoints  = mempty
-    , _cdVolumesFrom  = mempty
-    }
-
--- | The 'CMD' that is passed to the container. For more information on the Docker 'CMD' parameter, see <https://docs.docker.com/reference/builder/#cmd https://docs.docker.com/reference/builder/#cmd>.
-cdCommand :: Lens' ContainerDefinition [Text]
-cdCommand = lens _cdCommand (\s a -> s { _cdCommand = a }) . _List
-
--- | The number of 'cpu' units reserved for the container. A container instance has
--- 1,024 'cpu' units for every CPU core.
-cdCpu :: Lens' ContainerDefinition (Maybe Int)
-cdCpu = lens _cdCpu (\s a -> s { _cdCpu = a })
-
--- | Early versions of the Amazon ECS container agent do not properly handle 'entryPoint' parameters. If you have problems using 'entryPoint', update your container
--- agent or enter your commands and arguments as 'command' array items instead.
---
--- The 'ENTRYPOINT' that is passed to the container. For more information on the
--- Docker 'ENTRYPOINT' parameter, see <https://docs.docker.com/reference/builder/#entrypoint https://docs.docker.com/reference/builder/#entrypoint>.
-cdEntryPoint :: Lens' ContainerDefinition [Text]
-cdEntryPoint = lens _cdEntryPoint (\s a -> s { _cdEntryPoint = a }) . _List
-
--- | The environment variables to pass to a container.
-cdEnvironment :: Lens' ContainerDefinition [KeyValuePair]
-cdEnvironment = lens _cdEnvironment (\s a -> s { _cdEnvironment = a }) . _List
-
--- | If the 'essential' parameter of a container is marked as 'true', the failure of
--- that container will stop the task. If the 'essential' parameter of a container
--- is marked as 'false', then its failure will not affect the rest of the
--- containers in a task.
-cdEssential :: Lens' ContainerDefinition (Maybe Bool)
-cdEssential = lens _cdEssential (\s a -> s { _cdEssential = a })
-
--- | The image used to start a container. This string is passed directly to the
--- Docker daemon. Images in the Docker Hub registry are available by default.
--- Other repositories are specified with '/repository-url///image/:/tag/.
-cdImage :: Lens' ContainerDefinition (Maybe Text)
-cdImage = lens _cdImage (\s a -> s { _cdImage = a })
-
--- | The 'link' parameter allows containers to communicate with each other without
--- the need for port mappings, using the 'name' parameter. For more information on
--- linking Docker containers, see <https://docs.docker.com/userguide/dockerlinks/ https://docs.docker.com/userguide/dockerlinks/>.
-cdLinks :: Lens' ContainerDefinition [Text]
-cdLinks = lens _cdLinks (\s a -> s { _cdLinks = a }) . _List
-
--- | The number of MiB of memory reserved for the container. Docker will allocate
--- a minimum of 4 MiB of memory to a container.
-cdMemory :: Lens' ContainerDefinition (Maybe Int)
-cdMemory = lens _cdMemory (\s a -> s { _cdMemory = a })
-
--- | The mount points for data volumes in your container.
-cdMountPoints :: Lens' ContainerDefinition [MountPoint]
-cdMountPoints = lens _cdMountPoints (\s a -> s { _cdMountPoints = a }) . _List
-
--- | The name of a container. If you are linking multiple containers together in a
--- task definition, the 'name' of one container can be entered in the 'links' of
--- another container to connect the containers.
-cdName :: Lens' ContainerDefinition (Maybe Text)
-cdName = lens _cdName (\s a -> s { _cdName = a })
-
--- | The list of port mappings for the container.
-cdPortMappings :: Lens' ContainerDefinition [PortMapping]
-cdPortMappings = lens _cdPortMappings (\s a -> s { _cdPortMappings = a }) . _List
-
--- | Data volumes to mount from another container.
-cdVolumesFrom :: Lens' ContainerDefinition [VolumeFrom]
-cdVolumesFrom = lens _cdVolumesFrom (\s a -> s { _cdVolumesFrom = a }) . _List
-
-instance FromJSON ContainerDefinition where
-    parseJSON = withObject "ContainerDefinition" $ \o -> ContainerDefinition
-        <$> o .:? "command" .!= mempty
-        <*> o .:? "cpu"
-        <*> o .:? "entryPoint" .!= mempty
-        <*> o .:? "environment" .!= mempty
-        <*> o .:? "essential"
-        <*> o .:? "image"
-        <*> o .:? "links" .!= mempty
-        <*> o .:? "memory"
-        <*> o .:? "mountPoints" .!= mempty
-        <*> o .:? "name"
-        <*> o .:? "portMappings" .!= mempty
-        <*> o .:? "volumesFrom" .!= mempty
-
-instance ToJSON ContainerDefinition where
-    toJSON ContainerDefinition{..} = object
-        [ "name"         .= _cdName
-        , "image"        .= _cdImage
-        , "cpu"          .= _cdCpu
-        , "memory"       .= _cdMemory
-        , "links"        .= _cdLinks
-        , "portMappings" .= _cdPortMappings
-        , "essential"    .= _cdEssential
-        , "entryPoint"   .= _cdEntryPoint
-        , "command"      .= _cdCommand
-        , "environment"  .= _cdEnvironment
-        , "mountPoints"  .= _cdMountPoints
-        , "volumesFrom"  .= _cdVolumesFrom
-        ]
-
-data Resource = Resource
-    { _rDoubleValue    :: Maybe Double
-    , _rIntegerValue   :: Maybe Int
-    , _rLongValue      :: Maybe Integer
-    , _rName           :: Maybe Text
-    , _rStringSetValue :: List "stringSetValue" Text
-    , _rType           :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Resource' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rDoubleValue' @::@ 'Maybe' 'Double'
---
--- * 'rIntegerValue' @::@ 'Maybe' 'Int'
---
--- * 'rLongValue' @::@ 'Maybe' 'Integer'
---
--- * 'rName' @::@ 'Maybe' 'Text'
---
--- * 'rStringSetValue' @::@ ['Text']
---
--- * 'rType' @::@ 'Maybe' 'Text'
---
-resource :: Resource
-resource = Resource
-    { _rName           = Nothing
-    , _rType           = Nothing
-    , _rDoubleValue    = Nothing
-    , _rLongValue      = Nothing
-    , _rIntegerValue   = Nothing
-    , _rStringSetValue = mempty
-    }
-
--- | When the 'doubleValue' type is set, the value of the resource must be a double
--- precision floating-point type.
-rDoubleValue :: Lens' Resource (Maybe Double)
-rDoubleValue = lens _rDoubleValue (\s a -> s { _rDoubleValue = a })
-
--- | When the 'integerValue' type is set, the value of the resource must be an
--- integer.
-rIntegerValue :: Lens' Resource (Maybe Int)
-rIntegerValue = lens _rIntegerValue (\s a -> s { _rIntegerValue = a })
-
--- | When the 'longValue' type is set, the value of the resource must be an extended
--- precision floating-point type.
-rLongValue :: Lens' Resource (Maybe Integer)
-rLongValue = lens _rLongValue (\s a -> s { _rLongValue = a })
-
--- | The name of the resource, such as 'CPU', 'MEMORY', 'PORTS', or a user-defined
--- resource.
-rName :: Lens' Resource (Maybe Text)
-rName = lens _rName (\s a -> s { _rName = a })
-
--- | When the 'stringSetValue' type is set, the value of the resource must be a
--- string type.
-rStringSetValue :: Lens' Resource [Text]
-rStringSetValue = lens _rStringSetValue (\s a -> s { _rStringSetValue = a }) . _List
-
--- | The type of the resource, such as 'INTEGER', 'DOUBLE', 'LONG', or 'STRINGSET'.
-rType :: Lens' Resource (Maybe Text)
-rType = lens _rType (\s a -> s { _rType = a })
-
-instance FromJSON Resource where
-    parseJSON = withObject "Resource" $ \o -> Resource
-        <$> o .:? "doubleValue"
-        <*> o .:? "integerValue"
-        <*> o .:? "longValue"
-        <*> o .:? "name"
-        <*> o .:? "stringSetValue" .!= mempty
-        <*> o .:? "type"
-
-instance ToJSON Resource where
-    toJSON Resource{..} = object
-        [ "name"           .= _rName
-        , "type"           .= _rType
-        , "doubleValue"    .= _rDoubleValue
-        , "longValue"      .= _rLongValue
-        , "integerValue"   .= _rIntegerValue
-        , "stringSetValue" .= _rStringSetValue
-        ]
-
-data Task = Task
-    { _tClusterArn           :: Maybe Text
-    , _tContainerInstanceArn :: Maybe Text
-    , _tContainers           :: List "containers" Container
-    , _tDesiredStatus        :: Maybe Text
-    , _tLastStatus           :: Maybe Text
-    , _tOverrides            :: Maybe TaskOverride
-    , _tStartedBy            :: Maybe Text
-    , _tTaskArn              :: Maybe Text
-    , _tTaskDefinitionArn    :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Task' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tClusterArn' @::@ 'Maybe' 'Text'
---
--- * 'tContainerInstanceArn' @::@ 'Maybe' 'Text'
---
--- * 'tContainers' @::@ ['Container']
---
--- * 'tDesiredStatus' @::@ 'Maybe' 'Text'
---
--- * 'tLastStatus' @::@ 'Maybe' 'Text'
---
--- * 'tOverrides' @::@ 'Maybe' 'TaskOverride'
---
--- * 'tStartedBy' @::@ 'Maybe' 'Text'
---
--- * 'tTaskArn' @::@ 'Maybe' 'Text'
---
--- * 'tTaskDefinitionArn' @::@ 'Maybe' 'Text'
---
-task :: Task
-task = Task
-    { _tTaskArn              = Nothing
-    , _tClusterArn           = Nothing
-    , _tTaskDefinitionArn    = Nothing
-    , _tContainerInstanceArn = Nothing
-    , _tOverrides            = Nothing
-    , _tLastStatus           = Nothing
-    , _tDesiredStatus        = Nothing
-    , _tContainers           = mempty
-    , _tStartedBy            = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the of the cluster that hosts the task.
-tClusterArn :: Lens' Task (Maybe Text)
-tClusterArn = lens _tClusterArn (\s a -> s { _tClusterArn = a })
-
--- | The Amazon Resource Name (ARN) of the container instances that host the task.
-tContainerInstanceArn :: Lens' Task (Maybe Text)
-tContainerInstanceArn =
-    lens _tContainerInstanceArn (\s a -> s { _tContainerInstanceArn = a })
-
--- | The containers associated with the task.
-tContainers :: Lens' Task [Container]
-tContainers = lens _tContainers (\s a -> s { _tContainers = a }) . _List
-
--- | The desired status of the task.
-tDesiredStatus :: Lens' Task (Maybe Text)
-tDesiredStatus = lens _tDesiredStatus (\s a -> s { _tDesiredStatus = a })
-
--- | The last known status of the task.
-tLastStatus :: Lens' Task (Maybe Text)
-tLastStatus = lens _tLastStatus (\s a -> s { _tLastStatus = a })
-
--- | One or more container overrides.
-tOverrides :: Lens' Task (Maybe TaskOverride)
-tOverrides = lens _tOverrides (\s a -> s { _tOverrides = a })
-
--- | The tag specified when a task is started. If the task is started by an Amazon
--- ECS service, then the 'startedBy' parameter contains the deployment ID of the
--- service that starts it.
-tStartedBy :: Lens' Task (Maybe Text)
-tStartedBy = lens _tStartedBy (\s a -> s { _tStartedBy = a })
-
--- | The Amazon Resource Name (ARN) of the task.
-tTaskArn :: Lens' Task (Maybe Text)
-tTaskArn = lens _tTaskArn (\s a -> s { _tTaskArn = a })
-
--- | The Amazon Resource Name (ARN) of the of the task definition that creates the
--- task.
-tTaskDefinitionArn :: Lens' Task (Maybe Text)
-tTaskDefinitionArn =
-    lens _tTaskDefinitionArn (\s a -> s { _tTaskDefinitionArn = a })
-
-instance FromJSON Task where
-    parseJSON = withObject "Task" $ \o -> Task
-        <$> o .:? "clusterArn"
-        <*> o .:? "containerInstanceArn"
-        <*> o .:? "containers" .!= mempty
-        <*> o .:? "desiredStatus"
-        <*> o .:? "lastStatus"
-        <*> o .:? "overrides"
-        <*> o .:? "startedBy"
-        <*> o .:? "taskArn"
-        <*> o .:? "taskDefinitionArn"
-
-instance ToJSON Task where
-    toJSON Task{..} = object
-        [ "taskArn"              .= _tTaskArn
-        , "clusterArn"           .= _tClusterArn
-        , "taskDefinitionArn"    .= _tTaskDefinitionArn
-        , "containerInstanceArn" .= _tContainerInstanceArn
-        , "overrides"            .= _tOverrides
-        , "lastStatus"           .= _tLastStatus
-        , "desiredStatus"        .= _tDesiredStatus
-        , "containers"           .= _tContainers
-        , "startedBy"            .= _tStartedBy
-        ]
-
-data PortMapping = PortMapping
-    { _pmContainerPort :: Maybe Int
-    , _pmHostPort      :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'PortMapping' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pmContainerPort' @::@ 'Maybe' 'Int'
---
--- * 'pmHostPort' @::@ 'Maybe' 'Int'
---
-portMapping :: PortMapping
-portMapping = PortMapping
-    { _pmContainerPort = Nothing
-    , _pmHostPort      = Nothing
-    }
-
--- | The port number on the container that is bound to the user-specified or
--- automatically assigned host port. If you specify a container port and not a
--- host port, your container will automatically receive a host port in the 49153
--- to 65535 port range.
-pmContainerPort :: Lens' PortMapping (Maybe Int)
-pmContainerPort = lens _pmContainerPort (\s a -> s { _pmContainerPort = a })
-
--- | The port number on the container instance to reserve for your container. You
--- can specify a non-reserved host port for your container port mapping, or you
--- can omit the 'hostPort' while specifying a 'containerPort' and your container
--- will automatically receive a port in the 49153 to 65535 port range. You
--- should not attempt to specify a host port in the 49153 to 65535 port range,
--- since these are reserved for automatic assignment.
---
--- The default reserved ports are 22 for SSH, the Docker ports 2375 and 2376,
--- and the Amazon ECS Container Agent port 51678. Any host port that was
--- previously specified in a running task is also reserved while the task is
--- running (once a task stops, the host port is released).The current reserved
--- ports are displayed in the 'remainingResources' of 'DescribeContainerInstances'
--- output, and a container instance may have up to 50 reserved ports at a time,
--- including the default reserved ports (automatically assigned ports do not
--- count toward this limit).
-pmHostPort :: Lens' PortMapping (Maybe Int)
-pmHostPort = lens _pmHostPort (\s a -> s { _pmHostPort = a })
-
-instance FromJSON PortMapping where
-    parseJSON = withObject "PortMapping" $ \o -> PortMapping
-        <$> o .:? "containerPort"
-        <*> o .:? "hostPort"
-
-instance ToJSON PortMapping where
-    toJSON PortMapping{..} = object
-        [ "containerPort" .= _pmContainerPort
-        , "hostPort"      .= _pmHostPort
-        ]
-
-data TaskDefinition = TaskDefinition
-    { _tdContainerDefinitions :: List "containerDefinitions" ContainerDefinition
-    , _tdFamily               :: Maybe Text
-    , _tdRevision             :: Maybe Int
-    , _tdTaskDefinitionArn    :: Maybe Text
-    , _tdVolumes              :: List "volumes" Volume
-    } deriving (Eq, Read, Show)
-
--- | 'TaskDefinition' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tdContainerDefinitions' @::@ ['ContainerDefinition']
---
--- * 'tdFamily' @::@ 'Maybe' 'Text'
---
--- * 'tdRevision' @::@ 'Maybe' 'Int'
---
--- * 'tdTaskDefinitionArn' @::@ 'Maybe' 'Text'
---
--- * 'tdVolumes' @::@ ['Volume']
---
-taskDefinition :: TaskDefinition
-taskDefinition = TaskDefinition
-    { _tdTaskDefinitionArn    = Nothing
-    , _tdContainerDefinitions = mempty
-    , _tdFamily               = Nothing
-    , _tdRevision             = Nothing
-    , _tdVolumes              = mempty
-    }
-
--- | A list of container definitions in JSON format that describe the different
--- containers that make up your task. For more information on container
--- definition parameters and defaults, see <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html Amazon ECS Task Definitions> in the /Amazon EC2 Container Service Developer Guide/.
-tdContainerDefinitions :: Lens' TaskDefinition [ContainerDefinition]
-tdContainerDefinitions =
-    lens _tdContainerDefinitions (\s a -> s { _tdContainerDefinitions = a })
-        . _List
-
--- | The family of your task definition. You can think of the 'family' as the name
--- of your task definition.
-tdFamily :: Lens' TaskDefinition (Maybe Text)
-tdFamily = lens _tdFamily (\s a -> s { _tdFamily = a })
-
--- | The revision of the task in a particular family. You can think of the
--- revision as a version number of a task definition in a family. When you
--- register a task definition for the first time, the revision is '1', and each
--- time you register a task definition in the same family, the revision value
--- increases by one.
-tdRevision :: Lens' TaskDefinition (Maybe Int)
-tdRevision = lens _tdRevision (\s a -> s { _tdRevision = a })
-
--- | The full Amazon Resource Name (ARN) of the of the task definition.
-tdTaskDefinitionArn :: Lens' TaskDefinition (Maybe Text)
-tdTaskDefinitionArn =
-    lens _tdTaskDefinitionArn (\s a -> s { _tdTaskDefinitionArn = a })
-
--- | The list of volumes in a task. For more information on volume definition
--- parameters and defaults, see <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html Amazon ECS Task Definitions> in the /Amazon EC2Container Service Developer Guide/.
-tdVolumes :: Lens' TaskDefinition [Volume]
-tdVolumes = lens _tdVolumes (\s a -> s { _tdVolumes = a }) . _List
-
-instance FromJSON TaskDefinition where
-    parseJSON = withObject "TaskDefinition" $ \o -> TaskDefinition
-        <$> o .:? "containerDefinitions" .!= mempty
-        <*> o .:? "family"
-        <*> o .:? "revision"
-        <*> o .:? "taskDefinitionArn"
-        <*> o .:? "volumes" .!= mempty
-
-instance ToJSON TaskDefinition where
-    toJSON TaskDefinition{..} = object
-        [ "taskDefinitionArn"    .= _tdTaskDefinitionArn
-        , "containerDefinitions" .= _tdContainerDefinitions
-        , "family"               .= _tdFamily
-        , "revision"             .= _tdRevision
-        , "volumes"              .= _tdVolumes
-        ]
-
-data Failure = Failure
-    { _fArn    :: Maybe Text
-    , _fReason :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Failure' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fArn' @::@ 'Maybe' 'Text'
---
--- * 'fReason' @::@ 'Maybe' 'Text'
---
-failure :: Failure
-failure = Failure
-    { _fArn    = Nothing
-    , _fReason = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the failed resource.
-fArn :: Lens' Failure (Maybe Text)
-fArn = lens _fArn (\s a -> s { _fArn = a })
-
--- | The reason for the failure.
-fReason :: Lens' Failure (Maybe Text)
-fReason = lens _fReason (\s a -> s { _fReason = a })
-
-instance FromJSON Failure where
-    parseJSON = withObject "Failure" $ \o -> Failure
-        <$> o .:? "arn"
-        <*> o .:? "reason"
-
-instance ToJSON Failure where
-    toJSON Failure{..} = object
-        [ "arn"    .= _fArn
-        , "reason" .= _fReason
-        ]
-
-data ContainerInstance = ContainerInstance
-    { _ciAgentConnected       :: Maybe Bool
-    , _ciContainerInstanceArn :: Maybe Text
-    , _ciEc2InstanceId        :: Maybe Text
-    , _ciPendingTasksCount    :: Maybe Int
-    , _ciRegisteredResources  :: List "registeredResources" Resource
-    , _ciRemainingResources   :: List "remainingResources" Resource
-    , _ciRunningTasksCount    :: Maybe Int
-    , _ciStatus               :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ContainerInstance' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ciAgentConnected' @::@ 'Maybe' 'Bool'
---
--- * 'ciContainerInstanceArn' @::@ 'Maybe' 'Text'
---
--- * 'ciEc2InstanceId' @::@ 'Maybe' 'Text'
---
--- * 'ciPendingTasksCount' @::@ 'Maybe' 'Int'
---
--- * 'ciRegisteredResources' @::@ ['Resource']
---
--- * 'ciRemainingResources' @::@ ['Resource']
---
--- * 'ciRunningTasksCount' @::@ 'Maybe' 'Int'
---
--- * 'ciStatus' @::@ 'Maybe' 'Text'
---
-containerInstance :: ContainerInstance
-containerInstance = ContainerInstance
-    { _ciContainerInstanceArn = Nothing
-    , _ciEc2InstanceId        = Nothing
-    , _ciRemainingResources   = mempty
-    , _ciRegisteredResources  = mempty
-    , _ciStatus               = Nothing
-    , _ciAgentConnected       = Nothing
-    , _ciRunningTasksCount    = Nothing
-    , _ciPendingTasksCount    = Nothing
-    }
-
--- | This parameter returns 'true' if the agent is actually connected to Amazon ECS.
--- Registered instances with an agent that may be unhealthy or stopped will
--- return 'false', and instances without a connected agent cannot accept placement
--- request.
-ciAgentConnected :: Lens' ContainerInstance (Maybe Bool)
-ciAgentConnected = lens _ciAgentConnected (\s a -> s { _ciAgentConnected = a })
-
--- | The Amazon Resource Name (ARN) of the container instance. The ARN contains
--- the 'arn:aws:ecs' namespace, followed by the region of the container instance,
--- the AWS account ID of the container instance owner, the 'container-instance'
--- namespace, and then the container instance UUID. For example, arn:aws:ecs:/region/:/aws_account_id/:container-instance//container_instance_UUID/.
-ciContainerInstanceArn :: Lens' ContainerInstance (Maybe Text)
-ciContainerInstanceArn =
-    lens _ciContainerInstanceArn (\s a -> s { _ciContainerInstanceArn = a })
-
--- | The Amazon EC2 instance ID of the container instance.
-ciEc2InstanceId :: Lens' ContainerInstance (Maybe Text)
-ciEc2InstanceId = lens _ciEc2InstanceId (\s a -> s { _ciEc2InstanceId = a })
-
--- | The number of tasks on the container instance that are in the 'PENDING' status.
-ciPendingTasksCount :: Lens' ContainerInstance (Maybe Int)
-ciPendingTasksCount =
-    lens _ciPendingTasksCount (\s a -> s { _ciPendingTasksCount = a })
-
--- | The registered resources on the container instance that are in use by current
--- tasks.
-ciRegisteredResources :: Lens' ContainerInstance [Resource]
-ciRegisteredResources =
-    lens _ciRegisteredResources (\s a -> s { _ciRegisteredResources = a })
-        . _List
-
--- | The remaining resources of the container instance that are available for new
--- tasks.
-ciRemainingResources :: Lens' ContainerInstance [Resource]
-ciRemainingResources =
-    lens _ciRemainingResources (\s a -> s { _ciRemainingResources = a })
-        . _List
-
--- | The number of tasks on the container instance that are in the 'RUNNING' status.
-ciRunningTasksCount :: Lens' ContainerInstance (Maybe Int)
-ciRunningTasksCount =
-    lens _ciRunningTasksCount (\s a -> s { _ciRunningTasksCount = a })
-
--- | The status of the container instance. The valid values are 'ACTIVE' or 'INACTIVE'.
--- 'ACTIVE' indicates that the container instance can accept tasks.
-ciStatus :: Lens' ContainerInstance (Maybe Text)
-ciStatus = lens _ciStatus (\s a -> s { _ciStatus = a })
-
-instance FromJSON ContainerInstance where
-    parseJSON = withObject "ContainerInstance" $ \o -> ContainerInstance
-        <$> o .:? "agentConnected"
-        <*> o .:? "containerInstanceArn"
-        <*> o .:? "ec2InstanceId"
-        <*> o .:? "pendingTasksCount"
-        <*> o .:? "registeredResources" .!= mempty
-        <*> o .:? "remainingResources" .!= mempty
-        <*> o .:? "runningTasksCount"
-        <*> o .:? "status"
-
-instance ToJSON ContainerInstance where
-    toJSON ContainerInstance{..} = object
-        [ "containerInstanceArn" .= _ciContainerInstanceArn
-        , "ec2InstanceId"        .= _ciEc2InstanceId
-        , "remainingResources"   .= _ciRemainingResources
-        , "registeredResources"  .= _ciRegisteredResources
-        , "status"               .= _ciStatus
-        , "agentConnected"       .= _ciAgentConnected
-        , "runningTasksCount"    .= _ciRunningTasksCount
-        , "pendingTasksCount"    .= _ciPendingTasksCount
-        ]
-
-data ServiceEvent = ServiceEvent
-    { _seCreatedAt :: Maybe POSIX
-    , _seId        :: Maybe Text
-    , _seMessage   :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'ServiceEvent' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'seCreatedAt' @::@ 'Maybe' 'UTCTime'
---
--- * 'seId' @::@ 'Maybe' 'Text'
---
--- * 'seMessage' @::@ 'Maybe' 'Text'
---
-serviceEvent :: ServiceEvent
-serviceEvent = ServiceEvent
-    { _seId        = Nothing
-    , _seCreatedAt = Nothing
-    , _seMessage   = Nothing
-    }
-
--- | The Unix time in seconds and milliseconds when the event was triggered.
-seCreatedAt :: Lens' ServiceEvent (Maybe UTCTime)
-seCreatedAt = lens _seCreatedAt (\s a -> s { _seCreatedAt = a }) . mapping _Time
-
--- | The ID string of the event.
-seId :: Lens' ServiceEvent (Maybe Text)
-seId = lens _seId (\s a -> s { _seId = a })
-
--- | The event message.
-seMessage :: Lens' ServiceEvent (Maybe Text)
-seMessage = lens _seMessage (\s a -> s { _seMessage = a })
-
-instance FromJSON ServiceEvent where
-    parseJSON = withObject "ServiceEvent" $ \o -> ServiceEvent
-        <$> o .:? "createdAt"
-        <*> o .:? "id"
-        <*> o .:? "message"
-
-instance ToJSON ServiceEvent where
-    toJSON ServiceEvent{..} = object
-        [ "id"        .= _seId
-        , "createdAt" .= _seCreatedAt
-        , "message"   .= _seMessage
-        ]
-
-data Deployment = Deployment
-    { _dCreatedAt      :: Maybe POSIX
-    , _dDesiredCount   :: Maybe Int
-    , _dId             :: Maybe Text
-    , _dPendingCount   :: Maybe Int
-    , _dRunningCount   :: Maybe Int
-    , _dStatus         :: Maybe Text
-    , _dTaskDefinition :: Maybe Text
-    , _dUpdatedAt      :: Maybe POSIX
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Deployment' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dCreatedAt' @::@ 'Maybe' 'UTCTime'
---
--- * 'dDesiredCount' @::@ 'Maybe' 'Int'
---
--- * 'dId' @::@ 'Maybe' 'Text'
---
--- * 'dPendingCount' @::@ 'Maybe' 'Int'
---
--- * 'dRunningCount' @::@ 'Maybe' 'Int'
---
--- * 'dStatus' @::@ 'Maybe' 'Text'
---
--- * 'dTaskDefinition' @::@ 'Maybe' 'Text'
---
--- * 'dUpdatedAt' @::@ 'Maybe' 'UTCTime'
---
-deployment :: Deployment
-deployment = Deployment
-    { _dId             = Nothing
-    , _dStatus         = Nothing
-    , _dTaskDefinition = Nothing
-    , _dDesiredCount   = Nothing
-    , _dPendingCount   = Nothing
-    , _dRunningCount   = Nothing
-    , _dCreatedAt      = Nothing
-    , _dUpdatedAt      = Nothing
-    }
-
--- | The Unix time in seconds and milliseconds when the service was created.
-dCreatedAt :: Lens' Deployment (Maybe UTCTime)
-dCreatedAt = lens _dCreatedAt (\s a -> s { _dCreatedAt = a }) . mapping _Time
-
--- | The most recent desired count of tasks that was specified for the service to
--- deploy and/or maintain.
-dDesiredCount :: Lens' Deployment (Maybe Int)
-dDesiredCount = lens _dDesiredCount (\s a -> s { _dDesiredCount = a })
-
--- | The ID of the deployment.
-dId :: Lens' Deployment (Maybe Text)
-dId = lens _dId (\s a -> s { _dId = a })
-
--- | The number of tasks in the deployment that are in the 'PENDING' status.
-dPendingCount :: Lens' Deployment (Maybe Int)
-dPendingCount = lens _dPendingCount (\s a -> s { _dPendingCount = a })
-
--- | The number of tasks in the deployment that are in the 'RUNNING' status.
-dRunningCount :: Lens' Deployment (Maybe Int)
-dRunningCount = lens _dRunningCount (\s a -> s { _dRunningCount = a })
-
--- | The status of the deployment. Valid values are 'PRIMARY' (for the most recent
--- deployment), 'ACTIVE' (for previous deployments that still have tasks running,
--- but are being replaced with the 'PRIMARY' deployment), and 'INACTIVE' (for
--- deployments that have been completely replaced).
-dStatus :: Lens' Deployment (Maybe Text)
-dStatus = lens _dStatus (\s a -> s { _dStatus = a })
-
--- | The most recent task definition that was specified for the service to use.
-dTaskDefinition :: Lens' Deployment (Maybe Text)
-dTaskDefinition = lens _dTaskDefinition (\s a -> s { _dTaskDefinition = a })
-
--- | The Unix time in seconds and milliseconds when the service was last updated.
-dUpdatedAt :: Lens' Deployment (Maybe UTCTime)
-dUpdatedAt = lens _dUpdatedAt (\s a -> s { _dUpdatedAt = a }) . mapping _Time
-
-instance FromJSON Deployment where
-    parseJSON = withObject "Deployment" $ \o -> Deployment
-        <$> o .:? "createdAt"
-        <*> o .:? "desiredCount"
-        <*> o .:? "id"
-        <*> o .:? "pendingCount"
-        <*> o .:? "runningCount"
-        <*> o .:? "status"
-        <*> o .:? "taskDefinition"
-        <*> o .:? "updatedAt"
-
-instance ToJSON Deployment where
-    toJSON Deployment{..} = object
-        [ "id"             .= _dId
-        , "status"         .= _dStatus
-        , "taskDefinition" .= _dTaskDefinition
-        , "desiredCount"   .= _dDesiredCount
-        , "pendingCount"   .= _dPendingCount
-        , "runningCount"   .= _dRunningCount
-        , "createdAt"      .= _dCreatedAt
-        , "updatedAt"      .= _dUpdatedAt
-        ]
-
-data MountPoint = MountPoint
-    { _mpContainerPath :: Maybe Text
-    , _mpReadOnly      :: Maybe Bool
-    , _mpSourceVolume  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'MountPoint' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'mpContainerPath' @::@ 'Maybe' 'Text'
---
--- * 'mpReadOnly' @::@ 'Maybe' 'Bool'
---
--- * 'mpSourceVolume' @::@ 'Maybe' 'Text'
---
-mountPoint :: MountPoint
-mountPoint = MountPoint
-    { _mpSourceVolume  = Nothing
-    , _mpContainerPath = Nothing
-    , _mpReadOnly      = Nothing
-    }
-
--- | The path on the container to mount the host volume at.
-mpContainerPath :: Lens' MountPoint (Maybe Text)
-mpContainerPath = lens _mpContainerPath (\s a -> s { _mpContainerPath = a })
-
--- | If this value is 'true', the container has read-only access to the volume. If
--- this value is 'false', then the container can write to the volume. The default
--- value is 'false'.
-mpReadOnly :: Lens' MountPoint (Maybe Bool)
-mpReadOnly = lens _mpReadOnly (\s a -> s { _mpReadOnly = a })
-
--- | The name of the volume to mount.
-mpSourceVolume :: Lens' MountPoint (Maybe Text)
-mpSourceVolume = lens _mpSourceVolume (\s a -> s { _mpSourceVolume = a })
-
-instance FromJSON MountPoint where
-    parseJSON = withObject "MountPoint" $ \o -> MountPoint
-        <$> o .:? "containerPath"
-        <*> o .:? "readOnly"
-        <*> o .:? "sourceVolume"
-
-instance ToJSON MountPoint where
-    toJSON MountPoint{..} = object
-        [ "sourceVolume"  .= _mpSourceVolume
-        , "containerPath" .= _mpContainerPath
-        , "readOnly"      .= _mpReadOnly
-        ]
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.ECS.Types
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.ECS.Types
+    (
+    -- * Service
+      ECS
+
+    -- * Errors
+    , _InvalidParameterException
+    , _ServerException
+    , _ClusterContainsServicesException
+    , _ClusterContainsContainerInstancesException
+    , _ServiceNotActiveException
+    , _NoUpdateAvailableException
+    , _ClusterNotFoundException
+    , _ServiceNotFoundException
+    , _MissingVersionException
+    , _UpdateInProgressException
+    , _ClientException
+
+    -- * AgentUpdateStatus
+    , AgentUpdateStatus (..)
+
+    -- * DesiredStatus
+    , DesiredStatus (..)
+
+    -- * SortOrder
+    , SortOrder (..)
+
+    -- * TaskDefinitionStatus
+    , TaskDefinitionStatus (..)
+
+    -- * TransportProtocol
+    , TransportProtocol (..)
+
+    -- * Cluster
+    , Cluster
+    , cluster
+    , cStatus
+    , cClusterARN
+    , cRunningTasksCount
+    , cRegisteredContainerInstancesCount
+    , cPendingTasksCount
+    , cClusterName
+    , cActiveServicesCount
+
+    -- * Container
+    , Container
+    , container
+    , cNetworkBindings
+    , cContainerARN
+    , cTaskARN
+    , cLastStatus
+    , cReason
+    , cName
+    , cExitCode
+
+    -- * ContainerDefinition
+    , ContainerDefinition
+    , containerDefinition
+    , cdImage
+    , cdCommand
+    , cdVolumesFrom
+    , cdEnvironment
+    , cdEntryPoint
+    , cdPortMappings
+    , cdMemory
+    , cdName
+    , cdMountPoints
+    , cdLinks
+    , cdEssential
+    , cdCpu
+
+    -- * ContainerInstance
+    , ContainerInstance
+    , containerInstance
+    , ciStatus
+    , ciRunningTasksCount
+    , ciRemainingResources
+    , ciEc2InstanceId
+    , ciContainerInstanceARN
+    , ciAgentConnected
+    , ciVersionInfo
+    , ciAgentUpdateStatus
+    , ciPendingTasksCount
+    , ciRegisteredResources
+
+    -- * ContainerOverride
+    , ContainerOverride
+    , containerOverride
+    , coCommand
+    , coEnvironment
+    , coName
+
+    -- * ContainerService
+    , ContainerService
+    , containerService
+    , csStatus
+    , csRunningCount
+    , csClusterARN
+    , csDesiredCount
+    , csLoadBalancers
+    , csPendingCount
+    , csEvents
+    , csServiceName
+    , csDeployments
+    , csTaskDefinition
+    , csServiceARN
+    , csRoleARN
+
+    -- * Deployment
+    , Deployment
+    , deployment
+    , dStatus
+    , dRunningCount
+    , dCreatedAt
+    , dDesiredCount
+    , dPendingCount
+    , dId
+    , dTaskDefinition
+    , dUpdatedAt
+
+    -- * Failure
+    , Failure
+    , failure
+    , fArn
+    , fReason
+
+    -- * HostVolumeProperties
+    , HostVolumeProperties
+    , hostVolumeProperties
+    , hvpSourcePath
+
+    -- * KeyValuePair
+    , KeyValuePair
+    , keyValuePair
+    , kvpValue
+    , kvpName
+
+    -- * LoadBalancer
+    , LoadBalancer
+    , loadBalancer
+    , lbLoadBalancerName
+    , lbContainerName
+    , lbContainerPort
+
+    -- * MountPoint
+    , MountPoint
+    , mountPoint
+    , mpContainerPath
+    , mpSourceVolume
+    , mpReadOnly
+
+    -- * NetworkBinding
+    , NetworkBinding
+    , networkBinding
+    , nbBindIP
+    , nbProtocol
+    , nbHostPort
+    , nbContainerPort
+
+    -- * PortMapping
+    , PortMapping
+    , portMapping
+    , pmProtocol
+    , pmHostPort
+    , pmContainerPort
+
+    -- * Resource
+    , Resource
+    , resource
+    , rStringSetValue
+    , rIntegerValue
+    , rDoubleValue
+    , rLongValue
+    , rName
+    , rType
+
+    -- * ServiceEvent
+    , ServiceEvent
+    , serviceEvent
+    , seCreatedAt
+    , seId
+    , seMessage
+
+    -- * Task
+    , Task
+    , task
+    , tDesiredStatus
+    , tClusterARN
+    , tOverrides
+    , tTaskARN
+    , tContainerInstanceARN
+    , tLastStatus
+    , tContainers
+    , tStartedBy
+    , tTaskDefinitionARN
+
+    -- * TaskDefinition
+    , TaskDefinition
+    , taskDefinition
+    , tdStatus
+    , tdFamily
+    , tdContainerDefinitions
+    , tdTaskDefinitionARN
+    , tdRevision
+    , tdVolumes
+
+    -- * TaskOverride
+    , TaskOverride
+    , taskOverride
+    , toContainerOverrides
+
+    -- * VersionInfo
+    , VersionInfo
+    , versionInfo
+    , viAgentVersion
+    , viAgentHash
+    , viDockerVersion
+
+    -- * Volume
+    , Volume
+    , volume
+    , vName
+    , vHost
+
+    -- * VolumeFrom
+    , VolumeFrom
+    , volumeFrom
+    , vfSourceContainer
+    , vfReadOnly
+    ) where
+
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.ECS.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | Version @2014-11-13@ of the Amazon EC2 Container Service SDK.
+data ECS
+
+instance AWSService ECS where
+    type Sg ECS = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "ECS"
+            , _svcPrefix = "ecs"
+            , _svcVersion = "2014-11-13"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
+
+-- | The specified parameter is invalid. Review the available parameters for
+-- the API request.
+_InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterException =
+    _ServiceError . hasCode "InvalidParameterException"
+
+-- | These errors are usually caused by a server-side issue.
+_ServerException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServerException = _ServiceError . hasCode "ServerException"
+
+-- | You cannot delete a cluster that contains services. You must first
+-- update the service to reduce its desired task count to 0 and then delete
+-- the service. For more information, see UpdateService and DeleteService.
+_ClusterContainsServicesException :: AsError a => Getting (First ServiceError) a ServiceError
+_ClusterContainsServicesException =
+    _ServiceError . hasCode "ClusterContainsServicesException"
+
+-- | You cannot delete a cluster that has registered container instances. You
+-- must first deregister the container instances before you can delete the
+-- cluster. For more information, see DeregisterContainerInstance.
+_ClusterContainsContainerInstancesException :: AsError a => Getting (First ServiceError) a ServiceError
+_ClusterContainsContainerInstancesException =
+    _ServiceError . hasCode "ClusterContainsContainerInstancesException"
+
+-- | The specified service is not active. You cannot update a service that is
+-- not active. If you have previously deleted a service, you can recreate
+-- it with CreateService.
+_ServiceNotActiveException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceNotActiveException =
+    _ServiceError . hasCode "ServiceNotActiveException"
+
+-- | There is no update available for this Amazon ECS container agent. This
+-- could be because the agent is already running the latest version, or it
+-- is so old that there is no update path to the current version.
+_NoUpdateAvailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_NoUpdateAvailableException =
+    _ServiceError . hasCode "NoUpdateAvailableException"
+
+-- | The specified cluster could not be found. You can view your available
+-- clusters with ListClusters. Amazon ECS clusters are region-specific.
+_ClusterNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ClusterNotFoundException = _ServiceError . hasCode "ClusterNotFoundException"
+
+-- | The specified service could not be found. You can view your available
+-- services with ListServices. Amazon ECS services are cluster-specific and
+-- region-specific.
+_ServiceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceNotFoundException = _ServiceError . hasCode "ServiceNotFoundException"
+
+-- | Amazon ECS is unable to determine the current version of the Amazon ECS
+-- container agent on the container instance and does not have enough
+-- information to proceed with an update. This could be because the agent
+-- running on the container instance is an older or custom version that
+-- does not use our version information.
+_MissingVersionException :: AsError a => Getting (First ServiceError) a ServiceError
+_MissingVersionException = _ServiceError . hasCode "MissingVersionException"
+
+-- | There is already a current Amazon ECS container agent update in progress
+-- on the specified container instance. If the container agent becomes
+-- disconnected while it is in a transitional stage, such as 'PENDING' or
+-- 'STAGING', the update process can get stuck in that state. However, when
+-- the agent reconnects, it will resume where it stopped previously.
+_UpdateInProgressException :: AsError a => Getting (First ServiceError) a ServiceError
+_UpdateInProgressException =
+    _ServiceError . hasCode "UpdateInProgressException"
+
+-- | These errors are usually caused by something the client did, such as use
+-- an action or resource on behalf of a user that doesn\'t have permission
+-- to use the action or resource, or specify an identifier that is not
+-- valid.
+_ClientException :: AsError a => Getting (First ServiceError) a ServiceError
+_ClientException = _ServiceError . hasCode "ClientException"
diff --git a/gen/Network/AWS/ECS/Types/Product.hs b/gen/Network/AWS/ECS/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ECS/Types/Product.hs
@@ -0,0 +1,1719 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.ECS.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.ECS.Types.Product where
+
+import           Network.AWS.ECS.Types.Sum
+import           Network.AWS.Prelude
+
+-- | A regional grouping of one or more container instances on which you can
+-- run task requests. Each account receives a default cluster the first
+-- time you use the Amazon ECS service, but you may also create other
+-- clusters. Clusters may contain more than one instance type
+-- simultaneously.
+--
+-- /See:/ 'cluster' smart constructor.
+data Cluster = Cluster'
+    { _cStatus                            :: !(Maybe Text)
+    , _cClusterARN                        :: !(Maybe Text)
+    , _cRunningTasksCount                 :: !(Maybe Int)
+    , _cRegisteredContainerInstancesCount :: !(Maybe Int)
+    , _cPendingTasksCount                 :: !(Maybe Int)
+    , _cClusterName                       :: !(Maybe Text)
+    , _cActiveServicesCount               :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Cluster' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus'
+--
+-- * 'cClusterARN'
+--
+-- * 'cRunningTasksCount'
+--
+-- * 'cRegisteredContainerInstancesCount'
+--
+-- * 'cPendingTasksCount'
+--
+-- * 'cClusterName'
+--
+-- * 'cActiveServicesCount'
+cluster
+    :: Cluster
+cluster =
+    Cluster'
+    { _cStatus = Nothing
+    , _cClusterARN = Nothing
+    , _cRunningTasksCount = Nothing
+    , _cRegisteredContainerInstancesCount = Nothing
+    , _cPendingTasksCount = Nothing
+    , _cClusterName = Nothing
+    , _cActiveServicesCount = Nothing
+    }
+
+-- | The status of the cluster. The valid values are 'ACTIVE' or 'INACTIVE'.
+-- 'ACTIVE' indicates that you can register container instances with the
+-- cluster and the associated instances can accept tasks.
+cStatus :: Lens' Cluster (Maybe Text)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the cluster. The ARN
+-- contains the 'arn:aws:ecs' namespace, followed by the region of the
+-- cluster, the AWS account ID of the cluster owner, the 'cluster'
+-- namespace, and then the cluster name. For example,
+-- arn:aws:ecs:/region/:/012345678910/:cluster\//test/.
+cClusterARN :: Lens' Cluster (Maybe Text)
+cClusterARN = lens _cClusterARN (\ s a -> s{_cClusterARN = a});
+
+-- | The number of tasks in the cluster that are in the 'RUNNING' state.
+cRunningTasksCount :: Lens' Cluster (Maybe Int)
+cRunningTasksCount = lens _cRunningTasksCount (\ s a -> s{_cRunningTasksCount = a});
+
+-- | The number of container instances registered into the cluster.
+cRegisteredContainerInstancesCount :: Lens' Cluster (Maybe Int)
+cRegisteredContainerInstancesCount = lens _cRegisteredContainerInstancesCount (\ s a -> s{_cRegisteredContainerInstancesCount = a});
+
+-- | The number of tasks in the cluster that are in the 'PENDING' state.
+cPendingTasksCount :: Lens' Cluster (Maybe Int)
+cPendingTasksCount = lens _cPendingTasksCount (\ s a -> s{_cPendingTasksCount = a});
+
+-- | A user-generated string that you can use to identify your cluster.
+cClusterName :: Lens' Cluster (Maybe Text)
+cClusterName = lens _cClusterName (\ s a -> s{_cClusterName = a});
+
+-- | The number of services that are running on the cluster in an 'ACTIVE'
+-- state. You can view these services with ListServices.
+cActiveServicesCount :: Lens' Cluster (Maybe Int)
+cActiveServicesCount = lens _cActiveServicesCount (\ s a -> s{_cActiveServicesCount = a});
+
+instance FromJSON Cluster where
+        parseJSON
+          = withObject "Cluster"
+              (\ x ->
+                 Cluster' <$>
+                   (x .:? "status") <*> (x .:? "clusterArn") <*>
+                     (x .:? "runningTasksCount")
+                     <*> (x .:? "registeredContainerInstancesCount")
+                     <*> (x .:? "pendingTasksCount")
+                     <*> (x .:? "clusterName")
+                     <*> (x .:? "activeServicesCount"))
+
+-- | A docker container that is part of a task.
+--
+-- /See:/ 'container' smart constructor.
+data Container = Container'
+    { _cNetworkBindings :: !(Maybe [NetworkBinding])
+    , _cContainerARN    :: !(Maybe Text)
+    , _cTaskARN         :: !(Maybe Text)
+    , _cLastStatus      :: !(Maybe Text)
+    , _cReason          :: !(Maybe Text)
+    , _cName            :: !(Maybe Text)
+    , _cExitCode        :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Container' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cNetworkBindings'
+--
+-- * 'cContainerARN'
+--
+-- * 'cTaskARN'
+--
+-- * 'cLastStatus'
+--
+-- * 'cReason'
+--
+-- * 'cName'
+--
+-- * 'cExitCode'
+container
+    :: Container
+container =
+    Container'
+    { _cNetworkBindings = Nothing
+    , _cContainerARN = Nothing
+    , _cTaskARN = Nothing
+    , _cLastStatus = Nothing
+    , _cReason = Nothing
+    , _cName = Nothing
+    , _cExitCode = Nothing
+    }
+
+-- | The network bindings associated with the container.
+cNetworkBindings :: Lens' Container [NetworkBinding]
+cNetworkBindings = lens _cNetworkBindings (\ s a -> s{_cNetworkBindings = a}) . _Default . _Coerce;
+
+-- | The Amazon Resource Name (ARN) of the container.
+cContainerARN :: Lens' Container (Maybe Text)
+cContainerARN = lens _cContainerARN (\ s a -> s{_cContainerARN = a});
+
+-- | The Amazon Resource Name (ARN) of the task.
+cTaskARN :: Lens' Container (Maybe Text)
+cTaskARN = lens _cTaskARN (\ s a -> s{_cTaskARN = a});
+
+-- | The last known status of the container.
+cLastStatus :: Lens' Container (Maybe Text)
+cLastStatus = lens _cLastStatus (\ s a -> s{_cLastStatus = a});
+
+-- | A short (255 max characters) human-readable string to provide additional
+-- detail about a running or stopped container.
+cReason :: Lens' Container (Maybe Text)
+cReason = lens _cReason (\ s a -> s{_cReason = a});
+
+-- | The name of the container.
+cName :: Lens' Container (Maybe Text)
+cName = lens _cName (\ s a -> s{_cName = a});
+
+-- | The exit code returned from the container.
+cExitCode :: Lens' Container (Maybe Int)
+cExitCode = lens _cExitCode (\ s a -> s{_cExitCode = a});
+
+instance FromJSON Container where
+        parseJSON
+          = withObject "Container"
+              (\ x ->
+                 Container' <$>
+                   (x .:? "networkBindings" .!= mempty) <*>
+                     (x .:? "containerArn")
+                     <*> (x .:? "taskArn")
+                     <*> (x .:? "lastStatus")
+                     <*> (x .:? "reason")
+                     <*> (x .:? "name")
+                     <*> (x .:? "exitCode"))
+
+-- | Container definitions are used in task definitions to describe the
+-- different containers that are launched as part of a task.
+--
+-- /See:/ 'containerDefinition' smart constructor.
+data ContainerDefinition = ContainerDefinition'
+    { _cdImage        :: !(Maybe Text)
+    , _cdCommand      :: !(Maybe [Text])
+    , _cdVolumesFrom  :: !(Maybe [VolumeFrom])
+    , _cdEnvironment  :: !(Maybe [KeyValuePair])
+    , _cdEntryPoint   :: !(Maybe [Text])
+    , _cdPortMappings :: !(Maybe [PortMapping])
+    , _cdMemory       :: !(Maybe Int)
+    , _cdName         :: !(Maybe Text)
+    , _cdMountPoints  :: !(Maybe [MountPoint])
+    , _cdLinks        :: !(Maybe [Text])
+    , _cdEssential    :: !(Maybe Bool)
+    , _cdCpu          :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContainerDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdImage'
+--
+-- * 'cdCommand'
+--
+-- * 'cdVolumesFrom'
+--
+-- * 'cdEnvironment'
+--
+-- * 'cdEntryPoint'
+--
+-- * 'cdPortMappings'
+--
+-- * 'cdMemory'
+--
+-- * 'cdName'
+--
+-- * 'cdMountPoints'
+--
+-- * 'cdLinks'
+--
+-- * 'cdEssential'
+--
+-- * 'cdCpu'
+containerDefinition
+    :: ContainerDefinition
+containerDefinition =
+    ContainerDefinition'
+    { _cdImage = Nothing
+    , _cdCommand = Nothing
+    , _cdVolumesFrom = Nothing
+    , _cdEnvironment = Nothing
+    , _cdEntryPoint = Nothing
+    , _cdPortMappings = Nothing
+    , _cdMemory = Nothing
+    , _cdName = Nothing
+    , _cdMountPoints = Nothing
+    , _cdLinks = Nothing
+    , _cdEssential = Nothing
+    , _cdCpu = Nothing
+    }
+
+-- | The image used to start a container. This string is passed directly to
+-- the Docker daemon. Images in the Docker Hub registry are available by
+-- default. Other repositories are specified with
+-- 'repository-url\/image:tag'.
+cdImage :: Lens' ContainerDefinition (Maybe Text)
+cdImage = lens _cdImage (\ s a -> s{_cdImage = a});
+
+-- | The 'CMD' that is passed to the container. For more information on the
+-- Docker 'CMD' parameter, see
+-- <https://docs.docker.com/reference/builder/#cmd>.
+cdCommand :: Lens' ContainerDefinition [Text]
+cdCommand = lens _cdCommand (\ s a -> s{_cdCommand = a}) . _Default . _Coerce;
+
+-- | Data volumes to mount from another container.
+cdVolumesFrom :: Lens' ContainerDefinition [VolumeFrom]
+cdVolumesFrom = lens _cdVolumesFrom (\ s a -> s{_cdVolumesFrom = a}) . _Default . _Coerce;
+
+-- | The environment variables to pass to a container.
+cdEnvironment :: Lens' ContainerDefinition [KeyValuePair]
+cdEnvironment = lens _cdEnvironment (\ s a -> s{_cdEnvironment = a}) . _Default . _Coerce;
+
+-- | Early versions of the Amazon ECS container agent do not properly handle
+-- 'entryPoint' parameters. If you have problems using 'entryPoint', update
+-- your container agent or enter your commands and arguments as 'command'
+-- array items instead.
+--
+-- The 'ENTRYPOINT' that is passed to the container. For more information
+-- on the Docker 'ENTRYPOINT' parameter, see
+-- <https://docs.docker.com/reference/builder/#entrypoint>.
+cdEntryPoint :: Lens' ContainerDefinition [Text]
+cdEntryPoint = lens _cdEntryPoint (\ s a -> s{_cdEntryPoint = a}) . _Default . _Coerce;
+
+-- | The list of port mappings for the container.
+cdPortMappings :: Lens' ContainerDefinition [PortMapping]
+cdPortMappings = lens _cdPortMappings (\ s a -> s{_cdPortMappings = a}) . _Default . _Coerce;
+
+-- | The number of MiB of memory reserved for the container. If your
+-- container attempts to exceed the memory allocated here, the container is
+-- killed.
+cdMemory :: Lens' ContainerDefinition (Maybe Int)
+cdMemory = lens _cdMemory (\ s a -> s{_cdMemory = a});
+
+-- | The name of a container. If you are linking multiple containers together
+-- in a task definition, the 'name' of one container can be entered in the
+-- 'links' of another container to connect the containers.
+cdName :: Lens' ContainerDefinition (Maybe Text)
+cdName = lens _cdName (\ s a -> s{_cdName = a});
+
+-- | The mount points for data volumes in your container.
+cdMountPoints :: Lens' ContainerDefinition [MountPoint]
+cdMountPoints = lens _cdMountPoints (\ s a -> s{_cdMountPoints = a}) . _Default . _Coerce;
+
+-- | The 'link' parameter allows containers to communicate with each other
+-- without the need for port mappings, using the 'name' parameter. The
+-- 'name:internalName' construct is analogous to 'name:alias' in Docker
+-- links. For more information on linking Docker containers, see
+-- <https://docs.docker.com/userguide/dockerlinks/>.
+--
+-- Containers that are collocated on a single container instance may be
+-- able to communicate with each other without requiring links or host port
+-- mappings. Network isolation is achieved on the container instance using
+-- security groups and VPC settings.
+cdLinks :: Lens' ContainerDefinition [Text]
+cdLinks = lens _cdLinks (\ s a -> s{_cdLinks = a}) . _Default . _Coerce;
+
+-- | If the 'essential' parameter of a container is marked as 'true', the
+-- failure of that container will stop the task. If the 'essential'
+-- parameter of a container is marked as 'false', then its failure will not
+-- affect the rest of the containers in a task. If this parameter is
+-- omitted, a container is assumed to be essential.
+--
+-- All tasks must have at least one essential container.
+cdEssential :: Lens' ContainerDefinition (Maybe Bool)
+cdEssential = lens _cdEssential (\ s a -> s{_cdEssential = a});
+
+-- | The number of 'cpu' units reserved for the container. A container
+-- instance has 1,024 'cpu' units for every CPU core. This parameter
+-- specifies the minimum amount of CPU to reserve for a container, and
+-- containers share unallocated CPU units with other containers on the
+-- instance with the same ratio as their allocated amount.
+--
+-- For example, if you run a single-container task on a single-core
+-- instance type with 512 CPU units specified for that container, and that
+-- is the only task running on the container instance, that container could
+-- use the full 1,024 CPU unit share at any given time. However, if you
+-- launched another copy of the same task on that container instance, each
+-- task would be guaranteed a minimum of 512 CPU units when needed, and
+-- each container could float to higher CPU usage if the other container
+-- was not using it, but if both tasks were 100% active all of the time,
+-- they would be limited to 512 CPU units.
+--
+-- The Docker daemon on the container instance uses the CPU value to
+-- calculate the relative CPU share ratios for running containers. For more
+-- information, see
+-- <https://docs.docker.com/reference/run/#cpu-share-constraint CPU share constraint>
+-- in the Docker documentation. The minimum valid CPU share value that the
+-- Linux kernel will allow is 2; however, the CPU parameter is not
+-- required, and you can use CPU values below 2 in your container
+-- definitions. For CPU values below 2 (including null), the behavior
+-- varies based on your Amazon ECS container agent version:
+--
+-- -   __Agent versions less than or equal to 1.1.0:__ Null and zero CPU
+--     values are passed to Docker as 0, which Docker then converts to
+--     1,024 CPU shares. CPU values of 1 are passed to Docker as 1, which
+--     the Linux kernel converts to 2 CPU shares.
+-- -   __Agent versions greater than or equal to 1.2.0:__ Null, zero, and
+--     CPU values of 1 are passed to Docker as 2.
+cdCpu :: Lens' ContainerDefinition (Maybe Int)
+cdCpu = lens _cdCpu (\ s a -> s{_cdCpu = a});
+
+instance FromJSON ContainerDefinition where
+        parseJSON
+          = withObject "ContainerDefinition"
+              (\ x ->
+                 ContainerDefinition' <$>
+                   (x .:? "image") <*> (x .:? "command" .!= mempty) <*>
+                     (x .:? "volumesFrom" .!= mempty)
+                     <*> (x .:? "environment" .!= mempty)
+                     <*> (x .:? "entryPoint" .!= mempty)
+                     <*> (x .:? "portMappings" .!= mempty)
+                     <*> (x .:? "memory")
+                     <*> (x .:? "name")
+                     <*> (x .:? "mountPoints" .!= mempty)
+                     <*> (x .:? "links" .!= mempty)
+                     <*> (x .:? "essential")
+                     <*> (x .:? "cpu"))
+
+instance ToJSON ContainerDefinition where
+        toJSON ContainerDefinition'{..}
+          = object
+              ["image" .= _cdImage, "command" .= _cdCommand,
+               "volumesFrom" .= _cdVolumesFrom,
+               "environment" .= _cdEnvironment,
+               "entryPoint" .= _cdEntryPoint,
+               "portMappings" .= _cdPortMappings,
+               "memory" .= _cdMemory, "name" .= _cdName,
+               "mountPoints" .= _cdMountPoints, "links" .= _cdLinks,
+               "essential" .= _cdEssential, "cpu" .= _cdCpu]
+
+-- | An Amazon EC2 instance that is running the Amazon ECS agent and has been
+-- registered with a cluster.
+--
+-- /See:/ 'containerInstance' smart constructor.
+data ContainerInstance = ContainerInstance'
+    { _ciStatus               :: !(Maybe Text)
+    , _ciRunningTasksCount    :: !(Maybe Int)
+    , _ciRemainingResources   :: !(Maybe [Resource])
+    , _ciEc2InstanceId        :: !(Maybe Text)
+    , _ciContainerInstanceARN :: !(Maybe Text)
+    , _ciAgentConnected       :: !(Maybe Bool)
+    , _ciVersionInfo          :: !(Maybe VersionInfo)
+    , _ciAgentUpdateStatus    :: !(Maybe AgentUpdateStatus)
+    , _ciPendingTasksCount    :: !(Maybe Int)
+    , _ciRegisteredResources  :: !(Maybe [Resource])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContainerInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciStatus'
+--
+-- * 'ciRunningTasksCount'
+--
+-- * 'ciRemainingResources'
+--
+-- * 'ciEc2InstanceId'
+--
+-- * 'ciContainerInstanceARN'
+--
+-- * 'ciAgentConnected'
+--
+-- * 'ciVersionInfo'
+--
+-- * 'ciAgentUpdateStatus'
+--
+-- * 'ciPendingTasksCount'
+--
+-- * 'ciRegisteredResources'
+containerInstance
+    :: ContainerInstance
+containerInstance =
+    ContainerInstance'
+    { _ciStatus = Nothing
+    , _ciRunningTasksCount = Nothing
+    , _ciRemainingResources = Nothing
+    , _ciEc2InstanceId = Nothing
+    , _ciContainerInstanceARN = Nothing
+    , _ciAgentConnected = Nothing
+    , _ciVersionInfo = Nothing
+    , _ciAgentUpdateStatus = Nothing
+    , _ciPendingTasksCount = Nothing
+    , _ciRegisteredResources = Nothing
+    }
+
+-- | The status of the container instance. The valid values are 'ACTIVE' or
+-- 'INACTIVE'. 'ACTIVE' indicates that the container instance can accept
+-- tasks.
+ciStatus :: Lens' ContainerInstance (Maybe Text)
+ciStatus = lens _ciStatus (\ s a -> s{_ciStatus = a});
+
+-- | The number of tasks on the container instance that are in the 'RUNNING'
+-- status.
+ciRunningTasksCount :: Lens' ContainerInstance (Maybe Int)
+ciRunningTasksCount = lens _ciRunningTasksCount (\ s a -> s{_ciRunningTasksCount = a});
+
+-- | The remaining resources of the container instance that are available for
+-- new tasks.
+ciRemainingResources :: Lens' ContainerInstance [Resource]
+ciRemainingResources = lens _ciRemainingResources (\ s a -> s{_ciRemainingResources = a}) . _Default . _Coerce;
+
+-- | The Amazon EC2 instance ID of the container instance.
+ciEc2InstanceId :: Lens' ContainerInstance (Maybe Text)
+ciEc2InstanceId = lens _ciEc2InstanceId (\ s a -> s{_ciEc2InstanceId = a});
+
+-- | The Amazon Resource Name (ARN) of the container instance. The ARN
+-- contains the 'arn:aws:ecs' namespace, followed by the region of the
+-- container instance, the AWS account ID of the container instance owner,
+-- the 'container-instance' namespace, and then the container instance
+-- UUID. For example,
+-- arn:aws:ecs:/region/:/aws_account_id/:container-instance\//container_instance_UUID/.
+ciContainerInstanceARN :: Lens' ContainerInstance (Maybe Text)
+ciContainerInstanceARN = lens _ciContainerInstanceARN (\ s a -> s{_ciContainerInstanceARN = a});
+
+-- | This parameter returns 'true' if the agent is actually connected to
+-- Amazon ECS. Registered instances with an agent that may be unhealthy or
+-- stopped will return 'false', and instances without a connected agent
+-- cannot accept placement request.
+ciAgentConnected :: Lens' ContainerInstance (Maybe Bool)
+ciAgentConnected = lens _ciAgentConnected (\ s a -> s{_ciAgentConnected = a});
+
+-- | The version information for the Amazon ECS container agent and Docker
+-- daemon running on the container instance.
+ciVersionInfo :: Lens' ContainerInstance (Maybe VersionInfo)
+ciVersionInfo = lens _ciVersionInfo (\ s a -> s{_ciVersionInfo = a});
+
+-- | The status of the most recent agent update. If an update has never been
+-- requested, this value is 'NULL'.
+ciAgentUpdateStatus :: Lens' ContainerInstance (Maybe AgentUpdateStatus)
+ciAgentUpdateStatus = lens _ciAgentUpdateStatus (\ s a -> s{_ciAgentUpdateStatus = a});
+
+-- | The number of tasks on the container instance that are in the 'PENDING'
+-- status.
+ciPendingTasksCount :: Lens' ContainerInstance (Maybe Int)
+ciPendingTasksCount = lens _ciPendingTasksCount (\ s a -> s{_ciPendingTasksCount = a});
+
+-- | The registered resources on the container instance that are in use by
+-- current tasks.
+ciRegisteredResources :: Lens' ContainerInstance [Resource]
+ciRegisteredResources = lens _ciRegisteredResources (\ s a -> s{_ciRegisteredResources = a}) . _Default . _Coerce;
+
+instance FromJSON ContainerInstance where
+        parseJSON
+          = withObject "ContainerInstance"
+              (\ x ->
+                 ContainerInstance' <$>
+                   (x .:? "status") <*> (x .:? "runningTasksCount") <*>
+                     (x .:? "remainingResources" .!= mempty)
+                     <*> (x .:? "ec2InstanceId")
+                     <*> (x .:? "containerInstanceArn")
+                     <*> (x .:? "agentConnected")
+                     <*> (x .:? "versionInfo")
+                     <*> (x .:? "agentUpdateStatus")
+                     <*> (x .:? "pendingTasksCount")
+                     <*> (x .:? "registeredResources" .!= mempty))
+
+-- | The overrides that should be sent to a container.
+--
+-- /See:/ 'containerOverride' smart constructor.
+data ContainerOverride = ContainerOverride'
+    { _coCommand     :: !(Maybe [Text])
+    , _coEnvironment :: !(Maybe [KeyValuePair])
+    , _coName        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContainerOverride' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'coCommand'
+--
+-- * 'coEnvironment'
+--
+-- * 'coName'
+containerOverride
+    :: ContainerOverride
+containerOverride =
+    ContainerOverride'
+    { _coCommand = Nothing
+    , _coEnvironment = Nothing
+    , _coName = Nothing
+    }
+
+-- | The command to send to the container that overrides the default command
+-- from the Docker image or the task definition.
+coCommand :: Lens' ContainerOverride [Text]
+coCommand = lens _coCommand (\ s a -> s{_coCommand = a}) . _Default . _Coerce;
+
+-- | The environment variables to send to the container. You can add new
+-- environment variables, which are added to the container at launch, or
+-- you can override the existing environment variables from the Docker
+-- image or the task definition.
+coEnvironment :: Lens' ContainerOverride [KeyValuePair]
+coEnvironment = lens _coEnvironment (\ s a -> s{_coEnvironment = a}) . _Default . _Coerce;
+
+-- | The name of the container that receives the override.
+coName :: Lens' ContainerOverride (Maybe Text)
+coName = lens _coName (\ s a -> s{_coName = a});
+
+instance FromJSON ContainerOverride where
+        parseJSON
+          = withObject "ContainerOverride"
+              (\ x ->
+                 ContainerOverride' <$>
+                   (x .:? "command" .!= mempty) <*>
+                     (x .:? "environment" .!= mempty)
+                     <*> (x .:? "name"))
+
+instance ToJSON ContainerOverride where
+        toJSON ContainerOverride'{..}
+          = object
+              ["command" .= _coCommand,
+               "environment" .= _coEnvironment, "name" .= _coName]
+
+-- | Details on a service within a cluster
+--
+-- /See:/ 'containerService' smart constructor.
+data ContainerService = ContainerService'
+    { _csStatus         :: !(Maybe Text)
+    , _csRunningCount   :: !(Maybe Int)
+    , _csClusterARN     :: !(Maybe Text)
+    , _csDesiredCount   :: !(Maybe Int)
+    , _csLoadBalancers  :: !(Maybe [LoadBalancer])
+    , _csPendingCount   :: !(Maybe Int)
+    , _csEvents         :: !(Maybe [ServiceEvent])
+    , _csServiceName    :: !(Maybe Text)
+    , _csDeployments    :: !(Maybe [Deployment])
+    , _csTaskDefinition :: !(Maybe Text)
+    , _csServiceARN     :: !(Maybe Text)
+    , _csRoleARN        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContainerService' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csStatus'
+--
+-- * 'csRunningCount'
+--
+-- * 'csClusterARN'
+--
+-- * 'csDesiredCount'
+--
+-- * 'csLoadBalancers'
+--
+-- * 'csPendingCount'
+--
+-- * 'csEvents'
+--
+-- * 'csServiceName'
+--
+-- * 'csDeployments'
+--
+-- * 'csTaskDefinition'
+--
+-- * 'csServiceARN'
+--
+-- * 'csRoleARN'
+containerService
+    :: ContainerService
+containerService =
+    ContainerService'
+    { _csStatus = Nothing
+    , _csRunningCount = Nothing
+    , _csClusterARN = Nothing
+    , _csDesiredCount = Nothing
+    , _csLoadBalancers = Nothing
+    , _csPendingCount = Nothing
+    , _csEvents = Nothing
+    , _csServiceName = Nothing
+    , _csDeployments = Nothing
+    , _csTaskDefinition = Nothing
+    , _csServiceARN = Nothing
+    , _csRoleARN = Nothing
+    }
+
+-- | The status of the service. The valid values are 'ACTIVE', 'DRAINING', or
+-- 'INACTIVE'.
+csStatus :: Lens' ContainerService (Maybe Text)
+csStatus = lens _csStatus (\ s a -> s{_csStatus = a});
+
+-- | The number of tasks in the cluster that are in the 'RUNNING' state.
+csRunningCount :: Lens' ContainerService (Maybe Int)
+csRunningCount = lens _csRunningCount (\ s a -> s{_csRunningCount = a});
+
+-- | The Amazon Resource Name (ARN) of the of the cluster that hosts the
+-- service.
+csClusterARN :: Lens' ContainerService (Maybe Text)
+csClusterARN = lens _csClusterARN (\ s a -> s{_csClusterARN = a});
+
+-- | The desired number of instantiations of the task definition to keep
+-- running on the service. This value is specified when the service is
+-- created with CreateService, and it can be modified with UpdateService.
+csDesiredCount :: Lens' ContainerService (Maybe Int)
+csDesiredCount = lens _csDesiredCount (\ s a -> s{_csDesiredCount = a});
+
+-- | A list of load balancer objects, containing the load balancer name, the
+-- container name (as it appears in a container definition), and the
+-- container port to access from the load balancer.
+csLoadBalancers :: Lens' ContainerService [LoadBalancer]
+csLoadBalancers = lens _csLoadBalancers (\ s a -> s{_csLoadBalancers = a}) . _Default . _Coerce;
+
+-- | The number of tasks in the cluster that are in the 'PENDING' state.
+csPendingCount :: Lens' ContainerService (Maybe Int)
+csPendingCount = lens _csPendingCount (\ s a -> s{_csPendingCount = a});
+
+-- | The event stream for your service. A maximum of 100 of the latest events
+-- are displayed.
+csEvents :: Lens' ContainerService [ServiceEvent]
+csEvents = lens _csEvents (\ s a -> s{_csEvents = a}) . _Default . _Coerce;
+
+-- | A user-generated string that you can use to identify your service.
+csServiceName :: Lens' ContainerService (Maybe Text)
+csServiceName = lens _csServiceName (\ s a -> s{_csServiceName = a});
+
+-- | The current state of deployments for the service.
+csDeployments :: Lens' ContainerService [Deployment]
+csDeployments = lens _csDeployments (\ s a -> s{_csDeployments = a}) . _Default . _Coerce;
+
+-- | The task definition to use for tasks in the service. This value is
+-- specified when the service is created with CreateService, and it can be
+-- modified with UpdateService.
+csTaskDefinition :: Lens' ContainerService (Maybe Text)
+csTaskDefinition = lens _csTaskDefinition (\ s a -> s{_csTaskDefinition = a});
+
+-- | The Amazon Resource Name (ARN) that identifies the service. The ARN
+-- contains the 'arn:aws:ecs' namespace, followed by the region of the
+-- service, the AWS account ID of the service owner, the 'service'
+-- namespace, and then the service name. For example,
+-- arn:aws:ecs:/region/:/012345678910/:service\//my-service/.
+csServiceARN :: Lens' ContainerService (Maybe Text)
+csServiceARN = lens _csServiceARN (\ s a -> s{_csServiceARN = a});
+
+-- | The Amazon Resource Name (ARN) of the IAM role associated with the
+-- service that allows the Amazon ECS container agent to register container
+-- instances with a load balancer.
+csRoleARN :: Lens' ContainerService (Maybe Text)
+csRoleARN = lens _csRoleARN (\ s a -> s{_csRoleARN = a});
+
+instance FromJSON ContainerService where
+        parseJSON
+          = withObject "ContainerService"
+              (\ x ->
+                 ContainerService' <$>
+                   (x .:? "status") <*> (x .:? "runningCount") <*>
+                     (x .:? "clusterArn")
+                     <*> (x .:? "desiredCount")
+                     <*> (x .:? "loadBalancers" .!= mempty)
+                     <*> (x .:? "pendingCount")
+                     <*> (x .:? "events" .!= mempty)
+                     <*> (x .:? "serviceName")
+                     <*> (x .:? "deployments" .!= mempty)
+                     <*> (x .:? "taskDefinition")
+                     <*> (x .:? "serviceArn")
+                     <*> (x .:? "roleArn"))
+
+-- | The details of an Amazon ECS service deployment.
+--
+-- /See:/ 'deployment' smart constructor.
+data Deployment = Deployment'
+    { _dStatus         :: !(Maybe Text)
+    , _dRunningCount   :: !(Maybe Int)
+    , _dCreatedAt      :: !(Maybe POSIX)
+    , _dDesiredCount   :: !(Maybe Int)
+    , _dPendingCount   :: !(Maybe Int)
+    , _dId             :: !(Maybe Text)
+    , _dTaskDefinition :: !(Maybe Text)
+    , _dUpdatedAt      :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Deployment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dStatus'
+--
+-- * 'dRunningCount'
+--
+-- * 'dCreatedAt'
+--
+-- * 'dDesiredCount'
+--
+-- * 'dPendingCount'
+--
+-- * 'dId'
+--
+-- * 'dTaskDefinition'
+--
+-- * 'dUpdatedAt'
+deployment
+    :: Deployment
+deployment =
+    Deployment'
+    { _dStatus = Nothing
+    , _dRunningCount = Nothing
+    , _dCreatedAt = Nothing
+    , _dDesiredCount = Nothing
+    , _dPendingCount = Nothing
+    , _dId = Nothing
+    , _dTaskDefinition = Nothing
+    , _dUpdatedAt = Nothing
+    }
+
+-- | The status of the deployment. Valid values are 'PRIMARY' (for the most
+-- recent deployment), 'ACTIVE' (for previous deployments that still have
+-- tasks running, but are being replaced with the 'PRIMARY' deployment),
+-- and 'INACTIVE' (for deployments that have been completely replaced).
+dStatus :: Lens' Deployment (Maybe Text)
+dStatus = lens _dStatus (\ s a -> s{_dStatus = a});
+
+-- | The number of tasks in the deployment that are in the 'RUNNING' status.
+dRunningCount :: Lens' Deployment (Maybe Int)
+dRunningCount = lens _dRunningCount (\ s a -> s{_dRunningCount = a});
+
+-- | The Unix time in seconds and milliseconds when the service was created.
+dCreatedAt :: Lens' Deployment (Maybe UTCTime)
+dCreatedAt = lens _dCreatedAt (\ s a -> s{_dCreatedAt = a}) . mapping _Time;
+
+-- | The most recent desired count of tasks that was specified for the
+-- service to deploy and\/or maintain.
+dDesiredCount :: Lens' Deployment (Maybe Int)
+dDesiredCount = lens _dDesiredCount (\ s a -> s{_dDesiredCount = a});
+
+-- | The number of tasks in the deployment that are in the 'PENDING' status.
+dPendingCount :: Lens' Deployment (Maybe Int)
+dPendingCount = lens _dPendingCount (\ s a -> s{_dPendingCount = a});
+
+-- | The ID of the deployment.
+dId :: Lens' Deployment (Maybe Text)
+dId = lens _dId (\ s a -> s{_dId = a});
+
+-- | The most recent task definition that was specified for the service to
+-- use.
+dTaskDefinition :: Lens' Deployment (Maybe Text)
+dTaskDefinition = lens _dTaskDefinition (\ s a -> s{_dTaskDefinition = a});
+
+-- | The Unix time in seconds and milliseconds when the service was last
+-- updated.
+dUpdatedAt :: Lens' Deployment (Maybe UTCTime)
+dUpdatedAt = lens _dUpdatedAt (\ s a -> s{_dUpdatedAt = a}) . mapping _Time;
+
+instance FromJSON Deployment where
+        parseJSON
+          = withObject "Deployment"
+              (\ x ->
+                 Deployment' <$>
+                   (x .:? "status") <*> (x .:? "runningCount") <*>
+                     (x .:? "createdAt")
+                     <*> (x .:? "desiredCount")
+                     <*> (x .:? "pendingCount")
+                     <*> (x .:? "id")
+                     <*> (x .:? "taskDefinition")
+                     <*> (x .:? "updatedAt"))
+
+-- | A failed resource.
+--
+-- /See:/ 'failure' smart constructor.
+data Failure = Failure'
+    { _fArn    :: !(Maybe Text)
+    , _fReason :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Failure' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fArn'
+--
+-- * 'fReason'
+failure
+    :: Failure
+failure =
+    Failure'
+    { _fArn = Nothing
+    , _fReason = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the failed resource.
+fArn :: Lens' Failure (Maybe Text)
+fArn = lens _fArn (\ s a -> s{_fArn = a});
+
+-- | The reason for the failure.
+fReason :: Lens' Failure (Maybe Text)
+fReason = lens _fReason (\ s a -> s{_fReason = a});
+
+instance FromJSON Failure where
+        parseJSON
+          = withObject "Failure"
+              (\ x ->
+                 Failure' <$> (x .:? "arn") <*> (x .:? "reason"))
+
+-- | Details on a container instance host volume.
+--
+-- /See:/ 'hostVolumeProperties' smart constructor.
+newtype HostVolumeProperties = HostVolumeProperties'
+    { _hvpSourcePath :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostVolumeProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hvpSourcePath'
+hostVolumeProperties
+    :: HostVolumeProperties
+hostVolumeProperties =
+    HostVolumeProperties'
+    { _hvpSourcePath = Nothing
+    }
+
+-- | The path on the host container instance that is presented to the
+-- container. If this parameter is empty, then the Docker daemon has
+-- assigned a host path for you.
+hvpSourcePath :: Lens' HostVolumeProperties (Maybe Text)
+hvpSourcePath = lens _hvpSourcePath (\ s a -> s{_hvpSourcePath = a});
+
+instance FromJSON HostVolumeProperties where
+        parseJSON
+          = withObject "HostVolumeProperties"
+              (\ x ->
+                 HostVolumeProperties' <$> (x .:? "sourcePath"))
+
+instance ToJSON HostVolumeProperties where
+        toJSON HostVolumeProperties'{..}
+          = object ["sourcePath" .= _hvpSourcePath]
+
+-- | A key and value pair object.
+--
+-- /See:/ 'keyValuePair' smart constructor.
+data KeyValuePair = KeyValuePair'
+    { _kvpValue :: !(Maybe Text)
+    , _kvpName  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KeyValuePair' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kvpValue'
+--
+-- * 'kvpName'
+keyValuePair
+    :: KeyValuePair
+keyValuePair =
+    KeyValuePair'
+    { _kvpValue = Nothing
+    , _kvpName = Nothing
+    }
+
+-- | The value of the key value pair. For environment variables, this is the
+-- value of the environment variable.
+kvpValue :: Lens' KeyValuePair (Maybe Text)
+kvpValue = lens _kvpValue (\ s a -> s{_kvpValue = a});
+
+-- | The name of the key value pair. For environment variables, this is the
+-- name of the environment variable.
+kvpName :: Lens' KeyValuePair (Maybe Text)
+kvpName = lens _kvpName (\ s a -> s{_kvpName = a});
+
+instance FromJSON KeyValuePair where
+        parseJSON
+          = withObject "KeyValuePair"
+              (\ x ->
+                 KeyValuePair' <$> (x .:? "value") <*> (x .:? "name"))
+
+instance ToJSON KeyValuePair where
+        toJSON KeyValuePair'{..}
+          = object ["value" .= _kvpValue, "name" .= _kvpName]
+
+-- | Details on a load balancer that is used with a service.
+--
+-- /See:/ 'loadBalancer' smart constructor.
+data LoadBalancer = LoadBalancer'
+    { _lbLoadBalancerName :: !(Maybe Text)
+    , _lbContainerName    :: !(Maybe Text)
+    , _lbContainerPort    :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LoadBalancer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbLoadBalancerName'
+--
+-- * 'lbContainerName'
+--
+-- * 'lbContainerPort'
+loadBalancer
+    :: LoadBalancer
+loadBalancer =
+    LoadBalancer'
+    { _lbLoadBalancerName = Nothing
+    , _lbContainerName = Nothing
+    , _lbContainerPort = Nothing
+    }
+
+-- | The name of the load balancer.
+lbLoadBalancerName :: Lens' LoadBalancer (Maybe Text)
+lbLoadBalancerName = lens _lbLoadBalancerName (\ s a -> s{_lbLoadBalancerName = a});
+
+-- | The name of the container to associate with the load balancer.
+lbContainerName :: Lens' LoadBalancer (Maybe Text)
+lbContainerName = lens _lbContainerName (\ s a -> s{_lbContainerName = a});
+
+-- | The port on the container to associate with the load balancer. This port
+-- must correspond to a 'containerPort' in the service\'s task definition.
+-- Your container instances must allow ingress traffic on the 'hostPort' of
+-- the port mapping.
+lbContainerPort :: Lens' LoadBalancer (Maybe Int)
+lbContainerPort = lens _lbContainerPort (\ s a -> s{_lbContainerPort = a});
+
+instance FromJSON LoadBalancer where
+        parseJSON
+          = withObject "LoadBalancer"
+              (\ x ->
+                 LoadBalancer' <$>
+                   (x .:? "loadBalancerName") <*>
+                     (x .:? "containerName")
+                     <*> (x .:? "containerPort"))
+
+instance ToJSON LoadBalancer where
+        toJSON LoadBalancer'{..}
+          = object
+              ["loadBalancerName" .= _lbLoadBalancerName,
+               "containerName" .= _lbContainerName,
+               "containerPort" .= _lbContainerPort]
+
+-- | Details on a volume mount point that is used in a container definition.
+--
+-- /See:/ 'mountPoint' smart constructor.
+data MountPoint = MountPoint'
+    { _mpContainerPath :: !(Maybe Text)
+    , _mpSourceVolume  :: !(Maybe Text)
+    , _mpReadOnly      :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MountPoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpContainerPath'
+--
+-- * 'mpSourceVolume'
+--
+-- * 'mpReadOnly'
+mountPoint
+    :: MountPoint
+mountPoint =
+    MountPoint'
+    { _mpContainerPath = Nothing
+    , _mpSourceVolume = Nothing
+    , _mpReadOnly = Nothing
+    }
+
+-- | The path on the container to mount the host volume at.
+mpContainerPath :: Lens' MountPoint (Maybe Text)
+mpContainerPath = lens _mpContainerPath (\ s a -> s{_mpContainerPath = a});
+
+-- | The name of the volume to mount.
+mpSourceVolume :: Lens' MountPoint (Maybe Text)
+mpSourceVolume = lens _mpSourceVolume (\ s a -> s{_mpSourceVolume = a});
+
+-- | If this value is 'true', the container has read-only access to the
+-- volume. If this value is 'false', then the container can write to the
+-- volume. The default value is 'false'.
+mpReadOnly :: Lens' MountPoint (Maybe Bool)
+mpReadOnly = lens _mpReadOnly (\ s a -> s{_mpReadOnly = a});
+
+instance FromJSON MountPoint where
+        parseJSON
+          = withObject "MountPoint"
+              (\ x ->
+                 MountPoint' <$>
+                   (x .:? "containerPath") <*> (x .:? "sourceVolume")
+                     <*> (x .:? "readOnly"))
+
+instance ToJSON MountPoint where
+        toJSON MountPoint'{..}
+          = object
+              ["containerPath" .= _mpContainerPath,
+               "sourceVolume" .= _mpSourceVolume,
+               "readOnly" .= _mpReadOnly]
+
+-- | Details on the network bindings between a container and its host
+-- container instance.
+--
+-- /See:/ 'networkBinding' smart constructor.
+data NetworkBinding = NetworkBinding'
+    { _nbBindIP        :: !(Maybe Text)
+    , _nbProtocol      :: !(Maybe TransportProtocol)
+    , _nbHostPort      :: !(Maybe Int)
+    , _nbContainerPort :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkBinding' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nbBindIP'
+--
+-- * 'nbProtocol'
+--
+-- * 'nbHostPort'
+--
+-- * 'nbContainerPort'
+networkBinding
+    :: NetworkBinding
+networkBinding =
+    NetworkBinding'
+    { _nbBindIP = Nothing
+    , _nbProtocol = Nothing
+    , _nbHostPort = Nothing
+    , _nbContainerPort = Nothing
+    }
+
+-- | The IP address that the container is bound to on the container instance.
+nbBindIP :: Lens' NetworkBinding (Maybe Text)
+nbBindIP = lens _nbBindIP (\ s a -> s{_nbBindIP = a});
+
+-- | The protocol used for the network binding.
+nbProtocol :: Lens' NetworkBinding (Maybe TransportProtocol)
+nbProtocol = lens _nbProtocol (\ s a -> s{_nbProtocol = a});
+
+-- | The port number on the host that is used with the network binding.
+nbHostPort :: Lens' NetworkBinding (Maybe Int)
+nbHostPort = lens _nbHostPort (\ s a -> s{_nbHostPort = a});
+
+-- | The port number on the container that is be used with the network
+-- binding.
+nbContainerPort :: Lens' NetworkBinding (Maybe Int)
+nbContainerPort = lens _nbContainerPort (\ s a -> s{_nbContainerPort = a});
+
+instance FromJSON NetworkBinding where
+        parseJSON
+          = withObject "NetworkBinding"
+              (\ x ->
+                 NetworkBinding' <$>
+                   (x .:? "bindIP") <*> (x .:? "protocol") <*>
+                     (x .:? "hostPort")
+                     <*> (x .:? "containerPort"))
+
+instance ToJSON NetworkBinding where
+        toJSON NetworkBinding'{..}
+          = object
+              ["bindIP" .= _nbBindIP, "protocol" .= _nbProtocol,
+               "hostPort" .= _nbHostPort,
+               "containerPort" .= _nbContainerPort]
+
+-- | Port mappings allow containers to access ports on the host container
+-- instance to send or receive traffic. Port mappings are specified as part
+-- of the container definition.
+--
+-- /See:/ 'portMapping' smart constructor.
+data PortMapping = PortMapping'
+    { _pmProtocol      :: !(Maybe TransportProtocol)
+    , _pmHostPort      :: !(Maybe Int)
+    , _pmContainerPort :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PortMapping' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pmProtocol'
+--
+-- * 'pmHostPort'
+--
+-- * 'pmContainerPort'
+portMapping
+    :: PortMapping
+portMapping =
+    PortMapping'
+    { _pmProtocol = Nothing
+    , _pmHostPort = Nothing
+    , _pmContainerPort = Nothing
+    }
+
+-- | The protocol used for the port mapping. Valid values are 'tcp' and
+-- 'udp'. The default is 'tcp'.
+pmProtocol :: Lens' PortMapping (Maybe TransportProtocol)
+pmProtocol = lens _pmProtocol (\ s a -> s{_pmProtocol = a});
+
+-- | The port number on the container instance to reserve for your container.
+-- You can specify a non-reserved host port for your container port
+-- mapping, or you can omit the 'hostPort' (or set it to '0') while
+-- specifying a 'containerPort' and your container will automatically
+-- receive a port in the ephemeral port range for your container instance
+-- operating system and Docker version.
+--
+-- The default ephemeral port range is 49153 to 65535, and this range is
+-- used for Docker versions prior to 1.6.0. For Docker version 1.6.0 and
+-- later, the Docker daemon tries to read the ephemeral port range from
+-- '\/proc\/sys\/net\/ipv4\/ip_local_port_range'; if this kernel parameter
+-- is unavailable, the default ephemeral port range is used. You should not
+-- attempt to specify a host port in the ephemeral port range, since these
+-- are reserved for automatic assignment. In general, ports below 32768 are
+-- outside of the ephemeral port range.
+--
+-- The default reserved ports are 22 for SSH, the Docker ports 2375 and
+-- 2376, and the Amazon ECS Container Agent port 51678. Any host port that
+-- was previously specified in a running task is also reserved while the
+-- task is running (once a task stops, the host port is released).The
+-- current reserved ports are displayed in the 'remainingResources' of
+-- DescribeContainerInstances output, and a container instance may have up
+-- to 50 reserved ports at a time, including the default reserved ports
+-- (automatically assigned ports do not count toward this limit).
+pmHostPort :: Lens' PortMapping (Maybe Int)
+pmHostPort = lens _pmHostPort (\ s a -> s{_pmHostPort = a});
+
+-- | The port number on the container that is bound to the user-specified or
+-- automatically assigned host port. If you specify a container port and
+-- not a host port, your container will automatically receive a host port
+-- in the ephemeral port range (for more information, see 'hostPort').
+pmContainerPort :: Lens' PortMapping (Maybe Int)
+pmContainerPort = lens _pmContainerPort (\ s a -> s{_pmContainerPort = a});
+
+instance FromJSON PortMapping where
+        parseJSON
+          = withObject "PortMapping"
+              (\ x ->
+                 PortMapping' <$>
+                   (x .:? "protocol") <*> (x .:? "hostPort") <*>
+                     (x .:? "containerPort"))
+
+instance ToJSON PortMapping where
+        toJSON PortMapping'{..}
+          = object
+              ["protocol" .= _pmProtocol,
+               "hostPort" .= _pmHostPort,
+               "containerPort" .= _pmContainerPort]
+
+-- | Describes the resources available for a container instance.
+--
+-- /See:/ 'resource' smart constructor.
+data Resource = Resource'
+    { _rStringSetValue :: !(Maybe [Text])
+    , _rIntegerValue   :: !(Maybe Int)
+    , _rDoubleValue    :: !(Maybe Double)
+    , _rLongValue      :: !(Maybe Integer)
+    , _rName           :: !(Maybe Text)
+    , _rType           :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Resource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rStringSetValue'
+--
+-- * 'rIntegerValue'
+--
+-- * 'rDoubleValue'
+--
+-- * 'rLongValue'
+--
+-- * 'rName'
+--
+-- * 'rType'
+resource
+    :: Resource
+resource =
+    Resource'
+    { _rStringSetValue = Nothing
+    , _rIntegerValue = Nothing
+    , _rDoubleValue = Nothing
+    , _rLongValue = Nothing
+    , _rName = Nothing
+    , _rType = Nothing
+    }
+
+-- | When the 'stringSetValue' type is set, the value of the resource must be
+-- a string type.
+rStringSetValue :: Lens' Resource [Text]
+rStringSetValue = lens _rStringSetValue (\ s a -> s{_rStringSetValue = a}) . _Default . _Coerce;
+
+-- | When the 'integerValue' type is set, the value of the resource must be
+-- an integer.
+rIntegerValue :: Lens' Resource (Maybe Int)
+rIntegerValue = lens _rIntegerValue (\ s a -> s{_rIntegerValue = a});
+
+-- | When the 'doubleValue' type is set, the value of the resource must be a
+-- double precision floating-point type.
+rDoubleValue :: Lens' Resource (Maybe Double)
+rDoubleValue = lens _rDoubleValue (\ s a -> s{_rDoubleValue = a});
+
+-- | When the 'longValue' type is set, the value of the resource must be an
+-- extended precision floating-point type.
+rLongValue :: Lens' Resource (Maybe Integer)
+rLongValue = lens _rLongValue (\ s a -> s{_rLongValue = a});
+
+-- | The name of the resource, such as 'CPU', 'MEMORY', 'PORTS', or a
+-- user-defined resource.
+rName :: Lens' Resource (Maybe Text)
+rName = lens _rName (\ s a -> s{_rName = a});
+
+-- | The type of the resource, such as 'INTEGER', 'DOUBLE', 'LONG', or
+-- 'STRINGSET'.
+rType :: Lens' Resource (Maybe Text)
+rType = lens _rType (\ s a -> s{_rType = a});
+
+instance FromJSON Resource where
+        parseJSON
+          = withObject "Resource"
+              (\ x ->
+                 Resource' <$>
+                   (x .:? "stringSetValue" .!= mempty) <*>
+                     (x .:? "integerValue")
+                     <*> (x .:? "doubleValue")
+                     <*> (x .:? "longValue")
+                     <*> (x .:? "name")
+                     <*> (x .:? "type"))
+
+instance ToJSON Resource where
+        toJSON Resource'{..}
+          = object
+              ["stringSetValue" .= _rStringSetValue,
+               "integerValue" .= _rIntegerValue,
+               "doubleValue" .= _rDoubleValue,
+               "longValue" .= _rLongValue, "name" .= _rName,
+               "type" .= _rType]
+
+-- | Details on an event associated with a service.
+--
+-- /See:/ 'serviceEvent' smart constructor.
+data ServiceEvent = ServiceEvent'
+    { _seCreatedAt :: !(Maybe POSIX)
+    , _seId        :: !(Maybe Text)
+    , _seMessage   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seCreatedAt'
+--
+-- * 'seId'
+--
+-- * 'seMessage'
+serviceEvent
+    :: ServiceEvent
+serviceEvent =
+    ServiceEvent'
+    { _seCreatedAt = Nothing
+    , _seId = Nothing
+    , _seMessage = Nothing
+    }
+
+-- | The Unix time in seconds and milliseconds when the event was triggered.
+seCreatedAt :: Lens' ServiceEvent (Maybe UTCTime)
+seCreatedAt = lens _seCreatedAt (\ s a -> s{_seCreatedAt = a}) . mapping _Time;
+
+-- | The ID string of the event.
+seId :: Lens' ServiceEvent (Maybe Text)
+seId = lens _seId (\ s a -> s{_seId = a});
+
+-- | The event message.
+seMessage :: Lens' ServiceEvent (Maybe Text)
+seMessage = lens _seMessage (\ s a -> s{_seMessage = a});
+
+instance FromJSON ServiceEvent where
+        parseJSON
+          = withObject "ServiceEvent"
+              (\ x ->
+                 ServiceEvent' <$>
+                   (x .:? "createdAt") <*> (x .:? "id") <*>
+                     (x .:? "message"))
+
+-- | Details on a task in a cluster.
+--
+-- /See:/ 'task' smart constructor.
+data Task = Task'
+    { _tDesiredStatus        :: !(Maybe Text)
+    , _tClusterARN           :: !(Maybe Text)
+    , _tOverrides            :: !(Maybe TaskOverride)
+    , _tTaskARN              :: !(Maybe Text)
+    , _tContainerInstanceARN :: !(Maybe Text)
+    , _tLastStatus           :: !(Maybe Text)
+    , _tContainers           :: !(Maybe [Container])
+    , _tStartedBy            :: !(Maybe Text)
+    , _tTaskDefinitionARN    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Task' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tDesiredStatus'
+--
+-- * 'tClusterARN'
+--
+-- * 'tOverrides'
+--
+-- * 'tTaskARN'
+--
+-- * 'tContainerInstanceARN'
+--
+-- * 'tLastStatus'
+--
+-- * 'tContainers'
+--
+-- * 'tStartedBy'
+--
+-- * 'tTaskDefinitionARN'
+task
+    :: Task
+task =
+    Task'
+    { _tDesiredStatus = Nothing
+    , _tClusterARN = Nothing
+    , _tOverrides = Nothing
+    , _tTaskARN = Nothing
+    , _tContainerInstanceARN = Nothing
+    , _tLastStatus = Nothing
+    , _tContainers = Nothing
+    , _tStartedBy = Nothing
+    , _tTaskDefinitionARN = Nothing
+    }
+
+-- | The desired status of the task.
+tDesiredStatus :: Lens' Task (Maybe Text)
+tDesiredStatus = lens _tDesiredStatus (\ s a -> s{_tDesiredStatus = a});
+
+-- | The Amazon Resource Name (ARN) of the of the cluster that hosts the
+-- task.
+tClusterARN :: Lens' Task (Maybe Text)
+tClusterARN = lens _tClusterARN (\ s a -> s{_tClusterARN = a});
+
+-- | One or more container overrides.
+tOverrides :: Lens' Task (Maybe TaskOverride)
+tOverrides = lens _tOverrides (\ s a -> s{_tOverrides = a});
+
+-- | The Amazon Resource Name (ARN) of the task.
+tTaskARN :: Lens' Task (Maybe Text)
+tTaskARN = lens _tTaskARN (\ s a -> s{_tTaskARN = a});
+
+-- | The Amazon Resource Name (ARN) of the container instances that host the
+-- task.
+tContainerInstanceARN :: Lens' Task (Maybe Text)
+tContainerInstanceARN = lens _tContainerInstanceARN (\ s a -> s{_tContainerInstanceARN = a});
+
+-- | The last known status of the task.
+tLastStatus :: Lens' Task (Maybe Text)
+tLastStatus = lens _tLastStatus (\ s a -> s{_tLastStatus = a});
+
+-- | The containers associated with the task.
+tContainers :: Lens' Task [Container]
+tContainers = lens _tContainers (\ s a -> s{_tContainers = a}) . _Default . _Coerce;
+
+-- | The tag specified when a task is started. If the task is started by an
+-- Amazon ECS service, then the 'startedBy' parameter contains the
+-- deployment ID of the service that starts it.
+tStartedBy :: Lens' Task (Maybe Text)
+tStartedBy = lens _tStartedBy (\ s a -> s{_tStartedBy = a});
+
+-- | The Amazon Resource Name (ARN) of the of the task definition that
+-- creates the task.
+tTaskDefinitionARN :: Lens' Task (Maybe Text)
+tTaskDefinitionARN = lens _tTaskDefinitionARN (\ s a -> s{_tTaskDefinitionARN = a});
+
+instance FromJSON Task where
+        parseJSON
+          = withObject "Task"
+              (\ x ->
+                 Task' <$>
+                   (x .:? "desiredStatus") <*> (x .:? "clusterArn") <*>
+                     (x .:? "overrides")
+                     <*> (x .:? "taskArn")
+                     <*> (x .:? "containerInstanceArn")
+                     <*> (x .:? "lastStatus")
+                     <*> (x .:? "containers" .!= mempty)
+                     <*> (x .:? "startedBy")
+                     <*> (x .:? "taskDefinitionArn"))
+
+-- | Details of a task definition.
+--
+-- /See:/ 'taskDefinition' smart constructor.
+data TaskDefinition = TaskDefinition'
+    { _tdStatus               :: !(Maybe TaskDefinitionStatus)
+    , _tdFamily               :: !(Maybe Text)
+    , _tdContainerDefinitions :: !(Maybe [ContainerDefinition])
+    , _tdTaskDefinitionARN    :: !(Maybe Text)
+    , _tdRevision             :: !(Maybe Int)
+    , _tdVolumes              :: !(Maybe [Volume])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TaskDefinition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdStatus'
+--
+-- * 'tdFamily'
+--
+-- * 'tdContainerDefinitions'
+--
+-- * 'tdTaskDefinitionARN'
+--
+-- * 'tdRevision'
+--
+-- * 'tdVolumes'
+taskDefinition
+    :: TaskDefinition
+taskDefinition =
+    TaskDefinition'
+    { _tdStatus = Nothing
+    , _tdFamily = Nothing
+    , _tdContainerDefinitions = Nothing
+    , _tdTaskDefinitionARN = Nothing
+    , _tdRevision = Nothing
+    , _tdVolumes = Nothing
+    }
+
+-- | The status of the task definition.
+tdStatus :: Lens' TaskDefinition (Maybe TaskDefinitionStatus)
+tdStatus = lens _tdStatus (\ s a -> s{_tdStatus = a});
+
+-- | The family of your task definition. You can think of the 'family' as the
+-- name of your task definition.
+tdFamily :: Lens' TaskDefinition (Maybe Text)
+tdFamily = lens _tdFamily (\ s a -> s{_tdFamily = a});
+
+-- | A list of container definitions in JSON format that describe the
+-- different containers that make up your task. For more information on
+-- container definition parameters and defaults, see
+-- <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html Amazon ECS Task Definitions>
+-- in the /Amazon EC2 Container Service Developer Guide/.
+tdContainerDefinitions :: Lens' TaskDefinition [ContainerDefinition]
+tdContainerDefinitions = lens _tdContainerDefinitions (\ s a -> s{_tdContainerDefinitions = a}) . _Default . _Coerce;
+
+-- | The full Amazon Resource Name (ARN) of the of the task definition.
+tdTaskDefinitionARN :: Lens' TaskDefinition (Maybe Text)
+tdTaskDefinitionARN = lens _tdTaskDefinitionARN (\ s a -> s{_tdTaskDefinitionARN = a});
+
+-- | The revision of the task in a particular family. You can think of the
+-- revision as a version number of a task definition in a family. When you
+-- register a task definition for the first time, the revision is '1', and
+-- each time you register a new revision of a task definition in the same
+-- family, the revision value always increases by one (even if you have
+-- deregistered previous revisions in this family).
+tdRevision :: Lens' TaskDefinition (Maybe Int)
+tdRevision = lens _tdRevision (\ s a -> s{_tdRevision = a});
+
+-- | The list of volumes in a task. For more information on volume definition
+-- parameters and defaults, see
+-- <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html Amazon ECS Task Definitions>
+-- in the /Amazon EC2 Container Service Developer Guide/.
+tdVolumes :: Lens' TaskDefinition [Volume]
+tdVolumes = lens _tdVolumes (\ s a -> s{_tdVolumes = a}) . _Default . _Coerce;
+
+instance FromJSON TaskDefinition where
+        parseJSON
+          = withObject "TaskDefinition"
+              (\ x ->
+                 TaskDefinition' <$>
+                   (x .:? "status") <*> (x .:? "family") <*>
+                     (x .:? "containerDefinitions" .!= mempty)
+                     <*> (x .:? "taskDefinitionArn")
+                     <*> (x .:? "revision")
+                     <*> (x .:? "volumes" .!= mempty))
+
+-- | The overrides associated with a task.
+--
+-- /See:/ 'taskOverride' smart constructor.
+newtype TaskOverride = TaskOverride'
+    { _toContainerOverrides :: Maybe [ContainerOverride]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TaskOverride' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'toContainerOverrides'
+taskOverride
+    :: TaskOverride
+taskOverride =
+    TaskOverride'
+    { _toContainerOverrides = Nothing
+    }
+
+-- | One or more container overrides sent to a task.
+toContainerOverrides :: Lens' TaskOverride [ContainerOverride]
+toContainerOverrides = lens _toContainerOverrides (\ s a -> s{_toContainerOverrides = a}) . _Default . _Coerce;
+
+instance FromJSON TaskOverride where
+        parseJSON
+          = withObject "TaskOverride"
+              (\ x ->
+                 TaskOverride' <$>
+                   (x .:? "containerOverrides" .!= mempty))
+
+instance ToJSON TaskOverride where
+        toJSON TaskOverride'{..}
+          = object
+              ["containerOverrides" .= _toContainerOverrides]
+
+-- | The Docker and Amazon ECS container agent version information on a
+-- container instance.
+--
+-- /See:/ 'versionInfo' smart constructor.
+data VersionInfo = VersionInfo'
+    { _viAgentVersion  :: !(Maybe Text)
+    , _viAgentHash     :: !(Maybe Text)
+    , _viDockerVersion :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VersionInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'viAgentVersion'
+--
+-- * 'viAgentHash'
+--
+-- * 'viDockerVersion'
+versionInfo
+    :: VersionInfo
+versionInfo =
+    VersionInfo'
+    { _viAgentVersion = Nothing
+    , _viAgentHash = Nothing
+    , _viDockerVersion = Nothing
+    }
+
+-- | The version number of the Amazon ECS container agent.
+viAgentVersion :: Lens' VersionInfo (Maybe Text)
+viAgentVersion = lens _viAgentVersion (\ s a -> s{_viAgentVersion = a});
+
+-- | The Git commit hash for the Amazon ECS container agent build on the
+-- <https://github.com/aws/amazon-ecs-agent/commits/master amazon-ecs-agent>
+-- GitHub repository.
+viAgentHash :: Lens' VersionInfo (Maybe Text)
+viAgentHash = lens _viAgentHash (\ s a -> s{_viAgentHash = a});
+
+-- | The Docker version running on the container instance.
+viDockerVersion :: Lens' VersionInfo (Maybe Text)
+viDockerVersion = lens _viDockerVersion (\ s a -> s{_viDockerVersion = a});
+
+instance FromJSON VersionInfo where
+        parseJSON
+          = withObject "VersionInfo"
+              (\ x ->
+                 VersionInfo' <$>
+                   (x .:? "agentVersion") <*> (x .:? "agentHash") <*>
+                     (x .:? "dockerVersion"))
+
+instance ToJSON VersionInfo where
+        toJSON VersionInfo'{..}
+          = object
+              ["agentVersion" .= _viAgentVersion,
+               "agentHash" .= _viAgentHash,
+               "dockerVersion" .= _viDockerVersion]
+
+-- | A data volume used in a task definition.
+--
+-- /See:/ 'volume' smart constructor.
+data Volume = Volume'
+    { _vName :: !(Maybe Text)
+    , _vHost :: !(Maybe HostVolumeProperties)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vName'
+--
+-- * 'vHost'
+volume
+    :: Volume
+volume =
+    Volume'
+    { _vName = Nothing
+    , _vHost = Nothing
+    }
+
+-- | The name of the volume. This name is referenced in the 'sourceVolume'
+-- parameter of container definition 'mountPoints'.
+vName :: Lens' Volume (Maybe Text)
+vName = lens _vName (\ s a -> s{_vName = a});
+
+-- | The path on the host container instance that is presented to the
+-- containers which access the volume. If this parameter is empty, then the
+-- Docker daemon assigns a host path for you.
+vHost :: Lens' Volume (Maybe HostVolumeProperties)
+vHost = lens _vHost (\ s a -> s{_vHost = a});
+
+instance FromJSON Volume where
+        parseJSON
+          = withObject "Volume"
+              (\ x ->
+                 Volume' <$> (x .:? "name") <*> (x .:? "host"))
+
+instance ToJSON Volume where
+        toJSON Volume'{..}
+          = object ["name" .= _vName, "host" .= _vHost]
+
+-- | Details on a data volume from another container.
+--
+-- /See:/ 'volumeFrom' smart constructor.
+data VolumeFrom = VolumeFrom'
+    { _vfSourceContainer :: !(Maybe Text)
+    , _vfReadOnly        :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeFrom' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vfSourceContainer'
+--
+-- * 'vfReadOnly'
+volumeFrom
+    :: VolumeFrom
+volumeFrom =
+    VolumeFrom'
+    { _vfSourceContainer = Nothing
+    , _vfReadOnly = Nothing
+    }
+
+-- | The name of the container to mount volumes from.
+vfSourceContainer :: Lens' VolumeFrom (Maybe Text)
+vfSourceContainer = lens _vfSourceContainer (\ s a -> s{_vfSourceContainer = a});
+
+-- | If this value is 'true', the container has read-only access to the
+-- volume. If this value is 'false', then the container can write to the
+-- volume. The default value is 'false'.
+vfReadOnly :: Lens' VolumeFrom (Maybe Bool)
+vfReadOnly = lens _vfReadOnly (\ s a -> s{_vfReadOnly = a});
+
+instance FromJSON VolumeFrom where
+        parseJSON
+          = withObject "VolumeFrom"
+              (\ x ->
+                 VolumeFrom' <$>
+                   (x .:? "sourceContainer") <*> (x .:? "readOnly"))
+
+instance ToJSON VolumeFrom where
+        toJSON VolumeFrom'{..}
+          = object
+              ["sourceContainer" .= _vfSourceContainer,
+               "readOnly" .= _vfReadOnly]
diff --git a/gen/Network/AWS/ECS/Types/Sum.hs b/gen/Network/AWS/ECS/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ECS/Types/Sum.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.ECS.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.ECS.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data AgentUpdateStatus
+    = AUSFailed
+    | AUSPending
+    | AUSStaged
+    | AUSStaging
+    | AUSUpdated
+    | AUSUpdating
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText AgentUpdateStatus where
+    parser = takeLowerText >>= \case
+        "failed" -> pure AUSFailed
+        "pending" -> pure AUSPending
+        "staged" -> pure AUSStaged
+        "staging" -> pure AUSStaging
+        "updated" -> pure AUSUpdated
+        "updating" -> pure AUSUpdating
+        e -> fromTextError $ "Failure parsing AgentUpdateStatus from value: '" <> e
+           <> "'. Accepted values: failed, pending, staged, staging, updated, updating"
+
+instance ToText AgentUpdateStatus where
+    toText = \case
+        AUSFailed -> "failed"
+        AUSPending -> "pending"
+        AUSStaged -> "staged"
+        AUSStaging -> "staging"
+        AUSUpdated -> "updated"
+        AUSUpdating -> "updating"
+
+instance Hashable     AgentUpdateStatus
+instance ToByteString AgentUpdateStatus
+instance ToQuery      AgentUpdateStatus
+instance ToHeader     AgentUpdateStatus
+
+instance FromJSON AgentUpdateStatus where
+    parseJSON = parseJSONText "AgentUpdateStatus"
+
+data DesiredStatus
+    = Pending
+    | Running
+    | Stopped
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText DesiredStatus where
+    parser = takeLowerText >>= \case
+        "pending" -> pure Pending
+        "running" -> pure Running
+        "stopped" -> pure Stopped
+        e -> fromTextError $ "Failure parsing DesiredStatus from value: '" <> e
+           <> "'. Accepted values: pending, running, stopped"
+
+instance ToText DesiredStatus where
+    toText = \case
+        Pending -> "pending"
+        Running -> "running"
+        Stopped -> "stopped"
+
+instance Hashable     DesiredStatus
+instance ToByteString DesiredStatus
+instance ToQuery      DesiredStatus
+instance ToHeader     DesiredStatus
+
+instance ToJSON DesiredStatus where
+    toJSON = toJSONText
+
+data SortOrder
+    = Asc
+    | Desc
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText SortOrder where
+    parser = takeLowerText >>= \case
+        "asc" -> pure Asc
+        "desc" -> pure Desc
+        e -> fromTextError $ "Failure parsing SortOrder from value: '" <> e
+           <> "'. Accepted values: asc, desc"
+
+instance ToText SortOrder where
+    toText = \case
+        Asc -> "asc"
+        Desc -> "desc"
+
+instance Hashable     SortOrder
+instance ToByteString SortOrder
+instance ToQuery      SortOrder
+instance ToHeader     SortOrder
+
+instance ToJSON SortOrder where
+    toJSON = toJSONText
+
+data TaskDefinitionStatus
+    = Active
+    | Inactive
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText TaskDefinitionStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "inactive" -> pure Inactive
+        e -> fromTextError $ "Failure parsing TaskDefinitionStatus from value: '" <> e
+           <> "'. Accepted values: active, inactive"
+
+instance ToText TaskDefinitionStatus where
+    toText = \case
+        Active -> "active"
+        Inactive -> "inactive"
+
+instance Hashable     TaskDefinitionStatus
+instance ToByteString TaskDefinitionStatus
+instance ToQuery      TaskDefinitionStatus
+instance ToHeader     TaskDefinitionStatus
+
+instance ToJSON TaskDefinitionStatus where
+    toJSON = toJSONText
+
+instance FromJSON TaskDefinitionStatus where
+    parseJSON = parseJSONText "TaskDefinitionStatus"
+
+data TransportProtocol
+    = TCP
+    | Udp
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText TransportProtocol where
+    parser = takeLowerText >>= \case
+        "tcp" -> pure TCP
+        "udp" -> pure Udp
+        e -> fromTextError $ "Failure parsing TransportProtocol from value: '" <> e
+           <> "'. Accepted values: tcp, udp"
+
+instance ToText TransportProtocol where
+    toText = \case
+        TCP -> "tcp"
+        Udp -> "udp"
+
+instance Hashable     TransportProtocol
+instance ToByteString TransportProtocol
+instance ToQuery      TransportProtocol
+instance ToHeader     TransportProtocol
+
+instance ToJSON TransportProtocol where
+    toJSON = toJSONText
+
+instance FromJSON TransportProtocol where
+    parseJSON = parseJSONText "TransportProtocol"
diff --git a/gen/Network/AWS/ECS/UpdateContainerAgent.hs b/gen/Network/AWS/ECS/UpdateContainerAgent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ECS/UpdateContainerAgent.hs
@@ -0,0 +1,153 @@
+{-# 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.ECS.UpdateContainerAgent
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the Amazon ECS container agent on a specified container
+-- instance. Updating the Amazon ECS container agent does not interrupt
+-- running tasks or services on the container instance. The process for
+-- updating the agent differs depending on whether your container instance
+-- was launched with the Amazon ECS-optimized AMI or another operating
+-- system.
+--
+-- 'UpdateContainerAgent' requires the Amazon ECS-optimized AMI or Amazon
+-- Linux with the 'ecs-init' service installed and running. For help
+-- updating the Amazon ECS container agent on other operating systems, see
+-- <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html#manually_update_agent Manually Updating the Amazon ECS Container Agent>
+-- in the /Amazon EC2 Container Service Developer Guide/.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateContainerAgent.html AWS API Reference> for UpdateContainerAgent.
+module Network.AWS.ECS.UpdateContainerAgent
+    (
+    -- * Creating a Request
+      updateContainerAgent
+    , UpdateContainerAgent
+    -- * Request Lenses
+    , ucaCluster
+    , ucaContainerInstance
+
+    -- * Destructuring the Response
+    , updateContainerAgentResponse
+    , UpdateContainerAgentResponse
+    -- * Response Lenses
+    , ucarsContainerInstance
+    , ucarsStatus
+    ) where
+
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'updateContainerAgent' smart constructor.
+data UpdateContainerAgent = UpdateContainerAgent'
+    { _ucaCluster           :: !(Maybe Text)
+    , _ucaContainerInstance :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateContainerAgent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucaCluster'
+--
+-- * 'ucaContainerInstance'
+updateContainerAgent
+    :: Text -- ^ 'ucaContainerInstance'
+    -> UpdateContainerAgent
+updateContainerAgent pContainerInstance_ =
+    UpdateContainerAgent'
+    { _ucaCluster = Nothing
+    , _ucaContainerInstance = pContainerInstance_
+    }
+
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- your container instance is running on. If you do not specify a cluster,
+-- the default cluster is assumed.
+ucaCluster :: Lens' UpdateContainerAgent (Maybe Text)
+ucaCluster = lens _ucaCluster (\ s a -> s{_ucaCluster = a});
+
+-- | The container instance UUID or full Amazon Resource Name (ARN) entries
+-- for the container instance on which you would like to update the Amazon
+-- ECS container agent.
+ucaContainerInstance :: Lens' UpdateContainerAgent Text
+ucaContainerInstance = lens _ucaContainerInstance (\ s a -> s{_ucaContainerInstance = a});
+
+instance AWSRequest UpdateContainerAgent where
+        type Sv UpdateContainerAgent = ECS
+        type Rs UpdateContainerAgent =
+             UpdateContainerAgentResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateContainerAgentResponse' <$>
+                   (x .?> "containerInstance") <*> (pure (fromEnum s)))
+
+instance ToHeaders UpdateContainerAgent where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.UpdateContainerAgent"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateContainerAgent where
+        toJSON UpdateContainerAgent'{..}
+          = object
+              ["cluster" .= _ucaCluster,
+               "containerInstance" .= _ucaContainerInstance]
+
+instance ToPath UpdateContainerAgent where
+        toPath = const "/"
+
+instance ToQuery UpdateContainerAgent where
+        toQuery = const mempty
+
+-- | /See:/ 'updateContainerAgentResponse' smart constructor.
+data UpdateContainerAgentResponse = UpdateContainerAgentResponse'
+    { _ucarsContainerInstance :: !(Maybe ContainerInstance)
+    , _ucarsStatus            :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateContainerAgentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucarsContainerInstance'
+--
+-- * 'ucarsStatus'
+updateContainerAgentResponse
+    :: Int -- ^ 'ucarsStatus'
+    -> UpdateContainerAgentResponse
+updateContainerAgentResponse pStatus_ =
+    UpdateContainerAgentResponse'
+    { _ucarsContainerInstance = Nothing
+    , _ucarsStatus = pStatus_
+    }
+
+-- | Undocumented member.
+ucarsContainerInstance :: Lens' UpdateContainerAgentResponse (Maybe ContainerInstance)
+ucarsContainerInstance = lens _ucarsContainerInstance (\ s a -> s{_ucarsContainerInstance = a});
+
+-- | The response status code.
+ucarsStatus :: Lens' UpdateContainerAgentResponse Int
+ucarsStatus = lens _ucarsStatus (\ s a -> s{_ucarsStatus = a});
diff --git a/gen/Network/AWS/ECS/UpdateService.hs b/gen/Network/AWS/ECS/UpdateService.hs
--- a/gen/Network/AWS/ECS/UpdateService.hs
+++ b/gen/Network/AWS/ECS/UpdateService.hs
@@ -1,164 +1,180 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.ECS.UpdateService
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Modify the desired count or task definition used in a service.
+-- Modify the desired count or task definition used in a service.
 --
 -- You can add to or subtract from the number of instantiations of a task
--- definition in a service by specifying the cluster that the service is running
--- in and a new 'desiredCount' parameter.
+-- definition in a service by specifying the cluster that the service is
+-- running in and a new 'desiredCount' parameter.
 --
--- You can use 'UpdateService' to modify your task definition and deploy a new
--- version of your service, one task at a time. If you modify the task
--- definition with 'UpdateService', Amazon ECS spawns a task with the new version
--- of the task definition and then stops an old task after the new version is
--- running. Because 'UpdateService' starts a new version of the task before
--- stopping an old version, your cluster must have capacity to support one more
--- instantiation of the task when 'UpdateService' is run. If your cluster cannot
--- support another instantiation of the task used in your service, you can
--- reduce the desired count of your service by one before modifying the task
--- definition.
+-- You can use 'UpdateService' to modify your task definition and deploy a
+-- new version of your service, one task at a time. If you modify the task
+-- definition with 'UpdateService', Amazon ECS spawns a task with the new
+-- version of the task definition and then stops an old task after the new
+-- version is running. Because 'UpdateService' starts a new version of the
+-- task before stopping an old version, your cluster must have capacity to
+-- support one more instantiation of the task when 'UpdateService' is run.
+-- If your cluster cannot support another instantiation of the task used in
+-- your service, you can reduce the desired count of your service by one
+-- before modifying the task definition.
 --
--- <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html AWS API Reference> for UpdateService.
 module Network.AWS.ECS.UpdateService
     (
-    -- * Request
-      UpdateService
-    -- ** Request constructor
-    , updateService
-    -- ** Request lenses
+    -- * Creating a Request
+      updateService
+    , UpdateService
+    -- * Request Lenses
     , usCluster
     , usDesiredCount
-    , usService
     , usTaskDefinition
+    , usService
 
-    -- * Response
-    , UpdateServiceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateServiceResponse
-    -- ** Response lenses
-    , usrService
+    , UpdateServiceResponse
+    -- * Response Lenses
+    , usrsService
+    , usrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.JSON
-import Network.AWS.ECS.Types
-import qualified GHC.Exts
+import           Network.AWS.ECS.Types
+import           Network.AWS.ECS.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data UpdateService = UpdateService
-    { _usCluster        :: Maybe Text
-    , _usDesiredCount   :: Maybe Int
-    , _usService        :: Text
-    , _usTaskDefinition :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'updateService' smart constructor.
+data UpdateService = UpdateService'
+    { _usCluster        :: !(Maybe Text)
+    , _usDesiredCount   :: !(Maybe Int)
+    , _usTaskDefinition :: !(Maybe Text)
+    , _usService        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'UpdateService' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'UpdateService' with the minimum fields required to make a request.
 --
--- * 'usCluster' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'usDesiredCount' @::@ 'Maybe' 'Int'
+-- * 'usCluster'
 --
--- * 'usService' @::@ 'Text'
+-- * 'usDesiredCount'
 --
--- * 'usTaskDefinition' @::@ 'Maybe' 'Text'
+-- * 'usTaskDefinition'
 --
-updateService :: Text -- ^ 'usService'
-              -> UpdateService
-updateService p1 = UpdateService
-    { _usService        = p1
-    , _usCluster        = Nothing
-    , _usDesiredCount   = Nothing
+-- * 'usService'
+updateService
+    :: Text -- ^ 'usService'
+    -> UpdateService
+updateService pService_ =
+    UpdateService'
+    { _usCluster = Nothing
+    , _usDesiredCount = Nothing
     , _usTaskDefinition = Nothing
+    , _usService = pService_
     }
 
--- | The short name or full Amazon Resource Name (ARN) of the cluster that your
--- service is running on. If you do not specify a cluster, the default cluster
--- is assumed.
+-- | The short name or full Amazon Resource Name (ARN) of the cluster that
+-- your service is running on. If you do not specify a cluster, the default
+-- cluster is assumed.
 usCluster :: Lens' UpdateService (Maybe Text)
-usCluster = lens _usCluster (\s a -> s { _usCluster = a })
+usCluster = lens _usCluster (\ s a -> s{_usCluster = a});
 
--- | The number of instantiations of the task that you would like to place and
--- keep running in your service.
+-- | The number of instantiations of the task that you would like to place
+-- and keep running in your service.
 usDesiredCount :: Lens' UpdateService (Maybe Int)
-usDesiredCount = lens _usDesiredCount (\s a -> s { _usDesiredCount = a })
+usDesiredCount = lens _usDesiredCount (\ s a -> s{_usDesiredCount = a});
 
+-- | The 'family' and 'revision' ('family:revision') or full Amazon Resource
+-- Name (ARN) of the task definition that you want to run in your service.
+-- If a 'revision' is not specified, the latest 'ACTIVE' revision is used.
+-- If you modify the task definition with 'UpdateService', Amazon ECS
+-- spawns a task with the new version of the task definition and then stops
+-- an old task after the new version is running.
+usTaskDefinition :: Lens' UpdateService (Maybe Text)
+usTaskDefinition = lens _usTaskDefinition (\ s a -> s{_usTaskDefinition = a});
+
 -- | The name of the service that you want to update.
 usService :: Lens' UpdateService Text
-usService = lens _usService (\s a -> s { _usService = a })
-
--- | The 'family' and 'revision' ('family:revision') or full Amazon Resource Name (ARN)
--- of the task definition that you want to run in your service. If you modify
--- the task definition with 'UpdateService', Amazon ECS spawns a task with the new
--- version of the task definition and then stops an old task after the new
--- version is running.
-usTaskDefinition :: Lens' UpdateService (Maybe Text)
-usTaskDefinition = lens _usTaskDefinition (\s a -> s { _usTaskDefinition = a })
+usService = lens _usService (\ s a -> s{_usService = a});
 
-newtype UpdateServiceResponse = UpdateServiceResponse
-    { _usrService :: Maybe ContainerService
-    } deriving (Eq, Read, Show)
+instance AWSRequest UpdateService where
+        type Sv UpdateService = ECS
+        type Rs UpdateService = UpdateServiceResponse
+        request = postJSON
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateServiceResponse' <$>
+                   (x .?> "service") <*> (pure (fromEnum s)))
 
--- | 'UpdateServiceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'usrService' @::@ 'Maybe' 'ContainerService'
---
-updateServiceResponse :: UpdateServiceResponse
-updateServiceResponse = UpdateServiceResponse
-    { _usrService = Nothing
-    }
+instance ToHeaders UpdateService where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonEC2ContainerServiceV20141113.UpdateService"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | The full description of your service following the update call.
-usrService :: Lens' UpdateServiceResponse (Maybe ContainerService)
-usrService = lens _usrService (\s a -> s { _usrService = a })
+instance ToJSON UpdateService where
+        toJSON UpdateService'{..}
+          = object
+              ["cluster" .= _usCluster,
+               "desiredCount" .= _usDesiredCount,
+               "taskDefinition" .= _usTaskDefinition,
+               "service" .= _usService]
 
 instance ToPath UpdateService where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery UpdateService where
-    toQuery = const mempty
-
-instance ToHeaders UpdateService
+        toQuery = const mempty
 
-instance ToJSON UpdateService where
-    toJSON UpdateService{..} = object
-        [ "cluster"        .= _usCluster
-        , "service"        .= _usService
-        , "desiredCount"   .= _usDesiredCount
-        , "taskDefinition" .= _usTaskDefinition
-        ]
+-- | /See:/ 'updateServiceResponse' smart constructor.
+data UpdateServiceResponse = UpdateServiceResponse'
+    { _usrsService :: !(Maybe ContainerService)
+    , _usrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest UpdateService where
-    type Sv UpdateService = ECS
-    type Rs UpdateService = UpdateServiceResponse
+-- | Creates a value of 'UpdateServiceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usrsService'
+--
+-- * 'usrsStatus'
+updateServiceResponse
+    :: Int -- ^ 'usrsStatus'
+    -> UpdateServiceResponse
+updateServiceResponse pStatus_ =
+    UpdateServiceResponse'
+    { _usrsService = Nothing
+    , _usrsStatus = pStatus_
+    }
 
-    request  = post "UpdateService"
-    response = jsonResponse
+-- | The full description of your service following the update call.
+usrsService :: Lens' UpdateServiceResponse (Maybe ContainerService)
+usrsService = lens _usrsService (\ s a -> s{_usrsService = a});
 
-instance FromJSON UpdateServiceResponse where
-    parseJSON = withObject "UpdateServiceResponse" $ \o -> UpdateServiceResponse
-        <$> o .:? "service"
+-- | The response status code.
+usrsStatus :: Lens' UpdateServiceResponse Int
+usrsStatus = lens _usrsStatus (\ s a -> s{_usrsStatus = a});
diff --git a/gen/Network/AWS/ECS/Waiters.hs b/gen/Network/AWS/ECS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ECS/Waiters.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.ECS.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.ECS.Waiters where
+
+import           Network.AWS.ECS.DescribeServices
+import           Network.AWS.ECS.DescribeTasks
+import           Network.AWS.ECS.DescribeTasks
+import           Network.AWS.ECS.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
+
+-- | Polls 'Network.AWS.ECS.DescribeServices' every 15 seconds until a
+-- successful state is reached. An error is returned after 40 failed checks.
+servicesInactive :: Wait DescribeServices
+servicesInactive =
+    Wait
+    { _waitName = "ServicesInactive"
+    , _waitAttempts = 40
+    , _waitDelay = 15
+    , _waitAcceptors = [ matchAny
+                             "MISSING"
+                             AcceptFailure
+                             (folding (concatOf dssrsFailures) .
+                              fReason . _Just . to toTextCI)
+                       , matchAny
+                             "INACTIVE"
+                             AcceptSuccess
+                             (folding (concatOf dssrsServices) .
+                              csStatus . _Just . to toTextCI)]
+    }
+
+-- | Polls 'Network.AWS.ECS.DescribeTasks' every 6 seconds until a
+-- successful state is reached. An error is returned after 100 failed checks.
+tasksRunning :: Wait DescribeTasks
+tasksRunning =
+    Wait
+    { _waitName = "TasksRunning"
+    , _waitAttempts = 100
+    , _waitDelay = 6
+    , _waitAcceptors = [ matchAny
+                             "STOPPED"
+                             AcceptFailure
+                             (folding (concatOf dtrsTasks) .
+                              tLastStatus . _Just . to toTextCI)
+                       , matchAny
+                             "MISSING"
+                             AcceptFailure
+                             (folding (concatOf dtrsFailures) .
+                              fReason . _Just . to toTextCI)
+                       , matchAll
+                             "RUNNING"
+                             AcceptSuccess
+                             (folding (concatOf dtrsTasks) .
+                              tLastStatus . _Just . to toTextCI)]
+    }
+
+-- | Polls 'Network.AWS.ECS.DescribeTasks' every 6 seconds until a
+-- successful state is reached. An error is returned after 100 failed checks.
+tasksStopped :: Wait DescribeTasks
+tasksStopped =
+    Wait
+    { _waitName = "TasksStopped"
+    , _waitAttempts = 100
+    , _waitDelay = 6
+    , _waitAcceptors = [ matchAll
+                             "STOPPED"
+                             AcceptSuccess
+                             (folding (concatOf dtrsTasks) .
+                              tLastStatus . _Just . to toTextCI)]
+    }
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.ECS
+import Test.AWS.ECS.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "ECS"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/ECS.hs b/test/Test/AWS/ECS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/ECS.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.ECS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.ECS
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.ECS
+import           Test.AWS.Gen.ECS
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/ECS/Internal.hs b/test/Test/AWS/ECS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/ECS/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.ECS.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.ECS.Internal where
+
+import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/ECS.hs b/test/Test/AWS/Gen/ECS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/ECS.hs
@@ -0,0 +1,498 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.ECS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.ECS where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.ECS
+import Test.AWS.ECS.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.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testListServices $
+--             listServices
+--
+--         , testDescribeClusters $
+--             describeClusters
+--
+--         , testDeleteService $
+--             deleteService
+--
+--         , testUpdateService $
+--             updateService
+--
+--         , testDiscoverPollEndpoint $
+--             discoverPollEndpoint
+--
+--         , testSubmitContainerStateChange $
+--             submitContainerStateChange
+--
+--         , testStopTask $
+--             stopTask
+--
+--         , testDescribeTaskDefinition $
+--             describeTaskDefinition
+--
+--         , testSubmitTaskStateChange $
+--             submitTaskStateChange
+--
+--         , testDescribeContainerInstances $
+--             describeContainerInstances
+--
+--         , testDeleteCluster $
+--             deleteCluster
+--
+--         , testCreateCluster $
+--             createCluster
+--
+--         , testListTaskDefinitions $
+--             listTaskDefinitions
+--
+--         , testListTasks $
+--             listTasks
+--
+--         , testRunTask $
+--             runTask
+--
+--         , testListContainerInstances $
+--             listContainerInstances
+--
+--         , testRegisterContainerInstance $
+--             registerContainerInstance
+--
+--         , testUpdateContainerAgent $
+--             updateContainerAgent
+--
+--         , testListTaskDefinitionFamilies $
+--             listTaskDefinitionFamilies
+--
+--         , testStartTask $
+--             startTask
+--
+--         , testDeregisterTaskDefinition $
+--             deregisterTaskDefinition
+--
+--         , testDescribeTasks $
+--             describeTasks
+--
+--         , testListClusters $
+--             listClusters
+--
+--         , testDescribeServices $
+--             describeServices
+--
+--         , testDeregisterContainerInstance $
+--             deregisterContainerInstance
+--
+--         , testRegisterTaskDefinition $
+--             registerTaskDefinition
+--
+--         , testCreateService $
+--             createService
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testListServicesResponse $
+--             listServicesResponse
+--
+--         , testDescribeClustersResponse $
+--             describeClustersResponse
+--
+--         , testDeleteServiceResponse $
+--             deleteServiceResponse
+--
+--         , testUpdateServiceResponse $
+--             updateServiceResponse
+--
+--         , testDiscoverPollEndpointResponse $
+--             discoverPollEndpointResponse
+--
+--         , testSubmitContainerStateChangeResponse $
+--             submitContainerStateChangeResponse
+--
+--         , testStopTaskResponse $
+--             stopTaskResponse
+--
+--         , testDescribeTaskDefinitionResponse $
+--             describeTaskDefinitionResponse
+--
+--         , testSubmitTaskStateChangeResponse $
+--             submitTaskStateChangeResponse
+--
+--         , testDescribeContainerInstancesResponse $
+--             describeContainerInstancesResponse
+--
+--         , testDeleteClusterResponse $
+--             deleteClusterResponse
+--
+--         , testCreateClusterResponse $
+--             createClusterResponse
+--
+--         , testListTaskDefinitionsResponse $
+--             listTaskDefinitionsResponse
+--
+--         , testListTasksResponse $
+--             listTasksResponse
+--
+--         , testRunTaskResponse $
+--             runTaskResponse
+--
+--         , testListContainerInstancesResponse $
+--             listContainerInstancesResponse
+--
+--         , testRegisterContainerInstanceResponse $
+--             registerContainerInstanceResponse
+--
+--         , testUpdateContainerAgentResponse $
+--             updateContainerAgentResponse
+--
+--         , testListTaskDefinitionFamiliesResponse $
+--             listTaskDefinitionFamiliesResponse
+--
+--         , testStartTaskResponse $
+--             startTaskResponse
+--
+--         , testDeregisterTaskDefinitionResponse $
+--             deregisterTaskDefinitionResponse
+--
+--         , testDescribeTasksResponse $
+--             describeTasksResponse
+--
+--         , testListClustersResponse $
+--             listClustersResponse
+--
+--         , testDescribeServicesResponse $
+--             describeServicesResponse
+--
+--         , testDeregisterContainerInstanceResponse $
+--             deregisterContainerInstanceResponse
+--
+--         , testRegisterTaskDefinitionResponse $
+--             registerTaskDefinitionResponse
+--
+--         , testCreateServiceResponse $
+--             createServiceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testListServices :: ListServices -> TestTree
+testListServices = req
+    "ListServices"
+    "fixture/ListServices"
+
+testDescribeClusters :: DescribeClusters -> TestTree
+testDescribeClusters = req
+    "DescribeClusters"
+    "fixture/DescribeClusters"
+
+testDeleteService :: DeleteService -> TestTree
+testDeleteService = req
+    "DeleteService"
+    "fixture/DeleteService"
+
+testUpdateService :: UpdateService -> TestTree
+testUpdateService = req
+    "UpdateService"
+    "fixture/UpdateService"
+
+testDiscoverPollEndpoint :: DiscoverPollEndpoint -> TestTree
+testDiscoverPollEndpoint = req
+    "DiscoverPollEndpoint"
+    "fixture/DiscoverPollEndpoint"
+
+testSubmitContainerStateChange :: SubmitContainerStateChange -> TestTree
+testSubmitContainerStateChange = req
+    "SubmitContainerStateChange"
+    "fixture/SubmitContainerStateChange"
+
+testStopTask :: StopTask -> TestTree
+testStopTask = req
+    "StopTask"
+    "fixture/StopTask"
+
+testDescribeTaskDefinition :: DescribeTaskDefinition -> TestTree
+testDescribeTaskDefinition = req
+    "DescribeTaskDefinition"
+    "fixture/DescribeTaskDefinition"
+
+testSubmitTaskStateChange :: SubmitTaskStateChange -> TestTree
+testSubmitTaskStateChange = req
+    "SubmitTaskStateChange"
+    "fixture/SubmitTaskStateChange"
+
+testDescribeContainerInstances :: DescribeContainerInstances -> TestTree
+testDescribeContainerInstances = req
+    "DescribeContainerInstances"
+    "fixture/DescribeContainerInstances"
+
+testDeleteCluster :: DeleteCluster -> TestTree
+testDeleteCluster = req
+    "DeleteCluster"
+    "fixture/DeleteCluster"
+
+testCreateCluster :: CreateCluster -> TestTree
+testCreateCluster = req
+    "CreateCluster"
+    "fixture/CreateCluster"
+
+testListTaskDefinitions :: ListTaskDefinitions -> TestTree
+testListTaskDefinitions = req
+    "ListTaskDefinitions"
+    "fixture/ListTaskDefinitions"
+
+testListTasks :: ListTasks -> TestTree
+testListTasks = req
+    "ListTasks"
+    "fixture/ListTasks"
+
+testRunTask :: RunTask -> TestTree
+testRunTask = req
+    "RunTask"
+    "fixture/RunTask"
+
+testListContainerInstances :: ListContainerInstances -> TestTree
+testListContainerInstances = req
+    "ListContainerInstances"
+    "fixture/ListContainerInstances"
+
+testRegisterContainerInstance :: RegisterContainerInstance -> TestTree
+testRegisterContainerInstance = req
+    "RegisterContainerInstance"
+    "fixture/RegisterContainerInstance"
+
+testUpdateContainerAgent :: UpdateContainerAgent -> TestTree
+testUpdateContainerAgent = req
+    "UpdateContainerAgent"
+    "fixture/UpdateContainerAgent"
+
+testListTaskDefinitionFamilies :: ListTaskDefinitionFamilies -> TestTree
+testListTaskDefinitionFamilies = req
+    "ListTaskDefinitionFamilies"
+    "fixture/ListTaskDefinitionFamilies"
+
+testStartTask :: StartTask -> TestTree
+testStartTask = req
+    "StartTask"
+    "fixture/StartTask"
+
+testDeregisterTaskDefinition :: DeregisterTaskDefinition -> TestTree
+testDeregisterTaskDefinition = req
+    "DeregisterTaskDefinition"
+    "fixture/DeregisterTaskDefinition"
+
+testDescribeTasks :: DescribeTasks -> TestTree
+testDescribeTasks = req
+    "DescribeTasks"
+    "fixture/DescribeTasks"
+
+testListClusters :: ListClusters -> TestTree
+testListClusters = req
+    "ListClusters"
+    "fixture/ListClusters"
+
+testDescribeServices :: DescribeServices -> TestTree
+testDescribeServices = req
+    "DescribeServices"
+    "fixture/DescribeServices"
+
+testDeregisterContainerInstance :: DeregisterContainerInstance -> TestTree
+testDeregisterContainerInstance = req
+    "DeregisterContainerInstance"
+    "fixture/DeregisterContainerInstance"
+
+testRegisterTaskDefinition :: RegisterTaskDefinition -> TestTree
+testRegisterTaskDefinition = req
+    "RegisterTaskDefinition"
+    "fixture/RegisterTaskDefinition"
+
+testCreateService :: CreateService -> TestTree
+testCreateService = req
+    "CreateService"
+    "fixture/CreateService"
+
+-- Responses
+
+testListServicesResponse :: ListServicesResponse -> TestTree
+testListServicesResponse = res
+    "ListServicesResponse"
+    "fixture/ListServicesResponse"
+    (Proxy :: Proxy ListServices)
+
+testDescribeClustersResponse :: DescribeClustersResponse -> TestTree
+testDescribeClustersResponse = res
+    "DescribeClustersResponse"
+    "fixture/DescribeClustersResponse"
+    (Proxy :: Proxy DescribeClusters)
+
+testDeleteServiceResponse :: DeleteServiceResponse -> TestTree
+testDeleteServiceResponse = res
+    "DeleteServiceResponse"
+    "fixture/DeleteServiceResponse"
+    (Proxy :: Proxy DeleteService)
+
+testUpdateServiceResponse :: UpdateServiceResponse -> TestTree
+testUpdateServiceResponse = res
+    "UpdateServiceResponse"
+    "fixture/UpdateServiceResponse"
+    (Proxy :: Proxy UpdateService)
+
+testDiscoverPollEndpointResponse :: DiscoverPollEndpointResponse -> TestTree
+testDiscoverPollEndpointResponse = res
+    "DiscoverPollEndpointResponse"
+    "fixture/DiscoverPollEndpointResponse"
+    (Proxy :: Proxy DiscoverPollEndpoint)
+
+testSubmitContainerStateChangeResponse :: SubmitContainerStateChangeResponse -> TestTree
+testSubmitContainerStateChangeResponse = res
+    "SubmitContainerStateChangeResponse"
+    "fixture/SubmitContainerStateChangeResponse"
+    (Proxy :: Proxy SubmitContainerStateChange)
+
+testStopTaskResponse :: StopTaskResponse -> TestTree
+testStopTaskResponse = res
+    "StopTaskResponse"
+    "fixture/StopTaskResponse"
+    (Proxy :: Proxy StopTask)
+
+testDescribeTaskDefinitionResponse :: DescribeTaskDefinitionResponse -> TestTree
+testDescribeTaskDefinitionResponse = res
+    "DescribeTaskDefinitionResponse"
+    "fixture/DescribeTaskDefinitionResponse"
+    (Proxy :: Proxy DescribeTaskDefinition)
+
+testSubmitTaskStateChangeResponse :: SubmitTaskStateChangeResponse -> TestTree
+testSubmitTaskStateChangeResponse = res
+    "SubmitTaskStateChangeResponse"
+    "fixture/SubmitTaskStateChangeResponse"
+    (Proxy :: Proxy SubmitTaskStateChange)
+
+testDescribeContainerInstancesResponse :: DescribeContainerInstancesResponse -> TestTree
+testDescribeContainerInstancesResponse = res
+    "DescribeContainerInstancesResponse"
+    "fixture/DescribeContainerInstancesResponse"
+    (Proxy :: Proxy DescribeContainerInstances)
+
+testDeleteClusterResponse :: DeleteClusterResponse -> TestTree
+testDeleteClusterResponse = res
+    "DeleteClusterResponse"
+    "fixture/DeleteClusterResponse"
+    (Proxy :: Proxy DeleteCluster)
+
+testCreateClusterResponse :: CreateClusterResponse -> TestTree
+testCreateClusterResponse = res
+    "CreateClusterResponse"
+    "fixture/CreateClusterResponse"
+    (Proxy :: Proxy CreateCluster)
+
+testListTaskDefinitionsResponse :: ListTaskDefinitionsResponse -> TestTree
+testListTaskDefinitionsResponse = res
+    "ListTaskDefinitionsResponse"
+    "fixture/ListTaskDefinitionsResponse"
+    (Proxy :: Proxy ListTaskDefinitions)
+
+testListTasksResponse :: ListTasksResponse -> TestTree
+testListTasksResponse = res
+    "ListTasksResponse"
+    "fixture/ListTasksResponse"
+    (Proxy :: Proxy ListTasks)
+
+testRunTaskResponse :: RunTaskResponse -> TestTree
+testRunTaskResponse = res
+    "RunTaskResponse"
+    "fixture/RunTaskResponse"
+    (Proxy :: Proxy RunTask)
+
+testListContainerInstancesResponse :: ListContainerInstancesResponse -> TestTree
+testListContainerInstancesResponse = res
+    "ListContainerInstancesResponse"
+    "fixture/ListContainerInstancesResponse"
+    (Proxy :: Proxy ListContainerInstances)
+
+testRegisterContainerInstanceResponse :: RegisterContainerInstanceResponse -> TestTree
+testRegisterContainerInstanceResponse = res
+    "RegisterContainerInstanceResponse"
+    "fixture/RegisterContainerInstanceResponse"
+    (Proxy :: Proxy RegisterContainerInstance)
+
+testUpdateContainerAgentResponse :: UpdateContainerAgentResponse -> TestTree
+testUpdateContainerAgentResponse = res
+    "UpdateContainerAgentResponse"
+    "fixture/UpdateContainerAgentResponse"
+    (Proxy :: Proxy UpdateContainerAgent)
+
+testListTaskDefinitionFamiliesResponse :: ListTaskDefinitionFamiliesResponse -> TestTree
+testListTaskDefinitionFamiliesResponse = res
+    "ListTaskDefinitionFamiliesResponse"
+    "fixture/ListTaskDefinitionFamiliesResponse"
+    (Proxy :: Proxy ListTaskDefinitionFamilies)
+
+testStartTaskResponse :: StartTaskResponse -> TestTree
+testStartTaskResponse = res
+    "StartTaskResponse"
+    "fixture/StartTaskResponse"
+    (Proxy :: Proxy StartTask)
+
+testDeregisterTaskDefinitionResponse :: DeregisterTaskDefinitionResponse -> TestTree
+testDeregisterTaskDefinitionResponse = res
+    "DeregisterTaskDefinitionResponse"
+    "fixture/DeregisterTaskDefinitionResponse"
+    (Proxy :: Proxy DeregisterTaskDefinition)
+
+testDescribeTasksResponse :: DescribeTasksResponse -> TestTree
+testDescribeTasksResponse = res
+    "DescribeTasksResponse"
+    "fixture/DescribeTasksResponse"
+    (Proxy :: Proxy DescribeTasks)
+
+testListClustersResponse :: ListClustersResponse -> TestTree
+testListClustersResponse = res
+    "ListClustersResponse"
+    "fixture/ListClustersResponse"
+    (Proxy :: Proxy ListClusters)
+
+testDescribeServicesResponse :: DescribeServicesResponse -> TestTree
+testDescribeServicesResponse = res
+    "DescribeServicesResponse"
+    "fixture/DescribeServicesResponse"
+    (Proxy :: Proxy DescribeServices)
+
+testDeregisterContainerInstanceResponse :: DeregisterContainerInstanceResponse -> TestTree
+testDeregisterContainerInstanceResponse = res
+    "DeregisterContainerInstanceResponse"
+    "fixture/DeregisterContainerInstanceResponse"
+    (Proxy :: Proxy DeregisterContainerInstance)
+
+testRegisterTaskDefinitionResponse :: RegisterTaskDefinitionResponse -> TestTree
+testRegisterTaskDefinitionResponse = res
+    "RegisterTaskDefinitionResponse"
+    "fixture/RegisterTaskDefinitionResponse"
+    (Proxy :: Proxy RegisterTaskDefinition)
+
+testCreateServiceResponse :: CreateServiceResponse -> TestTree
+testCreateServiceResponse = res
+    "CreateServiceResponse"
+    "fixture/CreateServiceResponse"
+    (Proxy :: Proxy CreateService)
