diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -365,9 +365,3 @@
 for such a notice.
 
 You may add additional accurate notices of copyright ownership.
-
-Exhibit B - "Incompatible With Secondary Licenses" Notice
----------------------------------------------------------
-
-  This Source Code Form is "Incompatible With Secondary Licenses", as
-  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.2`
+`1.3.3`
 
 
 ## Description
diff --git a/amazonka-config.cabal b/amazonka-config.cabal
--- a/amazonka-config.cabal
+++ b/amazonka-config.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-config
-version:               1.3.2
+version:               1.3.3
 synopsis:              Amazon Config SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -69,16 +69,27 @@
 
     exposed-modules:
           Network.AWS.Config
+        , Network.AWS.Config.DeleteConfigRule
         , Network.AWS.Config.DeleteDeliveryChannel
         , Network.AWS.Config.DeliverConfigSnapshot
+        , Network.AWS.Config.DescribeComplianceByConfigRule
+        , Network.AWS.Config.DescribeComplianceByResource
+        , Network.AWS.Config.DescribeConfigRuleEvaluationStatus
+        , Network.AWS.Config.DescribeConfigRules
         , Network.AWS.Config.DescribeConfigurationRecorderStatus
         , Network.AWS.Config.DescribeConfigurationRecorders
         , Network.AWS.Config.DescribeDeliveryChannelStatus
         , Network.AWS.Config.DescribeDeliveryChannels
+        , Network.AWS.Config.GetComplianceDetailsByConfigRule
+        , Network.AWS.Config.GetComplianceDetailsByResource
+        , Network.AWS.Config.GetComplianceSummaryByConfigRule
+        , Network.AWS.Config.GetComplianceSummaryByResourceType
         , Network.AWS.Config.GetResourceConfigHistory
         , Network.AWS.Config.ListDiscoveredResources
+        , Network.AWS.Config.PutConfigRule
         , Network.AWS.Config.PutConfigurationRecorder
         , Network.AWS.Config.PutDeliveryChannel
+        , Network.AWS.Config.PutEvaluations
         , Network.AWS.Config.StartConfigurationRecorder
         , Network.AWS.Config.StopConfigurationRecorder
         , Network.AWS.Config.Types
@@ -89,7 +100,7 @@
         , Network.AWS.Config.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.2.*
+          amazonka-core == 1.3.3.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-config-test
@@ -109,9 +120,9 @@
         , Test.AWS.Config.Internal
 
     build-depends:
-          amazonka-core == 1.3.2.*
-        , amazonka-test == 1.3.2.*
-        , amazonka-config == 1.3.2.*
+          amazonka-core == 1.3.3.*
+        , amazonka-test == 1.3.3.*
+        , amazonka-config == 1.3.3.*
         , base
         , bytestring
         , lens
diff --git a/fixture/DeleteConfigRule.yaml b/fixture/DeleteConfigRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigRule.yaml
diff --git a/fixture/DeleteConfigRuleResponse.proto b/fixture/DeleteConfigRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConfigRuleResponse.proto
diff --git a/fixture/DescribeComplianceByConfigRule.yaml b/fixture/DescribeComplianceByConfigRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeComplianceByConfigRule.yaml
diff --git a/fixture/DescribeComplianceByConfigRuleResponse.proto b/fixture/DescribeComplianceByConfigRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeComplianceByConfigRuleResponse.proto
diff --git a/fixture/DescribeComplianceByResource.yaml b/fixture/DescribeComplianceByResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeComplianceByResource.yaml
diff --git a/fixture/DescribeComplianceByResourceResponse.proto b/fixture/DescribeComplianceByResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeComplianceByResourceResponse.proto
diff --git a/fixture/DescribeConfigRuleEvaluationStatus.yaml b/fixture/DescribeConfigRuleEvaluationStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConfigRuleEvaluationStatus.yaml
diff --git a/fixture/DescribeConfigRuleEvaluationStatusResponse.proto b/fixture/DescribeConfigRuleEvaluationStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConfigRuleEvaluationStatusResponse.proto
diff --git a/fixture/DescribeConfigRules.yaml b/fixture/DescribeConfigRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConfigRules.yaml
diff --git a/fixture/DescribeConfigRulesResponse.proto b/fixture/DescribeConfigRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConfigRulesResponse.proto
diff --git a/fixture/GetComplianceDetailsByConfigRule.yaml b/fixture/GetComplianceDetailsByConfigRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceDetailsByConfigRule.yaml
diff --git a/fixture/GetComplianceDetailsByConfigRuleResponse.proto b/fixture/GetComplianceDetailsByConfigRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceDetailsByConfigRuleResponse.proto
diff --git a/fixture/GetComplianceDetailsByResource.yaml b/fixture/GetComplianceDetailsByResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceDetailsByResource.yaml
diff --git a/fixture/GetComplianceDetailsByResourceResponse.proto b/fixture/GetComplianceDetailsByResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceDetailsByResourceResponse.proto
diff --git a/fixture/GetComplianceSummaryByConfigRule.yaml b/fixture/GetComplianceSummaryByConfigRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceSummaryByConfigRule.yaml
diff --git a/fixture/GetComplianceSummaryByConfigRuleResponse.proto b/fixture/GetComplianceSummaryByConfigRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceSummaryByConfigRuleResponse.proto
diff --git a/fixture/GetComplianceSummaryByResourceType.yaml b/fixture/GetComplianceSummaryByResourceType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceSummaryByResourceType.yaml
diff --git a/fixture/GetComplianceSummaryByResourceTypeResponse.proto b/fixture/GetComplianceSummaryByResourceTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceSummaryByResourceTypeResponse.proto
diff --git a/fixture/PutConfigRule.yaml b/fixture/PutConfigRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigRule.yaml
diff --git a/fixture/PutConfigRuleResponse.proto b/fixture/PutConfigRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigRuleResponse.proto
diff --git a/fixture/PutEvaluations.yaml b/fixture/PutEvaluations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEvaluations.yaml
diff --git a/fixture/PutEvaluationsResponse.proto b/fixture/PutEvaluationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEvaluationsResponse.proto
diff --git a/gen/Network/AWS/Config.hs b/gen/Network/AWS/Config.hs
--- a/gen/Network/AWS/Config.hs
+++ b/gen/Network/AWS/Config.hs
@@ -74,15 +74,27 @@
     -- ** InvalidDeliveryChannelNameException
     , _InvalidDeliveryChannelNameException
 
+    -- ** InvalidParameterValueException
+    , _InvalidParameterValueException
+
+    -- ** InvalidResultTokenException
+    , _InvalidResultTokenException
+
     -- ** NoSuchDeliveryChannelException
     , _NoSuchDeliveryChannelException
 
+    -- ** NoSuchConfigRuleException
+    , _NoSuchConfigRuleException
+
     -- ** ResourceNotDiscoveredException
     , _ResourceNotDiscoveredException
 
     -- ** InvalidNextTokenException
     , _InvalidNextTokenException
 
+    -- ** MaxNumberOfConfigRulesExceededException
+    , _MaxNumberOfConfigRulesExceededException
+
     -- ** NoAvailableConfigurationRecorderException
     , _NoAvailableConfigurationRecorderException
 
@@ -113,6 +125,9 @@
     -- ** InvalidS3KeyPrefixException
     , _InvalidS3KeyPrefixException
 
+    -- ** ResourceInUseException
+    , _ResourceInUseException
+
     -- * Waiters
     -- $waiters
 
@@ -122,30 +137,63 @@
     -- ** GetResourceConfigHistory
     , module Network.AWS.Config.GetResourceConfigHistory
 
+    -- ** DescribeComplianceByConfigRule
+    , module Network.AWS.Config.DescribeComplianceByConfigRule
+
     -- ** StopConfigurationRecorder
     , module Network.AWS.Config.StopConfigurationRecorder
 
+    -- ** DescribeConfigRules
+    , module Network.AWS.Config.DescribeConfigRules
+
+    -- ** PutConfigRule
+    , module Network.AWS.Config.PutConfigRule
+
+    -- ** DeleteConfigRule
+    , module Network.AWS.Config.DeleteConfigRule
+
+    -- ** GetComplianceDetailsByResource
+    , module Network.AWS.Config.GetComplianceDetailsByResource
+
     -- ** DeliverConfigSnapshot
     , module Network.AWS.Config.DeliverConfigSnapshot
 
+    -- ** DescribeConfigRuleEvaluationStatus
+    , module Network.AWS.Config.DescribeConfigRuleEvaluationStatus
+
+    -- ** DescribeComplianceByResource
+    , module Network.AWS.Config.DescribeComplianceByResource
+
+    -- ** PutEvaluations
+    , module Network.AWS.Config.PutEvaluations
+
     -- ** DescribeConfigurationRecorders
     , module Network.AWS.Config.DescribeConfigurationRecorders
 
     -- ** StartConfigurationRecorder
     , module Network.AWS.Config.StartConfigurationRecorder
 
+    -- ** GetComplianceSummaryByConfigRule
+    , module Network.AWS.Config.GetComplianceSummaryByConfigRule
+
     -- ** DescribeConfigurationRecorderStatus
     , module Network.AWS.Config.DescribeConfigurationRecorderStatus
 
     -- ** PutConfigurationRecorder
     , module Network.AWS.Config.PutConfigurationRecorder
 
+    -- ** GetComplianceSummaryByResourceType
+    , module Network.AWS.Config.GetComplianceSummaryByResourceType
+
     -- ** DescribeDeliveryChannelStatus
     , module Network.AWS.Config.DescribeDeliveryChannelStatus
 
     -- ** PutDeliveryChannel
     , module Network.AWS.Config.PutDeliveryChannel
 
+    -- ** GetComplianceDetailsByConfigRule
+    , module Network.AWS.Config.GetComplianceDetailsByConfigRule
+
     -- ** DeleteDeliveryChannel
     , module Network.AWS.Config.DeleteDeliveryChannel
 
@@ -160,18 +208,74 @@
     -- ** ChronologicalOrder
     , ChronologicalOrder (..)
 
+    -- ** ComplianceType
+    , ComplianceType (..)
+
+    -- ** ConfigRuleState
+    , ConfigRuleState (..)
+
     -- ** ConfigurationItemStatus
     , ConfigurationItemStatus (..)
 
     -- ** DeliveryStatus
     , DeliveryStatus (..)
 
+    -- ** EventSource
+    , EventSource (..)
+
+    -- ** MaximumExecutionFrequency
+    , MaximumExecutionFrequency (..)
+
+    -- ** MessageType
+    , MessageType (..)
+
+    -- ** Owner
+    , Owner (..)
+
     -- ** RecorderStatus
     , RecorderStatus (..)
 
     -- ** ResourceType
     , ResourceType (..)
 
+    -- ** Compliance
+    , Compliance
+    , compliance
+    , cComplianceContributorCount
+    , cComplianceType
+
+    -- ** ComplianceByConfigRule
+    , ComplianceByConfigRule
+    , complianceByConfigRule
+    , cbcrCompliance
+    , cbcrConfigRuleName
+
+    -- ** ComplianceByResource
+    , ComplianceByResource
+    , complianceByResource
+    , cbrResourceId
+    , cbrResourceType
+    , cbrCompliance
+
+    -- ** ComplianceContributorCount
+    , ComplianceContributorCount
+    , complianceContributorCount
+    , cccCappedCount
+    , cccCapExceeded
+
+    -- ** ComplianceSummary
+    , ComplianceSummary
+    , complianceSummary
+    , csComplianceSummaryTimestamp
+    , csCompliantResourceCount
+    , csNonCompliantResourceCount
+
+    -- ** ComplianceSummaryByResourceType
+    , ComplianceSummaryByResourceType
+    , complianceSummaryByResourceType
+    , csbrtResourceType
+    , csbrtComplianceSummary
+
     -- ** ConfigExportDeliveryInfo
     , ConfigExportDeliveryInfo
     , configExportDeliveryInfo
@@ -180,7 +284,38 @@
     , cediLastSuccessfulTime
     , cediLastStatus
     , cediLastErrorMessage
+    , cediNextDeliveryTime
 
+    -- ** ConfigRule
+    , ConfigRule
+    , configRule
+    , crInputParameters
+    , crConfigRuleName
+    , crMaximumExecutionFrequency
+    , crConfigRuleId
+    , crScope
+    , crConfigRuleState
+    , crDescription
+    , crConfigRuleARN
+    , crSource
+
+    -- ** ConfigRuleEvaluationStatus
+    , ConfigRuleEvaluationStatus
+    , configRuleEvaluationStatus
+    , cresLastErrorCode
+    , cresFirstActivatedTime
+    , cresConfigRuleName
+    , cresLastErrorMessage
+    , cresConfigRuleId
+    , cresLastFailedInvocationTime
+    , cresLastSuccessfulInvocationTime
+    , cresConfigRuleARN
+
+    -- ** ConfigSnapshotDeliveryProperties
+    , ConfigSnapshotDeliveryProperties
+    , configSnapshotDeliveryProperties
+    , csdpDeliveryFrequency
+
     -- ** ConfigStreamDeliveryInfo
     , ConfigStreamDeliveryInfo
     , configStreamDeliveryInfo
@@ -235,6 +370,7 @@
     , dcS3KeyPrefix
     , dcSnsTopicARN
     , dcName
+    , dcConfigSnapshotDeliveryProperties
     , dcS3BucketName
 
     -- ** DeliveryChannelStatus
@@ -245,6 +381,38 @@
     , dcsConfigHistoryDeliveryInfo
     , dcsName
 
+    -- ** Evaluation
+    , Evaluation
+    , evaluation
+    , eAnnotation
+    , eComplianceResourceType
+    , eComplianceResourceId
+    , eComplianceType
+    , eOrderingTimestamp
+
+    -- ** EvaluationResult
+    , EvaluationResult
+    , evaluationResult
+    , erEvaluationResultIdentifier
+    , erAnnotation
+    , erConfigRuleInvokedTime
+    , erResultRecordedTime
+    , erResultToken
+    , erComplianceType
+
+    -- ** EvaluationResultIdentifier
+    , EvaluationResultIdentifier
+    , evaluationResultIdentifier
+    , eriEvaluationResultQualifier
+    , eriOrderingTimestamp
+
+    -- ** EvaluationResultQualifier
+    , EvaluationResultQualifier
+    , evaluationResultQualifier
+    , erqResourceId
+    , erqResourceType
+    , erqConfigRuleName
+
     -- ** RecordingGroup
     , RecordingGroup
     , recordingGroup
@@ -266,18 +434,50 @@
     , riResourceType
     , riResourceName
     , riResourceDeletionTime
+
+    -- ** Scope
+    , Scope
+    , scope
+    , sComplianceResourceTypes
+    , sComplianceResourceId
+    , sTagValue
+    , sTagKey
+
+    -- ** Source
+    , Source
+    , source
+    , sSourceIdentifier
+    , sOwner
+    , sSourceDetails
+
+    -- ** SourceDetail
+    , SourceDetail
+    , sourceDetail
+    , sdMessageType
+    , sdEventSource
     ) where
 
+import           Network.AWS.Config.DeleteConfigRule
 import           Network.AWS.Config.DeleteDeliveryChannel
 import           Network.AWS.Config.DeliverConfigSnapshot
+import           Network.AWS.Config.DescribeComplianceByConfigRule
+import           Network.AWS.Config.DescribeComplianceByResource
+import           Network.AWS.Config.DescribeConfigRuleEvaluationStatus
+import           Network.AWS.Config.DescribeConfigRules
 import           Network.AWS.Config.DescribeConfigurationRecorders
 import           Network.AWS.Config.DescribeConfigurationRecorderStatus
 import           Network.AWS.Config.DescribeDeliveryChannels
 import           Network.AWS.Config.DescribeDeliveryChannelStatus
+import           Network.AWS.Config.GetComplianceDetailsByConfigRule
+import           Network.AWS.Config.GetComplianceDetailsByResource
+import           Network.AWS.Config.GetComplianceSummaryByConfigRule
+import           Network.AWS.Config.GetComplianceSummaryByResourceType
 import           Network.AWS.Config.GetResourceConfigHistory
 import           Network.AWS.Config.ListDiscoveredResources
+import           Network.AWS.Config.PutConfigRule
 import           Network.AWS.Config.PutConfigurationRecorder
 import           Network.AWS.Config.PutDeliveryChannel
+import           Network.AWS.Config.PutEvaluations
 import           Network.AWS.Config.StartConfigurationRecorder
 import           Network.AWS.Config.StopConfigurationRecorder
 import           Network.AWS.Config.Types
diff --git a/gen/Network/AWS/Config/DeleteConfigRule.hs b/gen/Network/AWS/Config/DeleteConfigRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/DeleteConfigRule.hs
@@ -0,0 +1,109 @@
+{-# 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.Config.DeleteConfigRule
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified AWS Config rule and all of its evaluation results.
+--
+-- AWS Config sets the state of a rule to 'DELETING' until the deletion is
+-- complete. You cannot update a rule while it is in this state. If you
+-- make a 'PutConfigRule' request for the rule, you will receive a
+-- 'ResourceInUseException'.
+--
+-- You can check the state of a rule by using the 'DescribeConfigRules'
+-- request.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_DeleteConfigRule.html AWS API Reference> for DeleteConfigRule.
+module Network.AWS.Config.DeleteConfigRule
+    (
+    -- * Creating a Request
+      deleteConfigRule
+    , DeleteConfigRule
+    -- * Request Lenses
+    , dcrConfigRuleName
+
+    -- * Destructuring the Response
+    , deleteConfigRuleResponse
+    , DeleteConfigRuleResponse
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteConfigRule' smart constructor.
+newtype DeleteConfigRule = DeleteConfigRule'
+    { _dcrConfigRuleName :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteConfigRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrConfigRuleName'
+deleteConfigRule
+    :: Text -- ^ 'dcrConfigRuleName'
+    -> DeleteConfigRule
+deleteConfigRule pConfigRuleName_ =
+    DeleteConfigRule'
+    { _dcrConfigRuleName = pConfigRuleName_
+    }
+
+-- | The name of the AWS Config rule that you want to delete.
+dcrConfigRuleName :: Lens' DeleteConfigRule Text
+dcrConfigRuleName = lens _dcrConfigRuleName (\ s a -> s{_dcrConfigRuleName = a});
+
+instance AWSRequest DeleteConfigRule where
+        type Rs DeleteConfigRule = DeleteConfigRuleResponse
+        request = postJSON config
+        response = receiveNull DeleteConfigRuleResponse'
+
+instance ToHeaders DeleteConfigRule where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.DeleteConfigRule" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteConfigRule where
+        toJSON DeleteConfigRule'{..}
+          = object
+              (catMaybes
+                 [Just ("ConfigRuleName" .= _dcrConfigRuleName)])
+
+instance ToPath DeleteConfigRule where
+        toPath = const "/"
+
+instance ToQuery DeleteConfigRule where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteConfigRuleResponse' smart constructor.
+data DeleteConfigRuleResponse =
+    DeleteConfigRuleResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteConfigRuleResponse' with the minimum fields required to make a request.
+--
+deleteConfigRuleResponse
+    :: DeleteConfigRuleResponse
+deleteConfigRuleResponse = DeleteConfigRuleResponse'
diff --git a/gen/Network/AWS/Config/DescribeComplianceByConfigRule.hs b/gen/Network/AWS/Config/DescribeComplianceByConfigRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/DescribeComplianceByConfigRule.hs
@@ -0,0 +1,186 @@
+{-# 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.Config.DescribeComplianceByConfigRule
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Indicates whether the specified AWS Config rules are compliant. If a
+-- rule is noncompliant, this action returns the number of AWS resources
+-- that do not comply with the rule.
+--
+-- A rule is compliant if all of the evaluated resources comply with it,
+-- and it is noncompliant if any of these resources do not comply.
+--
+-- If AWS Config has no current evaluation results for the rule, it returns
+-- 'InsufficientData'. This result might indicate one of the following
+-- conditions:
+--
+-- -   AWS Config has never invoked an evaluation for the rule. To check
+--     whether it has, use the 'DescribeConfigRuleEvaluationStatus' action
+--     to get the 'LastSuccessfulInvocationTime' and
+--     'LastFailedInvocationTime'.
+-- -   The rule\'s AWS Lambda function is failing to send evaluation
+--     results to AWS Config. Verify that the role that you assigned to
+--     your configuration recorder includes the 'config:PutEvaluations'
+--     permission. If the rule is a customer managed rule, verify that the
+--     AWS Lambda execution role includes the 'config:PutEvaluations'
+--     permission.
+-- -   The rule\'s AWS Lambda function has returned 'NOT_APPLICABLE' for
+--     all evaluation results. This can occur if the resources were deleted
+--     or removed from the rule\'s scope.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_DescribeComplianceByConfigRule.html AWS API Reference> for DescribeComplianceByConfigRule.
+module Network.AWS.Config.DescribeComplianceByConfigRule
+    (
+    -- * Creating a Request
+      describeComplianceByConfigRule
+    , DescribeComplianceByConfigRule
+    -- * Request Lenses
+    , dcbcrConfigRuleNames
+    , dcbcrComplianceTypes
+    , dcbcrNextToken
+
+    -- * Destructuring the Response
+    , describeComplianceByConfigRuleResponse
+    , DescribeComplianceByConfigRuleResponse
+    -- * Response Lenses
+    , dcbcrrsComplianceByConfigRules
+    , dcbcrrsNextToken
+    , dcbcrrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeComplianceByConfigRule' smart constructor.
+data DescribeComplianceByConfigRule = DescribeComplianceByConfigRule'
+    { _dcbcrConfigRuleNames :: !(Maybe [Text])
+    , _dcbcrComplianceTypes :: !(Maybe [ComplianceType])
+    , _dcbcrNextToken       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeComplianceByConfigRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcbcrConfigRuleNames'
+--
+-- * 'dcbcrComplianceTypes'
+--
+-- * 'dcbcrNextToken'
+describeComplianceByConfigRule
+    :: DescribeComplianceByConfigRule
+describeComplianceByConfigRule =
+    DescribeComplianceByConfigRule'
+    { _dcbcrConfigRuleNames = Nothing
+    , _dcbcrComplianceTypes = Nothing
+    , _dcbcrNextToken = Nothing
+    }
+
+-- | Specify one or more AWS Config rule names to filter the results by rule.
+dcbcrConfigRuleNames :: Lens' DescribeComplianceByConfigRule [Text]
+dcbcrConfigRuleNames = lens _dcbcrConfigRuleNames (\ s a -> s{_dcbcrConfigRuleNames = a}) . _Default . _Coerce;
+
+-- | Filters the results by compliance. The valid values are 'Compliant' and
+-- 'NonCompliant'.
+dcbcrComplianceTypes :: Lens' DescribeComplianceByConfigRule [ComplianceType]
+dcbcrComplianceTypes = lens _dcbcrComplianceTypes (\ s a -> s{_dcbcrComplianceTypes = a}) . _Default . _Coerce;
+
+-- | The 'nextToken' string returned on a previous page that you use to get
+-- the next page of results in a paginated response.
+dcbcrNextToken :: Lens' DescribeComplianceByConfigRule (Maybe Text)
+dcbcrNextToken = lens _dcbcrNextToken (\ s a -> s{_dcbcrNextToken = a});
+
+instance AWSRequest DescribeComplianceByConfigRule
+         where
+        type Rs DescribeComplianceByConfigRule =
+             DescribeComplianceByConfigRuleResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeComplianceByConfigRuleResponse' <$>
+                   (x .?> "ComplianceByConfigRules" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeComplianceByConfigRule
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.DescribeComplianceByConfigRule"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeComplianceByConfigRule where
+        toJSON DescribeComplianceByConfigRule'{..}
+          = object
+              (catMaybes
+                 [("ConfigRuleNames" .=) <$> _dcbcrConfigRuleNames,
+                  ("ComplianceTypes" .=) <$> _dcbcrComplianceTypes,
+                  ("NextToken" .=) <$> _dcbcrNextToken])
+
+instance ToPath DescribeComplianceByConfigRule where
+        toPath = const "/"
+
+instance ToQuery DescribeComplianceByConfigRule where
+        toQuery = const mempty
+
+-- | /See:/ 'describeComplianceByConfigRuleResponse' smart constructor.
+data DescribeComplianceByConfigRuleResponse = DescribeComplianceByConfigRuleResponse'
+    { _dcbcrrsComplianceByConfigRules :: !(Maybe [ComplianceByConfigRule])
+    , _dcbcrrsNextToken               :: !(Maybe Text)
+    , _dcbcrrsResponseStatus          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeComplianceByConfigRuleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcbcrrsComplianceByConfigRules'
+--
+-- * 'dcbcrrsNextToken'
+--
+-- * 'dcbcrrsResponseStatus'
+describeComplianceByConfigRuleResponse
+    :: Int -- ^ 'dcbcrrsResponseStatus'
+    -> DescribeComplianceByConfigRuleResponse
+describeComplianceByConfigRuleResponse pResponseStatus_ =
+    DescribeComplianceByConfigRuleResponse'
+    { _dcbcrrsComplianceByConfigRules = Nothing
+    , _dcbcrrsNextToken = Nothing
+    , _dcbcrrsResponseStatus = pResponseStatus_
+    }
+
+-- | Indicates whether each of the specified AWS Config rules is compliant.
+dcbcrrsComplianceByConfigRules :: Lens' DescribeComplianceByConfigRuleResponse [ComplianceByConfigRule]
+dcbcrrsComplianceByConfigRules = lens _dcbcrrsComplianceByConfigRules (\ s a -> s{_dcbcrrsComplianceByConfigRules = a}) . _Default . _Coerce;
+
+-- | The string that you use in a subsequent request to get the next page of
+-- results in a paginated response.
+dcbcrrsNextToken :: Lens' DescribeComplianceByConfigRuleResponse (Maybe Text)
+dcbcrrsNextToken = lens _dcbcrrsNextToken (\ s a -> s{_dcbcrrsNextToken = a});
+
+-- | The response status code.
+dcbcrrsResponseStatus :: Lens' DescribeComplianceByConfigRuleResponse Int
+dcbcrrsResponseStatus = lens _dcbcrrsResponseStatus (\ s a -> s{_dcbcrrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/DescribeComplianceByResource.hs b/gen/Network/AWS/Config/DescribeComplianceByResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/DescribeComplianceByResource.hs
@@ -0,0 +1,213 @@
+{-# 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.Config.DescribeComplianceByResource
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Indicates whether the specified AWS resources are compliant. If a
+-- resource is noncompliant, this action returns the number of AWS Config
+-- rules that the resource does not comply with.
+--
+-- A resource is compliant if it complies with all the AWS Config rules
+-- that evaluate it. It is noncompliant if it does not comply with one or
+-- more of these rules.
+--
+-- If AWS Config has no current evaluation results for the resource, it
+-- returns 'InsufficientData'. This result might indicate one of the
+-- following conditions about the rules that evaluate the resource:
+--
+-- -   AWS Config has never invoked an evaluation for the rule. To check
+--     whether it has, use the 'DescribeConfigRuleEvaluationStatus' action
+--     to get the 'LastSuccessfulInvocationTime' and
+--     'LastFailedInvocationTime'.
+-- -   The rule\'s AWS Lambda function is failing to send evaluation
+--     results to AWS Config. Verify that the role that you assigned to
+--     your configuration recorder includes the 'config:PutEvaluations'
+--     permission. If the rule is a customer managed rule, verify that the
+--     AWS Lambda execution role includes the 'config:PutEvaluations'
+--     permission.
+-- -   The rule\'s AWS Lambda function has returned 'NOT_APPLICABLE' for
+--     all evaluation results. This can occur if the resources were deleted
+--     or removed from the rule\'s scope.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_DescribeComplianceByResource.html AWS API Reference> for DescribeComplianceByResource.
+module Network.AWS.Config.DescribeComplianceByResource
+    (
+    -- * Creating a Request
+      describeComplianceByResource
+    , DescribeComplianceByResource
+    -- * Request Lenses
+    , dcbrResourceId
+    , dcbrResourceType
+    , dcbrComplianceTypes
+    , dcbrNextToken
+    , dcbrLimit
+
+    -- * Destructuring the Response
+    , describeComplianceByResourceResponse
+    , DescribeComplianceByResourceResponse
+    -- * Response Lenses
+    , dcbrrsComplianceByResources
+    , dcbrrsNextToken
+    , dcbrrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeComplianceByResource' smart constructor.
+data DescribeComplianceByResource = DescribeComplianceByResource'
+    { _dcbrResourceId      :: !(Maybe Text)
+    , _dcbrResourceType    :: !(Maybe Text)
+    , _dcbrComplianceTypes :: !(Maybe [ComplianceType])
+    , _dcbrNextToken       :: !(Maybe Text)
+    , _dcbrLimit           :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeComplianceByResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcbrResourceId'
+--
+-- * 'dcbrResourceType'
+--
+-- * 'dcbrComplianceTypes'
+--
+-- * 'dcbrNextToken'
+--
+-- * 'dcbrLimit'
+describeComplianceByResource
+    :: DescribeComplianceByResource
+describeComplianceByResource =
+    DescribeComplianceByResource'
+    { _dcbrResourceId = Nothing
+    , _dcbrResourceType = Nothing
+    , _dcbrComplianceTypes = Nothing
+    , _dcbrNextToken = Nothing
+    , _dcbrLimit = Nothing
+    }
+
+-- | The ID of the AWS resource for which you want compliance information.
+-- You can specify only one resource ID. If you specify a resource ID, you
+-- must also specify a type for 'ResourceType'.
+dcbrResourceId :: Lens' DescribeComplianceByResource (Maybe Text)
+dcbrResourceId = lens _dcbrResourceId (\ s a -> s{_dcbrResourceId = a});
+
+-- | The types of AWS resources for which you want compliance information;
+-- for example, 'AWS::EC2::Instance'. For this action, you can specify that
+-- the resource type is an AWS account by specifying 'AWS::::Account'.
+dcbrResourceType :: Lens' DescribeComplianceByResource (Maybe Text)
+dcbrResourceType = lens _dcbrResourceType (\ s a -> s{_dcbrResourceType = a});
+
+-- | Filters the results by compliance. The valid values are 'Compliant' and
+-- 'NonCompliant'.
+dcbrComplianceTypes :: Lens' DescribeComplianceByResource [ComplianceType]
+dcbrComplianceTypes = lens _dcbrComplianceTypes (\ s a -> s{_dcbrComplianceTypes = a}) . _Default . _Coerce;
+
+-- | The 'nextToken' string returned on a previous page that you use to get
+-- the next page of results in a paginated response.
+dcbrNextToken :: Lens' DescribeComplianceByResource (Maybe Text)
+dcbrNextToken = lens _dcbrNextToken (\ s a -> s{_dcbrNextToken = a});
+
+-- | The maximum number of evaluation results returned on each page. The
+-- default is 10. You cannot specify a limit greater than 100. If you
+-- specify 0, AWS Config uses the default.
+dcbrLimit :: Lens' DescribeComplianceByResource (Maybe Natural)
+dcbrLimit = lens _dcbrLimit (\ s a -> s{_dcbrLimit = a}) . mapping _Nat;
+
+instance AWSRequest DescribeComplianceByResource
+         where
+        type Rs DescribeComplianceByResource =
+             DescribeComplianceByResourceResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeComplianceByResourceResponse' <$>
+                   (x .?> "ComplianceByResources" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeComplianceByResource where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.DescribeComplianceByResource"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeComplianceByResource where
+        toJSON DescribeComplianceByResource'{..}
+          = object
+              (catMaybes
+                 [("ResourceId" .=) <$> _dcbrResourceId,
+                  ("ResourceType" .=) <$> _dcbrResourceType,
+                  ("ComplianceTypes" .=) <$> _dcbrComplianceTypes,
+                  ("NextToken" .=) <$> _dcbrNextToken,
+                  ("Limit" .=) <$> _dcbrLimit])
+
+instance ToPath DescribeComplianceByResource where
+        toPath = const "/"
+
+instance ToQuery DescribeComplianceByResource where
+        toQuery = const mempty
+
+-- | /See:/ 'describeComplianceByResourceResponse' smart constructor.
+data DescribeComplianceByResourceResponse = DescribeComplianceByResourceResponse'
+    { _dcbrrsComplianceByResources :: !(Maybe [ComplianceByResource])
+    , _dcbrrsNextToken             :: !(Maybe Text)
+    , _dcbrrsResponseStatus        :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeComplianceByResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcbrrsComplianceByResources'
+--
+-- * 'dcbrrsNextToken'
+--
+-- * 'dcbrrsResponseStatus'
+describeComplianceByResourceResponse
+    :: Int -- ^ 'dcbrrsResponseStatus'
+    -> DescribeComplianceByResourceResponse
+describeComplianceByResourceResponse pResponseStatus_ =
+    DescribeComplianceByResourceResponse'
+    { _dcbrrsComplianceByResources = Nothing
+    , _dcbrrsNextToken = Nothing
+    , _dcbrrsResponseStatus = pResponseStatus_
+    }
+
+-- | Indicates whether the specified AWS resource complies with all of the
+-- AWS Config rules that evaluate it.
+dcbrrsComplianceByResources :: Lens' DescribeComplianceByResourceResponse [ComplianceByResource]
+dcbrrsComplianceByResources = lens _dcbrrsComplianceByResources (\ s a -> s{_dcbrrsComplianceByResources = a}) . _Default . _Coerce;
+
+-- | The string that you use in a subsequent request to get the next page of
+-- results in a paginated response.
+dcbrrsNextToken :: Lens' DescribeComplianceByResourceResponse (Maybe Text)
+dcbrrsNextToken = lens _dcbrrsNextToken (\ s a -> s{_dcbrrsNextToken = a});
+
+-- | The response status code.
+dcbrrsResponseStatus :: Lens' DescribeComplianceByResourceResponse Int
+dcbrrsResponseStatus = lens _dcbrrsResponseStatus (\ s a -> s{_dcbrrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/DescribeConfigRuleEvaluationStatus.hs b/gen/Network/AWS/Config/DescribeConfigRuleEvaluationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/DescribeConfigRuleEvaluationStatus.hs
@@ -0,0 +1,138 @@
+{-# 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.Config.DescribeConfigRuleEvaluationStatus
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns status information for each of your AWS managed Config rules.
+-- The status includes information such as the last time AWS Config invoked
+-- the rule, the last time AWS Config failed to invoke the rule, and the
+-- related error for the last failure.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigRuleEvaluationStatus.html AWS API Reference> for DescribeConfigRuleEvaluationStatus.
+module Network.AWS.Config.DescribeConfigRuleEvaluationStatus
+    (
+    -- * Creating a Request
+      describeConfigRuleEvaluationStatus
+    , DescribeConfigRuleEvaluationStatus
+    -- * Request Lenses
+    , dcresConfigRuleNames
+
+    -- * Destructuring the Response
+    , describeConfigRuleEvaluationStatusResponse
+    , DescribeConfigRuleEvaluationStatusResponse
+    -- * Response Lenses
+    , dcresrsConfigRulesEvaluationStatus
+    , dcresrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeConfigRuleEvaluationStatus' smart constructor.
+newtype DescribeConfigRuleEvaluationStatus = DescribeConfigRuleEvaluationStatus'
+    { _dcresConfigRuleNames :: Maybe [Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeConfigRuleEvaluationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcresConfigRuleNames'
+describeConfigRuleEvaluationStatus
+    :: DescribeConfigRuleEvaluationStatus
+describeConfigRuleEvaluationStatus =
+    DescribeConfigRuleEvaluationStatus'
+    { _dcresConfigRuleNames = Nothing
+    }
+
+-- | The name of the AWS managed Config rules for which you want status
+-- information. If you do not specify any names, AWS Config returns status
+-- information for all AWS managed Config rules that you use.
+dcresConfigRuleNames :: Lens' DescribeConfigRuleEvaluationStatus [Text]
+dcresConfigRuleNames = lens _dcresConfigRuleNames (\ s a -> s{_dcresConfigRuleNames = a}) . _Default . _Coerce;
+
+instance AWSRequest
+         DescribeConfigRuleEvaluationStatus where
+        type Rs DescribeConfigRuleEvaluationStatus =
+             DescribeConfigRuleEvaluationStatusResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeConfigRuleEvaluationStatusResponse' <$>
+                   (x .?> "ConfigRulesEvaluationStatus" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance ToHeaders DescribeConfigRuleEvaluationStatus
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.DescribeConfigRuleEvaluationStatus"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeConfigRuleEvaluationStatus
+         where
+        toJSON DescribeConfigRuleEvaluationStatus'{..}
+          = object
+              (catMaybes
+                 [("ConfigRuleNames" .=) <$> _dcresConfigRuleNames])
+
+instance ToPath DescribeConfigRuleEvaluationStatus
+         where
+        toPath = const "/"
+
+instance ToQuery DescribeConfigRuleEvaluationStatus
+         where
+        toQuery = const mempty
+
+-- | /See:/ 'describeConfigRuleEvaluationStatusResponse' smart constructor.
+data DescribeConfigRuleEvaluationStatusResponse = DescribeConfigRuleEvaluationStatusResponse'
+    { _dcresrsConfigRulesEvaluationStatus :: !(Maybe [ConfigRuleEvaluationStatus])
+    , _dcresrsResponseStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeConfigRuleEvaluationStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcresrsConfigRulesEvaluationStatus'
+--
+-- * 'dcresrsResponseStatus'
+describeConfigRuleEvaluationStatusResponse
+    :: Int -- ^ 'dcresrsResponseStatus'
+    -> DescribeConfigRuleEvaluationStatusResponse
+describeConfigRuleEvaluationStatusResponse pResponseStatus_ =
+    DescribeConfigRuleEvaluationStatusResponse'
+    { _dcresrsConfigRulesEvaluationStatus = Nothing
+    , _dcresrsResponseStatus = pResponseStatus_
+    }
+
+-- | Status information about your AWS managed Config rules.
+dcresrsConfigRulesEvaluationStatus :: Lens' DescribeConfigRuleEvaluationStatusResponse [ConfigRuleEvaluationStatus]
+dcresrsConfigRulesEvaluationStatus = lens _dcresrsConfigRulesEvaluationStatus (\ s a -> s{_dcresrsConfigRulesEvaluationStatus = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dcresrsResponseStatus :: Lens' DescribeConfigRuleEvaluationStatusResponse Int
+dcresrsResponseStatus = lens _dcresrsResponseStatus (\ s a -> s{_dcresrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/DescribeConfigRules.hs b/gen/Network/AWS/Config/DescribeConfigRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/DescribeConfigRules.hs
@@ -0,0 +1,151 @@
+{-# 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.Config.DescribeConfigRules
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns details about your AWS Config rules.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigRules.html AWS API Reference> for DescribeConfigRules.
+module Network.AWS.Config.DescribeConfigRules
+    (
+    -- * Creating a Request
+      describeConfigRules
+    , DescribeConfigRules
+    -- * Request Lenses
+    , dcrConfigRuleNames
+    , dcrNextToken
+
+    -- * Destructuring the Response
+    , describeConfigRulesResponse
+    , DescribeConfigRulesResponse
+    -- * Response Lenses
+    , dcrrsConfigRules
+    , dcrrsNextToken
+    , dcrrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeConfigRules' smart constructor.
+data DescribeConfigRules = DescribeConfigRules'
+    { _dcrConfigRuleNames :: !(Maybe [Text])
+    , _dcrNextToken       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeConfigRules' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrConfigRuleNames'
+--
+-- * 'dcrNextToken'
+describeConfigRules
+    :: DescribeConfigRules
+describeConfigRules =
+    DescribeConfigRules'
+    { _dcrConfigRuleNames = Nothing
+    , _dcrNextToken = Nothing
+    }
+
+-- | The names of the AWS Config rules for which you want details. If you do
+-- not specify any names, AWS Config returns details for all your rules.
+dcrConfigRuleNames :: Lens' DescribeConfigRules [Text]
+dcrConfigRuleNames = lens _dcrConfigRuleNames (\ s a -> s{_dcrConfigRuleNames = a}) . _Default . _Coerce;
+
+-- | The 'nextToken' string returned on a previous page that you use to get
+-- the next page of results in a paginated response.
+dcrNextToken :: Lens' DescribeConfigRules (Maybe Text)
+dcrNextToken = lens _dcrNextToken (\ s a -> s{_dcrNextToken = a});
+
+instance AWSRequest DescribeConfigRules where
+        type Rs DescribeConfigRules =
+             DescribeConfigRulesResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeConfigRulesResponse' <$>
+                   (x .?> "ConfigRules" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeConfigRules where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.DescribeConfigRules" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeConfigRules where
+        toJSON DescribeConfigRules'{..}
+          = object
+              (catMaybes
+                 [("ConfigRuleNames" .=) <$> _dcrConfigRuleNames,
+                  ("NextToken" .=) <$> _dcrNextToken])
+
+instance ToPath DescribeConfigRules where
+        toPath = const "/"
+
+instance ToQuery DescribeConfigRules where
+        toQuery = const mempty
+
+-- | /See:/ 'describeConfigRulesResponse' smart constructor.
+data DescribeConfigRulesResponse = DescribeConfigRulesResponse'
+    { _dcrrsConfigRules    :: !(Maybe [ConfigRule])
+    , _dcrrsNextToken      :: !(Maybe Text)
+    , _dcrrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeConfigRulesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrrsConfigRules'
+--
+-- * 'dcrrsNextToken'
+--
+-- * 'dcrrsResponseStatus'
+describeConfigRulesResponse
+    :: Int -- ^ 'dcrrsResponseStatus'
+    -> DescribeConfigRulesResponse
+describeConfigRulesResponse pResponseStatus_ =
+    DescribeConfigRulesResponse'
+    { _dcrrsConfigRules = Nothing
+    , _dcrrsNextToken = Nothing
+    , _dcrrsResponseStatus = pResponseStatus_
+    }
+
+-- | The details about your AWS Config rules.
+dcrrsConfigRules :: Lens' DescribeConfigRulesResponse [ConfigRule]
+dcrrsConfigRules = lens _dcrrsConfigRules (\ s a -> s{_dcrrsConfigRules = a}) . _Default . _Coerce;
+
+-- | The string that you use in a subsequent request to get the next page of
+-- results in a paginated response.
+dcrrsNextToken :: Lens' DescribeConfigRulesResponse (Maybe Text)
+dcrrsNextToken = lens _dcrrsNextToken (\ s a -> s{_dcrrsNextToken = a});
+
+-- | The response status code.
+dcrrsResponseStatus :: Lens' DescribeConfigRulesResponse Int
+dcrrsResponseStatus = lens _dcrrsResponseStatus (\ s a -> s{_dcrrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/DescribeConfigurationRecorders.hs b/gen/Network/AWS/Config/DescribeConfigurationRecorders.hs
--- a/gen/Network/AWS/Config/DescribeConfigurationRecorders.hs
+++ b/gen/Network/AWS/Config/DescribeConfigurationRecorders.hs
@@ -37,8 +37,8 @@
     , describeConfigurationRecordersResponse
     , DescribeConfigurationRecordersResponse
     -- * Response Lenses
-    , dcrrsConfigurationRecorders
-    , dcrrsResponseStatus
+    , drsConfigurationRecorders
+    , drsResponseStatus
     ) where
 
 import           Network.AWS.Config.Types
@@ -110,31 +110,31 @@
 --
 -- /See:/ 'describeConfigurationRecordersResponse' smart constructor.
 data DescribeConfigurationRecordersResponse = DescribeConfigurationRecordersResponse'
-    { _dcrrsConfigurationRecorders :: !(Maybe [ConfigurationRecorder])
-    , _dcrrsResponseStatus         :: !Int
+    { _drsConfigurationRecorders :: !(Maybe [ConfigurationRecorder])
+    , _drsResponseStatus         :: !Int
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'DescribeConfigurationRecordersResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dcrrsConfigurationRecorders'
+-- * 'drsConfigurationRecorders'
 --
--- * 'dcrrsResponseStatus'
+-- * 'drsResponseStatus'
 describeConfigurationRecordersResponse
-    :: Int -- ^ 'dcrrsResponseStatus'
+    :: Int -- ^ 'drsResponseStatus'
     -> DescribeConfigurationRecordersResponse
 describeConfigurationRecordersResponse pResponseStatus_ =
     DescribeConfigurationRecordersResponse'
-    { _dcrrsConfigurationRecorders = Nothing
-    , _dcrrsResponseStatus = pResponseStatus_
+    { _drsConfigurationRecorders = Nothing
+    , _drsResponseStatus = pResponseStatus_
     }
 
 -- | A list that contains the descriptions of the specified configuration
 -- recorders.
-dcrrsConfigurationRecorders :: Lens' DescribeConfigurationRecordersResponse [ConfigurationRecorder]
-dcrrsConfigurationRecorders = lens _dcrrsConfigurationRecorders (\ s a -> s{_dcrrsConfigurationRecorders = a}) . _Default . _Coerce;
+drsConfigurationRecorders :: Lens' DescribeConfigurationRecordersResponse [ConfigurationRecorder]
+drsConfigurationRecorders = lens _drsConfigurationRecorders (\ s a -> s{_drsConfigurationRecorders = a}) . _Default . _Coerce;
 
 -- | The response status code.
-dcrrsResponseStatus :: Lens' DescribeConfigurationRecordersResponse Int
-dcrrsResponseStatus = lens _dcrrsResponseStatus (\ s a -> s{_dcrrsResponseStatus = a});
+drsResponseStatus :: Lens' DescribeConfigurationRecordersResponse Int
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/GetComplianceDetailsByConfigRule.hs b/gen/Network/AWS/Config/GetComplianceDetailsByConfigRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/GetComplianceDetailsByConfigRule.hs
@@ -0,0 +1,184 @@
+{-# 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.Config.GetComplianceDetailsByConfigRule
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the evaluation results for the specified AWS Config rule. The
+-- results indicate which AWS resources were evaluated by the rule, when
+-- each resource was last evaluated, and whether each resource complies
+-- with the rule.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html AWS API Reference> for GetComplianceDetailsByConfigRule.
+module Network.AWS.Config.GetComplianceDetailsByConfigRule
+    (
+    -- * Creating a Request
+      getComplianceDetailsByConfigRule
+    , GetComplianceDetailsByConfigRule
+    -- * Request Lenses
+    , gcdbcrComplianceTypes
+    , gcdbcrNextToken
+    , gcdbcrLimit
+    , gcdbcrConfigRuleName
+
+    -- * Destructuring the Response
+    , getComplianceDetailsByConfigRuleResponse
+    , GetComplianceDetailsByConfigRuleResponse
+    -- * Response Lenses
+    , gcdbcrrsEvaluationResults
+    , gcdbcrrsNextToken
+    , gcdbcrrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'getComplianceDetailsByConfigRule' smart constructor.
+data GetComplianceDetailsByConfigRule = GetComplianceDetailsByConfigRule'
+    { _gcdbcrComplianceTypes :: !(Maybe [ComplianceType])
+    , _gcdbcrNextToken       :: !(Maybe Text)
+    , _gcdbcrLimit           :: !(Maybe Nat)
+    , _gcdbcrConfigRuleName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceDetailsByConfigRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcdbcrComplianceTypes'
+--
+-- * 'gcdbcrNextToken'
+--
+-- * 'gcdbcrLimit'
+--
+-- * 'gcdbcrConfigRuleName'
+getComplianceDetailsByConfigRule
+    :: Text -- ^ 'gcdbcrConfigRuleName'
+    -> GetComplianceDetailsByConfigRule
+getComplianceDetailsByConfigRule pConfigRuleName_ =
+    GetComplianceDetailsByConfigRule'
+    { _gcdbcrComplianceTypes = Nothing
+    , _gcdbcrNextToken = Nothing
+    , _gcdbcrLimit = Nothing
+    , _gcdbcrConfigRuleName = pConfigRuleName_
+    }
+
+-- | Specify to filter the results by compliance. The valid values are
+-- 'Compliant', 'NonCompliant', and 'NotApplicable'.
+gcdbcrComplianceTypes :: Lens' GetComplianceDetailsByConfigRule [ComplianceType]
+gcdbcrComplianceTypes = lens _gcdbcrComplianceTypes (\ s a -> s{_gcdbcrComplianceTypes = a}) . _Default . _Coerce;
+
+-- | The 'nextToken' string returned on a previous page that you use to get
+-- the next page of results in a paginated response.
+gcdbcrNextToken :: Lens' GetComplianceDetailsByConfigRule (Maybe Text)
+gcdbcrNextToken = lens _gcdbcrNextToken (\ s a -> s{_gcdbcrNextToken = a});
+
+-- | The maximum number of evaluation results returned on each page. The
+-- default is 10. You cannot specify a limit greater than 100. If you
+-- specify 0, AWS Config uses the default.
+gcdbcrLimit :: Lens' GetComplianceDetailsByConfigRule (Maybe Natural)
+gcdbcrLimit = lens _gcdbcrLimit (\ s a -> s{_gcdbcrLimit = a}) . mapping _Nat;
+
+-- | The name of the AWS Config rule for which you want compliance
+-- information.
+gcdbcrConfigRuleName :: Lens' GetComplianceDetailsByConfigRule Text
+gcdbcrConfigRuleName = lens _gcdbcrConfigRuleName (\ s a -> s{_gcdbcrConfigRuleName = a});
+
+instance AWSRequest GetComplianceDetailsByConfigRule
+         where
+        type Rs GetComplianceDetailsByConfigRule =
+             GetComplianceDetailsByConfigRuleResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetComplianceDetailsByConfigRuleResponse' <$>
+                   (x .?> "EvaluationResults" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetComplianceDetailsByConfigRule
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.GetComplianceDetailsByConfigRule"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetComplianceDetailsByConfigRule
+         where
+        toJSON GetComplianceDetailsByConfigRule'{..}
+          = object
+              (catMaybes
+                 [("ComplianceTypes" .=) <$> _gcdbcrComplianceTypes,
+                  ("NextToken" .=) <$> _gcdbcrNextToken,
+                  ("Limit" .=) <$> _gcdbcrLimit,
+                  Just ("ConfigRuleName" .= _gcdbcrConfigRuleName)])
+
+instance ToPath GetComplianceDetailsByConfigRule
+         where
+        toPath = const "/"
+
+instance ToQuery GetComplianceDetailsByConfigRule
+         where
+        toQuery = const mempty
+
+-- | /See:/ 'getComplianceDetailsByConfigRuleResponse' smart constructor.
+data GetComplianceDetailsByConfigRuleResponse = GetComplianceDetailsByConfigRuleResponse'
+    { _gcdbcrrsEvaluationResults :: !(Maybe [EvaluationResult])
+    , _gcdbcrrsNextToken         :: !(Maybe Text)
+    , _gcdbcrrsResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceDetailsByConfigRuleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcdbcrrsEvaluationResults'
+--
+-- * 'gcdbcrrsNextToken'
+--
+-- * 'gcdbcrrsResponseStatus'
+getComplianceDetailsByConfigRuleResponse
+    :: Int -- ^ 'gcdbcrrsResponseStatus'
+    -> GetComplianceDetailsByConfigRuleResponse
+getComplianceDetailsByConfigRuleResponse pResponseStatus_ =
+    GetComplianceDetailsByConfigRuleResponse'
+    { _gcdbcrrsEvaluationResults = Nothing
+    , _gcdbcrrsNextToken = Nothing
+    , _gcdbcrrsResponseStatus = pResponseStatus_
+    }
+
+-- | Indicates whether the AWS resource complies with the specified AWS
+-- Config rule.
+gcdbcrrsEvaluationResults :: Lens' GetComplianceDetailsByConfigRuleResponse [EvaluationResult]
+gcdbcrrsEvaluationResults = lens _gcdbcrrsEvaluationResults (\ s a -> s{_gcdbcrrsEvaluationResults = a}) . _Default . _Coerce;
+
+-- | The string that you use in a subsequent request to get the next page of
+-- results in a paginated response.
+gcdbcrrsNextToken :: Lens' GetComplianceDetailsByConfigRuleResponse (Maybe Text)
+gcdbcrrsNextToken = lens _gcdbcrrsNextToken (\ s a -> s{_gcdbcrrsNextToken = a});
+
+-- | The response status code.
+gcdbcrrsResponseStatus :: Lens' GetComplianceDetailsByConfigRuleResponse Int
+gcdbcrrsResponseStatus = lens _gcdbcrrsResponseStatus (\ s a -> s{_gcdbcrrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/GetComplianceDetailsByResource.hs b/gen/Network/AWS/Config/GetComplianceDetailsByResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/GetComplianceDetailsByResource.hs
@@ -0,0 +1,179 @@
+{-# 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.Config.GetComplianceDetailsByResource
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the evaluation results for the specified AWS resource. The
+-- results indicate which AWS Config rules were used to evaluate the
+-- resource, when each rule was last used, and whether the resource
+-- complies with each rule.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByResource.html AWS API Reference> for GetComplianceDetailsByResource.
+module Network.AWS.Config.GetComplianceDetailsByResource
+    (
+    -- * Creating a Request
+      getComplianceDetailsByResource
+    , GetComplianceDetailsByResource
+    -- * Request Lenses
+    , gcdbrComplianceTypes
+    , gcdbrNextToken
+    , gcdbrResourceType
+    , gcdbrResourceId
+
+    -- * Destructuring the Response
+    , getComplianceDetailsByResourceResponse
+    , GetComplianceDetailsByResourceResponse
+    -- * Response Lenses
+    , gcdbrrsEvaluationResults
+    , gcdbrrsNextToken
+    , gcdbrrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'getComplianceDetailsByResource' smart constructor.
+data GetComplianceDetailsByResource = GetComplianceDetailsByResource'
+    { _gcdbrComplianceTypes :: !(Maybe [ComplianceType])
+    , _gcdbrNextToken       :: !(Maybe Text)
+    , _gcdbrResourceType    :: !Text
+    , _gcdbrResourceId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceDetailsByResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcdbrComplianceTypes'
+--
+-- * 'gcdbrNextToken'
+--
+-- * 'gcdbrResourceType'
+--
+-- * 'gcdbrResourceId'
+getComplianceDetailsByResource
+    :: Text -- ^ 'gcdbrResourceType'
+    -> Text -- ^ 'gcdbrResourceId'
+    -> GetComplianceDetailsByResource
+getComplianceDetailsByResource pResourceType_ pResourceId_ =
+    GetComplianceDetailsByResource'
+    { _gcdbrComplianceTypes = Nothing
+    , _gcdbrNextToken = Nothing
+    , _gcdbrResourceType = pResourceType_
+    , _gcdbrResourceId = pResourceId_
+    }
+
+-- | Specify to filter the results by compliance. The valid values are
+-- 'Compliant', 'NonCompliant', and 'NotApplicable'.
+gcdbrComplianceTypes :: Lens' GetComplianceDetailsByResource [ComplianceType]
+gcdbrComplianceTypes = lens _gcdbrComplianceTypes (\ s a -> s{_gcdbrComplianceTypes = a}) . _Default . _Coerce;
+
+-- | The 'nextToken' string returned on a previous page that you use to get
+-- the next page of results in a paginated response.
+gcdbrNextToken :: Lens' GetComplianceDetailsByResource (Maybe Text)
+gcdbrNextToken = lens _gcdbrNextToken (\ s a -> s{_gcdbrNextToken = a});
+
+-- | The type of the AWS resource for which you want compliance information.
+gcdbrResourceType :: Lens' GetComplianceDetailsByResource Text
+gcdbrResourceType = lens _gcdbrResourceType (\ s a -> s{_gcdbrResourceType = a});
+
+-- | The ID of the AWS resource for which you want compliance information.
+gcdbrResourceId :: Lens' GetComplianceDetailsByResource Text
+gcdbrResourceId = lens _gcdbrResourceId (\ s a -> s{_gcdbrResourceId = a});
+
+instance AWSRequest GetComplianceDetailsByResource
+         where
+        type Rs GetComplianceDetailsByResource =
+             GetComplianceDetailsByResourceResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetComplianceDetailsByResourceResponse' <$>
+                   (x .?> "EvaluationResults" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetComplianceDetailsByResource
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.GetComplianceDetailsByResource"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetComplianceDetailsByResource where
+        toJSON GetComplianceDetailsByResource'{..}
+          = object
+              (catMaybes
+                 [("ComplianceTypes" .=) <$> _gcdbrComplianceTypes,
+                  ("NextToken" .=) <$> _gcdbrNextToken,
+                  Just ("ResourceType" .= _gcdbrResourceType),
+                  Just ("ResourceId" .= _gcdbrResourceId)])
+
+instance ToPath GetComplianceDetailsByResource where
+        toPath = const "/"
+
+instance ToQuery GetComplianceDetailsByResource where
+        toQuery = const mempty
+
+-- | /See:/ 'getComplianceDetailsByResourceResponse' smart constructor.
+data GetComplianceDetailsByResourceResponse = GetComplianceDetailsByResourceResponse'
+    { _gcdbrrsEvaluationResults :: !(Maybe [EvaluationResult])
+    , _gcdbrrsNextToken         :: !(Maybe Text)
+    , _gcdbrrsResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceDetailsByResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcdbrrsEvaluationResults'
+--
+-- * 'gcdbrrsNextToken'
+--
+-- * 'gcdbrrsResponseStatus'
+getComplianceDetailsByResourceResponse
+    :: Int -- ^ 'gcdbrrsResponseStatus'
+    -> GetComplianceDetailsByResourceResponse
+getComplianceDetailsByResourceResponse pResponseStatus_ =
+    GetComplianceDetailsByResourceResponse'
+    { _gcdbrrsEvaluationResults = Nothing
+    , _gcdbrrsNextToken = Nothing
+    , _gcdbrrsResponseStatus = pResponseStatus_
+    }
+
+-- | Indicates whether the specified AWS resource complies each AWS Config
+-- rule.
+gcdbrrsEvaluationResults :: Lens' GetComplianceDetailsByResourceResponse [EvaluationResult]
+gcdbrrsEvaluationResults = lens _gcdbrrsEvaluationResults (\ s a -> s{_gcdbrrsEvaluationResults = a}) . _Default . _Coerce;
+
+-- | The string that you use in a subsequent request to get the next page of
+-- results in a paginated response.
+gcdbrrsNextToken :: Lens' GetComplianceDetailsByResourceResponse (Maybe Text)
+gcdbrrsNextToken = lens _gcdbrrsNextToken (\ s a -> s{_gcdbrrsNextToken = a});
+
+-- | The response status code.
+gcdbrrsResponseStatus :: Lens' GetComplianceDetailsByResourceResponse Int
+gcdbrrsResponseStatus = lens _gcdbrrsResponseStatus (\ s a -> s{_gcdbrrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/GetComplianceSummaryByConfigRule.hs b/gen/Network/AWS/Config/GetComplianceSummaryByConfigRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/GetComplianceSummaryByConfigRule.hs
@@ -0,0 +1,119 @@
+{-# 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.Config.GetComplianceSummaryByConfigRule
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the number of AWS Config rules that are compliant and
+-- noncompliant, up to a maximum of 25 for each.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceSummaryByConfigRule.html AWS API Reference> for GetComplianceSummaryByConfigRule.
+module Network.AWS.Config.GetComplianceSummaryByConfigRule
+    (
+    -- * Creating a Request
+      getComplianceSummaryByConfigRule
+    , GetComplianceSummaryByConfigRule
+
+    -- * Destructuring the Response
+    , getComplianceSummaryByConfigRuleResponse
+    , GetComplianceSummaryByConfigRuleResponse
+    -- * Response Lenses
+    , gcsbcrrsComplianceSummary
+    , gcsbcrrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'getComplianceSummaryByConfigRule' smart constructor.
+data GetComplianceSummaryByConfigRule =
+    GetComplianceSummaryByConfigRule'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceSummaryByConfigRule' with the minimum fields required to make a request.
+--
+getComplianceSummaryByConfigRule
+    :: GetComplianceSummaryByConfigRule
+getComplianceSummaryByConfigRule = GetComplianceSummaryByConfigRule'
+
+instance AWSRequest GetComplianceSummaryByConfigRule
+         where
+        type Rs GetComplianceSummaryByConfigRule =
+             GetComplianceSummaryByConfigRuleResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetComplianceSummaryByConfigRuleResponse' <$>
+                   (x .?> "ComplianceSummary") <*> (pure (fromEnum s)))
+
+instance ToHeaders GetComplianceSummaryByConfigRule
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.GetComplianceSummaryByConfigRule"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetComplianceSummaryByConfigRule
+         where
+        toJSON = const (Object mempty)
+
+instance ToPath GetComplianceSummaryByConfigRule
+         where
+        toPath = const "/"
+
+instance ToQuery GetComplianceSummaryByConfigRule
+         where
+        toQuery = const mempty
+
+-- | /See:/ 'getComplianceSummaryByConfigRuleResponse' smart constructor.
+data GetComplianceSummaryByConfigRuleResponse = GetComplianceSummaryByConfigRuleResponse'
+    { _gcsbcrrsComplianceSummary :: !(Maybe ComplianceSummary)
+    , _gcsbcrrsResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceSummaryByConfigRuleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcsbcrrsComplianceSummary'
+--
+-- * 'gcsbcrrsResponseStatus'
+getComplianceSummaryByConfigRuleResponse
+    :: Int -- ^ 'gcsbcrrsResponseStatus'
+    -> GetComplianceSummaryByConfigRuleResponse
+getComplianceSummaryByConfigRuleResponse pResponseStatus_ =
+    GetComplianceSummaryByConfigRuleResponse'
+    { _gcsbcrrsComplianceSummary = Nothing
+    , _gcsbcrrsResponseStatus = pResponseStatus_
+    }
+
+-- | The number of AWS Config rules that are compliant and the number that
+-- are noncompliant, up to a maximum of 25 for each.
+gcsbcrrsComplianceSummary :: Lens' GetComplianceSummaryByConfigRuleResponse (Maybe ComplianceSummary)
+gcsbcrrsComplianceSummary = lens _gcsbcrrsComplianceSummary (\ s a -> s{_gcsbcrrsComplianceSummary = a});
+
+-- | The response status code.
+gcsbcrrsResponseStatus :: Lens' GetComplianceSummaryByConfigRuleResponse Int
+gcsbcrrsResponseStatus = lens _gcsbcrrsResponseStatus (\ s a -> s{_gcsbcrrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/GetComplianceSummaryByResourceType.hs b/gen/Network/AWS/Config/GetComplianceSummaryByResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/GetComplianceSummaryByResourceType.hs
@@ -0,0 +1,146 @@
+{-# 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.Config.GetComplianceSummaryByResourceType
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the number of resources that are compliant and the number that
+-- are noncompliant. You can specify one or more resource types to get
+-- these numbers for each resource type. The maximum number returned is
+-- 100.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceSummaryByResourceType.html AWS API Reference> for GetComplianceSummaryByResourceType.
+module Network.AWS.Config.GetComplianceSummaryByResourceType
+    (
+    -- * Creating a Request
+      getComplianceSummaryByResourceType
+    , GetComplianceSummaryByResourceType
+    -- * Request Lenses
+    , gcsbrtResourceTypes
+
+    -- * Destructuring the Response
+    , getComplianceSummaryByResourceTypeResponse
+    , GetComplianceSummaryByResourceTypeResponse
+    -- * Response Lenses
+    , gcsbrtrsComplianceSummariesByResourceType
+    , gcsbrtrsResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'getComplianceSummaryByResourceType' smart constructor.
+newtype GetComplianceSummaryByResourceType = GetComplianceSummaryByResourceType'
+    { _gcsbrtResourceTypes :: Maybe [Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceSummaryByResourceType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcsbrtResourceTypes'
+getComplianceSummaryByResourceType
+    :: GetComplianceSummaryByResourceType
+getComplianceSummaryByResourceType =
+    GetComplianceSummaryByResourceType'
+    { _gcsbrtResourceTypes = Nothing
+    }
+
+-- | Specify one or more resource types to get the number of resources that
+-- are compliant and the number that are noncompliant for each resource
+-- type.
+--
+-- For this request, you can specify an AWS resource type such as
+-- 'AWS::EC2::Instance', and you can specify that the resource type is an
+-- AWS account by specifying 'AWS::::Account'.
+gcsbrtResourceTypes :: Lens' GetComplianceSummaryByResourceType [Text]
+gcsbrtResourceTypes = lens _gcsbrtResourceTypes (\ s a -> s{_gcsbrtResourceTypes = a}) . _Default . _Coerce;
+
+instance AWSRequest
+         GetComplianceSummaryByResourceType where
+        type Rs GetComplianceSummaryByResourceType =
+             GetComplianceSummaryByResourceTypeResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetComplianceSummaryByResourceTypeResponse' <$>
+                   (x .?> "ComplianceSummariesByResourceType" .!@
+                      mempty)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetComplianceSummaryByResourceType
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.GetComplianceSummaryByResourceType"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetComplianceSummaryByResourceType
+         where
+        toJSON GetComplianceSummaryByResourceType'{..}
+          = object
+              (catMaybes
+                 [("ResourceTypes" .=) <$> _gcsbrtResourceTypes])
+
+instance ToPath GetComplianceSummaryByResourceType
+         where
+        toPath = const "/"
+
+instance ToQuery GetComplianceSummaryByResourceType
+         where
+        toQuery = const mempty
+
+-- | /See:/ 'getComplianceSummaryByResourceTypeResponse' smart constructor.
+data GetComplianceSummaryByResourceTypeResponse = GetComplianceSummaryByResourceTypeResponse'
+    { _gcsbrtrsComplianceSummariesByResourceType :: !(Maybe [ComplianceSummaryByResourceType])
+    , _gcsbrtrsResponseStatus                    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetComplianceSummaryByResourceTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcsbrtrsComplianceSummariesByResourceType'
+--
+-- * 'gcsbrtrsResponseStatus'
+getComplianceSummaryByResourceTypeResponse
+    :: Int -- ^ 'gcsbrtrsResponseStatus'
+    -> GetComplianceSummaryByResourceTypeResponse
+getComplianceSummaryByResourceTypeResponse pResponseStatus_ =
+    GetComplianceSummaryByResourceTypeResponse'
+    { _gcsbrtrsComplianceSummariesByResourceType = Nothing
+    , _gcsbrtrsResponseStatus = pResponseStatus_
+    }
+
+-- | The number of resources that are compliant and the number that are
+-- noncompliant. If one or more resource types were provided with the
+-- request, the numbers are returned for each resource type. The maximum
+-- number returned is 100.
+gcsbrtrsComplianceSummariesByResourceType :: Lens' GetComplianceSummaryByResourceTypeResponse [ComplianceSummaryByResourceType]
+gcsbrtrsComplianceSummariesByResourceType = lens _gcsbrtrsComplianceSummariesByResourceType (\ s a -> s{_gcsbrtrsComplianceSummariesByResourceType = a}) . _Default . _Coerce;
+
+-- | The response status code.
+gcsbrtrsResponseStatus :: Lens' GetComplianceSummaryByResourceTypeResponse Int
+gcsbrtrsResponseStatus = lens _gcsbrtrsResponseStatus (\ s a -> s{_gcsbrtrsResponseStatus = a});
diff --git a/gen/Network/AWS/Config/PutConfigRule.hs b/gen/Network/AWS/Config/PutConfigRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/PutConfigRule.hs
@@ -0,0 +1,133 @@
+{-# 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.Config.PutConfigRule
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates an AWS Config rule for evaluating whether your AWS
+-- resources comply with your desired configurations.
+--
+-- You can use this action for customer managed Config rules and AWS
+-- managed Config rules. A customer managed Config rule is a custom rule
+-- that you develop and maintain. An AWS managed Config rule is a
+-- customizable, predefined rule that is provided by AWS Config.
+--
+-- If you are adding a new customer managed Config rule, you must first
+-- create the AWS Lambda function that the rule invokes to evaluate your
+-- resources. When you use the 'PutConfigRule' action to add the rule to
+-- AWS Config, you must specify the Amazon Resource Name (ARN) that AWS
+-- Lambda assigns to the function. Specify the ARN for the
+-- 'SourceIdentifier' key. This key is part of the 'Source' object, which
+-- is part of the 'ConfigRule' object.
+--
+-- If you are adding a new AWS managed Config rule, specify the rule\'s
+-- identifier for the 'SourceIdentifier' key. To reference AWS managed
+-- Config rule identifiers, see
+-- <http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html Using AWS Managed Config Rules>.
+--
+-- For any new rule that you add, specify the 'ConfigRuleName' in the
+-- 'ConfigRule' object. Do not specify the 'ConfigRuleArn' or the
+-- 'ConfigRuleId'. These values are generated by AWS Config for new rules.
+--
+-- If you are updating a rule that you have added previously, specify the
+-- rule\'s 'ConfigRuleName', 'ConfigRuleId', or 'ConfigRuleArn' in the
+-- 'ConfigRule' data type that you use in this request.
+--
+-- The maximum number of rules that AWS Config supports is 25.
+--
+-- For more information about developing and using AWS Config rules, see
+-- <http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html Evaluating AWS Resource Configurations with AWS Config>
+-- in the /AWS Config Developer Guide/.
+--
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html AWS API Reference> for PutConfigRule.
+module Network.AWS.Config.PutConfigRule
+    (
+    -- * Creating a Request
+      putConfigRule
+    , PutConfigRule
+    -- * Request Lenses
+    , pcrConfigRule
+
+    -- * Destructuring the Response
+    , putConfigRuleResponse
+    , PutConfigRuleResponse
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'putConfigRule' smart constructor.
+newtype PutConfigRule = PutConfigRule'
+    { _pcrConfigRule :: ConfigRule
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutConfigRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcrConfigRule'
+putConfigRule
+    :: ConfigRule -- ^ 'pcrConfigRule'
+    -> PutConfigRule
+putConfigRule pConfigRule_ =
+    PutConfigRule'
+    { _pcrConfigRule = pConfigRule_
+    }
+
+-- | Undocumented member.
+pcrConfigRule :: Lens' PutConfigRule ConfigRule
+pcrConfigRule = lens _pcrConfigRule (\ s a -> s{_pcrConfigRule = a});
+
+instance AWSRequest PutConfigRule where
+        type Rs PutConfigRule = PutConfigRuleResponse
+        request = postJSON config
+        response = receiveNull PutConfigRuleResponse'
+
+instance ToHeaders PutConfigRule where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.PutConfigRule" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutConfigRule where
+        toJSON PutConfigRule'{..}
+          = object
+              (catMaybes [Just ("ConfigRule" .= _pcrConfigRule)])
+
+instance ToPath PutConfigRule where
+        toPath = const "/"
+
+instance ToQuery PutConfigRule where
+        toQuery = const mempty
+
+-- | /See:/ 'putConfigRuleResponse' smart constructor.
+data PutConfigRuleResponse =
+    PutConfigRuleResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutConfigRuleResponse' with the minimum fields required to make a request.
+--
+putConfigRuleResponse
+    :: PutConfigRuleResponse
+putConfigRuleResponse = PutConfigRuleResponse'
diff --git a/gen/Network/AWS/Config/PutEvaluations.hs b/gen/Network/AWS/Config/PutEvaluations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Config/PutEvaluations.hs
@@ -0,0 +1,142 @@
+{-# 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.Config.PutEvaluations
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used by an AWS Lambda function to deliver evaluation results to AWS
+-- Config. This action is required in every AWS Lambda function that is
+-- invoked by an AWS Config rule.
+--
+-- /See:/ <http://docs.aws.amazon.com/config/latest/APIReference/API_PutEvaluations.html AWS API Reference> for PutEvaluations.
+module Network.AWS.Config.PutEvaluations
+    (
+    -- * Creating a Request
+      putEvaluations
+    , PutEvaluations
+    -- * Request Lenses
+    , peEvaluations
+    , peResultToken
+
+    -- * Destructuring the Response
+    , putEvaluationsResponse
+    , PutEvaluationsResponse
+    -- * Response Lenses
+    , persFailedEvaluations
+    , persResponseStatus
+    ) where
+
+import           Network.AWS.Config.Types
+import           Network.AWS.Config.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'putEvaluations' smart constructor.
+data PutEvaluations = PutEvaluations'
+    { _peEvaluations :: !(Maybe [Evaluation])
+    , _peResultToken :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutEvaluations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'peEvaluations'
+--
+-- * 'peResultToken'
+putEvaluations
+    :: Text -- ^ 'peResultToken'
+    -> PutEvaluations
+putEvaluations pResultToken_ =
+    PutEvaluations'
+    { _peEvaluations = Nothing
+    , _peResultToken = pResultToken_
+    }
+
+-- | The assessments that the AWS Lambda function performs. Each evaluation
+-- identifies an AWS resource and indicates whether it complies with the
+-- AWS Config rule that invokes the AWS Lambda function.
+peEvaluations :: Lens' PutEvaluations [Evaluation]
+peEvaluations = lens _peEvaluations (\ s a -> s{_peEvaluations = a}) . _Default . _Coerce;
+
+-- | An encrypted token that associates an evaluation with an AWS Config
+-- rule. Identifies the rule and the event that triggered the evaluation
+peResultToken :: Lens' PutEvaluations Text
+peResultToken = lens _peResultToken (\ s a -> s{_peResultToken = a});
+
+instance AWSRequest PutEvaluations where
+        type Rs PutEvaluations = PutEvaluationsResponse
+        request = postJSON config
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutEvaluationsResponse' <$>
+                   (x .?> "FailedEvaluations" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance ToHeaders PutEvaluations where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("StarlingDoveService.PutEvaluations" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutEvaluations where
+        toJSON PutEvaluations'{..}
+          = object
+              (catMaybes
+                 [("Evaluations" .=) <$> _peEvaluations,
+                  Just ("ResultToken" .= _peResultToken)])
+
+instance ToPath PutEvaluations where
+        toPath = const "/"
+
+instance ToQuery PutEvaluations where
+        toQuery = const mempty
+
+-- | /See:/ 'putEvaluationsResponse' smart constructor.
+data PutEvaluationsResponse = PutEvaluationsResponse'
+    { _persFailedEvaluations :: !(Maybe [Evaluation])
+    , _persResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutEvaluationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'persFailedEvaluations'
+--
+-- * 'persResponseStatus'
+putEvaluationsResponse
+    :: Int -- ^ 'persResponseStatus'
+    -> PutEvaluationsResponse
+putEvaluationsResponse pResponseStatus_ =
+    PutEvaluationsResponse'
+    { _persFailedEvaluations = Nothing
+    , _persResponseStatus = pResponseStatus_
+    }
+
+-- | Requests that failed because of a client or server error.
+persFailedEvaluations :: Lens' PutEvaluationsResponse [Evaluation]
+persFailedEvaluations = lens _persFailedEvaluations (\ s a -> s{_persFailedEvaluations = a}) . _Default . _Coerce;
+
+-- | The response status code.
+persResponseStatus :: Lens' PutEvaluationsResponse Int
+persResponseStatus = lens _persResponseStatus (\ s a -> s{_persResponseStatus = a});
diff --git a/gen/Network/AWS/Config/Types.hs b/gen/Network/AWS/Config/Types.hs
--- a/gen/Network/AWS/Config/Types.hs
+++ b/gen/Network/AWS/Config/Types.hs
@@ -24,9 +24,13 @@
     , _LastDeliveryChannelDeleteFailedException
     , _InvalidLimitException
     , _InvalidDeliveryChannelNameException
+    , _InvalidParameterValueException
+    , _InvalidResultTokenException
     , _NoSuchDeliveryChannelException
+    , _NoSuchConfigRuleException
     , _ResourceNotDiscoveredException
     , _InvalidNextTokenException
+    , _MaxNumberOfConfigRulesExceededException
     , _NoAvailableConfigurationRecorderException
     , _NoSuchBucketException
     , _NoAvailableDeliveryChannelException
@@ -37,22 +41,79 @@
     , _MaxNumberOfDeliveryChannelsExceededException
     , _NoSuchConfigurationRecorderException
     , _InvalidS3KeyPrefixException
+    , _ResourceInUseException
 
     -- * ChronologicalOrder
     , ChronologicalOrder (..)
 
+    -- * ComplianceType
+    , ComplianceType (..)
+
+    -- * ConfigRuleState
+    , ConfigRuleState (..)
+
     -- * ConfigurationItemStatus
     , ConfigurationItemStatus (..)
 
     -- * DeliveryStatus
     , DeliveryStatus (..)
 
+    -- * EventSource
+    , EventSource (..)
+
+    -- * MaximumExecutionFrequency
+    , MaximumExecutionFrequency (..)
+
+    -- * MessageType
+    , MessageType (..)
+
+    -- * Owner
+    , Owner (..)
+
     -- * RecorderStatus
     , RecorderStatus (..)
 
     -- * ResourceType
     , ResourceType (..)
 
+    -- * Compliance
+    , Compliance
+    , compliance
+    , cComplianceContributorCount
+    , cComplianceType
+
+    -- * ComplianceByConfigRule
+    , ComplianceByConfigRule
+    , complianceByConfigRule
+    , cbcrCompliance
+    , cbcrConfigRuleName
+
+    -- * ComplianceByResource
+    , ComplianceByResource
+    , complianceByResource
+    , cbrResourceId
+    , cbrResourceType
+    , cbrCompliance
+
+    -- * ComplianceContributorCount
+    , ComplianceContributorCount
+    , complianceContributorCount
+    , cccCappedCount
+    , cccCapExceeded
+
+    -- * ComplianceSummary
+    , ComplianceSummary
+    , complianceSummary
+    , csComplianceSummaryTimestamp
+    , csCompliantResourceCount
+    , csNonCompliantResourceCount
+
+    -- * ComplianceSummaryByResourceType
+    , ComplianceSummaryByResourceType
+    , complianceSummaryByResourceType
+    , csbrtResourceType
+    , csbrtComplianceSummary
+
     -- * ConfigExportDeliveryInfo
     , ConfigExportDeliveryInfo
     , configExportDeliveryInfo
@@ -61,7 +122,38 @@
     , cediLastSuccessfulTime
     , cediLastStatus
     , cediLastErrorMessage
+    , cediNextDeliveryTime
 
+    -- * ConfigRule
+    , ConfigRule
+    , configRule
+    , crInputParameters
+    , crConfigRuleName
+    , crMaximumExecutionFrequency
+    , crConfigRuleId
+    , crScope
+    , crConfigRuleState
+    , crDescription
+    , crConfigRuleARN
+    , crSource
+
+    -- * ConfigRuleEvaluationStatus
+    , ConfigRuleEvaluationStatus
+    , configRuleEvaluationStatus
+    , cresLastErrorCode
+    , cresFirstActivatedTime
+    , cresConfigRuleName
+    , cresLastErrorMessage
+    , cresConfigRuleId
+    , cresLastFailedInvocationTime
+    , cresLastSuccessfulInvocationTime
+    , cresConfigRuleARN
+
+    -- * ConfigSnapshotDeliveryProperties
+    , ConfigSnapshotDeliveryProperties
+    , configSnapshotDeliveryProperties
+    , csdpDeliveryFrequency
+
     -- * ConfigStreamDeliveryInfo
     , ConfigStreamDeliveryInfo
     , configStreamDeliveryInfo
@@ -116,6 +208,7 @@
     , dcS3KeyPrefix
     , dcSnsTopicARN
     , dcName
+    , dcConfigSnapshotDeliveryProperties
     , dcS3BucketName
 
     -- * DeliveryChannelStatus
@@ -126,6 +219,38 @@
     , dcsConfigHistoryDeliveryInfo
     , dcsName
 
+    -- * Evaluation
+    , Evaluation
+    , evaluation
+    , eAnnotation
+    , eComplianceResourceType
+    , eComplianceResourceId
+    , eComplianceType
+    , eOrderingTimestamp
+
+    -- * EvaluationResult
+    , EvaluationResult
+    , evaluationResult
+    , erEvaluationResultIdentifier
+    , erAnnotation
+    , erConfigRuleInvokedTime
+    , erResultRecordedTime
+    , erResultToken
+    , erComplianceType
+
+    -- * EvaluationResultIdentifier
+    , EvaluationResultIdentifier
+    , evaluationResultIdentifier
+    , eriEvaluationResultQualifier
+    , eriOrderingTimestamp
+
+    -- * EvaluationResultQualifier
+    , EvaluationResultQualifier
+    , evaluationResultQualifier
+    , erqResourceId
+    , erqResourceType
+    , erqConfigRuleName
+
     -- * RecordingGroup
     , RecordingGroup
     , recordingGroup
@@ -147,6 +272,27 @@
     , riResourceType
     , riResourceName
     , riResourceDeletionTime
+
+    -- * Scope
+    , Scope
+    , scope
+    , sComplianceResourceTypes
+    , sComplianceResourceId
+    , sTagValue
+    , sTagKey
+
+    -- * Source
+    , Source
+    , source
+    , sSourceIdentifier
+    , sOwner
+    , sSourceDetails
+
+    -- * SourceDetail
+    , SourceDetail
+    , sourceDetail
+    , sdMessageType
+    , sdEventSource
     ) where
 
 import           Network.AWS.Config.Types.Product
@@ -226,11 +372,28 @@
 _InvalidDeliveryChannelNameException =
     _ServiceError . hasCode "InvalidDeliveryChannelNameException"
 
+-- | One or more of the specified parameters are invalid. Verify that your
+-- parameters are valid and try again.
+_InvalidParameterValueException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterValueException =
+    _ServiceError . hasCode "InvalidParameterValueException"
+
+-- | The result token is invalid.
+_InvalidResultTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidResultTokenException =
+    _ServiceError . hasCode "InvalidResultTokenException"
+
 -- | You have specified a delivery channel that does not exist.
 _NoSuchDeliveryChannelException :: AsError a => Getting (First ServiceError) a ServiceError
 _NoSuchDeliveryChannelException =
     _ServiceError . hasCode "NoSuchDeliveryChannelException"
 
+-- | One or more AWS Config rules in the request are invalid. Verify that the
+-- rule names are correct and try again.
+_NoSuchConfigRuleException :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchConfigRuleException =
+    _ServiceError . hasCode "NoSuchConfigRuleException"
+
 -- | You have specified a resource that is either unknown or has not been
 -- discovered.
 _ResourceNotDiscoveredException :: AsError a => Getting (First ServiceError) a ServiceError
@@ -243,6 +406,13 @@
 _InvalidNextTokenException =
     _ServiceError . hasCode "InvalidNextTokenException"
 
+-- | Failed to add the AWS Config rule because the account already contains
+-- the maximum number of 25 rules. Consider deleting any deactivated rules
+-- before adding new rules.
+_MaxNumberOfConfigRulesExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_MaxNumberOfConfigRulesExceededException =
+    _ServiceError . hasCode "MaxNumberOfConfigRulesExceededException"
+
 -- | There are no configuration recorders available to provide the role
 -- needed to describe your resources. Create a configuration recorder.
 _NoAvailableConfigurationRecorderException :: AsError a => Getting (First ServiceError) a ServiceError
@@ -294,3 +464,7 @@
 _InvalidS3KeyPrefixException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidS3KeyPrefixException =
     _ServiceError . hasCode "InvalidS3KeyPrefixException"
+
+-- | The rule is currently being deleted. Wait for a while and try again.
+_ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceInUseException = _ServiceError . hasCode "ResourceInUseException"
diff --git a/gen/Network/AWS/Config/Types/Product.hs b/gen/Network/AWS/Config/Types/Product.hs
--- a/gen/Network/AWS/Config/Types/Product.hs
+++ b/gen/Network/AWS/Config/Types/Product.hs
@@ -20,777 +20,1823 @@
 import           Network.AWS.Config.Types.Sum
 import           Network.AWS.Prelude
 
--- | A list that contains the status of the delivery of either the snapshot
--- or the configuration history to the specified Amazon S3 bucket.
---
--- /See:/ 'configExportDeliveryInfo' smart constructor.
-data ConfigExportDeliveryInfo = ConfigExportDeliveryInfo'
-    { _cediLastErrorCode      :: !(Maybe Text)
-    , _cediLastAttemptTime    :: !(Maybe POSIX)
-    , _cediLastSuccessfulTime :: !(Maybe POSIX)
-    , _cediLastStatus         :: !(Maybe DeliveryStatus)
-    , _cediLastErrorMessage   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfigExportDeliveryInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cediLastErrorCode'
---
--- * 'cediLastAttemptTime'
---
--- * 'cediLastSuccessfulTime'
---
--- * 'cediLastStatus'
---
--- * 'cediLastErrorMessage'
-configExportDeliveryInfo
-    :: ConfigExportDeliveryInfo
-configExportDeliveryInfo =
-    ConfigExportDeliveryInfo'
-    { _cediLastErrorCode = Nothing
-    , _cediLastAttemptTime = Nothing
-    , _cediLastSuccessfulTime = Nothing
-    , _cediLastStatus = Nothing
-    , _cediLastErrorMessage = Nothing
-    }
-
--- | The error code from the last attempted delivery.
-cediLastErrorCode :: Lens' ConfigExportDeliveryInfo (Maybe Text)
-cediLastErrorCode = lens _cediLastErrorCode (\ s a -> s{_cediLastErrorCode = a});
-
--- | The time of the last attempted delivery.
-cediLastAttemptTime :: Lens' ConfigExportDeliveryInfo (Maybe UTCTime)
-cediLastAttemptTime = lens _cediLastAttemptTime (\ s a -> s{_cediLastAttemptTime = a}) . mapping _Time;
-
--- | The time of the last successful delivery.
-cediLastSuccessfulTime :: Lens' ConfigExportDeliveryInfo (Maybe UTCTime)
-cediLastSuccessfulTime = lens _cediLastSuccessfulTime (\ s a -> s{_cediLastSuccessfulTime = a}) . mapping _Time;
-
--- | Status of the last attempted delivery.
-cediLastStatus :: Lens' ConfigExportDeliveryInfo (Maybe DeliveryStatus)
-cediLastStatus = lens _cediLastStatus (\ s a -> s{_cediLastStatus = a});
-
--- | The error message from the last attempted delivery.
-cediLastErrorMessage :: Lens' ConfigExportDeliveryInfo (Maybe Text)
-cediLastErrorMessage = lens _cediLastErrorMessage (\ s a -> s{_cediLastErrorMessage = a});
-
-instance FromJSON ConfigExportDeliveryInfo where
-        parseJSON
-          = withObject "ConfigExportDeliveryInfo"
-              (\ x ->
-                 ConfigExportDeliveryInfo' <$>
-                   (x .:? "lastErrorCode") <*> (x .:? "lastAttemptTime")
-                     <*> (x .:? "lastSuccessfulTime")
-                     <*> (x .:? "lastStatus")
-                     <*> (x .:? "lastErrorMessage"))
-
--- | A list that contains the status of the delivery of the configuration
--- stream notification to the Amazon SNS topic.
---
--- /See:/ 'configStreamDeliveryInfo' smart constructor.
-data ConfigStreamDeliveryInfo = ConfigStreamDeliveryInfo'
-    { _csdiLastErrorCode        :: !(Maybe Text)
-    , _csdiLastStatusChangeTime :: !(Maybe POSIX)
-    , _csdiLastStatus           :: !(Maybe DeliveryStatus)
-    , _csdiLastErrorMessage     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfigStreamDeliveryInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csdiLastErrorCode'
---
--- * 'csdiLastStatusChangeTime'
---
--- * 'csdiLastStatus'
---
--- * 'csdiLastErrorMessage'
-configStreamDeliveryInfo
-    :: ConfigStreamDeliveryInfo
-configStreamDeliveryInfo =
-    ConfigStreamDeliveryInfo'
-    { _csdiLastErrorCode = Nothing
-    , _csdiLastStatusChangeTime = Nothing
-    , _csdiLastStatus = Nothing
-    , _csdiLastErrorMessage = Nothing
-    }
-
--- | The error code from the last attempted delivery.
-csdiLastErrorCode :: Lens' ConfigStreamDeliveryInfo (Maybe Text)
-csdiLastErrorCode = lens _csdiLastErrorCode (\ s a -> s{_csdiLastErrorCode = a});
-
--- | The time from the last status change.
-csdiLastStatusChangeTime :: Lens' ConfigStreamDeliveryInfo (Maybe UTCTime)
-csdiLastStatusChangeTime = lens _csdiLastStatusChangeTime (\ s a -> s{_csdiLastStatusChangeTime = a}) . mapping _Time;
-
--- | Status of the last attempted delivery.
---
--- __Note__ Providing an SNS topic on a
--- <http://docs.aws.amazon.com/config/latest/APIReference/API_DeliveryChannel.html DeliveryChannel>
--- for AWS Config is optional. If the SNS delivery is turned off, the last
--- status will be __Not_Applicable__.
-csdiLastStatus :: Lens' ConfigStreamDeliveryInfo (Maybe DeliveryStatus)
-csdiLastStatus = lens _csdiLastStatus (\ s a -> s{_csdiLastStatus = a});
-
--- | The error message from the last attempted delivery.
-csdiLastErrorMessage :: Lens' ConfigStreamDeliveryInfo (Maybe Text)
-csdiLastErrorMessage = lens _csdiLastErrorMessage (\ s a -> s{_csdiLastErrorMessage = a});
-
-instance FromJSON ConfigStreamDeliveryInfo where
-        parseJSON
-          = withObject "ConfigStreamDeliveryInfo"
-              (\ x ->
-                 ConfigStreamDeliveryInfo' <$>
-                   (x .:? "lastErrorCode") <*>
-                     (x .:? "lastStatusChangeTime")
-                     <*> (x .:? "lastStatus")
-                     <*> (x .:? "lastErrorMessage"))
-
--- | A list that contains detailed configurations of a specified resource.
---
--- Currently, the list does not contain information about non-AWS
--- components (for example, applications on your Amazon EC2 instances).
---
--- /See:/ 'configurationItem' smart constructor.
-data ConfigurationItem = ConfigurationItem'
-    { _ciResourceId                   :: !(Maybe Text)
-    , _ciResourceType                 :: !(Maybe ResourceType)
-    , _ciConfigurationStateId         :: !(Maybe Text)
-    , _ciArn                          :: !(Maybe Text)
-    , _ciResourceName                 :: !(Maybe Text)
-    , _ciResourceCreationTime         :: !(Maybe POSIX)
-    , _ciConfigurationItemStatus      :: !(Maybe ConfigurationItemStatus)
-    , _ciConfigurationItemCaptureTime :: !(Maybe POSIX)
-    , _ciAccountId                    :: !(Maybe Text)
-    , _ciAvailabilityZone             :: !(Maybe Text)
-    , _ciRelationships                :: !(Maybe [Relationship])
-    , _ciVersion                      :: !(Maybe Text)
-    , _ciAwsRegion                    :: !(Maybe Text)
-    , _ciRelatedEvents                :: !(Maybe [Text])
-    , _ciConfiguration                :: !(Maybe Text)
-    , _ciConfigurationItemMD5Hash     :: !(Maybe Text)
-    , _ciTags                         :: !(Maybe (Map Text Text))
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfigurationItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ciResourceId'
---
--- * 'ciResourceType'
---
--- * 'ciConfigurationStateId'
---
--- * 'ciArn'
---
--- * 'ciResourceName'
---
--- * 'ciResourceCreationTime'
---
--- * 'ciConfigurationItemStatus'
---
--- * 'ciConfigurationItemCaptureTime'
---
--- * 'ciAccountId'
---
--- * 'ciAvailabilityZone'
---
--- * 'ciRelationships'
---
--- * 'ciVersion'
---
--- * 'ciAwsRegion'
---
--- * 'ciRelatedEvents'
---
--- * 'ciConfiguration'
---
--- * 'ciConfigurationItemMD5Hash'
---
--- * 'ciTags'
-configurationItem
-    :: ConfigurationItem
-configurationItem =
-    ConfigurationItem'
-    { _ciResourceId = Nothing
-    , _ciResourceType = Nothing
-    , _ciConfigurationStateId = Nothing
-    , _ciArn = Nothing
-    , _ciResourceName = Nothing
-    , _ciResourceCreationTime = Nothing
-    , _ciConfigurationItemStatus = Nothing
-    , _ciConfigurationItemCaptureTime = Nothing
-    , _ciAccountId = Nothing
-    , _ciAvailabilityZone = Nothing
-    , _ciRelationships = Nothing
-    , _ciVersion = Nothing
-    , _ciAwsRegion = Nothing
-    , _ciRelatedEvents = Nothing
-    , _ciConfiguration = Nothing
-    , _ciConfigurationItemMD5Hash = Nothing
-    , _ciTags = Nothing
-    }
-
--- | The ID of the resource (for example., 'sg-xxxxxx').
-ciResourceId :: Lens' ConfigurationItem (Maybe Text)
-ciResourceId = lens _ciResourceId (\ s a -> s{_ciResourceId = a});
-
--- | The type of AWS resource.
-ciResourceType :: Lens' ConfigurationItem (Maybe ResourceType)
-ciResourceType = lens _ciResourceType (\ s a -> s{_ciResourceType = a});
-
--- | An identifier that indicates the ordering of the configuration items of
--- a resource.
-ciConfigurationStateId :: Lens' ConfigurationItem (Maybe Text)
-ciConfigurationStateId = lens _ciConfigurationStateId (\ s a -> s{_ciConfigurationStateId = a});
-
--- | The Amazon Resource Name (ARN) of the resource.
-ciArn :: Lens' ConfigurationItem (Maybe Text)
-ciArn = lens _ciArn (\ s a -> s{_ciArn = a});
-
--- | The custom name of the resource, if available.
-ciResourceName :: Lens' ConfigurationItem (Maybe Text)
-ciResourceName = lens _ciResourceName (\ s a -> s{_ciResourceName = a});
-
--- | The time stamp when the resource was created.
-ciResourceCreationTime :: Lens' ConfigurationItem (Maybe UTCTime)
-ciResourceCreationTime = lens _ciResourceCreationTime (\ s a -> s{_ciResourceCreationTime = a}) . mapping _Time;
-
--- | The configuration item status.
-ciConfigurationItemStatus :: Lens' ConfigurationItem (Maybe ConfigurationItemStatus)
-ciConfigurationItemStatus = lens _ciConfigurationItemStatus (\ s a -> s{_ciConfigurationItemStatus = a});
-
--- | The time when the configuration recording was initiated.
-ciConfigurationItemCaptureTime :: Lens' ConfigurationItem (Maybe UTCTime)
-ciConfigurationItemCaptureTime = lens _ciConfigurationItemCaptureTime (\ s a -> s{_ciConfigurationItemCaptureTime = a}) . mapping _Time;
-
--- | The 12 digit AWS account ID associated with the resource.
-ciAccountId :: Lens' ConfigurationItem (Maybe Text)
-ciAccountId = lens _ciAccountId (\ s a -> s{_ciAccountId = a});
-
--- | The Availability Zone associated with the resource.
-ciAvailabilityZone :: Lens' ConfigurationItem (Maybe Text)
-ciAvailabilityZone = lens _ciAvailabilityZone (\ s a -> s{_ciAvailabilityZone = a});
-
--- | A list of related AWS resources.
-ciRelationships :: Lens' ConfigurationItem [Relationship]
-ciRelationships = lens _ciRelationships (\ s a -> s{_ciRelationships = a}) . _Default . _Coerce;
-
--- | The version number of the resource configuration.
-ciVersion :: Lens' ConfigurationItem (Maybe Text)
-ciVersion = lens _ciVersion (\ s a -> s{_ciVersion = a});
-
--- | The region where the resource resides.
-ciAwsRegion :: Lens' ConfigurationItem (Maybe Text)
-ciAwsRegion = lens _ciAwsRegion (\ s a -> s{_ciAwsRegion = a});
-
--- | A list of CloudTrail event IDs.
---
--- A populated field indicates that the current configuration was initiated
--- by the events recorded in the CloudTrail log. For more information about
--- CloudTrail, see
--- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html What is AWS CloudTrail?>.
---
--- An empty field indicates that the current configuration was not
--- initiated by any event.
-ciRelatedEvents :: Lens' ConfigurationItem [Text]
-ciRelatedEvents = lens _ciRelatedEvents (\ s a -> s{_ciRelatedEvents = a}) . _Default . _Coerce;
-
--- | The description of the resource configuration.
-ciConfiguration :: Lens' ConfigurationItem (Maybe Text)
-ciConfiguration = lens _ciConfiguration (\ s a -> s{_ciConfiguration = a});
-
--- | Unique MD5 hash that represents the configuration item\'s state.
---
--- You can use MD5 hash to compare the states of two or more configuration
--- items that are associated with the same resource.
-ciConfigurationItemMD5Hash :: Lens' ConfigurationItem (Maybe Text)
-ciConfigurationItemMD5Hash = lens _ciConfigurationItemMD5Hash (\ s a -> s{_ciConfigurationItemMD5Hash = a});
-
--- | A mapping of key value tags associated with the resource.
-ciTags :: Lens' ConfigurationItem (HashMap Text Text)
-ciTags = lens _ciTags (\ s a -> s{_ciTags = a}) . _Default . _Map;
-
-instance FromJSON ConfigurationItem where
-        parseJSON
-          = withObject "ConfigurationItem"
-              (\ x ->
-                 ConfigurationItem' <$>
-                   (x .:? "resourceId") <*> (x .:? "resourceType") <*>
-                     (x .:? "configurationStateId")
-                     <*> (x .:? "arn")
-                     <*> (x .:? "resourceName")
-                     <*> (x .:? "resourceCreationTime")
-                     <*> (x .:? "configurationItemStatus")
-                     <*> (x .:? "configurationItemCaptureTime")
-                     <*> (x .:? "accountId")
-                     <*> (x .:? "availabilityZone")
-                     <*> (x .:? "relationships" .!= mempty)
-                     <*> (x .:? "version")
-                     <*> (x .:? "awsRegion")
-                     <*> (x .:? "relatedEvents" .!= mempty)
-                     <*> (x .:? "configuration")
-                     <*> (x .:? "configurationItemMD5Hash")
-                     <*> (x .:? "tags" .!= mempty))
-
--- | An object that represents the recording of configuration changes of an
--- AWS resource.
---
--- /See:/ 'configurationRecorder' smart constructor.
-data ConfigurationRecorder = ConfigurationRecorder'
-    { _crName           :: !(Maybe Text)
-    , _crRecordingGroup :: !(Maybe RecordingGroup)
-    , _crRoleARN        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfigurationRecorder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crName'
---
--- * 'crRecordingGroup'
---
--- * 'crRoleARN'
-configurationRecorder
-    :: ConfigurationRecorder
-configurationRecorder =
-    ConfigurationRecorder'
-    { _crName = Nothing
-    , _crRecordingGroup = Nothing
-    , _crRoleARN = Nothing
-    }
-
--- | The name of the recorder. By default, AWS Config automatically assigns
--- the name \"default\" when creating the configuration recorder. You
--- cannot change the assigned name.
-crName :: Lens' ConfigurationRecorder (Maybe Text)
-crName = lens _crName (\ s a -> s{_crName = a});
-
--- | The recording group specifies either to record configurations for all
--- supported resources or to provide a list of resource types to record.
--- The list of resource types must be a subset of supported resource types.
-crRecordingGroup :: Lens' ConfigurationRecorder (Maybe RecordingGroup)
-crRecordingGroup = lens _crRecordingGroup (\ s a -> s{_crRecordingGroup = a});
-
--- | Amazon Resource Name (ARN) of the IAM role used to describe the AWS
--- resources associated with the account.
-crRoleARN :: Lens' ConfigurationRecorder (Maybe Text)
-crRoleARN = lens _crRoleARN (\ s a -> s{_crRoleARN = a});
-
-instance FromJSON ConfigurationRecorder where
-        parseJSON
-          = withObject "ConfigurationRecorder"
-              (\ x ->
-                 ConfigurationRecorder' <$>
-                   (x .:? "name") <*> (x .:? "recordingGroup") <*>
-                     (x .:? "roleARN"))
-
-instance ToJSON ConfigurationRecorder where
-        toJSON ConfigurationRecorder'{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _crName,
-                  ("recordingGroup" .=) <$> _crRecordingGroup,
-                  ("roleARN" .=) <$> _crRoleARN])
-
--- | The current status of the configuration recorder.
---
--- /See:/ 'configurationRecorderStatus' smart constructor.
-data ConfigurationRecorderStatus = ConfigurationRecorderStatus'
-    { _crsLastErrorCode        :: !(Maybe Text)
-    , _crsLastStopTime         :: !(Maybe POSIX)
-    , _crsLastStatusChangeTime :: !(Maybe POSIX)
-    , _crsRecording            :: !(Maybe Bool)
-    , _crsLastStatus           :: !(Maybe RecorderStatus)
-    , _crsLastErrorMessage     :: !(Maybe Text)
-    , _crsName                 :: !(Maybe Text)
-    , _crsLastStartTime        :: !(Maybe POSIX)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfigurationRecorderStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crsLastErrorCode'
---
--- * 'crsLastStopTime'
---
--- * 'crsLastStatusChangeTime'
---
--- * 'crsRecording'
---
--- * 'crsLastStatus'
---
--- * 'crsLastErrorMessage'
---
--- * 'crsName'
---
--- * 'crsLastStartTime'
-configurationRecorderStatus
-    :: ConfigurationRecorderStatus
-configurationRecorderStatus =
-    ConfigurationRecorderStatus'
-    { _crsLastErrorCode = Nothing
-    , _crsLastStopTime = Nothing
-    , _crsLastStatusChangeTime = Nothing
-    , _crsRecording = Nothing
-    , _crsLastStatus = Nothing
-    , _crsLastErrorMessage = Nothing
-    , _crsName = Nothing
-    , _crsLastStartTime = Nothing
-    }
-
--- | The error code indicating that the recording failed.
-crsLastErrorCode :: Lens' ConfigurationRecorderStatus (Maybe Text)
-crsLastErrorCode = lens _crsLastErrorCode (\ s a -> s{_crsLastErrorCode = a});
-
--- | The time the recorder was last stopped.
-crsLastStopTime :: Lens' ConfigurationRecorderStatus (Maybe UTCTime)
-crsLastStopTime = lens _crsLastStopTime (\ s a -> s{_crsLastStopTime = a}) . mapping _Time;
-
--- | The time when the status was last changed.
-crsLastStatusChangeTime :: Lens' ConfigurationRecorderStatus (Maybe UTCTime)
-crsLastStatusChangeTime = lens _crsLastStatusChangeTime (\ s a -> s{_crsLastStatusChangeTime = a}) . mapping _Time;
-
--- | Specifies whether the recorder is currently recording or not.
-crsRecording :: Lens' ConfigurationRecorderStatus (Maybe Bool)
-crsRecording = lens _crsRecording (\ s a -> s{_crsRecording = a});
-
--- | The last (previous) status of the recorder.
-crsLastStatus :: Lens' ConfigurationRecorderStatus (Maybe RecorderStatus)
-crsLastStatus = lens _crsLastStatus (\ s a -> s{_crsLastStatus = a});
-
--- | The message indicating that the recording failed due to an error.
-crsLastErrorMessage :: Lens' ConfigurationRecorderStatus (Maybe Text)
-crsLastErrorMessage = lens _crsLastErrorMessage (\ s a -> s{_crsLastErrorMessage = a});
-
--- | The name of the configuration recorder.
-crsName :: Lens' ConfigurationRecorderStatus (Maybe Text)
-crsName = lens _crsName (\ s a -> s{_crsName = a});
-
--- | The time the recorder was last started.
-crsLastStartTime :: Lens' ConfigurationRecorderStatus (Maybe UTCTime)
-crsLastStartTime = lens _crsLastStartTime (\ s a -> s{_crsLastStartTime = a}) . mapping _Time;
-
-instance FromJSON ConfigurationRecorderStatus where
-        parseJSON
-          = withObject "ConfigurationRecorderStatus"
-              (\ x ->
-                 ConfigurationRecorderStatus' <$>
-                   (x .:? "lastErrorCode") <*> (x .:? "lastStopTime")
-                     <*> (x .:? "lastStatusChangeTime")
-                     <*> (x .:? "recording")
-                     <*> (x .:? "lastStatus")
-                     <*> (x .:? "lastErrorMessage")
-                     <*> (x .:? "name")
-                     <*> (x .:? "lastStartTime"))
-
--- | A logical container used for storing the configuration changes of an AWS
--- resource.
---
--- /See:/ 'deliveryChannel' smart constructor.
-data DeliveryChannel = DeliveryChannel'
-    { _dcS3KeyPrefix  :: !(Maybe Text)
-    , _dcSnsTopicARN  :: !(Maybe Text)
-    , _dcName         :: !(Maybe Text)
-    , _dcS3BucketName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeliveryChannel' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcS3KeyPrefix'
---
--- * 'dcSnsTopicARN'
---
--- * 'dcName'
---
--- * 'dcS3BucketName'
-deliveryChannel
-    :: DeliveryChannel
-deliveryChannel =
-    DeliveryChannel'
-    { _dcS3KeyPrefix = Nothing
-    , _dcSnsTopicARN = Nothing
-    , _dcName = Nothing
-    , _dcS3BucketName = Nothing
-    }
-
--- | The prefix for the specified Amazon S3 bucket.
-dcS3KeyPrefix :: Lens' DeliveryChannel (Maybe Text)
-dcS3KeyPrefix = lens _dcS3KeyPrefix (\ s a -> s{_dcS3KeyPrefix = a});
-
--- | The Amazon Resource Name (ARN) of the SNS topic that AWS Config delivers
--- notifications to.
-dcSnsTopicARN :: Lens' DeliveryChannel (Maybe Text)
-dcSnsTopicARN = lens _dcSnsTopicARN (\ s a -> s{_dcSnsTopicARN = a});
-
--- | The name of the delivery channel. By default, AWS Config automatically
--- assigns the name \"default\" when creating the delivery channel. You
--- cannot change the assigned name.
-dcName :: Lens' DeliveryChannel (Maybe Text)
-dcName = lens _dcName (\ s a -> s{_dcName = a});
-
--- | The name of the Amazon S3 bucket used to store configuration history for
--- the delivery channel.
-dcS3BucketName :: Lens' DeliveryChannel (Maybe Text)
-dcS3BucketName = lens _dcS3BucketName (\ s a -> s{_dcS3BucketName = a});
-
-instance FromJSON DeliveryChannel where
-        parseJSON
-          = withObject "DeliveryChannel"
-              (\ x ->
-                 DeliveryChannel' <$>
-                   (x .:? "s3KeyPrefix") <*> (x .:? "snsTopicARN") <*>
-                     (x .:? "name")
-                     <*> (x .:? "s3BucketName"))
-
-instance ToJSON DeliveryChannel where
-        toJSON DeliveryChannel'{..}
-          = object
-              (catMaybes
-                 [("s3KeyPrefix" .=) <$> _dcS3KeyPrefix,
-                  ("snsTopicARN" .=) <$> _dcSnsTopicARN,
-                  ("name" .=) <$> _dcName,
-                  ("s3BucketName" .=) <$> _dcS3BucketName])
-
--- | The status of a specified delivery channel.
---
--- Valid values: 'Success' | 'Failure'
---
--- /See:/ 'deliveryChannelStatus' smart constructor.
-data DeliveryChannelStatus = DeliveryChannelStatus'
-    { _dcsConfigSnapshotDeliveryInfo :: !(Maybe ConfigExportDeliveryInfo)
-    , _dcsConfigStreamDeliveryInfo   :: !(Maybe ConfigStreamDeliveryInfo)
-    , _dcsConfigHistoryDeliveryInfo  :: !(Maybe ConfigExportDeliveryInfo)
-    , _dcsName                       :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeliveryChannelStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcsConfigSnapshotDeliveryInfo'
---
--- * 'dcsConfigStreamDeliveryInfo'
---
--- * 'dcsConfigHistoryDeliveryInfo'
---
--- * 'dcsName'
-deliveryChannelStatus
-    :: DeliveryChannelStatus
-deliveryChannelStatus =
-    DeliveryChannelStatus'
-    { _dcsConfigSnapshotDeliveryInfo = Nothing
-    , _dcsConfigStreamDeliveryInfo = Nothing
-    , _dcsConfigHistoryDeliveryInfo = Nothing
-    , _dcsName = Nothing
-    }
-
--- | A list containing the status of the delivery of the snapshot to the
--- specified Amazon S3 bucket.
-dcsConfigSnapshotDeliveryInfo :: Lens' DeliveryChannelStatus (Maybe ConfigExportDeliveryInfo)
-dcsConfigSnapshotDeliveryInfo = lens _dcsConfigSnapshotDeliveryInfo (\ s a -> s{_dcsConfigSnapshotDeliveryInfo = a});
-
--- | A list containing the status of the delivery of the configuration stream
--- notification to the specified Amazon SNS topic.
-dcsConfigStreamDeliveryInfo :: Lens' DeliveryChannelStatus (Maybe ConfigStreamDeliveryInfo)
-dcsConfigStreamDeliveryInfo = lens _dcsConfigStreamDeliveryInfo (\ s a -> s{_dcsConfigStreamDeliveryInfo = a});
-
--- | A list that contains the status of the delivery of the configuration
--- history to the specified Amazon S3 bucket.
-dcsConfigHistoryDeliveryInfo :: Lens' DeliveryChannelStatus (Maybe ConfigExportDeliveryInfo)
-dcsConfigHistoryDeliveryInfo = lens _dcsConfigHistoryDeliveryInfo (\ s a -> s{_dcsConfigHistoryDeliveryInfo = a});
-
--- | The name of the delivery channel.
-dcsName :: Lens' DeliveryChannelStatus (Maybe Text)
-dcsName = lens _dcsName (\ s a -> s{_dcsName = a});
-
-instance FromJSON DeliveryChannelStatus where
-        parseJSON
-          = withObject "DeliveryChannelStatus"
-              (\ x ->
-                 DeliveryChannelStatus' <$>
-                   (x .:? "configSnapshotDeliveryInfo") <*>
-                     (x .:? "configStreamDeliveryInfo")
-                     <*> (x .:? "configHistoryDeliveryInfo")
-                     <*> (x .:? "name"))
-
--- | The group of AWS resource types that AWS Config records when starting
--- the configuration recorder.
---
--- __recordingGroup__ can have one and only one parameter. Choose either
--- __allSupported__ or __resourceTypes__.
---
--- /See:/ 'recordingGroup' smart constructor.
-data RecordingGroup = RecordingGroup'
-    { _rgAllSupported  :: !(Maybe Bool)
-    , _rgResourceTypes :: !(Maybe [ResourceType])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RecordingGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rgAllSupported'
---
--- * 'rgResourceTypes'
-recordingGroup
-    :: RecordingGroup
-recordingGroup =
-    RecordingGroup'
-    { _rgAllSupported = Nothing
-    , _rgResourceTypes = Nothing
-    }
-
--- | Records all supported resource types in the recording group. For a list
--- of supported resource types, see
--- <http://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources Supported resource types>.
--- If you specify __allSupported__, you cannot enumerate a list of
--- __resourceTypes__.
-rgAllSupported :: Lens' RecordingGroup (Maybe Bool)
-rgAllSupported = lens _rgAllSupported (\ s a -> s{_rgAllSupported = a});
-
--- | A comma-separated list of strings representing valid AWS resource types
--- (for example, 'AWS::EC2::Instance' or 'AWS::CloudTrail::Trail').
--- __resourceTypes__ is only valid if you have chosen not to select
--- __allSupported__. For a list of valid __resourceTypes__ values, see the
--- __resourceType Value__ column in the following topic:
--- <http://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources Supported AWS Resource Types>.
-rgResourceTypes :: Lens' RecordingGroup [ResourceType]
-rgResourceTypes = lens _rgResourceTypes (\ s a -> s{_rgResourceTypes = a}) . _Default . _Coerce;
-
-instance FromJSON RecordingGroup where
-        parseJSON
-          = withObject "RecordingGroup"
-              (\ x ->
-                 RecordingGroup' <$>
-                   (x .:? "allSupported") <*>
-                     (x .:? "resourceTypes" .!= mempty))
-
-instance ToJSON RecordingGroup where
-        toJSON RecordingGroup'{..}
-          = object
-              (catMaybes
-                 [("allSupported" .=) <$> _rgAllSupported,
-                  ("resourceTypes" .=) <$> _rgResourceTypes])
-
--- | The relationship of the related resource to the main resource.
---
--- /See:/ 'relationship' smart constructor.
-data Relationship = Relationship'
-    { _rResourceId       :: !(Maybe Text)
-    , _rResourceType     :: !(Maybe ResourceType)
-    , _rResourceName     :: !(Maybe Text)
-    , _rRelationshipName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Relationship' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rResourceId'
---
--- * 'rResourceType'
---
--- * 'rResourceName'
---
--- * 'rRelationshipName'
-relationship
-    :: Relationship
-relationship =
-    Relationship'
-    { _rResourceId = Nothing
-    , _rResourceType = Nothing
-    , _rResourceName = Nothing
-    , _rRelationshipName = Nothing
-    }
-
--- | The ID of the related resource (for example, 'sg-xxxxxx').
-rResourceId :: Lens' Relationship (Maybe Text)
-rResourceId = lens _rResourceId (\ s a -> s{_rResourceId = a});
-
--- | The resource type of the related resource.
-rResourceType :: Lens' Relationship (Maybe ResourceType)
-rResourceType = lens _rResourceType (\ s a -> s{_rResourceType = a});
-
--- | The custom name of the related resource, if available.
-rResourceName :: Lens' Relationship (Maybe Text)
-rResourceName = lens _rResourceName (\ s a -> s{_rResourceName = a});
-
--- | The type of relationship with the related resource.
-rRelationshipName :: Lens' Relationship (Maybe Text)
-rRelationshipName = lens _rRelationshipName (\ s a -> s{_rRelationshipName = a});
-
-instance FromJSON Relationship where
-        parseJSON
-          = withObject "Relationship"
-              (\ x ->
-                 Relationship' <$>
-                   (x .:? "resourceId") <*> (x .:? "resourceType") <*>
-                     (x .:? "resourceName")
-                     <*> (x .:? "relationshipName"))
-
--- | The details that identify a resource that is discovered by AWS Config,
--- including the resource type, ID, and (if available) the custom resource
--- name.
---
--- /See:/ 'resourceIdentifier' smart constructor.
-data ResourceIdentifier = ResourceIdentifier'
-    { _riResourceId           :: !(Maybe Text)
-    , _riResourceType         :: !(Maybe ResourceType)
-    , _riResourceName         :: !(Maybe Text)
-    , _riResourceDeletionTime :: !(Maybe POSIX)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResourceIdentifier' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riResourceId'
---
--- * 'riResourceType'
---
--- * 'riResourceName'
---
--- * 'riResourceDeletionTime'
-resourceIdentifier
-    :: ResourceIdentifier
-resourceIdentifier =
-    ResourceIdentifier'
-    { _riResourceId = Nothing
-    , _riResourceType = Nothing
-    , _riResourceName = Nothing
-    , _riResourceDeletionTime = Nothing
-    }
-
--- | The ID of the resource (for example., 'sg-xxxxxx').
-riResourceId :: Lens' ResourceIdentifier (Maybe Text)
-riResourceId = lens _riResourceId (\ s a -> s{_riResourceId = a});
-
--- | The type of resource.
-riResourceType :: Lens' ResourceIdentifier (Maybe ResourceType)
-riResourceType = lens _riResourceType (\ s a -> s{_riResourceType = a});
-
--- | The custom name of the resource (if available).
-riResourceName :: Lens' ResourceIdentifier (Maybe Text)
-riResourceName = lens _riResourceName (\ s a -> s{_riResourceName = a});
-
--- | The time that the resource was deleted.
-riResourceDeletionTime :: Lens' ResourceIdentifier (Maybe UTCTime)
-riResourceDeletionTime = lens _riResourceDeletionTime (\ s a -> s{_riResourceDeletionTime = a}) . mapping _Time;
-
-instance FromJSON ResourceIdentifier where
-        parseJSON
-          = withObject "ResourceIdentifier"
-              (\ x ->
-                 ResourceIdentifier' <$>
-                   (x .:? "resourceId") <*> (x .:? "resourceType") <*>
-                     (x .:? "resourceName")
-                     <*> (x .:? "resourceDeletionTime"))
+-- | Indicates whether an AWS resource or AWS Config rule is compliant and
+-- provides the number of contributors that affect the compliance.
+--
+-- /See:/ 'compliance' smart constructor.
+data Compliance = Compliance'
+    { _cComplianceContributorCount :: !(Maybe ComplianceContributorCount)
+    , _cComplianceType             :: !(Maybe ComplianceType)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Compliance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cComplianceContributorCount'
+--
+-- * 'cComplianceType'
+compliance
+    :: Compliance
+compliance =
+    Compliance'
+    { _cComplianceContributorCount = Nothing
+    , _cComplianceType = Nothing
+    }
+
+-- | The number of AWS resources or AWS Config rules that cause a result of
+-- 'NON_COMPLIANT', up to a maximum of 25.
+cComplianceContributorCount :: Lens' Compliance (Maybe ComplianceContributorCount)
+cComplianceContributorCount = lens _cComplianceContributorCount (\ s a -> s{_cComplianceContributorCount = a});
+
+-- | Indicates whether an AWS resource or AWS Config rule is compliant.
+--
+-- A resource is compliant if it complies with all of the AWS Config rules
+-- that evaluate it, and it is noncompliant if it does not comply with one
+-- or more of these rules.
+--
+-- A rule is compliant if all of the resources that the rule evaluates
+-- comply with it, and it is noncompliant if any of these resources do not
+-- comply.
+cComplianceType :: Lens' Compliance (Maybe ComplianceType)
+cComplianceType = lens _cComplianceType (\ s a -> s{_cComplianceType = a});
+
+instance FromJSON Compliance where
+        parseJSON
+          = withObject "Compliance"
+              (\ x ->
+                 Compliance' <$>
+                   (x .:? "ComplianceContributorCount") <*>
+                     (x .:? "ComplianceType"))
+
+-- | Indicates whether an AWS Config rule is compliant. A rule is compliant
+-- if all of the resources that the rule evaluated comply with it, and it
+-- is noncompliant if any of these resources do not comply.
+--
+-- /See:/ 'complianceByConfigRule' smart constructor.
+data ComplianceByConfigRule = ComplianceByConfigRule'
+    { _cbcrCompliance     :: !(Maybe Compliance)
+    , _cbcrConfigRuleName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComplianceByConfigRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbcrCompliance'
+--
+-- * 'cbcrConfigRuleName'
+complianceByConfigRule
+    :: ComplianceByConfigRule
+complianceByConfigRule =
+    ComplianceByConfigRule'
+    { _cbcrCompliance = Nothing
+    , _cbcrConfigRuleName = Nothing
+    }
+
+-- | Indicates whether the AWS Config rule is compliant.
+cbcrCompliance :: Lens' ComplianceByConfigRule (Maybe Compliance)
+cbcrCompliance = lens _cbcrCompliance (\ s a -> s{_cbcrCompliance = a});
+
+-- | The name of the AWS Config rule.
+cbcrConfigRuleName :: Lens' ComplianceByConfigRule (Maybe Text)
+cbcrConfigRuleName = lens _cbcrConfigRuleName (\ s a -> s{_cbcrConfigRuleName = a});
+
+instance FromJSON ComplianceByConfigRule where
+        parseJSON
+          = withObject "ComplianceByConfigRule"
+              (\ x ->
+                 ComplianceByConfigRule' <$>
+                   (x .:? "Compliance") <*> (x .:? "ConfigRuleName"))
+
+-- | Indicates whether an AWS resource that is evaluated according to one or
+-- more AWS Config rules is compliant. A resource is compliant if it
+-- complies with all of the rules that evaluate it, and it is noncompliant
+-- if it does not comply with one or more of these rules.
+--
+-- /See:/ 'complianceByResource' smart constructor.
+data ComplianceByResource = ComplianceByResource'
+    { _cbrResourceId   :: !(Maybe Text)
+    , _cbrResourceType :: !(Maybe Text)
+    , _cbrCompliance   :: !(Maybe Compliance)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComplianceByResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbrResourceId'
+--
+-- * 'cbrResourceType'
+--
+-- * 'cbrCompliance'
+complianceByResource
+    :: ComplianceByResource
+complianceByResource =
+    ComplianceByResource'
+    { _cbrResourceId = Nothing
+    , _cbrResourceType = Nothing
+    , _cbrCompliance = Nothing
+    }
+
+-- | The ID of the AWS resource that was evaluated.
+cbrResourceId :: Lens' ComplianceByResource (Maybe Text)
+cbrResourceId = lens _cbrResourceId (\ s a -> s{_cbrResourceId = a});
+
+-- | The type of the AWS resource that was evaluated.
+cbrResourceType :: Lens' ComplianceByResource (Maybe Text)
+cbrResourceType = lens _cbrResourceType (\ s a -> s{_cbrResourceType = a});
+
+-- | Indicates whether the AWS resource complies with all of the AWS Config
+-- rules that evaluated it.
+cbrCompliance :: Lens' ComplianceByResource (Maybe Compliance)
+cbrCompliance = lens _cbrCompliance (\ s a -> s{_cbrCompliance = a});
+
+instance FromJSON ComplianceByResource where
+        parseJSON
+          = withObject "ComplianceByResource"
+              (\ x ->
+                 ComplianceByResource' <$>
+                   (x .:? "ResourceId") <*> (x .:? "ResourceType") <*>
+                     (x .:? "Compliance"))
+
+-- | The number of AWS resources or AWS Config rules responsible for the
+-- current compliance of the item, up to a maximum number.
+--
+-- /See:/ 'complianceContributorCount' smart constructor.
+data ComplianceContributorCount = ComplianceContributorCount'
+    { _cccCappedCount :: !(Maybe Int)
+    , _cccCapExceeded :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComplianceContributorCount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cccCappedCount'
+--
+-- * 'cccCapExceeded'
+complianceContributorCount
+    :: ComplianceContributorCount
+complianceContributorCount =
+    ComplianceContributorCount'
+    { _cccCappedCount = Nothing
+    , _cccCapExceeded = Nothing
+    }
+
+-- | The number of AWS resources or AWS Config rules responsible for the
+-- current compliance of the item.
+cccCappedCount :: Lens' ComplianceContributorCount (Maybe Int)
+cccCappedCount = lens _cccCappedCount (\ s a -> s{_cccCappedCount = a});
+
+-- | Indicates whether the maximum count is reached.
+cccCapExceeded :: Lens' ComplianceContributorCount (Maybe Bool)
+cccCapExceeded = lens _cccCapExceeded (\ s a -> s{_cccCapExceeded = a});
+
+instance FromJSON ComplianceContributorCount where
+        parseJSON
+          = withObject "ComplianceContributorCount"
+              (\ x ->
+                 ComplianceContributorCount' <$>
+                   (x .:? "CappedCount") <*> (x .:? "CapExceeded"))
+
+-- | The number of AWS Config rules or AWS resources that are compliant and
+-- noncompliant, up to a maximum.
+--
+-- /See:/ 'complianceSummary' smart constructor.
+data ComplianceSummary = ComplianceSummary'
+    { _csComplianceSummaryTimestamp :: !(Maybe POSIX)
+    , _csCompliantResourceCount     :: !(Maybe ComplianceContributorCount)
+    , _csNonCompliantResourceCount  :: !(Maybe ComplianceContributorCount)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComplianceSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csComplianceSummaryTimestamp'
+--
+-- * 'csCompliantResourceCount'
+--
+-- * 'csNonCompliantResourceCount'
+complianceSummary
+    :: ComplianceSummary
+complianceSummary =
+    ComplianceSummary'
+    { _csComplianceSummaryTimestamp = Nothing
+    , _csCompliantResourceCount = Nothing
+    , _csNonCompliantResourceCount = Nothing
+    }
+
+-- | The time that AWS Config created the compliance summary.
+csComplianceSummaryTimestamp :: Lens' ComplianceSummary (Maybe UTCTime)
+csComplianceSummaryTimestamp = lens _csComplianceSummaryTimestamp (\ s a -> s{_csComplianceSummaryTimestamp = a}) . mapping _Time;
+
+-- | The number of AWS Config rules or AWS resources that are compliant, up
+-- to a maximum of 25 for rules and 100 for resources.
+csCompliantResourceCount :: Lens' ComplianceSummary (Maybe ComplianceContributorCount)
+csCompliantResourceCount = lens _csCompliantResourceCount (\ s a -> s{_csCompliantResourceCount = a});
+
+-- | The number of AWS Config rules or AWS resources that are noncompliant,
+-- up to a maximum of 25 for rules and 100 for resources.
+csNonCompliantResourceCount :: Lens' ComplianceSummary (Maybe ComplianceContributorCount)
+csNonCompliantResourceCount = lens _csNonCompliantResourceCount (\ s a -> s{_csNonCompliantResourceCount = a});
+
+instance FromJSON ComplianceSummary where
+        parseJSON
+          = withObject "ComplianceSummary"
+              (\ x ->
+                 ComplianceSummary' <$>
+                   (x .:? "ComplianceSummaryTimestamp") <*>
+                     (x .:? "CompliantResourceCount")
+                     <*> (x .:? "NonCompliantResourceCount"))
+
+-- | The number of AWS resources of a specific type that are compliant or
+-- noncompliant, up to a maximum of 100 for each compliance.
+--
+-- /See:/ 'complianceSummaryByResourceType' smart constructor.
+data ComplianceSummaryByResourceType = ComplianceSummaryByResourceType'
+    { _csbrtResourceType      :: !(Maybe Text)
+    , _csbrtComplianceSummary :: !(Maybe ComplianceSummary)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ComplianceSummaryByResourceType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csbrtResourceType'
+--
+-- * 'csbrtComplianceSummary'
+complianceSummaryByResourceType
+    :: ComplianceSummaryByResourceType
+complianceSummaryByResourceType =
+    ComplianceSummaryByResourceType'
+    { _csbrtResourceType = Nothing
+    , _csbrtComplianceSummary = Nothing
+    }
+
+-- | The type of AWS resource.
+csbrtResourceType :: Lens' ComplianceSummaryByResourceType (Maybe Text)
+csbrtResourceType = lens _csbrtResourceType (\ s a -> s{_csbrtResourceType = a});
+
+-- | The number of AWS resources that are compliant or noncompliant, up to a
+-- maximum of 100 for each compliance.
+csbrtComplianceSummary :: Lens' ComplianceSummaryByResourceType (Maybe ComplianceSummary)
+csbrtComplianceSummary = lens _csbrtComplianceSummary (\ s a -> s{_csbrtComplianceSummary = a});
+
+instance FromJSON ComplianceSummaryByResourceType
+         where
+        parseJSON
+          = withObject "ComplianceSummaryByResourceType"
+              (\ x ->
+                 ComplianceSummaryByResourceType' <$>
+                   (x .:? "ResourceType") <*>
+                     (x .:? "ComplianceSummary"))
+
+-- | A list that contains the status of the delivery of either the snapshot
+-- or the configuration history to the specified Amazon S3 bucket.
+--
+-- /See:/ 'configExportDeliveryInfo' smart constructor.
+data ConfigExportDeliveryInfo = ConfigExportDeliveryInfo'
+    { _cediLastErrorCode      :: !(Maybe Text)
+    , _cediLastAttemptTime    :: !(Maybe POSIX)
+    , _cediLastSuccessfulTime :: !(Maybe POSIX)
+    , _cediLastStatus         :: !(Maybe DeliveryStatus)
+    , _cediLastErrorMessage   :: !(Maybe Text)
+    , _cediNextDeliveryTime   :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigExportDeliveryInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cediLastErrorCode'
+--
+-- * 'cediLastAttemptTime'
+--
+-- * 'cediLastSuccessfulTime'
+--
+-- * 'cediLastStatus'
+--
+-- * 'cediLastErrorMessage'
+--
+-- * 'cediNextDeliveryTime'
+configExportDeliveryInfo
+    :: ConfigExportDeliveryInfo
+configExportDeliveryInfo =
+    ConfigExportDeliveryInfo'
+    { _cediLastErrorCode = Nothing
+    , _cediLastAttemptTime = Nothing
+    , _cediLastSuccessfulTime = Nothing
+    , _cediLastStatus = Nothing
+    , _cediLastErrorMessage = Nothing
+    , _cediNextDeliveryTime = Nothing
+    }
+
+-- | The error code from the last attempted delivery.
+cediLastErrorCode :: Lens' ConfigExportDeliveryInfo (Maybe Text)
+cediLastErrorCode = lens _cediLastErrorCode (\ s a -> s{_cediLastErrorCode = a});
+
+-- | The time of the last attempted delivery.
+cediLastAttemptTime :: Lens' ConfigExportDeliveryInfo (Maybe UTCTime)
+cediLastAttemptTime = lens _cediLastAttemptTime (\ s a -> s{_cediLastAttemptTime = a}) . mapping _Time;
+
+-- | The time of the last successful delivery.
+cediLastSuccessfulTime :: Lens' ConfigExportDeliveryInfo (Maybe UTCTime)
+cediLastSuccessfulTime = lens _cediLastSuccessfulTime (\ s a -> s{_cediLastSuccessfulTime = a}) . mapping _Time;
+
+-- | Status of the last attempted delivery.
+cediLastStatus :: Lens' ConfigExportDeliveryInfo (Maybe DeliveryStatus)
+cediLastStatus = lens _cediLastStatus (\ s a -> s{_cediLastStatus = a});
+
+-- | The error message from the last attempted delivery.
+cediLastErrorMessage :: Lens' ConfigExportDeliveryInfo (Maybe Text)
+cediLastErrorMessage = lens _cediLastErrorMessage (\ s a -> s{_cediLastErrorMessage = a});
+
+-- | The time that the next delivery occurs.
+cediNextDeliveryTime :: Lens' ConfigExportDeliveryInfo (Maybe UTCTime)
+cediNextDeliveryTime = lens _cediNextDeliveryTime (\ s a -> s{_cediNextDeliveryTime = a}) . mapping _Time;
+
+instance FromJSON ConfigExportDeliveryInfo where
+        parseJSON
+          = withObject "ConfigExportDeliveryInfo"
+              (\ x ->
+                 ConfigExportDeliveryInfo' <$>
+                   (x .:? "lastErrorCode") <*> (x .:? "lastAttemptTime")
+                     <*> (x .:? "lastSuccessfulTime")
+                     <*> (x .:? "lastStatus")
+                     <*> (x .:? "lastErrorMessage")
+                     <*> (x .:? "nextDeliveryTime"))
+
+-- | An AWS Lambda function that evaluates configuration items to assess
+-- whether your AWS resources comply with your desired configurations. This
+-- function can run when AWS Config detects a configuration change or
+-- delivers a configuration snapshot. This function can evaluate any
+-- resource in the recording group. To define which of these are evaluated,
+-- specify a value for the 'Scope' key.
+--
+-- For more information about developing and using AWS Config rules, see
+-- <http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html Evaluating AWS Resource Configurations with AWS Config>
+-- in the /AWS Config Developer Guide/.
+--
+-- /See:/ 'configRule' smart constructor.
+data ConfigRule = ConfigRule'
+    { _crInputParameters           :: !(Maybe Text)
+    , _crConfigRuleName            :: !(Maybe Text)
+    , _crMaximumExecutionFrequency :: !(Maybe MaximumExecutionFrequency)
+    , _crConfigRuleId              :: !(Maybe Text)
+    , _crScope                     :: !(Maybe Scope)
+    , _crConfigRuleState           :: !(Maybe ConfigRuleState)
+    , _crDescription               :: !(Maybe Text)
+    , _crConfigRuleARN             :: !(Maybe Text)
+    , _crSource                    :: !Source
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crInputParameters'
+--
+-- * 'crConfigRuleName'
+--
+-- * 'crMaximumExecutionFrequency'
+--
+-- * 'crConfigRuleId'
+--
+-- * 'crScope'
+--
+-- * 'crConfigRuleState'
+--
+-- * 'crDescription'
+--
+-- * 'crConfigRuleARN'
+--
+-- * 'crSource'
+configRule
+    :: Source -- ^ 'crSource'
+    -> ConfigRule
+configRule pSource_ =
+    ConfigRule'
+    { _crInputParameters = Nothing
+    , _crConfigRuleName = Nothing
+    , _crMaximumExecutionFrequency = Nothing
+    , _crConfigRuleId = Nothing
+    , _crScope = Nothing
+    , _crConfigRuleState = Nothing
+    , _crDescription = Nothing
+    , _crConfigRuleARN = Nothing
+    , _crSource = pSource_
+    }
+
+-- | A string in JSON format that is passed to the AWS Config rule Lambda
+-- function.
+crInputParameters :: Lens' ConfigRule (Maybe Text)
+crInputParameters = lens _crInputParameters (\ s a -> s{_crInputParameters = a});
+
+-- | The name that you assign to the AWS Config rule. The name is required if
+-- you are adding a new rule.
+crConfigRuleName :: Lens' ConfigRule (Maybe Text)
+crConfigRuleName = lens _crConfigRuleName (\ s a -> s{_crConfigRuleName = a});
+
+-- | The maximum frequency at which the AWS Config rule runs evaluations.
+--
+-- If your rule is periodic, meaning it runs an evaluation when AWS Config
+-- delivers a configuration snapshot, then it cannot run evaluations more
+-- frequently than AWS Config delivers the snapshots. For periodic rules,
+-- set the value of the 'MaximumExecutionFrequency' key to be equal to or
+-- greater than the value of the 'deliveryFrequency' key, which is part of
+-- 'ConfigSnapshotDeliveryProperties'. To update the frequency with which
+-- AWS Config delivers your snapshots, use the 'PutDeliveryChannel' action.
+crMaximumExecutionFrequency :: Lens' ConfigRule (Maybe MaximumExecutionFrequency)
+crMaximumExecutionFrequency = lens _crMaximumExecutionFrequency (\ s a -> s{_crMaximumExecutionFrequency = a});
+
+-- | The ID of the AWS Config rule.
+crConfigRuleId :: Lens' ConfigRule (Maybe Text)
+crConfigRuleId = lens _crConfigRuleId (\ s a -> s{_crConfigRuleId = a});
+
+-- | Defines which resources the AWS Config rule evaluates. The scope can
+-- include one or more resource types, a combination of a tag key and
+-- value, or a combination of one resource type and one or more resource
+-- IDs. Specify a scope to constrain the resources that are evaluated. If
+-- you do not specify a scope, the AWS Config Rule evaluates all resources
+-- in the recording group.
+crScope :: Lens' ConfigRule (Maybe Scope)
+crScope = lens _crScope (\ s a -> s{_crScope = a});
+
+-- | Indicates whether the AWS Config rule is active or currently being
+-- deleted by AWS Config.
+--
+-- AWS Config sets the state of a rule to 'DELETING' temporarily after you
+-- use the 'DeleteConfigRule' request to delete the rule. After AWS Config
+-- finishes deleting a rule, the rule and all of its evaluations are erased
+-- and no longer available.
+--
+-- You cannot add a rule to AWS Config that has the state set to
+-- 'DELETING'. If you want to delete a rule, you must use the
+-- 'DeleteConfigRule' request.
+crConfigRuleState :: Lens' ConfigRule (Maybe ConfigRuleState)
+crConfigRuleState = lens _crConfigRuleState (\ s a -> s{_crConfigRuleState = a});
+
+-- | The description that you provide for the AWS Config rule.
+crDescription :: Lens' ConfigRule (Maybe Text)
+crDescription = lens _crDescription (\ s a -> s{_crDescription = a});
+
+-- | The Amazon Resource Name (ARN) of the AWS Config rule.
+crConfigRuleARN :: Lens' ConfigRule (Maybe Text)
+crConfigRuleARN = lens _crConfigRuleARN (\ s a -> s{_crConfigRuleARN = a});
+
+-- | Provides the rule owner (AWS or customer), the rule identifier, and the
+-- events that cause the function to evaluate your AWS resources.
+crSource :: Lens' ConfigRule Source
+crSource = lens _crSource (\ s a -> s{_crSource = a});
+
+instance FromJSON ConfigRule where
+        parseJSON
+          = withObject "ConfigRule"
+              (\ x ->
+                 ConfigRule' <$>
+                   (x .:? "InputParameters") <*>
+                     (x .:? "ConfigRuleName")
+                     <*> (x .:? "MaximumExecutionFrequency")
+                     <*> (x .:? "ConfigRuleId")
+                     <*> (x .:? "Scope")
+                     <*> (x .:? "ConfigRuleState")
+                     <*> (x .:? "Description")
+                     <*> (x .:? "ConfigRuleArn")
+                     <*> (x .: "Source"))
+
+instance ToJSON ConfigRule where
+        toJSON ConfigRule'{..}
+          = object
+              (catMaybes
+                 [("InputParameters" .=) <$> _crInputParameters,
+                  ("ConfigRuleName" .=) <$> _crConfigRuleName,
+                  ("MaximumExecutionFrequency" .=) <$>
+                    _crMaximumExecutionFrequency,
+                  ("ConfigRuleId" .=) <$> _crConfigRuleId,
+                  ("Scope" .=) <$> _crScope,
+                  ("ConfigRuleState" .=) <$> _crConfigRuleState,
+                  ("Description" .=) <$> _crDescription,
+                  ("ConfigRuleArn" .=) <$> _crConfigRuleARN,
+                  Just ("Source" .= _crSource)])
+
+-- | Status information for your AWS managed Config rules. The status
+-- includes information such as the last time the rule ran, the last time
+-- it failed, and the related error for the last failure.
+--
+-- This action does not return status information about customer managed
+-- Config rules.
+--
+-- /See:/ 'configRuleEvaluationStatus' smart constructor.
+data ConfigRuleEvaluationStatus = ConfigRuleEvaluationStatus'
+    { _cresLastErrorCode                :: !(Maybe Text)
+    , _cresFirstActivatedTime           :: !(Maybe POSIX)
+    , _cresConfigRuleName               :: !(Maybe Text)
+    , _cresLastErrorMessage             :: !(Maybe Text)
+    , _cresConfigRuleId                 :: !(Maybe Text)
+    , _cresLastFailedInvocationTime     :: !(Maybe POSIX)
+    , _cresLastSuccessfulInvocationTime :: !(Maybe POSIX)
+    , _cresConfigRuleARN                :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigRuleEvaluationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cresLastErrorCode'
+--
+-- * 'cresFirstActivatedTime'
+--
+-- * 'cresConfigRuleName'
+--
+-- * 'cresLastErrorMessage'
+--
+-- * 'cresConfigRuleId'
+--
+-- * 'cresLastFailedInvocationTime'
+--
+-- * 'cresLastSuccessfulInvocationTime'
+--
+-- * 'cresConfigRuleARN'
+configRuleEvaluationStatus
+    :: ConfigRuleEvaluationStatus
+configRuleEvaluationStatus =
+    ConfigRuleEvaluationStatus'
+    { _cresLastErrorCode = Nothing
+    , _cresFirstActivatedTime = Nothing
+    , _cresConfigRuleName = Nothing
+    , _cresLastErrorMessage = Nothing
+    , _cresConfigRuleId = Nothing
+    , _cresLastFailedInvocationTime = Nothing
+    , _cresLastSuccessfulInvocationTime = Nothing
+    , _cresConfigRuleARN = Nothing
+    }
+
+-- | The error code that AWS Config returned when the rule last failed.
+cresLastErrorCode :: Lens' ConfigRuleEvaluationStatus (Maybe Text)
+cresLastErrorCode = lens _cresLastErrorCode (\ s a -> s{_cresLastErrorCode = a});
+
+-- | The time that you first activated the AWS Config rule.
+cresFirstActivatedTime :: Lens' ConfigRuleEvaluationStatus (Maybe UTCTime)
+cresFirstActivatedTime = lens _cresFirstActivatedTime (\ s a -> s{_cresFirstActivatedTime = a}) . mapping _Time;
+
+-- | The name of the AWS Config rule.
+cresConfigRuleName :: Lens' ConfigRuleEvaluationStatus (Maybe Text)
+cresConfigRuleName = lens _cresConfigRuleName (\ s a -> s{_cresConfigRuleName = a});
+
+-- | The error message that AWS Config returned when the rule last failed.
+cresLastErrorMessage :: Lens' ConfigRuleEvaluationStatus (Maybe Text)
+cresLastErrorMessage = lens _cresLastErrorMessage (\ s a -> s{_cresLastErrorMessage = a});
+
+-- | The ID of the AWS Config rule.
+cresConfigRuleId :: Lens' ConfigRuleEvaluationStatus (Maybe Text)
+cresConfigRuleId = lens _cresConfigRuleId (\ s a -> s{_cresConfigRuleId = a});
+
+-- | The time that AWS Config last failed to invoke the AWS Config rule to
+-- evaluate your AWS resources.
+cresLastFailedInvocationTime :: Lens' ConfigRuleEvaluationStatus (Maybe UTCTime)
+cresLastFailedInvocationTime = lens _cresLastFailedInvocationTime (\ s a -> s{_cresLastFailedInvocationTime = a}) . mapping _Time;
+
+-- | The time that AWS Config last successfully invoked the AWS Config rule
+-- to evaluate your AWS resources.
+cresLastSuccessfulInvocationTime :: Lens' ConfigRuleEvaluationStatus (Maybe UTCTime)
+cresLastSuccessfulInvocationTime = lens _cresLastSuccessfulInvocationTime (\ s a -> s{_cresLastSuccessfulInvocationTime = a}) . mapping _Time;
+
+-- | The Amazon Resource Name (ARN) of the AWS Config rule.
+cresConfigRuleARN :: Lens' ConfigRuleEvaluationStatus (Maybe Text)
+cresConfigRuleARN = lens _cresConfigRuleARN (\ s a -> s{_cresConfigRuleARN = a});
+
+instance FromJSON ConfigRuleEvaluationStatus where
+        parseJSON
+          = withObject "ConfigRuleEvaluationStatus"
+              (\ x ->
+                 ConfigRuleEvaluationStatus' <$>
+                   (x .:? "LastErrorCode") <*>
+                     (x .:? "FirstActivatedTime")
+                     <*> (x .:? "ConfigRuleName")
+                     <*> (x .:? "LastErrorMessage")
+                     <*> (x .:? "ConfigRuleId")
+                     <*> (x .:? "LastFailedInvocationTime")
+                     <*> (x .:? "LastSuccessfulInvocationTime")
+                     <*> (x .:? "ConfigRuleArn"))
+
+-- | Options for how AWS Config delivers configuration snapshots to the
+-- Amazon S3 bucket in your delivery channel.
+--
+-- /See:/ 'configSnapshotDeliveryProperties' smart constructor.
+newtype ConfigSnapshotDeliveryProperties = ConfigSnapshotDeliveryProperties'
+    { _csdpDeliveryFrequency :: Maybe MaximumExecutionFrequency
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigSnapshotDeliveryProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csdpDeliveryFrequency'
+configSnapshotDeliveryProperties
+    :: ConfigSnapshotDeliveryProperties
+configSnapshotDeliveryProperties =
+    ConfigSnapshotDeliveryProperties'
+    { _csdpDeliveryFrequency = Nothing
+    }
+
+-- | The frequency with which a AWS Config recurringly delivers configuration
+-- snapshots.
+csdpDeliveryFrequency :: Lens' ConfigSnapshotDeliveryProperties (Maybe MaximumExecutionFrequency)
+csdpDeliveryFrequency = lens _csdpDeliveryFrequency (\ s a -> s{_csdpDeliveryFrequency = a});
+
+instance FromJSON ConfigSnapshotDeliveryProperties
+         where
+        parseJSON
+          = withObject "ConfigSnapshotDeliveryProperties"
+              (\ x ->
+                 ConfigSnapshotDeliveryProperties' <$>
+                   (x .:? "deliveryFrequency"))
+
+instance ToJSON ConfigSnapshotDeliveryProperties
+         where
+        toJSON ConfigSnapshotDeliveryProperties'{..}
+          = object
+              (catMaybes
+                 [("deliveryFrequency" .=) <$>
+                    _csdpDeliveryFrequency])
+
+-- | A list that contains the status of the delivery of the configuration
+-- stream notification to the Amazon SNS topic.
+--
+-- /See:/ 'configStreamDeliveryInfo' smart constructor.
+data ConfigStreamDeliveryInfo = ConfigStreamDeliveryInfo'
+    { _csdiLastErrorCode        :: !(Maybe Text)
+    , _csdiLastStatusChangeTime :: !(Maybe POSIX)
+    , _csdiLastStatus           :: !(Maybe DeliveryStatus)
+    , _csdiLastErrorMessage     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigStreamDeliveryInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csdiLastErrorCode'
+--
+-- * 'csdiLastStatusChangeTime'
+--
+-- * 'csdiLastStatus'
+--
+-- * 'csdiLastErrorMessage'
+configStreamDeliveryInfo
+    :: ConfigStreamDeliveryInfo
+configStreamDeliveryInfo =
+    ConfigStreamDeliveryInfo'
+    { _csdiLastErrorCode = Nothing
+    , _csdiLastStatusChangeTime = Nothing
+    , _csdiLastStatus = Nothing
+    , _csdiLastErrorMessage = Nothing
+    }
+
+-- | The error code from the last attempted delivery.
+csdiLastErrorCode :: Lens' ConfigStreamDeliveryInfo (Maybe Text)
+csdiLastErrorCode = lens _csdiLastErrorCode (\ s a -> s{_csdiLastErrorCode = a});
+
+-- | The time from the last status change.
+csdiLastStatusChangeTime :: Lens' ConfigStreamDeliveryInfo (Maybe UTCTime)
+csdiLastStatusChangeTime = lens _csdiLastStatusChangeTime (\ s a -> s{_csdiLastStatusChangeTime = a}) . mapping _Time;
+
+-- | Status of the last attempted delivery.
+--
+-- __Note__ Providing an SNS topic on a
+-- <http://docs.aws.amazon.com/config/latest/APIReference/API_DeliveryChannel.html DeliveryChannel>
+-- for AWS Config is optional. If the SNS delivery is turned off, the last
+-- status will be __Not_Applicable__.
+csdiLastStatus :: Lens' ConfigStreamDeliveryInfo (Maybe DeliveryStatus)
+csdiLastStatus = lens _csdiLastStatus (\ s a -> s{_csdiLastStatus = a});
+
+-- | The error message from the last attempted delivery.
+csdiLastErrorMessage :: Lens' ConfigStreamDeliveryInfo (Maybe Text)
+csdiLastErrorMessage = lens _csdiLastErrorMessage (\ s a -> s{_csdiLastErrorMessage = a});
+
+instance FromJSON ConfigStreamDeliveryInfo where
+        parseJSON
+          = withObject "ConfigStreamDeliveryInfo"
+              (\ x ->
+                 ConfigStreamDeliveryInfo' <$>
+                   (x .:? "lastErrorCode") <*>
+                     (x .:? "lastStatusChangeTime")
+                     <*> (x .:? "lastStatus")
+                     <*> (x .:? "lastErrorMessage"))
+
+-- | A list that contains detailed configurations of a specified resource.
+--
+-- Currently, the list does not contain information about non-AWS
+-- components (for example, applications on your Amazon EC2 instances).
+--
+-- /See:/ 'configurationItem' smart constructor.
+data ConfigurationItem = ConfigurationItem'
+    { _ciResourceId                   :: !(Maybe Text)
+    , _ciResourceType                 :: !(Maybe ResourceType)
+    , _ciConfigurationStateId         :: !(Maybe Text)
+    , _ciArn                          :: !(Maybe Text)
+    , _ciResourceName                 :: !(Maybe Text)
+    , _ciResourceCreationTime         :: !(Maybe POSIX)
+    , _ciConfigurationItemStatus      :: !(Maybe ConfigurationItemStatus)
+    , _ciConfigurationItemCaptureTime :: !(Maybe POSIX)
+    , _ciAccountId                    :: !(Maybe Text)
+    , _ciAvailabilityZone             :: !(Maybe Text)
+    , _ciRelationships                :: !(Maybe [Relationship])
+    , _ciVersion                      :: !(Maybe Text)
+    , _ciAwsRegion                    :: !(Maybe Text)
+    , _ciRelatedEvents                :: !(Maybe [Text])
+    , _ciConfiguration                :: !(Maybe Text)
+    , _ciConfigurationItemMD5Hash     :: !(Maybe Text)
+    , _ciTags                         :: !(Maybe (Map Text Text))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigurationItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciResourceId'
+--
+-- * 'ciResourceType'
+--
+-- * 'ciConfigurationStateId'
+--
+-- * 'ciArn'
+--
+-- * 'ciResourceName'
+--
+-- * 'ciResourceCreationTime'
+--
+-- * 'ciConfigurationItemStatus'
+--
+-- * 'ciConfigurationItemCaptureTime'
+--
+-- * 'ciAccountId'
+--
+-- * 'ciAvailabilityZone'
+--
+-- * 'ciRelationships'
+--
+-- * 'ciVersion'
+--
+-- * 'ciAwsRegion'
+--
+-- * 'ciRelatedEvents'
+--
+-- * 'ciConfiguration'
+--
+-- * 'ciConfigurationItemMD5Hash'
+--
+-- * 'ciTags'
+configurationItem
+    :: ConfigurationItem
+configurationItem =
+    ConfigurationItem'
+    { _ciResourceId = Nothing
+    , _ciResourceType = Nothing
+    , _ciConfigurationStateId = Nothing
+    , _ciArn = Nothing
+    , _ciResourceName = Nothing
+    , _ciResourceCreationTime = Nothing
+    , _ciConfigurationItemStatus = Nothing
+    , _ciConfigurationItemCaptureTime = Nothing
+    , _ciAccountId = Nothing
+    , _ciAvailabilityZone = Nothing
+    , _ciRelationships = Nothing
+    , _ciVersion = Nothing
+    , _ciAwsRegion = Nothing
+    , _ciRelatedEvents = Nothing
+    , _ciConfiguration = Nothing
+    , _ciConfigurationItemMD5Hash = Nothing
+    , _ciTags = Nothing
+    }
+
+-- | The ID of the resource (for example., 'sg-xxxxxx').
+ciResourceId :: Lens' ConfigurationItem (Maybe Text)
+ciResourceId = lens _ciResourceId (\ s a -> s{_ciResourceId = a});
+
+-- | The type of AWS resource.
+ciResourceType :: Lens' ConfigurationItem (Maybe ResourceType)
+ciResourceType = lens _ciResourceType (\ s a -> s{_ciResourceType = a});
+
+-- | An identifier that indicates the ordering of the configuration items of
+-- a resource.
+ciConfigurationStateId :: Lens' ConfigurationItem (Maybe Text)
+ciConfigurationStateId = lens _ciConfigurationStateId (\ s a -> s{_ciConfigurationStateId = a});
+
+-- | The Amazon Resource Name (ARN) of the resource.
+ciArn :: Lens' ConfigurationItem (Maybe Text)
+ciArn = lens _ciArn (\ s a -> s{_ciArn = a});
+
+-- | The custom name of the resource, if available.
+ciResourceName :: Lens' ConfigurationItem (Maybe Text)
+ciResourceName = lens _ciResourceName (\ s a -> s{_ciResourceName = a});
+
+-- | The time stamp when the resource was created.
+ciResourceCreationTime :: Lens' ConfigurationItem (Maybe UTCTime)
+ciResourceCreationTime = lens _ciResourceCreationTime (\ s a -> s{_ciResourceCreationTime = a}) . mapping _Time;
+
+-- | The configuration item status.
+ciConfigurationItemStatus :: Lens' ConfigurationItem (Maybe ConfigurationItemStatus)
+ciConfigurationItemStatus = lens _ciConfigurationItemStatus (\ s a -> s{_ciConfigurationItemStatus = a});
+
+-- | The time when the configuration recording was initiated.
+ciConfigurationItemCaptureTime :: Lens' ConfigurationItem (Maybe UTCTime)
+ciConfigurationItemCaptureTime = lens _ciConfigurationItemCaptureTime (\ s a -> s{_ciConfigurationItemCaptureTime = a}) . mapping _Time;
+
+-- | The 12 digit AWS account ID associated with the resource.
+ciAccountId :: Lens' ConfigurationItem (Maybe Text)
+ciAccountId = lens _ciAccountId (\ s a -> s{_ciAccountId = a});
+
+-- | The Availability Zone associated with the resource.
+ciAvailabilityZone :: Lens' ConfigurationItem (Maybe Text)
+ciAvailabilityZone = lens _ciAvailabilityZone (\ s a -> s{_ciAvailabilityZone = a});
+
+-- | A list of related AWS resources.
+ciRelationships :: Lens' ConfigurationItem [Relationship]
+ciRelationships = lens _ciRelationships (\ s a -> s{_ciRelationships = a}) . _Default . _Coerce;
+
+-- | The version number of the resource configuration.
+ciVersion :: Lens' ConfigurationItem (Maybe Text)
+ciVersion = lens _ciVersion (\ s a -> s{_ciVersion = a});
+
+-- | The region where the resource resides.
+ciAwsRegion :: Lens' ConfigurationItem (Maybe Text)
+ciAwsRegion = lens _ciAwsRegion (\ s a -> s{_ciAwsRegion = a});
+
+-- | A list of CloudTrail event IDs.
+--
+-- A populated field indicates that the current configuration was initiated
+-- by the events recorded in the CloudTrail log. For more information about
+-- CloudTrail, see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html What is AWS CloudTrail?>.
+--
+-- An empty field indicates that the current configuration was not
+-- initiated by any event.
+ciRelatedEvents :: Lens' ConfigurationItem [Text]
+ciRelatedEvents = lens _ciRelatedEvents (\ s a -> s{_ciRelatedEvents = a}) . _Default . _Coerce;
+
+-- | The description of the resource configuration.
+ciConfiguration :: Lens' ConfigurationItem (Maybe Text)
+ciConfiguration = lens _ciConfiguration (\ s a -> s{_ciConfiguration = a});
+
+-- | Unique MD5 hash that represents the configuration item\'s state.
+--
+-- You can use MD5 hash to compare the states of two or more configuration
+-- items that are associated with the same resource.
+ciConfigurationItemMD5Hash :: Lens' ConfigurationItem (Maybe Text)
+ciConfigurationItemMD5Hash = lens _ciConfigurationItemMD5Hash (\ s a -> s{_ciConfigurationItemMD5Hash = a});
+
+-- | A mapping of key value tags associated with the resource.
+ciTags :: Lens' ConfigurationItem (HashMap Text Text)
+ciTags = lens _ciTags (\ s a -> s{_ciTags = a}) . _Default . _Map;
+
+instance FromJSON ConfigurationItem where
+        parseJSON
+          = withObject "ConfigurationItem"
+              (\ x ->
+                 ConfigurationItem' <$>
+                   (x .:? "resourceId") <*> (x .:? "resourceType") <*>
+                     (x .:? "configurationStateId")
+                     <*> (x .:? "arn")
+                     <*> (x .:? "resourceName")
+                     <*> (x .:? "resourceCreationTime")
+                     <*> (x .:? "configurationItemStatus")
+                     <*> (x .:? "configurationItemCaptureTime")
+                     <*> (x .:? "accountId")
+                     <*> (x .:? "availabilityZone")
+                     <*> (x .:? "relationships" .!= mempty)
+                     <*> (x .:? "version")
+                     <*> (x .:? "awsRegion")
+                     <*> (x .:? "relatedEvents" .!= mempty)
+                     <*> (x .:? "configuration")
+                     <*> (x .:? "configurationItemMD5Hash")
+                     <*> (x .:? "tags" .!= mempty))
+
+-- | An object that represents the recording of configuration changes of an
+-- AWS resource.
+--
+-- /See:/ 'configurationRecorder' smart constructor.
+data ConfigurationRecorder = ConfigurationRecorder'
+    { _crName           :: !(Maybe Text)
+    , _crRecordingGroup :: !(Maybe RecordingGroup)
+    , _crRoleARN        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigurationRecorder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crName'
+--
+-- * 'crRecordingGroup'
+--
+-- * 'crRoleARN'
+configurationRecorder
+    :: ConfigurationRecorder
+configurationRecorder =
+    ConfigurationRecorder'
+    { _crName = Nothing
+    , _crRecordingGroup = Nothing
+    , _crRoleARN = Nothing
+    }
+
+-- | The name of the recorder. By default, AWS Config automatically assigns
+-- the name \"default\" when creating the configuration recorder. You
+-- cannot change the assigned name.
+crName :: Lens' ConfigurationRecorder (Maybe Text)
+crName = lens _crName (\ s a -> s{_crName = a});
+
+-- | The recording group specifies either to record configurations for all
+-- supported resources or to provide a list of resource types to record.
+-- The list of resource types must be a subset of supported resource types.
+crRecordingGroup :: Lens' ConfigurationRecorder (Maybe RecordingGroup)
+crRecordingGroup = lens _crRecordingGroup (\ s a -> s{_crRecordingGroup = a});
+
+-- | Amazon Resource Name (ARN) of the IAM role used to describe the AWS
+-- resources associated with the account.
+crRoleARN :: Lens' ConfigurationRecorder (Maybe Text)
+crRoleARN = lens _crRoleARN (\ s a -> s{_crRoleARN = a});
+
+instance FromJSON ConfigurationRecorder where
+        parseJSON
+          = withObject "ConfigurationRecorder"
+              (\ x ->
+                 ConfigurationRecorder' <$>
+                   (x .:? "name") <*> (x .:? "recordingGroup") <*>
+                     (x .:? "roleARN"))
+
+instance ToJSON ConfigurationRecorder where
+        toJSON ConfigurationRecorder'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _crName,
+                  ("recordingGroup" .=) <$> _crRecordingGroup,
+                  ("roleARN" .=) <$> _crRoleARN])
+
+-- | The current status of the configuration recorder.
+--
+-- /See:/ 'configurationRecorderStatus' smart constructor.
+data ConfigurationRecorderStatus = ConfigurationRecorderStatus'
+    { _crsLastErrorCode        :: !(Maybe Text)
+    , _crsLastStopTime         :: !(Maybe POSIX)
+    , _crsLastStatusChangeTime :: !(Maybe POSIX)
+    , _crsRecording            :: !(Maybe Bool)
+    , _crsLastStatus           :: !(Maybe RecorderStatus)
+    , _crsLastErrorMessage     :: !(Maybe Text)
+    , _crsName                 :: !(Maybe Text)
+    , _crsLastStartTime        :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConfigurationRecorderStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crsLastErrorCode'
+--
+-- * 'crsLastStopTime'
+--
+-- * 'crsLastStatusChangeTime'
+--
+-- * 'crsRecording'
+--
+-- * 'crsLastStatus'
+--
+-- * 'crsLastErrorMessage'
+--
+-- * 'crsName'
+--
+-- * 'crsLastStartTime'
+configurationRecorderStatus
+    :: ConfigurationRecorderStatus
+configurationRecorderStatus =
+    ConfigurationRecorderStatus'
+    { _crsLastErrorCode = Nothing
+    , _crsLastStopTime = Nothing
+    , _crsLastStatusChangeTime = Nothing
+    , _crsRecording = Nothing
+    , _crsLastStatus = Nothing
+    , _crsLastErrorMessage = Nothing
+    , _crsName = Nothing
+    , _crsLastStartTime = Nothing
+    }
+
+-- | The error code indicating that the recording failed.
+crsLastErrorCode :: Lens' ConfigurationRecorderStatus (Maybe Text)
+crsLastErrorCode = lens _crsLastErrorCode (\ s a -> s{_crsLastErrorCode = a});
+
+-- | The time the recorder was last stopped.
+crsLastStopTime :: Lens' ConfigurationRecorderStatus (Maybe UTCTime)
+crsLastStopTime = lens _crsLastStopTime (\ s a -> s{_crsLastStopTime = a}) . mapping _Time;
+
+-- | The time when the status was last changed.
+crsLastStatusChangeTime :: Lens' ConfigurationRecorderStatus (Maybe UTCTime)
+crsLastStatusChangeTime = lens _crsLastStatusChangeTime (\ s a -> s{_crsLastStatusChangeTime = a}) . mapping _Time;
+
+-- | Specifies whether the recorder is currently recording or not.
+crsRecording :: Lens' ConfigurationRecorderStatus (Maybe Bool)
+crsRecording = lens _crsRecording (\ s a -> s{_crsRecording = a});
+
+-- | The last (previous) status of the recorder.
+crsLastStatus :: Lens' ConfigurationRecorderStatus (Maybe RecorderStatus)
+crsLastStatus = lens _crsLastStatus (\ s a -> s{_crsLastStatus = a});
+
+-- | The message indicating that the recording failed due to an error.
+crsLastErrorMessage :: Lens' ConfigurationRecorderStatus (Maybe Text)
+crsLastErrorMessage = lens _crsLastErrorMessage (\ s a -> s{_crsLastErrorMessage = a});
+
+-- | The name of the configuration recorder.
+crsName :: Lens' ConfigurationRecorderStatus (Maybe Text)
+crsName = lens _crsName (\ s a -> s{_crsName = a});
+
+-- | The time the recorder was last started.
+crsLastStartTime :: Lens' ConfigurationRecorderStatus (Maybe UTCTime)
+crsLastStartTime = lens _crsLastStartTime (\ s a -> s{_crsLastStartTime = a}) . mapping _Time;
+
+instance FromJSON ConfigurationRecorderStatus where
+        parseJSON
+          = withObject "ConfigurationRecorderStatus"
+              (\ x ->
+                 ConfigurationRecorderStatus' <$>
+                   (x .:? "lastErrorCode") <*> (x .:? "lastStopTime")
+                     <*> (x .:? "lastStatusChangeTime")
+                     <*> (x .:? "recording")
+                     <*> (x .:? "lastStatus")
+                     <*> (x .:? "lastErrorMessage")
+                     <*> (x .:? "name")
+                     <*> (x .:? "lastStartTime"))
+
+-- | A logical container used for storing the configuration changes of an AWS
+-- resource.
+--
+-- /See:/ 'deliveryChannel' smart constructor.
+data DeliveryChannel = DeliveryChannel'
+    { _dcS3KeyPrefix                      :: !(Maybe Text)
+    , _dcSnsTopicARN                      :: !(Maybe Text)
+    , _dcName                             :: !(Maybe Text)
+    , _dcConfigSnapshotDeliveryProperties :: !(Maybe ConfigSnapshotDeliveryProperties)
+    , _dcS3BucketName                     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeliveryChannel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcS3KeyPrefix'
+--
+-- * 'dcSnsTopicARN'
+--
+-- * 'dcName'
+--
+-- * 'dcConfigSnapshotDeliveryProperties'
+--
+-- * 'dcS3BucketName'
+deliveryChannel
+    :: DeliveryChannel
+deliveryChannel =
+    DeliveryChannel'
+    { _dcS3KeyPrefix = Nothing
+    , _dcSnsTopicARN = Nothing
+    , _dcName = Nothing
+    , _dcConfigSnapshotDeliveryProperties = Nothing
+    , _dcS3BucketName = Nothing
+    }
+
+-- | The prefix for the specified Amazon S3 bucket.
+dcS3KeyPrefix :: Lens' DeliveryChannel (Maybe Text)
+dcS3KeyPrefix = lens _dcS3KeyPrefix (\ s a -> s{_dcS3KeyPrefix = a});
+
+-- | The Amazon Resource Name (ARN) of the SNS topic that AWS Config delivers
+-- notifications to.
+dcSnsTopicARN :: Lens' DeliveryChannel (Maybe Text)
+dcSnsTopicARN = lens _dcSnsTopicARN (\ s a -> s{_dcSnsTopicARN = a});
+
+-- | The name of the delivery channel. By default, AWS Config automatically
+-- assigns the name \"default\" when creating the delivery channel. You
+-- cannot change the assigned name.
+dcName :: Lens' DeliveryChannel (Maybe Text)
+dcName = lens _dcName (\ s a -> s{_dcName = a});
+
+-- | Undocumented member.
+dcConfigSnapshotDeliveryProperties :: Lens' DeliveryChannel (Maybe ConfigSnapshotDeliveryProperties)
+dcConfigSnapshotDeliveryProperties = lens _dcConfigSnapshotDeliveryProperties (\ s a -> s{_dcConfigSnapshotDeliveryProperties = a});
+
+-- | The name of the Amazon S3 bucket used to store configuration history for
+-- the delivery channel.
+dcS3BucketName :: Lens' DeliveryChannel (Maybe Text)
+dcS3BucketName = lens _dcS3BucketName (\ s a -> s{_dcS3BucketName = a});
+
+instance FromJSON DeliveryChannel where
+        parseJSON
+          = withObject "DeliveryChannel"
+              (\ x ->
+                 DeliveryChannel' <$>
+                   (x .:? "s3KeyPrefix") <*> (x .:? "snsTopicARN") <*>
+                     (x .:? "name")
+                     <*> (x .:? "configSnapshotDeliveryProperties")
+                     <*> (x .:? "s3BucketName"))
+
+instance ToJSON DeliveryChannel where
+        toJSON DeliveryChannel'{..}
+          = object
+              (catMaybes
+                 [("s3KeyPrefix" .=) <$> _dcS3KeyPrefix,
+                  ("snsTopicARN" .=) <$> _dcSnsTopicARN,
+                  ("name" .=) <$> _dcName,
+                  ("configSnapshotDeliveryProperties" .=) <$>
+                    _dcConfigSnapshotDeliveryProperties,
+                  ("s3BucketName" .=) <$> _dcS3BucketName])
+
+-- | The status of a specified delivery channel.
+--
+-- Valid values: 'Success' | 'Failure'
+--
+-- /See:/ 'deliveryChannelStatus' smart constructor.
+data DeliveryChannelStatus = DeliveryChannelStatus'
+    { _dcsConfigSnapshotDeliveryInfo :: !(Maybe ConfigExportDeliveryInfo)
+    , _dcsConfigStreamDeliveryInfo   :: !(Maybe ConfigStreamDeliveryInfo)
+    , _dcsConfigHistoryDeliveryInfo  :: !(Maybe ConfigExportDeliveryInfo)
+    , _dcsName                       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeliveryChannelStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcsConfigSnapshotDeliveryInfo'
+--
+-- * 'dcsConfigStreamDeliveryInfo'
+--
+-- * 'dcsConfigHistoryDeliveryInfo'
+--
+-- * 'dcsName'
+deliveryChannelStatus
+    :: DeliveryChannelStatus
+deliveryChannelStatus =
+    DeliveryChannelStatus'
+    { _dcsConfigSnapshotDeliveryInfo = Nothing
+    , _dcsConfigStreamDeliveryInfo = Nothing
+    , _dcsConfigHistoryDeliveryInfo = Nothing
+    , _dcsName = Nothing
+    }
+
+-- | A list containing the status of the delivery of the snapshot to the
+-- specified Amazon S3 bucket.
+dcsConfigSnapshotDeliveryInfo :: Lens' DeliveryChannelStatus (Maybe ConfigExportDeliveryInfo)
+dcsConfigSnapshotDeliveryInfo = lens _dcsConfigSnapshotDeliveryInfo (\ s a -> s{_dcsConfigSnapshotDeliveryInfo = a});
+
+-- | A list containing the status of the delivery of the configuration stream
+-- notification to the specified Amazon SNS topic.
+dcsConfigStreamDeliveryInfo :: Lens' DeliveryChannelStatus (Maybe ConfigStreamDeliveryInfo)
+dcsConfigStreamDeliveryInfo = lens _dcsConfigStreamDeliveryInfo (\ s a -> s{_dcsConfigStreamDeliveryInfo = a});
+
+-- | A list that contains the status of the delivery of the configuration
+-- history to the specified Amazon S3 bucket.
+dcsConfigHistoryDeliveryInfo :: Lens' DeliveryChannelStatus (Maybe ConfigExportDeliveryInfo)
+dcsConfigHistoryDeliveryInfo = lens _dcsConfigHistoryDeliveryInfo (\ s a -> s{_dcsConfigHistoryDeliveryInfo = a});
+
+-- | The name of the delivery channel.
+dcsName :: Lens' DeliveryChannelStatus (Maybe Text)
+dcsName = lens _dcsName (\ s a -> s{_dcsName = a});
+
+instance FromJSON DeliveryChannelStatus where
+        parseJSON
+          = withObject "DeliveryChannelStatus"
+              (\ x ->
+                 DeliveryChannelStatus' <$>
+                   (x .:? "configSnapshotDeliveryInfo") <*>
+                     (x .:? "configStreamDeliveryInfo")
+                     <*> (x .:? "configHistoryDeliveryInfo")
+                     <*> (x .:? "name"))
+
+-- | Identifies an AWS resource and indicates whether it complies with the
+-- AWS Config rule that it was evaluated against.
+--
+-- /See:/ 'evaluation' smart constructor.
+data Evaluation = Evaluation'
+    { _eAnnotation             :: !(Maybe Text)
+    , _eComplianceResourceType :: !Text
+    , _eComplianceResourceId   :: !Text
+    , _eComplianceType         :: !ComplianceType
+    , _eOrderingTimestamp      :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Evaluation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eAnnotation'
+--
+-- * 'eComplianceResourceType'
+--
+-- * 'eComplianceResourceId'
+--
+-- * 'eComplianceType'
+--
+-- * 'eOrderingTimestamp'
+evaluation
+    :: Text -- ^ 'eComplianceResourceType'
+    -> Text -- ^ 'eComplianceResourceId'
+    -> ComplianceType -- ^ 'eComplianceType'
+    -> UTCTime -- ^ 'eOrderingTimestamp'
+    -> Evaluation
+evaluation pComplianceResourceType_ pComplianceResourceId_ pComplianceType_ pOrderingTimestamp_ =
+    Evaluation'
+    { _eAnnotation = Nothing
+    , _eComplianceResourceType = pComplianceResourceType_
+    , _eComplianceResourceId = pComplianceResourceId_
+    , _eComplianceType = pComplianceType_
+    , _eOrderingTimestamp = _Time # pOrderingTimestamp_
+    }
+
+-- | Supplementary information about how the evaluation determined the
+-- compliance.
+eAnnotation :: Lens' Evaluation (Maybe Text)
+eAnnotation = lens _eAnnotation (\ s a -> s{_eAnnotation = a});
+
+-- | The type of AWS resource that was evaluated.
+eComplianceResourceType :: Lens' Evaluation Text
+eComplianceResourceType = lens _eComplianceResourceType (\ s a -> s{_eComplianceResourceType = a});
+
+-- | The ID of the AWS resource that was evaluated.
+eComplianceResourceId :: Lens' Evaluation Text
+eComplianceResourceId = lens _eComplianceResourceId (\ s a -> s{_eComplianceResourceId = a});
+
+-- | Indicates whether the AWS resource complies with the AWS Config rule
+-- that it was evaluated against.
+eComplianceType :: Lens' Evaluation ComplianceType
+eComplianceType = lens _eComplianceType (\ s a -> s{_eComplianceType = a});
+
+-- | The time of the event in AWS Config that triggered the evaluation. For
+-- event-based evaluations, the time indicates when AWS Config created the
+-- configuration item that triggered the evaluation. For periodic
+-- evaluations, the time indicates when AWS Config delivered the
+-- configuration snapshot that triggered the evaluation.
+eOrderingTimestamp :: Lens' Evaluation UTCTime
+eOrderingTimestamp = lens _eOrderingTimestamp (\ s a -> s{_eOrderingTimestamp = a}) . _Time;
+
+instance FromJSON Evaluation where
+        parseJSON
+          = withObject "Evaluation"
+              (\ x ->
+                 Evaluation' <$>
+                   (x .:? "Annotation") <*>
+                     (x .: "ComplianceResourceType")
+                     <*> (x .: "ComplianceResourceId")
+                     <*> (x .: "ComplianceType")
+                     <*> (x .: "OrderingTimestamp"))
+
+instance ToJSON Evaluation where
+        toJSON Evaluation'{..}
+          = object
+              (catMaybes
+                 [("Annotation" .=) <$> _eAnnotation,
+                  Just
+                    ("ComplianceResourceType" .=
+                       _eComplianceResourceType),
+                  Just
+                    ("ComplianceResourceId" .= _eComplianceResourceId),
+                  Just ("ComplianceType" .= _eComplianceType),
+                  Just ("OrderingTimestamp" .= _eOrderingTimestamp)])
+
+-- | The details of an AWS Config evaluation. Provides the AWS resource that
+-- was evaluated, the compliance of the resource, related timestamps, and
+-- supplementary information.
+--
+-- /See:/ 'evaluationResult' smart constructor.
+data EvaluationResult = EvaluationResult'
+    { _erEvaluationResultIdentifier :: !(Maybe EvaluationResultIdentifier)
+    , _erAnnotation                 :: !(Maybe Text)
+    , _erConfigRuleInvokedTime      :: !(Maybe POSIX)
+    , _erResultRecordedTime         :: !(Maybe POSIX)
+    , _erResultToken                :: !(Maybe Text)
+    , _erComplianceType             :: !(Maybe ComplianceType)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EvaluationResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'erEvaluationResultIdentifier'
+--
+-- * 'erAnnotation'
+--
+-- * 'erConfigRuleInvokedTime'
+--
+-- * 'erResultRecordedTime'
+--
+-- * 'erResultToken'
+--
+-- * 'erComplianceType'
+evaluationResult
+    :: EvaluationResult
+evaluationResult =
+    EvaluationResult'
+    { _erEvaluationResultIdentifier = Nothing
+    , _erAnnotation = Nothing
+    , _erConfigRuleInvokedTime = Nothing
+    , _erResultRecordedTime = Nothing
+    , _erResultToken = Nothing
+    , _erComplianceType = Nothing
+    }
+
+-- | Uniquely identifies the evaluation result.
+erEvaluationResultIdentifier :: Lens' EvaluationResult (Maybe EvaluationResultIdentifier)
+erEvaluationResultIdentifier = lens _erEvaluationResultIdentifier (\ s a -> s{_erEvaluationResultIdentifier = a});
+
+-- | Supplementary information about how the evaluation determined the
+-- compliance.
+erAnnotation :: Lens' EvaluationResult (Maybe Text)
+erAnnotation = lens _erAnnotation (\ s a -> s{_erAnnotation = a});
+
+-- | The time when the AWS Config rule evaluated the AWS resource.
+erConfigRuleInvokedTime :: Lens' EvaluationResult (Maybe UTCTime)
+erConfigRuleInvokedTime = lens _erConfigRuleInvokedTime (\ s a -> s{_erConfigRuleInvokedTime = a}) . mapping _Time;
+
+-- | The time when AWS Config recorded the evaluation result.
+erResultRecordedTime :: Lens' EvaluationResult (Maybe UTCTime)
+erResultRecordedTime = lens _erResultRecordedTime (\ s a -> s{_erResultRecordedTime = a}) . mapping _Time;
+
+-- | An encrypted token that associates an evaluation with an AWS Config
+-- rule. The token identifies the rule, the AWS resource being evaluated,
+-- and the event that triggered the evaluation.
+erResultToken :: Lens' EvaluationResult (Maybe Text)
+erResultToken = lens _erResultToken (\ s a -> s{_erResultToken = a});
+
+-- | Indicates whether the AWS resource complies with the AWS Config rule
+-- that evaluated it.
+erComplianceType :: Lens' EvaluationResult (Maybe ComplianceType)
+erComplianceType = lens _erComplianceType (\ s a -> s{_erComplianceType = a});
+
+instance FromJSON EvaluationResult where
+        parseJSON
+          = withObject "EvaluationResult"
+              (\ x ->
+                 EvaluationResult' <$>
+                   (x .:? "EvaluationResultIdentifier") <*>
+                     (x .:? "Annotation")
+                     <*> (x .:? "ConfigRuleInvokedTime")
+                     <*> (x .:? "ResultRecordedTime")
+                     <*> (x .:? "ResultToken")
+                     <*> (x .:? "ComplianceType"))
+
+-- | Uniquely identifies an evaluation result.
+--
+-- /See:/ 'evaluationResultIdentifier' smart constructor.
+data EvaluationResultIdentifier = EvaluationResultIdentifier'
+    { _eriEvaluationResultQualifier :: !(Maybe EvaluationResultQualifier)
+    , _eriOrderingTimestamp         :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EvaluationResultIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eriEvaluationResultQualifier'
+--
+-- * 'eriOrderingTimestamp'
+evaluationResultIdentifier
+    :: EvaluationResultIdentifier
+evaluationResultIdentifier =
+    EvaluationResultIdentifier'
+    { _eriEvaluationResultQualifier = Nothing
+    , _eriOrderingTimestamp = Nothing
+    }
+
+-- | Identifies an AWS Config rule used to evaluate an AWS resource, and
+-- provides the type and ID of the evaluated resource.
+eriEvaluationResultQualifier :: Lens' EvaluationResultIdentifier (Maybe EvaluationResultQualifier)
+eriEvaluationResultQualifier = lens _eriEvaluationResultQualifier (\ s a -> s{_eriEvaluationResultQualifier = a});
+
+-- | The time of the event that triggered the evaluation of your AWS
+-- resources. The time can indicate when AWS Config delivered a
+-- configuration item change notification, or it can indicate when AWS
+-- Config delivered the configuration snapshot, depending on which event
+-- triggered the evaluation.
+eriOrderingTimestamp :: Lens' EvaluationResultIdentifier (Maybe UTCTime)
+eriOrderingTimestamp = lens _eriOrderingTimestamp (\ s a -> s{_eriOrderingTimestamp = a}) . mapping _Time;
+
+instance FromJSON EvaluationResultIdentifier where
+        parseJSON
+          = withObject "EvaluationResultIdentifier"
+              (\ x ->
+                 EvaluationResultIdentifier' <$>
+                   (x .:? "EvaluationResultQualifier") <*>
+                     (x .:? "OrderingTimestamp"))
+
+-- | Identifies an AWS Config rule that evaluated an AWS resource, and
+-- provides the type and ID of the resource that the rule evaluated.
+--
+-- /See:/ 'evaluationResultQualifier' smart constructor.
+data EvaluationResultQualifier = EvaluationResultQualifier'
+    { _erqResourceId     :: !(Maybe Text)
+    , _erqResourceType   :: !(Maybe Text)
+    , _erqConfigRuleName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EvaluationResultQualifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'erqResourceId'
+--
+-- * 'erqResourceType'
+--
+-- * 'erqConfigRuleName'
+evaluationResultQualifier
+    :: EvaluationResultQualifier
+evaluationResultQualifier =
+    EvaluationResultQualifier'
+    { _erqResourceId = Nothing
+    , _erqResourceType = Nothing
+    , _erqConfigRuleName = Nothing
+    }
+
+-- | The ID of the evaluated AWS resource.
+erqResourceId :: Lens' EvaluationResultQualifier (Maybe Text)
+erqResourceId = lens _erqResourceId (\ s a -> s{_erqResourceId = a});
+
+-- | The type of AWS resource that was evaluated.
+erqResourceType :: Lens' EvaluationResultQualifier (Maybe Text)
+erqResourceType = lens _erqResourceType (\ s a -> s{_erqResourceType = a});
+
+-- | The name of the AWS Config rule that was used in the evaluation.
+erqConfigRuleName :: Lens' EvaluationResultQualifier (Maybe Text)
+erqConfigRuleName = lens _erqConfigRuleName (\ s a -> s{_erqConfigRuleName = a});
+
+instance FromJSON EvaluationResultQualifier where
+        parseJSON
+          = withObject "EvaluationResultQualifier"
+              (\ x ->
+                 EvaluationResultQualifier' <$>
+                   (x .:? "ResourceId") <*> (x .:? "ResourceType") <*>
+                     (x .:? "ConfigRuleName"))
+
+-- | The group of AWS resource types that AWS Config records when starting
+-- the configuration recorder.
+--
+-- __recordingGroup__ can have one and only one parameter. Choose either
+-- __allSupported__ or __resourceTypes__.
+--
+-- /See:/ 'recordingGroup' smart constructor.
+data RecordingGroup = RecordingGroup'
+    { _rgAllSupported  :: !(Maybe Bool)
+    , _rgResourceTypes :: !(Maybe [ResourceType])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RecordingGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rgAllSupported'
+--
+-- * 'rgResourceTypes'
+recordingGroup
+    :: RecordingGroup
+recordingGroup =
+    RecordingGroup'
+    { _rgAllSupported = Nothing
+    , _rgResourceTypes = Nothing
+    }
+
+-- | Records all supported resource types in the recording group. For a list
+-- of supported resource types, see
+-- <http://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources Supported resource types>.
+-- If you specify __allSupported__, you cannot enumerate a list of
+-- __resourceTypes__.
+rgAllSupported :: Lens' RecordingGroup (Maybe Bool)
+rgAllSupported = lens _rgAllSupported (\ s a -> s{_rgAllSupported = a});
+
+-- | A comma-separated list of strings representing valid AWS resource types
+-- (for example, 'AWS::EC2::Instance' or 'AWS::CloudTrail::Trail').
+-- __resourceTypes__ is only valid if you have chosen not to select
+-- __allSupported__. For a list of valid __resourceTypes__ values, see the
+-- __resourceType Value__ column in the following topic:
+-- <http://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources Supported AWS Resource Types>.
+rgResourceTypes :: Lens' RecordingGroup [ResourceType]
+rgResourceTypes = lens _rgResourceTypes (\ s a -> s{_rgResourceTypes = a}) . _Default . _Coerce;
+
+instance FromJSON RecordingGroup where
+        parseJSON
+          = withObject "RecordingGroup"
+              (\ x ->
+                 RecordingGroup' <$>
+                   (x .:? "allSupported") <*>
+                     (x .:? "resourceTypes" .!= mempty))
+
+instance ToJSON RecordingGroup where
+        toJSON RecordingGroup'{..}
+          = object
+              (catMaybes
+                 [("allSupported" .=) <$> _rgAllSupported,
+                  ("resourceTypes" .=) <$> _rgResourceTypes])
+
+-- | The relationship of the related resource to the main resource.
+--
+-- /See:/ 'relationship' smart constructor.
+data Relationship = Relationship'
+    { _rResourceId       :: !(Maybe Text)
+    , _rResourceType     :: !(Maybe ResourceType)
+    , _rResourceName     :: !(Maybe Text)
+    , _rRelationshipName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Relationship' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rResourceId'
+--
+-- * 'rResourceType'
+--
+-- * 'rResourceName'
+--
+-- * 'rRelationshipName'
+relationship
+    :: Relationship
+relationship =
+    Relationship'
+    { _rResourceId = Nothing
+    , _rResourceType = Nothing
+    , _rResourceName = Nothing
+    , _rRelationshipName = Nothing
+    }
+
+-- | The ID of the related resource (for example, 'sg-xxxxxx').
+rResourceId :: Lens' Relationship (Maybe Text)
+rResourceId = lens _rResourceId (\ s a -> s{_rResourceId = a});
+
+-- | The resource type of the related resource.
+rResourceType :: Lens' Relationship (Maybe ResourceType)
+rResourceType = lens _rResourceType (\ s a -> s{_rResourceType = a});
+
+-- | The custom name of the related resource, if available.
+rResourceName :: Lens' Relationship (Maybe Text)
+rResourceName = lens _rResourceName (\ s a -> s{_rResourceName = a});
+
+-- | The type of relationship with the related resource.
+rRelationshipName :: Lens' Relationship (Maybe Text)
+rRelationshipName = lens _rRelationshipName (\ s a -> s{_rRelationshipName = a});
+
+instance FromJSON Relationship where
+        parseJSON
+          = withObject "Relationship"
+              (\ x ->
+                 Relationship' <$>
+                   (x .:? "resourceId") <*> (x .:? "resourceType") <*>
+                     (x .:? "resourceName")
+                     <*> (x .:? "relationshipName"))
+
+-- | The details that identify a resource that is discovered by AWS Config,
+-- including the resource type, ID, and (if available) the custom resource
+-- name.
+--
+-- /See:/ 'resourceIdentifier' smart constructor.
+data ResourceIdentifier = ResourceIdentifier'
+    { _riResourceId           :: !(Maybe Text)
+    , _riResourceType         :: !(Maybe ResourceType)
+    , _riResourceName         :: !(Maybe Text)
+    , _riResourceDeletionTime :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riResourceId'
+--
+-- * 'riResourceType'
+--
+-- * 'riResourceName'
+--
+-- * 'riResourceDeletionTime'
+resourceIdentifier
+    :: ResourceIdentifier
+resourceIdentifier =
+    ResourceIdentifier'
+    { _riResourceId = Nothing
+    , _riResourceType = Nothing
+    , _riResourceName = Nothing
+    , _riResourceDeletionTime = Nothing
+    }
+
+-- | The ID of the resource (for example., 'sg-xxxxxx').
+riResourceId :: Lens' ResourceIdentifier (Maybe Text)
+riResourceId = lens _riResourceId (\ s a -> s{_riResourceId = a});
+
+-- | The type of resource.
+riResourceType :: Lens' ResourceIdentifier (Maybe ResourceType)
+riResourceType = lens _riResourceType (\ s a -> s{_riResourceType = a});
+
+-- | The custom name of the resource (if available).
+riResourceName :: Lens' ResourceIdentifier (Maybe Text)
+riResourceName = lens _riResourceName (\ s a -> s{_riResourceName = a});
+
+-- | The time that the resource was deleted.
+riResourceDeletionTime :: Lens' ResourceIdentifier (Maybe UTCTime)
+riResourceDeletionTime = lens _riResourceDeletionTime (\ s a -> s{_riResourceDeletionTime = a}) . mapping _Time;
+
+instance FromJSON ResourceIdentifier where
+        parseJSON
+          = withObject "ResourceIdentifier"
+              (\ x ->
+                 ResourceIdentifier' <$>
+                   (x .:? "resourceId") <*> (x .:? "resourceType") <*>
+                     (x .:? "resourceName")
+                     <*> (x .:? "resourceDeletionTime"))
+
+-- | Defines which resources AWS Config evaluates against a rule. The scope
+-- can include one or more resource types, a combination of a tag key and
+-- value, or a combination of one resource type and one or more resource
+-- IDs. Specify a scope to constrain the resources to be evaluated. If you
+-- do not specify a scope, all resources in your recording group are
+-- evaluated against the rule.
+--
+-- /See:/ 'scope' smart constructor.
+data Scope = Scope'
+    { _sComplianceResourceTypes :: !(Maybe [Text])
+    , _sComplianceResourceId    :: !(Maybe Text)
+    , _sTagValue                :: !(Maybe Text)
+    , _sTagKey                  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Scope' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sComplianceResourceTypes'
+--
+-- * 'sComplianceResourceId'
+--
+-- * 'sTagValue'
+--
+-- * 'sTagKey'
+scope
+    :: Scope
+scope =
+    Scope'
+    { _sComplianceResourceTypes = Nothing
+    , _sComplianceResourceId = Nothing
+    , _sTagValue = Nothing
+    , _sTagKey = Nothing
+    }
+
+-- | The resource types of only those AWS resources that you want AWS Config
+-- to evaluate against the rule. You can specify only one type if you also
+-- specify resource IDs for 'ComplianceResourceId'.
+sComplianceResourceTypes :: Lens' Scope [Text]
+sComplianceResourceTypes = lens _sComplianceResourceTypes (\ s a -> s{_sComplianceResourceTypes = a}) . _Default . _Coerce;
+
+-- | The IDs of only those AWS resources that you want AWS Config to evaluate
+-- against the rule. If you specify a resource ID, you must specify one
+-- resource type for 'ComplianceResourceTypes'.
+sComplianceResourceId :: Lens' Scope (Maybe Text)
+sComplianceResourceId = lens _sComplianceResourceId (\ s a -> s{_sComplianceResourceId = a});
+
+-- | The tag value applied to only those AWS resources that you want AWS
+-- Config to evaluate against the rule. If you specify a value for
+-- 'TagValue', you must also specify a value for 'TagKey'.
+sTagValue :: Lens' Scope (Maybe Text)
+sTagValue = lens _sTagValue (\ s a -> s{_sTagValue = a});
+
+-- | The tag key that is applied to only those AWS resources that you want
+-- AWS Config to evaluate against the rule.
+sTagKey :: Lens' Scope (Maybe Text)
+sTagKey = lens _sTagKey (\ s a -> s{_sTagKey = a});
+
+instance FromJSON Scope where
+        parseJSON
+          = withObject "Scope"
+              (\ x ->
+                 Scope' <$>
+                   (x .:? "ComplianceResourceTypes" .!= mempty) <*>
+                     (x .:? "ComplianceResourceId")
+                     <*> (x .:? "TagValue")
+                     <*> (x .:? "TagKey"))
+
+instance ToJSON Scope where
+        toJSON Scope'{..}
+          = object
+              (catMaybes
+                 [("ComplianceResourceTypes" .=) <$>
+                    _sComplianceResourceTypes,
+                  ("ComplianceResourceId" .=) <$>
+                    _sComplianceResourceId,
+                  ("TagValue" .=) <$> _sTagValue,
+                  ("TagKey" .=) <$> _sTagKey])
+
+-- | Provides the AWS Config rule owner (AWS or customer), the rule
+-- identifier, and the events that trigger the evaluation of your AWS
+-- resources.
+--
+-- /See:/ 'source' smart constructor.
+data Source = Source'
+    { _sSourceIdentifier :: !(Maybe Text)
+    , _sOwner            :: !(Maybe Owner)
+    , _sSourceDetails    :: !(Maybe [SourceDetail])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Source' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSourceIdentifier'
+--
+-- * 'sOwner'
+--
+-- * 'sSourceDetails'
+source
+    :: Source
+source =
+    Source'
+    { _sSourceIdentifier = Nothing
+    , _sOwner = Nothing
+    , _sSourceDetails = Nothing
+    }
+
+-- | For AWS managed Config rules, a pre-defined identifier from a list. To
+-- reference the list, see
+-- <http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html Using AWS Managed Config Rules>.
+--
+-- For customer managed Config rules, the identifier is the Amazon Resource
+-- Name (ARN) of the rule\'s AWS Lambda function.
+sSourceIdentifier :: Lens' Source (Maybe Text)
+sSourceIdentifier = lens _sSourceIdentifier (\ s a -> s{_sSourceIdentifier = a});
+
+-- | Indicates whether AWS or the customer owns and manages the AWS Config
+-- rule.
+sOwner :: Lens' Source (Maybe Owner)
+sOwner = lens _sOwner (\ s a -> s{_sOwner = a});
+
+-- | Provides the source and type of the event that causes AWS Config to
+-- evaluate your AWS resources.
+sSourceDetails :: Lens' Source [SourceDetail]
+sSourceDetails = lens _sSourceDetails (\ s a -> s{_sSourceDetails = a}) . _Default . _Coerce;
+
+instance FromJSON Source where
+        parseJSON
+          = withObject "Source"
+              (\ x ->
+                 Source' <$>
+                   (x .:? "SourceIdentifier") <*> (x .:? "Owner") <*>
+                     (x .:? "SourceDetails" .!= mempty))
+
+instance ToJSON Source where
+        toJSON Source'{..}
+          = object
+              (catMaybes
+                 [("SourceIdentifier" .=) <$> _sSourceIdentifier,
+                  ("Owner" .=) <$> _sOwner,
+                  ("SourceDetails" .=) <$> _sSourceDetails])
+
+-- | Provides the source and type of the event that triggers AWS Config to
+-- evaluate your AWS resources against a rule.
+--
+-- /See:/ 'sourceDetail' smart constructor.
+data SourceDetail = SourceDetail'
+    { _sdMessageType :: !(Maybe MessageType)
+    , _sdEventSource :: !(Maybe EventSource)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdMessageType'
+--
+-- * 'sdEventSource'
+sourceDetail
+    :: SourceDetail
+sourceDetail =
+    SourceDetail'
+    { _sdMessageType = Nothing
+    , _sdEventSource = Nothing
+    }
+
+-- | The type of SNS message that triggers AWS Config to run an evaluation.
+-- For evaluations that are initiated when AWS Config delivers a
+-- configuration item change notification, you must use
+-- 'ConfigurationItemChangeNotification'. For evaluations that are
+-- initiated when AWS Config delivers a configuration snapshot, you must
+-- use 'ConfigurationSnapshotDeliveryCompleted'.
+sdMessageType :: Lens' SourceDetail (Maybe MessageType)
+sdMessageType = lens _sdMessageType (\ s a -> s{_sdMessageType = a});
+
+-- | The source of the event, such as an AWS service, that triggers AWS
+-- Config to evaluate your AWS resources.
+sdEventSource :: Lens' SourceDetail (Maybe EventSource)
+sdEventSource = lens _sdEventSource (\ s a -> s{_sdEventSource = a});
+
+instance FromJSON SourceDetail where
+        parseJSON
+          = withObject "SourceDetail"
+              (\ x ->
+                 SourceDetail' <$>
+                   (x .:? "MessageType") <*> (x .:? "EventSource"))
+
+instance ToJSON SourceDetail where
+        toJSON SourceDetail'{..}
+          = object
+              (catMaybes
+                 [("MessageType" .=) <$> _sdMessageType,
+                  ("EventSource" .=) <$> _sdEventSource])
diff --git a/gen/Network/AWS/Config/Types/Sum.hs b/gen/Network/AWS/Config/Types/Sum.hs
--- a/gen/Network/AWS/Config/Types/Sum.hs
+++ b/gen/Network/AWS/Config/Types/Sum.hs
@@ -44,6 +44,68 @@
 instance ToJSON ChronologicalOrder where
     toJSON = toJSONText
 
+data ComplianceType
+    = Compliant
+    | InsufficientData
+    | NonCompliant
+    | NotApplicable
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ComplianceType where
+    parser = takeLowerText >>= \case
+        "compliant" -> pure Compliant
+        "insufficient_data" -> pure InsufficientData
+        "non_compliant" -> pure NonCompliant
+        "not_applicable" -> pure NotApplicable
+        e -> fromTextError $ "Failure parsing ComplianceType from value: '" <> e
+           <> "'. Accepted values: COMPLIANT, INSUFFICIENT_DATA, NON_COMPLIANT, NOT_APPLICABLE"
+
+instance ToText ComplianceType where
+    toText = \case
+        Compliant -> "COMPLIANT"
+        InsufficientData -> "INSUFFICIENT_DATA"
+        NonCompliant -> "NON_COMPLIANT"
+        NotApplicable -> "NOT_APPLICABLE"
+
+instance Hashable     ComplianceType
+instance ToByteString ComplianceType
+instance ToQuery      ComplianceType
+instance ToHeader     ComplianceType
+
+instance ToJSON ComplianceType where
+    toJSON = toJSONText
+
+instance FromJSON ComplianceType where
+    parseJSON = parseJSONText "ComplianceType"
+
+data ConfigRuleState
+    = Active
+    | Deleting
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ConfigRuleState where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "deleting" -> pure Deleting
+        e -> fromTextError $ "Failure parsing ConfigRuleState from value: '" <> e
+           <> "'. Accepted values: ACTIVE, DELETING"
+
+instance ToText ConfigRuleState where
+    toText = \case
+        Active -> "ACTIVE"
+        Deleting -> "DELETING"
+
+instance Hashable     ConfigRuleState
+instance ToByteString ConfigRuleState
+instance ToQuery      ConfigRuleState
+instance ToHeader     ConfigRuleState
+
+instance ToJSON ConfigRuleState where
+    toJSON = toJSONText
+
+instance FromJSON ConfigRuleState where
+    parseJSON = parseJSONText "ConfigRuleState"
+
 data ConfigurationItemStatus
     = Deleted
     | Discovered
@@ -76,24 +138,24 @@
     parseJSON = parseJSONText "ConfigurationItemStatus"
 
 data DeliveryStatus
-    = Failure
-    | NotApplicable
-    | Success
+    = DSFailure
+    | DSNotApplicable
+    | DSSuccess
     deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
 
 instance FromText DeliveryStatus where
     parser = takeLowerText >>= \case
-        "failure" -> pure Failure
-        "not_applicable" -> pure NotApplicable
-        "success" -> pure Success
+        "failure" -> pure DSFailure
+        "not_applicable" -> pure DSNotApplicable
+        "success" -> pure DSSuccess
         e -> fromTextError $ "Failure parsing DeliveryStatus from value: '" <> e
            <> "'. Accepted values: Failure, Not_Applicable, Success"
 
 instance ToText DeliveryStatus where
     toText = \case
-        Failure -> "Failure"
-        NotApplicable -> "Not_Applicable"
-        Success -> "Success"
+        DSFailure -> "Failure"
+        DSNotApplicable -> "Not_Applicable"
+        DSSuccess -> "Success"
 
 instance Hashable     DeliveryStatus
 instance ToByteString DeliveryStatus
@@ -103,25 +165,143 @@
 instance FromJSON DeliveryStatus where
     parseJSON = parseJSONText "DeliveryStatus"
 
+data EventSource =
+    AWS_Config
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText EventSource where
+    parser = takeLowerText >>= \case
+        "aws.config" -> pure AWS_Config
+        e -> fromTextError $ "Failure parsing EventSource from value: '" <> e
+           <> "'. Accepted values: aws.config"
+
+instance ToText EventSource where
+    toText = \case
+        AWS_Config -> "aws.config"
+
+instance Hashable     EventSource
+instance ToByteString EventSource
+instance ToQuery      EventSource
+instance ToHeader     EventSource
+
+instance ToJSON EventSource where
+    toJSON = toJSONText
+
+instance FromJSON EventSource where
+    parseJSON = parseJSONText "EventSource"
+
+data MaximumExecutionFrequency
+    = OneHour
+    | SixHours
+    | ThreeHours
+    | TwelveHours
+    | TwentyFourHours
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText MaximumExecutionFrequency where
+    parser = takeLowerText >>= \case
+        "one_hour" -> pure OneHour
+        "six_hours" -> pure SixHours
+        "three_hours" -> pure ThreeHours
+        "twelve_hours" -> pure TwelveHours
+        "twentyfour_hours" -> pure TwentyFourHours
+        e -> fromTextError $ "Failure parsing MaximumExecutionFrequency from value: '" <> e
+           <> "'. Accepted values: One_Hour, Six_Hours, Three_Hours, Twelve_Hours, TwentyFour_Hours"
+
+instance ToText MaximumExecutionFrequency where
+    toText = \case
+        OneHour -> "One_Hour"
+        SixHours -> "Six_Hours"
+        ThreeHours -> "Three_Hours"
+        TwelveHours -> "Twelve_Hours"
+        TwentyFourHours -> "TwentyFour_Hours"
+
+instance Hashable     MaximumExecutionFrequency
+instance ToByteString MaximumExecutionFrequency
+instance ToQuery      MaximumExecutionFrequency
+instance ToHeader     MaximumExecutionFrequency
+
+instance ToJSON MaximumExecutionFrequency where
+    toJSON = toJSONText
+
+instance FromJSON MaximumExecutionFrequency where
+    parseJSON = parseJSONText "MaximumExecutionFrequency"
+
+data MessageType
+    = ConfigurationItemChangeNotification
+    | ConfigurationSnapshotDeliveryCompleted
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText MessageType where
+    parser = takeLowerText >>= \case
+        "configurationitemchangenotification" -> pure ConfigurationItemChangeNotification
+        "configurationsnapshotdeliverycompleted" -> pure ConfigurationSnapshotDeliveryCompleted
+        e -> fromTextError $ "Failure parsing MessageType from value: '" <> e
+           <> "'. Accepted values: ConfigurationItemChangeNotification, ConfigurationSnapshotDeliveryCompleted"
+
+instance ToText MessageType where
+    toText = \case
+        ConfigurationItemChangeNotification -> "ConfigurationItemChangeNotification"
+        ConfigurationSnapshotDeliveryCompleted -> "ConfigurationSnapshotDeliveryCompleted"
+
+instance Hashable     MessageType
+instance ToByteString MessageType
+instance ToQuery      MessageType
+instance ToHeader     MessageType
+
+instance ToJSON MessageType where
+    toJSON = toJSONText
+
+instance FromJSON MessageType where
+    parseJSON = parseJSONText "MessageType"
+
+data Owner
+    = AWS
+    | CustomLambda
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Owner where
+    parser = takeLowerText >>= \case
+        "aws" -> pure AWS
+        "custom_lambda" -> pure CustomLambda
+        e -> fromTextError $ "Failure parsing Owner from value: '" <> e
+           <> "'. Accepted values: AWS, CUSTOM_LAMBDA"
+
+instance ToText Owner where
+    toText = \case
+        AWS -> "AWS"
+        CustomLambda -> "CUSTOM_LAMBDA"
+
+instance Hashable     Owner
+instance ToByteString Owner
+instance ToQuery      Owner
+instance ToHeader     Owner
+
+instance ToJSON Owner where
+    toJSON = toJSONText
+
+instance FromJSON Owner where
+    parseJSON = parseJSONText "Owner"
+
 data RecorderStatus
-    = RSFailure
-    | RSPending
-    | RSSuccess
+    = Failure
+    | Pending
+    | Success
     deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
 
 instance FromText RecorderStatus where
     parser = takeLowerText >>= \case
-        "failure" -> pure RSFailure
-        "pending" -> pure RSPending
-        "success" -> pure RSSuccess
+        "failure" -> pure Failure
+        "pending" -> pure Pending
+        "success" -> pure Success
         e -> fromTextError $ "Failure parsing RecorderStatus from value: '" <> e
            <> "'. Accepted values: Failure, Pending, Success"
 
 instance ToText RecorderStatus where
     toText = \case
-        RSFailure -> "Failure"
-        RSPending -> "Pending"
-        RSSuccess -> "Success"
+        Failure -> "Failure"
+        Pending -> "Pending"
+        Success -> "Success"
 
 instance Hashable     RecorderStatus
 instance ToByteString RecorderStatus
diff --git a/test/Test/AWS/Gen/Config.hs b/test/Test/AWS/Gen/Config.hs
--- a/test/Test/AWS/Gen/Config.hs
+++ b/test/Test/AWS/Gen/Config.hs
@@ -31,30 +31,63 @@
 --         [ testGetResourceConfigHistory $
 --             getResourceConfigHistory
 --
+--         , testDescribeComplianceByConfigRule $
+--             describeComplianceByConfigRule
+--
 --         , testStopConfigurationRecorder $
 --             stopConfigurationRecorder
 --
+--         , testDescribeConfigRules $
+--             describeConfigRules
+--
+--         , testPutConfigRule $
+--             putConfigRule
+--
+--         , testDeleteConfigRule $
+--             deleteConfigRule
+--
+--         , testGetComplianceDetailsByResource $
+--             getComplianceDetailsByResource
+--
 --         , testDeliverConfigSnapshot $
 --             deliverConfigSnapshot
 --
+--         , testDescribeConfigRuleEvaluationStatus $
+--             describeConfigRuleEvaluationStatus
+--
+--         , testDescribeComplianceByResource $
+--             describeComplianceByResource
+--
+--         , testPutEvaluations $
+--             putEvaluations
+--
 --         , testDescribeConfigurationRecorders $
 --             describeConfigurationRecorders
 --
 --         , testStartConfigurationRecorder $
 --             startConfigurationRecorder
 --
+--         , testGetComplianceSummaryByConfigRule $
+--             getComplianceSummaryByConfigRule
+--
 --         , testDescribeConfigurationRecorderStatus $
 --             describeConfigurationRecorderStatus
 --
 --         , testPutConfigurationRecorder $
 --             putConfigurationRecorder
 --
+--         , testGetComplianceSummaryByResourceType $
+--             getComplianceSummaryByResourceType
+--
 --         , testDescribeDeliveryChannelStatus $
 --             describeDeliveryChannelStatus
 --
 --         , testPutDeliveryChannel $
 --             putDeliveryChannel
 --
+--         , testGetComplianceDetailsByConfigRule $
+--             getComplianceDetailsByConfigRule
+--
 --         , testDeleteDeliveryChannel $
 --             deleteDeliveryChannel
 --
@@ -70,30 +103,63 @@
 --         [ testGetResourceConfigHistoryResponse $
 --             getResourceConfigHistoryResponse
 --
+--         , testDescribeComplianceByConfigRuleResponse $
+--             describeComplianceByConfigRuleResponse
+--
 --         , testStopConfigurationRecorderResponse $
 --             stopConfigurationRecorderResponse
 --
+--         , testDescribeConfigRulesResponse $
+--             describeConfigRulesResponse
+--
+--         , testPutConfigRuleResponse $
+--             putConfigRuleResponse
+--
+--         , testDeleteConfigRuleResponse $
+--             deleteConfigRuleResponse
+--
+--         , testGetComplianceDetailsByResourceResponse $
+--             getComplianceDetailsByResourceResponse
+--
 --         , testDeliverConfigSnapshotResponse $
 --             deliverConfigSnapshotResponse
 --
+--         , testDescribeConfigRuleEvaluationStatusResponse $
+--             describeConfigRuleEvaluationStatusResponse
+--
+--         , testDescribeComplianceByResourceResponse $
+--             describeComplianceByResourceResponse
+--
+--         , testPutEvaluationsResponse $
+--             putEvaluationsResponse
+--
 --         , testDescribeConfigurationRecordersResponse $
 --             describeConfigurationRecordersResponse
 --
 --         , testStartConfigurationRecorderResponse $
 --             startConfigurationRecorderResponse
 --
+--         , testGetComplianceSummaryByConfigRuleResponse $
+--             getComplianceSummaryByConfigRuleResponse
+--
 --         , testDescribeConfigurationRecorderStatusResponse $
 --             describeConfigurationRecorderStatusResponse
 --
 --         , testPutConfigurationRecorderResponse $
 --             putConfigurationRecorderResponse
 --
+--         , testGetComplianceSummaryByResourceTypeResponse $
+--             getComplianceSummaryByResourceTypeResponse
+--
 --         , testDescribeDeliveryChannelStatusResponse $
 --             describeDeliveryChannelStatusResponse
 --
 --         , testPutDeliveryChannelResponse $
 --             putDeliveryChannelResponse
 --
+--         , testGetComplianceDetailsByConfigRuleResponse $
+--             getComplianceDetailsByConfigRuleResponse
+--
 --         , testDeleteDeliveryChannelResponse $
 --             deleteDeliveryChannelResponse
 --
@@ -113,16 +179,56 @@
     "GetResourceConfigHistory"
     "fixture/GetResourceConfigHistory.yaml"
 
+testDescribeComplianceByConfigRule :: DescribeComplianceByConfigRule -> TestTree
+testDescribeComplianceByConfigRule = req
+    "DescribeComplianceByConfigRule"
+    "fixture/DescribeComplianceByConfigRule.yaml"
+
 testStopConfigurationRecorder :: StopConfigurationRecorder -> TestTree
 testStopConfigurationRecorder = req
     "StopConfigurationRecorder"
     "fixture/StopConfigurationRecorder.yaml"
 
+testDescribeConfigRules :: DescribeConfigRules -> TestTree
+testDescribeConfigRules = req
+    "DescribeConfigRules"
+    "fixture/DescribeConfigRules.yaml"
+
+testPutConfigRule :: PutConfigRule -> TestTree
+testPutConfigRule = req
+    "PutConfigRule"
+    "fixture/PutConfigRule.yaml"
+
+testDeleteConfigRule :: DeleteConfigRule -> TestTree
+testDeleteConfigRule = req
+    "DeleteConfigRule"
+    "fixture/DeleteConfigRule.yaml"
+
+testGetComplianceDetailsByResource :: GetComplianceDetailsByResource -> TestTree
+testGetComplianceDetailsByResource = req
+    "GetComplianceDetailsByResource"
+    "fixture/GetComplianceDetailsByResource.yaml"
+
 testDeliverConfigSnapshot :: DeliverConfigSnapshot -> TestTree
 testDeliverConfigSnapshot = req
     "DeliverConfigSnapshot"
     "fixture/DeliverConfigSnapshot.yaml"
 
+testDescribeConfigRuleEvaluationStatus :: DescribeConfigRuleEvaluationStatus -> TestTree
+testDescribeConfigRuleEvaluationStatus = req
+    "DescribeConfigRuleEvaluationStatus"
+    "fixture/DescribeConfigRuleEvaluationStatus.yaml"
+
+testDescribeComplianceByResource :: DescribeComplianceByResource -> TestTree
+testDescribeComplianceByResource = req
+    "DescribeComplianceByResource"
+    "fixture/DescribeComplianceByResource.yaml"
+
+testPutEvaluations :: PutEvaluations -> TestTree
+testPutEvaluations = req
+    "PutEvaluations"
+    "fixture/PutEvaluations.yaml"
+
 testDescribeConfigurationRecorders :: DescribeConfigurationRecorders -> TestTree
 testDescribeConfigurationRecorders = req
     "DescribeConfigurationRecorders"
@@ -133,6 +239,11 @@
     "StartConfigurationRecorder"
     "fixture/StartConfigurationRecorder.yaml"
 
+testGetComplianceSummaryByConfigRule :: GetComplianceSummaryByConfigRule -> TestTree
+testGetComplianceSummaryByConfigRule = req
+    "GetComplianceSummaryByConfigRule"
+    "fixture/GetComplianceSummaryByConfigRule.yaml"
+
 testDescribeConfigurationRecorderStatus :: DescribeConfigurationRecorderStatus -> TestTree
 testDescribeConfigurationRecorderStatus = req
     "DescribeConfigurationRecorderStatus"
@@ -143,6 +254,11 @@
     "PutConfigurationRecorder"
     "fixture/PutConfigurationRecorder.yaml"
 
+testGetComplianceSummaryByResourceType :: GetComplianceSummaryByResourceType -> TestTree
+testGetComplianceSummaryByResourceType = req
+    "GetComplianceSummaryByResourceType"
+    "fixture/GetComplianceSummaryByResourceType.yaml"
+
 testDescribeDeliveryChannelStatus :: DescribeDeliveryChannelStatus -> TestTree
 testDescribeDeliveryChannelStatus = req
     "DescribeDeliveryChannelStatus"
@@ -153,6 +269,11 @@
     "PutDeliveryChannel"
     "fixture/PutDeliveryChannel.yaml"
 
+testGetComplianceDetailsByConfigRule :: GetComplianceDetailsByConfigRule -> TestTree
+testGetComplianceDetailsByConfigRule = req
+    "GetComplianceDetailsByConfigRule"
+    "fixture/GetComplianceDetailsByConfigRule.yaml"
+
 testDeleteDeliveryChannel :: DeleteDeliveryChannel -> TestTree
 testDeleteDeliveryChannel = req
     "DeleteDeliveryChannel"
@@ -177,6 +298,13 @@
     config
     (Proxy :: Proxy GetResourceConfigHistory)
 
+testDescribeComplianceByConfigRuleResponse :: DescribeComplianceByConfigRuleResponse -> TestTree
+testDescribeComplianceByConfigRuleResponse = res
+    "DescribeComplianceByConfigRuleResponse"
+    "fixture/DescribeComplianceByConfigRuleResponse.proto"
+    config
+    (Proxy :: Proxy DescribeComplianceByConfigRule)
+
 testStopConfigurationRecorderResponse :: StopConfigurationRecorderResponse -> TestTree
 testStopConfigurationRecorderResponse = res
     "StopConfigurationRecorderResponse"
@@ -184,6 +312,34 @@
     config
     (Proxy :: Proxy StopConfigurationRecorder)
 
+testDescribeConfigRulesResponse :: DescribeConfigRulesResponse -> TestTree
+testDescribeConfigRulesResponse = res
+    "DescribeConfigRulesResponse"
+    "fixture/DescribeConfigRulesResponse.proto"
+    config
+    (Proxy :: Proxy DescribeConfigRules)
+
+testPutConfigRuleResponse :: PutConfigRuleResponse -> TestTree
+testPutConfigRuleResponse = res
+    "PutConfigRuleResponse"
+    "fixture/PutConfigRuleResponse.proto"
+    config
+    (Proxy :: Proxy PutConfigRule)
+
+testDeleteConfigRuleResponse :: DeleteConfigRuleResponse -> TestTree
+testDeleteConfigRuleResponse = res
+    "DeleteConfigRuleResponse"
+    "fixture/DeleteConfigRuleResponse.proto"
+    config
+    (Proxy :: Proxy DeleteConfigRule)
+
+testGetComplianceDetailsByResourceResponse :: GetComplianceDetailsByResourceResponse -> TestTree
+testGetComplianceDetailsByResourceResponse = res
+    "GetComplianceDetailsByResourceResponse"
+    "fixture/GetComplianceDetailsByResourceResponse.proto"
+    config
+    (Proxy :: Proxy GetComplianceDetailsByResource)
+
 testDeliverConfigSnapshotResponse :: DeliverConfigSnapshotResponse -> TestTree
 testDeliverConfigSnapshotResponse = res
     "DeliverConfigSnapshotResponse"
@@ -191,6 +347,27 @@
     config
     (Proxy :: Proxy DeliverConfigSnapshot)
 
+testDescribeConfigRuleEvaluationStatusResponse :: DescribeConfigRuleEvaluationStatusResponse -> TestTree
+testDescribeConfigRuleEvaluationStatusResponse = res
+    "DescribeConfigRuleEvaluationStatusResponse"
+    "fixture/DescribeConfigRuleEvaluationStatusResponse.proto"
+    config
+    (Proxy :: Proxy DescribeConfigRuleEvaluationStatus)
+
+testDescribeComplianceByResourceResponse :: DescribeComplianceByResourceResponse -> TestTree
+testDescribeComplianceByResourceResponse = res
+    "DescribeComplianceByResourceResponse"
+    "fixture/DescribeComplianceByResourceResponse.proto"
+    config
+    (Proxy :: Proxy DescribeComplianceByResource)
+
+testPutEvaluationsResponse :: PutEvaluationsResponse -> TestTree
+testPutEvaluationsResponse = res
+    "PutEvaluationsResponse"
+    "fixture/PutEvaluationsResponse.proto"
+    config
+    (Proxy :: Proxy PutEvaluations)
+
 testDescribeConfigurationRecordersResponse :: DescribeConfigurationRecordersResponse -> TestTree
 testDescribeConfigurationRecordersResponse = res
     "DescribeConfigurationRecordersResponse"
@@ -205,6 +382,13 @@
     config
     (Proxy :: Proxy StartConfigurationRecorder)
 
+testGetComplianceSummaryByConfigRuleResponse :: GetComplianceSummaryByConfigRuleResponse -> TestTree
+testGetComplianceSummaryByConfigRuleResponse = res
+    "GetComplianceSummaryByConfigRuleResponse"
+    "fixture/GetComplianceSummaryByConfigRuleResponse.proto"
+    config
+    (Proxy :: Proxy GetComplianceSummaryByConfigRule)
+
 testDescribeConfigurationRecorderStatusResponse :: DescribeConfigurationRecorderStatusResponse -> TestTree
 testDescribeConfigurationRecorderStatusResponse = res
     "DescribeConfigurationRecorderStatusResponse"
@@ -219,6 +403,13 @@
     config
     (Proxy :: Proxy PutConfigurationRecorder)
 
+testGetComplianceSummaryByResourceTypeResponse :: GetComplianceSummaryByResourceTypeResponse -> TestTree
+testGetComplianceSummaryByResourceTypeResponse = res
+    "GetComplianceSummaryByResourceTypeResponse"
+    "fixture/GetComplianceSummaryByResourceTypeResponse.proto"
+    config
+    (Proxy :: Proxy GetComplianceSummaryByResourceType)
+
 testDescribeDeliveryChannelStatusResponse :: DescribeDeliveryChannelStatusResponse -> TestTree
 testDescribeDeliveryChannelStatusResponse = res
     "DescribeDeliveryChannelStatusResponse"
@@ -232,6 +423,13 @@
     "fixture/PutDeliveryChannelResponse.proto"
     config
     (Proxy :: Proxy PutDeliveryChannel)
+
+testGetComplianceDetailsByConfigRuleResponse :: GetComplianceDetailsByConfigRuleResponse -> TestTree
+testGetComplianceDetailsByConfigRuleResponse = res
+    "GetComplianceDetailsByConfigRuleResponse"
+    "fixture/GetComplianceDetailsByConfigRuleResponse.proto"
+    config
+    (Proxy :: Proxy GetComplianceDetailsByConfigRule)
 
 testDeleteDeliveryChannelResponse :: DeleteDeliveryChannelResponse -> TestTree
 testDeleteDeliveryChannelResponse = res
