diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,18 +8,18 @@
 
 ## Version
 
-`1.3.3.1`
+`1.3.4`
 
 
 ## Description
 
 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.
+Docker containers on a cluster of 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
diff --git a/amazonka-ecs.cabal b/amazonka-ecs.cabal
--- a/amazonka-ecs.cabal
+++ b/amazonka-ecs.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-ecs
-version:               1.3.3.1
+version:               1.3.4
 synopsis:              Amazon EC2 Container Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -15,11 +15,11 @@
 description:
     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.
+    Docker containers on a cluster of 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
@@ -89,7 +89,7 @@
         , Network.AWS.ECS.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.3.*
+          amazonka-core == 1.3.4.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-ecs-test
@@ -109,9 +109,9 @@
         , Test.AWS.ECS.Internal
 
     build-depends:
-          amazonka-core == 1.3.3.*
-        , amazonka-test == 1.3.3.*
-        , amazonka-ecs == 1.3.3.*
+          amazonka-core == 1.3.4.*
+        , amazonka-test == 1.3.4.*
+        , amazonka-ecs == 1.3.4.*
         , base
         , bytestring
         , lens
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
@@ -13,11 +13,11 @@
 --
 -- 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.
+-- Docker containers on a cluster of 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
@@ -172,6 +172,9 @@
     -- ** DesiredStatus
     , DesiredStatus (..)
 
+    -- ** LogDriver
+    , LogDriver (..)
+
     -- ** SortOrder
     , SortOrder (..)
 
@@ -181,6 +184,15 @@
     -- ** TransportProtocol
     , TransportProtocol (..)
 
+    -- ** UlimitName
+    , UlimitName (..)
+
+    -- ** Attribute
+    , Attribute
+    , attribute
+    , aValue
+    , aName
+
     -- ** Cluster
     , Cluster
     , cluster
@@ -208,14 +220,27 @@
     , containerDefinition
     , cdImage
     , cdCommand
+    , cdHostname
+    , cdDockerSecurityOptions
+    , cdDisableNetworking
     , cdVolumesFrom
     , cdEnvironment
     , cdEntryPoint
+    , cdWorkingDirectory
+    , cdUlimits
+    , cdPrivileged
     , cdPortMappings
+    , cdDockerLabels
+    , cdExtraHosts
     , cdMemory
+    , cdUser
+    , cdDnsSearchDomains
+    , cdLogConfiguration
     , cdName
+    , cdDnsServers
     , cdMountPoints
     , cdLinks
+    , cdReadonlyRootFilesystem
     , cdEssential
     , cdCpu
 
@@ -230,6 +255,7 @@
     , ciAgentConnected
     , ciVersionInfo
     , ciAgentUpdateStatus
+    , ciAttributes
     , ciPendingTasksCount
     , ciRegisteredResources
 
@@ -274,6 +300,12 @@
     , fArn
     , fReason
 
+    -- ** HostEntry
+    , HostEntry
+    , hostEntry
+    , heHostname
+    , heIpAddress
+
     -- ** HostVolumeProperties
     , HostVolumeProperties
     , hostVolumeProperties
@@ -292,6 +324,12 @@
     , lbContainerName
     , lbContainerPort
 
+    -- ** LogConfiguration
+    , LogConfiguration
+    , logConfiguration
+    , lcOptions
+    , lcLogDriver
+
     -- ** MountPoint
     , MountPoint
     , mountPoint
@@ -353,11 +391,19 @@
     , tdTaskDefinitionARN
     , tdRevision
     , tdVolumes
+    , tdRequiresAttributes
 
     -- ** TaskOverride
     , TaskOverride
     , taskOverride
     , toContainerOverrides
+
+    -- ** Ulimit
+    , Ulimit
+    , ulimit
+    , uName
+    , uSoftLimit
+    , uHardLimit
 
     -- ** VersionInfo
     , VersionInfo
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
@@ -18,8 +18,8 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a new Amazon ECS cluster. By default, your account will receive
--- a 'default' cluster when you launch your first container instance.
+-- Creates a new Amazon ECS cluster. By default, your account receives 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.
 --
@@ -64,8 +64,8 @@
     }
 
 -- | 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.
+-- you 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});
 
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
@@ -20,8 +20,8 @@
 --
 -- 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.
+-- 'desiredCount', Amazon ECS spawns another instantiation of the task in
+-- the specified cluster.
 --
 -- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html AWS API Reference> for CreateService.
 module Network.AWS.ECS.CreateService
@@ -96,9 +96,9 @@
     , _cDesiredCount = pDesiredCount_
     }
 
--- | 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.
+-- | The short name or full Amazon Resource Name (ARN) of the cluster on
+-- which to run your service. 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});
 
@@ -128,13 +128,13 @@
 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.
--- If a 'revision' is not specified, the latest 'ACTIVE' revision is used.
+-- Name (ARN) of the task definition 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});
 
--- | The number of instantiations of the specified task definition that you
--- would like to place and keep running on your cluster.
+-- | The number of instantiations of the specified task definition to place
+-- and keep running on your cluster.
 cDesiredCount :: Lens' CreateService Int
 cDesiredCount = lens _cDesiredCount (\ s a -> s{_cDesiredCount = 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
@@ -64,8 +64,8 @@
     { _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 to
+-- delete.
 dcCluster :: Lens' DeleteCluster Text
 dcCluster = lens _dcCluster (\ s a -> s{_dcCluster = 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
@@ -66,11 +66,12 @@
     , _dsService = pService_
     }
 
--- | The name of the cluster that hosts the service you want to delete.
+-- | The name of the cluster that hosts the service to delete. If you do not
+-- specify a cluster, the default cluster is assumed.
 dsCluster :: Lens' DeleteService (Maybe Text)
 dsCluster = lens _dsCluster (\ s a -> s{_dsCluster = a});
 
--- | The name of the service you want to delete.
+-- | The name of the service to delete.
 dsService :: Lens' DeleteService Text
 dsService = lens _dsService (\ s a -> s{_dsService = a});
 
@@ -128,7 +129,7 @@
     , _dsrsResponseStatus = pResponseStatus_
     }
 
--- | Undocumented member.
+-- | The full description of the deleted service.
 dsrsService :: Lens' DeleteServiceResponse (Maybe ContainerService)
 dsrsService = lens _dsrsService (\ s a -> s{_dsrsService = 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
@@ -19,7 +19,7 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Deregisters an Amazon ECS container instance from the specified cluster.
--- This instance will no longer be available to run tasks.
+-- This instance is no longer available to run tasks.
 --
 -- If you intend to use the container instance for some other purpose after
 -- deregistration, you should stop all of the tasks running on the
@@ -86,30 +86,29 @@
     }
 
 -- | 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.
+-- hosts the container instance 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});
 
--- | Force the deregistration of the container instance. If you have tasks
+-- | Forces 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.
+-- 'force' option, these tasks remain running and they 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 starts 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});
 
--- | 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/.
+-- | The container instance ID or full Amazon Resource Name (ARN) of the
+-- container instance 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 ID. For example,
+-- arn:aws:ecs:/region/:/aws_account_id/:container-instance\//container_instance_ID/.
 derContainerInstance :: Lens' DeregisterContainerInstance Text
 derContainerInstance = lens _derContainerInstance (\ s a -> s{_derContainerInstance = 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
@@ -73,8 +73,8 @@
     }
 
 -- | 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'.
+-- Name (ARN) of the task definition to deregister. You must specify a
+-- 'revision'.
 derTaskDefinition :: Lens' DeregisterTaskDefinition Text
 derTaskDefinition = lens _derTaskDefinition (\ s a -> s{_derTaskDefinition = 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
@@ -125,7 +125,7 @@
     , _dcrsResponseStatus = pResponseStatus_
     }
 
--- | Undocumented member.
+-- | Any failures associated with the call.
 dcrsFailures :: Lens' DescribeClustersResponse [Failure]
 dcrsFailures = lens _dcrsFailures (\ s a -> s{_dcrsFailures = a}) . _Default . _Coerce;
 
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
@@ -69,13 +69,13 @@
     }
 
 -- | 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.
+-- hosts the container instances 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});
 
