diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.0`
+`1.4.1`
 
 
 ## Description
diff --git a/amazonka-redshift.cabal b/amazonka-redshift.cabal
--- a/amazonka-redshift.cabal
+++ b/amazonka-redshift.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-redshift
-version:               1.4.0
+version:               1.4.1
 synopsis:              Amazon Redshift SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -116,6 +116,7 @@
         , Network.AWS.Redshift.EnableLogging
         , Network.AWS.Redshift.EnableSnapshotCopy
         , Network.AWS.Redshift.ModifyCluster
+        , Network.AWS.Redshift.ModifyClusterIAMRoles
         , Network.AWS.Redshift.ModifyClusterParameterGroup
         , Network.AWS.Redshift.ModifyClusterSubnetGroup
         , Network.AWS.Redshift.ModifyEventSubscription
@@ -136,7 +137,7 @@
         , Network.AWS.Redshift.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.0.*
+          amazonka-core == 1.4.1.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-redshift-test
@@ -156,9 +157,9 @@
         , Test.AWS.Redshift.Internal
 
     build-depends:
-          amazonka-core == 1.4.0.*
-        , amazonka-test == 1.4.0.*
-        , amazonka-redshift == 1.4.0.*
+          amazonka-core == 1.4.1.*
+        , amazonka-test == 1.4.1.*
+        , amazonka-redshift == 1.4.1.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/ModifyClusterIAMRoles.yaml b/fixture/ModifyClusterIAMRoles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyClusterIAMRoles.yaml
diff --git a/fixture/ModifyClusterIAMRolesResponse.proto b/fixture/ModifyClusterIAMRolesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyClusterIAMRolesResponse.proto
diff --git a/gen/Network/AWS/Redshift.hs b/gen/Network/AWS/Redshift.hs
--- a/gen/Network/AWS/Redshift.hs
+++ b/gen/Network/AWS/Redshift.hs
@@ -373,6 +373,9 @@
     -- ** ModifySnapshotCopyRetentionPeriod
     , module Network.AWS.Redshift.ModifySnapshotCopyRetentionPeriod
 
+    -- ** ModifyClusterIAMRoles
+    , module Network.AWS.Redshift.ModifyClusterIAMRoles
+
     -- ** AuthorizeSnapshotAccess
     , module Network.AWS.Redshift.AuthorizeSnapshotAccess
 
@@ -537,6 +540,7 @@
     , cAvailabilityZone
     , cVPCSecurityGroups
     , cHSMStatus
+    , cIAMRoles
     , cElasticIPStatus
     , cClusterVersion
     , cNodeType
@@ -549,6 +553,12 @@
     , cClusterNodes
     , cDBName
 
+    -- ** ClusterIAMRole
+    , ClusterIAMRole
+    , clusterIAMRole
+    , cirIAMRoleARN
+    , cirApplyStatus
+
     -- ** ClusterNode
     , ClusterNode
     , clusterNode
@@ -940,6 +950,7 @@
 import           Network.AWS.Redshift.EnableLogging
 import           Network.AWS.Redshift.EnableSnapshotCopy
 import           Network.AWS.Redshift.ModifyCluster
+import           Network.AWS.Redshift.ModifyClusterIAMRoles
 import           Network.AWS.Redshift.ModifyClusterParameterGroup
 import           Network.AWS.Redshift.ModifyClusterSubnetGroup
 import           Network.AWS.Redshift.ModifyEventSubscription
diff --git a/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs b/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs
--- a/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs
+++ b/gen/Network/AWS/Redshift/AuthorizeClusterSecurityGroupIngress.hs
@@ -134,6 +134,8 @@
 instance Hashable
          AuthorizeClusterSecurityGroupIngress
 
+instance NFData AuthorizeClusterSecurityGroupIngress
+
 instance ToHeaders
          AuthorizeClusterSecurityGroupIngress where
         toHeaders = const mempty
@@ -186,3 +188,6 @@
 -- | The response status code.
 acsgirsResponseStatus :: Lens' AuthorizeClusterSecurityGroupIngressResponse Int
 acsgirsResponseStatus = lens _acsgirsResponseStatus (\ s a -> s{_acsgirsResponseStatus = a});
+
+instance NFData
+         AuthorizeClusterSecurityGroupIngressResponse
diff --git a/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs b/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs
--- a/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs
+++ b/gen/Network/AWS/Redshift/AuthorizeSnapshotAccess.hs
@@ -106,6 +106,8 @@
 
 instance Hashable AuthorizeSnapshotAccess
 
+instance NFData AuthorizeSnapshotAccess
+
 instance ToHeaders AuthorizeSnapshotAccess where
         toHeaders = const mempty
 
@@ -153,3 +155,5 @@
 -- | The response status code.
 asarsResponseStatus :: Lens' AuthorizeSnapshotAccessResponse Int
 asarsResponseStatus = lens _asarsResponseStatus (\ s a -> s{_asarsResponseStatus = a});
+
+instance NFData AuthorizeSnapshotAccessResponse
diff --git a/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs b/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/CopyClusterSnapshot.hs
@@ -130,6 +130,8 @@
 
 instance Hashable CopyClusterSnapshot
 
+instance NFData CopyClusterSnapshot
+
 instance ToHeaders CopyClusterSnapshot where
         toHeaders = const mempty
 
@@ -177,3 +179,5 @@
 -- | The response status code.
 ccsrsResponseStatus :: Lens' CopyClusterSnapshotResponse Int
 ccsrsResponseStatus = lens _ccsrsResponseStatus (\ s a -> s{_ccsrsResponseStatus = a});
+
+instance NFData CopyClusterSnapshotResponse
diff --git a/gen/Network/AWS/Redshift/CreateCluster.hs b/gen/Network/AWS/Redshift/CreateCluster.hs
--- a/gen/Network/AWS/Redshift/CreateCluster.hs
+++ b/gen/Network/AWS/Redshift/CreateCluster.hs
@@ -46,6 +46,7 @@
     , ccKMSKeyId
     , ccAvailabilityZone
     , ccVPCSecurityGroupIds
+    , ccIAMRoles
     , ccClusterType
     , ccClusterVersion
     , ccAllowVersionUpgrade
@@ -91,6 +92,7 @@
     , _ccKMSKeyId                         :: !(Maybe Text)
     , _ccAvailabilityZone                 :: !(Maybe Text)
     , _ccVPCSecurityGroupIds              :: !(Maybe [Text])
+    , _ccIAMRoles                         :: !(Maybe [Text])
     , _ccClusterType                      :: !(Maybe Text)
     , _ccClusterVersion                   :: !(Maybe Text)
     , _ccAllowVersionUpgrade              :: !(Maybe Bool)
@@ -136,6 +138,8 @@
 --
 -- * 'ccVPCSecurityGroupIds'
 --
+-- * 'ccIAMRoles'
+--
 -- * 'ccClusterType'
 --
 -- * 'ccClusterVersion'
@@ -179,6 +183,7 @@
     , _ccKMSKeyId = Nothing
     , _ccAvailabilityZone = Nothing
     , _ccVPCSecurityGroupIds = Nothing
+    , _ccIAMRoles = Nothing
     , _ccClusterType = Nothing
     , _ccClusterVersion = Nothing
     , _ccAllowVersionUpgrade = Nothing
@@ -312,6 +317,15 @@
 ccVPCSecurityGroupIds :: Lens' CreateCluster [Text]
 ccVPCSecurityGroupIds = lens _ccVPCSecurityGroupIds (\ s a -> s{_ccVPCSecurityGroupIds = a}) . _Default . _Coerce;
 
+-- | A list of AWS Identity and Access Management (IAM) roles that can be
+-- used by the cluster to access other AWS services. You must supply the
+-- IAM roles in their Amazon Resource Name (ARN) format. You can supply up
+-- to 10 IAM roles in a single request.
+--
+-- A cluster can have up to 10 IAM roles associated at any time.
+ccIAMRoles :: Lens' CreateCluster [Text]
+ccIAMRoles = lens _ccIAMRoles (\ s a -> s{_ccIAMRoles = a}) . _Default . _Coerce;
+
 -- | The type of the cluster. When cluster type is specified as
 --
 -- -   'single-node', the __NumberOfNodes__ parameter is not required.
@@ -462,6 +476,8 @@
 
 instance Hashable CreateCluster
 
+instance NFData CreateCluster
+
 instance ToHeaders CreateCluster where
         toHeaders = const mempty
 
@@ -498,6 +514,8 @@
                  toQuery
                    (toQueryList "VpcSecurityGroupId" <$>
                       _ccVPCSecurityGroupIds),
+               "IamRoles" =:
+                 toQuery (toQueryList "IamRoleArn" <$> _ccIAMRoles),
                "ClusterType" =: _ccClusterType,
                "ClusterVersion" =: _ccClusterVersion,
                "AllowVersionUpgrade" =: _ccAllowVersionUpgrade,
@@ -539,3 +557,5 @@
 -- | The response status code.
 ccrsResponseStatus :: Lens' CreateClusterResponse Int
 ccrsResponseStatus = lens _ccrsResponseStatus (\ s a -> s{_ccrsResponseStatus = a});
+
+instance NFData CreateClusterResponse
diff --git a/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs b/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterParameterGroup.hs
@@ -138,6 +138,8 @@
 
 instance Hashable CreateClusterParameterGroup
 
+instance NFData CreateClusterParameterGroup
+
 instance ToHeaders CreateClusterParameterGroup where
         toHeaders = const mempty
 
@@ -184,3 +186,5 @@
 -- | The response status code.
 ccpgrsResponseStatus :: Lens' CreateClusterParameterGroupResponse Int
 ccpgrsResponseStatus = lens _ccpgrsResponseStatus (\ s a -> s{_ccpgrsResponseStatus = a});
+
+instance NFData CreateClusterParameterGroupResponse
diff --git a/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs b/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs
--- a/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterSecurityGroup.hs
@@ -114,6 +114,8 @@
 
 instance Hashable CreateClusterSecurityGroup
 
+instance NFData CreateClusterSecurityGroup
+
 instance ToHeaders CreateClusterSecurityGroup where
         toHeaders = const mempty
 
@@ -160,3 +162,5 @@
 -- | The response status code.
 crsResponseStatus :: Lens' CreateClusterSecurityGroupResponse Int
 crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});
+
+instance NFData CreateClusterSecurityGroupResponse
diff --git a/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs b/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterSnapshot.hs
@@ -112,6 +112,8 @@
 
 instance Hashable CreateClusterSnapshot
 
+instance NFData CreateClusterSnapshot
+
 instance ToHeaders CreateClusterSnapshot where
         toHeaders = const mempty
 
@@ -156,3 +158,5 @@
 -- | The response status code.
 crersResponseStatus :: Lens' CreateClusterSnapshotResponse Int
 crersResponseStatus = lens _crersResponseStatus (\ s a -> s{_crersResponseStatus = a});
+
+instance NFData CreateClusterSnapshotResponse
diff --git a/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs b/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs
--- a/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs
+++ b/gen/Network/AWS/Redshift/CreateClusterSubnetGroup.hs
@@ -123,6 +123,8 @@
 
 instance Hashable CreateClusterSubnetGroup
 
+instance NFData CreateClusterSubnetGroup
+
 instance ToHeaders CreateClusterSubnetGroup where
         toHeaders = const mempty
 
@@ -171,3 +173,5 @@
 -- | The response status code.
 ccsgrsResponseStatus :: Lens' CreateClusterSubnetGroupResponse Int
 ccsgrsResponseStatus = lens _ccsgrsResponseStatus (\ s a -> s{_ccsgrsResponseStatus = a});
+
+instance NFData CreateClusterSubnetGroupResponse
diff --git a/gen/Network/AWS/Redshift/CreateEventSubscription.hs b/gen/Network/AWS/Redshift/CreateEventSubscription.hs
--- a/gen/Network/AWS/Redshift/CreateEventSubscription.hs
+++ b/gen/Network/AWS/Redshift/CreateEventSubscription.hs
@@ -196,6 +196,8 @@
 
 instance Hashable CreateEventSubscription
 
+instance NFData CreateEventSubscription
+
 instance ToHeaders CreateEventSubscription where
         toHeaders = const mempty
 
@@ -250,3 +252,5 @@
 -- | The response status code.
 cesrsResponseStatus :: Lens' CreateEventSubscriptionResponse Int
 cesrsResponseStatus = lens _cesrsResponseStatus (\ s a -> s{_cesrsResponseStatus = a});
+
+instance NFData CreateEventSubscriptionResponse
diff --git a/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs b/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs
--- a/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs
+++ b/gen/Network/AWS/Redshift/CreateHSMClientCertificate.hs
@@ -101,6 +101,8 @@
 
 instance Hashable CreateHSMClientCertificate
 
+instance NFData CreateHSMClientCertificate
+
 instance ToHeaders CreateHSMClientCertificate where
         toHeaders = const mempty
 
@@ -146,3 +148,5 @@
 -- | The response status code.
 chccrsResponseStatus :: Lens' CreateHSMClientCertificateResponse Int
 chccrsResponseStatus = lens _chccrsResponseStatus (\ s a -> s{_chccrsResponseStatus = a});
+
+instance NFData CreateHSMClientCertificateResponse
diff --git a/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs b/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs
--- a/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs
+++ b/gen/Network/AWS/Redshift/CreateHSMConfiguration.hs
@@ -150,6 +150,8 @@
 
 instance Hashable CreateHSMConfiguration
 
+instance NFData CreateHSMConfiguration
+
 instance ToHeaders CreateHSMConfiguration where
         toHeaders = const mempty
 
@@ -201,3 +203,5 @@
 -- | The response status code.
 chcrsResponseStatus :: Lens' CreateHSMConfigurationResponse Int
 chcrsResponseStatus = lens _chcrsResponseStatus (\ s a -> s{_chcrsResponseStatus = a});
+
+instance NFData CreateHSMConfigurationResponse
diff --git a/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs b/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs
--- a/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs
+++ b/gen/Network/AWS/Redshift/CreateSnapshotCopyGrant.hs
@@ -113,6 +113,8 @@
 
 instance Hashable CreateSnapshotCopyGrant
 
+instance NFData CreateSnapshotCopyGrant
+
 instance ToHeaders CreateSnapshotCopyGrant where
         toHeaders = const mempty
 
@@ -159,3 +161,5 @@
 -- | The response status code.
 cscgrsResponseStatus :: Lens' CreateSnapshotCopyGrantResponse Int
 cscgrsResponseStatus = lens _cscgrsResponseStatus (\ s a -> s{_cscgrsResponseStatus = a});
+
+instance NFData CreateSnapshotCopyGrantResponse
diff --git a/gen/Network/AWS/Redshift/CreateTags.hs b/gen/Network/AWS/Redshift/CreateTags.hs
--- a/gen/Network/AWS/Redshift/CreateTags.hs
+++ b/gen/Network/AWS/Redshift/CreateTags.hs
@@ -92,6 +92,8 @@
 
 instance Hashable CreateTags
 
+instance NFData CreateTags
+
 instance ToHeaders CreateTags where
         toHeaders = const mempty
 
@@ -116,3 +118,5 @@
 createTagsResponse
     :: CreateTagsResponse
 createTagsResponse = CreateTagsResponse'
+
+instance NFData CreateTagsResponse
diff --git a/gen/Network/AWS/Redshift/DeleteCluster.hs b/gen/Network/AWS/Redshift/DeleteCluster.hs
--- a/gen/Network/AWS/Redshift/DeleteCluster.hs
+++ b/gen/Network/AWS/Redshift/DeleteCluster.hs
@@ -136,6 +136,8 @@
 
 instance Hashable DeleteCluster
 
+instance NFData DeleteCluster
+
 instance ToHeaders DeleteCluster where
         toHeaders = const mempty
 
@@ -182,3 +184,5 @@
 -- | The response status code.
 drsResponseStatus :: Lens' DeleteClusterResponse Int
 drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+
+instance NFData DeleteClusterResponse
diff --git a/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs b/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterParameterGroup.hs
@@ -78,6 +78,8 @@
 
 instance Hashable DeleteClusterParameterGroup
 
+instance NFData DeleteClusterParameterGroup
+
 instance ToHeaders DeleteClusterParameterGroup where
         toHeaders = const mempty
 
@@ -102,3 +104,5 @@
 deleteClusterParameterGroupResponse
     :: DeleteClusterParameterGroupResponse
 deleteClusterParameterGroupResponse = DeleteClusterParameterGroupResponse'
+
+instance NFData DeleteClusterParameterGroupResponse
diff --git a/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs b/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterSecurityGroup.hs
@@ -79,6 +79,8 @@
 
 instance Hashable DeleteClusterSecurityGroup
 
+instance NFData DeleteClusterSecurityGroup
+
 instance ToHeaders DeleteClusterSecurityGroup where
         toHeaders = const mempty
 
@@ -104,3 +106,5 @@
 deleteClusterSecurityGroupResponse
     :: DeleteClusterSecurityGroupResponse
 deleteClusterSecurityGroupResponse = DeleteClusterSecurityGroupResponse'
+
+instance NFData DeleteClusterSecurityGroupResponse
diff --git a/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs b/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterSnapshot.hs
@@ -104,6 +104,8 @@
 
 instance Hashable DeleteClusterSnapshot
 
+instance NFData DeleteClusterSnapshot
+
 instance ToHeaders DeleteClusterSnapshot where
         toHeaders = const mempty
 
@@ -148,3 +150,5 @@
 -- | The response status code.
 dcsrsResponseStatus :: Lens' DeleteClusterSnapshotResponse Int
 dcsrsResponseStatus = lens _dcsrsResponseStatus (\ s a -> s{_dcsrsResponseStatus = a});
+
+instance NFData DeleteClusterSnapshotResponse
diff --git a/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs b/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs
--- a/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs
+++ b/gen/Network/AWS/Redshift/DeleteClusterSubnetGroup.hs
@@ -72,6 +72,8 @@
 
 instance Hashable DeleteClusterSubnetGroup
 
+instance NFData DeleteClusterSubnetGroup
+
 instance ToHeaders DeleteClusterSubnetGroup where
         toHeaders = const mempty
 
@@ -97,3 +99,5 @@
 deleteClusterSubnetGroupResponse
     :: DeleteClusterSubnetGroupResponse
 deleteClusterSubnetGroupResponse = DeleteClusterSubnetGroupResponse'
+
+instance NFData DeleteClusterSubnetGroupResponse
diff --git a/gen/Network/AWS/Redshift/DeleteEventSubscription.hs b/gen/Network/AWS/Redshift/DeleteEventSubscription.hs
--- a/gen/Network/AWS/Redshift/DeleteEventSubscription.hs
+++ b/gen/Network/AWS/Redshift/DeleteEventSubscription.hs
@@ -73,6 +73,8 @@
 
 instance Hashable DeleteEventSubscription
 
+instance NFData DeleteEventSubscription
+
 instance ToHeaders DeleteEventSubscription where
         toHeaders = const mempty
 
@@ -97,3 +99,5 @@
 deleteEventSubscriptionResponse
     :: DeleteEventSubscriptionResponse
 deleteEventSubscriptionResponse = DeleteEventSubscriptionResponse'
+
+instance NFData DeleteEventSubscriptionResponse
diff --git a/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs b/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs
--- a/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs
+++ b/gen/Network/AWS/Redshift/DeleteHSMClientCertificate.hs
@@ -72,6 +72,8 @@
 
 instance Hashable DeleteHSMClientCertificate
 
+instance NFData DeleteHSMClientCertificate
+
 instance ToHeaders DeleteHSMClientCertificate where
         toHeaders = const mempty
 
@@ -97,3 +99,5 @@
 deleteHSMClientCertificateResponse
     :: DeleteHSMClientCertificateResponse
 deleteHSMClientCertificateResponse = DeleteHSMClientCertificateResponse'
+
+instance NFData DeleteHSMClientCertificateResponse
diff --git a/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs b/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs
--- a/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs
+++ b/gen/Network/AWS/Redshift/DeleteHSMConfiguration.hs
@@ -72,6 +72,8 @@
 
 instance Hashable DeleteHSMConfiguration
 
+instance NFData DeleteHSMConfiguration
+
 instance ToHeaders DeleteHSMConfiguration where
         toHeaders = const mempty
 
@@ -97,3 +99,5 @@
 deleteHSMConfigurationResponse
     :: DeleteHSMConfigurationResponse
 deleteHSMConfigurationResponse = DeleteHSMConfigurationResponse'
+
+instance NFData DeleteHSMConfigurationResponse
diff --git a/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs b/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs
--- a/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs
+++ b/gen/Network/AWS/Redshift/DeleteSnapshotCopyGrant.hs
@@ -72,6 +72,8 @@
 
 instance Hashable DeleteSnapshotCopyGrant
 
+instance NFData DeleteSnapshotCopyGrant
+
 instance ToHeaders DeleteSnapshotCopyGrant where
         toHeaders = const mempty
 
@@ -97,3 +99,5 @@
 deleteSnapshotCopyGrantResponse
     :: DeleteSnapshotCopyGrantResponse
 deleteSnapshotCopyGrantResponse = DeleteSnapshotCopyGrantResponse'
+
+instance NFData DeleteSnapshotCopyGrantResponse
diff --git a/gen/Network/AWS/Redshift/DeleteTags.hs b/gen/Network/AWS/Redshift/DeleteTags.hs
--- a/gen/Network/AWS/Redshift/DeleteTags.hs
+++ b/gen/Network/AWS/Redshift/DeleteTags.hs
@@ -81,6 +81,8 @@
 
 instance Hashable DeleteTags
 
+instance NFData DeleteTags
+
 instance ToHeaders DeleteTags where
         toHeaders = const mempty
 
@@ -105,3 +107,5 @@
 deleteTagsResponse
     :: DeleteTagsResponse
 deleteTagsResponse = DeleteTagsResponse'
+
+instance NFData DeleteTagsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs b/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterParameterGroups.hs
@@ -176,6 +176,8 @@
 
 instance Hashable DescribeClusterParameterGroups
 
+instance NFData DescribeClusterParameterGroups
+
 instance ToHeaders DescribeClusterParameterGroups
          where
         toHeaders = const mempty
@@ -242,3 +244,6 @@
 -- | The response status code.
 dcpgrsResponseStatus :: Lens' DescribeClusterParameterGroupsResponse Int
 dcpgrsResponseStatus = lens _dcpgrsResponseStatus (\ s a -> s{_dcpgrsResponseStatus = a});
+
+instance NFData
+         DescribeClusterParameterGroupsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusterParameters.hs b/gen/Network/AWS/Redshift/DescribeClusterParameters.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterParameters.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterParameters.hs
@@ -148,6 +148,8 @@
 
 instance Hashable DescribeClusterParameters
 
+instance NFData DescribeClusterParameters
+
 instance ToHeaders DescribeClusterParameters where
         toHeaders = const mempty
 
@@ -210,3 +212,5 @@
 -- | The response status code.
 dcprsResponseStatus :: Lens' DescribeClusterParametersResponse Int
 dcprsResponseStatus = lens _dcprsResponseStatus (\ s a -> s{_dcprsResponseStatus = a});
+
+instance NFData DescribeClusterParametersResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs b/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterSecurityGroups.hs
@@ -177,6 +177,8 @@
 
 instance Hashable DescribeClusterSecurityGroups
 
+instance NFData DescribeClusterSecurityGroups
+
 instance ToHeaders DescribeClusterSecurityGroups
          where
         toHeaders = const mempty
@@ -243,3 +245,5 @@
 -- | The response status code.
 dcsgsrsResponseStatus :: Lens' DescribeClusterSecurityGroupsResponse Int
 dcsgsrsResponseStatus = lens _dcsgsrsResponseStatus (\ s a -> s{_dcsgsrsResponseStatus = a});
+
+instance NFData DescribeClusterSecurityGroupsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs b/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterSnapshots.hs
@@ -229,6 +229,8 @@
 
 instance Hashable DescribeClusterSnapshots
 
+instance NFData DescribeClusterSnapshots
+
 instance ToHeaders DescribeClusterSnapshots where
         toHeaders = const mempty
 
@@ -297,3 +299,5 @@
 -- | The response status code.
 dcssrsResponseStatus :: Lens' DescribeClusterSnapshotsResponse Int
 dcssrsResponseStatus = lens _dcssrsResponseStatus (\ s a -> s{_dcssrsResponseStatus = a});
+
+instance NFData DescribeClusterSnapshotsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs b/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterSubnetGroups.hs
@@ -166,6 +166,8 @@
 
 instance Hashable DescribeClusterSubnetGroups
 
+instance NFData DescribeClusterSubnetGroups
+
 instance ToHeaders DescribeClusterSubnetGroups where
         toHeaders = const mempty
 
@@ -231,3 +233,5 @@
 -- | The response status code.
 dcsgrsResponseStatus :: Lens' DescribeClusterSubnetGroupsResponse Int
 dcsgrsResponseStatus = lens _dcsgrsResponseStatus (\ s a -> s{_dcsgrsResponseStatus = a});
+
+instance NFData DescribeClusterSubnetGroupsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusterVersions.hs b/gen/Network/AWS/Redshift/DescribeClusterVersions.hs
--- a/gen/Network/AWS/Redshift/DescribeClusterVersions.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusterVersions.hs
@@ -145,6 +145,8 @@
 
 instance Hashable DescribeClusterVersions
 
+instance NFData DescribeClusterVersions
+
 instance ToHeaders DescribeClusterVersions where
         toHeaders = const mempty
 
@@ -207,3 +209,5 @@
 -- | The response status code.
 dcvrsResponseStatus :: Lens' DescribeClusterVersionsResponse Int
 dcvrsResponseStatus = lens _dcvrsResponseStatus (\ s a -> s{_dcvrsResponseStatus = a});
+
+instance NFData DescribeClusterVersionsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeClusters.hs b/gen/Network/AWS/Redshift/DescribeClusters.hs
--- a/gen/Network/AWS/Redshift/DescribeClusters.hs
+++ b/gen/Network/AWS/Redshift/DescribeClusters.hs
@@ -170,6 +170,8 @@
 
 instance Hashable DescribeClusters
 
+instance NFData DescribeClusters
+
 instance ToHeaders DescribeClusters where
         toHeaders = const mempty
 
@@ -232,3 +234,5 @@
 -- | The response status code.
 dcrsResponseStatus :: Lens' DescribeClustersResponse Int
 dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a});
+
+instance NFData DescribeClustersResponse
diff --git a/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs b/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs
--- a/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs
+++ b/gen/Network/AWS/Redshift/DescribeDefaultClusterParameters.hs
@@ -138,6 +138,8 @@
 
 instance Hashable DescribeDefaultClusterParameters
 
+instance NFData DescribeDefaultClusterParameters
+
 instance ToHeaders DescribeDefaultClusterParameters
          where
         toHeaders = const mempty
@@ -187,3 +189,6 @@
 -- | Undocumented member.
 ddcprsDefaultClusterParameters :: Lens' DescribeDefaultClusterParametersResponse DefaultClusterParameters
 ddcprsDefaultClusterParameters = lens _ddcprsDefaultClusterParameters (\ s a -> s{_ddcprsDefaultClusterParameters = a});
+
+instance NFData
+         DescribeDefaultClusterParametersResponse
diff --git a/gen/Network/AWS/Redshift/DescribeEventCategories.hs b/gen/Network/AWS/Redshift/DescribeEventCategories.hs
--- a/gen/Network/AWS/Redshift/DescribeEventCategories.hs
+++ b/gen/Network/AWS/Redshift/DescribeEventCategories.hs
@@ -86,6 +86,8 @@
 
 instance Hashable DescribeEventCategories
 
+instance NFData DescribeEventCategories
+
 instance ToHeaders DescribeEventCategories where
         toHeaders = const mempty
 
@@ -131,3 +133,5 @@
 -- | The response status code.
 decrsResponseStatus :: Lens' DescribeEventCategoriesResponse Int
 decrsResponseStatus = lens _decrsResponseStatus (\ s a -> s{_decrsResponseStatus = a});
+
+instance NFData DescribeEventCategoriesResponse
diff --git a/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs b/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs
--- a/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs
+++ b/gen/Network/AWS/Redshift/DescribeEventSubscriptions.hs
@@ -126,6 +126,8 @@
 
 instance Hashable DescribeEventSubscriptions
 
+instance NFData DescribeEventSubscriptions
+
 instance ToHeaders DescribeEventSubscriptions where
         toHeaders = const mempty
 
@@ -186,3 +188,5 @@
 -- | The response status code.
 desrsResponseStatus :: Lens' DescribeEventSubscriptionsResponse Int
 desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a});
+
+instance NFData DescribeEventSubscriptionsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeEvents.hs b/gen/Network/AWS/Redshift/DescribeEvents.hs
--- a/gen/Network/AWS/Redshift/DescribeEvents.hs
+++ b/gen/Network/AWS/Redshift/DescribeEvents.hs
@@ -201,6 +201,8 @@
 
 instance Hashable DescribeEvents
 
+instance NFData DescribeEvents
+
 instance ToHeaders DescribeEvents where
         toHeaders = const mempty
 
@@ -262,3 +264,5 @@
 -- | The response status code.
 dersResponseStatus :: Lens' DescribeEventsResponse Int
 dersResponseStatus = lens _dersResponseStatus (\ s a -> s{_dersResponseStatus = a});
+
+instance NFData DescribeEventsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs b/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs
--- a/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs
+++ b/gen/Network/AWS/Redshift/DescribeHSMClientCertificates.hs
@@ -170,6 +170,8 @@
 
 instance Hashable DescribeHSMClientCertificates
 
+instance NFData DescribeHSMClientCertificates
+
 instance ToHeaders DescribeHSMClientCertificates
          where
         toHeaders = const mempty
@@ -238,3 +240,5 @@
 -- | The response status code.
 dhccrsResponseStatus :: Lens' DescribeHSMClientCertificatesResponse Int
 dhccrsResponseStatus = lens _dhccrsResponseStatus (\ s a -> s{_dhccrsResponseStatus = a});
+
+instance NFData DescribeHSMClientCertificatesResponse
diff --git a/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs b/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs
--- a/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs
+++ b/gen/Network/AWS/Redshift/DescribeHSMConfigurations.hs
@@ -166,6 +166,8 @@
 
 instance Hashable DescribeHSMConfigurations
 
+instance NFData DescribeHSMConfigurations
+
 instance ToHeaders DescribeHSMConfigurations where
         toHeaders = const mempty
 
@@ -231,3 +233,5 @@
 -- | The response status code.
 dhcrsResponseStatus :: Lens' DescribeHSMConfigurationsResponse Int
 dhcrsResponseStatus = lens _dhcrsResponseStatus (\ s a -> s{_dhcrsResponseStatus = a});
+
+instance NFData DescribeHSMConfigurationsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs b/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs
--- a/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs
+++ b/gen/Network/AWS/Redshift/DescribeLoggingStatus.hs
@@ -82,6 +82,8 @@
 
 instance Hashable DescribeLoggingStatus
 
+instance NFData DescribeLoggingStatus
+
 instance ToHeaders DescribeLoggingStatus where
         toHeaders = const mempty
 
diff --git a/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs b/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs
--- a/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs
+++ b/gen/Network/AWS/Redshift/DescribeOrderableClusterOptions.hs
@@ -152,6 +152,8 @@
 
 instance Hashable DescribeOrderableClusterOptions
 
+instance NFData DescribeOrderableClusterOptions
+
 instance ToHeaders DescribeOrderableClusterOptions
          where
         toHeaders = const mempty
@@ -216,3 +218,6 @@
 -- | The response status code.
 docorsResponseStatus :: Lens' DescribeOrderableClusterOptionsResponse Int
 docorsResponseStatus = lens _docorsResponseStatus (\ s a -> s{_docorsResponseStatus = a});
+
+instance NFData
+         DescribeOrderableClusterOptionsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs b/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs
--- a/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs
+++ b/gen/Network/AWS/Redshift/DescribeReservedNodeOfferings.hs
@@ -135,6 +135,8 @@
 
 instance Hashable DescribeReservedNodeOfferings
 
+instance NFData DescribeReservedNodeOfferings
+
 instance ToHeaders DescribeReservedNodeOfferings
          where
         toHeaders = const mempty
@@ -197,3 +199,5 @@
 -- | The response status code.
 drnorsResponseStatus :: Lens' DescribeReservedNodeOfferingsResponse Int
 drnorsResponseStatus = lens _drnorsResponseStatus (\ s a -> s{_drnorsResponseStatus = a});
+
+instance NFData DescribeReservedNodeOfferingsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeReservedNodes.hs b/gen/Network/AWS/Redshift/DescribeReservedNodes.hs
--- a/gen/Network/AWS/Redshift/DescribeReservedNodes.hs
+++ b/gen/Network/AWS/Redshift/DescribeReservedNodes.hs
@@ -122,6 +122,8 @@
 
 instance Hashable DescribeReservedNodes
 
+instance NFData DescribeReservedNodes
+
 instance ToHeaders DescribeReservedNodes where
         toHeaders = const mempty
 
@@ -181,3 +183,5 @@
 -- | The response status code.
 drnrsResponseStatus :: Lens' DescribeReservedNodesResponse Int
 drnrsResponseStatus = lens _drnrsResponseStatus (\ s a -> s{_drnrsResponseStatus = a});
+
+instance NFData DescribeReservedNodesResponse
diff --git a/gen/Network/AWS/Redshift/DescribeResize.hs b/gen/Network/AWS/Redshift/DescribeResize.hs
--- a/gen/Network/AWS/Redshift/DescribeResize.hs
+++ b/gen/Network/AWS/Redshift/DescribeResize.hs
@@ -116,6 +116,8 @@
 
 instance Hashable DescribeResize
 
+instance NFData DescribeResize
+
 instance ToHeaders DescribeResize where
         toHeaders = const mempty
 
@@ -273,3 +275,5 @@
 -- | The response status code.
 drrsResponseStatus :: Lens' DescribeResizeResponse Int
 drrsResponseStatus = lens _drrsResponseStatus (\ s a -> s{_drrsResponseStatus = a});
+
+instance NFData DescribeResizeResponse
diff --git a/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs b/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs
--- a/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs
+++ b/gen/Network/AWS/Redshift/DescribeSnapshotCopyGrants.hs
@@ -149,6 +149,8 @@
 
 instance Hashable DescribeSnapshotCopyGrants
 
+instance NFData DescribeSnapshotCopyGrants
+
 instance ToHeaders DescribeSnapshotCopyGrants where
         toHeaders = const mempty
 
@@ -217,3 +219,5 @@
 -- | The response status code.
 dscgrsResponseStatus :: Lens' DescribeSnapshotCopyGrantsResponse Int
 dscgrsResponseStatus = lens _dscgrsResponseStatus (\ s a -> s{_dscgrsResponseStatus = a});
+
+instance NFData DescribeSnapshotCopyGrantsResponse
diff --git a/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs b/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs
--- a/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs
+++ b/gen/Network/AWS/Redshift/DescribeTableRestoreStatus.hs
@@ -21,9 +21,10 @@
 -- Lists the status of one or more table restore requests made using the
 -- < RestoreTableFromClusterSnapshot> API action. If you don\'t specify a
 -- value for the 'TableRestoreRequestId' parameter, then
--- 'DescribeTableRestoreStatus' returns the status of all in-progress table
--- restore requests. Otherwise 'DescribeTableRestoreStatus' returns the
--- status of the table specified by 'TableRestoreRequestId'.
+-- 'DescribeTableRestoreStatus' returns the status of all table restore
+-- requests ordered by the date and time of the request in ascending order.
+-- Otherwise 'DescribeTableRestoreStatus' returns the status of the table
+-- specified by 'TableRestoreRequestId'.
 module Network.AWS.Redshift.DescribeTableRestoreStatus
     (
     -- * Creating a Request
@@ -121,6 +122,8 @@
 
 instance Hashable DescribeTableRestoreStatus
 
+instance NFData DescribeTableRestoreStatus
+
 instance ToHeaders DescribeTableRestoreStatus where
         toHeaders = const mempty
 
@@ -177,3 +180,5 @@
 -- | The response status code.
 dtrsrsResponseStatus :: Lens' DescribeTableRestoreStatusResponse Int
 dtrsrsResponseStatus = lens _dtrsrsResponseStatus (\ s a -> s{_dtrsrsResponseStatus = a});
+
+instance NFData DescribeTableRestoreStatusResponse
diff --git a/gen/Network/AWS/Redshift/DescribeTags.hs b/gen/Network/AWS/Redshift/DescribeTags.hs
--- a/gen/Network/AWS/Redshift/DescribeTags.hs
+++ b/gen/Network/AWS/Redshift/DescribeTags.hs
@@ -183,6 +183,8 @@
 
 instance Hashable DescribeTags
 
+instance NFData DescribeTags
+
 instance ToHeaders DescribeTags where
         toHeaders = const mempty
 
@@ -246,3 +248,5 @@
 -- | The response status code.
 dtrsResponseStatus :: Lens' DescribeTagsResponse Int
 dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a});
+
+instance NFData DescribeTagsResponse
diff --git a/gen/Network/AWS/Redshift/DisableLogging.hs b/gen/Network/AWS/Redshift/DisableLogging.hs
--- a/gen/Network/AWS/Redshift/DisableLogging.hs
+++ b/gen/Network/AWS/Redshift/DisableLogging.hs
@@ -82,6 +82,8 @@
 
 instance Hashable DisableLogging
 
+instance NFData DisableLogging
+
 instance ToHeaders DisableLogging where
         toHeaders = const mempty
 
diff --git a/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs b/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs
--- a/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs
+++ b/gen/Network/AWS/Redshift/DisableSnapshotCopy.hs
@@ -88,6 +88,8 @@
 
 instance Hashable DisableSnapshotCopy
 
+instance NFData DisableSnapshotCopy
+
 instance ToHeaders DisableSnapshotCopy where
         toHeaders = const mempty
 
@@ -130,3 +132,5 @@
 -- | The response status code.
 dscrsResponseStatus :: Lens' DisableSnapshotCopyResponse Int
 dscrsResponseStatus = lens _dscrsResponseStatus (\ s a -> s{_dscrsResponseStatus = a});
+
+instance NFData DisableSnapshotCopyResponse
diff --git a/gen/Network/AWS/Redshift/EnableLogging.hs b/gen/Network/AWS/Redshift/EnableLogging.hs
--- a/gen/Network/AWS/Redshift/EnableLogging.hs
+++ b/gen/Network/AWS/Redshift/EnableLogging.hs
@@ -118,6 +118,8 @@
 
 instance Hashable EnableLogging
 
+instance NFData EnableLogging
+
 instance ToHeaders EnableLogging where
         toHeaders = const mempty
 
diff --git a/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs b/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs
--- a/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs
+++ b/gen/Network/AWS/Redshift/EnableSnapshotCopy.hs
@@ -121,6 +121,8 @@
 
 instance Hashable EnableSnapshotCopy
 
+instance NFData EnableSnapshotCopy
+
 instance ToHeaders EnableSnapshotCopy where
         toHeaders = const mempty
 
@@ -166,3 +168,5 @@
 -- | The response status code.
 escrsResponseStatus :: Lens' EnableSnapshotCopyResponse Int
 escrsResponseStatus = lens _escrsResponseStatus (\ s a -> s{_escrsResponseStatus = a});
+
+instance NFData EnableSnapshotCopyResponse
diff --git a/gen/Network/AWS/Redshift/ModifyCluster.hs b/gen/Network/AWS/Redshift/ModifyCluster.hs
--- a/gen/Network/AWS/Redshift/ModifyCluster.hs
+++ b/gen/Network/AWS/Redshift/ModifyCluster.hs
@@ -367,6 +367,8 @@
 
 instance Hashable ModifyCluster
 
+instance NFData ModifyCluster
+
 instance ToHeaders ModifyCluster where
         toHeaders = const mempty
 
@@ -436,3 +438,5 @@
 -- | The response status code.
 mcrsResponseStatus :: Lens' ModifyClusterResponse Int
 mcrsResponseStatus = lens _mcrsResponseStatus (\ s a -> s{_mcrsResponseStatus = a});
+
+instance NFData ModifyClusterResponse
diff --git a/gen/Network/AWS/Redshift/ModifyClusterIAMRoles.hs b/gen/Network/AWS/Redshift/ModifyClusterIAMRoles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Redshift/ModifyClusterIAMRoles.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Redshift.ModifyClusterIAMRoles
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the list of AWS Identity and Access Management (IAM) roles that
+-- can be used by the cluster to access other AWS services.
+--
+-- A cluster can have up to 10 IAM roles associated at any time.
+module Network.AWS.Redshift.ModifyClusterIAMRoles
+    (
+    -- * Creating a Request
+      modifyClusterIAMRoles
+    , ModifyClusterIAMRoles
+    -- * Request Lenses
+    , mcirRemoveIAMRoles
+    , mcirAddIAMRoles
+    , mcirClusterIdentifier
+
+    -- * Destructuring the Response
+    , modifyClusterIAMRolesResponse
+    , ModifyClusterIAMRolesResponse
+    -- * Response Lenses
+    , mcirrsCluster
+    , mcirrsResponseStatus
+    ) where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Redshift.Types
+import           Network.AWS.Redshift.Types.Product
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- |
+--
+-- /See:/ 'modifyClusterIAMRoles' smart constructor.
+data ModifyClusterIAMRoles = ModifyClusterIAMRoles'
+    { _mcirRemoveIAMRoles    :: !(Maybe [Text])
+    , _mcirAddIAMRoles       :: !(Maybe [Text])
+    , _mcirClusterIdentifier :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyClusterIAMRoles' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcirRemoveIAMRoles'
+--
+-- * 'mcirAddIAMRoles'
+--
+-- * 'mcirClusterIdentifier'
+modifyClusterIAMRoles
+    :: Text -- ^ 'mcirClusterIdentifier'
+    -> ModifyClusterIAMRoles
+modifyClusterIAMRoles pClusterIdentifier_ =
+    ModifyClusterIAMRoles'
+    { _mcirRemoveIAMRoles = Nothing
+    , _mcirAddIAMRoles = Nothing
+    , _mcirClusterIdentifier = pClusterIdentifier_
+    }
+
+-- | Zero or more IAM roles (in their ARN format) to disassociate from the
+-- cluster. You can disassociate up to 10 IAM roles from a single cluster
+-- in a single request.
+mcirRemoveIAMRoles :: Lens' ModifyClusterIAMRoles [Text]
+mcirRemoveIAMRoles = lens _mcirRemoveIAMRoles (\ s a -> s{_mcirRemoveIAMRoles = a}) . _Default . _Coerce;
+
+-- | Zero or more IAM roles (in their ARN format) to associate with the
+-- cluster. You can associate up to 10 IAM roles with a single cluster in a
+-- single request.
+mcirAddIAMRoles :: Lens' ModifyClusterIAMRoles [Text]
+mcirAddIAMRoles = lens _mcirAddIAMRoles (\ s a -> s{_mcirAddIAMRoles = a}) . _Default . _Coerce;
+
+-- | The unique identifier of the cluster for which you want to associate or
+-- disassociate IAM roles.
+mcirClusterIdentifier :: Lens' ModifyClusterIAMRoles Text
+mcirClusterIdentifier = lens _mcirClusterIdentifier (\ s a -> s{_mcirClusterIdentifier = a});
+
+instance AWSRequest ModifyClusterIAMRoles where
+        type Rs ModifyClusterIAMRoles =
+             ModifyClusterIAMRolesResponse
+        request = postQuery redshift
+        response
+          = receiveXMLWrapper "ModifyClusterIamRolesResult"
+              (\ s h x ->
+                 ModifyClusterIAMRolesResponse' <$>
+                   (x .@? "Cluster") <*> (pure (fromEnum s)))
+
+instance Hashable ModifyClusterIAMRoles
+
+instance NFData ModifyClusterIAMRoles
+
+instance ToHeaders ModifyClusterIAMRoles where
+        toHeaders = const mempty
+
+instance ToPath ModifyClusterIAMRoles where
+        toPath = const "/"
+
+instance ToQuery ModifyClusterIAMRoles where
+        toQuery ModifyClusterIAMRoles'{..}
+          = mconcat
+              ["Action" =: ("ModifyClusterIamRoles" :: ByteString),
+               "Version" =: ("2012-12-01" :: ByteString),
+               "RemoveIamRoles" =:
+                 toQuery
+                   (toQueryList "IamRoleArn" <$> _mcirRemoveIAMRoles),
+               "AddIamRoles" =:
+                 toQuery
+                   (toQueryList "IamRoleArn" <$> _mcirAddIAMRoles),
+               "ClusterIdentifier" =: _mcirClusterIdentifier]
+
+-- | /See:/ 'modifyClusterIAMRolesResponse' smart constructor.
+data ModifyClusterIAMRolesResponse = ModifyClusterIAMRolesResponse'
+    { _mcirrsCluster        :: !(Maybe Cluster)
+    , _mcirrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyClusterIAMRolesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcirrsCluster'
+--
+-- * 'mcirrsResponseStatus'
+modifyClusterIAMRolesResponse
+    :: Int -- ^ 'mcirrsResponseStatus'
+    -> ModifyClusterIAMRolesResponse
+modifyClusterIAMRolesResponse pResponseStatus_ =
+    ModifyClusterIAMRolesResponse'
+    { _mcirrsCluster = Nothing
+    , _mcirrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+mcirrsCluster :: Lens' ModifyClusterIAMRolesResponse (Maybe Cluster)
+mcirrsCluster = lens _mcirrsCluster (\ s a -> s{_mcirrsCluster = a});
+
+-- | The response status code.
+mcirrsResponseStatus :: Lens' ModifyClusterIAMRolesResponse Int
+mcirrsResponseStatus = lens _mcirrsResponseStatus (\ s a -> s{_mcirrsResponseStatus = a});
+
+instance NFData ModifyClusterIAMRolesResponse
diff --git a/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs b/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/ModifyClusterParameterGroup.hs
@@ -98,6 +98,8 @@
 
 instance Hashable ModifyClusterParameterGroup
 
+instance NFData ModifyClusterParameterGroup
+
 instance ToHeaders ModifyClusterParameterGroup where
         toHeaders = const mempty
 
diff --git a/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs b/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs
--- a/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs
+++ b/gen/Network/AWS/Redshift/ModifyClusterSubnetGroup.hs
@@ -99,6 +99,8 @@
 
 instance Hashable ModifyClusterSubnetGroup
 
+instance NFData ModifyClusterSubnetGroup
+
 instance ToHeaders ModifyClusterSubnetGroup where
         toHeaders = const mempty
 
@@ -146,3 +148,5 @@
 -- | The response status code.
 mcsgrsResponseStatus :: Lens' ModifyClusterSubnetGroupResponse Int
 mcsgrsResponseStatus = lens _mcsgrsResponseStatus (\ s a -> s{_mcsgrsResponseStatus = a});
+
+instance NFData ModifyClusterSubnetGroupResponse
diff --git a/gen/Network/AWS/Redshift/ModifyEventSubscription.hs b/gen/Network/AWS/Redshift/ModifyEventSubscription.hs
--- a/gen/Network/AWS/Redshift/ModifyEventSubscription.hs
+++ b/gen/Network/AWS/Redshift/ModifyEventSubscription.hs
@@ -156,6 +156,8 @@
 
 instance Hashable ModifyEventSubscription
 
+instance NFData ModifyEventSubscription
+
 instance ToHeaders ModifyEventSubscription where
         toHeaders = const mempty
 
@@ -209,3 +211,5 @@
 -- | The response status code.
 mesrsResponseStatus :: Lens' ModifyEventSubscriptionResponse Int
 mesrsResponseStatus = lens _mesrsResponseStatus (\ s a -> s{_mesrsResponseStatus = a});
+
+instance NFData ModifyEventSubscriptionResponse
diff --git a/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs b/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs
--- a/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs
+++ b/gen/Network/AWS/Redshift/ModifySnapshotCopyRetentionPeriod.hs
@@ -104,6 +104,8 @@
 
 instance Hashable ModifySnapshotCopyRetentionPeriod
 
+instance NFData ModifySnapshotCopyRetentionPeriod
+
 instance ToHeaders ModifySnapshotCopyRetentionPeriod
          where
         toHeaders = const mempty
@@ -151,3 +153,6 @@
 -- | The response status code.
 mscrprsResponseStatus :: Lens' ModifySnapshotCopyRetentionPeriodResponse Int
 mscrprsResponseStatus = lens _mscrprsResponseStatus (\ s a -> s{_mscrprsResponseStatus = a});
+
+instance NFData
+         ModifySnapshotCopyRetentionPeriodResponse
diff --git a/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs b/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs
--- a/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs
+++ b/gen/Network/AWS/Redshift/PurchaseReservedNodeOffering.hs
@@ -101,6 +101,8 @@
 
 instance Hashable PurchaseReservedNodeOffering
 
+instance NFData PurchaseReservedNodeOffering
+
 instance ToHeaders PurchaseReservedNodeOffering where
         toHeaders = const mempty
 
@@ -146,3 +148,5 @@
 -- | The response status code.
 prnorsResponseStatus :: Lens' PurchaseReservedNodeOfferingResponse Int
 prnorsResponseStatus = lens _prnorsResponseStatus (\ s a -> s{_prnorsResponseStatus = a});
+
+instance NFData PurchaseReservedNodeOfferingResponse
diff --git a/gen/Network/AWS/Redshift/RebootCluster.hs b/gen/Network/AWS/Redshift/RebootCluster.hs
--- a/gen/Network/AWS/Redshift/RebootCluster.hs
+++ b/gen/Network/AWS/Redshift/RebootCluster.hs
@@ -84,6 +84,8 @@
 
 instance Hashable RebootCluster
 
+instance NFData RebootCluster
+
 instance ToHeaders RebootCluster where
         toHeaders = const mempty
 
@@ -126,3 +128,5 @@
 -- | The response status code.
 rcrsResponseStatus :: Lens' RebootClusterResponse Int
 rcrsResponseStatus = lens _rcrsResponseStatus (\ s a -> s{_rcrsResponseStatus = a});
+
+instance NFData RebootClusterResponse
diff --git a/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs b/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs
--- a/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs
+++ b/gen/Network/AWS/Redshift/ResetClusterParameterGroup.hs
@@ -106,6 +106,8 @@
 
 instance Hashable ResetClusterParameterGroup
 
+instance NFData ResetClusterParameterGroup
+
 instance ToHeaders ResetClusterParameterGroup where
         toHeaders = const mempty
 
diff --git a/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs b/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/RestoreFromClusterSnapshot.hs
@@ -53,6 +53,7 @@
     , rfcsKMSKeyId
     , rfcsAvailabilityZone
     , rfcsVPCSecurityGroupIds
+    , rfcsIAMRoles
     , rfcsOwnerAccount
     , rfcsNodeType
     , rfcsAllowVersionUpgrade
@@ -93,6 +94,7 @@
     , _rfcsKMSKeyId                         :: !(Maybe Text)
     , _rfcsAvailabilityZone                 :: !(Maybe Text)
     , _rfcsVPCSecurityGroupIds              :: !(Maybe [Text])
+    , _rfcsIAMRoles                         :: !(Maybe [Text])
     , _rfcsOwnerAccount                     :: !(Maybe Text)
     , _rfcsNodeType                         :: !(Maybe Text)
     , _rfcsAllowVersionUpgrade              :: !(Maybe Bool)
@@ -132,6 +134,8 @@
 --
 -- * 'rfcsVPCSecurityGroupIds'
 --
+-- * 'rfcsIAMRoles'
+--
 -- * 'rfcsOwnerAccount'
 --
 -- * 'rfcsNodeType'
@@ -164,6 +168,7 @@
     , _rfcsKMSKeyId = Nothing
     , _rfcsAvailabilityZone = Nothing
     , _rfcsVPCSecurityGroupIds = Nothing
+    , _rfcsIAMRoles = Nothing
     , _rfcsOwnerAccount = Nothing
     , _rfcsNodeType = Nothing
     , _rfcsAllowVersionUpgrade = Nothing
@@ -269,6 +274,15 @@
 rfcsVPCSecurityGroupIds :: Lens' RestoreFromClusterSnapshot [Text]
 rfcsVPCSecurityGroupIds = lens _rfcsVPCSecurityGroupIds (\ s a -> s{_rfcsVPCSecurityGroupIds = a}) . _Default . _Coerce;
 
+-- | A list of AWS Identity and Access Management (IAM) roles that can be
+-- used by the cluster to access other AWS services. You must supply the
+-- IAM roles in their Amazon Resource Name (ARN) format. You can supply up
+-- to 10 IAM roles in a single request.
+--
+-- A cluster can have up to 10 IAM roles associated at any time.
+rfcsIAMRoles :: Lens' RestoreFromClusterSnapshot [Text]
+rfcsIAMRoles = lens _rfcsIAMRoles (\ s a -> s{_rfcsIAMRoles = a}) . _Default . _Coerce;
+
 -- | The AWS customer account used to create or copy the snapshot. Required
 -- if you are restoring a snapshot you do not own, optional if you own the
 -- snapshot.
@@ -352,6 +366,8 @@
 
 instance Hashable RestoreFromClusterSnapshot
 
+instance NFData RestoreFromClusterSnapshot
+
 instance ToHeaders RestoreFromClusterSnapshot where
         toHeaders = const mempty
 
@@ -389,6 +405,8 @@
                  toQuery
                    (toQueryList "VpcSecurityGroupId" <$>
                       _rfcsVPCSecurityGroupIds),
+               "IamRoles" =:
+                 toQuery (toQueryList "IamRoleArn" <$> _rfcsIAMRoles),
                "OwnerAccount" =: _rfcsOwnerAccount,
                "NodeType" =: _rfcsNodeType,
                "AllowVersionUpgrade" =: _rfcsAllowVersionUpgrade,
@@ -427,3 +445,5 @@
 -- | The response status code.
 rfcsrsResponseStatus :: Lens' RestoreFromClusterSnapshotResponse Int
 rfcsrsResponseStatus = lens _rfcsrsResponseStatus (\ s a -> s{_rfcsrsResponseStatus = a});
+
+instance NFData RestoreFromClusterSnapshotResponse
diff --git a/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs b/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs
--- a/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs
+++ b/gen/Network/AWS/Redshift/RestoreTableFromClusterSnapshot.hs
@@ -121,6 +121,8 @@
 rtfcsTargetDatabaseName = lens _rtfcsTargetDatabaseName (\ s a -> s{_rtfcsTargetDatabaseName = a});
 
 -- | The name of the source schema that contains the table to restore from.
+-- If you do not specify a 'SourceSchemaName' value, the default is
+-- 'public'.
 rtfcsSourceSchemaName :: Lens' RestoreTableFromClusterSnapshot (Maybe Text)
 rtfcsSourceSchemaName = lens _rtfcsSourceSchemaName (\ s a -> s{_rtfcsSourceSchemaName = a});
 
@@ -160,6 +162,8 @@
 
 instance Hashable RestoreTableFromClusterSnapshot
 
+instance NFData RestoreTableFromClusterSnapshot
+
 instance ToHeaders RestoreTableFromClusterSnapshot
          where
         toHeaders = const mempty
@@ -212,3 +216,6 @@
 -- | The response status code.
 rtfcsrsResponseStatus :: Lens' RestoreTableFromClusterSnapshotResponse Int
 rtfcsrsResponseStatus = lens _rtfcsrsResponseStatus (\ s a -> s{_rtfcsrsResponseStatus = a});
+
+instance NFData
+         RestoreTableFromClusterSnapshotResponse
diff --git a/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs b/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs
--- a/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs
+++ b/gen/Network/AWS/Redshift/RevokeClusterSecurityGroupIngress.hs
@@ -124,6 +124,8 @@
 
 instance Hashable RevokeClusterSecurityGroupIngress
 
+instance NFData RevokeClusterSecurityGroupIngress
+
 instance ToHeaders RevokeClusterSecurityGroupIngress
          where
         toHeaders = const mempty
@@ -175,3 +177,6 @@
 -- | The response status code.
 rcsgirsResponseStatus :: Lens' RevokeClusterSecurityGroupIngressResponse Int
 rcsgirsResponseStatus = lens _rcsgirsResponseStatus (\ s a -> s{_rcsgirsResponseStatus = a});
+
+instance NFData
+         RevokeClusterSecurityGroupIngressResponse
diff --git a/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs b/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs
--- a/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs
+++ b/gen/Network/AWS/Redshift/RevokeSnapshotAccess.hs
@@ -107,6 +107,8 @@
 
 instance Hashable RevokeSnapshotAccess
 
+instance NFData RevokeSnapshotAccess
+
 instance ToHeaders RevokeSnapshotAccess where
         toHeaders = const mempty
 
@@ -153,3 +155,5 @@
 -- | The response status code.
 rsarsResponseStatus :: Lens' RevokeSnapshotAccessResponse Int
 rsarsResponseStatus = lens _rsarsResponseStatus (\ s a -> s{_rsarsResponseStatus = a});
+
+instance NFData RevokeSnapshotAccessResponse
diff --git a/gen/Network/AWS/Redshift/RotateEncryptionKey.hs b/gen/Network/AWS/Redshift/RotateEncryptionKey.hs
--- a/gen/Network/AWS/Redshift/RotateEncryptionKey.hs
+++ b/gen/Network/AWS/Redshift/RotateEncryptionKey.hs
@@ -82,6 +82,8 @@
 
 instance Hashable RotateEncryptionKey
 
+instance NFData RotateEncryptionKey
+
 instance ToHeaders RotateEncryptionKey where
         toHeaders = const mempty
 
@@ -124,3 +126,5 @@
 -- | The response status code.
 rekrsResponseStatus :: Lens' RotateEncryptionKeyResponse Int
 rekrsResponseStatus = lens _rekrsResponseStatus (\ s a -> s{_rekrsResponseStatus = a});
+
+instance NFData RotateEncryptionKeyResponse
diff --git a/gen/Network/AWS/Redshift/Types.hs b/gen/Network/AWS/Redshift/Types.hs
--- a/gen/Network/AWS/Redshift/Types.hs
+++ b/gen/Network/AWS/Redshift/Types.hs
@@ -142,6 +142,7 @@
     , cAvailabilityZone
     , cVPCSecurityGroups
     , cHSMStatus
+    , cIAMRoles
     , cElasticIPStatus
     , cClusterVersion
     , cNodeType
@@ -154,6 +155,12 @@
     , cClusterNodes
     , cDBName
 
+    -- * ClusterIAMRole
+    , ClusterIAMRole
+    , clusterIAMRole
+    , cirIAMRoleARN
+    , cirApplyStatus
+
     -- * ClusterNode
     , ClusterNode
     , clusterNode
@@ -529,6 +536,8 @@
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
           Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
       | has (hasStatus 500) e = Just "general_server_error"
       | has (hasStatus 509) e = Just "limit_exceeded"
diff --git a/gen/Network/AWS/Redshift/Types/Product.hs b/gen/Network/AWS/Redshift/Types/Product.hs
--- a/gen/Network/AWS/Redshift/Types/Product.hs
+++ b/gen/Network/AWS/Redshift/Types/Product.hs
@@ -51,6 +51,8 @@
 
 instance Hashable AccountWithRestoreAccess
 
+instance NFData AccountWithRestoreAccess
+
 -- | Describes an availability zone.
 --
 -- /See:/ 'availabilityZone' smart constructor.
@@ -79,6 +81,8 @@
 
 instance Hashable AvailabilityZone
 
+instance NFData AvailabilityZone
+
 -- | Describes a cluster.
 --
 -- /See:/ 'cluster' smart constructor.
@@ -103,6 +107,7 @@
     , _cAvailabilityZone                 :: !(Maybe Text)
     , _cVPCSecurityGroups                :: !(Maybe [VPCSecurityGroupMembership])
     , _cHSMStatus                        :: !(Maybe HSMStatus)
+    , _cIAMRoles                         :: !(Maybe [ClusterIAMRole])
     , _cElasticIPStatus                  :: !(Maybe ElasticIPStatus)
     , _cClusterVersion                   :: !(Maybe Text)
     , _cNodeType                         :: !(Maybe Text)
@@ -160,6 +165,8 @@
 --
 -- * 'cHSMStatus'
 --
+-- * 'cIAMRoles'
+--
 -- * 'cElasticIPStatus'
 --
 -- * 'cClusterVersion'
@@ -205,6 +212,7 @@
     , _cAvailabilityZone = Nothing
     , _cVPCSecurityGroups = Nothing
     , _cHSMStatus = Nothing
+    , _cIAMRoles = Nothing
     , _cElasticIPStatus = Nothing
     , _cClusterVersion = Nothing
     , _cNodeType = Nothing
@@ -317,6 +325,11 @@
 cHSMStatus :: Lens' Cluster (Maybe HSMStatus)
 cHSMStatus = lens _cHSMStatus (\ s a -> s{_cHSMStatus = a});
 
+-- | A list of AWS Identity and Access Management (IAM) roles that can be
+-- used by the cluster to access other AWS services.
+cIAMRoles :: Lens' Cluster [ClusterIAMRole]
+cIAMRoles = lens _cIAMRoles (\ s a -> s{_cIAMRoles = a}) . _Default . _Coerce;
+
 -- | The status of the elastic IP (EIP) address.
 cElasticIPStatus :: Lens' Cluster (Maybe ElasticIPStatus)
 cElasticIPStatus = lens _cElasticIPStatus (\ s a -> s{_cElasticIPStatus = a});
@@ -413,6 +426,9 @@
                 (x .@? "VpcSecurityGroups" .!@ mempty >>=
                    may (parseXMLList "VpcSecurityGroup"))
                 <*> (x .@? "HsmStatus")
+                <*>
+                (x .@? "IamRoles" .!@ mempty >>=
+                   may (parseXMLList "ClusterIamRole"))
                 <*> (x .@? "ElasticIpStatus")
                 <*> (x .@? "ClusterVersion")
                 <*> (x .@? "NodeType")
@@ -431,6 +447,59 @@
 
 instance Hashable Cluster
 
+instance NFData Cluster
+
+-- | An AWS Identity and Access Management (IAM) role that can be used by the
+-- associated Amazon Redshift cluster to access other AWS services.
+--
+-- /See:/ 'clusterIAMRole' smart constructor.
+data ClusterIAMRole = ClusterIAMRole'
+    { _cirIAMRoleARN  :: !(Maybe Text)
+    , _cirApplyStatus :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClusterIAMRole' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cirIAMRoleARN'
+--
+-- * 'cirApplyStatus'
+clusterIAMRole
+    :: ClusterIAMRole
+clusterIAMRole =
+    ClusterIAMRole'
+    { _cirIAMRoleARN = Nothing
+    , _cirApplyStatus = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the IAM role. For example,
+-- 'arn:aws:iam::123456789012:role\/RedshiftCopyUnload'.
+cirIAMRoleARN :: Lens' ClusterIAMRole (Maybe Text)
+cirIAMRoleARN = lens _cirIAMRoleARN (\ s a -> s{_cirIAMRoleARN = a});
+
+-- | Describes the status of the IAM role\'s association with an Amazon
+-- Redshift cluster.
+--
+-- The following are possible statuses and descriptions.
+--
+-- -   'in-sync': The role is available for use by the cluster.
+-- -   'adding': The role is in the process of being associated with the
+--     cluster.
+-- -   'removing': The role is in the process of being disassociated with
+--     the cluster.
+cirApplyStatus :: Lens' ClusterIAMRole (Maybe Text)
+cirApplyStatus = lens _cirApplyStatus (\ s a -> s{_cirApplyStatus = a});
+
+instance FromXML ClusterIAMRole where
+        parseXML x
+          = ClusterIAMRole' <$>
+              (x .@? "IamRoleArn") <*> (x .@? "ApplyStatus")
+
+instance Hashable ClusterIAMRole
+
+instance NFData ClusterIAMRole
+
 -- | The identifier of a node in a cluster.
 --
 -- /See:/ 'clusterNode' smart constructor.
@@ -478,6 +547,8 @@
 
 instance Hashable ClusterNode
 
+instance NFData ClusterNode
+
 -- | Describes a parameter group.
 --
 -- /See:/ 'clusterParameterGroup' smart constructor.
@@ -538,6 +609,8 @@
 
 instance Hashable ClusterParameterGroup
 
+instance NFData ClusterParameterGroup
+
 -- |
 --
 -- /See:/ 'clusterParameterGroupNameMessage' smart constructor.
@@ -580,6 +653,8 @@
 
 instance Hashable ClusterParameterGroupNameMessage
 
+instance NFData ClusterParameterGroupNameMessage
+
 -- | Describes the status of a parameter group.
 --
 -- /See:/ 'clusterParameterGroupStatus' smart constructor.
@@ -633,6 +708,8 @@
 
 instance Hashable ClusterParameterGroupStatus
 
+instance NFData ClusterParameterGroupStatus
+
 -- | Describes the status of a parameter group.
 --
 -- /See:/ 'clusterParameterStatus' smart constructor.
@@ -699,6 +776,8 @@
 
 instance Hashable ClusterParameterStatus
 
+instance NFData ClusterParameterStatus
+
 -- | Describes a security group.
 --
 -- /See:/ 'clusterSecurityGroup' smart constructor.
@@ -773,6 +852,8 @@
 
 instance Hashable ClusterSecurityGroup
 
+instance NFData ClusterSecurityGroup
+
 -- | Describes a cluster security group.
 --
 -- /See:/ 'clusterSecurityGroupMembership' smart constructor.
@@ -812,6 +893,8 @@
 
 instance Hashable ClusterSecurityGroupMembership
 
+instance NFData ClusterSecurityGroupMembership
+
 -- | Returns the destination region and retention period that are configured
 -- for cross-region snapshot copy.
 --
@@ -863,6 +946,8 @@
 
 instance Hashable ClusterSnapshotCopyStatus
 
+instance NFData ClusterSnapshotCopyStatus
+
 -- | Describes a subnet group.
 --
 -- /See:/ 'clusterSubnetGroup' smart constructor.
@@ -942,6 +1027,8 @@
 
 instance Hashable ClusterSubnetGroup
 
+instance NFData ClusterSubnetGroup
+
 -- | Describes a cluster version, including the parameter group family and
 -- description of the version.
 --
@@ -991,6 +1078,8 @@
 
 instance Hashable ClusterVersion
 
+instance NFData ClusterVersion
+
 -- | Describes the default cluster parameters for a parameter group family.
 --
 -- /See:/ 'defaultClusterParameters' smart constructor.
@@ -1046,6 +1135,8 @@
 
 instance Hashable DefaultClusterParameters
 
+instance NFData DefaultClusterParameters
+
 -- | Describes an Amazon EC2 security group.
 --
 -- /See:/ 'ec2SecurityGroup' smart constructor.
@@ -1106,6 +1197,8 @@
 
 instance Hashable EC2SecurityGroup
 
+instance NFData EC2SecurityGroup
+
 -- | Describes the status of the elastic IP (EIP) address.
 --
 -- /See:/ 'elasticIPStatus' smart constructor.
@@ -1144,6 +1237,8 @@
 
 instance Hashable ElasticIPStatus
 
+instance NFData ElasticIPStatus
+
 -- | Describes a connection endpoint.
 --
 -- /See:/ 'endpoint' smart constructor.
@@ -1181,6 +1276,8 @@
 
 instance Hashable Endpoint
 
+instance NFData Endpoint
+
 -- | Describes an event.
 --
 -- /See:/ 'event' smart constructor.
@@ -1270,6 +1367,8 @@
 
 instance Hashable Event
 
+instance NFData Event
+
 -- | Describes event categories.
 --
 -- /See:/ 'eventCategoriesMap' smart constructor.
@@ -1311,6 +1410,8 @@
 
 instance Hashable EventCategoriesMap
 
+instance NFData EventCategoriesMap
+
 -- | Describes event information.
 --
 -- /See:/ 'eventInfoMap' smart constructor.
@@ -1370,6 +1471,8 @@
 
 instance Hashable EventInfoMap
 
+instance NFData EventInfoMap
+
 -- | Describes event subscriptions.
 --
 -- /See:/ 'eventSubscription' smart constructor.
@@ -1516,6 +1619,8 @@
 
 instance Hashable EventSubscription
 
+instance NFData EventSubscription
+
 -- | Returns information about an HSM client certificate. The certificate is
 -- stored in a secure Hardware Storage Module (HSM), and used by the Amazon
 -- Redshift cluster to encrypt data files.
@@ -1569,6 +1674,8 @@
 
 instance Hashable HSMClientCertificate
 
+instance NFData HSMClientCertificate
+
 -- | Returns information about an HSM configuration, which is an object that
 -- describes to Amazon Redshift clusters the information they require to
 -- connect to an HSM where they can store database encryption keys.
@@ -1641,6 +1748,8 @@
 
 instance Hashable HSMConfiguration
 
+instance NFData HSMConfiguration
+
 -- | Describes the status of changes to HSM settings.
 --
 -- /See:/ 'hsmStatus' smart constructor.
@@ -1695,6 +1804,8 @@
 
 instance Hashable HSMStatus
 
+instance NFData HSMStatus
+
 -- | Describes an IP range used in a security group.
 --
 -- /See:/ 'ipRange' smart constructor.
@@ -1743,6 +1854,8 @@
 
 instance Hashable IPRange
 
+instance NFData IPRange
+
 -- | Describes the status of logging for a cluster.
 --
 -- /See:/ 'loggingStatus' smart constructor.
@@ -1818,6 +1931,8 @@
 
 instance Hashable LoggingStatus
 
+instance NFData LoggingStatus
+
 -- | Describes an orderable cluster option.
 --
 -- /See:/ 'orderableClusterOption' smart constructor.
@@ -1876,6 +1991,8 @@
 
 instance Hashable OrderableClusterOption
 
+instance NFData OrderableClusterOption
+
 -- | Describes a parameter in a cluster parameter group.
 --
 -- /See:/ 'parameter' smart constructor.
@@ -1985,6 +2102,8 @@
 
 instance Hashable Parameter
 
+instance NFData Parameter
+
 instance ToQuery Parameter where
         toQuery Parameter'{..}
           = mconcat
@@ -2096,6 +2215,8 @@
 
 instance Hashable PendingModifiedValues
 
+instance NFData PendingModifiedValues
+
 -- | Describes a recurring charge.
 --
 -- /See:/ 'recurringCharge' smart constructor.
@@ -2136,6 +2257,8 @@
 
 instance Hashable RecurringCharge
 
+instance NFData RecurringCharge
+
 -- | Describes a reserved node. You can call the
 -- < DescribeReservedNodeOfferings> API to obtain the available reserved
 -- node offerings.
@@ -2278,6 +2401,8 @@
 
 instance Hashable ReservedNode
 
+instance NFData ReservedNode
+
 -- | Describes a reserved node offering.
 --
 -- /See:/ 'reservedNodeOffering' smart constructor.
@@ -2378,6 +2503,8 @@
 
 instance Hashable ReservedNodeOffering
 
+instance NFData ReservedNodeOffering
+
 -- | Describes the status of a cluster restore action. Returns null if the
 -- cluster was not created by restoring a snapshot.
 --
@@ -2459,6 +2586,8 @@
 
 instance Hashable RestoreStatus
 
+instance NFData RestoreStatus
+
 -- | Describes a snapshot.
 --
 -- /See:/ 'snapshot' smart constructor.
@@ -2763,6 +2892,8 @@
 
 instance Hashable Snapshot
 
+instance NFData Snapshot
+
 -- | The snapshot copy grant that grants Amazon Redshift permission to
 -- encrypt copied snapshots with the specified customer master key (CMK)
 -- from AWS KMS in the destination region.
@@ -2820,6 +2951,8 @@
 
 instance Hashable SnapshotCopyGrant
 
+instance NFData SnapshotCopyGrant
+
 -- | Describes a subnet.
 --
 -- /See:/ 'subnet' smart constructor.
@@ -2867,6 +3000,8 @@
 
 instance Hashable Subnet
 
+instance NFData Subnet
+
 -- | Describes the status of a < RestoreTableFromClusterSnapshot> operation.
 --
 -- /See:/ 'tableRestoreStatus' smart constructor.
@@ -2940,7 +3075,7 @@
 
 -- | A value that describes the current state of the table restore request.
 --
--- Valid Values: 'SUCCEEDED', 'FAILED', 'CANCELLED', 'PENDING',
+-- Valid Values: 'SUCCEEDED', 'FAILED', 'CANCELED', 'PENDING',
 -- 'IN_PROGRESS'
 trsStatus :: Lens' TableRestoreStatus (Maybe TableRestoreStatusType)
 trsStatus = lens _trsStatus (\ s a -> s{_trsStatus = a});
@@ -2997,7 +3132,7 @@
 trsProgressInMegaBytes = lens _trsProgressInMegaBytes (\ s a -> s{_trsProgressInMegaBytes = a});
 
 -- | A description of the status of the table restore request. Status values
--- include 'SUCCEEDED', 'FAILED', 'CANCELLED', 'PENDING', 'IN_PROGRESS'.
+-- include 'SUCCEEDED', 'FAILED', 'CANCELED', 'PENDING', 'IN_PROGRESS'.
 trsMessage :: Lens' TableRestoreStatus (Maybe Text)
 trsMessage = lens _trsMessage (\ s a -> s{_trsMessage = a});
 
@@ -3020,6 +3155,8 @@
 
 instance Hashable TableRestoreStatus
 
+instance NFData TableRestoreStatus
+
 -- | A tag consisting of a name\/value pair for a resource.
 --
 -- /See:/ 'tag' smart constructor.
@@ -3057,6 +3194,8 @@
 
 instance Hashable Tag
 
+instance NFData Tag
+
 instance ToQuery Tag where
         toQuery Tag'{..}
           = mconcat ["Value" =: _tagValue, "Key" =: _tagKey]
@@ -3125,6 +3264,8 @@
 
 instance Hashable TaggedResource
 
+instance NFData TaggedResource
+
 -- | Describes the members of a VPC security group.
 --
 -- /See:/ 'vpcSecurityGroupMembership' smart constructor.
@@ -3162,3 +3303,5 @@
               (x .@? "Status") <*> (x .@? "VpcSecurityGroupId")
 
 instance Hashable VPCSecurityGroupMembership
+
+instance NFData VPCSecurityGroupMembership
diff --git a/gen/Network/AWS/Redshift/Types/Sum.hs b/gen/Network/AWS/Redshift/Types/Sum.hs
--- a/gen/Network/AWS/Redshift/Types/Sum.hs
+++ b/gen/Network/AWS/Redshift/Types/Sum.hs
@@ -37,6 +37,7 @@
         Static -> "static"
 
 instance Hashable     ParameterApplyType
+instance NFData       ParameterApplyType
 instance ToByteString ParameterApplyType
 instance ToQuery      ParameterApplyType
 instance ToHeader     ParameterApplyType
@@ -68,6 +69,7 @@
         ClusterSnapshot -> "cluster-snapshot"
 
 instance Hashable     SourceType
+instance NFData       SourceType
 instance ToByteString SourceType
 instance ToQuery      SourceType
 instance ToHeader     SourceType
@@ -102,6 +104,7 @@
         Succeeded -> "SUCCEEDED"
 
 instance Hashable     TableRestoreStatusType
+instance NFData       TableRestoreStatusType
 instance ToByteString TableRestoreStatusType
 instance ToQuery      TableRestoreStatusType
 instance ToHeader     TableRestoreStatusType
diff --git a/test/Test/AWS/Gen/Redshift.hs b/test/Test/AWS/Gen/Redshift.hs
--- a/test/Test/AWS/Gen/Redshift.hs
+++ b/test/Test/AWS/Gen/Redshift.hs
@@ -91,6 +91,9 @@
 --         , testModifySnapshotCopyRetentionPeriod $
 --             modifySnapshotCopyRetentionPeriod
 --
+--         , testModifyClusterIAMRoles $
+--             modifyClusterIAMRoles
+--
 --         , testAuthorizeSnapshotAccess $
 --             authorizeSnapshotAccess
 --
@@ -277,6 +280,9 @@
 --         , testModifySnapshotCopyRetentionPeriodResponse $
 --             modifySnapshotCopyRetentionPeriodResponse
 --
+--         , testModifyClusterIAMRolesResponse $
+--             modifyClusterIAMRolesResponse
+--
 --         , testAuthorizeSnapshotAccessResponse $
 --             authorizeSnapshotAccessResponse
 --
@@ -507,6 +513,11 @@
     "ModifySnapshotCopyRetentionPeriod"
     "fixture/ModifySnapshotCopyRetentionPeriod.yaml"
 
+testModifyClusterIAMRoles :: ModifyClusterIAMRoles -> TestTree
+testModifyClusterIAMRoles = req
+    "ModifyClusterIAMRoles"
+    "fixture/ModifyClusterIAMRoles.yaml"
+
 testAuthorizeSnapshotAccess :: AuthorizeSnapshotAccess -> TestTree
 testAuthorizeSnapshotAccess = req
     "AuthorizeSnapshotAccess"
@@ -855,6 +866,13 @@
     "fixture/ModifySnapshotCopyRetentionPeriodResponse.proto"
     redshift
     (Proxy :: Proxy ModifySnapshotCopyRetentionPeriod)
+
+testModifyClusterIAMRolesResponse :: ModifyClusterIAMRolesResponse -> TestTree
+testModifyClusterIAMRolesResponse = res
+    "ModifyClusterIAMRolesResponse"
+    "fixture/ModifyClusterIAMRolesResponse.proto"
+    redshift
+    (Proxy :: Proxy ModifyClusterIAMRoles)
 
 testAuthorizeSnapshotAccessResponse :: AuthorizeSnapshotAccessResponse -> TestTree
 testAuthorizeSnapshotAccessResponse = res