--- | A space-separated list of container instance UUIDs or full Amazon
--- Resource Name (ARN) entries.
+-- | A space-separated list of container instance IDs or full Amazon Resource
+-- Name (ARN) entries.
 dciContainerInstances :: Lens' DescribeContainerInstances [Text]
 dciContainerInstances = lens _dciContainerInstances (\ s a -> s{_dciContainerInstances = a}) . _Coerce;
 
@@ -141,7 +141,7 @@
     , _dcisrsResponseStatus = pResponseStatus_
     }
 
--- | Undocumented member.
+-- | Any failures associated with the call.
 dcisrsFailures :: Lens' DescribeContainerInstancesResponse [Failure]
 dcisrsFailures = lens _dcisrsFailures (\ s a -> s{_dcisrsFailures = a}) . _Default . _Coerce;
 
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
@@ -66,11 +66,12 @@
     , _dServices = mempty
     }
 
--- | The name of the cluster that hosts the service you want to describe.
+-- | The name of the cluster that hosts the service to describe. If you do
+-- not specify a cluster, the default cluster is assumed.
 dCluster :: Lens' DescribeServices (Maybe Text)
 dCluster = lens _dCluster (\ s a -> s{_dCluster = a});
 
--- | A list of services you want to describe.
+-- | A list of services to describe.
 dServices :: Lens' DescribeServices [Text]
 dServices = lens _dServices (\ s a -> s{_dServices = a}) . _Coerce;
 
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
@@ -19,7 +19,7 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes a task definition. You can specify a 'family' and 'revision'
--- to find information on a specific task definition, or you can simply
+-- to find information about a specific task definition, or you can simply
 -- specify the family to find the latest 'ACTIVE' revision in that family.
 --
 -- You can only describe 'INACTIVE' task definitions while an active task
@@ -68,8 +68,7 @@
 
 -- | 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.
+-- Amazon Resource Name (ARN) of the task definition to describe.
 dtdTaskDefinition :: Lens' DescribeTaskDefinition Text
 dtdTaskDefinition = lens _dtdTaskDefinition (\ s a -> s{_dtdTaskDefinition = 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
@@ -67,12 +67,12 @@
     }
 
 -- | 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.
+-- hosts the task 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});
 
--- | A space-separated list of task UUIDs or full Amazon Resource Name (ARN)
+-- | A space-separated list of task IDs or full Amazon Resource Name (ARN)
 -- entries.
 dtTasks :: Lens' DescribeTasks [Text]
 dtTasks = lens _dtTasks (\ s a -> s{_dtTasks = a}) . _Coerce;
@@ -137,7 +137,7 @@
     , _dtrsResponseStatus = pResponseStatus_
     }
 
--- | Undocumented member.
+-- | Any failures associated with the call.
 dtrsFailures :: Lens' DescribeTasksResponse [Failure]
 dtrsFailures = lens _dtrsFailures (\ s a -> s{_dtrsFailures = a}) . _Default . _Coerce;
 
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
@@ -74,12 +74,12 @@
 dpeCluster :: Lens' DiscoverPollEndpoint (Maybe Text)
 dpeCluster = lens _dpeCluster (\ s a -> s{_dpeCluster = a});
 
--- | The container instance UUID or full Amazon Resource Name (ARN) of the
+-- | The container instance ID 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/.
+-- then the container instance ID. For example,
+-- arn:aws:ecs:/region/:/aws_account_id/:container-instance\//container_instance_ID/.
 dpeContainerInstance :: Lens' DiscoverPollEndpoint (Maybe Text)
 dpeContainerInstance = lens _dpeContainerInstance (\ s a -> s{_dpeContainerInstance = 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
@@ -75,8 +75,8 @@
     }
 
 -- | 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..
+-- hosts the container instances 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});
 
@@ -169,8 +169,9 @@
     , _lcirsResponseStatus = pResponseStatus_
     }
 
--- | The list of container instance full Amazon Resource Name (ARN) entries
--- for each container instance associated with the specified cluster.
+-- | The list of container instances with 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;
 
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
@@ -75,8 +75,8 @@
     }
 
 -- | 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..
+-- hosts the services 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});
 
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
@@ -86,8 +86,8 @@
     , _ltdMaxResults = Nothing
     }
 
--- | The task definition status that you want to filter the
--- 'ListTaskDefinitions' results with. By default, only 'ACTIVE' task
+-- | The task definition status with which to filter the
+-- 'ListTaskDefinitions' results. 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
@@ -95,9 +95,9 @@
 ltdStatus :: Lens' ListTaskDefinitions (Maybe TaskDefinitionStatus)
 ltdStatus = lens _ltdStatus (\ s a -> s{_ltdStatus = 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.
+-- | The full family name with which to filter the 'ListTaskDefinitions'
+-- results. Specifying a 'familyPrefix' limits 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});
 
@@ -202,7 +202,7 @@
     }
 
 -- | The list of task definition Amazon Resource Name (ARN) entries for the
--- 'ListTaskDefintions' request.
+-- 'ListTaskDefinitions' request.
 ltdrsTaskDefinitionARNs :: Lens' ListTaskDefinitionsResponse [Text]
 ltdrsTaskDefinitionARNs = lens _ltdrsTaskDefinitionARNs (\ s a -> s{_ltdrsTaskDefinitionARNs = a}) . _Default . _Coerce;
 
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
@@ -102,23 +102,23 @@
     , _ltMaxResults = Nothing
     }
 
--- | 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'.
+-- | The task status with which to filter the 'ListTasks' results. Specifying
+-- a 'desiredStatus' of 'STOPPED' limits 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 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..
+-- hosts the tasks 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 with which to filter the 'ListTasks' results.
+-- Specifying a 'family' limits the results to tasks that belong to that
+-- family.
 ltFamily :: Lens' ListTasks (Maybe Text)
 ltFamily = lens _ltFamily (\ s a -> s{_ltFamily = a});
 
@@ -130,22 +130,22 @@
 ltNextToken :: Lens' ListTasks (Maybe Text)
 ltNextToken = lens _ltNextToken (\ s a -> s{_ltNextToken = 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.
+-- | The 'startedBy' value with which to filter the task results. Specifying
+-- a 'startedBy' value limits 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.
+-- | The name of the service with which to filter the 'ListTasks' results.
+-- Specifying a 'serviceName' limits the results to tasks that belong to
+-- that service.
 ltServiceName :: Lens' ListTasks (Maybe Text)
 ltServiceName = lens _ltServiceName (\ s a -> s{_ltServiceName = 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.
+-- | The container instance ID or full Amazon Resource Name (ARN) of the
+-- container instance with which to filter the 'ListTasks' results.
+-- Specifying a 'containerInstance' limits the results to tasks that belong
+-- to that container instance.
 ltContainerInstance :: Lens' ListTasks (Maybe Text)
 ltContainerInstance = lens _ltContainerInstance (\ s a -> s{_ltContainerInstance = 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
@@ -21,8 +21,8 @@
 -- 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 EC2 instance into the specified cluster. This instance
+-- becomes available to place containers on.
 --
 -- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterContainerInstance.html AWS API Reference> for RegisterContainerInstance.
 module Network.AWS.ECS.RegisterContainerInstance
@@ -36,6 +36,7 @@
     , rciInstanceIdentityDocument
     , rciContainerInstanceARN
     , rciVersionInfo
+    , rciAttributes
     , rciTotalResources
 
     -- * Destructuring the Response
@@ -59,6 +60,7 @@
     , _rciInstanceIdentityDocument          :: !(Maybe Text)
     , _rciContainerInstanceARN              :: !(Maybe Text)
     , _rciVersionInfo                       :: !(Maybe VersionInfo)
+    , _rciAttributes                        :: !(Maybe [Attribute])
     , _rciTotalResources                    :: !(Maybe [Resource])
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
@@ -76,6 +78,8 @@
 --
 -- * 'rciVersionInfo'
 --
+-- * 'rciAttributes'
+--
 -- * 'rciTotalResources'
 registerContainerInstance
     :: RegisterContainerInstance
@@ -86,24 +90,25 @@
     , _rciInstanceIdentityDocument = Nothing
     , _rciContainerInstanceARN = Nothing
     , _rciVersionInfo = Nothing
+    , _rciAttributes = Nothing
     , _rciTotalResources = Nothing
     }
 
--- | The instance identity document signature for the Amazon EC2 instance to
+-- | The instance identity document signature for the 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..
+-- | The short name or full Amazon Resource Name (ARN) of the cluster with
+-- which to register your container instance. 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});
 
--- | The instance identity document for the Amazon EC2 instance to register.
--- This document can be found by running the following command from the
+-- | The instance identity document for the 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)
@@ -119,6 +124,10 @@
 rciVersionInfo :: Lens' RegisterContainerInstance (Maybe VersionInfo)
 rciVersionInfo = lens _rciVersionInfo (\ s a -> s{_rciVersionInfo = a});
 
+-- | The container instance attributes that this container instance supports.
+rciAttributes :: Lens' RegisterContainerInstance [Attribute]
+rciAttributes = lens _rciAttributes (\ s a -> s{_rciAttributes = a}) . _Default . _Coerce;
+
 -- | The resources available on the instance.
 rciTotalResources :: Lens' RegisterContainerInstance [Resource]
 rciTotalResources = lens _rciTotalResources (\ s a -> s{_rciTotalResources = a}) . _Default . _Coerce;
@@ -155,6 +164,7 @@
                   ("containerInstanceArn" .=) <$>
                     _rciContainerInstanceARN,
                   ("versionInfo" .=) <$> _rciVersionInfo,
+                  ("attributes" .=) <$> _rciAttributes,
                   ("totalResources" .=) <$> _rciTotalResources])
 
 instance ToPath RegisterContainerInstance where
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
@@ -20,7 +20,7 @@
 --
 -- 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
+-- containers with the 'volumes' parameter. For more information about 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/.
@@ -82,10 +82,9 @@
 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.
+-- track multiple versions of the same task definition. The 'family' is
+-- used 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});
 
@@ -152,7 +151,7 @@
     , _rtdrsResponseStatus = pResponseStatus_
     }
 
--- | Undocumented member.
+-- | The full description of the registered task definition.
 rtdrsTaskDefinition :: Lens' RegisterTaskDefinitionResponse (Maybe TaskDefinition)
 rtdrsTaskDefinition = lens _rtdrsTaskDefinition (\ s a -> s{_rtdrsTaskDefinition = 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
@@ -19,8 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- 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.
+-- scheduler. 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.
 --
@@ -99,14 +99,14 @@
 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..
+-- | The short name or full Amazon Resource Name (ARN) of the cluster on
+-- which to run your task. 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});
 
--- | 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 to place on your
+-- cluster.
 --
 -- The 'count' parameter is limited to 10 tasks per call.
 rtCount :: Lens' RunTask (Maybe Int)
@@ -124,8 +124,8 @@
 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. If a 'revision'
--- is not specified, the latest 'ACTIVE' revision is used.
+-- Name (ARN) of the task definition 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});
 
@@ -192,12 +192,12 @@
     , _rtrsResponseStatus = pResponseStatus_
     }
 
--- | Any failed tasks from your 'RunTask' action are listed here.
+-- | Any failures associated with the call.
 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.
+-- successfully placed on your cluster are described here.
 rtrsTasks :: Lens' RunTaskResponse [Task]
 rtrsTasks = lens _rtrsTasks (\ s a -> s{_rtrsTasks = a}) . _Default . _Coerce;
 
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
@@ -19,8 +19,8 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- 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.
+-- container instance or instances. 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.
 --
@@ -99,9 +99,9 @@
 sOverrides :: Lens' StartTask (Maybe TaskOverride)
 sOverrides = lens _sOverrides (\ s a -> s{_sOverrides = 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..
+-- | The short name or full Amazon Resource Name (ARN) of the cluster on
+-- which to start your task. 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});
 
@@ -117,12 +117,12 @@
 sStartedBy = lens _sStartedBy (\ s a -> s{_sStartedBy = a});
 
 -- | 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.
+-- Name (ARN) of the task definition 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});
 
--- | The container instance UUIDs or full Amazon Resource Name (ARN) entries
+-- | The container instance IDs 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.
@@ -192,12 +192,12 @@
     , _strsResponseStatus = pResponseStatus_
     }
 
--- | Any failed tasks from your 'StartTask' action are listed here.
+-- | Any failures associated with the call.
 strsFailures :: Lens' StartTaskResponse [Failure]
 strsFailures = lens _strsFailures (\ s a -> s{_strsFailures = a}) . _Default . _Coerce;
 
 -- | A full description of the tasks that were started. Each task that was
--- successfully placed on your container instances will be described here.
+-- successfully placed on your container instances are described here.
 strsTasks :: Lens' StartTaskResponse [Task]
 strsTasks = lens _strsTasks (\ s a -> s{_strsTasks = a}) . _Default . _Coerce;
 
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
@@ -20,6 +20,13 @@
 --
 -- Stops a running task.
 --
+-- When StopTask is called on a task, the equivalent of 'docker stop' is
+-- issued to the containers running in the task. This results in a
+-- 'SIGTERM' and a 30-second timeout, after which 'SIGKILL' is sent and the
+-- containers are forcibly stopped. If the container handles the 'SIGTERM'
+-- gracefully and exits within 30 seconds from receiving it, no 'SIGKILL'
+-- is sent.
+--
 -- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StopTask.html AWS API Reference> for StopTask.
 module Network.AWS.ECS.StopTask
     (
@@ -67,13 +74,13 @@
     }
 
 -- | 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..
+-- hosts the task 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});
 
--- | The task UUIDs or full Amazon Resource Name (ARN) entry of the task you
--- would like to stop.
+-- | The task ID or full Amazon Resource Name (ARN) entry of the task to
+-- stop.
 stTask :: Lens' StopTask Text
 stTask = lens _stTask (\ s a -> s{_stTask = 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
@@ -118,7 +118,7 @@
 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 task ID 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});
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
@@ -91,8 +91,8 @@
 stscReason :: Lens' SubmitTaskStateChange (Maybe Text)
 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 ID 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});
 
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
@@ -34,6 +34,9 @@
     -- * DesiredStatus
     , DesiredStatus (..)
 
+    -- * LogDriver
+    , LogDriver (..)
+
     -- * SortOrder
     , SortOrder (..)
 
@@ -43,6 +46,15 @@
     -- * TransportProtocol
     , TransportProtocol (..)
 
+    -- * UlimitName
+    , UlimitName (..)
+
+    -- * Attribute
+    , Attribute
+    , attribute
+    , aValue
+    , aName
+
     -- * Cluster
     , Cluster
     , cluster
@@ -70,14 +82,27 @@
     , containerDefinition
     , cdImage
     , cdCommand
+    , cdHostname
+    , cdDockerSecurityOptions
+    , cdDisableNetworking
     , cdVolumesFrom
     , cdEnvironment
     , cdEntryPoint
+    , cdWorkingDirectory
+    , cdUlimits
+    , cdPrivileged
     , cdPortMappings
+    , cdDockerLabels
+    , cdExtraHosts
     , cdMemory
+    , cdUser
+    , cdDnsSearchDomains
+    , cdLogConfiguration
     , cdName
+    , cdDnsServers
     , cdMountPoints
     , cdLinks
+    , cdReadonlyRootFilesystem
     , cdEssential
     , cdCpu
 
@@ -92,6 +117,7 @@
     , ciAgentConnected
     , ciVersionInfo
     , ciAgentUpdateStatus
+    , ciAttributes
     , ciPendingTasksCount
     , ciRegisteredResources
 
@@ -136,6 +162,12 @@
     , fArn
     , fReason
 
+    -- * HostEntry
+    , HostEntry
+    , hostEntry
+    , heHostname
+    , heIpAddress
+
     -- * HostVolumeProperties
     , HostVolumeProperties
     , hostVolumeProperties
@@ -154,6 +186,12 @@
     , lbContainerName
     , lbContainerPort
 
+    -- * LogConfiguration
+    , LogConfiguration
+    , logConfiguration
+    , lcOptions
+    , lcLogDriver
+
     -- * MountPoint
     , MountPoint
     , mountPoint
@@ -215,12 +253,20 @@
     , tdTaskDefinitionARN
     , tdRevision
     , tdVolumes
+    , tdRequiresAttributes
 
     -- * TaskOverride
     , TaskOverride
     , taskOverride
     , toContainerOverrides
 
+    -- * Ulimit
+    , Ulimit
+    , ulimit
+    , uName
+    , uSoftLimit
+    , uHardLimit
+
     -- * VersionInfo
     , VersionInfo
     , versionInfo
@@ -283,7 +329,7 @@
 _InvalidParameterException =
     _ServiceError . hasCode "InvalidParameterException"
 
--- | These errors are usually caused by a server-side issue.
+-- | These errors are usually caused by a server issue.
 _ServerException :: AsError a => Getting (First ServiceError) a ServiceError
 _ServerException = _ServiceError . hasCode "ServerException"
 
@@ -302,7 +348,7 @@
     _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
+-- not active. If you have previously deleted a service, you can re-create
 -- it with CreateService.
 _ServiceNotActiveException :: AsError a => Getting (First ServiceError) a ServiceError
 _ServiceNotActiveException =
@@ -338,14 +384,14 @@
 -- 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.
+-- the agent reconnects, it resumes 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
+-- | These errors are usually caused by a client action, such as using an
+-- action or resource on behalf of a user that doesn\'t have permission to
+-- use the action or resource, or specifying 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
--- a/gen/Network/AWS/ECS/Types/Product.hs
+++ b/gen/Network/AWS/ECS/Types/Product.hs
@@ -20,6 +20,50 @@
 import           Network.AWS.ECS.Types.Sum
 import           Network.AWS.Prelude
 
+-- | The attributes applicable to a container instance when it is registered.
+--
+-- /See:/ 'attribute' smart constructor.
+data Attribute = Attribute'
+    { _aValue :: !(Maybe Text)
+    , _aName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Attribute' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aValue'
+--
+-- * 'aName'
+attribute
+    :: Text -- ^ 'aName'
+    -> Attribute
+attribute pName_ =
+    Attribute'
+    { _aValue = Nothing
+    , _aName = pName_
+    }
+
+-- | The value of the container instance attribute.
+aValue :: Lens' Attribute (Maybe Text)
+aValue = lens _aValue (\ s a -> s{_aValue = a});
+
+-- | The name of the container instance attribute.
+aName :: Lens' Attribute Text
+aName = lens _aName (\ s a -> s{_aName = a});
+
+instance FromJSON Attribute where
+        parseJSON
+          = withObject "Attribute"
+              (\ x ->
+                 Attribute' <$> (x .:? "value") <*> (x .: "name"))
+
+instance ToJSON Attribute where
+        toJSON Attribute'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _aValue, Just ("name" .= _aName)])
+
 -- | 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
@@ -93,7 +137,7 @@
 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.
+-- | A user-generated string that you use to identify your cluster.
 cClusterName :: Lens' Cluster (Maybe Text)
 cClusterName = lens _cClusterName (\ s a -> s{_cClusterName = a});
 
@@ -114,7 +158,7 @@
                      <*> (x .:? "clusterName")
                      <*> (x .:? "activeServicesCount"))
 
--- | A docker container that is part of a task.
+-- | A Docker container that is part of a task.
 --
 -- /See:/ 'container' smart constructor.
 data Container = Container'
@@ -204,18 +248,31 @@
 --
 -- /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)
+    { _cdImage                  :: !(Maybe Text)
+    , _cdCommand                :: !(Maybe [Text])
+    , _cdHostname               :: !(Maybe Text)
+    , _cdDockerSecurityOptions  :: !(Maybe [Text])
+    , _cdDisableNetworking      :: !(Maybe Bool)
+    , _cdVolumesFrom            :: !(Maybe [VolumeFrom])
+    , _cdEnvironment            :: !(Maybe [KeyValuePair])
+    , _cdEntryPoint             :: !(Maybe [Text])
+    , _cdWorkingDirectory       :: !(Maybe Text)
+    , _cdUlimits                :: !(Maybe [Ulimit])
+    , _cdPrivileged             :: !(Maybe Bool)
+    , _cdPortMappings           :: !(Maybe [PortMapping])
+    , _cdDockerLabels           :: !(Maybe (Map Text Text))
+    , _cdExtraHosts             :: !(Maybe [HostEntry])
+    , _cdMemory                 :: !(Maybe Int)
+    , _cdUser                   :: !(Maybe Text)
+    , _cdDnsSearchDomains       :: !(Maybe [Text])
+    , _cdLogConfiguration       :: !(Maybe LogConfiguration)
+    , _cdName                   :: !(Maybe Text)
+    , _cdDnsServers             :: !(Maybe [Text])
+    , _cdMountPoints            :: !(Maybe [MountPoint])
+    , _cdLinks                  :: !(Maybe [Text])
+    , _cdReadonlyRootFilesystem :: !(Maybe Bool)
+    , _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.
@@ -226,22 +283,48 @@
 --
 -- * 'cdCommand'
 --
+-- * 'cdHostname'
+--
+-- * 'cdDockerSecurityOptions'
+--
+-- * 'cdDisableNetworking'
+--
 -- * 'cdVolumesFrom'
 --
 -- * 'cdEnvironment'
 --
 -- * 'cdEntryPoint'
 --
+-- * 'cdWorkingDirectory'
+--
+-- * 'cdUlimits'
+--
+-- * 'cdPrivileged'
+--
 -- * 'cdPortMappings'
 --
+-- * 'cdDockerLabels'
+--
+-- * 'cdExtraHosts'
+--
 -- * 'cdMemory'
 --
+-- * 'cdUser'
+--
+-- * 'cdDnsSearchDomains'
+--
+-- * 'cdLogConfiguration'
+--
 -- * 'cdName'
 --
+-- * 'cdDnsServers'
+--
 -- * 'cdMountPoints'
 --
 -- * 'cdLinks'
 --
+-- * 'cdReadonlyRootFilesystem'
+--
 -- * 'cdEssential'
 --
 -- * 'cdCpu'
@@ -251,14 +334,27 @@
     ContainerDefinition'
     { _cdImage = Nothing
     , _cdCommand = Nothing
+    , _cdHostname = Nothing
+    , _cdDockerSecurityOptions = Nothing
+    , _cdDisableNetworking = Nothing
     , _cdVolumesFrom = Nothing
     , _cdEnvironment = Nothing
     , _cdEntryPoint = Nothing
+    , _cdWorkingDirectory = Nothing
+    , _cdUlimits = Nothing
+    , _cdPrivileged = Nothing
     , _cdPortMappings = Nothing
+    , _cdDockerLabels = Nothing
+    , _cdExtraHosts = Nothing
     , _cdMemory = Nothing
+    , _cdUser = Nothing
+    , _cdDnsSearchDomains = Nothing
+    , _cdLogConfiguration = Nothing
     , _cdName = Nothing
+    , _cdDnsServers = Nothing
     , _cdMountPoints = Nothing
     , _cdLinks = Nothing
+    , _cdReadonlyRootFilesystem = Nothing
     , _cdEssential = Nothing
     , _cdCpu = Nothing
     }
@@ -266,21 +362,83 @@
 -- | 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'.
+-- 'repository-url\/image:tag'. Up to 255 letters (uppercase and
+-- lowercase), numbers, hyphens, underscores, colons, periods, forward
+-- slashes, and number signs are allowed. This parameter maps to 'Image' in
+-- the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the 'IMAGE' parameter of
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 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>.
+-- | The command that is passed to the container. This parameter maps to
+-- 'Cmd' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the 'COMMAND' parameter to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>. For
+-- more information, 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.
+-- | The hostname to use for your container. This parameter maps to
+-- 'Hostname' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--hostname' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdHostname :: Lens' ContainerDefinition (Maybe Text)
+cdHostname = lens _cdHostname (\ s a -> s{_cdHostname = a});
+
+-- | A list of strings to provide custom labels for SELinux and AppArmor
+-- multi-level security systems. This parameter maps to 'SecurityOpt' in
+-- the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--security-opt' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+--
+-- The Amazon ECS container agent running on a container instance must
+-- register with the 'ECS_SELINUX_CAPABLE=true' or
+-- 'ECS_APPARMOR_CAPABLE=true' environment variables before containers
+-- placed on that instance can use these security options. For more
+-- information, see
+-- <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/developerguide/ecs-agent-config.html Amazon ECS Container Agent Configuration>
+-- in the /Amazon EC2 Container Service Developer Guide/.
+cdDockerSecurityOptions :: Lens' ContainerDefinition [Text]
+cdDockerSecurityOptions = lens _cdDockerSecurityOptions (\ s a -> s{_cdDockerSecurityOptions = a}) . _Default . _Coerce;
+
+-- | When this parameter is true, networking is disabled within the
+-- container. This parameter maps to 'NetworkDisabled' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>.
+cdDisableNetworking :: Lens' ContainerDefinition (Maybe Bool)
+cdDisableNetworking = lens _cdDisableNetworking (\ s a -> s{_cdDisableNetworking = a});
+
+-- | Data volumes to mount from another container. This parameter maps to
+-- 'VolumesFrom' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--volumes-from' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 cdVolumesFrom :: Lens' ContainerDefinition [VolumeFrom]
 cdVolumesFrom = lens _cdVolumesFrom (\ s a -> s{_cdVolumesFrom = a}) . _Default . _Coerce;
 
--- | The environment variables to pass to a container.
+-- | The environment variables to pass to a container. This parameter maps to
+-- 'Env' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--env' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 cdEnvironment :: Lens' ContainerDefinition [KeyValuePair]
 cdEnvironment = lens _cdEnvironment (\ s a -> s{_cdEnvironment = a}) . _Default . _Coerce;
 
@@ -289,37 +447,190 @@
 -- 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
+-- The entry point that is passed to the container. This parameter maps to
+-- 'Entrypoint' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--entrypoint' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>. For
+-- more information, 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.
+-- | The working directory in which to run commands inside the container.
+-- This parameter maps to 'WorkingDir' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--workdir' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdWorkingDirectory :: Lens' ContainerDefinition (Maybe Text)
+cdWorkingDirectory = lens _cdWorkingDirectory (\ s a -> s{_cdWorkingDirectory = a});
+
+-- | A list of 'ulimits' to set in the container. This parameter maps to
+-- 'Ulimits' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--ulimit' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>. Valid
+-- naming values are displayed in the Ulimit data type. This parameter
+-- requires version 1.18 of the Docker Remote API or greater on your
+-- container instance. To check the Docker Remote API version on your
+-- container instance, log into your container instance and run the
+-- following command: 'sudo docker version | grep \"Server API version\"'
+cdUlimits :: Lens' ContainerDefinition [Ulimit]
+cdUlimits = lens _cdUlimits (\ s a -> s{_cdUlimits = a}) . _Default . _Coerce;
+
+-- | When this parameter is true, the container is given elevated privileges
+-- on the host container instance (similar to the 'root' user). This
+-- parameter maps to 'Privileged' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--privileged' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdPrivileged :: Lens' ContainerDefinition (Maybe Bool)
+cdPrivileged = lens _cdPrivileged (\ s a -> s{_cdPrivileged = a});
+
+-- | The list of port mappings for the container. Port mappings allow
+-- containers to access ports on the host container instance to send or
+-- receive traffic. This parameter maps to 'PortBindings' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--publish' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 cdPortMappings :: Lens' ContainerDefinition [PortMapping]
 cdPortMappings = lens _cdPortMappings (\ s a -> s{_cdPortMappings = a}) . _Default . _Coerce;
 
+-- | A key\/value map of labels to add to the container. This parameter maps
+-- to 'Labels' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--label' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>. This
+-- parameter requires version 1.18 of the Docker Remote API or greater on
+-- your container instance. To check the Docker Remote API version on your
+-- container instance, log into your container instance and run the
+-- following command: 'sudo docker version | grep \"Server API version\"'
+cdDockerLabels :: Lens' ContainerDefinition (HashMap Text Text)
+cdDockerLabels = lens _cdDockerLabels (\ s a -> s{_cdDockerLabels = a}) . _Default . _Map;
+
+-- | A list of hostnames and IP address mappings to append to the
+-- '\/etc\/hosts' file on the container. This parameter maps to
+-- 'ExtraHosts' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--add-host' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdExtraHosts :: Lens' ContainerDefinition [HostEntry]
+cdExtraHosts = lens _cdExtraHosts (\ s a -> s{_cdExtraHosts = 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.
+-- killed. This parameter maps to 'Memory' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--memory' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 cdMemory :: Lens' ContainerDefinition (Maybe Int)
 cdMemory = lens _cdMemory (\ s a -> s{_cdMemory = a});
 
+-- | The user name to use inside the container. This parameter maps to 'User'
+-- in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--user' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdUser :: Lens' ContainerDefinition (Maybe Text)
+cdUser = lens _cdUser (\ s a -> s{_cdUser = a});
+
+-- | A list of DNS search domains that are presented to the container. This
+-- parameter maps to 'DnsSearch' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--dns-search' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdDnsSearchDomains :: Lens' ContainerDefinition [Text]
+cdDnsSearchDomains = lens _cdDnsSearchDomains (\ s a -> s{_cdDnsSearchDomains = a}) . _Default . _Coerce;
+
+-- | The log configuration specification for the container. This parameter
+-- maps to 'LogConfig' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--log-driver' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>. Valid
+-- log drivers are displayed in the LogConfiguration data type. This
+-- parameter requires version 1.18 of the Docker Remote API or greater on
+-- your container instance. To check the Docker Remote API version on your
+-- container instance, log into your container instance and run the
+-- following command: 'sudo docker version | grep \"Server API version\"'
+--
+-- The Amazon ECS container agent running on a container instance must
+-- register the logging drivers available on that instance with the
+-- 'ECS_AVAILABLE_LOGGING_DRIVERS' environment variable before containers
+-- placed on that instance can use these log configuration options. For
+-- more information, see
+-- <http://docs.aws.amazon.com/AmazonECS/latest/developerguide/developerguide/ecs-agent-config.html Amazon ECS Container Agent Configuration>
+-- in the /Amazon EC2 Container Service Developer Guide/.
+cdLogConfiguration :: Lens' ContainerDefinition (Maybe LogConfiguration)
+cdLogConfiguration = lens _cdLogConfiguration (\ s a -> s{_cdLogConfiguration = 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.
+-- 'links' of another container to connect the containers. Up to 255
+-- letters (uppercase and lowercase), numbers, hyphens, and underscores are
+-- allowed. This parameter maps to 'name' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--name' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 cdName :: Lens' ContainerDefinition (Maybe Text)
 cdName = lens _cdName (\ s a -> s{_cdName = a});
 
--- | The mount points for data volumes in your container.
+-- | A list of DNS servers that are presented to the container. This
+-- parameter maps to 'Dns' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--dns' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
+cdDnsServers :: Lens' ContainerDefinition [Text]
+cdDnsServers = lens _cdDnsServers (\ s a -> s{_cdDnsServers = a}) . _Default . _Coerce;
+
+-- | The mount points for data volumes in your container. This parameter maps
+-- to 'Volumes' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--volume' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 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/>.
+-- without the need for port mappings, using the 'name' parameter and
+-- optionally, an 'alias' for the link. This construct is analogous to
+-- 'name:alias' in Docker links. Up to 255 letters (uppercase and
+-- lowercase), numbers, hyphens, and underscores are allowed for each
+-- 'name' and 'alias'. For more information on linking Docker containers,
+-- see <https://docs.docker.com/userguide/dockerlinks/>. This parameter
+-- maps to 'Links' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--link' option to
+-- <https://docs.docker.com/reference/commandline/run/ 'docker run'>.
 --
 -- Containers that are collocated on a single container instance may be
 -- able to communicate with each other without requiring links or host port
@@ -328,11 +639,20 @@
 cdLinks :: Lens' ContainerDefinition [Text]
 cdLinks = lens _cdLinks (\ s a -> s{_cdLinks = a}) . _Default . _Coerce;
 
+-- | When this parameter is true, the container is given read-only access to
+-- its root file system. This parameter maps to 'ReadonlyRootfs' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--read-only' option to 'docker run'.
+cdReadonlyRootFilesystem :: Lens' ContainerDefinition (Maybe Bool)
+cdReadonlyRootFilesystem = lens _cdReadonlyRootFilesystem (\ s a -> s{_cdReadonlyRootFilesystem = a});
+
 -- | 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.
+-- failure of that container stops the task. If the 'essential' parameter
+-- of a container is marked as 'false', then its failure does 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)
@@ -342,8 +662,19 @@
 -- 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.
+-- instance with the same ratio as their allocated amount. This parameter
+-- maps to 'CpuShares' in the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/#create-a-container Create a container>
+-- section of the
+-- <https://docs.docker.com/reference/api/docker_remote_api_v1.19/ Docker Remote API>
+-- and the '--cpu-shares' option to
+-- <https://docs.docker.com/reference/commandline/run/ docker run>.
 --
+-- You can determine the number of CPU units that are available per EC2
+-- instance type by multiplying the vCPUs listed for that instance type on
+-- the <http://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instances>
+-- detail page by 1,024.
+--
 -- 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
@@ -359,10 +690,10 @@
 -- 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:
+-- Linux kernel allows 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
@@ -379,14 +710,27 @@
               (\ x ->
                  ContainerDefinition' <$>
                    (x .:? "image") <*> (x .:? "command" .!= mempty) <*>
-                     (x .:? "volumesFrom" .!= mempty)
+                     (x .:? "hostname")
+                     <*> (x .:? "dockerSecurityOptions" .!= mempty)
+                     <*> (x .:? "disableNetworking")
+                     <*> (x .:? "volumesFrom" .!= mempty)
                      <*> (x .:? "environment" .!= mempty)
                      <*> (x .:? "entryPoint" .!= mempty)
+                     <*> (x .:? "workingDirectory")
+                     <*> (x .:? "ulimits" .!= mempty)
+                     <*> (x .:? "privileged")
                      <*> (x .:? "portMappings" .!= mempty)
+                     <*> (x .:? "dockerLabels" .!= mempty)
+                     <*> (x .:? "extraHosts" .!= mempty)
                      <*> (x .:? "memory")
+                     <*> (x .:? "user")
+                     <*> (x .:? "dnsSearchDomains" .!= mempty)
+                     <*> (x .:? "logConfiguration")
                      <*> (x .:? "name")
+                     <*> (x .:? "dnsServers" .!= mempty)
                      <*> (x .:? "mountPoints" .!= mempty)
                      <*> (x .:? "links" .!= mempty)
+                     <*> (x .:? "readonlyRootFilesystem")
                      <*> (x .:? "essential")
                      <*> (x .:? "cpu"))
 
@@ -396,17 +740,32 @@
               (catMaybes
                  [("image" .=) <$> _cdImage,
                   ("command" .=) <$> _cdCommand,
+                  ("hostname" .=) <$> _cdHostname,
+                  ("dockerSecurityOptions" .=) <$>
+                    _cdDockerSecurityOptions,
+                  ("disableNetworking" .=) <$> _cdDisableNetworking,
                   ("volumesFrom" .=) <$> _cdVolumesFrom,
                   ("environment" .=) <$> _cdEnvironment,
                   ("entryPoint" .=) <$> _cdEntryPoint,
+                  ("workingDirectory" .=) <$> _cdWorkingDirectory,
+                  ("ulimits" .=) <$> _cdUlimits,
+                  ("privileged" .=) <$> _cdPrivileged,
                   ("portMappings" .=) <$> _cdPortMappings,
-                  ("memory" .=) <$> _cdMemory, ("name" .=) <$> _cdName,
+                  ("dockerLabels" .=) <$> _cdDockerLabels,
+                  ("extraHosts" .=) <$> _cdExtraHosts,
+                  ("memory" .=) <$> _cdMemory, ("user" .=) <$> _cdUser,
+                  ("dnsSearchDomains" .=) <$> _cdDnsSearchDomains,
+                  ("logConfiguration" .=) <$> _cdLogConfiguration,
+                  ("name" .=) <$> _cdName,
+                  ("dnsServers" .=) <$> _cdDnsServers,
                   ("mountPoints" .=) <$> _cdMountPoints,
                   ("links" .=) <$> _cdLinks,
+                  ("readonlyRootFilesystem" .=) <$>
+                    _cdReadonlyRootFilesystem,
                   ("essential" .=) <$> _cdEssential,
                   ("cpu" .=) <$> _cdCpu])
 
--- | An Amazon EC2 instance that is running the Amazon ECS agent and has been
+-- | An EC2 instance that is running the Amazon ECS agent and has been
 -- registered with a cluster.
 --
 -- /See:/ 'containerInstance' smart constructor.
@@ -419,6 +778,7 @@
     , _ciAgentConnected       :: !(Maybe Bool)
     , _ciVersionInfo          :: !(Maybe VersionInfo)
     , _ciAgentUpdateStatus    :: !(Maybe AgentUpdateStatus)
+    , _ciAttributes           :: !(Maybe [Attribute])
     , _ciPendingTasksCount    :: !(Maybe Int)
     , _ciRegisteredResources  :: !(Maybe [Resource])
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
@@ -443,6 +803,8 @@
 --
 -- * 'ciAgentUpdateStatus'
 --
+-- * 'ciAttributes'
+--
 -- * 'ciPendingTasksCount'
 --
 -- * 'ciRegisteredResources'
@@ -458,6 +820,7 @@
     , _ciAgentConnected = Nothing
     , _ciVersionInfo = Nothing
     , _ciAgentUpdateStatus = Nothing
+    , _ciAttributes = Nothing
     , _ciPendingTasksCount = Nothing
     , _ciRegisteredResources = Nothing
     }
@@ -478,23 +841,23 @@
 ciRemainingResources :: Lens' ContainerInstance [Resource]
 ciRemainingResources = lens _ciRemainingResources (\ s a -> s{_ciRemainingResources = a}) . _Default . _Coerce;
 
--- | The Amazon EC2 instance ID of the container instance.
+-- | The 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/.
+-- the 'container-instance' namespace, and then the container instance ID.
+-- For example,
+-- arn:aws:ecs:/region/:/aws_account_id/:container-instance\//container_instance_ID/.
 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.
+-- stopped return 'false', and instances without a connected agent cannot
+-- accept placement requests.
 ciAgentConnected :: Lens' ContainerInstance (Maybe Bool)
 ciAgentConnected = lens _ciAgentConnected (\ s a -> s{_ciAgentConnected = a});
 
@@ -508,6 +871,11 @@
 ciAgentUpdateStatus :: Lens' ContainerInstance (Maybe AgentUpdateStatus)
 ciAgentUpdateStatus = lens _ciAgentUpdateStatus (\ s a -> s{_ciAgentUpdateStatus = a});
 
+-- | The attributes set for the container instance by the Amazon ECS
+-- container agent at instance registration.
+ciAttributes :: Lens' ContainerInstance [Attribute]
+ciAttributes = lens _ciAttributes (\ s a -> s{_ciAttributes = a}) . _Default . _Coerce;
+
 -- | The number of tasks on the container instance that are in the 'PENDING'
 -- status.
 ciPendingTasksCount :: Lens' ContainerInstance (Maybe Int)
@@ -530,6 +898,7 @@
                      <*> (x .:? "agentConnected")
                      <*> (x .:? "versionInfo")
                      <*> (x .:? "agentUpdateStatus")
+                     <*> (x .:? "attributes" .!= mempty)
                      <*> (x .:? "pendingTasksCount")
                      <*> (x .:? "registeredResources" .!= mempty))
 
@@ -799,7 +1168,7 @@
 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.
+-- service to deploy or maintain.
 dDesiredCount :: Lens' Deployment (Maybe Int)
 dDesiredCount = lens _dDesiredCount (\ s a -> s{_dDesiredCount = a});
 
@@ -871,6 +1240,55 @@
               (\ x ->
                  Failure' <$> (x .:? "arn") <*> (x .:? "reason"))
 
+-- | Hostnames and IP address entries that are added to the '\/etc\/hosts'
+-- file of a container via the 'extraHosts' parameter of its
+-- ContainerDefinition.
+--
+-- /See:/ 'hostEntry' smart constructor.
+data HostEntry = HostEntry'
+    { _heHostname  :: !Text
+    , _heIpAddress :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'heHostname'
+--
+-- * 'heIpAddress'
+hostEntry
+    :: Text -- ^ 'heHostname'
+    -> Text -- ^ 'heIpAddress'
+    -> HostEntry
+hostEntry pHostname_ pIpAddress_ =
+    HostEntry'
+    { _heHostname = pHostname_
+    , _heIpAddress = pIpAddress_
+    }
+
+-- | The hostname to use in the '\/etc\/hosts' entry.
+heHostname :: Lens' HostEntry Text
+heHostname = lens _heHostname (\ s a -> s{_heHostname = a});
+
+-- | The IP address to use in the '\/etc\/hosts' entry.
+heIpAddress :: Lens' HostEntry Text
+heIpAddress = lens _heIpAddress (\ s a -> s{_heIpAddress = a});
+
+instance FromJSON HostEntry where
+        parseJSON
+          = withObject "HostEntry"
+              (\ x ->
+                 HostEntry' <$>
+                   (x .: "hostname") <*> (x .: "ipAddress"))
+
+instance ToJSON HostEntry where
+        toJSON HostEntry'{..}
+          = object
+              (catMaybes
+                 [Just ("hostname" .= _heHostname),
+                  Just ("ipAddress" .= _heIpAddress)])
+
 -- | Details on a container instance host volume.
 --
 -- /See:/ 'hostVolumeProperties' smart constructor.
@@ -1012,6 +1430,61 @@
                   ("containerName" .=) <$> _lbContainerName,
                   ("containerPort" .=) <$> _lbContainerPort])
 
+-- | Log configuration options to send to a custom log driver for the
+-- container.
+--
+-- /See:/ 'logConfiguration' smart constructor.
+data LogConfiguration = LogConfiguration'
+    { _lcOptions   :: !(Maybe (Map Text Text))
+    , _lcLogDriver :: !LogDriver
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LogConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcOptions'
+--
+-- * 'lcLogDriver'
+logConfiguration
+    :: LogDriver -- ^ 'lcLogDriver'
+    -> LogConfiguration
+logConfiguration pLogDriver_ =
+    LogConfiguration'
+    { _lcOptions = Nothing
+    , _lcLogDriver = pLogDriver_
+    }
+
+-- | The configuration options to send to the log driver. This parameter
+-- requires version 1.19 of the Docker Remote API or greater on your
+-- container instance. To check the Docker Remote API version on your
+-- container instance, log into your container instance and run the
+-- following command: 'sudo docker version | grep \"Server API version\"'
+lcOptions :: Lens' LogConfiguration (HashMap Text Text)
+lcOptions = lens _lcOptions (\ s a -> s{_lcOptions = a}) . _Default . _Map;
+
+-- | The log driver to use for the container. This parameter requires version
+-- 1.18 of the Docker Remote API or greater on your container instance. To
+-- check the Docker Remote API version on your container instance, log into
+-- your container instance and run the following command:
+-- 'sudo docker version | grep \"Server API version\"'
+lcLogDriver :: Lens' LogConfiguration LogDriver
+lcLogDriver = lens _lcLogDriver (\ s a -> s{_lcLogDriver = a});
+
+instance FromJSON LogConfiguration where
+        parseJSON
+          = withObject "LogConfiguration"
+              (\ x ->
+                 LogConfiguration' <$>
+                   (x .:? "options" .!= mempty) <*> (x .: "logDriver"))
+
+instance ToJSON LogConfiguration where
+        toJSON LogConfiguration'{..}
+          = object
+              (catMaybes
+                 [("options" .=) <$> _lcOptions,
+                  Just ("logDriver" .= _lcLogDriver)])
+
 -- | Details on a volume mount point that is used in a container definition.
 --
 -- /See:/ 'mountPoint' smart constructor.
@@ -1070,7 +1543,9 @@
                   ("readOnly" .=) <$> _mpReadOnly])
 
 -- | Details on the network bindings between a container and its host
--- container instance.
+-- container instance. After a task reaches the 'RUNNING' status, manual
+-- and automatic host and container port assignments are visible in the
+-- 'networkBindings' section of DescribeTasks API responses.
 --
 -- /See:/ 'networkBinding' smart constructor.
 data NetworkBinding = NetworkBinding'
@@ -1138,7 +1613,9 @@
 
 -- | 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.
+-- of the container definition. After a task reaches the 'RUNNING' status,
+-- manual and automatic host and container port assignments are visible in
+-- the 'networkBindings' section of DescribeTasks API responses.
 --
 -- /See:/ 'portMapping' smart constructor.
 data PortMapping = PortMapping'
@@ -1173,23 +1650,23 @@
 -- | 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.
+-- specifying a 'containerPort' and your container automatically receives 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.
+-- attempt to specify a host port in the ephemeral port range, because
+-- 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
+-- 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
+-- task is running (after 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
@@ -1199,8 +1676,8 @@
 
 -- | 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').
+-- not a host port, your container automatically receives 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});
 
@@ -1474,6 +1951,7 @@
     , _tdTaskDefinitionARN    :: !(Maybe Text)
     , _tdRevision             :: !(Maybe Int)
     , _tdVolumes              :: !(Maybe [Volume])
+    , _tdRequiresAttributes   :: !(Maybe [Attribute])
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'TaskDefinition' with the minimum fields required to make a request.
@@ -1491,6 +1969,8 @@
 -- * 'tdRevision'
 --
 -- * 'tdVolumes'
+--
+-- * 'tdRequiresAttributes'
 taskDefinition
     :: TaskDefinition
 taskDefinition =
@@ -1501,19 +1981,19 @@
     , _tdTaskDefinitionARN = Nothing
     , _tdRevision = Nothing
     , _tdVolumes = Nothing
+    , _tdRequiresAttributes = 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.
+-- | The family of your task definition, used as the definition name.
 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
+-- different containers that make up your task. For more information about
 -- 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/.
@@ -1524,22 +2004,26 @@
 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).
+-- | The revision of the task in a particular family. The revision is a
+-- version number of a task definition in a family. When you register a
+-- task definition for the first time, the revision is '1'; 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
+-- | The list of volumes in a task. For more information about 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;
 
+-- | The container instance attributes required by your task.
+tdRequiresAttributes :: Lens' TaskDefinition [Attribute]
+tdRequiresAttributes = lens _tdRequiresAttributes (\ s a -> s{_tdRequiresAttributes = a}) . _Default . _Coerce;
+
 instance FromJSON TaskDefinition where
         parseJSON
           = withObject "TaskDefinition"
@@ -1549,7 +2033,8 @@
                      (x .:? "containerDefinitions" .!= mempty)
                      <*> (x .:? "taskDefinitionArn")
                      <*> (x .:? "revision")
-                     <*> (x .:? "volumes" .!= mempty))
+                     <*> (x .:? "volumes" .!= mempty)
+                     <*> (x .:? "requiresAttributes" .!= mempty))
 
 -- | The overrides associated with a task.
 --
@@ -1588,7 +2073,65 @@
                  [("containerOverrides" .=) <$>
                     _toContainerOverrides])
 
--- | The Docker and Amazon ECS container agent version information on a
+-- | The 'ulimit' settings to pass to the container.
+--
+-- /See:/ 'ulimit' smart constructor.
+data Ulimit = Ulimit'
+    { _uName      :: !UlimitName
+    , _uSoftLimit :: !Int
+    , _uHardLimit :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Ulimit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uName'
+--
+-- * 'uSoftLimit'
+--
+-- * 'uHardLimit'
+ulimit
+    :: UlimitName -- ^ 'uName'
+    -> Int -- ^ 'uSoftLimit'
+    -> Int -- ^ 'uHardLimit'
+    -> Ulimit
+ulimit pName_ pSoftLimit_ pHardLimit_ =
+    Ulimit'
+    { _uName = pName_
+    , _uSoftLimit = pSoftLimit_
+    , _uHardLimit = pHardLimit_
+    }
+
+-- | The 'type' of the 'ulimit'.
+uName :: Lens' Ulimit UlimitName
+uName = lens _uName (\ s a -> s{_uName = a});
+
+-- | The soft limit for the ulimit type.
+uSoftLimit :: Lens' Ulimit Int
+uSoftLimit = lens _uSoftLimit (\ s a -> s{_uSoftLimit = a});
+
+-- | The hard limit for the ulimit type.
+uHardLimit :: Lens' Ulimit Int
+uHardLimit = lens _uHardLimit (\ s a -> s{_uHardLimit = a});
+
+instance FromJSON Ulimit where
+        parseJSON
+          = withObject "Ulimit"
+              (\ x ->
+                 Ulimit' <$>
+                   (x .: "name") <*> (x .: "softLimit") <*>
+                     (x .: "hardLimit"))
+
+instance ToJSON Ulimit where
+        toJSON Ulimit'{..}
+          = object
+              (catMaybes
+                 [Just ("name" .= _uName),
+                  Just ("softLimit" .= _uSoftLimit),
+                  Just ("hardLimit" .= _uHardLimit)])
+
+-- | The Docker and Amazon ECS container agent version information about a
 -- container instance.
 --
 -- /See:/ 'versionInfo' smart constructor.
diff --git a/gen/Network/AWS/ECS/Types/Sum.hs b/gen/Network/AWS/ECS/Types/Sum.hs
--- a/gen/Network/AWS/ECS/Types/Sum.hs
+++ b/gen/Network/AWS/ECS/Types/Sum.hs
@@ -84,6 +84,43 @@
 instance ToJSON DesiredStatus where
     toJSON = toJSONText
 
+data LogDriver
+    = Fluentd
+    | Gelf
+    | JSONFile
+    | Journald
+    | Syslog
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText LogDriver where
+    parser = takeLowerText >>= \case
+        "fluentd" -> pure Fluentd
+        "gelf" -> pure Gelf
+        "json-file" -> pure JSONFile
+        "journald" -> pure Journald
+        "syslog" -> pure Syslog
+        e -> fromTextError $ "Failure parsing LogDriver from value: '" <> e
+           <> "'. Accepted values: fluentd, gelf, json-file, journald, syslog"
+
+instance ToText LogDriver where
+    toText = \case
+        Fluentd -> "fluentd"
+        Gelf -> "gelf"
+        JSONFile -> "json-file"
+        Journald -> "journald"
+        Syslog -> "syslog"
+
+instance Hashable     LogDriver
+instance ToByteString LogDriver
+instance ToQuery      LogDriver
+instance ToHeader     LogDriver
+
+instance ToJSON LogDriver where
+    toJSON = toJSONText
+
+instance FromJSON LogDriver where
+    parseJSON = parseJSONText "LogDriver"
+
 data SortOrder
     = Asc
     | Desc
@@ -164,3 +201,70 @@
 
 instance FromJSON TransportProtocol where
     parseJSON = parseJSONText "TransportProtocol"
+
+data UlimitName
+    = CPU
+    | Core
+    | Data
+    | Fsize
+    | Locks
+    | Memlock
+    | Msgqueue
+    | Nice
+    | Nofile
+    | Nproc
+    | Rss
+    | Rtprio
+    | Rttime
+    | Sigpending
+    | Stack
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText UlimitName where
+    parser = takeLowerText >>= \case
+        "cpu" -> pure CPU
+        "core" -> pure Core
+        "data" -> pure Data
+        "fsize" -> pure Fsize
+        "locks" -> pure Locks
+        "memlock" -> pure Memlock
+        "msgqueue" -> pure Msgqueue
+        "nice" -> pure Nice
+        "nofile" -> pure Nofile
+        "nproc" -> pure Nproc
+        "rss" -> pure Rss
+        "rtprio" -> pure Rtprio
+        "rttime" -> pure Rttime
+        "sigpending" -> pure Sigpending
+        "stack" -> pure Stack
+        e -> fromTextError $ "Failure parsing UlimitName from value: '" <> e
+           <> "'. Accepted values: cpu, core, data, fsize, locks, memlock, msgqueue, nice, nofile, nproc, rss, rtprio, rttime, sigpending, stack"
+
+instance ToText UlimitName where
+    toText = \case
+        CPU -> "cpu"
+        Core -> "core"
+        Data -> "data"
+        Fsize -> "fsize"
+        Locks -> "locks"
+        Memlock -> "memlock"
+        Msgqueue -> "msgqueue"
+        Nice -> "nice"
+        Nofile -> "nofile"
+        Nproc -> "nproc"
+        Rss -> "rss"
+        Rtprio -> "rtprio"
+        Rttime -> "rttime"
+        Sigpending -> "sigpending"
+        Stack -> "stack"
+
+instance Hashable     UlimitName
+instance ToByteString UlimitName
+instance ToQuery      UlimitName
+instance ToHeader     UlimitName
+
+instance ToJSON UlimitName where
+    toJSON = toJSONText
+
+instance FromJSON UlimitName where
+    parseJSON = parseJSONText "UlimitName"
diff --git a/gen/Network/AWS/ECS/UpdateContainerAgent.hs b/gen/Network/AWS/ECS/UpdateContainerAgent.hs
--- a/gen/Network/AWS/ECS/UpdateContainerAgent.hs
+++ b/gen/Network/AWS/ECS/UpdateContainerAgent.hs
@@ -83,9 +83,9 @@
 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.
+-- | The container instance ID 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});
 
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
@@ -35,6 +35,13 @@
 -- your service, you can reduce the desired count of your service by one
 -- before modifying the task definition.
 --
+-- When UpdateService replaces a task during an update, the equivalent of
+-- 'docker stop' is issued to the containers running in the task. This
+-- results in a 'SIGTERM' and a 30-second timeout, after which 'SIGKILL' is
+-- sent and the containers are forcibly stopped. If the container handles
+-- the 'SIGTERM' gracefully and exits within 30 seconds from receiving it,
+-- no 'SIGKILL' is sent.
+--
 -- /See:/ <http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html AWS API Reference> for UpdateService.
 module Network.AWS.ECS.UpdateService
     (
@@ -97,21 +104,21 @@
 usCluster :: Lens' UpdateService (Maybe Text)
 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 to place and keep running in
+-- your service.
 usDesiredCount :: Lens' UpdateService (Maybe Int)
 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.
+-- Name (ARN) of the task definition 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.
+-- | The name of the service to update.
 usService :: Lens' UpdateService Text
 usService = lens _usService (\ s a -> s{_usService = a});
 
