diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2014-03-28@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 The provided lenses should be compatible with any of the major lens libraries
 [lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
-See [Network.AWS.CloudWatchLogs](http://hackage.haskell.org/package/amazonka-cloudwatch-logs/docs/Network-AWS-CloudWatchLogs.html)
+See [Amazonka.CloudWatchLogs](http://hackage.haskell.org/package/amazonka-cloudwatch-logs/docs/Amazonka-CloudWatchLogs.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-cloudwatch-logs.cabal b/amazonka-cloudwatch-logs.cabal
--- a/amazonka-cloudwatch-logs.cabal
+++ b/amazonka-cloudwatch-logs.cabal
@@ -1,118 +1,155 @@
-name:                  amazonka-cloudwatch-logs
-version:               1.6.1
-synopsis:              Amazon CloudWatch Logs SDK.
-homepage:              https://github.com/brendanhay/amazonka
-bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               MPL-2.0
-license-file:          LICENSE
-author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2018 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+cabal-version:      2.2
+name:               amazonka-cloudwatch-logs
+version:            2.0
+synopsis:           Amazon CloudWatch Logs SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
 description:
-    The types from this library are intended to be used with
-    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
-    mechanisms for specifying AuthN/AuthZ information, sending requests,
-    and receiving responses.
-    .
-    Lenses are used for constructing and manipulating types,
-    due to the depth of nesting of AWS types and transparency regarding
-    de/serialisation into more palatable Haskell values.
-    The provided lenses should be compatible with any of the major lens libraries
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.CloudWatchLogs" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2014-03-28@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.CloudWatchLogs.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.CloudWatchLogs" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
 
 source-repository head
-    type:              git
-    location:          git://github.com/brendanhay/amazonka.git
-    subdir:            amazonka-cloudwatch-logs
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-cloudwatch-logs
 
 library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
-
-    ghc-options:
-        -Wall
-        -fwarn-incomplete-uni-patterns
-        -fwarn-incomplete-record-updates
-        -funbox-strict-fields
-
-    exposed-modules:
-          Network.AWS.CloudWatchLogs
-        , Network.AWS.CloudWatchLogs.AssociateKMSKey
-        , Network.AWS.CloudWatchLogs.CancelExportTask
-        , Network.AWS.CloudWatchLogs.CreateExportTask
-        , Network.AWS.CloudWatchLogs.CreateLogGroup
-        , Network.AWS.CloudWatchLogs.CreateLogStream
-        , Network.AWS.CloudWatchLogs.DeleteDestination
-        , Network.AWS.CloudWatchLogs.DeleteLogGroup
-        , Network.AWS.CloudWatchLogs.DeleteLogStream
-        , Network.AWS.CloudWatchLogs.DeleteMetricFilter
-        , Network.AWS.CloudWatchLogs.DeleteResourcePolicy
-        , Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
-        , Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
-        , Network.AWS.CloudWatchLogs.DescribeDestinations
-        , Network.AWS.CloudWatchLogs.DescribeExportTasks
-        , Network.AWS.CloudWatchLogs.DescribeLogGroups
-        , Network.AWS.CloudWatchLogs.DescribeLogStreams
-        , Network.AWS.CloudWatchLogs.DescribeMetricFilters
-        , Network.AWS.CloudWatchLogs.DescribeResourcePolicies
-        , Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
-        , Network.AWS.CloudWatchLogs.DisassociateKMSKey
-        , Network.AWS.CloudWatchLogs.FilterLogEvents
-        , Network.AWS.CloudWatchLogs.GetLogEvents
-        , Network.AWS.CloudWatchLogs.ListTagsLogGroup
-        , Network.AWS.CloudWatchLogs.PutDestination
-        , Network.AWS.CloudWatchLogs.PutDestinationPolicy
-        , Network.AWS.CloudWatchLogs.PutLogEvents
-        , Network.AWS.CloudWatchLogs.PutMetricFilter
-        , Network.AWS.CloudWatchLogs.PutResourcePolicy
-        , Network.AWS.CloudWatchLogs.PutRetentionPolicy
-        , Network.AWS.CloudWatchLogs.PutSubscriptionFilter
-        , Network.AWS.CloudWatchLogs.TagLogGroup
-        , Network.AWS.CloudWatchLogs.TestMetricFilter
-        , Network.AWS.CloudWatchLogs.Types
-        , Network.AWS.CloudWatchLogs.UntagLogGroup
-        , Network.AWS.CloudWatchLogs.Waiters
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
 
-    other-modules:
-          Network.AWS.CloudWatchLogs.Types.Product
-        , Network.AWS.CloudWatchLogs.Types.Sum
+  exposed-modules:
+    Amazonka.CloudWatchLogs
+    Amazonka.CloudWatchLogs.AssociateKmsKey
+    Amazonka.CloudWatchLogs.CancelExportTask
+    Amazonka.CloudWatchLogs.CreateExportTask
+    Amazonka.CloudWatchLogs.CreateLogGroup
+    Amazonka.CloudWatchLogs.CreateLogStream
+    Amazonka.CloudWatchLogs.DeleteDataProtectionPolicy
+    Amazonka.CloudWatchLogs.DeleteDestination
+    Amazonka.CloudWatchLogs.DeleteLogGroup
+    Amazonka.CloudWatchLogs.DeleteLogStream
+    Amazonka.CloudWatchLogs.DeleteMetricFilter
+    Amazonka.CloudWatchLogs.DeleteQueryDefinition
+    Amazonka.CloudWatchLogs.DeleteResourcePolicy
+    Amazonka.CloudWatchLogs.DeleteRetentionPolicy
+    Amazonka.CloudWatchLogs.DeleteSubscriptionFilter
+    Amazonka.CloudWatchLogs.DescribeDestinations
+    Amazonka.CloudWatchLogs.DescribeExportTasks
+    Amazonka.CloudWatchLogs.DescribeLogGroups
+    Amazonka.CloudWatchLogs.DescribeLogStreams
+    Amazonka.CloudWatchLogs.DescribeMetricFilters
+    Amazonka.CloudWatchLogs.DescribeQueries
+    Amazonka.CloudWatchLogs.DescribeQueryDefinitions
+    Amazonka.CloudWatchLogs.DescribeResourcePolicies
+    Amazonka.CloudWatchLogs.DescribeSubscriptionFilters
+    Amazonka.CloudWatchLogs.DisassociateKmsKey
+    Amazonka.CloudWatchLogs.FilterLogEvents
+    Amazonka.CloudWatchLogs.GetDataProtectionPolicy
+    Amazonka.CloudWatchLogs.GetLogEvents
+    Amazonka.CloudWatchLogs.GetLogGroupFields
+    Amazonka.CloudWatchLogs.GetLogRecord
+    Amazonka.CloudWatchLogs.GetQueryResults
+    Amazonka.CloudWatchLogs.Lens
+    Amazonka.CloudWatchLogs.ListTagsForResource
+    Amazonka.CloudWatchLogs.PutDataProtectionPolicy
+    Amazonka.CloudWatchLogs.PutDestination
+    Amazonka.CloudWatchLogs.PutDestinationPolicy
+    Amazonka.CloudWatchLogs.PutLogEvents
+    Amazonka.CloudWatchLogs.PutMetricFilter
+    Amazonka.CloudWatchLogs.PutQueryDefinition
+    Amazonka.CloudWatchLogs.PutResourcePolicy
+    Amazonka.CloudWatchLogs.PutRetentionPolicy
+    Amazonka.CloudWatchLogs.PutSubscriptionFilter
+    Amazonka.CloudWatchLogs.StartQuery
+    Amazonka.CloudWatchLogs.StopQuery
+    Amazonka.CloudWatchLogs.TagResource
+    Amazonka.CloudWatchLogs.TestMetricFilter
+    Amazonka.CloudWatchLogs.Types
+    Amazonka.CloudWatchLogs.Types.DataProtectionStatus
+    Amazonka.CloudWatchLogs.Types.Destination
+    Amazonka.CloudWatchLogs.Types.Distribution
+    Amazonka.CloudWatchLogs.Types.ExportTask
+    Amazonka.CloudWatchLogs.Types.ExportTaskExecutionInfo
+    Amazonka.CloudWatchLogs.Types.ExportTaskStatus
+    Amazonka.CloudWatchLogs.Types.ExportTaskStatusCode
+    Amazonka.CloudWatchLogs.Types.FilteredLogEvent
+    Amazonka.CloudWatchLogs.Types.InputLogEvent
+    Amazonka.CloudWatchLogs.Types.LogGroup
+    Amazonka.CloudWatchLogs.Types.LogGroupField
+    Amazonka.CloudWatchLogs.Types.LogStream
+    Amazonka.CloudWatchLogs.Types.MetricFilter
+    Amazonka.CloudWatchLogs.Types.MetricFilterMatchRecord
+    Amazonka.CloudWatchLogs.Types.MetricTransformation
+    Amazonka.CloudWatchLogs.Types.OrderBy
+    Amazonka.CloudWatchLogs.Types.OutputLogEvent
+    Amazonka.CloudWatchLogs.Types.QueryDefinition
+    Amazonka.CloudWatchLogs.Types.QueryInfo
+    Amazonka.CloudWatchLogs.Types.QueryStatistics
+    Amazonka.CloudWatchLogs.Types.QueryStatus
+    Amazonka.CloudWatchLogs.Types.RejectedLogEventsInfo
+    Amazonka.CloudWatchLogs.Types.ResourcePolicy
+    Amazonka.CloudWatchLogs.Types.ResultField
+    Amazonka.CloudWatchLogs.Types.SearchedLogStream
+    Amazonka.CloudWatchLogs.Types.StandardUnit
+    Amazonka.CloudWatchLogs.Types.SubscriptionFilter
+    Amazonka.CloudWatchLogs.UntagResource
+    Amazonka.CloudWatchLogs.Waiters
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , base          >= 4.7     && < 5
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
 
 test-suite amazonka-cloudwatch-logs-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
 
-    -- This section is encoded by the template and any modules added by
-    -- hand outside these namespaces will not correctly be added to the
-    -- distribution package.
-    other-modules:
-          Test.AWS.CloudWatchLogs
-        , Test.AWS.Gen.CloudWatchLogs
-        , Test.AWS.CloudWatchLogs.Internal
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.CloudWatchLogs
+    Test.Amazonka.CloudWatchLogs.Internal
+    Test.Amazonka.Gen.CloudWatchLogs
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-cloudwatch-logs
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-cloudwatch-logs
+    , amazonka-core             >=2.0 && <2.1
+    , amazonka-test             >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateKMSKey.yaml b/fixture/AssociateKMSKey.yaml
deleted file mode 100644
--- a/fixture/AssociateKMSKey.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  logs.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/AssociateKMSKeyResponse.proto b/fixture/AssociateKMSKeyResponse.proto
deleted file mode 100644
--- a/fixture/AssociateKMSKeyResponse.proto
+++ /dev/null
diff --git a/fixture/AssociateKmsKey.yaml b/fixture/AssociateKmsKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateKmsKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateKmsKeyResponse.proto b/fixture/AssociateKmsKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateKmsKeyResponse.proto
diff --git a/fixture/CancelExportTask.yaml b/fixture/CancelExportTask.yaml
--- a/fixture/CancelExportTask.yaml
+++ b/fixture/CancelExportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateExportTask.yaml b/fixture/CreateExportTask.yaml
--- a/fixture/CreateExportTask.yaml
+++ b/fixture/CreateExportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLogGroup.yaml b/fixture/CreateLogGroup.yaml
--- a/fixture/CreateLogGroup.yaml
+++ b/fixture/CreateLogGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLogStream.yaml b/fixture/CreateLogStream.yaml
--- a/fixture/CreateLogStream.yaml
+++ b/fixture/CreateLogStream.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDataProtectionPolicy.yaml b/fixture/DeleteDataProtectionPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataProtectionPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDataProtectionPolicyResponse.proto b/fixture/DeleteDataProtectionPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataProtectionPolicyResponse.proto
diff --git a/fixture/DeleteDestination.yaml b/fixture/DeleteDestination.yaml
--- a/fixture/DeleteDestination.yaml
+++ b/fixture/DeleteDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLogGroup.yaml b/fixture/DeleteLogGroup.yaml
--- a/fixture/DeleteLogGroup.yaml
+++ b/fixture/DeleteLogGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLogStream.yaml b/fixture/DeleteLogStream.yaml
--- a/fixture/DeleteLogStream.yaml
+++ b/fixture/DeleteLogStream.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteMetricFilter.yaml b/fixture/DeleteMetricFilter.yaml
--- a/fixture/DeleteMetricFilter.yaml
+++ b/fixture/DeleteMetricFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteQueryDefinition.yaml b/fixture/DeleteQueryDefinition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQueryDefinition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteQueryDefinitionResponse.proto b/fixture/DeleteQueryDefinitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQueryDefinitionResponse.proto
diff --git a/fixture/DeleteRetentionPolicy.yaml b/fixture/DeleteRetentionPolicy.yaml
--- a/fixture/DeleteRetentionPolicy.yaml
+++ b/fixture/DeleteRetentionPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSubscriptionFilter.yaml b/fixture/DeleteSubscriptionFilter.yaml
--- a/fixture/DeleteSubscriptionFilter.yaml
+++ b/fixture/DeleteSubscriptionFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDestinations.yaml b/fixture/DescribeDestinations.yaml
--- a/fixture/DescribeDestinations.yaml
+++ b/fixture/DescribeDestinations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeExportTasks.yaml b/fixture/DescribeExportTasks.yaml
--- a/fixture/DescribeExportTasks.yaml
+++ b/fixture/DescribeExportTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLogGroups.yaml b/fixture/DescribeLogGroups.yaml
--- a/fixture/DescribeLogGroups.yaml
+++ b/fixture/DescribeLogGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLogStreams.yaml b/fixture/DescribeLogStreams.yaml
--- a/fixture/DescribeLogStreams.yaml
+++ b/fixture/DescribeLogStreams.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeMetricFilters.yaml b/fixture/DescribeMetricFilters.yaml
--- a/fixture/DescribeMetricFilters.yaml
+++ b/fixture/DescribeMetricFilters.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeQueries.yaml b/fixture/DescribeQueries.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQueries.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeQueriesResponse.proto b/fixture/DescribeQueriesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQueriesResponse.proto
diff --git a/fixture/DescribeQueryDefinitions.yaml b/fixture/DescribeQueryDefinitions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQueryDefinitions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeQueryDefinitionsResponse.proto b/fixture/DescribeQueryDefinitionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQueryDefinitionsResponse.proto
diff --git a/fixture/DescribeSubscriptionFilters.yaml b/fixture/DescribeSubscriptionFilters.yaml
--- a/fixture/DescribeSubscriptionFilters.yaml
+++ b/fixture/DescribeSubscriptionFilters.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateKMSKey.yaml b/fixture/DisassociateKMSKey.yaml
deleted file mode 100644
--- a/fixture/DisassociateKMSKey.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  logs.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/DisassociateKMSKeyResponse.proto b/fixture/DisassociateKMSKeyResponse.proto
deleted file mode 100644
--- a/fixture/DisassociateKMSKeyResponse.proto
+++ /dev/null
diff --git a/fixture/DisassociateKmsKey.yaml b/fixture/DisassociateKmsKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateKmsKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateKmsKeyResponse.proto b/fixture/DisassociateKmsKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateKmsKeyResponse.proto
diff --git a/fixture/FilterLogEvents.yaml b/fixture/FilterLogEvents.yaml
--- a/fixture/FilterLogEvents.yaml
+++ b/fixture/FilterLogEvents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDataProtectionPolicy.yaml b/fixture/GetDataProtectionPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataProtectionPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDataProtectionPolicyResponse.proto b/fixture/GetDataProtectionPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataProtectionPolicyResponse.proto
diff --git a/fixture/GetLogEvents.yaml b/fixture/GetLogEvents.yaml
--- a/fixture/GetLogEvents.yaml
+++ b/fixture/GetLogEvents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetLogGroupFields.yaml b/fixture/GetLogGroupFields.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLogGroupFields.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetLogGroupFieldsResponse.proto b/fixture/GetLogGroupFieldsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLogGroupFieldsResponse.proto
diff --git a/fixture/GetLogRecord.yaml b/fixture/GetLogRecord.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLogRecord.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetLogRecordResponse.proto b/fixture/GetLogRecordResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLogRecordResponse.proto
diff --git a/fixture/GetQueryResults.yaml b/fixture/GetQueryResults.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetQueryResults.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetQueryResultsResponse.proto b/fixture/GetQueryResultsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetQueryResultsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/PutDataProtectionPolicy.yaml b/fixture/PutDataProtectionPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDataProtectionPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutDataProtectionPolicyResponse.proto b/fixture/PutDataProtectionPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDataProtectionPolicyResponse.proto
diff --git a/fixture/PutDestination.yaml b/fixture/PutDestination.yaml
--- a/fixture/PutDestination.yaml
+++ b/fixture/PutDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutDestinationPolicy.yaml b/fixture/PutDestinationPolicy.yaml
--- a/fixture/PutDestinationPolicy.yaml
+++ b/fixture/PutDestinationPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutLogEvents.yaml b/fixture/PutLogEvents.yaml
--- a/fixture/PutLogEvents.yaml
+++ b/fixture/PutLogEvents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutMetricFilter.yaml b/fixture/PutMetricFilter.yaml
--- a/fixture/PutMetricFilter.yaml
+++ b/fixture/PutMetricFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutQueryDefinition.yaml b/fixture/PutQueryDefinition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutQueryDefinition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutQueryDefinitionResponse.proto b/fixture/PutQueryDefinitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutQueryDefinitionResponse.proto
diff --git a/fixture/PutRetentionPolicy.yaml b/fixture/PutRetentionPolicy.yaml
--- a/fixture/PutRetentionPolicy.yaml
+++ b/fixture/PutRetentionPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutSubscriptionFilter.yaml b/fixture/PutSubscriptionFilter.yaml
--- a/fixture/PutSubscriptionFilter.yaml
+++ b/fixture/PutSubscriptionFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartQuery.yaml b/fixture/StartQuery.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartQuery.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartQueryResponse.proto b/fixture/StartQueryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartQueryResponse.proto
diff --git a/fixture/StopQuery.yaml b/fixture/StopQuery.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopQuery.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopQueryResponse.proto b/fixture/StopQueryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopQueryResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/TestMetricFilter.yaml b/fixture/TestMetricFilter.yaml
--- a/fixture/TestMetricFilter.yaml
+++ b/fixture/TestMetricFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/logs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  logs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/gen/Amazonka/CloudWatchLogs.hs b/gen/Amazonka/CloudWatchLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs.hs
@@ -0,0 +1,548 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2014-03-28@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- You can use Amazon CloudWatch Logs to monitor, store, and access your
+-- log files from EC2 instances, CloudTrail, and other sources. You can
+-- then retrieve the associated log data from CloudWatch Logs using the
+-- CloudWatch console. Alternatively, you can use CloudWatch Logs commands
+-- in the Amazon Web Services CLI, CloudWatch Logs API, or CloudWatch Logs
+-- SDK.
+--
+-- You can use CloudWatch Logs to:
+--
+-- -   __Monitor logs from EC2 instances in real time__: You can use
+--     CloudWatch Logs to monitor applications and systems using log data.
+--     For example, CloudWatch Logs can track the number of errors that
+--     occur in your application logs. Then, it can send you a notification
+--     whenever the rate of errors exceeds a threshold that you specify.
+--     CloudWatch Logs uses your log data for monitoring so no code changes
+--     are required. For example, you can monitor application logs for
+--     specific literal terms (such as \"NullReferenceException\"). You can
+--     also count the number of occurrences of a literal term at a
+--     particular position in log data (such as \"404\" status codes in an
+--     Apache access log). When the term you are searching for is found,
+--     CloudWatch Logs reports the data to a CloudWatch metric that you
+--     specify.
+--
+-- -   __Monitor CloudTrail logged events__: You can create alarms in
+--     CloudWatch and receive notifications of particular API activity as
+--     captured by CloudTrail. You can use the notification to perform
+--     troubleshooting.
+--
+-- -   __Archive log data__: You can use CloudWatch Logs to store your log
+--     data in highly durable storage. You can change the log retention
+--     setting so that any log events earlier than this setting are
+--     automatically deleted. The CloudWatch Logs agent helps to quickly
+--     send both rotated and non-rotated log data off of a host and into
+--     the log service. You can then access the raw log data when you need
+--     it.
+module Amazonka.CloudWatchLogs
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** DataAlreadyAcceptedException
+    _DataAlreadyAcceptedException,
+
+    -- ** InvalidOperationException
+    _InvalidOperationException,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** InvalidSequenceTokenException
+    _InvalidSequenceTokenException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** MalformedQueryException
+    _MalformedQueryException,
+
+    -- ** OperationAbortedException
+    _OperationAbortedException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TooManyTagsException
+    _TooManyTagsException,
+
+    -- ** UnrecognizedClientException
+    _UnrecognizedClientException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateKmsKey
+    AssociateKmsKey (AssociateKmsKey'),
+    newAssociateKmsKey,
+    AssociateKmsKeyResponse (AssociateKmsKeyResponse'),
+    newAssociateKmsKeyResponse,
+
+    -- ** CancelExportTask
+    CancelExportTask (CancelExportTask'),
+    newCancelExportTask,
+    CancelExportTaskResponse (CancelExportTaskResponse'),
+    newCancelExportTaskResponse,
+
+    -- ** CreateExportTask
+    CreateExportTask (CreateExportTask'),
+    newCreateExportTask,
+    CreateExportTaskResponse (CreateExportTaskResponse'),
+    newCreateExportTaskResponse,
+
+    -- ** CreateLogGroup
+    CreateLogGroup (CreateLogGroup'),
+    newCreateLogGroup,
+    CreateLogGroupResponse (CreateLogGroupResponse'),
+    newCreateLogGroupResponse,
+
+    -- ** CreateLogStream
+    CreateLogStream (CreateLogStream'),
+    newCreateLogStream,
+    CreateLogStreamResponse (CreateLogStreamResponse'),
+    newCreateLogStreamResponse,
+
+    -- ** DeleteDataProtectionPolicy
+    DeleteDataProtectionPolicy (DeleteDataProtectionPolicy'),
+    newDeleteDataProtectionPolicy,
+    DeleteDataProtectionPolicyResponse (DeleteDataProtectionPolicyResponse'),
+    newDeleteDataProtectionPolicyResponse,
+
+    -- ** DeleteDestination
+    DeleteDestination (DeleteDestination'),
+    newDeleteDestination,
+    DeleteDestinationResponse (DeleteDestinationResponse'),
+    newDeleteDestinationResponse,
+
+    -- ** DeleteLogGroup
+    DeleteLogGroup (DeleteLogGroup'),
+    newDeleteLogGroup,
+    DeleteLogGroupResponse (DeleteLogGroupResponse'),
+    newDeleteLogGroupResponse,
+
+    -- ** DeleteLogStream
+    DeleteLogStream (DeleteLogStream'),
+    newDeleteLogStream,
+    DeleteLogStreamResponse (DeleteLogStreamResponse'),
+    newDeleteLogStreamResponse,
+
+    -- ** DeleteMetricFilter
+    DeleteMetricFilter (DeleteMetricFilter'),
+    newDeleteMetricFilter,
+    DeleteMetricFilterResponse (DeleteMetricFilterResponse'),
+    newDeleteMetricFilterResponse,
+
+    -- ** DeleteQueryDefinition
+    DeleteQueryDefinition (DeleteQueryDefinition'),
+    newDeleteQueryDefinition,
+    DeleteQueryDefinitionResponse (DeleteQueryDefinitionResponse'),
+    newDeleteQueryDefinitionResponse,
+
+    -- ** DeleteResourcePolicy
+    DeleteResourcePolicy (DeleteResourcePolicy'),
+    newDeleteResourcePolicy,
+    DeleteResourcePolicyResponse (DeleteResourcePolicyResponse'),
+    newDeleteResourcePolicyResponse,
+
+    -- ** DeleteRetentionPolicy
+    DeleteRetentionPolicy (DeleteRetentionPolicy'),
+    newDeleteRetentionPolicy,
+    DeleteRetentionPolicyResponse (DeleteRetentionPolicyResponse'),
+    newDeleteRetentionPolicyResponse,
+
+    -- ** DeleteSubscriptionFilter
+    DeleteSubscriptionFilter (DeleteSubscriptionFilter'),
+    newDeleteSubscriptionFilter,
+    DeleteSubscriptionFilterResponse (DeleteSubscriptionFilterResponse'),
+    newDeleteSubscriptionFilterResponse,
+
+    -- ** DescribeDestinations (Paginated)
+    DescribeDestinations (DescribeDestinations'),
+    newDescribeDestinations,
+    DescribeDestinationsResponse (DescribeDestinationsResponse'),
+    newDescribeDestinationsResponse,
+
+    -- ** DescribeExportTasks (Paginated)
+    DescribeExportTasks (DescribeExportTasks'),
+    newDescribeExportTasks,
+    DescribeExportTasksResponse (DescribeExportTasksResponse'),
+    newDescribeExportTasksResponse,
+
+    -- ** DescribeLogGroups (Paginated)
+    DescribeLogGroups (DescribeLogGroups'),
+    newDescribeLogGroups,
+    DescribeLogGroupsResponse (DescribeLogGroupsResponse'),
+    newDescribeLogGroupsResponse,
+
+    -- ** DescribeLogStreams (Paginated)
+    DescribeLogStreams (DescribeLogStreams'),
+    newDescribeLogStreams,
+    DescribeLogStreamsResponse (DescribeLogStreamsResponse'),
+    newDescribeLogStreamsResponse,
+
+    -- ** DescribeMetricFilters (Paginated)
+    DescribeMetricFilters (DescribeMetricFilters'),
+    newDescribeMetricFilters,
+    DescribeMetricFiltersResponse (DescribeMetricFiltersResponse'),
+    newDescribeMetricFiltersResponse,
+
+    -- ** DescribeQueries (Paginated)
+    DescribeQueries (DescribeQueries'),
+    newDescribeQueries,
+    DescribeQueriesResponse (DescribeQueriesResponse'),
+    newDescribeQueriesResponse,
+
+    -- ** DescribeQueryDefinitions
+    DescribeQueryDefinitions (DescribeQueryDefinitions'),
+    newDescribeQueryDefinitions,
+    DescribeQueryDefinitionsResponse (DescribeQueryDefinitionsResponse'),
+    newDescribeQueryDefinitionsResponse,
+
+    -- ** DescribeResourcePolicies (Paginated)
+    DescribeResourcePolicies (DescribeResourcePolicies'),
+    newDescribeResourcePolicies,
+    DescribeResourcePoliciesResponse (DescribeResourcePoliciesResponse'),
+    newDescribeResourcePoliciesResponse,
+
+    -- ** DescribeSubscriptionFilters (Paginated)
+    DescribeSubscriptionFilters (DescribeSubscriptionFilters'),
+    newDescribeSubscriptionFilters,
+    DescribeSubscriptionFiltersResponse (DescribeSubscriptionFiltersResponse'),
+    newDescribeSubscriptionFiltersResponse,
+
+    -- ** DisassociateKmsKey
+    DisassociateKmsKey (DisassociateKmsKey'),
+    newDisassociateKmsKey,
+    DisassociateKmsKeyResponse (DisassociateKmsKeyResponse'),
+    newDisassociateKmsKeyResponse,
+
+    -- ** FilterLogEvents (Paginated)
+    FilterLogEvents (FilterLogEvents'),
+    newFilterLogEvents,
+    FilterLogEventsResponse (FilterLogEventsResponse'),
+    newFilterLogEventsResponse,
+
+    -- ** GetDataProtectionPolicy
+    GetDataProtectionPolicy (GetDataProtectionPolicy'),
+    newGetDataProtectionPolicy,
+    GetDataProtectionPolicyResponse (GetDataProtectionPolicyResponse'),
+    newGetDataProtectionPolicyResponse,
+
+    -- ** GetLogEvents
+    GetLogEvents (GetLogEvents'),
+    newGetLogEvents,
+    GetLogEventsResponse (GetLogEventsResponse'),
+    newGetLogEventsResponse,
+
+    -- ** GetLogGroupFields
+    GetLogGroupFields (GetLogGroupFields'),
+    newGetLogGroupFields,
+    GetLogGroupFieldsResponse (GetLogGroupFieldsResponse'),
+    newGetLogGroupFieldsResponse,
+
+    -- ** GetLogRecord
+    GetLogRecord (GetLogRecord'),
+    newGetLogRecord,
+    GetLogRecordResponse (GetLogRecordResponse'),
+    newGetLogRecordResponse,
+
+    -- ** GetQueryResults
+    GetQueryResults (GetQueryResults'),
+    newGetQueryResults,
+    GetQueryResultsResponse (GetQueryResultsResponse'),
+    newGetQueryResultsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutDataProtectionPolicy
+    PutDataProtectionPolicy (PutDataProtectionPolicy'),
+    newPutDataProtectionPolicy,
+    PutDataProtectionPolicyResponse (PutDataProtectionPolicyResponse'),
+    newPutDataProtectionPolicyResponse,
+
+    -- ** PutDestination
+    PutDestination (PutDestination'),
+    newPutDestination,
+    PutDestinationResponse (PutDestinationResponse'),
+    newPutDestinationResponse,
+
+    -- ** PutDestinationPolicy
+    PutDestinationPolicy (PutDestinationPolicy'),
+    newPutDestinationPolicy,
+    PutDestinationPolicyResponse (PutDestinationPolicyResponse'),
+    newPutDestinationPolicyResponse,
+
+    -- ** PutLogEvents
+    PutLogEvents (PutLogEvents'),
+    newPutLogEvents,
+    PutLogEventsResponse (PutLogEventsResponse'),
+    newPutLogEventsResponse,
+
+    -- ** PutMetricFilter
+    PutMetricFilter (PutMetricFilter'),
+    newPutMetricFilter,
+    PutMetricFilterResponse (PutMetricFilterResponse'),
+    newPutMetricFilterResponse,
+
+    -- ** PutQueryDefinition
+    PutQueryDefinition (PutQueryDefinition'),
+    newPutQueryDefinition,
+    PutQueryDefinitionResponse (PutQueryDefinitionResponse'),
+    newPutQueryDefinitionResponse,
+
+    -- ** PutResourcePolicy
+    PutResourcePolicy (PutResourcePolicy'),
+    newPutResourcePolicy,
+    PutResourcePolicyResponse (PutResourcePolicyResponse'),
+    newPutResourcePolicyResponse,
+
+    -- ** PutRetentionPolicy
+    PutRetentionPolicy (PutRetentionPolicy'),
+    newPutRetentionPolicy,
+    PutRetentionPolicyResponse (PutRetentionPolicyResponse'),
+    newPutRetentionPolicyResponse,
+
+    -- ** PutSubscriptionFilter
+    PutSubscriptionFilter (PutSubscriptionFilter'),
+    newPutSubscriptionFilter,
+    PutSubscriptionFilterResponse (PutSubscriptionFilterResponse'),
+    newPutSubscriptionFilterResponse,
+
+    -- ** StartQuery
+    StartQuery (StartQuery'),
+    newStartQuery,
+    StartQueryResponse (StartQueryResponse'),
+    newStartQueryResponse,
+
+    -- ** StopQuery
+    StopQuery (StopQuery'),
+    newStopQuery,
+    StopQueryResponse (StopQueryResponse'),
+    newStopQueryResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** TestMetricFilter
+    TestMetricFilter (TestMetricFilter'),
+    newTestMetricFilter,
+    TestMetricFilterResponse (TestMetricFilterResponse'),
+    newTestMetricFilterResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- * Types
+
+    -- ** DataProtectionStatus
+    DataProtectionStatus (..),
+
+    -- ** Distribution
+    Distribution (..),
+
+    -- ** ExportTaskStatusCode
+    ExportTaskStatusCode (..),
+
+    -- ** OrderBy
+    OrderBy (..),
+
+    -- ** QueryStatus
+    QueryStatus (..),
+
+    -- ** StandardUnit
+    StandardUnit (..),
+
+    -- ** Destination
+    Destination (Destination'),
+    newDestination,
+
+    -- ** ExportTask
+    ExportTask (ExportTask'),
+    newExportTask,
+
+    -- ** ExportTaskExecutionInfo
+    ExportTaskExecutionInfo (ExportTaskExecutionInfo'),
+    newExportTaskExecutionInfo,
+
+    -- ** ExportTaskStatus
+    ExportTaskStatus (ExportTaskStatus'),
+    newExportTaskStatus,
+
+    -- ** FilteredLogEvent
+    FilteredLogEvent (FilteredLogEvent'),
+    newFilteredLogEvent,
+
+    -- ** InputLogEvent
+    InputLogEvent (InputLogEvent'),
+    newInputLogEvent,
+
+    -- ** LogGroup
+    LogGroup (LogGroup'),
+    newLogGroup,
+
+    -- ** LogGroupField
+    LogGroupField (LogGroupField'),
+    newLogGroupField,
+
+    -- ** LogStream
+    LogStream (LogStream'),
+    newLogStream,
+
+    -- ** MetricFilter
+    MetricFilter (MetricFilter'),
+    newMetricFilter,
+
+    -- ** MetricFilterMatchRecord
+    MetricFilterMatchRecord (MetricFilterMatchRecord'),
+    newMetricFilterMatchRecord,
+
+    -- ** MetricTransformation
+    MetricTransformation (MetricTransformation'),
+    newMetricTransformation,
+
+    -- ** OutputLogEvent
+    OutputLogEvent (OutputLogEvent'),
+    newOutputLogEvent,
+
+    -- ** QueryDefinition
+    QueryDefinition (QueryDefinition'),
+    newQueryDefinition,
+
+    -- ** QueryInfo
+    QueryInfo (QueryInfo'),
+    newQueryInfo,
+
+    -- ** QueryStatistics
+    QueryStatistics (QueryStatistics'),
+    newQueryStatistics,
+
+    -- ** RejectedLogEventsInfo
+    RejectedLogEventsInfo (RejectedLogEventsInfo'),
+    newRejectedLogEventsInfo,
+
+    -- ** ResourcePolicy
+    ResourcePolicy (ResourcePolicy'),
+    newResourcePolicy,
+
+    -- ** ResultField
+    ResultField (ResultField'),
+    newResultField,
+
+    -- ** SearchedLogStream
+    SearchedLogStream (SearchedLogStream'),
+    newSearchedLogStream,
+
+    -- ** SubscriptionFilter
+    SubscriptionFilter (SubscriptionFilter'),
+    newSubscriptionFilter,
+  )
+where
+
+import Amazonka.CloudWatchLogs.AssociateKmsKey
+import Amazonka.CloudWatchLogs.CancelExportTask
+import Amazonka.CloudWatchLogs.CreateExportTask
+import Amazonka.CloudWatchLogs.CreateLogGroup
+import Amazonka.CloudWatchLogs.CreateLogStream
+import Amazonka.CloudWatchLogs.DeleteDataProtectionPolicy
+import Amazonka.CloudWatchLogs.DeleteDestination
+import Amazonka.CloudWatchLogs.DeleteLogGroup
+import Amazonka.CloudWatchLogs.DeleteLogStream
+import Amazonka.CloudWatchLogs.DeleteMetricFilter
+import Amazonka.CloudWatchLogs.DeleteQueryDefinition
+import Amazonka.CloudWatchLogs.DeleteResourcePolicy
+import Amazonka.CloudWatchLogs.DeleteRetentionPolicy
+import Amazonka.CloudWatchLogs.DeleteSubscriptionFilter
+import Amazonka.CloudWatchLogs.DescribeDestinations
+import Amazonka.CloudWatchLogs.DescribeExportTasks
+import Amazonka.CloudWatchLogs.DescribeLogGroups
+import Amazonka.CloudWatchLogs.DescribeLogStreams
+import Amazonka.CloudWatchLogs.DescribeMetricFilters
+import Amazonka.CloudWatchLogs.DescribeQueries
+import Amazonka.CloudWatchLogs.DescribeQueryDefinitions
+import Amazonka.CloudWatchLogs.DescribeResourcePolicies
+import Amazonka.CloudWatchLogs.DescribeSubscriptionFilters
+import Amazonka.CloudWatchLogs.DisassociateKmsKey
+import Amazonka.CloudWatchLogs.FilterLogEvents
+import Amazonka.CloudWatchLogs.GetDataProtectionPolicy
+import Amazonka.CloudWatchLogs.GetLogEvents
+import Amazonka.CloudWatchLogs.GetLogGroupFields
+import Amazonka.CloudWatchLogs.GetLogRecord
+import Amazonka.CloudWatchLogs.GetQueryResults
+import Amazonka.CloudWatchLogs.Lens
+import Amazonka.CloudWatchLogs.ListTagsForResource
+import Amazonka.CloudWatchLogs.PutDataProtectionPolicy
+import Amazonka.CloudWatchLogs.PutDestination
+import Amazonka.CloudWatchLogs.PutDestinationPolicy
+import Amazonka.CloudWatchLogs.PutLogEvents
+import Amazonka.CloudWatchLogs.PutMetricFilter
+import Amazonka.CloudWatchLogs.PutQueryDefinition
+import Amazonka.CloudWatchLogs.PutResourcePolicy
+import Amazonka.CloudWatchLogs.PutRetentionPolicy
+import Amazonka.CloudWatchLogs.PutSubscriptionFilter
+import Amazonka.CloudWatchLogs.StartQuery
+import Amazonka.CloudWatchLogs.StopQuery
+import Amazonka.CloudWatchLogs.TagResource
+import Amazonka.CloudWatchLogs.TestMetricFilter
+import Amazonka.CloudWatchLogs.Types
+import Amazonka.CloudWatchLogs.UntagResource
+import Amazonka.CloudWatchLogs.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'CloudWatchLogs'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/CloudWatchLogs/AssociateKmsKey.hs b/gen/Amazonka/CloudWatchLogs/AssociateKmsKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/AssociateKmsKey.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.AssociateKmsKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified KMS key with the specified log group.
+--
+-- Associating a KMS key with a log group overrides any existing
+-- associations between the log group and a KMS key. After a KMS key is
+-- associated with a log group, all newly ingested data for the log group
+-- is encrypted using the KMS key. This association is stored as long as
+-- the data encrypted with the KMS keyis still within CloudWatch Logs. This
+-- enables CloudWatch Logs to decrypt this data whenever it is requested.
+--
+-- CloudWatch Logs supports only symmetric KMS keys. Do not use an
+-- associate an asymmetric KMS key with your log group. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using Symmetric and Asymmetric Keys>.
+--
+-- It can take up to 5 minutes for this operation to take effect.
+--
+-- If you attempt to associate a KMS key with a log group but the KMS key
+-- does not exist or the KMS key is disabled, you receive an
+-- @InvalidParameterException@ error.
+module Amazonka.CloudWatchLogs.AssociateKmsKey
+  ( -- * Creating a Request
+    AssociateKmsKey (..),
+    newAssociateKmsKey,
+
+    -- * Request Lenses
+    associateKmsKey_logGroupName,
+    associateKmsKey_kmsKeyId,
+
+    -- * Destructuring the Response
+    AssociateKmsKeyResponse (..),
+    newAssociateKmsKeyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateKmsKey' smart constructor.
+data AssociateKmsKey = AssociateKmsKey'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+    -- data. This must be a symmetric KMS key. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names>
+    -- and
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using Symmetric and Asymmetric Keys>.
+    kmsKeyId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateKmsKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'associateKmsKey_logGroupName' - The name of the log group.
+--
+-- 'kmsKeyId', 'associateKmsKey_kmsKeyId' - The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+-- data. This must be a symmetric KMS key. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names>
+-- and
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using Symmetric and Asymmetric Keys>.
+newAssociateKmsKey ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'kmsKeyId'
+  Prelude.Text ->
+  AssociateKmsKey
+newAssociateKmsKey pLogGroupName_ pKmsKeyId_ =
+  AssociateKmsKey'
+    { logGroupName = pLogGroupName_,
+      kmsKeyId = pKmsKeyId_
+    }
+
+-- | The name of the log group.
+associateKmsKey_logGroupName :: Lens.Lens' AssociateKmsKey Prelude.Text
+associateKmsKey_logGroupName = Lens.lens (\AssociateKmsKey' {logGroupName} -> logGroupName) (\s@AssociateKmsKey' {} a -> s {logGroupName = a} :: AssociateKmsKey)
+
+-- | The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+-- data. This must be a symmetric KMS key. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names>
+-- and
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using Symmetric and Asymmetric Keys>.
+associateKmsKey_kmsKeyId :: Lens.Lens' AssociateKmsKey Prelude.Text
+associateKmsKey_kmsKeyId = Lens.lens (\AssociateKmsKey' {kmsKeyId} -> kmsKeyId) (\s@AssociateKmsKey' {} a -> s {kmsKeyId = a} :: AssociateKmsKey)
+
+instance Core.AWSRequest AssociateKmsKey where
+  type
+    AWSResponse AssociateKmsKey =
+      AssociateKmsKeyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull AssociateKmsKeyResponse'
+
+instance Prelude.Hashable AssociateKmsKey where
+  hashWithSalt _salt AssociateKmsKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` kmsKeyId
+
+instance Prelude.NFData AssociateKmsKey where
+  rnf AssociateKmsKey' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf kmsKeyId
+
+instance Data.ToHeaders AssociateKmsKey where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.AssociateKmsKey" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateKmsKey where
+  toJSON AssociateKmsKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("kmsKeyId" Data..= kmsKeyId)
+          ]
+      )
+
+instance Data.ToPath AssociateKmsKey where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateKmsKey where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateKmsKeyResponse' smart constructor.
+data AssociateKmsKeyResponse = AssociateKmsKeyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateKmsKeyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newAssociateKmsKeyResponse ::
+  AssociateKmsKeyResponse
+newAssociateKmsKeyResponse = AssociateKmsKeyResponse'
+
+instance Prelude.NFData AssociateKmsKeyResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/CancelExportTask.hs b/gen/Amazonka/CloudWatchLogs/CancelExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/CancelExportTask.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.CancelExportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified export task.
+--
+-- The task must be in the @PENDING@ or @RUNNING@ state.
+module Amazonka.CloudWatchLogs.CancelExportTask
+  ( -- * Creating a Request
+    CancelExportTask (..),
+    newCancelExportTask,
+
+    -- * Request Lenses
+    cancelExportTask_taskId,
+
+    -- * Destructuring the Response
+    CancelExportTaskResponse (..),
+    newCancelExportTaskResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelExportTask' smart constructor.
+data CancelExportTask = CancelExportTask'
+  { -- | The ID of the export task.
+    taskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelExportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskId', 'cancelExportTask_taskId' - The ID of the export task.
+newCancelExportTask ::
+  -- | 'taskId'
+  Prelude.Text ->
+  CancelExportTask
+newCancelExportTask pTaskId_ =
+  CancelExportTask' {taskId = pTaskId_}
+
+-- | The ID of the export task.
+cancelExportTask_taskId :: Lens.Lens' CancelExportTask Prelude.Text
+cancelExportTask_taskId = Lens.lens (\CancelExportTask' {taskId} -> taskId) (\s@CancelExportTask' {} a -> s {taskId = a} :: CancelExportTask)
+
+instance Core.AWSRequest CancelExportTask where
+  type
+    AWSResponse CancelExportTask =
+      CancelExportTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull CancelExportTaskResponse'
+
+instance Prelude.Hashable CancelExportTask where
+  hashWithSalt _salt CancelExportTask' {..} =
+    _salt `Prelude.hashWithSalt` taskId
+
+instance Prelude.NFData CancelExportTask where
+  rnf CancelExportTask' {..} = Prelude.rnf taskId
+
+instance Data.ToHeaders CancelExportTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.CancelExportTask" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelExportTask where
+  toJSON CancelExportTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("taskId" Data..= taskId)]
+      )
+
+instance Data.ToPath CancelExportTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelExportTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelExportTaskResponse' smart constructor.
+data CancelExportTaskResponse = CancelExportTaskResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelExportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCancelExportTaskResponse ::
+  CancelExportTaskResponse
+newCancelExportTaskResponse =
+  CancelExportTaskResponse'
+
+instance Prelude.NFData CancelExportTaskResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/CreateExportTask.hs b/gen/Amazonka/CloudWatchLogs/CreateExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/CreateExportTask.hs
@@ -0,0 +1,319 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.CreateExportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an export task so that you can efficiently export data from a
+-- log group to an Amazon S3 bucket. When you perform a @CreateExportTask@
+-- operation, you must use credentials that have permission to write to the
+-- S3 bucket that you specify as the destination.
+--
+-- Exporting log data to S3 buckets that are encrypted by KMS is supported.
+-- Exporting log data to Amazon S3 buckets that have S3 Object Lock enabled
+-- with a retention period is also supported.
+--
+-- Exporting to S3 buckets that are encrypted with AES-256 is supported.
+--
+-- This is an asynchronous call. If all the required information is
+-- provided, this operation initiates an export task and responds with the
+-- ID of the task. After the task has started, you can use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeExportTasks.html DescribeExportTasks>
+-- to get the status of the export task. Each account can only have one
+-- active (@RUNNING@ or @PENDING@) export task at a time. To cancel an
+-- export task, use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CancelExportTask.html CancelExportTask>.
+--
+-- You can export logs from multiple log groups or multiple time ranges to
+-- the same S3 bucket. To separate log data for each export task, specify a
+-- prefix to be used as the Amazon S3 key prefix for all exported objects.
+--
+-- Time-based sorting on chunks of log data inside an exported file is not
+-- guaranteed. You can sort the exported log field data by using Linux
+-- utilities.
+module Amazonka.CloudWatchLogs.CreateExportTask
+  ( -- * Creating a Request
+    CreateExportTask (..),
+    newCreateExportTask,
+
+    -- * Request Lenses
+    createExportTask_destinationPrefix,
+    createExportTask_logStreamNamePrefix,
+    createExportTask_taskName,
+    createExportTask_logGroupName,
+    createExportTask_from,
+    createExportTask_to,
+    createExportTask_destination,
+
+    -- * Destructuring the Response
+    CreateExportTaskResponse (..),
+    newCreateExportTaskResponse,
+
+    -- * Response Lenses
+    createExportTaskResponse_taskId,
+    createExportTaskResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExportTask' smart constructor.
+data CreateExportTask = CreateExportTask'
+  { -- | The prefix used as the start of the key for every object exported. If
+    -- you don\'t specify a value, the default is @exportedlogs@.
+    destinationPrefix :: Prelude.Maybe Prelude.Text,
+    -- | Export only log streams that match the provided prefix. If you don\'t
+    -- specify a value, no prefix filter is applied.
+    logStreamNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The name of the export task.
+    taskName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The start time of the range for the request, expressed as the number of
+    -- milliseconds after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp
+    -- earlier than this time are not exported.
+    from :: Prelude.Natural,
+    -- | The end time of the range for the request, expressed as the number of
+    -- milliseconds after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp
+    -- later than this time are not exported.
+    --
+    -- You must specify a time that is not earlier than when this log group was
+    -- created.
+    to :: Prelude.Natural,
+    -- | The name of S3 bucket for the exported log data. The bucket must be in
+    -- the same Amazon Web Services Region.
+    destination :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationPrefix', 'createExportTask_destinationPrefix' - The prefix used as the start of the key for every object exported. If
+-- you don\'t specify a value, the default is @exportedlogs@.
+--
+-- 'logStreamNamePrefix', 'createExportTask_logStreamNamePrefix' - Export only log streams that match the provided prefix. If you don\'t
+-- specify a value, no prefix filter is applied.
+--
+-- 'taskName', 'createExportTask_taskName' - The name of the export task.
+--
+-- 'logGroupName', 'createExportTask_logGroupName' - The name of the log group.
+--
+-- 'from', 'createExportTask_from' - The start time of the range for the request, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp
+-- earlier than this time are not exported.
+--
+-- 'to', 'createExportTask_to' - The end time of the range for the request, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp
+-- later than this time are not exported.
+--
+-- You must specify a time that is not earlier than when this log group was
+-- created.
+--
+-- 'destination', 'createExportTask_destination' - The name of S3 bucket for the exported log data. The bucket must be in
+-- the same Amazon Web Services Region.
+newCreateExportTask ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'from'
+  Prelude.Natural ->
+  -- | 'to'
+  Prelude.Natural ->
+  -- | 'destination'
+  Prelude.Text ->
+  CreateExportTask
+newCreateExportTask
+  pLogGroupName_
+  pFrom_
+  pTo_
+  pDestination_ =
+    CreateExportTask'
+      { destinationPrefix =
+          Prelude.Nothing,
+        logStreamNamePrefix = Prelude.Nothing,
+        taskName = Prelude.Nothing,
+        logGroupName = pLogGroupName_,
+        from = pFrom_,
+        to = pTo_,
+        destination = pDestination_
+      }
+
+-- | The prefix used as the start of the key for every object exported. If
+-- you don\'t specify a value, the default is @exportedlogs@.
+createExportTask_destinationPrefix :: Lens.Lens' CreateExportTask (Prelude.Maybe Prelude.Text)
+createExportTask_destinationPrefix = Lens.lens (\CreateExportTask' {destinationPrefix} -> destinationPrefix) (\s@CreateExportTask' {} a -> s {destinationPrefix = a} :: CreateExportTask)
+
+-- | Export only log streams that match the provided prefix. If you don\'t
+-- specify a value, no prefix filter is applied.
+createExportTask_logStreamNamePrefix :: Lens.Lens' CreateExportTask (Prelude.Maybe Prelude.Text)
+createExportTask_logStreamNamePrefix = Lens.lens (\CreateExportTask' {logStreamNamePrefix} -> logStreamNamePrefix) (\s@CreateExportTask' {} a -> s {logStreamNamePrefix = a} :: CreateExportTask)
+
+-- | The name of the export task.
+createExportTask_taskName :: Lens.Lens' CreateExportTask (Prelude.Maybe Prelude.Text)
+createExportTask_taskName = Lens.lens (\CreateExportTask' {taskName} -> taskName) (\s@CreateExportTask' {} a -> s {taskName = a} :: CreateExportTask)
+
+-- | The name of the log group.
+createExportTask_logGroupName :: Lens.Lens' CreateExportTask Prelude.Text
+createExportTask_logGroupName = Lens.lens (\CreateExportTask' {logGroupName} -> logGroupName) (\s@CreateExportTask' {} a -> s {logGroupName = a} :: CreateExportTask)
+
+-- | The start time of the range for the request, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp
+-- earlier than this time are not exported.
+createExportTask_from :: Lens.Lens' CreateExportTask Prelude.Natural
+createExportTask_from = Lens.lens (\CreateExportTask' {from} -> from) (\s@CreateExportTask' {} a -> s {from = a} :: CreateExportTask)
+
+-- | The end time of the range for the request, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp
+-- later than this time are not exported.
+--
+-- You must specify a time that is not earlier than when this log group was
+-- created.
+createExportTask_to :: Lens.Lens' CreateExportTask Prelude.Natural
+createExportTask_to = Lens.lens (\CreateExportTask' {to} -> to) (\s@CreateExportTask' {} a -> s {to = a} :: CreateExportTask)
+
+-- | The name of S3 bucket for the exported log data. The bucket must be in
+-- the same Amazon Web Services Region.
+createExportTask_destination :: Lens.Lens' CreateExportTask Prelude.Text
+createExportTask_destination = Lens.lens (\CreateExportTask' {destination} -> destination) (\s@CreateExportTask' {} a -> s {destination = a} :: CreateExportTask)
+
+instance Core.AWSRequest CreateExportTask where
+  type
+    AWSResponse CreateExportTask =
+      CreateExportTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateExportTaskResponse'
+            Prelude.<$> (x Data..?> "taskId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateExportTask where
+  hashWithSalt _salt CreateExportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationPrefix
+      `Prelude.hashWithSalt` logStreamNamePrefix
+      `Prelude.hashWithSalt` taskName
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` from
+      `Prelude.hashWithSalt` to
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData CreateExportTask where
+  rnf CreateExportTask' {..} =
+    Prelude.rnf destinationPrefix
+      `Prelude.seq` Prelude.rnf logStreamNamePrefix
+      `Prelude.seq` Prelude.rnf taskName
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf from
+      `Prelude.seq` Prelude.rnf to
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToHeaders CreateExportTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.CreateExportTask" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExportTask where
+  toJSON CreateExportTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("destinationPrefix" Data..=)
+              Prelude.<$> destinationPrefix,
+            ("logStreamNamePrefix" Data..=)
+              Prelude.<$> logStreamNamePrefix,
+            ("taskName" Data..=) Prelude.<$> taskName,
+            Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("from" Data..= from),
+            Prelude.Just ("to" Data..= to),
+            Prelude.Just ("destination" Data..= destination)
+          ]
+      )
+
+instance Data.ToPath CreateExportTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateExportTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateExportTaskResponse' smart constructor.
+data CreateExportTaskResponse = CreateExportTaskResponse'
+  { -- | The ID of the export task.
+    taskId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'taskId', 'createExportTaskResponse_taskId' - The ID of the export task.
+--
+-- 'httpStatus', 'createExportTaskResponse_httpStatus' - The response's http status code.
+newCreateExportTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateExportTaskResponse
+newCreateExportTaskResponse pHttpStatus_ =
+  CreateExportTaskResponse'
+    { taskId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the export task.
+createExportTaskResponse_taskId :: Lens.Lens' CreateExportTaskResponse (Prelude.Maybe Prelude.Text)
+createExportTaskResponse_taskId = Lens.lens (\CreateExportTaskResponse' {taskId} -> taskId) (\s@CreateExportTaskResponse' {} a -> s {taskId = a} :: CreateExportTaskResponse)
+
+-- | The response's http status code.
+createExportTaskResponse_httpStatus :: Lens.Lens' CreateExportTaskResponse Prelude.Int
+createExportTaskResponse_httpStatus = Lens.lens (\CreateExportTaskResponse' {httpStatus} -> httpStatus) (\s@CreateExportTaskResponse' {} a -> s {httpStatus = a} :: CreateExportTaskResponse)
+
+instance Prelude.NFData CreateExportTaskResponse where
+  rnf CreateExportTaskResponse' {..} =
+    Prelude.rnf taskId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/CreateLogGroup.hs b/gen/Amazonka/CloudWatchLogs/CreateLogGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/CreateLogGroup.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.CreateLogGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a log group with the specified name. You can create up to 20,000
+-- log groups per account.
+--
+-- You must use the following guidelines when naming a log group:
+--
+-- -   Log group names must be unique within a Region for an Amazon Web
+--     Services account.
+--
+-- -   Log group names can be between 1 and 512 characters long.
+--
+-- -   Log group names consist of the following characters: a-z, A-Z, 0-9,
+--     \'_\' (underscore), \'-\' (hyphen), \'\/\' (forward slash), \'.\'
+--     (period), and \'#\' (number sign)
+--
+-- When you create a log group, by default the log events in the log group
+-- do not expire. To set a retention policy so that events expire and are
+-- deleted after a specified time, use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutRetentionPolicy.html PutRetentionPolicy>.
+--
+-- If you associate an KMS key with the log group, ingested data is
+-- encrypted using the KMS key. This association is stored as long as the
+-- data encrypted with the KMS key is still within CloudWatch Logs. This
+-- enables CloudWatch Logs to decrypt this data whenever it is requested.
+--
+-- If you attempt to associate a KMS key with the log group but the KMS
+-- keydoes not exist or the KMS key is disabled, you receive an
+-- @InvalidParameterException@ error.
+--
+-- CloudWatch Logs supports only symmetric KMS keys. Do not associate an
+-- asymmetric KMS key with your log group. For more information, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using Symmetric and Asymmetric Keys>.
+module Amazonka.CloudWatchLogs.CreateLogGroup
+  ( -- * Creating a Request
+    CreateLogGroup (..),
+    newCreateLogGroup,
+
+    -- * Request Lenses
+    createLogGroup_kmsKeyId,
+    createLogGroup_tags,
+    createLogGroup_logGroupName,
+
+    -- * Destructuring the Response
+    CreateLogGroupResponse (..),
+    newCreateLogGroupResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLogGroup' smart constructor.
+data CreateLogGroup = CreateLogGroup'
+  { -- | The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+    -- data. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names>.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pairs to use for the tags.
+    --
+    -- You can grant users access to certain log groups while preventing them
+    -- from accessing other log groups. To do so, tag your groups and use IAM
+    -- policies that refer to those tags. To assign tags when you create a log
+    -- group, you must have either the @logs:TagResource@ or @logs:TagLogGroup@
+    -- permission. For more information about tagging, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>.
+    -- For more information about using tags to control access, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html Controlling access to Amazon Web Services resources using tags>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the log group.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLogGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'createLogGroup_kmsKeyId' - The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names>.
+--
+-- 'tags', 'createLogGroup_tags' - The key-value pairs to use for the tags.
+--
+-- You can grant users access to certain log groups while preventing them
+-- from accessing other log groups. To do so, tag your groups and use IAM
+-- policies that refer to those tags. To assign tags when you create a log
+-- group, you must have either the @logs:TagResource@ or @logs:TagLogGroup@
+-- permission. For more information about tagging, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>.
+-- For more information about using tags to control access, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html Controlling access to Amazon Web Services resources using tags>.
+--
+-- 'logGroupName', 'createLogGroup_logGroupName' - The name of the log group.
+newCreateLogGroup ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  CreateLogGroup
+newCreateLogGroup pLogGroupName_ =
+  CreateLogGroup'
+    { kmsKeyId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      logGroupName = pLogGroupName_
+    }
+
+-- | The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names>.
+createLogGroup_kmsKeyId :: Lens.Lens' CreateLogGroup (Prelude.Maybe Prelude.Text)
+createLogGroup_kmsKeyId = Lens.lens (\CreateLogGroup' {kmsKeyId} -> kmsKeyId) (\s@CreateLogGroup' {} a -> s {kmsKeyId = a} :: CreateLogGroup)
+
+-- | The key-value pairs to use for the tags.
+--
+-- You can grant users access to certain log groups while preventing them
+-- from accessing other log groups. To do so, tag your groups and use IAM
+-- policies that refer to those tags. To assign tags when you create a log
+-- group, you must have either the @logs:TagResource@ or @logs:TagLogGroup@
+-- permission. For more information about tagging, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>.
+-- For more information about using tags to control access, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html Controlling access to Amazon Web Services resources using tags>.
+createLogGroup_tags :: Lens.Lens' CreateLogGroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createLogGroup_tags = Lens.lens (\CreateLogGroup' {tags} -> tags) (\s@CreateLogGroup' {} a -> s {tags = a} :: CreateLogGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the log group.
+createLogGroup_logGroupName :: Lens.Lens' CreateLogGroup Prelude.Text
+createLogGroup_logGroupName = Lens.lens (\CreateLogGroup' {logGroupName} -> logGroupName) (\s@CreateLogGroup' {} a -> s {logGroupName = a} :: CreateLogGroup)
+
+instance Core.AWSRequest CreateLogGroup where
+  type
+    AWSResponse CreateLogGroup =
+      CreateLogGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull CreateLogGroupResponse'
+
+instance Prelude.Hashable CreateLogGroup where
+  hashWithSalt _salt CreateLogGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData CreateLogGroup where
+  rnf CreateLogGroup' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf logGroupName
+
+instance Data.ToHeaders CreateLogGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.CreateLogGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLogGroup where
+  toJSON CreateLogGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("logGroupName" Data..= logGroupName)
+          ]
+      )
+
+instance Data.ToPath CreateLogGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLogGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLogGroupResponse' smart constructor.
+data CreateLogGroupResponse = CreateLogGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLogGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateLogGroupResponse ::
+  CreateLogGroupResponse
+newCreateLogGroupResponse = CreateLogGroupResponse'
+
+instance Prelude.NFData CreateLogGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/CreateLogStream.hs b/gen/Amazonka/CloudWatchLogs/CreateLogStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/CreateLogStream.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.CreateLogStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a log stream for the specified log group. A log stream is a
+-- sequence of log events that originate from a single source, such as an
+-- application instance or a resource that is being monitored.
+--
+-- There is no limit on the number of log streams that you can create for a
+-- log group. There is a limit of 50 TPS on @CreateLogStream@ operations,
+-- after which transactions are throttled.
+--
+-- You must use the following guidelines when naming a log stream:
+--
+-- -   Log stream names must be unique within the log group.
+--
+-- -   Log stream names can be between 1 and 512 characters long.
+--
+-- -   Don\'t use \':\' (colon) or \'*\' (asterisk) characters.
+module Amazonka.CloudWatchLogs.CreateLogStream
+  ( -- * Creating a Request
+    CreateLogStream (..),
+    newCreateLogStream,
+
+    -- * Request Lenses
+    createLogStream_logGroupName,
+    createLogStream_logStreamName,
+
+    -- * Destructuring the Response
+    CreateLogStreamResponse (..),
+    newCreateLogStreamResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLogStream' smart constructor.
+data CreateLogStream = CreateLogStream'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The name of the log stream.
+    logStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLogStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'createLogStream_logGroupName' - The name of the log group.
+--
+-- 'logStreamName', 'createLogStream_logStreamName' - The name of the log stream.
+newCreateLogStream ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'logStreamName'
+  Prelude.Text ->
+  CreateLogStream
+newCreateLogStream pLogGroupName_ pLogStreamName_ =
+  CreateLogStream'
+    { logGroupName = pLogGroupName_,
+      logStreamName = pLogStreamName_
+    }
+
+-- | The name of the log group.
+createLogStream_logGroupName :: Lens.Lens' CreateLogStream Prelude.Text
+createLogStream_logGroupName = Lens.lens (\CreateLogStream' {logGroupName} -> logGroupName) (\s@CreateLogStream' {} a -> s {logGroupName = a} :: CreateLogStream)
+
+-- | The name of the log stream.
+createLogStream_logStreamName :: Lens.Lens' CreateLogStream Prelude.Text
+createLogStream_logStreamName = Lens.lens (\CreateLogStream' {logStreamName} -> logStreamName) (\s@CreateLogStream' {} a -> s {logStreamName = a} :: CreateLogStream)
+
+instance Core.AWSRequest CreateLogStream where
+  type
+    AWSResponse CreateLogStream =
+      CreateLogStreamResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull CreateLogStreamResponse'
+
+instance Prelude.Hashable CreateLogStream where
+  hashWithSalt _salt CreateLogStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logStreamName
+
+instance Prelude.NFData CreateLogStream where
+  rnf CreateLogStream' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logStreamName
+
+instance Data.ToHeaders CreateLogStream where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.CreateLogStream" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLogStream where
+  toJSON CreateLogStream' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just
+              ("logStreamName" Data..= logStreamName)
+          ]
+      )
+
+instance Data.ToPath CreateLogStream where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLogStream where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLogStreamResponse' smart constructor.
+data CreateLogStreamResponse = CreateLogStreamResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLogStreamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateLogStreamResponse ::
+  CreateLogStreamResponse
+newCreateLogStreamResponse = CreateLogStreamResponse'
+
+instance Prelude.NFData CreateLogStreamResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteDataProtectionPolicy.hs b/gen/Amazonka/CloudWatchLogs/DeleteDataProtectionPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteDataProtectionPolicy.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteDataProtectionPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the data protection policy from the specified log group.
+--
+-- For more information about data protection policies, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDataProtectionPolicy.html PutDataProtectionPolicy>.
+module Amazonka.CloudWatchLogs.DeleteDataProtectionPolicy
+  ( -- * Creating a Request
+    DeleteDataProtectionPolicy (..),
+    newDeleteDataProtectionPolicy,
+
+    -- * Request Lenses
+    deleteDataProtectionPolicy_logGroupIdentifier,
+
+    -- * Destructuring the Response
+    DeleteDataProtectionPolicyResponse (..),
+    newDeleteDataProtectionPolicyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDataProtectionPolicy' smart constructor.
+data DeleteDataProtectionPolicy = DeleteDataProtectionPolicy'
+  { -- | The name or ARN of the log group that you want to delete the data
+    -- protection policy for.
+    logGroupIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataProtectionPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupIdentifier', 'deleteDataProtectionPolicy_logGroupIdentifier' - The name or ARN of the log group that you want to delete the data
+-- protection policy for.
+newDeleteDataProtectionPolicy ::
+  -- | 'logGroupIdentifier'
+  Prelude.Text ->
+  DeleteDataProtectionPolicy
+newDeleteDataProtectionPolicy pLogGroupIdentifier_ =
+  DeleteDataProtectionPolicy'
+    { logGroupIdentifier =
+        pLogGroupIdentifier_
+    }
+
+-- | The name or ARN of the log group that you want to delete the data
+-- protection policy for.
+deleteDataProtectionPolicy_logGroupIdentifier :: Lens.Lens' DeleteDataProtectionPolicy Prelude.Text
+deleteDataProtectionPolicy_logGroupIdentifier = Lens.lens (\DeleteDataProtectionPolicy' {logGroupIdentifier} -> logGroupIdentifier) (\s@DeleteDataProtectionPolicy' {} a -> s {logGroupIdentifier = a} :: DeleteDataProtectionPolicy)
+
+instance Core.AWSRequest DeleteDataProtectionPolicy where
+  type
+    AWSResponse DeleteDataProtectionPolicy =
+      DeleteDataProtectionPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteDataProtectionPolicyResponse'
+
+instance Prelude.Hashable DeleteDataProtectionPolicy where
+  hashWithSalt _salt DeleteDataProtectionPolicy' {..} =
+    _salt `Prelude.hashWithSalt` logGroupIdentifier
+
+instance Prelude.NFData DeleteDataProtectionPolicy where
+  rnf DeleteDataProtectionPolicy' {..} =
+    Prelude.rnf logGroupIdentifier
+
+instance Data.ToHeaders DeleteDataProtectionPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteDataProtectionPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDataProtectionPolicy where
+  toJSON DeleteDataProtectionPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("logGroupIdentifier" Data..= logGroupIdentifier)
+          ]
+      )
+
+instance Data.ToPath DeleteDataProtectionPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDataProtectionPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDataProtectionPolicyResponse' smart constructor.
+data DeleteDataProtectionPolicyResponse = DeleteDataProtectionPolicyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataProtectionPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDataProtectionPolicyResponse ::
+  DeleteDataProtectionPolicyResponse
+newDeleteDataProtectionPolicyResponse =
+  DeleteDataProtectionPolicyResponse'
+
+instance
+  Prelude.NFData
+    DeleteDataProtectionPolicyResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteDestination.hs b/gen/Amazonka/CloudWatchLogs/DeleteDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteDestination.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified destination, and eventually disables all the
+-- subscription filters that publish to it. This operation does not delete
+-- the physical resource encapsulated by the destination.
+module Amazonka.CloudWatchLogs.DeleteDestination
+  ( -- * Creating a Request
+    DeleteDestination (..),
+    newDeleteDestination,
+
+    -- * Request Lenses
+    deleteDestination_destinationName,
+
+    -- * Destructuring the Response
+    DeleteDestinationResponse (..),
+    newDeleteDestinationResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDestination' smart constructor.
+data DeleteDestination = DeleteDestination'
+  { -- | The name of the destination.
+    destinationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationName', 'deleteDestination_destinationName' - The name of the destination.
+newDeleteDestination ::
+  -- | 'destinationName'
+  Prelude.Text ->
+  DeleteDestination
+newDeleteDestination pDestinationName_ =
+  DeleteDestination'
+    { destinationName =
+        pDestinationName_
+    }
+
+-- | The name of the destination.
+deleteDestination_destinationName :: Lens.Lens' DeleteDestination Prelude.Text
+deleteDestination_destinationName = Lens.lens (\DeleteDestination' {destinationName} -> destinationName) (\s@DeleteDestination' {} a -> s {destinationName = a} :: DeleteDestination)
+
+instance Core.AWSRequest DeleteDestination where
+  type
+    AWSResponse DeleteDestination =
+      DeleteDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDestinationResponse'
+
+instance Prelude.Hashable DeleteDestination where
+  hashWithSalt _salt DeleteDestination' {..} =
+    _salt `Prelude.hashWithSalt` destinationName
+
+instance Prelude.NFData DeleteDestination where
+  rnf DeleteDestination' {..} =
+    Prelude.rnf destinationName
+
+instance Data.ToHeaders DeleteDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteDestination" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDestination where
+  toJSON DeleteDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("destinationName" Data..= destinationName)
+          ]
+      )
+
+instance Data.ToPath DeleteDestination where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDestinationResponse' smart constructor.
+data DeleteDestinationResponse = DeleteDestinationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDestinationResponse ::
+  DeleteDestinationResponse
+newDeleteDestinationResponse =
+  DeleteDestinationResponse'
+
+instance Prelude.NFData DeleteDestinationResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteLogGroup.hs b/gen/Amazonka/CloudWatchLogs/DeleteLogGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteLogGroup.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteLogGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified log group and permanently deletes all the archived
+-- log events associated with the log group.
+module Amazonka.CloudWatchLogs.DeleteLogGroup
+  ( -- * Creating a Request
+    DeleteLogGroup (..),
+    newDeleteLogGroup,
+
+    -- * Request Lenses
+    deleteLogGroup_logGroupName,
+
+    -- * Destructuring the Response
+    DeleteLogGroupResponse (..),
+    newDeleteLogGroupResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLogGroup' smart constructor.
+data DeleteLogGroup = DeleteLogGroup'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLogGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'deleteLogGroup_logGroupName' - The name of the log group.
+newDeleteLogGroup ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  DeleteLogGroup
+newDeleteLogGroup pLogGroupName_ =
+  DeleteLogGroup' {logGroupName = pLogGroupName_}
+
+-- | The name of the log group.
+deleteLogGroup_logGroupName :: Lens.Lens' DeleteLogGroup Prelude.Text
+deleteLogGroup_logGroupName = Lens.lens (\DeleteLogGroup' {logGroupName} -> logGroupName) (\s@DeleteLogGroup' {} a -> s {logGroupName = a} :: DeleteLogGroup)
+
+instance Core.AWSRequest DeleteLogGroup where
+  type
+    AWSResponse DeleteLogGroup =
+      DeleteLogGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteLogGroupResponse'
+
+instance Prelude.Hashable DeleteLogGroup where
+  hashWithSalt _salt DeleteLogGroup' {..} =
+    _salt `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData DeleteLogGroup where
+  rnf DeleteLogGroup' {..} = Prelude.rnf logGroupName
+
+instance Data.ToHeaders DeleteLogGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteLogGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteLogGroup where
+  toJSON DeleteLogGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("logGroupName" Data..= logGroupName)]
+      )
+
+instance Data.ToPath DeleteLogGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLogGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLogGroupResponse' smart constructor.
+data DeleteLogGroupResponse = DeleteLogGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLogGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteLogGroupResponse ::
+  DeleteLogGroupResponse
+newDeleteLogGroupResponse = DeleteLogGroupResponse'
+
+instance Prelude.NFData DeleteLogGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteLogStream.hs b/gen/Amazonka/CloudWatchLogs/DeleteLogStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteLogStream.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteLogStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified log stream and permanently deletes all the
+-- archived log events associated with the log stream.
+module Amazonka.CloudWatchLogs.DeleteLogStream
+  ( -- * Creating a Request
+    DeleteLogStream (..),
+    newDeleteLogStream,
+
+    -- * Request Lenses
+    deleteLogStream_logGroupName,
+    deleteLogStream_logStreamName,
+
+    -- * Destructuring the Response
+    DeleteLogStreamResponse (..),
+    newDeleteLogStreamResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLogStream' smart constructor.
+data DeleteLogStream = DeleteLogStream'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The name of the log stream.
+    logStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLogStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'deleteLogStream_logGroupName' - The name of the log group.
+--
+-- 'logStreamName', 'deleteLogStream_logStreamName' - The name of the log stream.
+newDeleteLogStream ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'logStreamName'
+  Prelude.Text ->
+  DeleteLogStream
+newDeleteLogStream pLogGroupName_ pLogStreamName_ =
+  DeleteLogStream'
+    { logGroupName = pLogGroupName_,
+      logStreamName = pLogStreamName_
+    }
+
+-- | The name of the log group.
+deleteLogStream_logGroupName :: Lens.Lens' DeleteLogStream Prelude.Text
+deleteLogStream_logGroupName = Lens.lens (\DeleteLogStream' {logGroupName} -> logGroupName) (\s@DeleteLogStream' {} a -> s {logGroupName = a} :: DeleteLogStream)
+
+-- | The name of the log stream.
+deleteLogStream_logStreamName :: Lens.Lens' DeleteLogStream Prelude.Text
+deleteLogStream_logStreamName = Lens.lens (\DeleteLogStream' {logStreamName} -> logStreamName) (\s@DeleteLogStream' {} a -> s {logStreamName = a} :: DeleteLogStream)
+
+instance Core.AWSRequest DeleteLogStream where
+  type
+    AWSResponse DeleteLogStream =
+      DeleteLogStreamResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteLogStreamResponse'
+
+instance Prelude.Hashable DeleteLogStream where
+  hashWithSalt _salt DeleteLogStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logStreamName
+
+instance Prelude.NFData DeleteLogStream where
+  rnf DeleteLogStream' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logStreamName
+
+instance Data.ToHeaders DeleteLogStream where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteLogStream" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteLogStream where
+  toJSON DeleteLogStream' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just
+              ("logStreamName" Data..= logStreamName)
+          ]
+      )
+
+instance Data.ToPath DeleteLogStream where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLogStream where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLogStreamResponse' smart constructor.
+data DeleteLogStreamResponse = DeleteLogStreamResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLogStreamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteLogStreamResponse ::
+  DeleteLogStreamResponse
+newDeleteLogStreamResponse = DeleteLogStreamResponse'
+
+instance Prelude.NFData DeleteLogStreamResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteMetricFilter.hs b/gen/Amazonka/CloudWatchLogs/DeleteMetricFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteMetricFilter.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteMetricFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified metric filter.
+module Amazonka.CloudWatchLogs.DeleteMetricFilter
+  ( -- * Creating a Request
+    DeleteMetricFilter (..),
+    newDeleteMetricFilter,
+
+    -- * Request Lenses
+    deleteMetricFilter_logGroupName,
+    deleteMetricFilter_filterName,
+
+    -- * Destructuring the Response
+    DeleteMetricFilterResponse (..),
+    newDeleteMetricFilterResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteMetricFilter' smart constructor.
+data DeleteMetricFilter = DeleteMetricFilter'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The name of the metric filter.
+    filterName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMetricFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'deleteMetricFilter_logGroupName' - The name of the log group.
+--
+-- 'filterName', 'deleteMetricFilter_filterName' - The name of the metric filter.
+newDeleteMetricFilter ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'filterName'
+  Prelude.Text ->
+  DeleteMetricFilter
+newDeleteMetricFilter pLogGroupName_ pFilterName_ =
+  DeleteMetricFilter'
+    { logGroupName = pLogGroupName_,
+      filterName = pFilterName_
+    }
+
+-- | The name of the log group.
+deleteMetricFilter_logGroupName :: Lens.Lens' DeleteMetricFilter Prelude.Text
+deleteMetricFilter_logGroupName = Lens.lens (\DeleteMetricFilter' {logGroupName} -> logGroupName) (\s@DeleteMetricFilter' {} a -> s {logGroupName = a} :: DeleteMetricFilter)
+
+-- | The name of the metric filter.
+deleteMetricFilter_filterName :: Lens.Lens' DeleteMetricFilter Prelude.Text
+deleteMetricFilter_filterName = Lens.lens (\DeleteMetricFilter' {filterName} -> filterName) (\s@DeleteMetricFilter' {} a -> s {filterName = a} :: DeleteMetricFilter)
+
+instance Core.AWSRequest DeleteMetricFilter where
+  type
+    AWSResponse DeleteMetricFilter =
+      DeleteMetricFilterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteMetricFilterResponse'
+
+instance Prelude.Hashable DeleteMetricFilter where
+  hashWithSalt _salt DeleteMetricFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` filterName
+
+instance Prelude.NFData DeleteMetricFilter where
+  rnf DeleteMetricFilter' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf filterName
+
+instance Data.ToHeaders DeleteMetricFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteMetricFilter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteMetricFilter where
+  toJSON DeleteMetricFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("filterName" Data..= filterName)
+          ]
+      )
+
+instance Data.ToPath DeleteMetricFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteMetricFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMetricFilterResponse' smart constructor.
+data DeleteMetricFilterResponse = DeleteMetricFilterResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMetricFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteMetricFilterResponse ::
+  DeleteMetricFilterResponse
+newDeleteMetricFilterResponse =
+  DeleteMetricFilterResponse'
+
+instance Prelude.NFData DeleteMetricFilterResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteQueryDefinition.hs b/gen/Amazonka/CloudWatchLogs/DeleteQueryDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteQueryDefinition.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteQueryDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a saved CloudWatch Logs Insights query definition. A query
+-- definition contains details about a saved CloudWatch Logs Insights
+-- query.
+--
+-- Each @DeleteQueryDefinition@ operation can delete one query definition.
+--
+-- You must have the @logs:DeleteQueryDefinition@ permission to be able to
+-- perform this operation.
+module Amazonka.CloudWatchLogs.DeleteQueryDefinition
+  ( -- * Creating a Request
+    DeleteQueryDefinition (..),
+    newDeleteQueryDefinition,
+
+    -- * Request Lenses
+    deleteQueryDefinition_queryDefinitionId,
+
+    -- * Destructuring the Response
+    DeleteQueryDefinitionResponse (..),
+    newDeleteQueryDefinitionResponse,
+
+    -- * Response Lenses
+    deleteQueryDefinitionResponse_success,
+    deleteQueryDefinitionResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteQueryDefinition' smart constructor.
+data DeleteQueryDefinition = DeleteQueryDefinition'
+  { -- | The ID of the query definition that you want to delete. You can use
+    -- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>
+    -- to retrieve the IDs of your saved query definitions.
+    queryDefinitionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueryDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queryDefinitionId', 'deleteQueryDefinition_queryDefinitionId' - The ID of the query definition that you want to delete. You can use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>
+-- to retrieve the IDs of your saved query definitions.
+newDeleteQueryDefinition ::
+  -- | 'queryDefinitionId'
+  Prelude.Text ->
+  DeleteQueryDefinition
+newDeleteQueryDefinition pQueryDefinitionId_ =
+  DeleteQueryDefinition'
+    { queryDefinitionId =
+        pQueryDefinitionId_
+    }
+
+-- | The ID of the query definition that you want to delete. You can use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>
+-- to retrieve the IDs of your saved query definitions.
+deleteQueryDefinition_queryDefinitionId :: Lens.Lens' DeleteQueryDefinition Prelude.Text
+deleteQueryDefinition_queryDefinitionId = Lens.lens (\DeleteQueryDefinition' {queryDefinitionId} -> queryDefinitionId) (\s@DeleteQueryDefinition' {} a -> s {queryDefinitionId = a} :: DeleteQueryDefinition)
+
+instance Core.AWSRequest DeleteQueryDefinition where
+  type
+    AWSResponse DeleteQueryDefinition =
+      DeleteQueryDefinitionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteQueryDefinitionResponse'
+            Prelude.<$> (x Data..?> "success")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteQueryDefinition where
+  hashWithSalt _salt DeleteQueryDefinition' {..} =
+    _salt `Prelude.hashWithSalt` queryDefinitionId
+
+instance Prelude.NFData DeleteQueryDefinition where
+  rnf DeleteQueryDefinition' {..} =
+    Prelude.rnf queryDefinitionId
+
+instance Data.ToHeaders DeleteQueryDefinition where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteQueryDefinition" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteQueryDefinition where
+  toJSON DeleteQueryDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("queryDefinitionId" Data..= queryDefinitionId)
+          ]
+      )
+
+instance Data.ToPath DeleteQueryDefinition where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteQueryDefinition where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteQueryDefinitionResponse' smart constructor.
+data DeleteQueryDefinitionResponse = DeleteQueryDefinitionResponse'
+  { -- | A value of TRUE indicates that the operation succeeded. FALSE indicates
+    -- that the operation failed.
+    success :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueryDefinitionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'success', 'deleteQueryDefinitionResponse_success' - A value of TRUE indicates that the operation succeeded. FALSE indicates
+-- that the operation failed.
+--
+-- 'httpStatus', 'deleteQueryDefinitionResponse_httpStatus' - The response's http status code.
+newDeleteQueryDefinitionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteQueryDefinitionResponse
+newDeleteQueryDefinitionResponse pHttpStatus_ =
+  DeleteQueryDefinitionResponse'
+    { success =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A value of TRUE indicates that the operation succeeded. FALSE indicates
+-- that the operation failed.
+deleteQueryDefinitionResponse_success :: Lens.Lens' DeleteQueryDefinitionResponse (Prelude.Maybe Prelude.Bool)
+deleteQueryDefinitionResponse_success = Lens.lens (\DeleteQueryDefinitionResponse' {success} -> success) (\s@DeleteQueryDefinitionResponse' {} a -> s {success = a} :: DeleteQueryDefinitionResponse)
+
+-- | The response's http status code.
+deleteQueryDefinitionResponse_httpStatus :: Lens.Lens' DeleteQueryDefinitionResponse Prelude.Int
+deleteQueryDefinitionResponse_httpStatus = Lens.lens (\DeleteQueryDefinitionResponse' {httpStatus} -> httpStatus) (\s@DeleteQueryDefinitionResponse' {} a -> s {httpStatus = a} :: DeleteQueryDefinitionResponse)
+
+instance Prelude.NFData DeleteQueryDefinitionResponse where
+  rnf DeleteQueryDefinitionResponse' {..} =
+    Prelude.rnf success
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteResourcePolicy.hs b/gen/Amazonka/CloudWatchLogs/DeleteResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteResourcePolicy.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteResourcePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a resource policy from this account. This revokes the access of
+-- the identities in that policy to put log events to this account.
+module Amazonka.CloudWatchLogs.DeleteResourcePolicy
+  ( -- * Creating a Request
+    DeleteResourcePolicy (..),
+    newDeleteResourcePolicy,
+
+    -- * Request Lenses
+    deleteResourcePolicy_policyName,
+
+    -- * Destructuring the Response
+    DeleteResourcePolicyResponse (..),
+    newDeleteResourcePolicyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteResourcePolicy' smart constructor.
+data DeleteResourcePolicy = DeleteResourcePolicy'
+  { -- | The name of the policy to be revoked. This parameter is required.
+    policyName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourcePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyName', 'deleteResourcePolicy_policyName' - The name of the policy to be revoked. This parameter is required.
+newDeleteResourcePolicy ::
+  DeleteResourcePolicy
+newDeleteResourcePolicy =
+  DeleteResourcePolicy' {policyName = Prelude.Nothing}
+
+-- | The name of the policy to be revoked. This parameter is required.
+deleteResourcePolicy_policyName :: Lens.Lens' DeleteResourcePolicy (Prelude.Maybe Prelude.Text)
+deleteResourcePolicy_policyName = Lens.lens (\DeleteResourcePolicy' {policyName} -> policyName) (\s@DeleteResourcePolicy' {} a -> s {policyName = a} :: DeleteResourcePolicy)
+
+instance Core.AWSRequest DeleteResourcePolicy where
+  type
+    AWSResponse DeleteResourcePolicy =
+      DeleteResourcePolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteResourcePolicyResponse'
+
+instance Prelude.Hashable DeleteResourcePolicy where
+  hashWithSalt _salt DeleteResourcePolicy' {..} =
+    _salt `Prelude.hashWithSalt` policyName
+
+instance Prelude.NFData DeleteResourcePolicy where
+  rnf DeleteResourcePolicy' {..} =
+    Prelude.rnf policyName
+
+instance Data.ToHeaders DeleteResourcePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteResourcePolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteResourcePolicy where
+  toJSON DeleteResourcePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("policyName" Data..=) Prelude.<$> policyName]
+      )
+
+instance Data.ToPath DeleteResourcePolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteResourcePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteResourcePolicyResponse' smart constructor.
+data DeleteResourcePolicyResponse = DeleteResourcePolicyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourcePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteResourcePolicyResponse ::
+  DeleteResourcePolicyResponse
+newDeleteResourcePolicyResponse =
+  DeleteResourcePolicyResponse'
+
+instance Prelude.NFData DeleteResourcePolicyResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteRetentionPolicy.hs b/gen/Amazonka/CloudWatchLogs/DeleteRetentionPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteRetentionPolicy.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteRetentionPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified retention policy.
+--
+-- Log events do not expire if they belong to log groups without a
+-- retention policy.
+module Amazonka.CloudWatchLogs.DeleteRetentionPolicy
+  ( -- * Creating a Request
+    DeleteRetentionPolicy (..),
+    newDeleteRetentionPolicy,
+
+    -- * Request Lenses
+    deleteRetentionPolicy_logGroupName,
+
+    -- * Destructuring the Response
+    DeleteRetentionPolicyResponse (..),
+    newDeleteRetentionPolicyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRetentionPolicy' smart constructor.
+data DeleteRetentionPolicy = DeleteRetentionPolicy'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRetentionPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'deleteRetentionPolicy_logGroupName' - The name of the log group.
+newDeleteRetentionPolicy ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  DeleteRetentionPolicy
+newDeleteRetentionPolicy pLogGroupName_ =
+  DeleteRetentionPolicy'
+    { logGroupName =
+        pLogGroupName_
+    }
+
+-- | The name of the log group.
+deleteRetentionPolicy_logGroupName :: Lens.Lens' DeleteRetentionPolicy Prelude.Text
+deleteRetentionPolicy_logGroupName = Lens.lens (\DeleteRetentionPolicy' {logGroupName} -> logGroupName) (\s@DeleteRetentionPolicy' {} a -> s {logGroupName = a} :: DeleteRetentionPolicy)
+
+instance Core.AWSRequest DeleteRetentionPolicy where
+  type
+    AWSResponse DeleteRetentionPolicy =
+      DeleteRetentionPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteRetentionPolicyResponse'
+
+instance Prelude.Hashable DeleteRetentionPolicy where
+  hashWithSalt _salt DeleteRetentionPolicy' {..} =
+    _salt `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData DeleteRetentionPolicy where
+  rnf DeleteRetentionPolicy' {..} =
+    Prelude.rnf logGroupName
+
+instance Data.ToHeaders DeleteRetentionPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteRetentionPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRetentionPolicy where
+  toJSON DeleteRetentionPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("logGroupName" Data..= logGroupName)]
+      )
+
+instance Data.ToPath DeleteRetentionPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteRetentionPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRetentionPolicyResponse' smart constructor.
+data DeleteRetentionPolicyResponse = DeleteRetentionPolicyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRetentionPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRetentionPolicyResponse ::
+  DeleteRetentionPolicyResponse
+newDeleteRetentionPolicyResponse =
+  DeleteRetentionPolicyResponse'
+
+instance Prelude.NFData DeleteRetentionPolicyResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DeleteSubscriptionFilter.hs b/gen/Amazonka/CloudWatchLogs/DeleteSubscriptionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DeleteSubscriptionFilter.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DeleteSubscriptionFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified subscription filter.
+module Amazonka.CloudWatchLogs.DeleteSubscriptionFilter
+  ( -- * Creating a Request
+    DeleteSubscriptionFilter (..),
+    newDeleteSubscriptionFilter,
+
+    -- * Request Lenses
+    deleteSubscriptionFilter_logGroupName,
+    deleteSubscriptionFilter_filterName,
+
+    -- * Destructuring the Response
+    DeleteSubscriptionFilterResponse (..),
+    newDeleteSubscriptionFilterResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSubscriptionFilter' smart constructor.
+data DeleteSubscriptionFilter = DeleteSubscriptionFilter'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The name of the subscription filter.
+    filterName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSubscriptionFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'deleteSubscriptionFilter_logGroupName' - The name of the log group.
+--
+-- 'filterName', 'deleteSubscriptionFilter_filterName' - The name of the subscription filter.
+newDeleteSubscriptionFilter ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'filterName'
+  Prelude.Text ->
+  DeleteSubscriptionFilter
+newDeleteSubscriptionFilter
+  pLogGroupName_
+  pFilterName_ =
+    DeleteSubscriptionFilter'
+      { logGroupName =
+          pLogGroupName_,
+        filterName = pFilterName_
+      }
+
+-- | The name of the log group.
+deleteSubscriptionFilter_logGroupName :: Lens.Lens' DeleteSubscriptionFilter Prelude.Text
+deleteSubscriptionFilter_logGroupName = Lens.lens (\DeleteSubscriptionFilter' {logGroupName} -> logGroupName) (\s@DeleteSubscriptionFilter' {} a -> s {logGroupName = a} :: DeleteSubscriptionFilter)
+
+-- | The name of the subscription filter.
+deleteSubscriptionFilter_filterName :: Lens.Lens' DeleteSubscriptionFilter Prelude.Text
+deleteSubscriptionFilter_filterName = Lens.lens (\DeleteSubscriptionFilter' {filterName} -> filterName) (\s@DeleteSubscriptionFilter' {} a -> s {filterName = a} :: DeleteSubscriptionFilter)
+
+instance Core.AWSRequest DeleteSubscriptionFilter where
+  type
+    AWSResponse DeleteSubscriptionFilter =
+      DeleteSubscriptionFilterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteSubscriptionFilterResponse'
+
+instance Prelude.Hashable DeleteSubscriptionFilter where
+  hashWithSalt _salt DeleteSubscriptionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` filterName
+
+instance Prelude.NFData DeleteSubscriptionFilter where
+  rnf DeleteSubscriptionFilter' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf filterName
+
+instance Data.ToHeaders DeleteSubscriptionFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DeleteSubscriptionFilter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSubscriptionFilter where
+  toJSON DeleteSubscriptionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("filterName" Data..= filterName)
+          ]
+      )
+
+instance Data.ToPath DeleteSubscriptionFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSubscriptionFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSubscriptionFilterResponse' smart constructor.
+data DeleteSubscriptionFilterResponse = DeleteSubscriptionFilterResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSubscriptionFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteSubscriptionFilterResponse ::
+  DeleteSubscriptionFilterResponse
+newDeleteSubscriptionFilterResponse =
+  DeleteSubscriptionFilterResponse'
+
+instance
+  Prelude.NFData
+    DeleteSubscriptionFilterResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeDestinations.hs b/gen/Amazonka/CloudWatchLogs/DescribeDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeDestinations.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeDestinations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all your destinations. The results are ASCII-sorted by destination
+-- name.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeDestinations
+  ( -- * Creating a Request
+    DescribeDestinations (..),
+    newDescribeDestinations,
+
+    -- * Request Lenses
+    describeDestinations_destinationNamePrefix,
+    describeDestinations_limit,
+    describeDestinations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeDestinationsResponse (..),
+    newDescribeDestinationsResponse,
+
+    -- * Response Lenses
+    describeDestinationsResponse_destinations,
+    describeDestinationsResponse_nextToken,
+    describeDestinationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDestinations' smart constructor.
+data DescribeDestinations = DescribeDestinations'
+  { -- | The prefix to match. If you don\'t specify a value, no prefix filter is
+    -- applied.
+    destinationNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of items returned. If you don\'t specify a value, the
+    -- default maximum value of 50 items is used.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDestinations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationNamePrefix', 'describeDestinations_destinationNamePrefix' - The prefix to match. If you don\'t specify a value, no prefix filter is
+-- applied.
+--
+-- 'limit', 'describeDestinations_limit' - The maximum number of items returned. If you don\'t specify a value, the
+-- default maximum value of 50 items is used.
+--
+-- 'nextToken', 'describeDestinations_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+newDescribeDestinations ::
+  DescribeDestinations
+newDescribeDestinations =
+  DescribeDestinations'
+    { destinationNamePrefix =
+        Prelude.Nothing,
+      limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The prefix to match. If you don\'t specify a value, no prefix filter is
+-- applied.
+describeDestinations_destinationNamePrefix :: Lens.Lens' DescribeDestinations (Prelude.Maybe Prelude.Text)
+describeDestinations_destinationNamePrefix = Lens.lens (\DescribeDestinations' {destinationNamePrefix} -> destinationNamePrefix) (\s@DescribeDestinations' {} a -> s {destinationNamePrefix = a} :: DescribeDestinations)
+
+-- | The maximum number of items returned. If you don\'t specify a value, the
+-- default maximum value of 50 items is used.
+describeDestinations_limit :: Lens.Lens' DescribeDestinations (Prelude.Maybe Prelude.Natural)
+describeDestinations_limit = Lens.lens (\DescribeDestinations' {limit} -> limit) (\s@DescribeDestinations' {} a -> s {limit = a} :: DescribeDestinations)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+describeDestinations_nextToken :: Lens.Lens' DescribeDestinations (Prelude.Maybe Prelude.Text)
+describeDestinations_nextToken = Lens.lens (\DescribeDestinations' {nextToken} -> nextToken) (\s@DescribeDestinations' {} a -> s {nextToken = a} :: DescribeDestinations)
+
+instance Core.AWSPager DescribeDestinations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeDestinationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeDestinationsResponse_destinations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeDestinations_nextToken
+          Lens..~ rs
+          Lens.^? describeDestinationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeDestinations where
+  type
+    AWSResponse DescribeDestinations =
+      DescribeDestinationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDestinationsResponse'
+            Prelude.<$> (x Data..?> "destinations" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDestinations where
+  hashWithSalt _salt DescribeDestinations' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationNamePrefix
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeDestinations where
+  rnf DescribeDestinations' {..} =
+    Prelude.rnf destinationNamePrefix
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeDestinations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeDestinations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDestinations where
+  toJSON DescribeDestinations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DestinationNamePrefix" Data..=)
+              Prelude.<$> destinationNamePrefix,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeDestinations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDestinations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDestinationsResponse' smart constructor.
+data DescribeDestinationsResponse = DescribeDestinationsResponse'
+  { -- | The destinations.
+    destinations :: Prelude.Maybe [Destination],
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDestinationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinations', 'describeDestinationsResponse_destinations' - The destinations.
+--
+-- 'nextToken', 'describeDestinationsResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'describeDestinationsResponse_httpStatus' - The response's http status code.
+newDescribeDestinationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDestinationsResponse
+newDescribeDestinationsResponse pHttpStatus_ =
+  DescribeDestinationsResponse'
+    { destinations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The destinations.
+describeDestinationsResponse_destinations :: Lens.Lens' DescribeDestinationsResponse (Prelude.Maybe [Destination])
+describeDestinationsResponse_destinations = Lens.lens (\DescribeDestinationsResponse' {destinations} -> destinations) (\s@DescribeDestinationsResponse' {} a -> s {destinations = a} :: DescribeDestinationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeDestinationsResponse_nextToken :: Lens.Lens' DescribeDestinationsResponse (Prelude.Maybe Prelude.Text)
+describeDestinationsResponse_nextToken = Lens.lens (\DescribeDestinationsResponse' {nextToken} -> nextToken) (\s@DescribeDestinationsResponse' {} a -> s {nextToken = a} :: DescribeDestinationsResponse)
+
+-- | The response's http status code.
+describeDestinationsResponse_httpStatus :: Lens.Lens' DescribeDestinationsResponse Prelude.Int
+describeDestinationsResponse_httpStatus = Lens.lens (\DescribeDestinationsResponse' {httpStatus} -> httpStatus) (\s@DescribeDestinationsResponse' {} a -> s {httpStatus = a} :: DescribeDestinationsResponse)
+
+instance Prelude.NFData DescribeDestinationsResponse where
+  rnf DescribeDestinationsResponse' {..} =
+    Prelude.rnf destinations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeExportTasks.hs b/gen/Amazonka/CloudWatchLogs/DescribeExportTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeExportTasks.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeExportTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the specified export tasks. You can list all your export tasks or
+-- filter the results based on task ID or task status.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeExportTasks
+  ( -- * Creating a Request
+    DescribeExportTasks (..),
+    newDescribeExportTasks,
+
+    -- * Request Lenses
+    describeExportTasks_limit,
+    describeExportTasks_nextToken,
+    describeExportTasks_statusCode,
+    describeExportTasks_taskId,
+
+    -- * Destructuring the Response
+    DescribeExportTasksResponse (..),
+    newDescribeExportTasksResponse,
+
+    -- * Response Lenses
+    describeExportTasksResponse_exportTasks,
+    describeExportTasksResponse_nextToken,
+    describeExportTasksResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExportTasks' smart constructor.
+data DescribeExportTasks = DescribeExportTasks'
+  { -- | The maximum number of items returned. If you don\'t specify a value, the
+    -- default is up to 50 items.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The status code of the export task. Specifying a status code filters the
+    -- results to zero or more export tasks.
+    statusCode :: Prelude.Maybe ExportTaskStatusCode,
+    -- | The ID of the export task. Specifying a task ID filters the results to
+    -- one or zero export tasks.
+    taskId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'limit', 'describeExportTasks_limit' - The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+--
+-- 'nextToken', 'describeExportTasks_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+--
+-- 'statusCode', 'describeExportTasks_statusCode' - The status code of the export task. Specifying a status code filters the
+-- results to zero or more export tasks.
+--
+-- 'taskId', 'describeExportTasks_taskId' - The ID of the export task. Specifying a task ID filters the results to
+-- one or zero export tasks.
+newDescribeExportTasks ::
+  DescribeExportTasks
+newDescribeExportTasks =
+  DescribeExportTasks'
+    { limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      taskId = Prelude.Nothing
+    }
+
+-- | The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+describeExportTasks_limit :: Lens.Lens' DescribeExportTasks (Prelude.Maybe Prelude.Natural)
+describeExportTasks_limit = Lens.lens (\DescribeExportTasks' {limit} -> limit) (\s@DescribeExportTasks' {} a -> s {limit = a} :: DescribeExportTasks)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+describeExportTasks_nextToken :: Lens.Lens' DescribeExportTasks (Prelude.Maybe Prelude.Text)
+describeExportTasks_nextToken = Lens.lens (\DescribeExportTasks' {nextToken} -> nextToken) (\s@DescribeExportTasks' {} a -> s {nextToken = a} :: DescribeExportTasks)
+
+-- | The status code of the export task. Specifying a status code filters the
+-- results to zero or more export tasks.
+describeExportTasks_statusCode :: Lens.Lens' DescribeExportTasks (Prelude.Maybe ExportTaskStatusCode)
+describeExportTasks_statusCode = Lens.lens (\DescribeExportTasks' {statusCode} -> statusCode) (\s@DescribeExportTasks' {} a -> s {statusCode = a} :: DescribeExportTasks)
+
+-- | The ID of the export task. Specifying a task ID filters the results to
+-- one or zero export tasks.
+describeExportTasks_taskId :: Lens.Lens' DescribeExportTasks (Prelude.Maybe Prelude.Text)
+describeExportTasks_taskId = Lens.lens (\DescribeExportTasks' {taskId} -> taskId) (\s@DescribeExportTasks' {} a -> s {taskId = a} :: DescribeExportTasks)
+
+instance Core.AWSPager DescribeExportTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeExportTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeExportTasksResponse_exportTasks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeExportTasks_nextToken
+          Lens..~ rs
+          Lens.^? describeExportTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeExportTasks where
+  type
+    AWSResponse DescribeExportTasks =
+      DescribeExportTasksResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeExportTasksResponse'
+            Prelude.<$> (x Data..?> "exportTasks" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeExportTasks where
+  hashWithSalt _salt DescribeExportTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` taskId
+
+instance Prelude.NFData DescribeExportTasks where
+  rnf DescribeExportTasks' {..} =
+    Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf taskId
+
+instance Data.ToHeaders DescribeExportTasks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeExportTasks" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeExportTasks where
+  toJSON DescribeExportTasks' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("limit" Data..=) Prelude.<$> limit,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("statusCode" Data..=) Prelude.<$> statusCode,
+            ("taskId" Data..=) Prelude.<$> taskId
+          ]
+      )
+
+instance Data.ToPath DescribeExportTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeExportTasks where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeExportTasksResponse' smart constructor.
+data DescribeExportTasksResponse = DescribeExportTasksResponse'
+  { -- | The export tasks.
+    exportTasks :: Prelude.Maybe [ExportTask],
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportTasks', 'describeExportTasksResponse_exportTasks' - The export tasks.
+--
+-- 'nextToken', 'describeExportTasksResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'describeExportTasksResponse_httpStatus' - The response's http status code.
+newDescribeExportTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExportTasksResponse
+newDescribeExportTasksResponse pHttpStatus_ =
+  DescribeExportTasksResponse'
+    { exportTasks =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The export tasks.
+describeExportTasksResponse_exportTasks :: Lens.Lens' DescribeExportTasksResponse (Prelude.Maybe [ExportTask])
+describeExportTasksResponse_exportTasks = Lens.lens (\DescribeExportTasksResponse' {exportTasks} -> exportTasks) (\s@DescribeExportTasksResponse' {} a -> s {exportTasks = a} :: DescribeExportTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeExportTasksResponse_nextToken :: Lens.Lens' DescribeExportTasksResponse (Prelude.Maybe Prelude.Text)
+describeExportTasksResponse_nextToken = Lens.lens (\DescribeExportTasksResponse' {nextToken} -> nextToken) (\s@DescribeExportTasksResponse' {} a -> s {nextToken = a} :: DescribeExportTasksResponse)
+
+-- | The response's http status code.
+describeExportTasksResponse_httpStatus :: Lens.Lens' DescribeExportTasksResponse Prelude.Int
+describeExportTasksResponse_httpStatus = Lens.lens (\DescribeExportTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeExportTasksResponse' {} a -> s {httpStatus = a} :: DescribeExportTasksResponse)
+
+instance Prelude.NFData DescribeExportTasksResponse where
+  rnf DescribeExportTasksResponse' {..} =
+    Prelude.rnf exportTasks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeLogGroups.hs b/gen/Amazonka/CloudWatchLogs/DescribeLogGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeLogGroups.hs
@@ -0,0 +1,375 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeLogGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the specified log groups. You can list all your log groups or
+-- filter the results by prefix. The results are ASCII-sorted by log group
+-- name.
+--
+-- CloudWatch Logs doesn’t support IAM policies that control access to the
+-- @DescribeLogGroups@ action by using the
+-- @aws:ResourceTag\/@/@key-name@/@ @ condition key. Other CloudWatch Logs
+-- actions do support the use of the @aws:ResourceTag\/@/@key-name@/@ @
+-- condition key to control access. For more information about using tags
+-- to control access, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html Controlling access to Amazon Web Services resources using tags>.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account and view data from the linked
+-- source accounts. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeLogGroups
+  ( -- * Creating a Request
+    DescribeLogGroups (..),
+    newDescribeLogGroups,
+
+    -- * Request Lenses
+    describeLogGroups_accountIdentifiers,
+    describeLogGroups_includeLinkedAccounts,
+    describeLogGroups_limit,
+    describeLogGroups_logGroupNamePattern,
+    describeLogGroups_logGroupNamePrefix,
+    describeLogGroups_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLogGroupsResponse (..),
+    newDescribeLogGroupsResponse,
+
+    -- * Response Lenses
+    describeLogGroupsResponse_logGroups,
+    describeLogGroupsResponse_nextToken,
+    describeLogGroupsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLogGroups' smart constructor.
+data DescribeLogGroups = DescribeLogGroups'
+  { -- | When @includeLinkedAccounts@ is set to @True@, use this parameter to
+    -- specify the list of accounts to search. You can specify as many as 20
+    -- account IDs in the array.
+    accountIdentifiers :: Prelude.Maybe [Prelude.Text],
+    -- | If you are using a monitoring account, set this to @True@ to have the
+    -- operation return log groups in the accounts listed in
+    -- @accountIdentifiers@.
+    --
+    -- If this parameter is set to @true@ and @accountIdentifiers@ contains a
+    -- null value, the operation returns all log groups in the monitoring
+    -- account and all log groups in all source accounts that are linked to the
+    -- monitoring account.
+    --
+    -- If you specify @includeLinkedAccounts@ in your request, then
+    -- @metricFilterCount@, @retentionInDays@, and @storedBytes@ are not
+    -- included in the response.
+    includeLinkedAccounts :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of items returned. If you don\'t specify a value, the
+    -- default is up to 50 items.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | If you specify a string for this parameter, the operation returns only
+    -- log groups that have names that match the string based on a
+    -- case-sensitive substring search. For example, if you specify @Foo@, log
+    -- groups named @FooBar@, @aws\/Foo@, and @GroupFoo@ would match, but
+    -- @foo@, @F\/o\/o@ and @Froo@ would not match.
+    --
+    -- @logGroupNamePattern@ and @logGroupNamePrefix@ are mutually exclusive.
+    -- Only one of these parameters can be passed.
+    logGroupNamePattern :: Prelude.Maybe Prelude.Text,
+    -- | The prefix to match.
+    --
+    -- @logGroupNamePrefix@ and @logGroupNamePattern@ are mutually exclusive.
+    -- Only one of these parameters can be passed.
+    logGroupNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLogGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountIdentifiers', 'describeLogGroups_accountIdentifiers' - When @includeLinkedAccounts@ is set to @True@, use this parameter to
+-- specify the list of accounts to search. You can specify as many as 20
+-- account IDs in the array.
+--
+-- 'includeLinkedAccounts', 'describeLogGroups_includeLinkedAccounts' - If you are using a monitoring account, set this to @True@ to have the
+-- operation return log groups in the accounts listed in
+-- @accountIdentifiers@.
+--
+-- If this parameter is set to @true@ and @accountIdentifiers@ contains a
+-- null value, the operation returns all log groups in the monitoring
+-- account and all log groups in all source accounts that are linked to the
+-- monitoring account.
+--
+-- If you specify @includeLinkedAccounts@ in your request, then
+-- @metricFilterCount@, @retentionInDays@, and @storedBytes@ are not
+-- included in the response.
+--
+-- 'limit', 'describeLogGroups_limit' - The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+--
+-- 'logGroupNamePattern', 'describeLogGroups_logGroupNamePattern' - If you specify a string for this parameter, the operation returns only
+-- log groups that have names that match the string based on a
+-- case-sensitive substring search. For example, if you specify @Foo@, log
+-- groups named @FooBar@, @aws\/Foo@, and @GroupFoo@ would match, but
+-- @foo@, @F\/o\/o@ and @Froo@ would not match.
+--
+-- @logGroupNamePattern@ and @logGroupNamePrefix@ are mutually exclusive.
+-- Only one of these parameters can be passed.
+--
+-- 'logGroupNamePrefix', 'describeLogGroups_logGroupNamePrefix' - The prefix to match.
+--
+-- @logGroupNamePrefix@ and @logGroupNamePattern@ are mutually exclusive.
+-- Only one of these parameters can be passed.
+--
+-- 'nextToken', 'describeLogGroups_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+newDescribeLogGroups ::
+  DescribeLogGroups
+newDescribeLogGroups =
+  DescribeLogGroups'
+    { accountIdentifiers =
+        Prelude.Nothing,
+      includeLinkedAccounts = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      logGroupNamePattern = Prelude.Nothing,
+      logGroupNamePrefix = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | When @includeLinkedAccounts@ is set to @True@, use this parameter to
+-- specify the list of accounts to search. You can specify as many as 20
+-- account IDs in the array.
+describeLogGroups_accountIdentifiers :: Lens.Lens' DescribeLogGroups (Prelude.Maybe [Prelude.Text])
+describeLogGroups_accountIdentifiers = Lens.lens (\DescribeLogGroups' {accountIdentifiers} -> accountIdentifiers) (\s@DescribeLogGroups' {} a -> s {accountIdentifiers = a} :: DescribeLogGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | If you are using a monitoring account, set this to @True@ to have the
+-- operation return log groups in the accounts listed in
+-- @accountIdentifiers@.
+--
+-- If this parameter is set to @true@ and @accountIdentifiers@ contains a
+-- null value, the operation returns all log groups in the monitoring
+-- account and all log groups in all source accounts that are linked to the
+-- monitoring account.
+--
+-- If you specify @includeLinkedAccounts@ in your request, then
+-- @metricFilterCount@, @retentionInDays@, and @storedBytes@ are not
+-- included in the response.
+describeLogGroups_includeLinkedAccounts :: Lens.Lens' DescribeLogGroups (Prelude.Maybe Prelude.Bool)
+describeLogGroups_includeLinkedAccounts = Lens.lens (\DescribeLogGroups' {includeLinkedAccounts} -> includeLinkedAccounts) (\s@DescribeLogGroups' {} a -> s {includeLinkedAccounts = a} :: DescribeLogGroups)
+
+-- | The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+describeLogGroups_limit :: Lens.Lens' DescribeLogGroups (Prelude.Maybe Prelude.Natural)
+describeLogGroups_limit = Lens.lens (\DescribeLogGroups' {limit} -> limit) (\s@DescribeLogGroups' {} a -> s {limit = a} :: DescribeLogGroups)
+
+-- | If you specify a string for this parameter, the operation returns only
+-- log groups that have names that match the string based on a
+-- case-sensitive substring search. For example, if you specify @Foo@, log
+-- groups named @FooBar@, @aws\/Foo@, and @GroupFoo@ would match, but
+-- @foo@, @F\/o\/o@ and @Froo@ would not match.
+--
+-- @logGroupNamePattern@ and @logGroupNamePrefix@ are mutually exclusive.
+-- Only one of these parameters can be passed.
+describeLogGroups_logGroupNamePattern :: Lens.Lens' DescribeLogGroups (Prelude.Maybe Prelude.Text)
+describeLogGroups_logGroupNamePattern = Lens.lens (\DescribeLogGroups' {logGroupNamePattern} -> logGroupNamePattern) (\s@DescribeLogGroups' {} a -> s {logGroupNamePattern = a} :: DescribeLogGroups)
+
+-- | The prefix to match.
+--
+-- @logGroupNamePrefix@ and @logGroupNamePattern@ are mutually exclusive.
+-- Only one of these parameters can be passed.
+describeLogGroups_logGroupNamePrefix :: Lens.Lens' DescribeLogGroups (Prelude.Maybe Prelude.Text)
+describeLogGroups_logGroupNamePrefix = Lens.lens (\DescribeLogGroups' {logGroupNamePrefix} -> logGroupNamePrefix) (\s@DescribeLogGroups' {} a -> s {logGroupNamePrefix = a} :: DescribeLogGroups)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+describeLogGroups_nextToken :: Lens.Lens' DescribeLogGroups (Prelude.Maybe Prelude.Text)
+describeLogGroups_nextToken = Lens.lens (\DescribeLogGroups' {nextToken} -> nextToken) (\s@DescribeLogGroups' {} a -> s {nextToken = a} :: DescribeLogGroups)
+
+instance Core.AWSPager DescribeLogGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLogGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLogGroupsResponse_logGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLogGroups_nextToken
+          Lens..~ rs
+          Lens.^? describeLogGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeLogGroups where
+  type
+    AWSResponse DescribeLogGroups =
+      DescribeLogGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLogGroupsResponse'
+            Prelude.<$> (x Data..?> "logGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLogGroups where
+  hashWithSalt _salt DescribeLogGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountIdentifiers
+      `Prelude.hashWithSalt` includeLinkedAccounts
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` logGroupNamePattern
+      `Prelude.hashWithSalt` logGroupNamePrefix
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeLogGroups where
+  rnf DescribeLogGroups' {..} =
+    Prelude.rnf accountIdentifiers
+      `Prelude.seq` Prelude.rnf includeLinkedAccounts
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf logGroupNamePattern
+      `Prelude.seq` Prelude.rnf logGroupNamePrefix
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeLogGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeLogGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLogGroups where
+  toJSON DescribeLogGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accountIdentifiers" Data..=)
+              Prelude.<$> accountIdentifiers,
+            ("includeLinkedAccounts" Data..=)
+              Prelude.<$> includeLinkedAccounts,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("logGroupNamePattern" Data..=)
+              Prelude.<$> logGroupNamePattern,
+            ("logGroupNamePrefix" Data..=)
+              Prelude.<$> logGroupNamePrefix,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeLogGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLogGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLogGroupsResponse' smart constructor.
+data DescribeLogGroupsResponse = DescribeLogGroupsResponse'
+  { -- | The log groups.
+    --
+    -- If the @retentionInDays@ value is not included for a log group, then
+    -- that log group\'s events do not expire.
+    logGroups :: Prelude.Maybe [LogGroup],
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLogGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroups', 'describeLogGroupsResponse_logGroups' - The log groups.
+--
+-- If the @retentionInDays@ value is not included for a log group, then
+-- that log group\'s events do not expire.
+--
+-- 'nextToken', 'describeLogGroupsResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'describeLogGroupsResponse_httpStatus' - The response's http status code.
+newDescribeLogGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLogGroupsResponse
+newDescribeLogGroupsResponse pHttpStatus_ =
+  DescribeLogGroupsResponse'
+    { logGroups =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The log groups.
+--
+-- If the @retentionInDays@ value is not included for a log group, then
+-- that log group\'s events do not expire.
+describeLogGroupsResponse_logGroups :: Lens.Lens' DescribeLogGroupsResponse (Prelude.Maybe [LogGroup])
+describeLogGroupsResponse_logGroups = Lens.lens (\DescribeLogGroupsResponse' {logGroups} -> logGroups) (\s@DescribeLogGroupsResponse' {} a -> s {logGroups = a} :: DescribeLogGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeLogGroupsResponse_nextToken :: Lens.Lens' DescribeLogGroupsResponse (Prelude.Maybe Prelude.Text)
+describeLogGroupsResponse_nextToken = Lens.lens (\DescribeLogGroupsResponse' {nextToken} -> nextToken) (\s@DescribeLogGroupsResponse' {} a -> s {nextToken = a} :: DescribeLogGroupsResponse)
+
+-- | The response's http status code.
+describeLogGroupsResponse_httpStatus :: Lens.Lens' DescribeLogGroupsResponse Prelude.Int
+describeLogGroupsResponse_httpStatus = Lens.lens (\DescribeLogGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribeLogGroupsResponse' {} a -> s {httpStatus = a} :: DescribeLogGroupsResponse)
+
+instance Prelude.NFData DescribeLogGroupsResponse where
+  rnf DescribeLogGroupsResponse' {..} =
+    Prelude.rnf logGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeLogStreams.hs b/gen/Amazonka/CloudWatchLogs/DescribeLogStreams.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeLogStreams.hs
@@ -0,0 +1,376 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeLogStreams
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the log streams for the specified log group. You can list all the
+-- log streams or filter the results by prefix. You can also control how
+-- the results are ordered.
+--
+-- This operation has a limit of five transactions per second, after which
+-- transactions are throttled.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account and view data from the linked
+-- source accounts. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeLogStreams
+  ( -- * Creating a Request
+    DescribeLogStreams (..),
+    newDescribeLogStreams,
+
+    -- * Request Lenses
+    describeLogStreams_descending,
+    describeLogStreams_limit,
+    describeLogStreams_logGroupIdentifier,
+    describeLogStreams_logStreamNamePrefix,
+    describeLogStreams_nextToken,
+    describeLogStreams_orderBy,
+    describeLogStreams_logGroupName,
+
+    -- * Destructuring the Response
+    DescribeLogStreamsResponse (..),
+    newDescribeLogStreamsResponse,
+
+    -- * Response Lenses
+    describeLogStreamsResponse_logStreams,
+    describeLogStreamsResponse_nextToken,
+    describeLogStreamsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLogStreams' smart constructor.
+data DescribeLogStreams = DescribeLogStreams'
+  { -- | If the value is true, results are returned in descending order. If the
+    -- value is to false, results are returned in ascending order. The default
+    -- value is false.
+    descending :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of items returned. If you don\'t specify a value, the
+    -- default is up to 50 items.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | Specify either the name or ARN of the log group to view. If the log
+    -- group is in a source account and you are using a monitoring account, you
+    -- must use the log group ARN.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The prefix to match.
+    --
+    -- If @orderBy@ is @LastEventTime@, you cannot specify this parameter.
+    logStreamNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | If the value is @LogStreamName@, the results are ordered by log stream
+    -- name. If the value is @LastEventTime@, the results are ordered by the
+    -- event time. The default value is @LogStreamName@.
+    --
+    -- If you order the results by event time, you cannot specify the
+    -- @logStreamNamePrefix@ parameter.
+    --
+    -- @lastEventTimestamp@ represents the time of the most recent log event in
+    -- the log stream in CloudWatch Logs. This number is expressed as the
+    -- number of milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+    -- @lastEventTimestamp@ updates on an eventual consistency basis. It
+    -- typically updates in less than an hour from ingestion, but in rare
+    -- situations might take longer.
+    orderBy :: Prelude.Maybe OrderBy,
+    -- | The name of the log group.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLogStreams' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'descending', 'describeLogStreams_descending' - If the value is true, results are returned in descending order. If the
+-- value is to false, results are returned in ascending order. The default
+-- value is false.
+--
+-- 'limit', 'describeLogStreams_limit' - The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+--
+-- 'logGroupIdentifier', 'describeLogStreams_logGroupIdentifier' - Specify either the name or ARN of the log group to view. If the log
+-- group is in a source account and you are using a monitoring account, you
+-- must use the log group ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+--
+-- 'logStreamNamePrefix', 'describeLogStreams_logStreamNamePrefix' - The prefix to match.
+--
+-- If @orderBy@ is @LastEventTime@, you cannot specify this parameter.
+--
+-- 'nextToken', 'describeLogStreams_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+--
+-- 'orderBy', 'describeLogStreams_orderBy' - If the value is @LogStreamName@, the results are ordered by log stream
+-- name. If the value is @LastEventTime@, the results are ordered by the
+-- event time. The default value is @LogStreamName@.
+--
+-- If you order the results by event time, you cannot specify the
+-- @logStreamNamePrefix@ parameter.
+--
+-- @lastEventTimestamp@ represents the time of the most recent log event in
+-- the log stream in CloudWatch Logs. This number is expressed as the
+-- number of milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+-- @lastEventTimestamp@ updates on an eventual consistency basis. It
+-- typically updates in less than an hour from ingestion, but in rare
+-- situations might take longer.
+--
+-- 'logGroupName', 'describeLogStreams_logGroupName' - The name of the log group.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+newDescribeLogStreams ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  DescribeLogStreams
+newDescribeLogStreams pLogGroupName_ =
+  DescribeLogStreams'
+    { descending = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      logGroupIdentifier = Prelude.Nothing,
+      logStreamNamePrefix = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      orderBy = Prelude.Nothing,
+      logGroupName = pLogGroupName_
+    }
+
+-- | If the value is true, results are returned in descending order. If the
+-- value is to false, results are returned in ascending order. The default
+-- value is false.
+describeLogStreams_descending :: Lens.Lens' DescribeLogStreams (Prelude.Maybe Prelude.Bool)
+describeLogStreams_descending = Lens.lens (\DescribeLogStreams' {descending} -> descending) (\s@DescribeLogStreams' {} a -> s {descending = a} :: DescribeLogStreams)
+
+-- | The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+describeLogStreams_limit :: Lens.Lens' DescribeLogStreams (Prelude.Maybe Prelude.Natural)
+describeLogStreams_limit = Lens.lens (\DescribeLogStreams' {limit} -> limit) (\s@DescribeLogStreams' {} a -> s {limit = a} :: DescribeLogStreams)
+
+-- | Specify either the name or ARN of the log group to view. If the log
+-- group is in a source account and you are using a monitoring account, you
+-- must use the log group ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+describeLogStreams_logGroupIdentifier :: Lens.Lens' DescribeLogStreams (Prelude.Maybe Prelude.Text)
+describeLogStreams_logGroupIdentifier = Lens.lens (\DescribeLogStreams' {logGroupIdentifier} -> logGroupIdentifier) (\s@DescribeLogStreams' {} a -> s {logGroupIdentifier = a} :: DescribeLogStreams)
+
+-- | The prefix to match.
+--
+-- If @orderBy@ is @LastEventTime@, you cannot specify this parameter.
+describeLogStreams_logStreamNamePrefix :: Lens.Lens' DescribeLogStreams (Prelude.Maybe Prelude.Text)
+describeLogStreams_logStreamNamePrefix = Lens.lens (\DescribeLogStreams' {logStreamNamePrefix} -> logStreamNamePrefix) (\s@DescribeLogStreams' {} a -> s {logStreamNamePrefix = a} :: DescribeLogStreams)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+describeLogStreams_nextToken :: Lens.Lens' DescribeLogStreams (Prelude.Maybe Prelude.Text)
+describeLogStreams_nextToken = Lens.lens (\DescribeLogStreams' {nextToken} -> nextToken) (\s@DescribeLogStreams' {} a -> s {nextToken = a} :: DescribeLogStreams)
+
+-- | If the value is @LogStreamName@, the results are ordered by log stream
+-- name. If the value is @LastEventTime@, the results are ordered by the
+-- event time. The default value is @LogStreamName@.
+--
+-- If you order the results by event time, you cannot specify the
+-- @logStreamNamePrefix@ parameter.
+--
+-- @lastEventTimestamp@ represents the time of the most recent log event in
+-- the log stream in CloudWatch Logs. This number is expressed as the
+-- number of milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+-- @lastEventTimestamp@ updates on an eventual consistency basis. It
+-- typically updates in less than an hour from ingestion, but in rare
+-- situations might take longer.
+describeLogStreams_orderBy :: Lens.Lens' DescribeLogStreams (Prelude.Maybe OrderBy)
+describeLogStreams_orderBy = Lens.lens (\DescribeLogStreams' {orderBy} -> orderBy) (\s@DescribeLogStreams' {} a -> s {orderBy = a} :: DescribeLogStreams)
+
+-- | The name of the log group.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+describeLogStreams_logGroupName :: Lens.Lens' DescribeLogStreams Prelude.Text
+describeLogStreams_logGroupName = Lens.lens (\DescribeLogStreams' {logGroupName} -> logGroupName) (\s@DescribeLogStreams' {} a -> s {logGroupName = a} :: DescribeLogStreams)
+
+instance Core.AWSPager DescribeLogStreams where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLogStreamsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLogStreamsResponse_logStreams
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLogStreams_nextToken
+          Lens..~ rs
+          Lens.^? describeLogStreamsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeLogStreams where
+  type
+    AWSResponse DescribeLogStreams =
+      DescribeLogStreamsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLogStreamsResponse'
+            Prelude.<$> (x Data..?> "logStreams" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLogStreams where
+  hashWithSalt _salt DescribeLogStreams' {..} =
+    _salt
+      `Prelude.hashWithSalt` descending
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` logGroupIdentifier
+      `Prelude.hashWithSalt` logStreamNamePrefix
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` orderBy
+      `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData DescribeLogStreams where
+  rnf DescribeLogStreams' {..} =
+    Prelude.rnf descending
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf logStreamNamePrefix
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf orderBy
+      `Prelude.seq` Prelude.rnf logGroupName
+
+instance Data.ToHeaders DescribeLogStreams where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeLogStreams" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeLogStreams where
+  toJSON DescribeLogStreams' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("descending" Data..=) Prelude.<$> descending,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("logGroupIdentifier" Data..=)
+              Prelude.<$> logGroupIdentifier,
+            ("logStreamNamePrefix" Data..=)
+              Prelude.<$> logStreamNamePrefix,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("orderBy" Data..=) Prelude.<$> orderBy,
+            Prelude.Just ("logGroupName" Data..= logGroupName)
+          ]
+      )
+
+instance Data.ToPath DescribeLogStreams where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLogStreams where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLogStreamsResponse' smart constructor.
+data DescribeLogStreamsResponse = DescribeLogStreamsResponse'
+  { -- | The log streams.
+    logStreams :: Prelude.Maybe [LogStream],
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLogStreamsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logStreams', 'describeLogStreamsResponse_logStreams' - The log streams.
+--
+-- 'nextToken', 'describeLogStreamsResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'describeLogStreamsResponse_httpStatus' - The response's http status code.
+newDescribeLogStreamsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLogStreamsResponse
+newDescribeLogStreamsResponse pHttpStatus_ =
+  DescribeLogStreamsResponse'
+    { logStreams =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The log streams.
+describeLogStreamsResponse_logStreams :: Lens.Lens' DescribeLogStreamsResponse (Prelude.Maybe [LogStream])
+describeLogStreamsResponse_logStreams = Lens.lens (\DescribeLogStreamsResponse' {logStreams} -> logStreams) (\s@DescribeLogStreamsResponse' {} a -> s {logStreams = a} :: DescribeLogStreamsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeLogStreamsResponse_nextToken :: Lens.Lens' DescribeLogStreamsResponse (Prelude.Maybe Prelude.Text)
+describeLogStreamsResponse_nextToken = Lens.lens (\DescribeLogStreamsResponse' {nextToken} -> nextToken) (\s@DescribeLogStreamsResponse' {} a -> s {nextToken = a} :: DescribeLogStreamsResponse)
+
+-- | The response's http status code.
+describeLogStreamsResponse_httpStatus :: Lens.Lens' DescribeLogStreamsResponse Prelude.Int
+describeLogStreamsResponse_httpStatus = Lens.lens (\DescribeLogStreamsResponse' {httpStatus} -> httpStatus) (\s@DescribeLogStreamsResponse' {} a -> s {httpStatus = a} :: DescribeLogStreamsResponse)
+
+instance Prelude.NFData DescribeLogStreamsResponse where
+  rnf DescribeLogStreamsResponse' {..} =
+    Prelude.rnf logStreams
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeMetricFilters.hs b/gen/Amazonka/CloudWatchLogs/DescribeMetricFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeMetricFilters.hs
@@ -0,0 +1,297 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeMetricFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the specified metric filters. You can list all of the metric
+-- filters or filter the results by log name, prefix, metric name, or
+-- metric namespace. The results are ASCII-sorted by filter name.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeMetricFilters
+  ( -- * Creating a Request
+    DescribeMetricFilters (..),
+    newDescribeMetricFilters,
+
+    -- * Request Lenses
+    describeMetricFilters_filterNamePrefix,
+    describeMetricFilters_limit,
+    describeMetricFilters_logGroupName,
+    describeMetricFilters_metricName,
+    describeMetricFilters_metricNamespace,
+    describeMetricFilters_nextToken,
+
+    -- * Destructuring the Response
+    DescribeMetricFiltersResponse (..),
+    newDescribeMetricFiltersResponse,
+
+    -- * Response Lenses
+    describeMetricFiltersResponse_metricFilters,
+    describeMetricFiltersResponse_nextToken,
+    describeMetricFiltersResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeMetricFilters' smart constructor.
+data DescribeMetricFilters = DescribeMetricFilters'
+  { -- | The prefix to match. CloudWatch Logs uses the value that you set here
+    -- only if you also include the @logGroupName@ parameter in your request.
+    filterNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of items returned. If you don\'t specify a value, the
+    -- default is up to 50 items.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | Filters results to include only those with the specified metric name. If
+    -- you include this parameter in your request, you must also include the
+    -- @metricNamespace@ parameter.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | Filters results to include only those in the specified namespace. If you
+    -- include this parameter in your request, you must also include the
+    -- @metricName@ parameter.
+    metricNamespace :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMetricFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterNamePrefix', 'describeMetricFilters_filterNamePrefix' - The prefix to match. CloudWatch Logs uses the value that you set here
+-- only if you also include the @logGroupName@ parameter in your request.
+--
+-- 'limit', 'describeMetricFilters_limit' - The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+--
+-- 'logGroupName', 'describeMetricFilters_logGroupName' - The name of the log group.
+--
+-- 'metricName', 'describeMetricFilters_metricName' - Filters results to include only those with the specified metric name. If
+-- you include this parameter in your request, you must also include the
+-- @metricNamespace@ parameter.
+--
+-- 'metricNamespace', 'describeMetricFilters_metricNamespace' - Filters results to include only those in the specified namespace. If you
+-- include this parameter in your request, you must also include the
+-- @metricName@ parameter.
+--
+-- 'nextToken', 'describeMetricFilters_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+newDescribeMetricFilters ::
+  DescribeMetricFilters
+newDescribeMetricFilters =
+  DescribeMetricFilters'
+    { filterNamePrefix =
+        Prelude.Nothing,
+      limit = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      metricName = Prelude.Nothing,
+      metricNamespace = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The prefix to match. CloudWatch Logs uses the value that you set here
+-- only if you also include the @logGroupName@ parameter in your request.
+describeMetricFilters_filterNamePrefix :: Lens.Lens' DescribeMetricFilters (Prelude.Maybe Prelude.Text)
+describeMetricFilters_filterNamePrefix = Lens.lens (\DescribeMetricFilters' {filterNamePrefix} -> filterNamePrefix) (\s@DescribeMetricFilters' {} a -> s {filterNamePrefix = a} :: DescribeMetricFilters)
+
+-- | The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+describeMetricFilters_limit :: Lens.Lens' DescribeMetricFilters (Prelude.Maybe Prelude.Natural)
+describeMetricFilters_limit = Lens.lens (\DescribeMetricFilters' {limit} -> limit) (\s@DescribeMetricFilters' {} a -> s {limit = a} :: DescribeMetricFilters)
+
+-- | The name of the log group.
+describeMetricFilters_logGroupName :: Lens.Lens' DescribeMetricFilters (Prelude.Maybe Prelude.Text)
+describeMetricFilters_logGroupName = Lens.lens (\DescribeMetricFilters' {logGroupName} -> logGroupName) (\s@DescribeMetricFilters' {} a -> s {logGroupName = a} :: DescribeMetricFilters)
+
+-- | Filters results to include only those with the specified metric name. If
+-- you include this parameter in your request, you must also include the
+-- @metricNamespace@ parameter.
+describeMetricFilters_metricName :: Lens.Lens' DescribeMetricFilters (Prelude.Maybe Prelude.Text)
+describeMetricFilters_metricName = Lens.lens (\DescribeMetricFilters' {metricName} -> metricName) (\s@DescribeMetricFilters' {} a -> s {metricName = a} :: DescribeMetricFilters)
+
+-- | Filters results to include only those in the specified namespace. If you
+-- include this parameter in your request, you must also include the
+-- @metricName@ parameter.
+describeMetricFilters_metricNamespace :: Lens.Lens' DescribeMetricFilters (Prelude.Maybe Prelude.Text)
+describeMetricFilters_metricNamespace = Lens.lens (\DescribeMetricFilters' {metricNamespace} -> metricNamespace) (\s@DescribeMetricFilters' {} a -> s {metricNamespace = a} :: DescribeMetricFilters)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+describeMetricFilters_nextToken :: Lens.Lens' DescribeMetricFilters (Prelude.Maybe Prelude.Text)
+describeMetricFilters_nextToken = Lens.lens (\DescribeMetricFilters' {nextToken} -> nextToken) (\s@DescribeMetricFilters' {} a -> s {nextToken = a} :: DescribeMetricFilters)
+
+instance Core.AWSPager DescribeMetricFilters where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeMetricFiltersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeMetricFiltersResponse_metricFilters
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeMetricFilters_nextToken
+          Lens..~ rs
+          Lens.^? describeMetricFiltersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeMetricFilters where
+  type
+    AWSResponse DescribeMetricFilters =
+      DescribeMetricFiltersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeMetricFiltersResponse'
+            Prelude.<$> (x Data..?> "metricFilters" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeMetricFilters where
+  hashWithSalt _salt DescribeMetricFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterNamePrefix
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` metricNamespace
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeMetricFilters where
+  rnf DescribeMetricFilters' {..} =
+    Prelude.rnf filterNamePrefix
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf metricNamespace
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeMetricFilters where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeMetricFilters" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeMetricFilters where
+  toJSON DescribeMetricFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filterNamePrefix" Data..=)
+              Prelude.<$> filterNamePrefix,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("logGroupName" Data..=) Prelude.<$> logGroupName,
+            ("metricName" Data..=) Prelude.<$> metricName,
+            ("metricNamespace" Data..=)
+              Prelude.<$> metricNamespace,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeMetricFilters where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeMetricFilters where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeMetricFiltersResponse' smart constructor.
+data DescribeMetricFiltersResponse = DescribeMetricFiltersResponse'
+  { -- | The metric filters.
+    metricFilters :: Prelude.Maybe [MetricFilter],
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMetricFiltersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricFilters', 'describeMetricFiltersResponse_metricFilters' - The metric filters.
+--
+-- 'nextToken', 'describeMetricFiltersResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'describeMetricFiltersResponse_httpStatus' - The response's http status code.
+newDescribeMetricFiltersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeMetricFiltersResponse
+newDescribeMetricFiltersResponse pHttpStatus_ =
+  DescribeMetricFiltersResponse'
+    { metricFilters =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The metric filters.
+describeMetricFiltersResponse_metricFilters :: Lens.Lens' DescribeMetricFiltersResponse (Prelude.Maybe [MetricFilter])
+describeMetricFiltersResponse_metricFilters = Lens.lens (\DescribeMetricFiltersResponse' {metricFilters} -> metricFilters) (\s@DescribeMetricFiltersResponse' {} a -> s {metricFilters = a} :: DescribeMetricFiltersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeMetricFiltersResponse_nextToken :: Lens.Lens' DescribeMetricFiltersResponse (Prelude.Maybe Prelude.Text)
+describeMetricFiltersResponse_nextToken = Lens.lens (\DescribeMetricFiltersResponse' {nextToken} -> nextToken) (\s@DescribeMetricFiltersResponse' {} a -> s {nextToken = a} :: DescribeMetricFiltersResponse)
+
+-- | The response's http status code.
+describeMetricFiltersResponse_httpStatus :: Lens.Lens' DescribeMetricFiltersResponse Prelude.Int
+describeMetricFiltersResponse_httpStatus = Lens.lens (\DescribeMetricFiltersResponse' {httpStatus} -> httpStatus) (\s@DescribeMetricFiltersResponse' {} a -> s {httpStatus = a} :: DescribeMetricFiltersResponse)
+
+instance Prelude.NFData DescribeMetricFiltersResponse where
+  rnf DescribeMetricFiltersResponse' {..} =
+    Prelude.rnf metricFilters
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeQueries.hs b/gen/Amazonka/CloudWatchLogs/DescribeQueries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeQueries.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeQueries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of CloudWatch Logs Insights queries that are scheduled,
+-- running, or have been run recently in this account. You can request all
+-- queries or limit it to queries of a specific log group or queries with a
+-- certain status.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeQueries
+  ( -- * Creating a Request
+    DescribeQueries (..),
+    newDescribeQueries,
+
+    -- * Request Lenses
+    describeQueries_logGroupName,
+    describeQueries_maxResults,
+    describeQueries_nextToken,
+    describeQueries_status,
+
+    -- * Destructuring the Response
+    DescribeQueriesResponse (..),
+    newDescribeQueriesResponse,
+
+    -- * Response Lenses
+    describeQueriesResponse_nextToken,
+    describeQueriesResponse_queries,
+    describeQueriesResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeQueries' smart constructor.
+data DescribeQueries = DescribeQueries'
+  { -- | Limits the returned queries to only those for the specified log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | Limits the number of returned queries to the specified number.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Limits the returned queries to only those that have the specified
+    -- status. Valid values are @Cancelled@, @Complete@, @Failed@, @Running@,
+    -- and @Scheduled@.
+    status :: Prelude.Maybe QueryStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQueries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'describeQueries_logGroupName' - Limits the returned queries to only those for the specified log group.
+--
+-- 'maxResults', 'describeQueries_maxResults' - Limits the number of returned queries to the specified number.
+--
+-- 'nextToken', 'describeQueries_nextToken' - Undocumented member.
+--
+-- 'status', 'describeQueries_status' - Limits the returned queries to only those that have the specified
+-- status. Valid values are @Cancelled@, @Complete@, @Failed@, @Running@,
+-- and @Scheduled@.
+newDescribeQueries ::
+  DescribeQueries
+newDescribeQueries =
+  DescribeQueries'
+    { logGroupName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Limits the returned queries to only those for the specified log group.
+describeQueries_logGroupName :: Lens.Lens' DescribeQueries (Prelude.Maybe Prelude.Text)
+describeQueries_logGroupName = Lens.lens (\DescribeQueries' {logGroupName} -> logGroupName) (\s@DescribeQueries' {} a -> s {logGroupName = a} :: DescribeQueries)
+
+-- | Limits the number of returned queries to the specified number.
+describeQueries_maxResults :: Lens.Lens' DescribeQueries (Prelude.Maybe Prelude.Natural)
+describeQueries_maxResults = Lens.lens (\DescribeQueries' {maxResults} -> maxResults) (\s@DescribeQueries' {} a -> s {maxResults = a} :: DescribeQueries)
+
+-- | Undocumented member.
+describeQueries_nextToken :: Lens.Lens' DescribeQueries (Prelude.Maybe Prelude.Text)
+describeQueries_nextToken = Lens.lens (\DescribeQueries' {nextToken} -> nextToken) (\s@DescribeQueries' {} a -> s {nextToken = a} :: DescribeQueries)
+
+-- | Limits the returned queries to only those that have the specified
+-- status. Valid values are @Cancelled@, @Complete@, @Failed@, @Running@,
+-- and @Scheduled@.
+describeQueries_status :: Lens.Lens' DescribeQueries (Prelude.Maybe QueryStatus)
+describeQueries_status = Lens.lens (\DescribeQueries' {status} -> status) (\s@DescribeQueries' {} a -> s {status = a} :: DescribeQueries)
+
+instance Core.AWSPager DescribeQueries where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeQueriesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeQueriesResponse_queries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeQueries_nextToken
+          Lens..~ rs
+          Lens.^? describeQueriesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeQueries where
+  type
+    AWSResponse DescribeQueries =
+      DescribeQueriesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeQueriesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "queries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeQueries where
+  hashWithSalt _salt DescribeQueries' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DescribeQueries where
+  rnf DescribeQueries' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders DescribeQueries where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeQueries" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeQueries where
+  toJSON DescribeQueries' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("logGroupName" Data..=) Prelude.<$> logGroupName,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("status" Data..=) Prelude.<$> status
+          ]
+      )
+
+instance Data.ToPath DescribeQueries where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeQueries where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeQueriesResponse' smart constructor.
+data DescribeQueriesResponse = DescribeQueriesResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of queries that match the request.
+    queries :: Prelude.Maybe [QueryInfo],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQueriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeQueriesResponse_nextToken' - Undocumented member.
+--
+-- 'queries', 'describeQueriesResponse_queries' - The list of queries that match the request.
+--
+-- 'httpStatus', 'describeQueriesResponse_httpStatus' - The response's http status code.
+newDescribeQueriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeQueriesResponse
+newDescribeQueriesResponse pHttpStatus_ =
+  DescribeQueriesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      queries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeQueriesResponse_nextToken :: Lens.Lens' DescribeQueriesResponse (Prelude.Maybe Prelude.Text)
+describeQueriesResponse_nextToken = Lens.lens (\DescribeQueriesResponse' {nextToken} -> nextToken) (\s@DescribeQueriesResponse' {} a -> s {nextToken = a} :: DescribeQueriesResponse)
+
+-- | The list of queries that match the request.
+describeQueriesResponse_queries :: Lens.Lens' DescribeQueriesResponse (Prelude.Maybe [QueryInfo])
+describeQueriesResponse_queries = Lens.lens (\DescribeQueriesResponse' {queries} -> queries) (\s@DescribeQueriesResponse' {} a -> s {queries = a} :: DescribeQueriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeQueriesResponse_httpStatus :: Lens.Lens' DescribeQueriesResponse Prelude.Int
+describeQueriesResponse_httpStatus = Lens.lens (\DescribeQueriesResponse' {httpStatus} -> httpStatus) (\s@DescribeQueriesResponse' {} a -> s {httpStatus = a} :: DescribeQueriesResponse)
+
+instance Prelude.NFData DescribeQueriesResponse where
+  rnf DescribeQueriesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf queries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeQueryDefinitions.hs b/gen/Amazonka/CloudWatchLogs/DescribeQueryDefinitions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeQueryDefinitions.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeQueryDefinitions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation returns a paginated list of your saved CloudWatch Logs
+-- Insights query definitions.
+--
+-- You can use the @queryDefinitionNamePrefix@ parameter to limit the
+-- results to only the query definitions that have names that start with a
+-- certain string.
+module Amazonka.CloudWatchLogs.DescribeQueryDefinitions
+  ( -- * Creating a Request
+    DescribeQueryDefinitions (..),
+    newDescribeQueryDefinitions,
+
+    -- * Request Lenses
+    describeQueryDefinitions_maxResults,
+    describeQueryDefinitions_nextToken,
+    describeQueryDefinitions_queryDefinitionNamePrefix,
+
+    -- * Destructuring the Response
+    DescribeQueryDefinitionsResponse (..),
+    newDescribeQueryDefinitionsResponse,
+
+    -- * Response Lenses
+    describeQueryDefinitionsResponse_nextToken,
+    describeQueryDefinitionsResponse_queryDefinitions,
+    describeQueryDefinitionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeQueryDefinitions' smart constructor.
+data DescribeQueryDefinitions = DescribeQueryDefinitions'
+  { -- | Limits the number of returned query definitions to the specified number.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Use this parameter to filter your results to only the query definitions
+    -- that have names that start with the prefix you specify.
+    queryDefinitionNamePrefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQueryDefinitions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'describeQueryDefinitions_maxResults' - Limits the number of returned query definitions to the specified number.
+--
+-- 'nextToken', 'describeQueryDefinitions_nextToken' - Undocumented member.
+--
+-- 'queryDefinitionNamePrefix', 'describeQueryDefinitions_queryDefinitionNamePrefix' - Use this parameter to filter your results to only the query definitions
+-- that have names that start with the prefix you specify.
+newDescribeQueryDefinitions ::
+  DescribeQueryDefinitions
+newDescribeQueryDefinitions =
+  DescribeQueryDefinitions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      queryDefinitionNamePrefix = Prelude.Nothing
+    }
+
+-- | Limits the number of returned query definitions to the specified number.
+describeQueryDefinitions_maxResults :: Lens.Lens' DescribeQueryDefinitions (Prelude.Maybe Prelude.Natural)
+describeQueryDefinitions_maxResults = Lens.lens (\DescribeQueryDefinitions' {maxResults} -> maxResults) (\s@DescribeQueryDefinitions' {} a -> s {maxResults = a} :: DescribeQueryDefinitions)
+
+-- | Undocumented member.
+describeQueryDefinitions_nextToken :: Lens.Lens' DescribeQueryDefinitions (Prelude.Maybe Prelude.Text)
+describeQueryDefinitions_nextToken = Lens.lens (\DescribeQueryDefinitions' {nextToken} -> nextToken) (\s@DescribeQueryDefinitions' {} a -> s {nextToken = a} :: DescribeQueryDefinitions)
+
+-- | Use this parameter to filter your results to only the query definitions
+-- that have names that start with the prefix you specify.
+describeQueryDefinitions_queryDefinitionNamePrefix :: Lens.Lens' DescribeQueryDefinitions (Prelude.Maybe Prelude.Text)
+describeQueryDefinitions_queryDefinitionNamePrefix = Lens.lens (\DescribeQueryDefinitions' {queryDefinitionNamePrefix} -> queryDefinitionNamePrefix) (\s@DescribeQueryDefinitions' {} a -> s {queryDefinitionNamePrefix = a} :: DescribeQueryDefinitions)
+
+instance Core.AWSRequest DescribeQueryDefinitions where
+  type
+    AWSResponse DescribeQueryDefinitions =
+      DescribeQueryDefinitionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeQueryDefinitionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "queryDefinitions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeQueryDefinitions where
+  hashWithSalt _salt DescribeQueryDefinitions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` queryDefinitionNamePrefix
+
+instance Prelude.NFData DescribeQueryDefinitions where
+  rnf DescribeQueryDefinitions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf queryDefinitionNamePrefix
+
+instance Data.ToHeaders DescribeQueryDefinitions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeQueryDefinitions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeQueryDefinitions where
+  toJSON DescribeQueryDefinitions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("queryDefinitionNamePrefix" Data..=)
+              Prelude.<$> queryDefinitionNamePrefix
+          ]
+      )
+
+instance Data.ToPath DescribeQueryDefinitions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeQueryDefinitions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeQueryDefinitionsResponse' smart constructor.
+data DescribeQueryDefinitionsResponse = DescribeQueryDefinitionsResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of query definitions that match your request.
+    queryDefinitions :: Prelude.Maybe [QueryDefinition],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQueryDefinitionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeQueryDefinitionsResponse_nextToken' - Undocumented member.
+--
+-- 'queryDefinitions', 'describeQueryDefinitionsResponse_queryDefinitions' - The list of query definitions that match your request.
+--
+-- 'httpStatus', 'describeQueryDefinitionsResponse_httpStatus' - The response's http status code.
+newDescribeQueryDefinitionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeQueryDefinitionsResponse
+newDescribeQueryDefinitionsResponse pHttpStatus_ =
+  DescribeQueryDefinitionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      queryDefinitions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeQueryDefinitionsResponse_nextToken :: Lens.Lens' DescribeQueryDefinitionsResponse (Prelude.Maybe Prelude.Text)
+describeQueryDefinitionsResponse_nextToken = Lens.lens (\DescribeQueryDefinitionsResponse' {nextToken} -> nextToken) (\s@DescribeQueryDefinitionsResponse' {} a -> s {nextToken = a} :: DescribeQueryDefinitionsResponse)
+
+-- | The list of query definitions that match your request.
+describeQueryDefinitionsResponse_queryDefinitions :: Lens.Lens' DescribeQueryDefinitionsResponse (Prelude.Maybe [QueryDefinition])
+describeQueryDefinitionsResponse_queryDefinitions = Lens.lens (\DescribeQueryDefinitionsResponse' {queryDefinitions} -> queryDefinitions) (\s@DescribeQueryDefinitionsResponse' {} a -> s {queryDefinitions = a} :: DescribeQueryDefinitionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeQueryDefinitionsResponse_httpStatus :: Lens.Lens' DescribeQueryDefinitionsResponse Prelude.Int
+describeQueryDefinitionsResponse_httpStatus = Lens.lens (\DescribeQueryDefinitionsResponse' {httpStatus} -> httpStatus) (\s@DescribeQueryDefinitionsResponse' {} a -> s {httpStatus = a} :: DescribeQueryDefinitionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeQueryDefinitionsResponse
+  where
+  rnf DescribeQueryDefinitionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf queryDefinitions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeResourcePolicies.hs b/gen/Amazonka/CloudWatchLogs/DescribeResourcePolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeResourcePolicies.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeResourcePolicies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the resource policies in this account.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeResourcePolicies
+  ( -- * Creating a Request
+    DescribeResourcePolicies (..),
+    newDescribeResourcePolicies,
+
+    -- * Request Lenses
+    describeResourcePolicies_limit,
+    describeResourcePolicies_nextToken,
+
+    -- * Destructuring the Response
+    DescribeResourcePoliciesResponse (..),
+    newDescribeResourcePoliciesResponse,
+
+    -- * Response Lenses
+    describeResourcePoliciesResponse_nextToken,
+    describeResourcePoliciesResponse_resourcePolicies,
+    describeResourcePoliciesResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeResourcePolicies' smart constructor.
+data DescribeResourcePolicies = DescribeResourcePolicies'
+  { -- | The maximum number of resource policies to be displayed with one call of
+    -- this API.
+    limit :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResourcePolicies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'limit', 'describeResourcePolicies_limit' - The maximum number of resource policies to be displayed with one call of
+-- this API.
+--
+-- 'nextToken', 'describeResourcePolicies_nextToken' - Undocumented member.
+newDescribeResourcePolicies ::
+  DescribeResourcePolicies
+newDescribeResourcePolicies =
+  DescribeResourcePolicies'
+    { limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of resource policies to be displayed with one call of
+-- this API.
+describeResourcePolicies_limit :: Lens.Lens' DescribeResourcePolicies (Prelude.Maybe Prelude.Natural)
+describeResourcePolicies_limit = Lens.lens (\DescribeResourcePolicies' {limit} -> limit) (\s@DescribeResourcePolicies' {} a -> s {limit = a} :: DescribeResourcePolicies)
+
+-- | Undocumented member.
+describeResourcePolicies_nextToken :: Lens.Lens' DescribeResourcePolicies (Prelude.Maybe Prelude.Text)
+describeResourcePolicies_nextToken = Lens.lens (\DescribeResourcePolicies' {nextToken} -> nextToken) (\s@DescribeResourcePolicies' {} a -> s {nextToken = a} :: DescribeResourcePolicies)
+
+instance Core.AWSPager DescribeResourcePolicies where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeResourcePoliciesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeResourcePoliciesResponse_resourcePolicies
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeResourcePolicies_nextToken
+          Lens..~ rs
+          Lens.^? describeResourcePoliciesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeResourcePolicies where
+  type
+    AWSResponse DescribeResourcePolicies =
+      DescribeResourcePoliciesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeResourcePoliciesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "resourcePolicies"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeResourcePolicies where
+  hashWithSalt _salt DescribeResourcePolicies' {..} =
+    _salt
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeResourcePolicies where
+  rnf DescribeResourcePolicies' {..} =
+    Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeResourcePolicies where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeResourcePolicies" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeResourcePolicies where
+  toJSON DescribeResourcePolicies' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("limit" Data..=) Prelude.<$> limit,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeResourcePolicies where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeResourcePolicies where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeResourcePoliciesResponse' smart constructor.
+data DescribeResourcePoliciesResponse = DescribeResourcePoliciesResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The resource policies that exist in this account.
+    resourcePolicies :: Prelude.Maybe [ResourcePolicy],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResourcePoliciesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeResourcePoliciesResponse_nextToken' - Undocumented member.
+--
+-- 'resourcePolicies', 'describeResourcePoliciesResponse_resourcePolicies' - The resource policies that exist in this account.
+--
+-- 'httpStatus', 'describeResourcePoliciesResponse_httpStatus' - The response's http status code.
+newDescribeResourcePoliciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeResourcePoliciesResponse
+newDescribeResourcePoliciesResponse pHttpStatus_ =
+  DescribeResourcePoliciesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      resourcePolicies = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeResourcePoliciesResponse_nextToken :: Lens.Lens' DescribeResourcePoliciesResponse (Prelude.Maybe Prelude.Text)
+describeResourcePoliciesResponse_nextToken = Lens.lens (\DescribeResourcePoliciesResponse' {nextToken} -> nextToken) (\s@DescribeResourcePoliciesResponse' {} a -> s {nextToken = a} :: DescribeResourcePoliciesResponse)
+
+-- | The resource policies that exist in this account.
+describeResourcePoliciesResponse_resourcePolicies :: Lens.Lens' DescribeResourcePoliciesResponse (Prelude.Maybe [ResourcePolicy])
+describeResourcePoliciesResponse_resourcePolicies = Lens.lens (\DescribeResourcePoliciesResponse' {resourcePolicies} -> resourcePolicies) (\s@DescribeResourcePoliciesResponse' {} a -> s {resourcePolicies = a} :: DescribeResourcePoliciesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeResourcePoliciesResponse_httpStatus :: Lens.Lens' DescribeResourcePoliciesResponse Prelude.Int
+describeResourcePoliciesResponse_httpStatus = Lens.lens (\DescribeResourcePoliciesResponse' {httpStatus} -> httpStatus) (\s@DescribeResourcePoliciesResponse' {} a -> s {httpStatus = a} :: DescribeResourcePoliciesResponse)
+
+instance
+  Prelude.NFData
+    DescribeResourcePoliciesResponse
+  where
+  rnf DescribeResourcePoliciesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourcePolicies
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DescribeSubscriptionFilters.hs b/gen/Amazonka/CloudWatchLogs/DescribeSubscriptionFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DescribeSubscriptionFilters.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DescribeSubscriptionFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the subscription filters for the specified log group. You can list
+-- all the subscription filters or filter the results by prefix. The
+-- results are ASCII-sorted by filter name.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.DescribeSubscriptionFilters
+  ( -- * Creating a Request
+    DescribeSubscriptionFilters (..),
+    newDescribeSubscriptionFilters,
+
+    -- * Request Lenses
+    describeSubscriptionFilters_filterNamePrefix,
+    describeSubscriptionFilters_limit,
+    describeSubscriptionFilters_nextToken,
+    describeSubscriptionFilters_logGroupName,
+
+    -- * Destructuring the Response
+    DescribeSubscriptionFiltersResponse (..),
+    newDescribeSubscriptionFiltersResponse,
+
+    -- * Response Lenses
+    describeSubscriptionFiltersResponse_nextToken,
+    describeSubscriptionFiltersResponse_subscriptionFilters,
+    describeSubscriptionFiltersResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSubscriptionFilters' smart constructor.
+data DescribeSubscriptionFilters = DescribeSubscriptionFilters'
+  { -- | The prefix to match. If you don\'t specify a value, no prefix filter is
+    -- applied.
+    filterNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of items returned. If you don\'t specify a value, the
+    -- default is up to 50 items.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSubscriptionFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterNamePrefix', 'describeSubscriptionFilters_filterNamePrefix' - The prefix to match. If you don\'t specify a value, no prefix filter is
+-- applied.
+--
+-- 'limit', 'describeSubscriptionFilters_limit' - The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+--
+-- 'nextToken', 'describeSubscriptionFilters_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+--
+-- 'logGroupName', 'describeSubscriptionFilters_logGroupName' - The name of the log group.
+newDescribeSubscriptionFilters ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  DescribeSubscriptionFilters
+newDescribeSubscriptionFilters pLogGroupName_ =
+  DescribeSubscriptionFilters'
+    { filterNamePrefix =
+        Prelude.Nothing,
+      limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      logGroupName = pLogGroupName_
+    }
+
+-- | The prefix to match. If you don\'t specify a value, no prefix filter is
+-- applied.
+describeSubscriptionFilters_filterNamePrefix :: Lens.Lens' DescribeSubscriptionFilters (Prelude.Maybe Prelude.Text)
+describeSubscriptionFilters_filterNamePrefix = Lens.lens (\DescribeSubscriptionFilters' {filterNamePrefix} -> filterNamePrefix) (\s@DescribeSubscriptionFilters' {} a -> s {filterNamePrefix = a} :: DescribeSubscriptionFilters)
+
+-- | The maximum number of items returned. If you don\'t specify a value, the
+-- default is up to 50 items.
+describeSubscriptionFilters_limit :: Lens.Lens' DescribeSubscriptionFilters (Prelude.Maybe Prelude.Natural)
+describeSubscriptionFilters_limit = Lens.lens (\DescribeSubscriptionFilters' {limit} -> limit) (\s@DescribeSubscriptionFilters' {} a -> s {limit = a} :: DescribeSubscriptionFilters)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+describeSubscriptionFilters_nextToken :: Lens.Lens' DescribeSubscriptionFilters (Prelude.Maybe Prelude.Text)
+describeSubscriptionFilters_nextToken = Lens.lens (\DescribeSubscriptionFilters' {nextToken} -> nextToken) (\s@DescribeSubscriptionFilters' {} a -> s {nextToken = a} :: DescribeSubscriptionFilters)
+
+-- | The name of the log group.
+describeSubscriptionFilters_logGroupName :: Lens.Lens' DescribeSubscriptionFilters Prelude.Text
+describeSubscriptionFilters_logGroupName = Lens.lens (\DescribeSubscriptionFilters' {logGroupName} -> logGroupName) (\s@DescribeSubscriptionFilters' {} a -> s {logGroupName = a} :: DescribeSubscriptionFilters)
+
+instance Core.AWSPager DescribeSubscriptionFilters where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSubscriptionFiltersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSubscriptionFiltersResponse_subscriptionFilters
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSubscriptionFilters_nextToken
+          Lens..~ rs
+          Lens.^? describeSubscriptionFiltersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSubscriptionFilters where
+  type
+    AWSResponse DescribeSubscriptionFilters =
+      DescribeSubscriptionFiltersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSubscriptionFiltersResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "subscriptionFilters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSubscriptionFilters where
+  hashWithSalt _salt DescribeSubscriptionFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterNamePrefix
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData DescribeSubscriptionFilters where
+  rnf DescribeSubscriptionFilters' {..} =
+    Prelude.rnf filterNamePrefix
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf logGroupName
+
+instance Data.ToHeaders DescribeSubscriptionFilters where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DescribeSubscriptionFilters" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSubscriptionFilters where
+  toJSON DescribeSubscriptionFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filterNamePrefix" Data..=)
+              Prelude.<$> filterNamePrefix,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("logGroupName" Data..= logGroupName)
+          ]
+      )
+
+instance Data.ToPath DescribeSubscriptionFilters where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSubscriptionFilters where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSubscriptionFiltersResponse' smart constructor.
+data DescribeSubscriptionFiltersResponse = DescribeSubscriptionFiltersResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The subscription filters.
+    subscriptionFilters :: Prelude.Maybe [SubscriptionFilter],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSubscriptionFiltersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSubscriptionFiltersResponse_nextToken' - Undocumented member.
+--
+-- 'subscriptionFilters', 'describeSubscriptionFiltersResponse_subscriptionFilters' - The subscription filters.
+--
+-- 'httpStatus', 'describeSubscriptionFiltersResponse_httpStatus' - The response's http status code.
+newDescribeSubscriptionFiltersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSubscriptionFiltersResponse
+newDescribeSubscriptionFiltersResponse pHttpStatus_ =
+  DescribeSubscriptionFiltersResponse'
+    { nextToken =
+        Prelude.Nothing,
+      subscriptionFilters = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeSubscriptionFiltersResponse_nextToken :: Lens.Lens' DescribeSubscriptionFiltersResponse (Prelude.Maybe Prelude.Text)
+describeSubscriptionFiltersResponse_nextToken = Lens.lens (\DescribeSubscriptionFiltersResponse' {nextToken} -> nextToken) (\s@DescribeSubscriptionFiltersResponse' {} a -> s {nextToken = a} :: DescribeSubscriptionFiltersResponse)
+
+-- | The subscription filters.
+describeSubscriptionFiltersResponse_subscriptionFilters :: Lens.Lens' DescribeSubscriptionFiltersResponse (Prelude.Maybe [SubscriptionFilter])
+describeSubscriptionFiltersResponse_subscriptionFilters = Lens.lens (\DescribeSubscriptionFiltersResponse' {subscriptionFilters} -> subscriptionFilters) (\s@DescribeSubscriptionFiltersResponse' {} a -> s {subscriptionFilters = a} :: DescribeSubscriptionFiltersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSubscriptionFiltersResponse_httpStatus :: Lens.Lens' DescribeSubscriptionFiltersResponse Prelude.Int
+describeSubscriptionFiltersResponse_httpStatus = Lens.lens (\DescribeSubscriptionFiltersResponse' {httpStatus} -> httpStatus) (\s@DescribeSubscriptionFiltersResponse' {} a -> s {httpStatus = a} :: DescribeSubscriptionFiltersResponse)
+
+instance
+  Prelude.NFData
+    DescribeSubscriptionFiltersResponse
+  where
+  rnf DescribeSubscriptionFiltersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf subscriptionFilters
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/DisassociateKmsKey.hs b/gen/Amazonka/CloudWatchLogs/DisassociateKmsKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/DisassociateKmsKey.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.DisassociateKmsKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the associated KMS key from the specified log group.
+--
+-- After the KMS key is disassociated from the log group, CloudWatch Logs
+-- stops encrypting newly ingested data for the log group. All previously
+-- ingested data remains encrypted, and CloudWatch Logs requires
+-- permissions for the KMS key whenever the encrypted data is requested.
+--
+-- Note that it can take up to 5 minutes for this operation to take effect.
+module Amazonka.CloudWatchLogs.DisassociateKmsKey
+  ( -- * Creating a Request
+    DisassociateKmsKey (..),
+    newDisassociateKmsKey,
+
+    -- * Request Lenses
+    disassociateKmsKey_logGroupName,
+
+    -- * Destructuring the Response
+    DisassociateKmsKeyResponse (..),
+    newDisassociateKmsKeyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateKmsKey' smart constructor.
+data DisassociateKmsKey = DisassociateKmsKey'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateKmsKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'disassociateKmsKey_logGroupName' - The name of the log group.
+newDisassociateKmsKey ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  DisassociateKmsKey
+newDisassociateKmsKey pLogGroupName_ =
+  DisassociateKmsKey' {logGroupName = pLogGroupName_}
+
+-- | The name of the log group.
+disassociateKmsKey_logGroupName :: Lens.Lens' DisassociateKmsKey Prelude.Text
+disassociateKmsKey_logGroupName = Lens.lens (\DisassociateKmsKey' {logGroupName} -> logGroupName) (\s@DisassociateKmsKey' {} a -> s {logGroupName = a} :: DisassociateKmsKey)
+
+instance Core.AWSRequest DisassociateKmsKey where
+  type
+    AWSResponse DisassociateKmsKey =
+      DisassociateKmsKeyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DisassociateKmsKeyResponse'
+
+instance Prelude.Hashable DisassociateKmsKey where
+  hashWithSalt _salt DisassociateKmsKey' {..} =
+    _salt `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData DisassociateKmsKey where
+  rnf DisassociateKmsKey' {..} =
+    Prelude.rnf logGroupName
+
+instance Data.ToHeaders DisassociateKmsKey where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.DisassociateKmsKey" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateKmsKey where
+  toJSON DisassociateKmsKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("logGroupName" Data..= logGroupName)]
+      )
+
+instance Data.ToPath DisassociateKmsKey where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateKmsKey where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateKmsKeyResponse' smart constructor.
+data DisassociateKmsKeyResponse = DisassociateKmsKeyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateKmsKeyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisassociateKmsKeyResponse ::
+  DisassociateKmsKeyResponse
+newDisassociateKmsKeyResponse =
+  DisassociateKmsKeyResponse'
+
+instance Prelude.NFData DisassociateKmsKeyResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/FilterLogEvents.hs b/gen/Amazonka/CloudWatchLogs/FilterLogEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/FilterLogEvents.hs
@@ -0,0 +1,500 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.FilterLogEvents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists log events from the specified log group. You can list all the log
+-- events or filter the results using a filter pattern, a time range, and
+-- the name of the log stream.
+--
+-- You must have the @logs;FilterLogEvents@ permission to perform this
+-- operation.
+--
+-- By default, this operation returns as many log events as can fit in 1 MB
+-- (up to 10,000 log events) or all the events found within the specified
+-- time range. If the results include a token, that means there are more
+-- log events available. You can get additional results by specifying the
+-- token in a subsequent call. This operation can return empty results
+-- while there are more log events available through the token.
+--
+-- The returned log events are sorted by event timestamp, the timestamp
+-- when the event was ingested by CloudWatch Logs, and the ID of the
+-- @PutLogEvents@ request.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account and view data from the linked
+-- source accounts. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+--
+-- This operation returns paginated results.
+module Amazonka.CloudWatchLogs.FilterLogEvents
+  ( -- * Creating a Request
+    FilterLogEvents (..),
+    newFilterLogEvents,
+
+    -- * Request Lenses
+    filterLogEvents_endTime,
+    filterLogEvents_filterPattern,
+    filterLogEvents_interleaved,
+    filterLogEvents_limit,
+    filterLogEvents_logGroupIdentifier,
+    filterLogEvents_logStreamNamePrefix,
+    filterLogEvents_logStreamNames,
+    filterLogEvents_nextToken,
+    filterLogEvents_startTime,
+    filterLogEvents_unmask,
+    filterLogEvents_logGroupName,
+
+    -- * Destructuring the Response
+    FilterLogEventsResponse (..),
+    newFilterLogEventsResponse,
+
+    -- * Response Lenses
+    filterLogEventsResponse_events,
+    filterLogEventsResponse_nextToken,
+    filterLogEventsResponse_searchedLogStreams,
+    filterLogEventsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newFilterLogEvents' smart constructor.
+data FilterLogEvents = FilterLogEvents'
+  { -- | The end of the time range, expressed as the number of milliseconds after
+    -- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp later than this time
+    -- are not returned.
+    endTime :: Prelude.Maybe Prelude.Natural,
+    -- | The filter pattern to use. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html Filter and Pattern Syntax>.
+    --
+    -- If not provided, all the events are matched.
+    filterPattern :: Prelude.Maybe Prelude.Text,
+    -- | If the value is true, the operation attempts to provide responses that
+    -- contain events from multiple log streams within the log group,
+    -- interleaved in a single response. If the value is false, all the matched
+    -- log events in the first log stream are searched first, then those in the
+    -- next log stream, and so on.
+    --
+    -- __Important__ As of June 17, 2019, this parameter is ignored and the
+    -- value is assumed to be true. The response from this operation always
+    -- interleaves events from multiple log streams within a log group.
+    interleaved :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of events to return. The default is 10,000 events.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | Specify either the name or ARN of the log group to view log events from.
+    -- If the log group is in a source account and you are using a monitoring
+    -- account, you must use the log group ARN.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | Filters the results to include only events from log streams that have
+    -- names starting with this prefix.
+    --
+    -- If you specify a value for both @logStreamNamePrefix@ and
+    -- @logStreamNames@, but the value for @logStreamNamePrefix@ does not match
+    -- any log stream names specified in @logStreamNames@, the action returns
+    -- an @InvalidParameterException@ error.
+    logStreamNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | Filters the results to only logs from the log streams in this list.
+    --
+    -- If you specify a value for both @logStreamNamePrefix@ and
+    -- @logStreamNames@, the action returns an @InvalidParameterException@
+    -- error.
+    logStreamNames :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The token for the next set of events to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The start of the time range, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp before this
+    -- time are not returned.
+    startTime :: Prelude.Maybe Prelude.Natural,
+    -- | Specify @true@ to display the log event fields with all sensitive data
+    -- unmasked and visible. The default is @false@.
+    --
+    -- To use this operation with this parameter, you must be signed into an
+    -- account with the @logs:Unmask@ permission.
+    unmask :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the log group to search.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilterLogEvents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'filterLogEvents_endTime' - The end of the time range, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp later than this time
+-- are not returned.
+--
+-- 'filterPattern', 'filterLogEvents_filterPattern' - The filter pattern to use. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html Filter and Pattern Syntax>.
+--
+-- If not provided, all the events are matched.
+--
+-- 'interleaved', 'filterLogEvents_interleaved' - If the value is true, the operation attempts to provide responses that
+-- contain events from multiple log streams within the log group,
+-- interleaved in a single response. If the value is false, all the matched
+-- log events in the first log stream are searched first, then those in the
+-- next log stream, and so on.
+--
+-- __Important__ As of June 17, 2019, this parameter is ignored and the
+-- value is assumed to be true. The response from this operation always
+-- interleaves events from multiple log streams within a log group.
+--
+-- 'limit', 'filterLogEvents_limit' - The maximum number of events to return. The default is 10,000 events.
+--
+-- 'logGroupIdentifier', 'filterLogEvents_logGroupIdentifier' - Specify either the name or ARN of the log group to view log events from.
+-- If the log group is in a source account and you are using a monitoring
+-- account, you must use the log group ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+--
+-- 'logStreamNamePrefix', 'filterLogEvents_logStreamNamePrefix' - Filters the results to include only events from log streams that have
+-- names starting with this prefix.
+--
+-- If you specify a value for both @logStreamNamePrefix@ and
+-- @logStreamNames@, but the value for @logStreamNamePrefix@ does not match
+-- any log stream names specified in @logStreamNames@, the action returns
+-- an @InvalidParameterException@ error.
+--
+-- 'logStreamNames', 'filterLogEvents_logStreamNames' - Filters the results to only logs from the log streams in this list.
+--
+-- If you specify a value for both @logStreamNamePrefix@ and
+-- @logStreamNames@, the action returns an @InvalidParameterException@
+-- error.
+--
+-- 'nextToken', 'filterLogEvents_nextToken' - The token for the next set of events to return. (You received this token
+-- from a previous call.)
+--
+-- 'startTime', 'filterLogEvents_startTime' - The start of the time range, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp before this
+-- time are not returned.
+--
+-- 'unmask', 'filterLogEvents_unmask' - Specify @true@ to display the log event fields with all sensitive data
+-- unmasked and visible. The default is @false@.
+--
+-- To use this operation with this parameter, you must be signed into an
+-- account with the @logs:Unmask@ permission.
+--
+-- 'logGroupName', 'filterLogEvents_logGroupName' - The name of the log group to search.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+newFilterLogEvents ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  FilterLogEvents
+newFilterLogEvents pLogGroupName_ =
+  FilterLogEvents'
+    { endTime = Prelude.Nothing,
+      filterPattern = Prelude.Nothing,
+      interleaved = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      logGroupIdentifier = Prelude.Nothing,
+      logStreamNamePrefix = Prelude.Nothing,
+      logStreamNames = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      unmask = Prelude.Nothing,
+      logGroupName = pLogGroupName_
+    }
+
+-- | The end of the time range, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp later than this time
+-- are not returned.
+filterLogEvents_endTime :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Natural)
+filterLogEvents_endTime = Lens.lens (\FilterLogEvents' {endTime} -> endTime) (\s@FilterLogEvents' {} a -> s {endTime = a} :: FilterLogEvents)
+
+-- | The filter pattern to use. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html Filter and Pattern Syntax>.
+--
+-- If not provided, all the events are matched.
+filterLogEvents_filterPattern :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Text)
+filterLogEvents_filterPattern = Lens.lens (\FilterLogEvents' {filterPattern} -> filterPattern) (\s@FilterLogEvents' {} a -> s {filterPattern = a} :: FilterLogEvents)
+
+-- | If the value is true, the operation attempts to provide responses that
+-- contain events from multiple log streams within the log group,
+-- interleaved in a single response. If the value is false, all the matched
+-- log events in the first log stream are searched first, then those in the
+-- next log stream, and so on.
+--
+-- __Important__ As of June 17, 2019, this parameter is ignored and the
+-- value is assumed to be true. The response from this operation always
+-- interleaves events from multiple log streams within a log group.
+filterLogEvents_interleaved :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Bool)
+filterLogEvents_interleaved = Lens.lens (\FilterLogEvents' {interleaved} -> interleaved) (\s@FilterLogEvents' {} a -> s {interleaved = a} :: FilterLogEvents)
+
+-- | The maximum number of events to return. The default is 10,000 events.
+filterLogEvents_limit :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Natural)
+filterLogEvents_limit = Lens.lens (\FilterLogEvents' {limit} -> limit) (\s@FilterLogEvents' {} a -> s {limit = a} :: FilterLogEvents)
+
+-- | Specify either the name or ARN of the log group to view log events from.
+-- If the log group is in a source account and you are using a monitoring
+-- account, you must use the log group ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+filterLogEvents_logGroupIdentifier :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Text)
+filterLogEvents_logGroupIdentifier = Lens.lens (\FilterLogEvents' {logGroupIdentifier} -> logGroupIdentifier) (\s@FilterLogEvents' {} a -> s {logGroupIdentifier = a} :: FilterLogEvents)
+
+-- | Filters the results to include only events from log streams that have
+-- names starting with this prefix.
+--
+-- If you specify a value for both @logStreamNamePrefix@ and
+-- @logStreamNames@, but the value for @logStreamNamePrefix@ does not match
+-- any log stream names specified in @logStreamNames@, the action returns
+-- an @InvalidParameterException@ error.
+filterLogEvents_logStreamNamePrefix :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Text)
+filterLogEvents_logStreamNamePrefix = Lens.lens (\FilterLogEvents' {logStreamNamePrefix} -> logStreamNamePrefix) (\s@FilterLogEvents' {} a -> s {logStreamNamePrefix = a} :: FilterLogEvents)
+
+-- | Filters the results to only logs from the log streams in this list.
+--
+-- If you specify a value for both @logStreamNamePrefix@ and
+-- @logStreamNames@, the action returns an @InvalidParameterException@
+-- error.
+filterLogEvents_logStreamNames :: Lens.Lens' FilterLogEvents (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+filterLogEvents_logStreamNames = Lens.lens (\FilterLogEvents' {logStreamNames} -> logStreamNames) (\s@FilterLogEvents' {} a -> s {logStreamNames = a} :: FilterLogEvents) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of events to return. (You received this token
+-- from a previous call.)
+filterLogEvents_nextToken :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Text)
+filterLogEvents_nextToken = Lens.lens (\FilterLogEvents' {nextToken} -> nextToken) (\s@FilterLogEvents' {} a -> s {nextToken = a} :: FilterLogEvents)
+
+-- | The start of the time range, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp before this
+-- time are not returned.
+filterLogEvents_startTime :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Natural)
+filterLogEvents_startTime = Lens.lens (\FilterLogEvents' {startTime} -> startTime) (\s@FilterLogEvents' {} a -> s {startTime = a} :: FilterLogEvents)
+
+-- | Specify @true@ to display the log event fields with all sensitive data
+-- unmasked and visible. The default is @false@.
+--
+-- To use this operation with this parameter, you must be signed into an
+-- account with the @logs:Unmask@ permission.
+filterLogEvents_unmask :: Lens.Lens' FilterLogEvents (Prelude.Maybe Prelude.Bool)
+filterLogEvents_unmask = Lens.lens (\FilterLogEvents' {unmask} -> unmask) (\s@FilterLogEvents' {} a -> s {unmask = a} :: FilterLogEvents)
+
+-- | The name of the log group to search.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+filterLogEvents_logGroupName :: Lens.Lens' FilterLogEvents Prelude.Text
+filterLogEvents_logGroupName = Lens.lens (\FilterLogEvents' {logGroupName} -> logGroupName) (\s@FilterLogEvents' {} a -> s {logGroupName = a} :: FilterLogEvents)
+
+instance Core.AWSPager FilterLogEvents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? filterLogEventsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& filterLogEvents_nextToken
+          Lens..~ rs
+          Lens.^? filterLogEventsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest FilterLogEvents where
+  type
+    AWSResponse FilterLogEvents =
+      FilterLogEventsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          FilterLogEventsResponse'
+            Prelude.<$> (x Data..?> "events" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "searchedLogStreams"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable FilterLogEvents where
+  hashWithSalt _salt FilterLogEvents' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` filterPattern
+      `Prelude.hashWithSalt` interleaved
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` logGroupIdentifier
+      `Prelude.hashWithSalt` logStreamNamePrefix
+      `Prelude.hashWithSalt` logStreamNames
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` unmask
+      `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData FilterLogEvents where
+  rnf FilterLogEvents' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf filterPattern
+      `Prelude.seq` Prelude.rnf interleaved
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf logStreamNamePrefix
+      `Prelude.seq` Prelude.rnf logStreamNames
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf unmask
+      `Prelude.seq` Prelude.rnf logGroupName
+
+instance Data.ToHeaders FilterLogEvents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.FilterLogEvents" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON FilterLogEvents where
+  toJSON FilterLogEvents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("endTime" Data..=) Prelude.<$> endTime,
+            ("filterPattern" Data..=) Prelude.<$> filterPattern,
+            ("interleaved" Data..=) Prelude.<$> interleaved,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("logGroupIdentifier" Data..=)
+              Prelude.<$> logGroupIdentifier,
+            ("logStreamNamePrefix" Data..=)
+              Prelude.<$> logStreamNamePrefix,
+            ("logStreamNames" Data..=)
+              Prelude.<$> logStreamNames,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("startTime" Data..=) Prelude.<$> startTime,
+            ("unmask" Data..=) Prelude.<$> unmask,
+            Prelude.Just ("logGroupName" Data..= logGroupName)
+          ]
+      )
+
+instance Data.ToPath FilterLogEvents where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery FilterLogEvents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newFilterLogEventsResponse' smart constructor.
+data FilterLogEventsResponse = FilterLogEventsResponse'
+  { -- | The matched events.
+    events :: Prelude.Maybe [FilteredLogEvent],
+    -- | The token to use when requesting the next set of items. The token
+    -- expires after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | __Important__ As of May 15, 2020, this parameter is no longer supported.
+    -- This parameter returns an empty list.
+    --
+    -- Indicates which log streams have been searched and whether each has been
+    -- searched completely.
+    searchedLogStreams :: Prelude.Maybe [SearchedLogStream],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilterLogEventsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'events', 'filterLogEventsResponse_events' - The matched events.
+--
+-- 'nextToken', 'filterLogEventsResponse_nextToken' - The token to use when requesting the next set of items. The token
+-- expires after 24 hours.
+--
+-- 'searchedLogStreams', 'filterLogEventsResponse_searchedLogStreams' - __Important__ As of May 15, 2020, this parameter is no longer supported.
+-- This parameter returns an empty list.
+--
+-- Indicates which log streams have been searched and whether each has been
+-- searched completely.
+--
+-- 'httpStatus', 'filterLogEventsResponse_httpStatus' - The response's http status code.
+newFilterLogEventsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  FilterLogEventsResponse
+newFilterLogEventsResponse pHttpStatus_ =
+  FilterLogEventsResponse'
+    { events = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      searchedLogStreams = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The matched events.
+filterLogEventsResponse_events :: Lens.Lens' FilterLogEventsResponse (Prelude.Maybe [FilteredLogEvent])
+filterLogEventsResponse_events = Lens.lens (\FilterLogEventsResponse' {events} -> events) (\s@FilterLogEventsResponse' {} a -> s {events = a} :: FilterLogEventsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use when requesting the next set of items. The token
+-- expires after 24 hours.
+filterLogEventsResponse_nextToken :: Lens.Lens' FilterLogEventsResponse (Prelude.Maybe Prelude.Text)
+filterLogEventsResponse_nextToken = Lens.lens (\FilterLogEventsResponse' {nextToken} -> nextToken) (\s@FilterLogEventsResponse' {} a -> s {nextToken = a} :: FilterLogEventsResponse)
+
+-- | __Important__ As of May 15, 2020, this parameter is no longer supported.
+-- This parameter returns an empty list.
+--
+-- Indicates which log streams have been searched and whether each has been
+-- searched completely.
+filterLogEventsResponse_searchedLogStreams :: Lens.Lens' FilterLogEventsResponse (Prelude.Maybe [SearchedLogStream])
+filterLogEventsResponse_searchedLogStreams = Lens.lens (\FilterLogEventsResponse' {searchedLogStreams} -> searchedLogStreams) (\s@FilterLogEventsResponse' {} a -> s {searchedLogStreams = a} :: FilterLogEventsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+filterLogEventsResponse_httpStatus :: Lens.Lens' FilterLogEventsResponse Prelude.Int
+filterLogEventsResponse_httpStatus = Lens.lens (\FilterLogEventsResponse' {httpStatus} -> httpStatus) (\s@FilterLogEventsResponse' {} a -> s {httpStatus = a} :: FilterLogEventsResponse)
+
+instance Prelude.NFData FilterLogEventsResponse where
+  rnf FilterLogEventsResponse' {..} =
+    Prelude.rnf events
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf searchedLogStreams
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/GetDataProtectionPolicy.hs b/gen/Amazonka/CloudWatchLogs/GetDataProtectionPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/GetDataProtectionPolicy.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.GetDataProtectionPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a log group data protection policy.
+module Amazonka.CloudWatchLogs.GetDataProtectionPolicy
+  ( -- * Creating a Request
+    GetDataProtectionPolicy (..),
+    newGetDataProtectionPolicy,
+
+    -- * Request Lenses
+    getDataProtectionPolicy_logGroupIdentifier,
+
+    -- * Destructuring the Response
+    GetDataProtectionPolicyResponse (..),
+    newGetDataProtectionPolicyResponse,
+
+    -- * Response Lenses
+    getDataProtectionPolicyResponse_lastUpdatedTime,
+    getDataProtectionPolicyResponse_logGroupIdentifier,
+    getDataProtectionPolicyResponse_policyDocument,
+    getDataProtectionPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDataProtectionPolicy' smart constructor.
+data GetDataProtectionPolicy = GetDataProtectionPolicy'
+  { -- | The name or ARN of the log group that contains the data protection
+    -- policy that you want to see.
+    logGroupIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataProtectionPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupIdentifier', 'getDataProtectionPolicy_logGroupIdentifier' - The name or ARN of the log group that contains the data protection
+-- policy that you want to see.
+newGetDataProtectionPolicy ::
+  -- | 'logGroupIdentifier'
+  Prelude.Text ->
+  GetDataProtectionPolicy
+newGetDataProtectionPolicy pLogGroupIdentifier_ =
+  GetDataProtectionPolicy'
+    { logGroupIdentifier =
+        pLogGroupIdentifier_
+    }
+
+-- | The name or ARN of the log group that contains the data protection
+-- policy that you want to see.
+getDataProtectionPolicy_logGroupIdentifier :: Lens.Lens' GetDataProtectionPolicy Prelude.Text
+getDataProtectionPolicy_logGroupIdentifier = Lens.lens (\GetDataProtectionPolicy' {logGroupIdentifier} -> logGroupIdentifier) (\s@GetDataProtectionPolicy' {} a -> s {logGroupIdentifier = a} :: GetDataProtectionPolicy)
+
+instance Core.AWSRequest GetDataProtectionPolicy where
+  type
+    AWSResponse GetDataProtectionPolicy =
+      GetDataProtectionPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDataProtectionPolicyResponse'
+            Prelude.<$> (x Data..?> "lastUpdatedTime")
+            Prelude.<*> (x Data..?> "logGroupIdentifier")
+            Prelude.<*> (x Data..?> "policyDocument")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDataProtectionPolicy where
+  hashWithSalt _salt GetDataProtectionPolicy' {..} =
+    _salt `Prelude.hashWithSalt` logGroupIdentifier
+
+instance Prelude.NFData GetDataProtectionPolicy where
+  rnf GetDataProtectionPolicy' {..} =
+    Prelude.rnf logGroupIdentifier
+
+instance Data.ToHeaders GetDataProtectionPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.GetDataProtectionPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDataProtectionPolicy where
+  toJSON GetDataProtectionPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("logGroupIdentifier" Data..= logGroupIdentifier)
+          ]
+      )
+
+instance Data.ToPath GetDataProtectionPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetDataProtectionPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDataProtectionPolicyResponse' smart constructor.
+data GetDataProtectionPolicyResponse = GetDataProtectionPolicyResponse'
+  { -- | The date and time that this policy was most recently updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Natural,
+    -- | The log group name or ARN that you specified in your request.
+    logGroupIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The data protection policy document for this log group.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataProtectionPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastUpdatedTime', 'getDataProtectionPolicyResponse_lastUpdatedTime' - The date and time that this policy was most recently updated.
+--
+-- 'logGroupIdentifier', 'getDataProtectionPolicyResponse_logGroupIdentifier' - The log group name or ARN that you specified in your request.
+--
+-- 'policyDocument', 'getDataProtectionPolicyResponse_policyDocument' - The data protection policy document for this log group.
+--
+-- 'httpStatus', 'getDataProtectionPolicyResponse_httpStatus' - The response's http status code.
+newGetDataProtectionPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDataProtectionPolicyResponse
+newGetDataProtectionPolicyResponse pHttpStatus_ =
+  GetDataProtectionPolicyResponse'
+    { lastUpdatedTime =
+        Prelude.Nothing,
+      logGroupIdentifier = Prelude.Nothing,
+      policyDocument = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that this policy was most recently updated.
+getDataProtectionPolicyResponse_lastUpdatedTime :: Lens.Lens' GetDataProtectionPolicyResponse (Prelude.Maybe Prelude.Natural)
+getDataProtectionPolicyResponse_lastUpdatedTime = Lens.lens (\GetDataProtectionPolicyResponse' {lastUpdatedTime} -> lastUpdatedTime) (\s@GetDataProtectionPolicyResponse' {} a -> s {lastUpdatedTime = a} :: GetDataProtectionPolicyResponse)
+
+-- | The log group name or ARN that you specified in your request.
+getDataProtectionPolicyResponse_logGroupIdentifier :: Lens.Lens' GetDataProtectionPolicyResponse (Prelude.Maybe Prelude.Text)
+getDataProtectionPolicyResponse_logGroupIdentifier = Lens.lens (\GetDataProtectionPolicyResponse' {logGroupIdentifier} -> logGroupIdentifier) (\s@GetDataProtectionPolicyResponse' {} a -> s {logGroupIdentifier = a} :: GetDataProtectionPolicyResponse)
+
+-- | The data protection policy document for this log group.
+getDataProtectionPolicyResponse_policyDocument :: Lens.Lens' GetDataProtectionPolicyResponse (Prelude.Maybe Prelude.Text)
+getDataProtectionPolicyResponse_policyDocument = Lens.lens (\GetDataProtectionPolicyResponse' {policyDocument} -> policyDocument) (\s@GetDataProtectionPolicyResponse' {} a -> s {policyDocument = a} :: GetDataProtectionPolicyResponse)
+
+-- | The response's http status code.
+getDataProtectionPolicyResponse_httpStatus :: Lens.Lens' GetDataProtectionPolicyResponse Prelude.Int
+getDataProtectionPolicyResponse_httpStatus = Lens.lens (\GetDataProtectionPolicyResponse' {httpStatus} -> httpStatus) (\s@GetDataProtectionPolicyResponse' {} a -> s {httpStatus = a} :: GetDataProtectionPolicyResponse)
+
+instance
+  Prelude.NFData
+    GetDataProtectionPolicyResponse
+  where
+  rnf GetDataProtectionPolicyResponse' {..} =
+    Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/GetLogEvents.hs b/gen/Amazonka/CloudWatchLogs/GetLogEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/GetLogEvents.hs
@@ -0,0 +1,399 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.GetLogEvents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists log events from the specified log stream. You can list all of the
+-- log events or filter using a time range.
+--
+-- By default, this operation returns as many log events as can fit in a
+-- response size of 1MB (up to 10,000 log events). You can get additional
+-- log events by specifying one of the tokens in a subsequent call. This
+-- operation can return empty results while there are more log events
+-- available through the token.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account and view data from the linked
+-- source accounts. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+module Amazonka.CloudWatchLogs.GetLogEvents
+  ( -- * Creating a Request
+    GetLogEvents (..),
+    newGetLogEvents,
+
+    -- * Request Lenses
+    getLogEvents_endTime,
+    getLogEvents_limit,
+    getLogEvents_logGroupIdentifier,
+    getLogEvents_nextToken,
+    getLogEvents_startFromHead,
+    getLogEvents_startTime,
+    getLogEvents_unmask,
+    getLogEvents_logGroupName,
+    getLogEvents_logStreamName,
+
+    -- * Destructuring the Response
+    GetLogEventsResponse (..),
+    newGetLogEventsResponse,
+
+    -- * Response Lenses
+    getLogEventsResponse_events,
+    getLogEventsResponse_nextBackwardToken,
+    getLogEventsResponse_nextForwardToken,
+    getLogEventsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLogEvents' smart constructor.
+data GetLogEvents = GetLogEvents'
+  { -- | The end of the time range, expressed as the number of milliseconds after
+    -- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp equal to or later
+    -- than this time are not included.
+    endTime :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum number of log events returned. If you don\'t specify a
+    -- limit, the default is as many log events as can fit in a response size
+    -- of 1 MB (up to 10,000 log events).
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | Specify either the name or ARN of the log group to view events from. If
+    -- the log group is in a source account and you are using a monitoring
+    -- account, you must use the log group ARN.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | If the value is true, the earliest log events are returned first. If the
+    -- value is false, the latest log events are returned first. The default
+    -- value is false.
+    --
+    -- If you are using a previous @nextForwardToken@ value as the @nextToken@
+    -- in this operation, you must specify @true@ for @startFromHead@.
+    startFromHead :: Prelude.Maybe Prelude.Bool,
+    -- | The start of the time range, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp equal to this
+    -- time or later than this time are included. Events with a timestamp
+    -- earlier than this time are not included.
+    startTime :: Prelude.Maybe Prelude.Natural,
+    -- | Specify @true@ to display the log event fields with all sensitive data
+    -- unmasked and visible. The default is @false@.
+    --
+    -- To use this operation with this parameter, you must be signed into an
+    -- account with the @logs:Unmask@ permission.
+    unmask :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the log group.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupName :: Prelude.Text,
+    -- | The name of the log stream.
+    logStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogEvents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'getLogEvents_endTime' - The end of the time range, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp equal to or later
+-- than this time are not included.
+--
+-- 'limit', 'getLogEvents_limit' - The maximum number of log events returned. If you don\'t specify a
+-- limit, the default is as many log events as can fit in a response size
+-- of 1 MB (up to 10,000 log events).
+--
+-- 'logGroupIdentifier', 'getLogEvents_logGroupIdentifier' - Specify either the name or ARN of the log group to view events from. If
+-- the log group is in a source account and you are using a monitoring
+-- account, you must use the log group ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+--
+-- 'nextToken', 'getLogEvents_nextToken' - The token for the next set of items to return. (You received this token
+-- from a previous call.)
+--
+-- 'startFromHead', 'getLogEvents_startFromHead' - If the value is true, the earliest log events are returned first. If the
+-- value is false, the latest log events are returned first. The default
+-- value is false.
+--
+-- If you are using a previous @nextForwardToken@ value as the @nextToken@
+-- in this operation, you must specify @true@ for @startFromHead@.
+--
+-- 'startTime', 'getLogEvents_startTime' - The start of the time range, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp equal to this
+-- time or later than this time are included. Events with a timestamp
+-- earlier than this time are not included.
+--
+-- 'unmask', 'getLogEvents_unmask' - Specify @true@ to display the log event fields with all sensitive data
+-- unmasked and visible. The default is @false@.
+--
+-- To use this operation with this parameter, you must be signed into an
+-- account with the @logs:Unmask@ permission.
+--
+-- 'logGroupName', 'getLogEvents_logGroupName' - The name of the log group.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+--
+-- 'logStreamName', 'getLogEvents_logStreamName' - The name of the log stream.
+newGetLogEvents ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'logStreamName'
+  Prelude.Text ->
+  GetLogEvents
+newGetLogEvents pLogGroupName_ pLogStreamName_ =
+  GetLogEvents'
+    { endTime = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      logGroupIdentifier = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startFromHead = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      unmask = Prelude.Nothing,
+      logGroupName = pLogGroupName_,
+      logStreamName = pLogStreamName_
+    }
+
+-- | The end of the time range, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp equal to or later
+-- than this time are not included.
+getLogEvents_endTime :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Natural)
+getLogEvents_endTime = Lens.lens (\GetLogEvents' {endTime} -> endTime) (\s@GetLogEvents' {} a -> s {endTime = a} :: GetLogEvents)
+
+-- | The maximum number of log events returned. If you don\'t specify a
+-- limit, the default is as many log events as can fit in a response size
+-- of 1 MB (up to 10,000 log events).
+getLogEvents_limit :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Natural)
+getLogEvents_limit = Lens.lens (\GetLogEvents' {limit} -> limit) (\s@GetLogEvents' {} a -> s {limit = a} :: GetLogEvents)
+
+-- | Specify either the name or ARN of the log group to view events from. If
+-- the log group is in a source account and you are using a monitoring
+-- account, you must use the log group ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+getLogEvents_logGroupIdentifier :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Text)
+getLogEvents_logGroupIdentifier = Lens.lens (\GetLogEvents' {logGroupIdentifier} -> logGroupIdentifier) (\s@GetLogEvents' {} a -> s {logGroupIdentifier = a} :: GetLogEvents)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+getLogEvents_nextToken :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Text)
+getLogEvents_nextToken = Lens.lens (\GetLogEvents' {nextToken} -> nextToken) (\s@GetLogEvents' {} a -> s {nextToken = a} :: GetLogEvents)
+
+-- | If the value is true, the earliest log events are returned first. If the
+-- value is false, the latest log events are returned first. The default
+-- value is false.
+--
+-- If you are using a previous @nextForwardToken@ value as the @nextToken@
+-- in this operation, you must specify @true@ for @startFromHead@.
+getLogEvents_startFromHead :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Bool)
+getLogEvents_startFromHead = Lens.lens (\GetLogEvents' {startFromHead} -> startFromHead) (\s@GetLogEvents' {} a -> s {startFromHead = a} :: GetLogEvents)
+
+-- | The start of the time range, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp equal to this
+-- time or later than this time are included. Events with a timestamp
+-- earlier than this time are not included.
+getLogEvents_startTime :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Natural)
+getLogEvents_startTime = Lens.lens (\GetLogEvents' {startTime} -> startTime) (\s@GetLogEvents' {} a -> s {startTime = a} :: GetLogEvents)
+
+-- | Specify @true@ to display the log event fields with all sensitive data
+-- unmasked and visible. The default is @false@.
+--
+-- To use this operation with this parameter, you must be signed into an
+-- account with the @logs:Unmask@ permission.
+getLogEvents_unmask :: Lens.Lens' GetLogEvents (Prelude.Maybe Prelude.Bool)
+getLogEvents_unmask = Lens.lens (\GetLogEvents' {unmask} -> unmask) (\s@GetLogEvents' {} a -> s {unmask = a} :: GetLogEvents)
+
+-- | The name of the log group.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+getLogEvents_logGroupName :: Lens.Lens' GetLogEvents Prelude.Text
+getLogEvents_logGroupName = Lens.lens (\GetLogEvents' {logGroupName} -> logGroupName) (\s@GetLogEvents' {} a -> s {logGroupName = a} :: GetLogEvents)
+
+-- | The name of the log stream.
+getLogEvents_logStreamName :: Lens.Lens' GetLogEvents Prelude.Text
+getLogEvents_logStreamName = Lens.lens (\GetLogEvents' {logStreamName} -> logStreamName) (\s@GetLogEvents' {} a -> s {logStreamName = a} :: GetLogEvents)
+
+instance Core.AWSRequest GetLogEvents where
+  type AWSResponse GetLogEvents = GetLogEventsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLogEventsResponse'
+            Prelude.<$> (x Data..?> "events" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextBackwardToken")
+            Prelude.<*> (x Data..?> "nextForwardToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLogEvents where
+  hashWithSalt _salt GetLogEvents' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` logGroupIdentifier
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startFromHead
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` unmask
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logStreamName
+
+instance Prelude.NFData GetLogEvents where
+  rnf GetLogEvents' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startFromHead
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf unmask
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logStreamName
+
+instance Data.ToHeaders GetLogEvents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("Logs_20140328.GetLogEvents" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLogEvents where
+  toJSON GetLogEvents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("endTime" Data..=) Prelude.<$> endTime,
+            ("limit" Data..=) Prelude.<$> limit,
+            ("logGroupIdentifier" Data..=)
+              Prelude.<$> logGroupIdentifier,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("startFromHead" Data..=) Prelude.<$> startFromHead,
+            ("startTime" Data..=) Prelude.<$> startTime,
+            ("unmask" Data..=) Prelude.<$> unmask,
+            Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just
+              ("logStreamName" Data..= logStreamName)
+          ]
+      )
+
+instance Data.ToPath GetLogEvents where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetLogEvents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLogEventsResponse' smart constructor.
+data GetLogEventsResponse = GetLogEventsResponse'
+  { -- | The events.
+    events :: Prelude.Maybe [OutputLogEvent],
+    -- | The token for the next set of items in the backward direction. The token
+    -- expires after 24 hours. This token is not null. If you have reached the
+    -- end of the stream, it returns the same token you passed in.
+    nextBackwardToken :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of items in the forward direction. The token
+    -- expires after 24 hours. If you have reached the end of the stream, it
+    -- returns the same token you passed in.
+    nextForwardToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogEventsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'events', 'getLogEventsResponse_events' - The events.
+--
+-- 'nextBackwardToken', 'getLogEventsResponse_nextBackwardToken' - The token for the next set of items in the backward direction. The token
+-- expires after 24 hours. This token is not null. If you have reached the
+-- end of the stream, it returns the same token you passed in.
+--
+-- 'nextForwardToken', 'getLogEventsResponse_nextForwardToken' - The token for the next set of items in the forward direction. The token
+-- expires after 24 hours. If you have reached the end of the stream, it
+-- returns the same token you passed in.
+--
+-- 'httpStatus', 'getLogEventsResponse_httpStatus' - The response's http status code.
+newGetLogEventsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLogEventsResponse
+newGetLogEventsResponse pHttpStatus_ =
+  GetLogEventsResponse'
+    { events = Prelude.Nothing,
+      nextBackwardToken = Prelude.Nothing,
+      nextForwardToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The events.
+getLogEventsResponse_events :: Lens.Lens' GetLogEventsResponse (Prelude.Maybe [OutputLogEvent])
+getLogEventsResponse_events = Lens.lens (\GetLogEventsResponse' {events} -> events) (\s@GetLogEventsResponse' {} a -> s {events = a} :: GetLogEventsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of items in the backward direction. The token
+-- expires after 24 hours. This token is not null. If you have reached the
+-- end of the stream, it returns the same token you passed in.
+getLogEventsResponse_nextBackwardToken :: Lens.Lens' GetLogEventsResponse (Prelude.Maybe Prelude.Text)
+getLogEventsResponse_nextBackwardToken = Lens.lens (\GetLogEventsResponse' {nextBackwardToken} -> nextBackwardToken) (\s@GetLogEventsResponse' {} a -> s {nextBackwardToken = a} :: GetLogEventsResponse)
+
+-- | The token for the next set of items in the forward direction. The token
+-- expires after 24 hours. If you have reached the end of the stream, it
+-- returns the same token you passed in.
+getLogEventsResponse_nextForwardToken :: Lens.Lens' GetLogEventsResponse (Prelude.Maybe Prelude.Text)
+getLogEventsResponse_nextForwardToken = Lens.lens (\GetLogEventsResponse' {nextForwardToken} -> nextForwardToken) (\s@GetLogEventsResponse' {} a -> s {nextForwardToken = a} :: GetLogEventsResponse)
+
+-- | The response's http status code.
+getLogEventsResponse_httpStatus :: Lens.Lens' GetLogEventsResponse Prelude.Int
+getLogEventsResponse_httpStatus = Lens.lens (\GetLogEventsResponse' {httpStatus} -> httpStatus) (\s@GetLogEventsResponse' {} a -> s {httpStatus = a} :: GetLogEventsResponse)
+
+instance Prelude.NFData GetLogEventsResponse where
+  rnf GetLogEventsResponse' {..} =
+    Prelude.rnf events
+      `Prelude.seq` Prelude.rnf nextBackwardToken
+      `Prelude.seq` Prelude.rnf nextForwardToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/GetLogGroupFields.hs b/gen/Amazonka/CloudWatchLogs/GetLogGroupFields.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/GetLogGroupFields.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.GetLogGroupFields
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the fields that are included in log events in the
+-- specified log group. Includes the percentage of log events that contain
+-- each field. The search is limited to a time period that you specify.
+--
+-- In the results, fields that start with @\@@ are fields generated by
+-- CloudWatch Logs. For example, @\@timestamp@ is the timestamp of each log
+-- event. For more information about the fields that are generated by
+-- CloudWatch logs, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html Supported Logs and Discovered Fields>.
+--
+-- The response results are sorted by the frequency percentage, starting
+-- with the highest percentage.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account and view data from the linked
+-- source accounts. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+module Amazonka.CloudWatchLogs.GetLogGroupFields
+  ( -- * Creating a Request
+    GetLogGroupFields (..),
+    newGetLogGroupFields,
+
+    -- * Request Lenses
+    getLogGroupFields_logGroupIdentifier,
+    getLogGroupFields_time,
+    getLogGroupFields_logGroupName,
+
+    -- * Destructuring the Response
+    GetLogGroupFieldsResponse (..),
+    newGetLogGroupFieldsResponse,
+
+    -- * Response Lenses
+    getLogGroupFieldsResponse_logGroupFields,
+    getLogGroupFieldsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLogGroupFields' smart constructor.
+data GetLogGroupFields = GetLogGroupFields'
+  { -- | Specify either the name or ARN of the log group to view. If the log
+    -- group is in a source account and you are using a monitoring account, you
+    -- must specify the ARN.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The time to set as the center of the query. If you specify @time@, the
+    -- 15 minutes before this time are queries. If you omit @time@, the 8
+    -- minutes before and 8 minutes after this time are searched.
+    --
+    -- The @time@ value is specified as epoch time, which is the number of
+    -- seconds since @January 1, 1970, 00:00:00 UTC@.
+    time :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the log group to search.
+    --
+    -- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+    -- the action returns an @InvalidParameterException@ error.
+    logGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogGroupFields' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupIdentifier', 'getLogGroupFields_logGroupIdentifier' - Specify either the name or ARN of the log group to view. If the log
+-- group is in a source account and you are using a monitoring account, you
+-- must specify the ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+--
+-- 'time', 'getLogGroupFields_time' - The time to set as the center of the query. If you specify @time@, the
+-- 15 minutes before this time are queries. If you omit @time@, the 8
+-- minutes before and 8 minutes after this time are searched.
+--
+-- The @time@ value is specified as epoch time, which is the number of
+-- seconds since @January 1, 1970, 00:00:00 UTC@.
+--
+-- 'logGroupName', 'getLogGroupFields_logGroupName' - The name of the log group to search.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+newGetLogGroupFields ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  GetLogGroupFields
+newGetLogGroupFields pLogGroupName_ =
+  GetLogGroupFields'
+    { logGroupIdentifier =
+        Prelude.Nothing,
+      time = Prelude.Nothing,
+      logGroupName = pLogGroupName_
+    }
+
+-- | Specify either the name or ARN of the log group to view. If the log
+-- group is in a source account and you are using a monitoring account, you
+-- must specify the ARN.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+getLogGroupFields_logGroupIdentifier :: Lens.Lens' GetLogGroupFields (Prelude.Maybe Prelude.Text)
+getLogGroupFields_logGroupIdentifier = Lens.lens (\GetLogGroupFields' {logGroupIdentifier} -> logGroupIdentifier) (\s@GetLogGroupFields' {} a -> s {logGroupIdentifier = a} :: GetLogGroupFields)
+
+-- | The time to set as the center of the query. If you specify @time@, the
+-- 15 minutes before this time are queries. If you omit @time@, the 8
+-- minutes before and 8 minutes after this time are searched.
+--
+-- The @time@ value is specified as epoch time, which is the number of
+-- seconds since @January 1, 1970, 00:00:00 UTC@.
+getLogGroupFields_time :: Lens.Lens' GetLogGroupFields (Prelude.Maybe Prelude.Natural)
+getLogGroupFields_time = Lens.lens (\GetLogGroupFields' {time} -> time) (\s@GetLogGroupFields' {} a -> s {time = a} :: GetLogGroupFields)
+
+-- | The name of the log group to search.
+--
+-- If you specify values for both @logGroupName@ and @logGroupIdentifier@,
+-- the action returns an @InvalidParameterException@ error.
+getLogGroupFields_logGroupName :: Lens.Lens' GetLogGroupFields Prelude.Text
+getLogGroupFields_logGroupName = Lens.lens (\GetLogGroupFields' {logGroupName} -> logGroupName) (\s@GetLogGroupFields' {} a -> s {logGroupName = a} :: GetLogGroupFields)
+
+instance Core.AWSRequest GetLogGroupFields where
+  type
+    AWSResponse GetLogGroupFields =
+      GetLogGroupFieldsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLogGroupFieldsResponse'
+            Prelude.<$> (x Data..?> "logGroupFields" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLogGroupFields where
+  hashWithSalt _salt GetLogGroupFields' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupIdentifier
+      `Prelude.hashWithSalt` time
+      `Prelude.hashWithSalt` logGroupName
+
+instance Prelude.NFData GetLogGroupFields where
+  rnf GetLogGroupFields' {..} =
+    Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf time
+      `Prelude.seq` Prelude.rnf logGroupName
+
+instance Data.ToHeaders GetLogGroupFields where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.GetLogGroupFields" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLogGroupFields where
+  toJSON GetLogGroupFields' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("logGroupIdentifier" Data..=)
+              Prelude.<$> logGroupIdentifier,
+            ("time" Data..=) Prelude.<$> time,
+            Prelude.Just ("logGroupName" Data..= logGroupName)
+          ]
+      )
+
+instance Data.ToPath GetLogGroupFields where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetLogGroupFields where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLogGroupFieldsResponse' smart constructor.
+data GetLogGroupFieldsResponse = GetLogGroupFieldsResponse'
+  { -- | The array of fields found in the query. Each object in the array
+    -- contains the name of the field, along with the percentage of time it
+    -- appeared in the log events that were queried.
+    logGroupFields :: Prelude.Maybe [LogGroupField],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogGroupFieldsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupFields', 'getLogGroupFieldsResponse_logGroupFields' - The array of fields found in the query. Each object in the array
+-- contains the name of the field, along with the percentage of time it
+-- appeared in the log events that were queried.
+--
+-- 'httpStatus', 'getLogGroupFieldsResponse_httpStatus' - The response's http status code.
+newGetLogGroupFieldsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLogGroupFieldsResponse
+newGetLogGroupFieldsResponse pHttpStatus_ =
+  GetLogGroupFieldsResponse'
+    { logGroupFields =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The array of fields found in the query. Each object in the array
+-- contains the name of the field, along with the percentage of time it
+-- appeared in the log events that were queried.
+getLogGroupFieldsResponse_logGroupFields :: Lens.Lens' GetLogGroupFieldsResponse (Prelude.Maybe [LogGroupField])
+getLogGroupFieldsResponse_logGroupFields = Lens.lens (\GetLogGroupFieldsResponse' {logGroupFields} -> logGroupFields) (\s@GetLogGroupFieldsResponse' {} a -> s {logGroupFields = a} :: GetLogGroupFieldsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getLogGroupFieldsResponse_httpStatus :: Lens.Lens' GetLogGroupFieldsResponse Prelude.Int
+getLogGroupFieldsResponse_httpStatus = Lens.lens (\GetLogGroupFieldsResponse' {httpStatus} -> httpStatus) (\s@GetLogGroupFieldsResponse' {} a -> s {httpStatus = a} :: GetLogGroupFieldsResponse)
+
+instance Prelude.NFData GetLogGroupFieldsResponse where
+  rnf GetLogGroupFieldsResponse' {..} =
+    Prelude.rnf logGroupFields
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/GetLogRecord.hs b/gen/Amazonka/CloudWatchLogs/GetLogRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/GetLogRecord.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.GetLogRecord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves all of the fields and values of a single log event. All fields
+-- are retrieved, even if the original query that produced the
+-- @logRecordPointer@ retrieved only a subset of fields. Fields are
+-- returned as field name\/field value pairs.
+--
+-- The full unparsed log event is returned within @\@message@.
+module Amazonka.CloudWatchLogs.GetLogRecord
+  ( -- * Creating a Request
+    GetLogRecord (..),
+    newGetLogRecord,
+
+    -- * Request Lenses
+    getLogRecord_unmask,
+    getLogRecord_logRecordPointer,
+
+    -- * Destructuring the Response
+    GetLogRecordResponse (..),
+    newGetLogRecordResponse,
+
+    -- * Response Lenses
+    getLogRecordResponse_logRecord,
+    getLogRecordResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLogRecord' smart constructor.
+data GetLogRecord = GetLogRecord'
+  { -- | Specify @true@ to display the log event fields with all sensitive data
+    -- unmasked and visible. The default is @false@.
+    --
+    -- To use this operation with this parameter, you must be signed into an
+    -- account with the @logs:Unmask@ permission.
+    unmask :: Prelude.Maybe Prelude.Bool,
+    -- | The pointer corresponding to the log event record you want to retrieve.
+    -- You get this from the response of a @GetQueryResults@ operation. In that
+    -- response, the value of the @\@ptr@ field for a log event is the value to
+    -- use as @logRecordPointer@ to retrieve that complete log event record.
+    logRecordPointer :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unmask', 'getLogRecord_unmask' - Specify @true@ to display the log event fields with all sensitive data
+-- unmasked and visible. The default is @false@.
+--
+-- To use this operation with this parameter, you must be signed into an
+-- account with the @logs:Unmask@ permission.
+--
+-- 'logRecordPointer', 'getLogRecord_logRecordPointer' - The pointer corresponding to the log event record you want to retrieve.
+-- You get this from the response of a @GetQueryResults@ operation. In that
+-- response, the value of the @\@ptr@ field for a log event is the value to
+-- use as @logRecordPointer@ to retrieve that complete log event record.
+newGetLogRecord ::
+  -- | 'logRecordPointer'
+  Prelude.Text ->
+  GetLogRecord
+newGetLogRecord pLogRecordPointer_ =
+  GetLogRecord'
+    { unmask = Prelude.Nothing,
+      logRecordPointer = pLogRecordPointer_
+    }
+
+-- | Specify @true@ to display the log event fields with all sensitive data
+-- unmasked and visible. The default is @false@.
+--
+-- To use this operation with this parameter, you must be signed into an
+-- account with the @logs:Unmask@ permission.
+getLogRecord_unmask :: Lens.Lens' GetLogRecord (Prelude.Maybe Prelude.Bool)
+getLogRecord_unmask = Lens.lens (\GetLogRecord' {unmask} -> unmask) (\s@GetLogRecord' {} a -> s {unmask = a} :: GetLogRecord)
+
+-- | The pointer corresponding to the log event record you want to retrieve.
+-- You get this from the response of a @GetQueryResults@ operation. In that
+-- response, the value of the @\@ptr@ field for a log event is the value to
+-- use as @logRecordPointer@ to retrieve that complete log event record.
+getLogRecord_logRecordPointer :: Lens.Lens' GetLogRecord Prelude.Text
+getLogRecord_logRecordPointer = Lens.lens (\GetLogRecord' {logRecordPointer} -> logRecordPointer) (\s@GetLogRecord' {} a -> s {logRecordPointer = a} :: GetLogRecord)
+
+instance Core.AWSRequest GetLogRecord where
+  type AWSResponse GetLogRecord = GetLogRecordResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLogRecordResponse'
+            Prelude.<$> (x Data..?> "logRecord" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLogRecord where
+  hashWithSalt _salt GetLogRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` unmask
+      `Prelude.hashWithSalt` logRecordPointer
+
+instance Prelude.NFData GetLogRecord where
+  rnf GetLogRecord' {..} =
+    Prelude.rnf unmask
+      `Prelude.seq` Prelude.rnf logRecordPointer
+
+instance Data.ToHeaders GetLogRecord where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("Logs_20140328.GetLogRecord" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLogRecord where
+  toJSON GetLogRecord' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("unmask" Data..=) Prelude.<$> unmask,
+            Prelude.Just
+              ("logRecordPointer" Data..= logRecordPointer)
+          ]
+      )
+
+instance Data.ToPath GetLogRecord where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetLogRecord where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLogRecordResponse' smart constructor.
+data GetLogRecordResponse = GetLogRecordResponse'
+  { -- | The requested log event, as a JSON string.
+    logRecord :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogRecordResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logRecord', 'getLogRecordResponse_logRecord' - The requested log event, as a JSON string.
+--
+-- 'httpStatus', 'getLogRecordResponse_httpStatus' - The response's http status code.
+newGetLogRecordResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLogRecordResponse
+newGetLogRecordResponse pHttpStatus_ =
+  GetLogRecordResponse'
+    { logRecord = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The requested log event, as a JSON string.
+getLogRecordResponse_logRecord :: Lens.Lens' GetLogRecordResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getLogRecordResponse_logRecord = Lens.lens (\GetLogRecordResponse' {logRecord} -> logRecord) (\s@GetLogRecordResponse' {} a -> s {logRecord = a} :: GetLogRecordResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getLogRecordResponse_httpStatus :: Lens.Lens' GetLogRecordResponse Prelude.Int
+getLogRecordResponse_httpStatus = Lens.lens (\GetLogRecordResponse' {httpStatus} -> httpStatus) (\s@GetLogRecordResponse' {} a -> s {httpStatus = a} :: GetLogRecordResponse)
+
+instance Prelude.NFData GetLogRecordResponse where
+  rnf GetLogRecordResponse' {..} =
+    Prelude.rnf logRecord
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/GetQueryResults.hs b/gen/Amazonka/CloudWatchLogs/GetQueryResults.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/GetQueryResults.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.GetQueryResults
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the results from the specified query.
+--
+-- Only the fields requested in the query are returned, along with a
+-- @\@ptr@ field, which is the identifier for the log record. You can use
+-- the value of @\@ptr@ in a
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogRecord.html GetLogRecord>
+-- operation to get the full log record.
+--
+-- @GetQueryResults@ does not start running a query. To run a query, use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartQuery.html StartQuery>.
+--
+-- If the value of the @Status@ field in the output is @Running@, this
+-- operation returns only partial results. If you see a value of
+-- @Scheduled@ or @Running@ for the status, you can retry the operation
+-- later to see the final results.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account to start queries in linked source
+-- accounts. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+module Amazonka.CloudWatchLogs.GetQueryResults
+  ( -- * Creating a Request
+    GetQueryResults (..),
+    newGetQueryResults,
+
+    -- * Request Lenses
+    getQueryResults_queryId,
+
+    -- * Destructuring the Response
+    GetQueryResultsResponse (..),
+    newGetQueryResultsResponse,
+
+    -- * Response Lenses
+    getQueryResultsResponse_results,
+    getQueryResultsResponse_statistics,
+    getQueryResultsResponse_status,
+    getQueryResultsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetQueryResults' smart constructor.
+data GetQueryResults = GetQueryResults'
+  { -- | The ID number of the query.
+    queryId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetQueryResults' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queryId', 'getQueryResults_queryId' - The ID number of the query.
+newGetQueryResults ::
+  -- | 'queryId'
+  Prelude.Text ->
+  GetQueryResults
+newGetQueryResults pQueryId_ =
+  GetQueryResults' {queryId = pQueryId_}
+
+-- | The ID number of the query.
+getQueryResults_queryId :: Lens.Lens' GetQueryResults Prelude.Text
+getQueryResults_queryId = Lens.lens (\GetQueryResults' {queryId} -> queryId) (\s@GetQueryResults' {} a -> s {queryId = a} :: GetQueryResults)
+
+instance Core.AWSRequest GetQueryResults where
+  type
+    AWSResponse GetQueryResults =
+      GetQueryResultsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetQueryResultsResponse'
+            Prelude.<$> (x Data..?> "results" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "statistics")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetQueryResults where
+  hashWithSalt _salt GetQueryResults' {..} =
+    _salt `Prelude.hashWithSalt` queryId
+
+instance Prelude.NFData GetQueryResults where
+  rnf GetQueryResults' {..} = Prelude.rnf queryId
+
+instance Data.ToHeaders GetQueryResults where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.GetQueryResults" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetQueryResults where
+  toJSON GetQueryResults' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("queryId" Data..= queryId)]
+      )
+
+instance Data.ToPath GetQueryResults where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetQueryResults where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetQueryResultsResponse' smart constructor.
+data GetQueryResultsResponse = GetQueryResultsResponse'
+  { -- | The log events that matched the query criteria during the most recent
+    -- time it ran.
+    --
+    -- The @results@ value is an array of arrays. Each log event is one object
+    -- in the top-level array. Each of these log event objects is an array of
+    -- @field@\/@value@ pairs.
+    results :: Prelude.Maybe [[ResultField]],
+    -- | Includes the number of log events scanned by the query, the number of
+    -- log events that matched the query criteria, and the total number of
+    -- bytes in the log events that were scanned. These values reflect the full
+    -- raw results of the query.
+    statistics :: Prelude.Maybe QueryStatistics,
+    -- | The status of the most recent running of the query. Possible values are
+    -- @Cancelled@, @Complete@, @Failed@, @Running@, @Scheduled@, @Timeout@,
+    -- and @Unknown@.
+    --
+    -- Queries time out after 15 minutes of runtime. To avoid having your
+    -- queries time out, reduce the time range being searched or partition your
+    -- query into a number of queries.
+    status :: Prelude.Maybe QueryStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetQueryResultsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'results', 'getQueryResultsResponse_results' - The log events that matched the query criteria during the most recent
+-- time it ran.
+--
+-- The @results@ value is an array of arrays. Each log event is one object
+-- in the top-level array. Each of these log event objects is an array of
+-- @field@\/@value@ pairs.
+--
+-- 'statistics', 'getQueryResultsResponse_statistics' - Includes the number of log events scanned by the query, the number of
+-- log events that matched the query criteria, and the total number of
+-- bytes in the log events that were scanned. These values reflect the full
+-- raw results of the query.
+--
+-- 'status', 'getQueryResultsResponse_status' - The status of the most recent running of the query. Possible values are
+-- @Cancelled@, @Complete@, @Failed@, @Running@, @Scheduled@, @Timeout@,
+-- and @Unknown@.
+--
+-- Queries time out after 15 minutes of runtime. To avoid having your
+-- queries time out, reduce the time range being searched or partition your
+-- query into a number of queries.
+--
+-- 'httpStatus', 'getQueryResultsResponse_httpStatus' - The response's http status code.
+newGetQueryResultsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetQueryResultsResponse
+newGetQueryResultsResponse pHttpStatus_ =
+  GetQueryResultsResponse'
+    { results = Prelude.Nothing,
+      statistics = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The log events that matched the query criteria during the most recent
+-- time it ran.
+--
+-- The @results@ value is an array of arrays. Each log event is one object
+-- in the top-level array. Each of these log event objects is an array of
+-- @field@\/@value@ pairs.
+getQueryResultsResponse_results :: Lens.Lens' GetQueryResultsResponse (Prelude.Maybe [[ResultField]])
+getQueryResultsResponse_results = Lens.lens (\GetQueryResultsResponse' {results} -> results) (\s@GetQueryResultsResponse' {} a -> s {results = a} :: GetQueryResultsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Includes the number of log events scanned by the query, the number of
+-- log events that matched the query criteria, and the total number of
+-- bytes in the log events that were scanned. These values reflect the full
+-- raw results of the query.
+getQueryResultsResponse_statistics :: Lens.Lens' GetQueryResultsResponse (Prelude.Maybe QueryStatistics)
+getQueryResultsResponse_statistics = Lens.lens (\GetQueryResultsResponse' {statistics} -> statistics) (\s@GetQueryResultsResponse' {} a -> s {statistics = a} :: GetQueryResultsResponse)
+
+-- | The status of the most recent running of the query. Possible values are
+-- @Cancelled@, @Complete@, @Failed@, @Running@, @Scheduled@, @Timeout@,
+-- and @Unknown@.
+--
+-- Queries time out after 15 minutes of runtime. To avoid having your
+-- queries time out, reduce the time range being searched or partition your
+-- query into a number of queries.
+getQueryResultsResponse_status :: Lens.Lens' GetQueryResultsResponse (Prelude.Maybe QueryStatus)
+getQueryResultsResponse_status = Lens.lens (\GetQueryResultsResponse' {status} -> status) (\s@GetQueryResultsResponse' {} a -> s {status = a} :: GetQueryResultsResponse)
+
+-- | The response's http status code.
+getQueryResultsResponse_httpStatus :: Lens.Lens' GetQueryResultsResponse Prelude.Int
+getQueryResultsResponse_httpStatus = Lens.lens (\GetQueryResultsResponse' {httpStatus} -> httpStatus) (\s@GetQueryResultsResponse' {} a -> s {httpStatus = a} :: GetQueryResultsResponse)
+
+instance Prelude.NFData GetQueryResultsResponse where
+  rnf GetQueryResultsResponse' {..} =
+    Prelude.rnf results
+      `Prelude.seq` Prelude.rnf statistics
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/Lens.hs b/gen/Amazonka/CloudWatchLogs/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Lens.hs
@@ -0,0 +1,521 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Lens
+  ( -- * Operations
+
+    -- ** AssociateKmsKey
+    associateKmsKey_logGroupName,
+    associateKmsKey_kmsKeyId,
+
+    -- ** CancelExportTask
+    cancelExportTask_taskId,
+
+    -- ** CreateExportTask
+    createExportTask_destinationPrefix,
+    createExportTask_logStreamNamePrefix,
+    createExportTask_taskName,
+    createExportTask_logGroupName,
+    createExportTask_from,
+    createExportTask_to,
+    createExportTask_destination,
+    createExportTaskResponse_taskId,
+    createExportTaskResponse_httpStatus,
+
+    -- ** CreateLogGroup
+    createLogGroup_kmsKeyId,
+    createLogGroup_tags,
+    createLogGroup_logGroupName,
+
+    -- ** CreateLogStream
+    createLogStream_logGroupName,
+    createLogStream_logStreamName,
+
+    -- ** DeleteDataProtectionPolicy
+    deleteDataProtectionPolicy_logGroupIdentifier,
+
+    -- ** DeleteDestination
+    deleteDestination_destinationName,
+
+    -- ** DeleteLogGroup
+    deleteLogGroup_logGroupName,
+
+    -- ** DeleteLogStream
+    deleteLogStream_logGroupName,
+    deleteLogStream_logStreamName,
+
+    -- ** DeleteMetricFilter
+    deleteMetricFilter_logGroupName,
+    deleteMetricFilter_filterName,
+
+    -- ** DeleteQueryDefinition
+    deleteQueryDefinition_queryDefinitionId,
+    deleteQueryDefinitionResponse_success,
+    deleteQueryDefinitionResponse_httpStatus,
+
+    -- ** DeleteResourcePolicy
+    deleteResourcePolicy_policyName,
+
+    -- ** DeleteRetentionPolicy
+    deleteRetentionPolicy_logGroupName,
+
+    -- ** DeleteSubscriptionFilter
+    deleteSubscriptionFilter_logGroupName,
+    deleteSubscriptionFilter_filterName,
+
+    -- ** DescribeDestinations
+    describeDestinations_destinationNamePrefix,
+    describeDestinations_limit,
+    describeDestinations_nextToken,
+    describeDestinationsResponse_destinations,
+    describeDestinationsResponse_nextToken,
+    describeDestinationsResponse_httpStatus,
+
+    -- ** DescribeExportTasks
+    describeExportTasks_limit,
+    describeExportTasks_nextToken,
+    describeExportTasks_statusCode,
+    describeExportTasks_taskId,
+    describeExportTasksResponse_exportTasks,
+    describeExportTasksResponse_nextToken,
+    describeExportTasksResponse_httpStatus,
+
+    -- ** DescribeLogGroups
+    describeLogGroups_accountIdentifiers,
+    describeLogGroups_includeLinkedAccounts,
+    describeLogGroups_limit,
+    describeLogGroups_logGroupNamePattern,
+    describeLogGroups_logGroupNamePrefix,
+    describeLogGroups_nextToken,
+    describeLogGroupsResponse_logGroups,
+    describeLogGroupsResponse_nextToken,
+    describeLogGroupsResponse_httpStatus,
+
+    -- ** DescribeLogStreams
+    describeLogStreams_descending,
+    describeLogStreams_limit,
+    describeLogStreams_logGroupIdentifier,
+    describeLogStreams_logStreamNamePrefix,
+    describeLogStreams_nextToken,
+    describeLogStreams_orderBy,
+    describeLogStreams_logGroupName,
+    describeLogStreamsResponse_logStreams,
+    describeLogStreamsResponse_nextToken,
+    describeLogStreamsResponse_httpStatus,
+
+    -- ** DescribeMetricFilters
+    describeMetricFilters_filterNamePrefix,
+    describeMetricFilters_limit,
+    describeMetricFilters_logGroupName,
+    describeMetricFilters_metricName,
+    describeMetricFilters_metricNamespace,
+    describeMetricFilters_nextToken,
+    describeMetricFiltersResponse_metricFilters,
+    describeMetricFiltersResponse_nextToken,
+    describeMetricFiltersResponse_httpStatus,
+
+    -- ** DescribeQueries
+    describeQueries_logGroupName,
+    describeQueries_maxResults,
+    describeQueries_nextToken,
+    describeQueries_status,
+    describeQueriesResponse_nextToken,
+    describeQueriesResponse_queries,
+    describeQueriesResponse_httpStatus,
+
+    -- ** DescribeQueryDefinitions
+    describeQueryDefinitions_maxResults,
+    describeQueryDefinitions_nextToken,
+    describeQueryDefinitions_queryDefinitionNamePrefix,
+    describeQueryDefinitionsResponse_nextToken,
+    describeQueryDefinitionsResponse_queryDefinitions,
+    describeQueryDefinitionsResponse_httpStatus,
+
+    -- ** DescribeResourcePolicies
+    describeResourcePolicies_limit,
+    describeResourcePolicies_nextToken,
+    describeResourcePoliciesResponse_nextToken,
+    describeResourcePoliciesResponse_resourcePolicies,
+    describeResourcePoliciesResponse_httpStatus,
+
+    -- ** DescribeSubscriptionFilters
+    describeSubscriptionFilters_filterNamePrefix,
+    describeSubscriptionFilters_limit,
+    describeSubscriptionFilters_nextToken,
+    describeSubscriptionFilters_logGroupName,
+    describeSubscriptionFiltersResponse_nextToken,
+    describeSubscriptionFiltersResponse_subscriptionFilters,
+    describeSubscriptionFiltersResponse_httpStatus,
+
+    -- ** DisassociateKmsKey
+    disassociateKmsKey_logGroupName,
+
+    -- ** FilterLogEvents
+    filterLogEvents_endTime,
+    filterLogEvents_filterPattern,
+    filterLogEvents_interleaved,
+    filterLogEvents_limit,
+    filterLogEvents_logGroupIdentifier,
+    filterLogEvents_logStreamNamePrefix,
+    filterLogEvents_logStreamNames,
+    filterLogEvents_nextToken,
+    filterLogEvents_startTime,
+    filterLogEvents_unmask,
+    filterLogEvents_logGroupName,
+    filterLogEventsResponse_events,
+    filterLogEventsResponse_nextToken,
+    filterLogEventsResponse_searchedLogStreams,
+    filterLogEventsResponse_httpStatus,
+
+    -- ** GetDataProtectionPolicy
+    getDataProtectionPolicy_logGroupIdentifier,
+    getDataProtectionPolicyResponse_lastUpdatedTime,
+    getDataProtectionPolicyResponse_logGroupIdentifier,
+    getDataProtectionPolicyResponse_policyDocument,
+    getDataProtectionPolicyResponse_httpStatus,
+
+    -- ** GetLogEvents
+    getLogEvents_endTime,
+    getLogEvents_limit,
+    getLogEvents_logGroupIdentifier,
+    getLogEvents_nextToken,
+    getLogEvents_startFromHead,
+    getLogEvents_startTime,
+    getLogEvents_unmask,
+    getLogEvents_logGroupName,
+    getLogEvents_logStreamName,
+    getLogEventsResponse_events,
+    getLogEventsResponse_nextBackwardToken,
+    getLogEventsResponse_nextForwardToken,
+    getLogEventsResponse_httpStatus,
+
+    -- ** GetLogGroupFields
+    getLogGroupFields_logGroupIdentifier,
+    getLogGroupFields_time,
+    getLogGroupFields_logGroupName,
+    getLogGroupFieldsResponse_logGroupFields,
+    getLogGroupFieldsResponse_httpStatus,
+
+    -- ** GetLogRecord
+    getLogRecord_unmask,
+    getLogRecord_logRecordPointer,
+    getLogRecordResponse_logRecord,
+    getLogRecordResponse_httpStatus,
+
+    -- ** GetQueryResults
+    getQueryResults_queryId,
+    getQueryResultsResponse_results,
+    getQueryResultsResponse_statistics,
+    getQueryResultsResponse_status,
+    getQueryResultsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutDataProtectionPolicy
+    putDataProtectionPolicy_logGroupIdentifier,
+    putDataProtectionPolicy_policyDocument,
+    putDataProtectionPolicyResponse_lastUpdatedTime,
+    putDataProtectionPolicyResponse_logGroupIdentifier,
+    putDataProtectionPolicyResponse_policyDocument,
+    putDataProtectionPolicyResponse_httpStatus,
+
+    -- ** PutDestination
+    putDestination_tags,
+    putDestination_destinationName,
+    putDestination_targetArn,
+    putDestination_roleArn,
+    putDestinationResponse_destination,
+    putDestinationResponse_httpStatus,
+
+    -- ** PutDestinationPolicy
+    putDestinationPolicy_forceUpdate,
+    putDestinationPolicy_destinationName,
+    putDestinationPolicy_accessPolicy,
+
+    -- ** PutLogEvents
+    putLogEvents_sequenceToken,
+    putLogEvents_logGroupName,
+    putLogEvents_logStreamName,
+    putLogEvents_logEvents,
+    putLogEventsResponse_nextSequenceToken,
+    putLogEventsResponse_rejectedLogEventsInfo,
+    putLogEventsResponse_httpStatus,
+
+    -- ** PutMetricFilter
+    putMetricFilter_logGroupName,
+    putMetricFilter_filterName,
+    putMetricFilter_filterPattern,
+    putMetricFilter_metricTransformations,
+
+    -- ** PutQueryDefinition
+    putQueryDefinition_logGroupNames,
+    putQueryDefinition_queryDefinitionId,
+    putQueryDefinition_name,
+    putQueryDefinition_queryString,
+    putQueryDefinitionResponse_queryDefinitionId,
+    putQueryDefinitionResponse_httpStatus,
+
+    -- ** PutResourcePolicy
+    putResourcePolicy_policyDocument,
+    putResourcePolicy_policyName,
+    putResourcePolicyResponse_resourcePolicy,
+    putResourcePolicyResponse_httpStatus,
+
+    -- ** PutRetentionPolicy
+    putRetentionPolicy_logGroupName,
+    putRetentionPolicy_retentionInDays,
+
+    -- ** PutSubscriptionFilter
+    putSubscriptionFilter_distribution,
+    putSubscriptionFilter_roleArn,
+    putSubscriptionFilter_logGroupName,
+    putSubscriptionFilter_filterName,
+    putSubscriptionFilter_filterPattern,
+    putSubscriptionFilter_destinationArn,
+
+    -- ** StartQuery
+    startQuery_limit,
+    startQuery_logGroupIdentifiers,
+    startQuery_logGroupName,
+    startQuery_logGroupNames,
+    startQuery_startTime,
+    startQuery_endTime,
+    startQuery_queryString,
+    startQueryResponse_queryId,
+    startQueryResponse_httpStatus,
+
+    -- ** StopQuery
+    stopQuery_queryId,
+    stopQueryResponse_success,
+    stopQueryResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** TestMetricFilter
+    testMetricFilter_filterPattern,
+    testMetricFilter_logEventMessages,
+    testMetricFilterResponse_matches,
+    testMetricFilterResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Types
+
+    -- ** Destination
+    destination_accessPolicy,
+    destination_arn,
+    destination_creationTime,
+    destination_destinationName,
+    destination_roleArn,
+    destination_targetArn,
+
+    -- ** ExportTask
+    exportTask_destination,
+    exportTask_destinationPrefix,
+    exportTask_executionInfo,
+    exportTask_from,
+    exportTask_logGroupName,
+    exportTask_status,
+    exportTask_taskId,
+    exportTask_taskName,
+    exportTask_to,
+
+    -- ** ExportTaskExecutionInfo
+    exportTaskExecutionInfo_completionTime,
+    exportTaskExecutionInfo_creationTime,
+
+    -- ** ExportTaskStatus
+    exportTaskStatus_code,
+    exportTaskStatus_message,
+
+    -- ** FilteredLogEvent
+    filteredLogEvent_eventId,
+    filteredLogEvent_ingestionTime,
+    filteredLogEvent_logStreamName,
+    filteredLogEvent_message,
+    filteredLogEvent_timestamp,
+
+    -- ** InputLogEvent
+    inputLogEvent_timestamp,
+    inputLogEvent_message,
+
+    -- ** LogGroup
+    logGroup_arn,
+    logGroup_creationTime,
+    logGroup_dataProtectionStatus,
+    logGroup_kmsKeyId,
+    logGroup_logGroupName,
+    logGroup_metricFilterCount,
+    logGroup_retentionInDays,
+    logGroup_storedBytes,
+
+    -- ** LogGroupField
+    logGroupField_name,
+    logGroupField_percent,
+
+    -- ** LogStream
+    logStream_arn,
+    logStream_creationTime,
+    logStream_firstEventTimestamp,
+    logStream_lastEventTimestamp,
+    logStream_lastIngestionTime,
+    logStream_logStreamName,
+    logStream_storedBytes,
+    logStream_uploadSequenceToken,
+
+    -- ** MetricFilter
+    metricFilter_creationTime,
+    metricFilter_filterName,
+    metricFilter_filterPattern,
+    metricFilter_logGroupName,
+    metricFilter_metricTransformations,
+
+    -- ** MetricFilterMatchRecord
+    metricFilterMatchRecord_eventMessage,
+    metricFilterMatchRecord_eventNumber,
+    metricFilterMatchRecord_extractedValues,
+
+    -- ** MetricTransformation
+    metricTransformation_defaultValue,
+    metricTransformation_dimensions,
+    metricTransformation_unit,
+    metricTransformation_metricName,
+    metricTransformation_metricNamespace,
+    metricTransformation_metricValue,
+
+    -- ** OutputLogEvent
+    outputLogEvent_ingestionTime,
+    outputLogEvent_message,
+    outputLogEvent_timestamp,
+
+    -- ** QueryDefinition
+    queryDefinition_lastModified,
+    queryDefinition_logGroupNames,
+    queryDefinition_name,
+    queryDefinition_queryDefinitionId,
+    queryDefinition_queryString,
+
+    -- ** QueryInfo
+    queryInfo_createTime,
+    queryInfo_logGroupName,
+    queryInfo_queryId,
+    queryInfo_queryString,
+    queryInfo_status,
+
+    -- ** QueryStatistics
+    queryStatistics_bytesScanned,
+    queryStatistics_recordsMatched,
+    queryStatistics_recordsScanned,
+
+    -- ** RejectedLogEventsInfo
+    rejectedLogEventsInfo_expiredLogEventEndIndex,
+    rejectedLogEventsInfo_tooNewLogEventStartIndex,
+    rejectedLogEventsInfo_tooOldLogEventEndIndex,
+
+    -- ** ResourcePolicy
+    resourcePolicy_lastUpdatedTime,
+    resourcePolicy_policyDocument,
+    resourcePolicy_policyName,
+
+    -- ** ResultField
+    resultField_field,
+    resultField_value,
+
+    -- ** SearchedLogStream
+    searchedLogStream_logStreamName,
+    searchedLogStream_searchedCompletely,
+
+    -- ** SubscriptionFilter
+    subscriptionFilter_creationTime,
+    subscriptionFilter_destinationArn,
+    subscriptionFilter_distribution,
+    subscriptionFilter_filterName,
+    subscriptionFilter_filterPattern,
+    subscriptionFilter_logGroupName,
+    subscriptionFilter_roleArn,
+  )
+where
+
+import Amazonka.CloudWatchLogs.AssociateKmsKey
+import Amazonka.CloudWatchLogs.CancelExportTask
+import Amazonka.CloudWatchLogs.CreateExportTask
+import Amazonka.CloudWatchLogs.CreateLogGroup
+import Amazonka.CloudWatchLogs.CreateLogStream
+import Amazonka.CloudWatchLogs.DeleteDataProtectionPolicy
+import Amazonka.CloudWatchLogs.DeleteDestination
+import Amazonka.CloudWatchLogs.DeleteLogGroup
+import Amazonka.CloudWatchLogs.DeleteLogStream
+import Amazonka.CloudWatchLogs.DeleteMetricFilter
+import Amazonka.CloudWatchLogs.DeleteQueryDefinition
+import Amazonka.CloudWatchLogs.DeleteResourcePolicy
+import Amazonka.CloudWatchLogs.DeleteRetentionPolicy
+import Amazonka.CloudWatchLogs.DeleteSubscriptionFilter
+import Amazonka.CloudWatchLogs.DescribeDestinations
+import Amazonka.CloudWatchLogs.DescribeExportTasks
+import Amazonka.CloudWatchLogs.DescribeLogGroups
+import Amazonka.CloudWatchLogs.DescribeLogStreams
+import Amazonka.CloudWatchLogs.DescribeMetricFilters
+import Amazonka.CloudWatchLogs.DescribeQueries
+import Amazonka.CloudWatchLogs.DescribeQueryDefinitions
+import Amazonka.CloudWatchLogs.DescribeResourcePolicies
+import Amazonka.CloudWatchLogs.DescribeSubscriptionFilters
+import Amazonka.CloudWatchLogs.DisassociateKmsKey
+import Amazonka.CloudWatchLogs.FilterLogEvents
+import Amazonka.CloudWatchLogs.GetDataProtectionPolicy
+import Amazonka.CloudWatchLogs.GetLogEvents
+import Amazonka.CloudWatchLogs.GetLogGroupFields
+import Amazonka.CloudWatchLogs.GetLogRecord
+import Amazonka.CloudWatchLogs.GetQueryResults
+import Amazonka.CloudWatchLogs.ListTagsForResource
+import Amazonka.CloudWatchLogs.PutDataProtectionPolicy
+import Amazonka.CloudWatchLogs.PutDestination
+import Amazonka.CloudWatchLogs.PutDestinationPolicy
+import Amazonka.CloudWatchLogs.PutLogEvents
+import Amazonka.CloudWatchLogs.PutMetricFilter
+import Amazonka.CloudWatchLogs.PutQueryDefinition
+import Amazonka.CloudWatchLogs.PutResourcePolicy
+import Amazonka.CloudWatchLogs.PutRetentionPolicy
+import Amazonka.CloudWatchLogs.PutSubscriptionFilter
+import Amazonka.CloudWatchLogs.StartQuery
+import Amazonka.CloudWatchLogs.StopQuery
+import Amazonka.CloudWatchLogs.TagResource
+import Amazonka.CloudWatchLogs.TestMetricFilter
+import Amazonka.CloudWatchLogs.Types.Destination
+import Amazonka.CloudWatchLogs.Types.ExportTask
+import Amazonka.CloudWatchLogs.Types.ExportTaskExecutionInfo
+import Amazonka.CloudWatchLogs.Types.ExportTaskStatus
+import Amazonka.CloudWatchLogs.Types.FilteredLogEvent
+import Amazonka.CloudWatchLogs.Types.InputLogEvent
+import Amazonka.CloudWatchLogs.Types.LogGroup
+import Amazonka.CloudWatchLogs.Types.LogGroupField
+import Amazonka.CloudWatchLogs.Types.LogStream
+import Amazonka.CloudWatchLogs.Types.MetricFilter
+import Amazonka.CloudWatchLogs.Types.MetricFilterMatchRecord
+import Amazonka.CloudWatchLogs.Types.MetricTransformation
+import Amazonka.CloudWatchLogs.Types.OutputLogEvent
+import Amazonka.CloudWatchLogs.Types.QueryDefinition
+import Amazonka.CloudWatchLogs.Types.QueryInfo
+import Amazonka.CloudWatchLogs.Types.QueryStatistics
+import Amazonka.CloudWatchLogs.Types.RejectedLogEventsInfo
+import Amazonka.CloudWatchLogs.Types.ResourcePolicy
+import Amazonka.CloudWatchLogs.Types.ResultField
+import Amazonka.CloudWatchLogs.Types.SearchedLogStream
+import Amazonka.CloudWatchLogs.Types.SubscriptionFilter
+import Amazonka.CloudWatchLogs.UntagResource
diff --git a/gen/Amazonka/CloudWatchLogs/ListTagsForResource.hs b/gen/Amazonka/CloudWatchLogs/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/ListTagsForResource.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the tags associated with a CloudWatch Logs resource. Currently,
+-- log groups and destinations support tagging.
+module Amazonka.CloudWatchLogs.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The ARN of the resource that you want to view tags for.
+    --
+    -- The ARN format of a log group is
+    -- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+    --
+    -- The ARN format of a destination is
+    -- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+    --
+    -- For more information about ARN format, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The ARN of the resource that you want to view tags for.
+--
+-- The ARN format of a log group is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+--
+-- The ARN format of a destination is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+--
+-- For more information about ARN format, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The ARN of the resource that you want to view tags for.
+--
+-- The ARN format of a log group is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+--
+-- The ARN format of a destination is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+--
+-- For more information about ARN format, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("resourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The list of tags associated with the requested resource.>
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The list of tags associated with the requested resource.>
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of tags associated with the requested resource.>
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/PutDataProtectionPolicy.hs b/gen/Amazonka/CloudWatchLogs/PutDataProtectionPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutDataProtectionPolicy.hs
@@ -0,0 +1,334 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutDataProtectionPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a data protection policy for the specified log group. A data
+-- protection policy can help safeguard sensitive data that\'s ingested by
+-- the log group by auditing and masking the sensitive log data.
+--
+-- Sensitive data is detected and masked when it is ingested into the log
+-- group. When you set a data protection policy, log events ingested into
+-- the log group before that time are not masked.
+--
+-- By default, when a user views a log event that includes masked data, the
+-- sensitive data is replaced by asterisks. A user who has the
+-- @logs:Unmask@ permission can use a
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html GetLogEvents>
+-- or
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html FilterLogEvents>
+-- operation with the @unmask@ parameter set to @true@ to view the unmasked
+-- log events. Users with the @logs:Unmask@ can also view unmasked data in
+-- the CloudWatch Logs console by running a CloudWatch Logs Insights query
+-- with the @unmask@ query command.
+--
+-- For more information, including a list of types of data that can be
+-- audited and masked, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html Protect sensitive log data with masking>.
+module Amazonka.CloudWatchLogs.PutDataProtectionPolicy
+  ( -- * Creating a Request
+    PutDataProtectionPolicy (..),
+    newPutDataProtectionPolicy,
+
+    -- * Request Lenses
+    putDataProtectionPolicy_logGroupIdentifier,
+    putDataProtectionPolicy_policyDocument,
+
+    -- * Destructuring the Response
+    PutDataProtectionPolicyResponse (..),
+    newPutDataProtectionPolicyResponse,
+
+    -- * Response Lenses
+    putDataProtectionPolicyResponse_lastUpdatedTime,
+    putDataProtectionPolicyResponse_logGroupIdentifier,
+    putDataProtectionPolicyResponse_policyDocument,
+    putDataProtectionPolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutDataProtectionPolicy' smart constructor.
+data PutDataProtectionPolicy = PutDataProtectionPolicy'
+  { -- | Specify either the log group name or log group ARN.
+    logGroupIdentifier :: Prelude.Text,
+    -- | Specify the data protection policy, in JSON.
+    --
+    -- This policy must include two JSON blocks:
+    --
+    -- -   The first block must include both a @DataIdentifer@ array and an
+    --     @Operation@ property with an @Audit@ action. The @DataIdentifer@
+    --     array lists the types of sensitive data that you want to mask. For
+    --     more information about the available options, see
+    --     <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data-types.html Types of data that you can mask>.
+    --
+    --     The @Operation@ property with an @Audit@ action is required to find
+    --     the sensitive data terms. This @Audit@ action must contain a
+    --     @FindingsDestination@ object. You can optionally use that
+    --     @FindingsDestination@ object to list one or more destinations to
+    --     send audit findings to. If you specify destinations such as log
+    --     groups, Kinesis Data Firehose streams, and S3 buckets, they must
+    --     already exist.
+    --
+    -- -   The second block must include both a @DataIdentifer@ array and an
+    --     @Operation@ property with an @Deidentify@ action. The
+    --     @DataIdentifer@ array must exactly match the @DataIdentifer@ array
+    --     in the first block of the policy.
+    --
+    --     The @Operation@ property with the @Deidentify@ action is what
+    --     actually masks the data, and it must contain the
+    --     @ \"MaskConfig\": {}@ object. The @ \"MaskConfig\": {}@ object must
+    --     be empty.
+    --
+    -- For an example data protection policy, see the __Examples__ section on
+    -- this page.
+    --
+    -- The contents of two @DataIdentifer@ arrays must match exactly.
+    policyDocument :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDataProtectionPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupIdentifier', 'putDataProtectionPolicy_logGroupIdentifier' - Specify either the log group name or log group ARN.
+--
+-- 'policyDocument', 'putDataProtectionPolicy_policyDocument' - Specify the data protection policy, in JSON.
+--
+-- This policy must include two JSON blocks:
+--
+-- -   The first block must include both a @DataIdentifer@ array and an
+--     @Operation@ property with an @Audit@ action. The @DataIdentifer@
+--     array lists the types of sensitive data that you want to mask. For
+--     more information about the available options, see
+--     <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data-types.html Types of data that you can mask>.
+--
+--     The @Operation@ property with an @Audit@ action is required to find
+--     the sensitive data terms. This @Audit@ action must contain a
+--     @FindingsDestination@ object. You can optionally use that
+--     @FindingsDestination@ object to list one or more destinations to
+--     send audit findings to. If you specify destinations such as log
+--     groups, Kinesis Data Firehose streams, and S3 buckets, they must
+--     already exist.
+--
+-- -   The second block must include both a @DataIdentifer@ array and an
+--     @Operation@ property with an @Deidentify@ action. The
+--     @DataIdentifer@ array must exactly match the @DataIdentifer@ array
+--     in the first block of the policy.
+--
+--     The @Operation@ property with the @Deidentify@ action is what
+--     actually masks the data, and it must contain the
+--     @ \"MaskConfig\": {}@ object. The @ \"MaskConfig\": {}@ object must
+--     be empty.
+--
+-- For an example data protection policy, see the __Examples__ section on
+-- this page.
+--
+-- The contents of two @DataIdentifer@ arrays must match exactly.
+newPutDataProtectionPolicy ::
+  -- | 'logGroupIdentifier'
+  Prelude.Text ->
+  -- | 'policyDocument'
+  Prelude.Text ->
+  PutDataProtectionPolicy
+newPutDataProtectionPolicy
+  pLogGroupIdentifier_
+  pPolicyDocument_ =
+    PutDataProtectionPolicy'
+      { logGroupIdentifier =
+          pLogGroupIdentifier_,
+        policyDocument = pPolicyDocument_
+      }
+
+-- | Specify either the log group name or log group ARN.
+putDataProtectionPolicy_logGroupIdentifier :: Lens.Lens' PutDataProtectionPolicy Prelude.Text
+putDataProtectionPolicy_logGroupIdentifier = Lens.lens (\PutDataProtectionPolicy' {logGroupIdentifier} -> logGroupIdentifier) (\s@PutDataProtectionPolicy' {} a -> s {logGroupIdentifier = a} :: PutDataProtectionPolicy)
+
+-- | Specify the data protection policy, in JSON.
+--
+-- This policy must include two JSON blocks:
+--
+-- -   The first block must include both a @DataIdentifer@ array and an
+--     @Operation@ property with an @Audit@ action. The @DataIdentifer@
+--     array lists the types of sensitive data that you want to mask. For
+--     more information about the available options, see
+--     <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data-types.html Types of data that you can mask>.
+--
+--     The @Operation@ property with an @Audit@ action is required to find
+--     the sensitive data terms. This @Audit@ action must contain a
+--     @FindingsDestination@ object. You can optionally use that
+--     @FindingsDestination@ object to list one or more destinations to
+--     send audit findings to. If you specify destinations such as log
+--     groups, Kinesis Data Firehose streams, and S3 buckets, they must
+--     already exist.
+--
+-- -   The second block must include both a @DataIdentifer@ array and an
+--     @Operation@ property with an @Deidentify@ action. The
+--     @DataIdentifer@ array must exactly match the @DataIdentifer@ array
+--     in the first block of the policy.
+--
+--     The @Operation@ property with the @Deidentify@ action is what
+--     actually masks the data, and it must contain the
+--     @ \"MaskConfig\": {}@ object. The @ \"MaskConfig\": {}@ object must
+--     be empty.
+--
+-- For an example data protection policy, see the __Examples__ section on
+-- this page.
+--
+-- The contents of two @DataIdentifer@ arrays must match exactly.
+putDataProtectionPolicy_policyDocument :: Lens.Lens' PutDataProtectionPolicy Prelude.Text
+putDataProtectionPolicy_policyDocument = Lens.lens (\PutDataProtectionPolicy' {policyDocument} -> policyDocument) (\s@PutDataProtectionPolicy' {} a -> s {policyDocument = a} :: PutDataProtectionPolicy)
+
+instance Core.AWSRequest PutDataProtectionPolicy where
+  type
+    AWSResponse PutDataProtectionPolicy =
+      PutDataProtectionPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutDataProtectionPolicyResponse'
+            Prelude.<$> (x Data..?> "lastUpdatedTime")
+            Prelude.<*> (x Data..?> "logGroupIdentifier")
+            Prelude.<*> (x Data..?> "policyDocument")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDataProtectionPolicy where
+  hashWithSalt _salt PutDataProtectionPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupIdentifier
+      `Prelude.hashWithSalt` policyDocument
+
+instance Prelude.NFData PutDataProtectionPolicy where
+  rnf PutDataProtectionPolicy' {..} =
+    Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf policyDocument
+
+instance Data.ToHeaders PutDataProtectionPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutDataProtectionPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDataProtectionPolicy where
+  toJSON PutDataProtectionPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("logGroupIdentifier" Data..= logGroupIdentifier),
+            Prelude.Just
+              ("policyDocument" Data..= policyDocument)
+          ]
+      )
+
+instance Data.ToPath PutDataProtectionPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutDataProtectionPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutDataProtectionPolicyResponse' smart constructor.
+data PutDataProtectionPolicyResponse = PutDataProtectionPolicyResponse'
+  { -- | The date and time that this policy was most recently updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Natural,
+    -- | The log group name or ARN that you specified in your request.
+    logGroupIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The data protection policy used for this log group.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDataProtectionPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastUpdatedTime', 'putDataProtectionPolicyResponse_lastUpdatedTime' - The date and time that this policy was most recently updated.
+--
+-- 'logGroupIdentifier', 'putDataProtectionPolicyResponse_logGroupIdentifier' - The log group name or ARN that you specified in your request.
+--
+-- 'policyDocument', 'putDataProtectionPolicyResponse_policyDocument' - The data protection policy used for this log group.
+--
+-- 'httpStatus', 'putDataProtectionPolicyResponse_httpStatus' - The response's http status code.
+newPutDataProtectionPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDataProtectionPolicyResponse
+newPutDataProtectionPolicyResponse pHttpStatus_ =
+  PutDataProtectionPolicyResponse'
+    { lastUpdatedTime =
+        Prelude.Nothing,
+      logGroupIdentifier = Prelude.Nothing,
+      policyDocument = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that this policy was most recently updated.
+putDataProtectionPolicyResponse_lastUpdatedTime :: Lens.Lens' PutDataProtectionPolicyResponse (Prelude.Maybe Prelude.Natural)
+putDataProtectionPolicyResponse_lastUpdatedTime = Lens.lens (\PutDataProtectionPolicyResponse' {lastUpdatedTime} -> lastUpdatedTime) (\s@PutDataProtectionPolicyResponse' {} a -> s {lastUpdatedTime = a} :: PutDataProtectionPolicyResponse)
+
+-- | The log group name or ARN that you specified in your request.
+putDataProtectionPolicyResponse_logGroupIdentifier :: Lens.Lens' PutDataProtectionPolicyResponse (Prelude.Maybe Prelude.Text)
+putDataProtectionPolicyResponse_logGroupIdentifier = Lens.lens (\PutDataProtectionPolicyResponse' {logGroupIdentifier} -> logGroupIdentifier) (\s@PutDataProtectionPolicyResponse' {} a -> s {logGroupIdentifier = a} :: PutDataProtectionPolicyResponse)
+
+-- | The data protection policy used for this log group.
+putDataProtectionPolicyResponse_policyDocument :: Lens.Lens' PutDataProtectionPolicyResponse (Prelude.Maybe Prelude.Text)
+putDataProtectionPolicyResponse_policyDocument = Lens.lens (\PutDataProtectionPolicyResponse' {policyDocument} -> policyDocument) (\s@PutDataProtectionPolicyResponse' {} a -> s {policyDocument = a} :: PutDataProtectionPolicyResponse)
+
+-- | The response's http status code.
+putDataProtectionPolicyResponse_httpStatus :: Lens.Lens' PutDataProtectionPolicyResponse Prelude.Int
+putDataProtectionPolicyResponse_httpStatus = Lens.lens (\PutDataProtectionPolicyResponse' {httpStatus} -> httpStatus) (\s@PutDataProtectionPolicyResponse' {} a -> s {httpStatus = a} :: PutDataProtectionPolicyResponse)
+
+instance
+  Prelude.NFData
+    PutDataProtectionPolicyResponse
+  where
+  rnf PutDataProtectionPolicyResponse' {..} =
+    Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf logGroupIdentifier
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/PutDestination.hs b/gen/Amazonka/CloudWatchLogs/PutDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutDestination.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a destination. This operation is used only to create
+-- destinations for cross-account subscriptions.
+--
+-- A destination encapsulates a physical resource (such as an Amazon
+-- Kinesis stream). With a destination, you can subscribe to a real-time
+-- stream of log events for a different account, ingested using
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html PutLogEvents>.
+--
+-- Through an access policy, a destination controls what is written to it.
+-- By default, @PutDestination@ does not set any access policy with the
+-- destination, which means a cross-account user cannot call
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutSubscriptionFilter.html PutSubscriptionFilter>
+-- against this destination. To enable this, the destination owner must
+-- call
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestinationPolicy.html PutDestinationPolicy>
+-- after @PutDestination@.
+--
+-- To perform a @PutDestination@ operation, you must also have the
+-- @iam:PassRole@ permission.
+module Amazonka.CloudWatchLogs.PutDestination
+  ( -- * Creating a Request
+    PutDestination (..),
+    newPutDestination,
+
+    -- * Request Lenses
+    putDestination_tags,
+    putDestination_destinationName,
+    putDestination_targetArn,
+    putDestination_roleArn,
+
+    -- * Destructuring the Response
+    PutDestinationResponse (..),
+    newPutDestinationResponse,
+
+    -- * Response Lenses
+    putDestinationResponse_destination,
+    putDestinationResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutDestination' smart constructor.
+data PutDestination = PutDestination'
+  { -- | An optional list of key-value pairs to associate with the resource.
+    --
+    -- For more information about tagging, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A name for the destination.
+    destinationName :: Prelude.Text,
+    -- | The ARN of an Amazon Kinesis stream to which to deliver matching log
+    -- events.
+    targetArn :: Prelude.Text,
+    -- | The ARN of an IAM role that grants CloudWatch Logs permissions to call
+    -- the Amazon Kinesis @PutRecord@ operation on the destination stream.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'putDestination_tags' - An optional list of key-value pairs to associate with the resource.
+--
+-- For more information about tagging, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>
+--
+-- 'destinationName', 'putDestination_destinationName' - A name for the destination.
+--
+-- 'targetArn', 'putDestination_targetArn' - The ARN of an Amazon Kinesis stream to which to deliver matching log
+-- events.
+--
+-- 'roleArn', 'putDestination_roleArn' - The ARN of an IAM role that grants CloudWatch Logs permissions to call
+-- the Amazon Kinesis @PutRecord@ operation on the destination stream.
+newPutDestination ::
+  -- | 'destinationName'
+  Prelude.Text ->
+  -- | 'targetArn'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  PutDestination
+newPutDestination
+  pDestinationName_
+  pTargetArn_
+  pRoleArn_ =
+    PutDestination'
+      { tags = Prelude.Nothing,
+        destinationName = pDestinationName_,
+        targetArn = pTargetArn_,
+        roleArn = pRoleArn_
+      }
+
+-- | An optional list of key-value pairs to associate with the resource.
+--
+-- For more information about tagging, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>
+putDestination_tags :: Lens.Lens' PutDestination (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putDestination_tags = Lens.lens (\PutDestination' {tags} -> tags) (\s@PutDestination' {} a -> s {tags = a} :: PutDestination) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the destination.
+putDestination_destinationName :: Lens.Lens' PutDestination Prelude.Text
+putDestination_destinationName = Lens.lens (\PutDestination' {destinationName} -> destinationName) (\s@PutDestination' {} a -> s {destinationName = a} :: PutDestination)
+
+-- | The ARN of an Amazon Kinesis stream to which to deliver matching log
+-- events.
+putDestination_targetArn :: Lens.Lens' PutDestination Prelude.Text
+putDestination_targetArn = Lens.lens (\PutDestination' {targetArn} -> targetArn) (\s@PutDestination' {} a -> s {targetArn = a} :: PutDestination)
+
+-- | The ARN of an IAM role that grants CloudWatch Logs permissions to call
+-- the Amazon Kinesis @PutRecord@ operation on the destination stream.
+putDestination_roleArn :: Lens.Lens' PutDestination Prelude.Text
+putDestination_roleArn = Lens.lens (\PutDestination' {roleArn} -> roleArn) (\s@PutDestination' {} a -> s {roleArn = a} :: PutDestination)
+
+instance Core.AWSRequest PutDestination where
+  type
+    AWSResponse PutDestination =
+      PutDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutDestinationResponse'
+            Prelude.<$> (x Data..?> "destination")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDestination where
+  hashWithSalt _salt PutDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` targetArn
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData PutDestination where
+  rnf PutDestination' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders PutDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutDestination" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDestination where
+  toJSON PutDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("destinationName" Data..= destinationName),
+            Prelude.Just ("targetArn" Data..= targetArn),
+            Prelude.Just ("roleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath PutDestination where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutDestinationResponse' smart constructor.
+data PutDestinationResponse = PutDestinationResponse'
+  { -- | The destination.
+    destination :: Prelude.Maybe Destination,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'putDestinationResponse_destination' - The destination.
+--
+-- 'httpStatus', 'putDestinationResponse_httpStatus' - The response's http status code.
+newPutDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDestinationResponse
+newPutDestinationResponse pHttpStatus_ =
+  PutDestinationResponse'
+    { destination =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The destination.
+putDestinationResponse_destination :: Lens.Lens' PutDestinationResponse (Prelude.Maybe Destination)
+putDestinationResponse_destination = Lens.lens (\PutDestinationResponse' {destination} -> destination) (\s@PutDestinationResponse' {} a -> s {destination = a} :: PutDestinationResponse)
+
+-- | The response's http status code.
+putDestinationResponse_httpStatus :: Lens.Lens' PutDestinationResponse Prelude.Int
+putDestinationResponse_httpStatus = Lens.lens (\PutDestinationResponse' {httpStatus} -> httpStatus) (\s@PutDestinationResponse' {} a -> s {httpStatus = a} :: PutDestinationResponse)
+
+instance Prelude.NFData PutDestinationResponse where
+  rnf PutDestinationResponse' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/PutDestinationPolicy.hs b/gen/Amazonka/CloudWatchLogs/PutDestinationPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutDestinationPolicy.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutDestinationPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates an access policy associated with an existing
+-- destination. An access policy is an
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html IAM policy document>
+-- that is used to authorize claims to register a subscription filter
+-- against a given destination.
+module Amazonka.CloudWatchLogs.PutDestinationPolicy
+  ( -- * Creating a Request
+    PutDestinationPolicy (..),
+    newPutDestinationPolicy,
+
+    -- * Request Lenses
+    putDestinationPolicy_forceUpdate,
+    putDestinationPolicy_destinationName,
+    putDestinationPolicy_accessPolicy,
+
+    -- * Destructuring the Response
+    PutDestinationPolicyResponse (..),
+    newPutDestinationPolicyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutDestinationPolicy' smart constructor.
+data PutDestinationPolicy = PutDestinationPolicy'
+  { -- | Specify true if you are updating an existing destination policy to grant
+    -- permission to an organization ID instead of granting permission to
+    -- individual AWS accounts. Before you update a destination policy this
+    -- way, you must first update the subscription filters in the accounts that
+    -- send logs to this destination. If you do not, the subscription filters
+    -- might stop working. By specifying @true@ for @forceUpdate@, you are
+    -- affirming that you have already updated the subscription filters. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Cross-Account-Log_Subscription-Update.html Updating an existing cross-account subscription>
+    --
+    -- If you omit this parameter, the default of @false@ is used.
+    forceUpdate :: Prelude.Maybe Prelude.Bool,
+    -- | A name for an existing destination.
+    destinationName :: Prelude.Text,
+    -- | An IAM policy document that authorizes cross-account users to deliver
+    -- their log events to the associated destination. This can be up to 5120
+    -- bytes.
+    accessPolicy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDestinationPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forceUpdate', 'putDestinationPolicy_forceUpdate' - Specify true if you are updating an existing destination policy to grant
+-- permission to an organization ID instead of granting permission to
+-- individual AWS accounts. Before you update a destination policy this
+-- way, you must first update the subscription filters in the accounts that
+-- send logs to this destination. If you do not, the subscription filters
+-- might stop working. By specifying @true@ for @forceUpdate@, you are
+-- affirming that you have already updated the subscription filters. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Cross-Account-Log_Subscription-Update.html Updating an existing cross-account subscription>
+--
+-- If you omit this parameter, the default of @false@ is used.
+--
+-- 'destinationName', 'putDestinationPolicy_destinationName' - A name for an existing destination.
+--
+-- 'accessPolicy', 'putDestinationPolicy_accessPolicy' - An IAM policy document that authorizes cross-account users to deliver
+-- their log events to the associated destination. This can be up to 5120
+-- bytes.
+newPutDestinationPolicy ::
+  -- | 'destinationName'
+  Prelude.Text ->
+  -- | 'accessPolicy'
+  Prelude.Text ->
+  PutDestinationPolicy
+newPutDestinationPolicy
+  pDestinationName_
+  pAccessPolicy_ =
+    PutDestinationPolicy'
+      { forceUpdate =
+          Prelude.Nothing,
+        destinationName = pDestinationName_,
+        accessPolicy = pAccessPolicy_
+      }
+
+-- | Specify true if you are updating an existing destination policy to grant
+-- permission to an organization ID instead of granting permission to
+-- individual AWS accounts. Before you update a destination policy this
+-- way, you must first update the subscription filters in the accounts that
+-- send logs to this destination. If you do not, the subscription filters
+-- might stop working. By specifying @true@ for @forceUpdate@, you are
+-- affirming that you have already updated the subscription filters. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Cross-Account-Log_Subscription-Update.html Updating an existing cross-account subscription>
+--
+-- If you omit this parameter, the default of @false@ is used.
+putDestinationPolicy_forceUpdate :: Lens.Lens' PutDestinationPolicy (Prelude.Maybe Prelude.Bool)
+putDestinationPolicy_forceUpdate = Lens.lens (\PutDestinationPolicy' {forceUpdate} -> forceUpdate) (\s@PutDestinationPolicy' {} a -> s {forceUpdate = a} :: PutDestinationPolicy)
+
+-- | A name for an existing destination.
+putDestinationPolicy_destinationName :: Lens.Lens' PutDestinationPolicy Prelude.Text
+putDestinationPolicy_destinationName = Lens.lens (\PutDestinationPolicy' {destinationName} -> destinationName) (\s@PutDestinationPolicy' {} a -> s {destinationName = a} :: PutDestinationPolicy)
+
+-- | An IAM policy document that authorizes cross-account users to deliver
+-- their log events to the associated destination. This can be up to 5120
+-- bytes.
+putDestinationPolicy_accessPolicy :: Lens.Lens' PutDestinationPolicy Prelude.Text
+putDestinationPolicy_accessPolicy = Lens.lens (\PutDestinationPolicy' {accessPolicy} -> accessPolicy) (\s@PutDestinationPolicy' {} a -> s {accessPolicy = a} :: PutDestinationPolicy)
+
+instance Core.AWSRequest PutDestinationPolicy where
+  type
+    AWSResponse PutDestinationPolicy =
+      PutDestinationPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutDestinationPolicyResponse'
+
+instance Prelude.Hashable PutDestinationPolicy where
+  hashWithSalt _salt PutDestinationPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` forceUpdate
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` accessPolicy
+
+instance Prelude.NFData PutDestinationPolicy where
+  rnf PutDestinationPolicy' {..} =
+    Prelude.rnf forceUpdate
+      `Prelude.seq` Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf accessPolicy
+
+instance Data.ToHeaders PutDestinationPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutDestinationPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDestinationPolicy where
+  toJSON PutDestinationPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("forceUpdate" Data..=) Prelude.<$> forceUpdate,
+            Prelude.Just
+              ("destinationName" Data..= destinationName),
+            Prelude.Just ("accessPolicy" Data..= accessPolicy)
+          ]
+      )
+
+instance Data.ToPath PutDestinationPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutDestinationPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutDestinationPolicyResponse' smart constructor.
+data PutDestinationPolicyResponse = PutDestinationPolicyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDestinationPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutDestinationPolicyResponse ::
+  PutDestinationPolicyResponse
+newPutDestinationPolicyResponse =
+  PutDestinationPolicyResponse'
+
+instance Prelude.NFData PutDestinationPolicyResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/PutLogEvents.hs b/gen/Amazonka/CloudWatchLogs/PutLogEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutLogEvents.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutLogEvents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Uploads a batch of log events to the specified log stream.
+--
+-- The sequence token is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are always accepted and never return
+-- @InvalidSequenceTokenException@ or @DataAlreadyAcceptedException@ even
+-- if the sequence token is not valid. You can use parallel @PutLogEvents@
+-- actions on the same log stream.
+--
+-- The batch of events must satisfy the following constraints:
+--
+-- -   The maximum batch size is 1,048,576 bytes. This size is calculated
+--     as the sum of all event messages in UTF-8, plus 26 bytes for each
+--     log event.
+--
+-- -   None of the log events in the batch can be more than 2 hours in the
+--     future.
+--
+-- -   None of the log events in the batch can be more than 14 days in the
+--     past. Also, none of the log events can be from earlier than the
+--     retention period of the log group.
+--
+-- -   The log events in the batch must be in chronological order by their
+--     timestamp. The timestamp is the time that the event occurred,
+--     expressed as the number of milliseconds after
+--     @Jan 1, 1970 00:00:00 UTC@. (In Amazon Web Services Tools for
+--     PowerShell and the Amazon Web Services SDK for .NET, the timestamp
+--     is specified in .NET format: @yyyy-mm-ddThh:mm:ss@. For example,
+--     @2017-09-15T13:45:30@.)
+--
+-- -   A batch of log events in a single request cannot span more than 24
+--     hours. Otherwise, the operation fails.
+--
+-- -   The maximum number of log events in a batch is 10,000.
+--
+-- -   The quota of five requests per second per log stream has been
+--     removed. Instead, @PutLogEvents@ actions are throttled based on a
+--     per-second per-account quota. You can request an increase to the
+--     per-second throttling quota by using the Service Quotas service.
+--
+-- If a call to @PutLogEvents@ returns \"UnrecognizedClientException\" the
+-- most likely cause is a non-valid Amazon Web Services access key ID or
+-- secret key.
+module Amazonka.CloudWatchLogs.PutLogEvents
+  ( -- * Creating a Request
+    PutLogEvents (..),
+    newPutLogEvents,
+
+    -- * Request Lenses
+    putLogEvents_sequenceToken,
+    putLogEvents_logGroupName,
+    putLogEvents_logStreamName,
+    putLogEvents_logEvents,
+
+    -- * Destructuring the Response
+    PutLogEventsResponse (..),
+    newPutLogEventsResponse,
+
+    -- * Response Lenses
+    putLogEventsResponse_nextSequenceToken,
+    putLogEventsResponse_rejectedLogEventsInfo,
+    putLogEventsResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutLogEvents' smart constructor.
+data PutLogEvents = PutLogEvents'
+  { -- | The sequence token obtained from the response of the previous
+    -- @PutLogEvents@ call.
+    --
+    -- The @sequenceToken@ parameter is now ignored in @PutLogEvents@ actions.
+    -- @PutLogEvents@ actions are now accepted and never return
+    -- @InvalidSequenceTokenException@ or @DataAlreadyAcceptedException@ even
+    -- if the sequence token is not valid.
+    sequenceToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The name of the log stream.
+    logStreamName :: Prelude.Text,
+    -- | The log events.
+    logEvents :: Prelude.NonEmpty InputLogEvent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLogEvents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sequenceToken', 'putLogEvents_sequenceToken' - The sequence token obtained from the response of the previous
+-- @PutLogEvents@ call.
+--
+-- The @sequenceToken@ parameter is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are now accepted and never return
+-- @InvalidSequenceTokenException@ or @DataAlreadyAcceptedException@ even
+-- if the sequence token is not valid.
+--
+-- 'logGroupName', 'putLogEvents_logGroupName' - The name of the log group.
+--
+-- 'logStreamName', 'putLogEvents_logStreamName' - The name of the log stream.
+--
+-- 'logEvents', 'putLogEvents_logEvents' - The log events.
+newPutLogEvents ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'logStreamName'
+  Prelude.Text ->
+  -- | 'logEvents'
+  Prelude.NonEmpty InputLogEvent ->
+  PutLogEvents
+newPutLogEvents
+  pLogGroupName_
+  pLogStreamName_
+  pLogEvents_ =
+    PutLogEvents'
+      { sequenceToken = Prelude.Nothing,
+        logGroupName = pLogGroupName_,
+        logStreamName = pLogStreamName_,
+        logEvents = Lens.coerced Lens.# pLogEvents_
+      }
+
+-- | The sequence token obtained from the response of the previous
+-- @PutLogEvents@ call.
+--
+-- The @sequenceToken@ parameter is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are now accepted and never return
+-- @InvalidSequenceTokenException@ or @DataAlreadyAcceptedException@ even
+-- if the sequence token is not valid.
+putLogEvents_sequenceToken :: Lens.Lens' PutLogEvents (Prelude.Maybe Prelude.Text)
+putLogEvents_sequenceToken = Lens.lens (\PutLogEvents' {sequenceToken} -> sequenceToken) (\s@PutLogEvents' {} a -> s {sequenceToken = a} :: PutLogEvents)
+
+-- | The name of the log group.
+putLogEvents_logGroupName :: Lens.Lens' PutLogEvents Prelude.Text
+putLogEvents_logGroupName = Lens.lens (\PutLogEvents' {logGroupName} -> logGroupName) (\s@PutLogEvents' {} a -> s {logGroupName = a} :: PutLogEvents)
+
+-- | The name of the log stream.
+putLogEvents_logStreamName :: Lens.Lens' PutLogEvents Prelude.Text
+putLogEvents_logStreamName = Lens.lens (\PutLogEvents' {logStreamName} -> logStreamName) (\s@PutLogEvents' {} a -> s {logStreamName = a} :: PutLogEvents)
+
+-- | The log events.
+putLogEvents_logEvents :: Lens.Lens' PutLogEvents (Prelude.NonEmpty InputLogEvent)
+putLogEvents_logEvents = Lens.lens (\PutLogEvents' {logEvents} -> logEvents) (\s@PutLogEvents' {} a -> s {logEvents = a} :: PutLogEvents) Prelude.. Lens.coerced
+
+instance Core.AWSRequest PutLogEvents where
+  type AWSResponse PutLogEvents = PutLogEventsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutLogEventsResponse'
+            Prelude.<$> (x Data..?> "nextSequenceToken")
+            Prelude.<*> (x Data..?> "rejectedLogEventsInfo")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutLogEvents where
+  hashWithSalt _salt PutLogEvents' {..} =
+    _salt
+      `Prelude.hashWithSalt` sequenceToken
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logStreamName
+      `Prelude.hashWithSalt` logEvents
+
+instance Prelude.NFData PutLogEvents where
+  rnf PutLogEvents' {..} =
+    Prelude.rnf sequenceToken
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logStreamName
+      `Prelude.seq` Prelude.rnf logEvents
+
+instance Data.ToHeaders PutLogEvents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("Logs_20140328.PutLogEvents" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutLogEvents where
+  toJSON PutLogEvents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("sequenceToken" Data..=) Prelude.<$> sequenceToken,
+            Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("logStreamName" Data..= logStreamName),
+            Prelude.Just ("logEvents" Data..= logEvents)
+          ]
+      )
+
+instance Data.ToPath PutLogEvents where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutLogEvents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutLogEventsResponse' smart constructor.
+data PutLogEventsResponse = PutLogEventsResponse'
+  { -- | The next sequence token.
+    --
+    -- This field has been deprecated.
+    --
+    -- The sequence token is now ignored in @PutLogEvents@ actions.
+    -- @PutLogEvents@ actions are always accepted even if the sequence token is
+    -- not valid. You can use parallel @PutLogEvents@ actions on the same log
+    -- stream and you do not need to wait for the response of a previous
+    -- @PutLogEvents@ action to obtain the @nextSequenceToken@ value.
+    nextSequenceToken :: Prelude.Maybe Prelude.Text,
+    -- | The rejected events.
+    rejectedLogEventsInfo :: Prelude.Maybe RejectedLogEventsInfo,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLogEventsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextSequenceToken', 'putLogEventsResponse_nextSequenceToken' - The next sequence token.
+--
+-- This field has been deprecated.
+--
+-- The sequence token is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are always accepted even if the sequence token is
+-- not valid. You can use parallel @PutLogEvents@ actions on the same log
+-- stream and you do not need to wait for the response of a previous
+-- @PutLogEvents@ action to obtain the @nextSequenceToken@ value.
+--
+-- 'rejectedLogEventsInfo', 'putLogEventsResponse_rejectedLogEventsInfo' - The rejected events.
+--
+-- 'httpStatus', 'putLogEventsResponse_httpStatus' - The response's http status code.
+newPutLogEventsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutLogEventsResponse
+newPutLogEventsResponse pHttpStatus_ =
+  PutLogEventsResponse'
+    { nextSequenceToken =
+        Prelude.Nothing,
+      rejectedLogEventsInfo = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The next sequence token.
+--
+-- This field has been deprecated.
+--
+-- The sequence token is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are always accepted even if the sequence token is
+-- not valid. You can use parallel @PutLogEvents@ actions on the same log
+-- stream and you do not need to wait for the response of a previous
+-- @PutLogEvents@ action to obtain the @nextSequenceToken@ value.
+putLogEventsResponse_nextSequenceToken :: Lens.Lens' PutLogEventsResponse (Prelude.Maybe Prelude.Text)
+putLogEventsResponse_nextSequenceToken = Lens.lens (\PutLogEventsResponse' {nextSequenceToken} -> nextSequenceToken) (\s@PutLogEventsResponse' {} a -> s {nextSequenceToken = a} :: PutLogEventsResponse)
+
+-- | The rejected events.
+putLogEventsResponse_rejectedLogEventsInfo :: Lens.Lens' PutLogEventsResponse (Prelude.Maybe RejectedLogEventsInfo)
+putLogEventsResponse_rejectedLogEventsInfo = Lens.lens (\PutLogEventsResponse' {rejectedLogEventsInfo} -> rejectedLogEventsInfo) (\s@PutLogEventsResponse' {} a -> s {rejectedLogEventsInfo = a} :: PutLogEventsResponse)
+
+-- | The response's http status code.
+putLogEventsResponse_httpStatus :: Lens.Lens' PutLogEventsResponse Prelude.Int
+putLogEventsResponse_httpStatus = Lens.lens (\PutLogEventsResponse' {httpStatus} -> httpStatus) (\s@PutLogEventsResponse' {} a -> s {httpStatus = a} :: PutLogEventsResponse)
+
+instance Prelude.NFData PutLogEventsResponse where
+  rnf PutLogEventsResponse' {..} =
+    Prelude.rnf nextSequenceToken
+      `Prelude.seq` Prelude.rnf rejectedLogEventsInfo
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/PutMetricFilter.hs b/gen/Amazonka/CloudWatchLogs/PutMetricFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutMetricFilter.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutMetricFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a metric filter and associates it with the specified
+-- log group. With metric filters, you can configure rules to extract
+-- metric data from log events ingested through
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html PutLogEvents>.
+--
+-- The maximum number of metric filters that can be associated with a log
+-- group is 100.
+--
+-- When you create a metric filter, you can also optionally assign a unit
+-- and dimensions to the metric that is created.
+--
+-- Metrics extracted from log events are charged as custom metrics. To
+-- prevent unexpected high charges, do not specify high-cardinality fields
+-- such as @IPAddress@ or @requestID@ as dimensions. Each different value
+-- found for a dimension is treated as a separate metric and accrues
+-- charges as a separate custom metric.
+--
+-- CloudWatch Logs disables a metric filter if it generates 1,000 different
+-- name\/value pairs for your specified dimensions within a certain amount
+-- of time. This helps to prevent accidental high charges.
+--
+-- You can also set up a billing alarm to alert you if your charges are
+-- higher than expected. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html Creating a Billing Alarm to Monitor Your Estimated Amazon Web Services Charges>.
+module Amazonka.CloudWatchLogs.PutMetricFilter
+  ( -- * Creating a Request
+    PutMetricFilter (..),
+    newPutMetricFilter,
+
+    -- * Request Lenses
+    putMetricFilter_logGroupName,
+    putMetricFilter_filterName,
+    putMetricFilter_filterPattern,
+    putMetricFilter_metricTransformations,
+
+    -- * Destructuring the Response
+    PutMetricFilterResponse (..),
+    newPutMetricFilterResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutMetricFilter' smart constructor.
+data PutMetricFilter = PutMetricFilter'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | A name for the metric filter.
+    filterName :: Prelude.Text,
+    -- | A filter pattern for extracting metric data out of ingested log events.
+    filterPattern :: Prelude.Text,
+    -- | A collection of information that defines how metric data gets emitted.
+    metricTransformations :: Prelude.NonEmpty MetricTransformation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutMetricFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'putMetricFilter_logGroupName' - The name of the log group.
+--
+-- 'filterName', 'putMetricFilter_filterName' - A name for the metric filter.
+--
+-- 'filterPattern', 'putMetricFilter_filterPattern' - A filter pattern for extracting metric data out of ingested log events.
+--
+-- 'metricTransformations', 'putMetricFilter_metricTransformations' - A collection of information that defines how metric data gets emitted.
+newPutMetricFilter ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'filterName'
+  Prelude.Text ->
+  -- | 'filterPattern'
+  Prelude.Text ->
+  -- | 'metricTransformations'
+  Prelude.NonEmpty MetricTransformation ->
+  PutMetricFilter
+newPutMetricFilter
+  pLogGroupName_
+  pFilterName_
+  pFilterPattern_
+  pMetricTransformations_ =
+    PutMetricFilter'
+      { logGroupName = pLogGroupName_,
+        filterName = pFilterName_,
+        filterPattern = pFilterPattern_,
+        metricTransformations =
+          Lens.coerced Lens.# pMetricTransformations_
+      }
+
+-- | The name of the log group.
+putMetricFilter_logGroupName :: Lens.Lens' PutMetricFilter Prelude.Text
+putMetricFilter_logGroupName = Lens.lens (\PutMetricFilter' {logGroupName} -> logGroupName) (\s@PutMetricFilter' {} a -> s {logGroupName = a} :: PutMetricFilter)
+
+-- | A name for the metric filter.
+putMetricFilter_filterName :: Lens.Lens' PutMetricFilter Prelude.Text
+putMetricFilter_filterName = Lens.lens (\PutMetricFilter' {filterName} -> filterName) (\s@PutMetricFilter' {} a -> s {filterName = a} :: PutMetricFilter)
+
+-- | A filter pattern for extracting metric data out of ingested log events.
+putMetricFilter_filterPattern :: Lens.Lens' PutMetricFilter Prelude.Text
+putMetricFilter_filterPattern = Lens.lens (\PutMetricFilter' {filterPattern} -> filterPattern) (\s@PutMetricFilter' {} a -> s {filterPattern = a} :: PutMetricFilter)
+
+-- | A collection of information that defines how metric data gets emitted.
+putMetricFilter_metricTransformations :: Lens.Lens' PutMetricFilter (Prelude.NonEmpty MetricTransformation)
+putMetricFilter_metricTransformations = Lens.lens (\PutMetricFilter' {metricTransformations} -> metricTransformations) (\s@PutMetricFilter' {} a -> s {metricTransformations = a} :: PutMetricFilter) Prelude.. Lens.coerced
+
+instance Core.AWSRequest PutMetricFilter where
+  type
+    AWSResponse PutMetricFilter =
+      PutMetricFilterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutMetricFilterResponse'
+
+instance Prelude.Hashable PutMetricFilter where
+  hashWithSalt _salt PutMetricFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` filterName
+      `Prelude.hashWithSalt` filterPattern
+      `Prelude.hashWithSalt` metricTransformations
+
+instance Prelude.NFData PutMetricFilter where
+  rnf PutMetricFilter' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf filterName
+      `Prelude.seq` Prelude.rnf filterPattern
+      `Prelude.seq` Prelude.rnf metricTransformations
+
+instance Data.ToHeaders PutMetricFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutMetricFilter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutMetricFilter where
+  toJSON PutMetricFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("filterName" Data..= filterName),
+            Prelude.Just ("filterPattern" Data..= filterPattern),
+            Prelude.Just
+              ( "metricTransformations"
+                  Data..= metricTransformations
+              )
+          ]
+      )
+
+instance Data.ToPath PutMetricFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutMetricFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutMetricFilterResponse' smart constructor.
+data PutMetricFilterResponse = PutMetricFilterResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutMetricFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutMetricFilterResponse ::
+  PutMetricFilterResponse
+newPutMetricFilterResponse = PutMetricFilterResponse'
+
+instance Prelude.NFData PutMetricFilterResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/PutQueryDefinition.hs b/gen/Amazonka/CloudWatchLogs/PutQueryDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutQueryDefinition.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutQueryDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a query definition for CloudWatch Logs Insights. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html Analyzing Log Data with CloudWatch Logs Insights>.
+--
+-- To update a query definition, specify its @queryDefinitionId@ in your
+-- request. The values of @name@, @queryString@, and @logGroupNames@ are
+-- changed to the values that you specify in your update operation. No
+-- current values are retained from the current query definition. For
+-- example, imagine updating a current query definition that includes log
+-- groups. If you don\'t specify the @logGroupNames@ parameter in your
+-- update operation, the query definition changes to contain no log groups.
+--
+-- You must have the @logs:PutQueryDefinition@ permission to be able to
+-- perform this operation.
+module Amazonka.CloudWatchLogs.PutQueryDefinition
+  ( -- * Creating a Request
+    PutQueryDefinition (..),
+    newPutQueryDefinition,
+
+    -- * Request Lenses
+    putQueryDefinition_logGroupNames,
+    putQueryDefinition_queryDefinitionId,
+    putQueryDefinition_name,
+    putQueryDefinition_queryString,
+
+    -- * Destructuring the Response
+    PutQueryDefinitionResponse (..),
+    newPutQueryDefinitionResponse,
+
+    -- * Response Lenses
+    putQueryDefinitionResponse_queryDefinitionId,
+    putQueryDefinitionResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutQueryDefinition' smart constructor.
+data PutQueryDefinition = PutQueryDefinition'
+  { -- | Use this parameter to include specific log groups as part of your query
+    -- definition.
+    --
+    -- If you are updating a query definition and you omit this parameter, then
+    -- the updated definition will contain no log groups.
+    logGroupNames :: Prelude.Maybe [Prelude.Text],
+    -- | If you are updating a query definition, use this parameter to specify
+    -- the ID of the query definition that you want to update. You can use
+    -- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>
+    -- to retrieve the IDs of your saved query definitions.
+    --
+    -- If you are creating a query definition, do not specify this parameter.
+    -- CloudWatch generates a unique ID for the new query definition and
+    -- include it in the response to this operation.
+    queryDefinitionId :: Prelude.Maybe Prelude.Text,
+    -- | A name for the query definition. If you are saving numerous query
+    -- definitions, we recommend that you name them. This way, you can find the
+    -- ones you want by using the first part of the name as a filter in the
+    -- @queryDefinitionNamePrefix@ parameter of
+    -- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>.
+    name :: Prelude.Text,
+    -- | The query string to use for this definition. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+    queryString :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutQueryDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupNames', 'putQueryDefinition_logGroupNames' - Use this parameter to include specific log groups as part of your query
+-- definition.
+--
+-- If you are updating a query definition and you omit this parameter, then
+-- the updated definition will contain no log groups.
+--
+-- 'queryDefinitionId', 'putQueryDefinition_queryDefinitionId' - If you are updating a query definition, use this parameter to specify
+-- the ID of the query definition that you want to update. You can use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>
+-- to retrieve the IDs of your saved query definitions.
+--
+-- If you are creating a query definition, do not specify this parameter.
+-- CloudWatch generates a unique ID for the new query definition and
+-- include it in the response to this operation.
+--
+-- 'name', 'putQueryDefinition_name' - A name for the query definition. If you are saving numerous query
+-- definitions, we recommend that you name them. This way, you can find the
+-- ones you want by using the first part of the name as a filter in the
+-- @queryDefinitionNamePrefix@ parameter of
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>.
+--
+-- 'queryString', 'putQueryDefinition_queryString' - The query string to use for this definition. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+newPutQueryDefinition ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'queryString'
+  Prelude.Text ->
+  PutQueryDefinition
+newPutQueryDefinition pName_ pQueryString_ =
+  PutQueryDefinition'
+    { logGroupNames =
+        Prelude.Nothing,
+      queryDefinitionId = Prelude.Nothing,
+      name = pName_,
+      queryString = pQueryString_
+    }
+
+-- | Use this parameter to include specific log groups as part of your query
+-- definition.
+--
+-- If you are updating a query definition and you omit this parameter, then
+-- the updated definition will contain no log groups.
+putQueryDefinition_logGroupNames :: Lens.Lens' PutQueryDefinition (Prelude.Maybe [Prelude.Text])
+putQueryDefinition_logGroupNames = Lens.lens (\PutQueryDefinition' {logGroupNames} -> logGroupNames) (\s@PutQueryDefinition' {} a -> s {logGroupNames = a} :: PutQueryDefinition) Prelude.. Lens.mapping Lens.coerced
+
+-- | If you are updating a query definition, use this parameter to specify
+-- the ID of the query definition that you want to update. You can use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>
+-- to retrieve the IDs of your saved query definitions.
+--
+-- If you are creating a query definition, do not specify this parameter.
+-- CloudWatch generates a unique ID for the new query definition and
+-- include it in the response to this operation.
+putQueryDefinition_queryDefinitionId :: Lens.Lens' PutQueryDefinition (Prelude.Maybe Prelude.Text)
+putQueryDefinition_queryDefinitionId = Lens.lens (\PutQueryDefinition' {queryDefinitionId} -> queryDefinitionId) (\s@PutQueryDefinition' {} a -> s {queryDefinitionId = a} :: PutQueryDefinition)
+
+-- | A name for the query definition. If you are saving numerous query
+-- definitions, we recommend that you name them. This way, you can find the
+-- ones you want by using the first part of the name as a filter in the
+-- @queryDefinitionNamePrefix@ parameter of
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeQueryDefinitions.html DescribeQueryDefinitions>.
+putQueryDefinition_name :: Lens.Lens' PutQueryDefinition Prelude.Text
+putQueryDefinition_name = Lens.lens (\PutQueryDefinition' {name} -> name) (\s@PutQueryDefinition' {} a -> s {name = a} :: PutQueryDefinition)
+
+-- | The query string to use for this definition. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+putQueryDefinition_queryString :: Lens.Lens' PutQueryDefinition Prelude.Text
+putQueryDefinition_queryString = Lens.lens (\PutQueryDefinition' {queryString} -> queryString) (\s@PutQueryDefinition' {} a -> s {queryString = a} :: PutQueryDefinition)
+
+instance Core.AWSRequest PutQueryDefinition where
+  type
+    AWSResponse PutQueryDefinition =
+      PutQueryDefinitionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutQueryDefinitionResponse'
+            Prelude.<$> (x Data..?> "queryDefinitionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutQueryDefinition where
+  hashWithSalt _salt PutQueryDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupNames
+      `Prelude.hashWithSalt` queryDefinitionId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` queryString
+
+instance Prelude.NFData PutQueryDefinition where
+  rnf PutQueryDefinition' {..} =
+    Prelude.rnf logGroupNames
+      `Prelude.seq` Prelude.rnf queryDefinitionId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf queryString
+
+instance Data.ToHeaders PutQueryDefinition where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutQueryDefinition" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutQueryDefinition where
+  toJSON PutQueryDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("logGroupNames" Data..=) Prelude.<$> logGroupNames,
+            ("queryDefinitionId" Data..=)
+              Prelude.<$> queryDefinitionId,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("queryString" Data..= queryString)
+          ]
+      )
+
+instance Data.ToPath PutQueryDefinition where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutQueryDefinition where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutQueryDefinitionResponse' smart constructor.
+data PutQueryDefinitionResponse = PutQueryDefinitionResponse'
+  { -- | The ID of the query definition.
+    queryDefinitionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutQueryDefinitionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queryDefinitionId', 'putQueryDefinitionResponse_queryDefinitionId' - The ID of the query definition.
+--
+-- 'httpStatus', 'putQueryDefinitionResponse_httpStatus' - The response's http status code.
+newPutQueryDefinitionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutQueryDefinitionResponse
+newPutQueryDefinitionResponse pHttpStatus_ =
+  PutQueryDefinitionResponse'
+    { queryDefinitionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the query definition.
+putQueryDefinitionResponse_queryDefinitionId :: Lens.Lens' PutQueryDefinitionResponse (Prelude.Maybe Prelude.Text)
+putQueryDefinitionResponse_queryDefinitionId = Lens.lens (\PutQueryDefinitionResponse' {queryDefinitionId} -> queryDefinitionId) (\s@PutQueryDefinitionResponse' {} a -> s {queryDefinitionId = a} :: PutQueryDefinitionResponse)
+
+-- | The response's http status code.
+putQueryDefinitionResponse_httpStatus :: Lens.Lens' PutQueryDefinitionResponse Prelude.Int
+putQueryDefinitionResponse_httpStatus = Lens.lens (\PutQueryDefinitionResponse' {httpStatus} -> httpStatus) (\s@PutQueryDefinitionResponse' {} a -> s {httpStatus = a} :: PutQueryDefinitionResponse)
+
+instance Prelude.NFData PutQueryDefinitionResponse where
+  rnf PutQueryDefinitionResponse' {..} =
+    Prelude.rnf queryDefinitionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/PutResourcePolicy.hs b/gen/Amazonka/CloudWatchLogs/PutResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutResourcePolicy.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutResourcePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a resource policy allowing other Amazon Web Services
+-- services to put log events to this account, such as Amazon Route 53. An
+-- account can have up to 10 resource policies per Amazon Web Services
+-- Region.
+module Amazonka.CloudWatchLogs.PutResourcePolicy
+  ( -- * Creating a Request
+    PutResourcePolicy (..),
+    newPutResourcePolicy,
+
+    -- * Request Lenses
+    putResourcePolicy_policyDocument,
+    putResourcePolicy_policyName,
+
+    -- * Destructuring the Response
+    PutResourcePolicyResponse (..),
+    newPutResourcePolicyResponse,
+
+    -- * Response Lenses
+    putResourcePolicyResponse_resourcePolicy,
+    putResourcePolicyResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutResourcePolicy' smart constructor.
+data PutResourcePolicy = PutResourcePolicy'
+  { -- | Details of the new policy, including the identity of the principal that
+    -- is enabled to put logs to this account. This is formatted as a JSON
+    -- string. This parameter is required.
+    --
+    -- The following example creates a resource policy enabling the Route 53
+    -- service to put DNS query logs in to the specified log group. Replace
+    -- @\"logArn\"@ with the ARN of your CloudWatch Logs resource, such as a
+    -- log group or log stream.
+    --
+    -- CloudWatch Logs also supports
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn aws:SourceArn>
+    -- and
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount aws:SourceAccount>
+    -- condition context keys.
+    --
+    -- In the example resource policy, you would replace the value of
+    -- @SourceArn@ with the resource making the call from Route 53 to
+    -- CloudWatch Logs. You would also replace the value of @SourceAccount@
+    -- with the Amazon Web Services account ID making that call.
+    --
+    -- @{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"Route53LogsToCloudWatchLogs\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": [ \"route53.amazonaws.com\" ] }, \"Action\": \"logs:PutLogEvents\", \"Resource\": \"logArn\", \"Condition\": { \"ArnLike\": { \"aws:SourceArn\": \"myRoute53ResourceArn\" }, \"StringEquals\": { \"aws:SourceAccount\": \"myAwsAccountId\" } } } ] }@
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | Name of the new policy. This parameter is required.
+    policyName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutResourcePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyDocument', 'putResourcePolicy_policyDocument' - Details of the new policy, including the identity of the principal that
+-- is enabled to put logs to this account. This is formatted as a JSON
+-- string. This parameter is required.
+--
+-- The following example creates a resource policy enabling the Route 53
+-- service to put DNS query logs in to the specified log group. Replace
+-- @\"logArn\"@ with the ARN of your CloudWatch Logs resource, such as a
+-- log group or log stream.
+--
+-- CloudWatch Logs also supports
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn aws:SourceArn>
+-- and
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount aws:SourceAccount>
+-- condition context keys.
+--
+-- In the example resource policy, you would replace the value of
+-- @SourceArn@ with the resource making the call from Route 53 to
+-- CloudWatch Logs. You would also replace the value of @SourceAccount@
+-- with the Amazon Web Services account ID making that call.
+--
+-- @{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"Route53LogsToCloudWatchLogs\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": [ \"route53.amazonaws.com\" ] }, \"Action\": \"logs:PutLogEvents\", \"Resource\": \"logArn\", \"Condition\": { \"ArnLike\": { \"aws:SourceArn\": \"myRoute53ResourceArn\" }, \"StringEquals\": { \"aws:SourceAccount\": \"myAwsAccountId\" } } } ] }@
+--
+-- 'policyName', 'putResourcePolicy_policyName' - Name of the new policy. This parameter is required.
+newPutResourcePolicy ::
+  PutResourcePolicy
+newPutResourcePolicy =
+  PutResourcePolicy'
+    { policyDocument =
+        Prelude.Nothing,
+      policyName = Prelude.Nothing
+    }
+
+-- | Details of the new policy, including the identity of the principal that
+-- is enabled to put logs to this account. This is formatted as a JSON
+-- string. This parameter is required.
+--
+-- The following example creates a resource policy enabling the Route 53
+-- service to put DNS query logs in to the specified log group. Replace
+-- @\"logArn\"@ with the ARN of your CloudWatch Logs resource, such as a
+-- log group or log stream.
+--
+-- CloudWatch Logs also supports
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn aws:SourceArn>
+-- and
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount aws:SourceAccount>
+-- condition context keys.
+--
+-- In the example resource policy, you would replace the value of
+-- @SourceArn@ with the resource making the call from Route 53 to
+-- CloudWatch Logs. You would also replace the value of @SourceAccount@
+-- with the Amazon Web Services account ID making that call.
+--
+-- @{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"Route53LogsToCloudWatchLogs\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": [ \"route53.amazonaws.com\" ] }, \"Action\": \"logs:PutLogEvents\", \"Resource\": \"logArn\", \"Condition\": { \"ArnLike\": { \"aws:SourceArn\": \"myRoute53ResourceArn\" }, \"StringEquals\": { \"aws:SourceAccount\": \"myAwsAccountId\" } } } ] }@
+putResourcePolicy_policyDocument :: Lens.Lens' PutResourcePolicy (Prelude.Maybe Prelude.Text)
+putResourcePolicy_policyDocument = Lens.lens (\PutResourcePolicy' {policyDocument} -> policyDocument) (\s@PutResourcePolicy' {} a -> s {policyDocument = a} :: PutResourcePolicy)
+
+-- | Name of the new policy. This parameter is required.
+putResourcePolicy_policyName :: Lens.Lens' PutResourcePolicy (Prelude.Maybe Prelude.Text)
+putResourcePolicy_policyName = Lens.lens (\PutResourcePolicy' {policyName} -> policyName) (\s@PutResourcePolicy' {} a -> s {policyName = a} :: PutResourcePolicy)
+
+instance Core.AWSRequest PutResourcePolicy where
+  type
+    AWSResponse PutResourcePolicy =
+      PutResourcePolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutResourcePolicyResponse'
+            Prelude.<$> (x Data..?> "resourcePolicy")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutResourcePolicy where
+  hashWithSalt _salt PutResourcePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` policyName
+
+instance Prelude.NFData PutResourcePolicy where
+  rnf PutResourcePolicy' {..} =
+    Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf policyName
+
+instance Data.ToHeaders PutResourcePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutResourcePolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutResourcePolicy where
+  toJSON PutResourcePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("policyDocument" Data..=)
+              Prelude.<$> policyDocument,
+            ("policyName" Data..=) Prelude.<$> policyName
+          ]
+      )
+
+instance Data.ToPath PutResourcePolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutResourcePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutResourcePolicyResponse' smart constructor.
+data PutResourcePolicyResponse = PutResourcePolicyResponse'
+  { -- | The new policy.
+    resourcePolicy :: Prelude.Maybe ResourcePolicy,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutResourcePolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourcePolicy', 'putResourcePolicyResponse_resourcePolicy' - The new policy.
+--
+-- 'httpStatus', 'putResourcePolicyResponse_httpStatus' - The response's http status code.
+newPutResourcePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutResourcePolicyResponse
+newPutResourcePolicyResponse pHttpStatus_ =
+  PutResourcePolicyResponse'
+    { resourcePolicy =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The new policy.
+putResourcePolicyResponse_resourcePolicy :: Lens.Lens' PutResourcePolicyResponse (Prelude.Maybe ResourcePolicy)
+putResourcePolicyResponse_resourcePolicy = Lens.lens (\PutResourcePolicyResponse' {resourcePolicy} -> resourcePolicy) (\s@PutResourcePolicyResponse' {} a -> s {resourcePolicy = a} :: PutResourcePolicyResponse)
+
+-- | The response's http status code.
+putResourcePolicyResponse_httpStatus :: Lens.Lens' PutResourcePolicyResponse Prelude.Int
+putResourcePolicyResponse_httpStatus = Lens.lens (\PutResourcePolicyResponse' {httpStatus} -> httpStatus) (\s@PutResourcePolicyResponse' {} a -> s {httpStatus = a} :: PutResourcePolicyResponse)
+
+instance Prelude.NFData PutResourcePolicyResponse where
+  rnf PutResourcePolicyResponse' {..} =
+    Prelude.rnf resourcePolicy
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/PutRetentionPolicy.hs b/gen/Amazonka/CloudWatchLogs/PutRetentionPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutRetentionPolicy.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutRetentionPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the retention of the specified log group. With a retention policy,
+-- you can configure the number of days for which to retain log events in
+-- the specified log group.
+--
+-- CloudWatch Logs doesn’t immediately delete log events when they reach
+-- their retention setting. It typically takes up to 72 hours after that
+-- before log events are deleted, but in rare situations might take longer.
+--
+-- To illustrate, imagine that you change a log group to have a longer
+-- retention setting when it contains log events that are past the
+-- expiration date, but haven’t been deleted. Those log events will take up
+-- to 72 hours to be deleted after the new retention date is reached. To
+-- make sure that log data is deleted permanently, keep a log group at its
+-- lower retention setting until 72 hours after the previous retention
+-- period ends. Alternatively, wait to change the retention setting until
+-- you confirm that the earlier log events are deleted.
+module Amazonka.CloudWatchLogs.PutRetentionPolicy
+  ( -- * Creating a Request
+    PutRetentionPolicy (..),
+    newPutRetentionPolicy,
+
+    -- * Request Lenses
+    putRetentionPolicy_logGroupName,
+    putRetentionPolicy_retentionInDays,
+
+    -- * Destructuring the Response
+    PutRetentionPolicyResponse (..),
+    newPutRetentionPolicyResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutRetentionPolicy' smart constructor.
+data PutRetentionPolicy = PutRetentionPolicy'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    retentionInDays :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutRetentionPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'putRetentionPolicy_logGroupName' - The name of the log group.
+--
+-- 'retentionInDays', 'putRetentionPolicy_retentionInDays' - Undocumented member.
+newPutRetentionPolicy ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'retentionInDays'
+  Prelude.Int ->
+  PutRetentionPolicy
+newPutRetentionPolicy
+  pLogGroupName_
+  pRetentionInDays_ =
+    PutRetentionPolicy'
+      { logGroupName = pLogGroupName_,
+        retentionInDays = pRetentionInDays_
+      }
+
+-- | The name of the log group.
+putRetentionPolicy_logGroupName :: Lens.Lens' PutRetentionPolicy Prelude.Text
+putRetentionPolicy_logGroupName = Lens.lens (\PutRetentionPolicy' {logGroupName} -> logGroupName) (\s@PutRetentionPolicy' {} a -> s {logGroupName = a} :: PutRetentionPolicy)
+
+-- | Undocumented member.
+putRetentionPolicy_retentionInDays :: Lens.Lens' PutRetentionPolicy Prelude.Int
+putRetentionPolicy_retentionInDays = Lens.lens (\PutRetentionPolicy' {retentionInDays} -> retentionInDays) (\s@PutRetentionPolicy' {} a -> s {retentionInDays = a} :: PutRetentionPolicy)
+
+instance Core.AWSRequest PutRetentionPolicy where
+  type
+    AWSResponse PutRetentionPolicy =
+      PutRetentionPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutRetentionPolicyResponse'
+
+instance Prelude.Hashable PutRetentionPolicy where
+  hashWithSalt _salt PutRetentionPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` retentionInDays
+
+instance Prelude.NFData PutRetentionPolicy where
+  rnf PutRetentionPolicy' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf retentionInDays
+
+instance Data.ToHeaders PutRetentionPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutRetentionPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutRetentionPolicy where
+  toJSON PutRetentionPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just
+              ("retentionInDays" Data..= retentionInDays)
+          ]
+      )
+
+instance Data.ToPath PutRetentionPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutRetentionPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutRetentionPolicyResponse' smart constructor.
+data PutRetentionPolicyResponse = PutRetentionPolicyResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutRetentionPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutRetentionPolicyResponse ::
+  PutRetentionPolicyResponse
+newPutRetentionPolicyResponse =
+  PutRetentionPolicyResponse'
+
+instance Prelude.NFData PutRetentionPolicyResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/PutSubscriptionFilter.hs b/gen/Amazonka/CloudWatchLogs/PutSubscriptionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/PutSubscriptionFilter.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.PutSubscriptionFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a subscription filter and associates it with the
+-- specified log group. With subscription filters, you can subscribe to a
+-- real-time stream of log events ingested through
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html PutLogEvents>
+-- and have them delivered to a specific destination. When log events are
+-- sent to the receiving service, they are Base64 encoded and compressed
+-- with the GZIP format.
+--
+-- The following destinations are supported for subscription filters:
+--
+-- -   An Amazon Kinesis data stream belonging to the same account as the
+--     subscription filter, for same-account delivery.
+--
+-- -   A logical destination that belongs to a different account, for
+--     cross-account delivery.
+--
+-- -   An Amazon Kinesis Data Firehose delivery stream that belongs to the
+--     same account as the subscription filter, for same-account delivery.
+--
+-- -   An Lambda function that belongs to the same account as the
+--     subscription filter, for same-account delivery.
+--
+-- Each log group can have up to two subscription filters associated with
+-- it. If you are updating an existing filter, you must specify the correct
+-- name in @filterName@.
+--
+-- To perform a @PutSubscriptionFilter@ operation, you must also have the
+-- @iam:PassRole@ permission.
+module Amazonka.CloudWatchLogs.PutSubscriptionFilter
+  ( -- * Creating a Request
+    PutSubscriptionFilter (..),
+    newPutSubscriptionFilter,
+
+    -- * Request Lenses
+    putSubscriptionFilter_distribution,
+    putSubscriptionFilter_roleArn,
+    putSubscriptionFilter_logGroupName,
+    putSubscriptionFilter_filterName,
+    putSubscriptionFilter_filterPattern,
+    putSubscriptionFilter_destinationArn,
+
+    -- * Destructuring the Response
+    PutSubscriptionFilterResponse (..),
+    newPutSubscriptionFilterResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutSubscriptionFilter' smart constructor.
+data PutSubscriptionFilter = PutSubscriptionFilter'
+  { -- | The method used to distribute log data to the destination. By default,
+    -- log data is grouped by log stream, but the grouping can be set to random
+    -- for a more even distribution. This property is only applicable when the
+    -- destination is an Amazon Kinesis data stream.
+    distribution :: Prelude.Maybe Distribution,
+    -- | The ARN of an IAM role that grants CloudWatch Logs permissions to
+    -- deliver ingested log events to the destination stream. You don\'t need
+    -- to provide the ARN when you are working with a logical destination for
+    -- cross-account delivery.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | A name for the subscription filter. If you are updating an existing
+    -- filter, you must specify the correct name in @filterName@. To find the
+    -- name of the filter currently associated with a log group, use
+    -- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeSubscriptionFilters.html DescribeSubscriptionFilters>.
+    filterName :: Prelude.Text,
+    -- | A filter pattern for subscribing to a filtered stream of log events.
+    filterPattern :: Prelude.Text,
+    -- | The ARN of the destination to deliver matching log events to. Currently,
+    -- the supported destinations are:
+    --
+    -- -   An Amazon Kinesis stream belonging to the same account as the
+    --     subscription filter, for same-account delivery.
+    --
+    -- -   A logical destination (specified using an ARN) belonging to a
+    --     different account, for cross-account delivery.
+    --
+    --     If you\'re setting up a cross-account subscription, the destination
+    --     must have an IAM policy associated with it. The IAM policy must
+    --     allow the sender to send logs to the destination. For more
+    --     information, see
+    --     <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestinationPolicy.html PutDestinationPolicy>.
+    --
+    -- -   A Kinesis Data Firehose delivery stream belonging to the same
+    --     account as the subscription filter, for same-account delivery.
+    --
+    -- -   A Lambda function belonging to the same account as the subscription
+    --     filter, for same-account delivery.
+    destinationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSubscriptionFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distribution', 'putSubscriptionFilter_distribution' - The method used to distribute log data to the destination. By default,
+-- log data is grouped by log stream, but the grouping can be set to random
+-- for a more even distribution. This property is only applicable when the
+-- destination is an Amazon Kinesis data stream.
+--
+-- 'roleArn', 'putSubscriptionFilter_roleArn' - The ARN of an IAM role that grants CloudWatch Logs permissions to
+-- deliver ingested log events to the destination stream. You don\'t need
+-- to provide the ARN when you are working with a logical destination for
+-- cross-account delivery.
+--
+-- 'logGroupName', 'putSubscriptionFilter_logGroupName' - The name of the log group.
+--
+-- 'filterName', 'putSubscriptionFilter_filterName' - A name for the subscription filter. If you are updating an existing
+-- filter, you must specify the correct name in @filterName@. To find the
+-- name of the filter currently associated with a log group, use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeSubscriptionFilters.html DescribeSubscriptionFilters>.
+--
+-- 'filterPattern', 'putSubscriptionFilter_filterPattern' - A filter pattern for subscribing to a filtered stream of log events.
+--
+-- 'destinationArn', 'putSubscriptionFilter_destinationArn' - The ARN of the destination to deliver matching log events to. Currently,
+-- the supported destinations are:
+--
+-- -   An Amazon Kinesis stream belonging to the same account as the
+--     subscription filter, for same-account delivery.
+--
+-- -   A logical destination (specified using an ARN) belonging to a
+--     different account, for cross-account delivery.
+--
+--     If you\'re setting up a cross-account subscription, the destination
+--     must have an IAM policy associated with it. The IAM policy must
+--     allow the sender to send logs to the destination. For more
+--     information, see
+--     <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestinationPolicy.html PutDestinationPolicy>.
+--
+-- -   A Kinesis Data Firehose delivery stream belonging to the same
+--     account as the subscription filter, for same-account delivery.
+--
+-- -   A Lambda function belonging to the same account as the subscription
+--     filter, for same-account delivery.
+newPutSubscriptionFilter ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'filterName'
+  Prelude.Text ->
+  -- | 'filterPattern'
+  Prelude.Text ->
+  -- | 'destinationArn'
+  Prelude.Text ->
+  PutSubscriptionFilter
+newPutSubscriptionFilter
+  pLogGroupName_
+  pFilterName_
+  pFilterPattern_
+  pDestinationArn_ =
+    PutSubscriptionFilter'
+      { distribution =
+          Prelude.Nothing,
+        roleArn = Prelude.Nothing,
+        logGroupName = pLogGroupName_,
+        filterName = pFilterName_,
+        filterPattern = pFilterPattern_,
+        destinationArn = pDestinationArn_
+      }
+
+-- | The method used to distribute log data to the destination. By default,
+-- log data is grouped by log stream, but the grouping can be set to random
+-- for a more even distribution. This property is only applicable when the
+-- destination is an Amazon Kinesis data stream.
+putSubscriptionFilter_distribution :: Lens.Lens' PutSubscriptionFilter (Prelude.Maybe Distribution)
+putSubscriptionFilter_distribution = Lens.lens (\PutSubscriptionFilter' {distribution} -> distribution) (\s@PutSubscriptionFilter' {} a -> s {distribution = a} :: PutSubscriptionFilter)
+
+-- | The ARN of an IAM role that grants CloudWatch Logs permissions to
+-- deliver ingested log events to the destination stream. You don\'t need
+-- to provide the ARN when you are working with a logical destination for
+-- cross-account delivery.
+putSubscriptionFilter_roleArn :: Lens.Lens' PutSubscriptionFilter (Prelude.Maybe Prelude.Text)
+putSubscriptionFilter_roleArn = Lens.lens (\PutSubscriptionFilter' {roleArn} -> roleArn) (\s@PutSubscriptionFilter' {} a -> s {roleArn = a} :: PutSubscriptionFilter)
+
+-- | The name of the log group.
+putSubscriptionFilter_logGroupName :: Lens.Lens' PutSubscriptionFilter Prelude.Text
+putSubscriptionFilter_logGroupName = Lens.lens (\PutSubscriptionFilter' {logGroupName} -> logGroupName) (\s@PutSubscriptionFilter' {} a -> s {logGroupName = a} :: PutSubscriptionFilter)
+
+-- | A name for the subscription filter. If you are updating an existing
+-- filter, you must specify the correct name in @filterName@. To find the
+-- name of the filter currently associated with a log group, use
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeSubscriptionFilters.html DescribeSubscriptionFilters>.
+putSubscriptionFilter_filterName :: Lens.Lens' PutSubscriptionFilter Prelude.Text
+putSubscriptionFilter_filterName = Lens.lens (\PutSubscriptionFilter' {filterName} -> filterName) (\s@PutSubscriptionFilter' {} a -> s {filterName = a} :: PutSubscriptionFilter)
+
+-- | A filter pattern for subscribing to a filtered stream of log events.
+putSubscriptionFilter_filterPattern :: Lens.Lens' PutSubscriptionFilter Prelude.Text
+putSubscriptionFilter_filterPattern = Lens.lens (\PutSubscriptionFilter' {filterPattern} -> filterPattern) (\s@PutSubscriptionFilter' {} a -> s {filterPattern = a} :: PutSubscriptionFilter)
+
+-- | The ARN of the destination to deliver matching log events to. Currently,
+-- the supported destinations are:
+--
+-- -   An Amazon Kinesis stream belonging to the same account as the
+--     subscription filter, for same-account delivery.
+--
+-- -   A logical destination (specified using an ARN) belonging to a
+--     different account, for cross-account delivery.
+--
+--     If you\'re setting up a cross-account subscription, the destination
+--     must have an IAM policy associated with it. The IAM policy must
+--     allow the sender to send logs to the destination. For more
+--     information, see
+--     <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestinationPolicy.html PutDestinationPolicy>.
+--
+-- -   A Kinesis Data Firehose delivery stream belonging to the same
+--     account as the subscription filter, for same-account delivery.
+--
+-- -   A Lambda function belonging to the same account as the subscription
+--     filter, for same-account delivery.
+putSubscriptionFilter_destinationArn :: Lens.Lens' PutSubscriptionFilter Prelude.Text
+putSubscriptionFilter_destinationArn = Lens.lens (\PutSubscriptionFilter' {destinationArn} -> destinationArn) (\s@PutSubscriptionFilter' {} a -> s {destinationArn = a} :: PutSubscriptionFilter)
+
+instance Core.AWSRequest PutSubscriptionFilter where
+  type
+    AWSResponse PutSubscriptionFilter =
+      PutSubscriptionFilterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutSubscriptionFilterResponse'
+
+instance Prelude.Hashable PutSubscriptionFilter where
+  hashWithSalt _salt PutSubscriptionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` distribution
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` filterName
+      `Prelude.hashWithSalt` filterPattern
+      `Prelude.hashWithSalt` destinationArn
+
+instance Prelude.NFData PutSubscriptionFilter where
+  rnf PutSubscriptionFilter' {..} =
+    Prelude.rnf distribution
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf filterName
+      `Prelude.seq` Prelude.rnf filterPattern
+      `Prelude.seq` Prelude.rnf destinationArn
+
+instance Data.ToHeaders PutSubscriptionFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.PutSubscriptionFilter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutSubscriptionFilter where
+  toJSON PutSubscriptionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("distribution" Data..=) Prelude.<$> distribution,
+            ("roleArn" Data..=) Prelude.<$> roleArn,
+            Prelude.Just ("logGroupName" Data..= logGroupName),
+            Prelude.Just ("filterName" Data..= filterName),
+            Prelude.Just ("filterPattern" Data..= filterPattern),
+            Prelude.Just
+              ("destinationArn" Data..= destinationArn)
+          ]
+      )
+
+instance Data.ToPath PutSubscriptionFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutSubscriptionFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutSubscriptionFilterResponse' smart constructor.
+data PutSubscriptionFilterResponse = PutSubscriptionFilterResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSubscriptionFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutSubscriptionFilterResponse ::
+  PutSubscriptionFilterResponse
+newPutSubscriptionFilterResponse =
+  PutSubscriptionFilterResponse'
+
+instance Prelude.NFData PutSubscriptionFilterResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/StartQuery.hs b/gen/Amazonka/CloudWatchLogs/StartQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/StartQuery.hs
@@ -0,0 +1,342 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.StartQuery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Schedules a query of a log group using CloudWatch Logs Insights. You
+-- specify the log group and time range to query and the query string to
+-- use.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+--
+-- Queries time out after 15 minutes of runtime. If your queries are timing
+-- out, reduce the time range being searched or partition your query into a
+-- number of queries.
+--
+-- If you are using CloudWatch cross-account observability, you can use
+-- this operation in a monitoring account to start a query in a linked
+-- source account. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html CloudWatch cross-account observability>.
+-- For a cross-account @StartQuery@ operation, the query definition must be
+-- defined in the monitoring account.
+--
+-- You can have up to 20 concurrent CloudWatch Logs insights queries,
+-- including queries that have been added to dashboards.
+module Amazonka.CloudWatchLogs.StartQuery
+  ( -- * Creating a Request
+    StartQuery (..),
+    newStartQuery,
+
+    -- * Request Lenses
+    startQuery_limit,
+    startQuery_logGroupIdentifiers,
+    startQuery_logGroupName,
+    startQuery_logGroupNames,
+    startQuery_startTime,
+    startQuery_endTime,
+    startQuery_queryString,
+
+    -- * Destructuring the Response
+    StartQueryResponse (..),
+    newStartQueryResponse,
+
+    -- * Response Lenses
+    startQueryResponse_queryId,
+    startQueryResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartQuery' smart constructor.
+data StartQuery = StartQuery'
+  { -- | The maximum number of log events to return in the query. If the query
+    -- string uses the @fields@ command, only the specified fields and their
+    -- values are returned. The default is 1000.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | The list of log groups to query. You can include up to 50 log groups.
+    --
+    -- You can specify them by the log group name or ARN. If a log group that
+    -- you\'re querying is in a source account and you\'re using a monitoring
+    -- account, you must specify the ARN of the log group here. The query
+    -- definition must also be defined in the monitoring account.
+    --
+    -- If you specify an ARN, the ARN can\'t end with an asterisk (*).
+    --
+    -- A @StartQuery@ operation must include exactly one of the following
+    -- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+    logGroupIdentifiers :: Prelude.Maybe [Prelude.Text],
+    -- | The log group on which to perform the query.
+    --
+    -- A @StartQuery@ operation must include exactly one of the following
+    -- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The list of log groups to be queried. You can include up to 50 log
+    -- groups.
+    --
+    -- A @StartQuery@ operation must include exactly one of the following
+    -- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+    logGroupNames :: Prelude.Maybe [Prelude.Text],
+    -- | The beginning of the time range to query. The range is inclusive, so the
+    -- specified start time is included in the query. Specified as epoch time,
+    -- the number of seconds since @January 1, 1970, 00:00:00 UTC@.
+    startTime :: Prelude.Natural,
+    -- | The end of the time range to query. The range is inclusive, so the
+    -- specified end time is included in the query. Specified as epoch time,
+    -- the number of seconds since @January 1, 1970, 00:00:00 UTC@.
+    endTime :: Prelude.Natural,
+    -- | The query string to use. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+    queryString :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartQuery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'limit', 'startQuery_limit' - The maximum number of log events to return in the query. If the query
+-- string uses the @fields@ command, only the specified fields and their
+-- values are returned. The default is 1000.
+--
+-- 'logGroupIdentifiers', 'startQuery_logGroupIdentifiers' - The list of log groups to query. You can include up to 50 log groups.
+--
+-- You can specify them by the log group name or ARN. If a log group that
+-- you\'re querying is in a source account and you\'re using a monitoring
+-- account, you must specify the ARN of the log group here. The query
+-- definition must also be defined in the monitoring account.
+--
+-- If you specify an ARN, the ARN can\'t end with an asterisk (*).
+--
+-- A @StartQuery@ operation must include exactly one of the following
+-- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+--
+-- 'logGroupName', 'startQuery_logGroupName' - The log group on which to perform the query.
+--
+-- A @StartQuery@ operation must include exactly one of the following
+-- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+--
+-- 'logGroupNames', 'startQuery_logGroupNames' - The list of log groups to be queried. You can include up to 50 log
+-- groups.
+--
+-- A @StartQuery@ operation must include exactly one of the following
+-- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+--
+-- 'startTime', 'startQuery_startTime' - The beginning of the time range to query. The range is inclusive, so the
+-- specified start time is included in the query. Specified as epoch time,
+-- the number of seconds since @January 1, 1970, 00:00:00 UTC@.
+--
+-- 'endTime', 'startQuery_endTime' - The end of the time range to query. The range is inclusive, so the
+-- specified end time is included in the query. Specified as epoch time,
+-- the number of seconds since @January 1, 1970, 00:00:00 UTC@.
+--
+-- 'queryString', 'startQuery_queryString' - The query string to use. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+newStartQuery ::
+  -- | 'startTime'
+  Prelude.Natural ->
+  -- | 'endTime'
+  Prelude.Natural ->
+  -- | 'queryString'
+  Prelude.Text ->
+  StartQuery
+newStartQuery pStartTime_ pEndTime_ pQueryString_ =
+  StartQuery'
+    { limit = Prelude.Nothing,
+      logGroupIdentifiers = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      logGroupNames = Prelude.Nothing,
+      startTime = pStartTime_,
+      endTime = pEndTime_,
+      queryString = pQueryString_
+    }
+
+-- | The maximum number of log events to return in the query. If the query
+-- string uses the @fields@ command, only the specified fields and their
+-- values are returned. The default is 1000.
+startQuery_limit :: Lens.Lens' StartQuery (Prelude.Maybe Prelude.Natural)
+startQuery_limit = Lens.lens (\StartQuery' {limit} -> limit) (\s@StartQuery' {} a -> s {limit = a} :: StartQuery)
+
+-- | The list of log groups to query. You can include up to 50 log groups.
+--
+-- You can specify them by the log group name or ARN. If a log group that
+-- you\'re querying is in a source account and you\'re using a monitoring
+-- account, you must specify the ARN of the log group here. The query
+-- definition must also be defined in the monitoring account.
+--
+-- If you specify an ARN, the ARN can\'t end with an asterisk (*).
+--
+-- A @StartQuery@ operation must include exactly one of the following
+-- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+startQuery_logGroupIdentifiers :: Lens.Lens' StartQuery (Prelude.Maybe [Prelude.Text])
+startQuery_logGroupIdentifiers = Lens.lens (\StartQuery' {logGroupIdentifiers} -> logGroupIdentifiers) (\s@StartQuery' {} a -> s {logGroupIdentifiers = a} :: StartQuery) Prelude.. Lens.mapping Lens.coerced
+
+-- | The log group on which to perform the query.
+--
+-- A @StartQuery@ operation must include exactly one of the following
+-- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+startQuery_logGroupName :: Lens.Lens' StartQuery (Prelude.Maybe Prelude.Text)
+startQuery_logGroupName = Lens.lens (\StartQuery' {logGroupName} -> logGroupName) (\s@StartQuery' {} a -> s {logGroupName = a} :: StartQuery)
+
+-- | The list of log groups to be queried. You can include up to 50 log
+-- groups.
+--
+-- A @StartQuery@ operation must include exactly one of the following
+-- parameters: @logGroupName@, @logGroupNames@ or @logGroupIdentifiers@.
+startQuery_logGroupNames :: Lens.Lens' StartQuery (Prelude.Maybe [Prelude.Text])
+startQuery_logGroupNames = Lens.lens (\StartQuery' {logGroupNames} -> logGroupNames) (\s@StartQuery' {} a -> s {logGroupNames = a} :: StartQuery) Prelude.. Lens.mapping Lens.coerced
+
+-- | The beginning of the time range to query. The range is inclusive, so the
+-- specified start time is included in the query. Specified as epoch time,
+-- the number of seconds since @January 1, 1970, 00:00:00 UTC@.
+startQuery_startTime :: Lens.Lens' StartQuery Prelude.Natural
+startQuery_startTime = Lens.lens (\StartQuery' {startTime} -> startTime) (\s@StartQuery' {} a -> s {startTime = a} :: StartQuery)
+
+-- | The end of the time range to query. The range is inclusive, so the
+-- specified end time is included in the query. Specified as epoch time,
+-- the number of seconds since @January 1, 1970, 00:00:00 UTC@.
+startQuery_endTime :: Lens.Lens' StartQuery Prelude.Natural
+startQuery_endTime = Lens.lens (\StartQuery' {endTime} -> endTime) (\s@StartQuery' {} a -> s {endTime = a} :: StartQuery)
+
+-- | The query string to use. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+startQuery_queryString :: Lens.Lens' StartQuery Prelude.Text
+startQuery_queryString = Lens.lens (\StartQuery' {queryString} -> queryString) (\s@StartQuery' {} a -> s {queryString = a} :: StartQuery)
+
+instance Core.AWSRequest StartQuery where
+  type AWSResponse StartQuery = StartQueryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartQueryResponse'
+            Prelude.<$> (x Data..?> "queryId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartQuery where
+  hashWithSalt _salt StartQuery' {..} =
+    _salt
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` logGroupIdentifiers
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logGroupNames
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` queryString
+
+instance Prelude.NFData StartQuery where
+  rnf StartQuery' {..} =
+    Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf logGroupIdentifiers
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logGroupNames
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf queryString
+
+instance Data.ToHeaders StartQuery where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("Logs_20140328.StartQuery" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartQuery where
+  toJSON StartQuery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("limit" Data..=) Prelude.<$> limit,
+            ("logGroupIdentifiers" Data..=)
+              Prelude.<$> logGroupIdentifiers,
+            ("logGroupName" Data..=) Prelude.<$> logGroupName,
+            ("logGroupNames" Data..=) Prelude.<$> logGroupNames,
+            Prelude.Just ("startTime" Data..= startTime),
+            Prelude.Just ("endTime" Data..= endTime),
+            Prelude.Just ("queryString" Data..= queryString)
+          ]
+      )
+
+instance Data.ToPath StartQuery where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartQuery where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartQueryResponse' smart constructor.
+data StartQueryResponse = StartQueryResponse'
+  { -- | The unique ID of the query.
+    queryId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartQueryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queryId', 'startQueryResponse_queryId' - The unique ID of the query.
+--
+-- 'httpStatus', 'startQueryResponse_httpStatus' - The response's http status code.
+newStartQueryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartQueryResponse
+newStartQueryResponse pHttpStatus_ =
+  StartQueryResponse'
+    { queryId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique ID of the query.
+startQueryResponse_queryId :: Lens.Lens' StartQueryResponse (Prelude.Maybe Prelude.Text)
+startQueryResponse_queryId = Lens.lens (\StartQueryResponse' {queryId} -> queryId) (\s@StartQueryResponse' {} a -> s {queryId = a} :: StartQueryResponse)
+
+-- | The response's http status code.
+startQueryResponse_httpStatus :: Lens.Lens' StartQueryResponse Prelude.Int
+startQueryResponse_httpStatus = Lens.lens (\StartQueryResponse' {httpStatus} -> httpStatus) (\s@StartQueryResponse' {} a -> s {httpStatus = a} :: StartQueryResponse)
+
+instance Prelude.NFData StartQueryResponse where
+  rnf StartQueryResponse' {..} =
+    Prelude.rnf queryId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/StopQuery.hs b/gen/Amazonka/CloudWatchLogs/StopQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/StopQuery.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.StopQuery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a CloudWatch Logs Insights query that is in progress. If the query
+-- has already ended, the operation returns an error indicating that the
+-- specified query is not running.
+module Amazonka.CloudWatchLogs.StopQuery
+  ( -- * Creating a Request
+    StopQuery (..),
+    newStopQuery,
+
+    -- * Request Lenses
+    stopQuery_queryId,
+
+    -- * Destructuring the Response
+    StopQueryResponse (..),
+    newStopQueryResponse,
+
+    -- * Response Lenses
+    stopQueryResponse_success,
+    stopQueryResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopQuery' smart constructor.
+data StopQuery = StopQuery'
+  { -- | The ID number of the query to stop. To find this ID number, use
+    -- @DescribeQueries@.
+    queryId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopQuery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queryId', 'stopQuery_queryId' - The ID number of the query to stop. To find this ID number, use
+-- @DescribeQueries@.
+newStopQuery ::
+  -- | 'queryId'
+  Prelude.Text ->
+  StopQuery
+newStopQuery pQueryId_ =
+  StopQuery' {queryId = pQueryId_}
+
+-- | The ID number of the query to stop. To find this ID number, use
+-- @DescribeQueries@.
+stopQuery_queryId :: Lens.Lens' StopQuery Prelude.Text
+stopQuery_queryId = Lens.lens (\StopQuery' {queryId} -> queryId) (\s@StopQuery' {} a -> s {queryId = a} :: StopQuery)
+
+instance Core.AWSRequest StopQuery where
+  type AWSResponse StopQuery = StopQueryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopQueryResponse'
+            Prelude.<$> (x Data..?> "success")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopQuery where
+  hashWithSalt _salt StopQuery' {..} =
+    _salt `Prelude.hashWithSalt` queryId
+
+instance Prelude.NFData StopQuery where
+  rnf StopQuery' {..} = Prelude.rnf queryId
+
+instance Data.ToHeaders StopQuery where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("Logs_20140328.StopQuery" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopQuery where
+  toJSON StopQuery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("queryId" Data..= queryId)]
+      )
+
+instance Data.ToPath StopQuery where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopQuery where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopQueryResponse' smart constructor.
+data StopQueryResponse = StopQueryResponse'
+  { -- | This is true if the query was stopped by the @StopQuery@ operation.
+    success :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopQueryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'success', 'stopQueryResponse_success' - This is true if the query was stopped by the @StopQuery@ operation.
+--
+-- 'httpStatus', 'stopQueryResponse_httpStatus' - The response's http status code.
+newStopQueryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopQueryResponse
+newStopQueryResponse pHttpStatus_ =
+  StopQueryResponse'
+    { success = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | This is true if the query was stopped by the @StopQuery@ operation.
+stopQueryResponse_success :: Lens.Lens' StopQueryResponse (Prelude.Maybe Prelude.Bool)
+stopQueryResponse_success = Lens.lens (\StopQueryResponse' {success} -> success) (\s@StopQueryResponse' {} a -> s {success = a} :: StopQueryResponse)
+
+-- | The response's http status code.
+stopQueryResponse_httpStatus :: Lens.Lens' StopQueryResponse Prelude.Int
+stopQueryResponse_httpStatus = Lens.lens (\StopQueryResponse' {httpStatus} -> httpStatus) (\s@StopQueryResponse' {} a -> s {httpStatus = a} :: StopQueryResponse)
+
+instance Prelude.NFData StopQueryResponse where
+  rnf StopQueryResponse' {..} =
+    Prelude.rnf success
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/TagResource.hs b/gen/Amazonka/CloudWatchLogs/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/TagResource.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Assigns one or more tags (key-value pairs) to the specified CloudWatch
+-- Logs resource. Currently, the only CloudWatch Logs resources that can be
+-- tagged are log groups and destinations.
+--
+-- Tags can help you organize and categorize your resources. You can also
+-- use them to scope user permissions by granting a user permission to
+-- access or change only resources with certain tag values.
+--
+-- Tags don\'t have any semantic meaning to Amazon Web Services and are
+-- interpreted strictly as strings of characters.
+--
+-- You can use the @TagResource@ action with a resource that already has
+-- tags. If you specify a new tag key for the alarm, this tag is appended
+-- to the list of tags associated with the alarm. If you specify a tag key
+-- that is already associated with the alarm, the new tag value that you
+-- specify replaces the previous value for that tag.
+--
+-- You can associate as many as 50 tags with a CloudWatch Logs resource.
+module Amazonka.CloudWatchLogs.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The ARN of the resource that you\'re adding tags to.
+    --
+    -- The ARN format of a log group is
+    -- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+    --
+    -- The ARN format of a destination is
+    -- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+    --
+    -- For more information about ARN format, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+    resourceArn :: Prelude.Text,
+    -- | The list of key-value pairs to associate with the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The ARN of the resource that you\'re adding tags to.
+--
+-- The ARN format of a log group is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+--
+-- The ARN format of a destination is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+--
+-- For more information about ARN format, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+--
+-- 'tags', 'tagResource_tags' - The list of key-value pairs to associate with the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource that you\'re adding tags to.
+--
+-- The ARN format of a log group is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+--
+-- The ARN format of a destination is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+--
+-- For more information about ARN format, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The list of key-value pairs to associate with the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull TagResourceResponse'
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("Logs_20140328.TagResource" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("resourceArn" Data..= resourceArn),
+            Prelude.Just ("tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/TestMetricFilter.hs b/gen/Amazonka/CloudWatchLogs/TestMetricFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/TestMetricFilter.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.TestMetricFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Tests the filter pattern of a metric filter against a sample of log
+-- event messages. You can use this operation to validate the correctness
+-- of a metric filter pattern.
+module Amazonka.CloudWatchLogs.TestMetricFilter
+  ( -- * Creating a Request
+    TestMetricFilter (..),
+    newTestMetricFilter,
+
+    -- * Request Lenses
+    testMetricFilter_filterPattern,
+    testMetricFilter_logEventMessages,
+
+    -- * Destructuring the Response
+    TestMetricFilterResponse (..),
+    newTestMetricFilterResponse,
+
+    -- * Response Lenses
+    testMetricFilterResponse_matches,
+    testMetricFilterResponse_httpStatus,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTestMetricFilter' smart constructor.
+data TestMetricFilter = TestMetricFilter'
+  { filterPattern :: Prelude.Text,
+    -- | The log event messages to test.
+    logEventMessages :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestMetricFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterPattern', 'testMetricFilter_filterPattern' - Undocumented member.
+--
+-- 'logEventMessages', 'testMetricFilter_logEventMessages' - The log event messages to test.
+newTestMetricFilter ::
+  -- | 'filterPattern'
+  Prelude.Text ->
+  -- | 'logEventMessages'
+  Prelude.NonEmpty Prelude.Text ->
+  TestMetricFilter
+newTestMetricFilter
+  pFilterPattern_
+  pLogEventMessages_ =
+    TestMetricFilter'
+      { filterPattern = pFilterPattern_,
+        logEventMessages =
+          Lens.coerced Lens.# pLogEventMessages_
+      }
+
+-- | Undocumented member.
+testMetricFilter_filterPattern :: Lens.Lens' TestMetricFilter Prelude.Text
+testMetricFilter_filterPattern = Lens.lens (\TestMetricFilter' {filterPattern} -> filterPattern) (\s@TestMetricFilter' {} a -> s {filterPattern = a} :: TestMetricFilter)
+
+-- | The log event messages to test.
+testMetricFilter_logEventMessages :: Lens.Lens' TestMetricFilter (Prelude.NonEmpty Prelude.Text)
+testMetricFilter_logEventMessages = Lens.lens (\TestMetricFilter' {logEventMessages} -> logEventMessages) (\s@TestMetricFilter' {} a -> s {logEventMessages = a} :: TestMetricFilter) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TestMetricFilter where
+  type
+    AWSResponse TestMetricFilter =
+      TestMetricFilterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TestMetricFilterResponse'
+            Prelude.<$> (x Data..?> "matches" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TestMetricFilter where
+  hashWithSalt _salt TestMetricFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterPattern
+      `Prelude.hashWithSalt` logEventMessages
+
+instance Prelude.NFData TestMetricFilter where
+  rnf TestMetricFilter' {..} =
+    Prelude.rnf filterPattern
+      `Prelude.seq` Prelude.rnf logEventMessages
+
+instance Data.ToHeaders TestMetricFilter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.TestMetricFilter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TestMetricFilter where
+  toJSON TestMetricFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("filterPattern" Data..= filterPattern),
+            Prelude.Just
+              ("logEventMessages" Data..= logEventMessages)
+          ]
+      )
+
+instance Data.ToPath TestMetricFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TestMetricFilter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTestMetricFilterResponse' smart constructor.
+data TestMetricFilterResponse = TestMetricFilterResponse'
+  { -- | The matched events.
+    matches :: Prelude.Maybe [MetricFilterMatchRecord],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestMetricFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'matches', 'testMetricFilterResponse_matches' - The matched events.
+--
+-- 'httpStatus', 'testMetricFilterResponse_httpStatus' - The response's http status code.
+newTestMetricFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TestMetricFilterResponse
+newTestMetricFilterResponse pHttpStatus_ =
+  TestMetricFilterResponse'
+    { matches =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The matched events.
+testMetricFilterResponse_matches :: Lens.Lens' TestMetricFilterResponse (Prelude.Maybe [MetricFilterMatchRecord])
+testMetricFilterResponse_matches = Lens.lens (\TestMetricFilterResponse' {matches} -> matches) (\s@TestMetricFilterResponse' {} a -> s {matches = a} :: TestMetricFilterResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+testMetricFilterResponse_httpStatus :: Lens.Lens' TestMetricFilterResponse Prelude.Int
+testMetricFilterResponse_httpStatus = Lens.lens (\TestMetricFilterResponse' {httpStatus} -> httpStatus) (\s@TestMetricFilterResponse' {} a -> s {httpStatus = a} :: TestMetricFilterResponse)
+
+instance Prelude.NFData TestMetricFilterResponse where
+  rnf TestMetricFilterResponse' {..} =
+    Prelude.rnf matches
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/CloudWatchLogs/Types.hs b/gen/Amazonka/CloudWatchLogs/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types.hs
@@ -0,0 +1,430 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _DataAlreadyAcceptedException,
+    _InvalidOperationException,
+    _InvalidParameterException,
+    _InvalidSequenceTokenException,
+    _LimitExceededException,
+    _MalformedQueryException,
+    _OperationAbortedException,
+    _ResourceAlreadyExistsException,
+    _ResourceNotFoundException,
+    _ServiceUnavailableException,
+    _TooManyTagsException,
+    _UnrecognizedClientException,
+
+    -- * DataProtectionStatus
+    DataProtectionStatus (..),
+
+    -- * Distribution
+    Distribution (..),
+
+    -- * ExportTaskStatusCode
+    ExportTaskStatusCode (..),
+
+    -- * OrderBy
+    OrderBy (..),
+
+    -- * QueryStatus
+    QueryStatus (..),
+
+    -- * StandardUnit
+    StandardUnit (..),
+
+    -- * Destination
+    Destination (..),
+    newDestination,
+    destination_accessPolicy,
+    destination_arn,
+    destination_creationTime,
+    destination_destinationName,
+    destination_roleArn,
+    destination_targetArn,
+
+    -- * ExportTask
+    ExportTask (..),
+    newExportTask,
+    exportTask_destination,
+    exportTask_destinationPrefix,
+    exportTask_executionInfo,
+    exportTask_from,
+    exportTask_logGroupName,
+    exportTask_status,
+    exportTask_taskId,
+    exportTask_taskName,
+    exportTask_to,
+
+    -- * ExportTaskExecutionInfo
+    ExportTaskExecutionInfo (..),
+    newExportTaskExecutionInfo,
+    exportTaskExecutionInfo_completionTime,
+    exportTaskExecutionInfo_creationTime,
+
+    -- * ExportTaskStatus
+    ExportTaskStatus (..),
+    newExportTaskStatus,
+    exportTaskStatus_code,
+    exportTaskStatus_message,
+
+    -- * FilteredLogEvent
+    FilteredLogEvent (..),
+    newFilteredLogEvent,
+    filteredLogEvent_eventId,
+    filteredLogEvent_ingestionTime,
+    filteredLogEvent_logStreamName,
+    filteredLogEvent_message,
+    filteredLogEvent_timestamp,
+
+    -- * InputLogEvent
+    InputLogEvent (..),
+    newInputLogEvent,
+    inputLogEvent_timestamp,
+    inputLogEvent_message,
+
+    -- * LogGroup
+    LogGroup (..),
+    newLogGroup,
+    logGroup_arn,
+    logGroup_creationTime,
+    logGroup_dataProtectionStatus,
+    logGroup_kmsKeyId,
+    logGroup_logGroupName,
+    logGroup_metricFilterCount,
+    logGroup_retentionInDays,
+    logGroup_storedBytes,
+
+    -- * LogGroupField
+    LogGroupField (..),
+    newLogGroupField,
+    logGroupField_name,
+    logGroupField_percent,
+
+    -- * LogStream
+    LogStream (..),
+    newLogStream,
+    logStream_arn,
+    logStream_creationTime,
+    logStream_firstEventTimestamp,
+    logStream_lastEventTimestamp,
+    logStream_lastIngestionTime,
+    logStream_logStreamName,
+    logStream_storedBytes,
+    logStream_uploadSequenceToken,
+
+    -- * MetricFilter
+    MetricFilter (..),
+    newMetricFilter,
+    metricFilter_creationTime,
+    metricFilter_filterName,
+    metricFilter_filterPattern,
+    metricFilter_logGroupName,
+    metricFilter_metricTransformations,
+
+    -- * MetricFilterMatchRecord
+    MetricFilterMatchRecord (..),
+    newMetricFilterMatchRecord,
+    metricFilterMatchRecord_eventMessage,
+    metricFilterMatchRecord_eventNumber,
+    metricFilterMatchRecord_extractedValues,
+
+    -- * MetricTransformation
+    MetricTransformation (..),
+    newMetricTransformation,
+    metricTransformation_defaultValue,
+    metricTransformation_dimensions,
+    metricTransformation_unit,
+    metricTransformation_metricName,
+    metricTransformation_metricNamespace,
+    metricTransformation_metricValue,
+
+    -- * OutputLogEvent
+    OutputLogEvent (..),
+    newOutputLogEvent,
+    outputLogEvent_ingestionTime,
+    outputLogEvent_message,
+    outputLogEvent_timestamp,
+
+    -- * QueryDefinition
+    QueryDefinition (..),
+    newQueryDefinition,
+    queryDefinition_lastModified,
+    queryDefinition_logGroupNames,
+    queryDefinition_name,
+    queryDefinition_queryDefinitionId,
+    queryDefinition_queryString,
+
+    -- * QueryInfo
+    QueryInfo (..),
+    newQueryInfo,
+    queryInfo_createTime,
+    queryInfo_logGroupName,
+    queryInfo_queryId,
+    queryInfo_queryString,
+    queryInfo_status,
+
+    -- * QueryStatistics
+    QueryStatistics (..),
+    newQueryStatistics,
+    queryStatistics_bytesScanned,
+    queryStatistics_recordsMatched,
+    queryStatistics_recordsScanned,
+
+    -- * RejectedLogEventsInfo
+    RejectedLogEventsInfo (..),
+    newRejectedLogEventsInfo,
+    rejectedLogEventsInfo_expiredLogEventEndIndex,
+    rejectedLogEventsInfo_tooNewLogEventStartIndex,
+    rejectedLogEventsInfo_tooOldLogEventEndIndex,
+
+    -- * ResourcePolicy
+    ResourcePolicy (..),
+    newResourcePolicy,
+    resourcePolicy_lastUpdatedTime,
+    resourcePolicy_policyDocument,
+    resourcePolicy_policyName,
+
+    -- * ResultField
+    ResultField (..),
+    newResultField,
+    resultField_field,
+    resultField_value,
+
+    -- * SearchedLogStream
+    SearchedLogStream (..),
+    newSearchedLogStream,
+    searchedLogStream_logStreamName,
+    searchedLogStream_searchedCompletely,
+
+    -- * SubscriptionFilter
+    SubscriptionFilter (..),
+    newSubscriptionFilter,
+    subscriptionFilter_creationTime,
+    subscriptionFilter_destinationArn,
+    subscriptionFilter_distribution,
+    subscriptionFilter_filterName,
+    subscriptionFilter_filterPattern,
+    subscriptionFilter_logGroupName,
+    subscriptionFilter_roleArn,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types.DataProtectionStatus
+import Amazonka.CloudWatchLogs.Types.Destination
+import Amazonka.CloudWatchLogs.Types.Distribution
+import Amazonka.CloudWatchLogs.Types.ExportTask
+import Amazonka.CloudWatchLogs.Types.ExportTaskExecutionInfo
+import Amazonka.CloudWatchLogs.Types.ExportTaskStatus
+import Amazonka.CloudWatchLogs.Types.ExportTaskStatusCode
+import Amazonka.CloudWatchLogs.Types.FilteredLogEvent
+import Amazonka.CloudWatchLogs.Types.InputLogEvent
+import Amazonka.CloudWatchLogs.Types.LogGroup
+import Amazonka.CloudWatchLogs.Types.LogGroupField
+import Amazonka.CloudWatchLogs.Types.LogStream
+import Amazonka.CloudWatchLogs.Types.MetricFilter
+import Amazonka.CloudWatchLogs.Types.MetricFilterMatchRecord
+import Amazonka.CloudWatchLogs.Types.MetricTransformation
+import Amazonka.CloudWatchLogs.Types.OrderBy
+import Amazonka.CloudWatchLogs.Types.OutputLogEvent
+import Amazonka.CloudWatchLogs.Types.QueryDefinition
+import Amazonka.CloudWatchLogs.Types.QueryInfo
+import Amazonka.CloudWatchLogs.Types.QueryStatistics
+import Amazonka.CloudWatchLogs.Types.QueryStatus
+import Amazonka.CloudWatchLogs.Types.RejectedLogEventsInfo
+import Amazonka.CloudWatchLogs.Types.ResourcePolicy
+import Amazonka.CloudWatchLogs.Types.ResultField
+import Amazonka.CloudWatchLogs.Types.SearchedLogStream
+import Amazonka.CloudWatchLogs.Types.StandardUnit
+import Amazonka.CloudWatchLogs.Types.SubscriptionFilter
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2014-03-28@ of the Amazon CloudWatch Logs SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "CloudWatchLogs",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "logs",
+      Core.signingName = "logs",
+      Core.version = "2014-03-28",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "CloudWatchLogs",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The event was already logged.
+--
+-- @PutLogEvents@ actions are now always accepted and never return
+-- @DataAlreadyAcceptedException@ regardless of whether a given batch of
+-- log events has already been accepted.
+_DataAlreadyAcceptedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DataAlreadyAcceptedException =
+  Core._MatchServiceError
+    defaultService
+    "DataAlreadyAcceptedException"
+
+-- | The operation is not valid on the specified resource.
+_InvalidOperationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidOperationException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidOperationException"
+
+-- | A parameter is specified incorrectly.
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+
+-- | The sequence token is not valid. You can get the correct sequence token
+-- in the @expectedSequenceToken@ field in the
+-- @InvalidSequenceTokenException@ message.
+--
+-- @PutLogEvents@ actions are now always accepted and never return
+-- @InvalidSequenceTokenException@ regardless of receiving an invalid
+-- sequence token.
+_InvalidSequenceTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidSequenceTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidSequenceTokenException"
+
+-- | You have reached the maximum number of resources that can be created.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | The query string is not valid. Details about this error are displayed in
+-- a @QueryCompileError@ object. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_QueryCompileError.html QueryCompileError>.
+--
+-- For more information about valid query syntax, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+_MalformedQueryException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_MalformedQueryException =
+  Core._MatchServiceError
+    defaultService
+    "MalformedQueryException"
+
+-- | Multiple concurrent requests to update the same resource were in
+-- conflict.
+_OperationAbortedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_OperationAbortedException =
+  Core._MatchServiceError
+    defaultService
+    "OperationAbortedException"
+
+-- | The specified resource already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+
+-- | The specified resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | The service cannot complete the request.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+
+-- | A resource can have no more than 50 tags.
+_TooManyTagsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyTagsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyTagsException"
+
+-- | The most likely cause is an Amazon Web Services access key ID or secret
+-- key that\'s not valid.
+_UnrecognizedClientException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnrecognizedClientException =
+  Core._MatchServiceError
+    defaultService
+    "UnrecognizedClientException"
diff --git a/gen/Amazonka/CloudWatchLogs/Types/DataProtectionStatus.hs b/gen/Amazonka/CloudWatchLogs/Types/DataProtectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/DataProtectionStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.DataProtectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.DataProtectionStatus
+  ( DataProtectionStatus
+      ( ..,
+        DataProtectionStatus_ACTIVATED,
+        DataProtectionStatus_ARCHIVED,
+        DataProtectionStatus_DELETED,
+        DataProtectionStatus_DISABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataProtectionStatus = DataProtectionStatus'
+  { fromDataProtectionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DataProtectionStatus_ACTIVATED :: DataProtectionStatus
+pattern DataProtectionStatus_ACTIVATED = DataProtectionStatus' "ACTIVATED"
+
+pattern DataProtectionStatus_ARCHIVED :: DataProtectionStatus
+pattern DataProtectionStatus_ARCHIVED = DataProtectionStatus' "ARCHIVED"
+
+pattern DataProtectionStatus_DELETED :: DataProtectionStatus
+pattern DataProtectionStatus_DELETED = DataProtectionStatus' "DELETED"
+
+pattern DataProtectionStatus_DISABLED :: DataProtectionStatus
+pattern DataProtectionStatus_DISABLED = DataProtectionStatus' "DISABLED"
+
+{-# COMPLETE
+  DataProtectionStatus_ACTIVATED,
+  DataProtectionStatus_ARCHIVED,
+  DataProtectionStatus_DELETED,
+  DataProtectionStatus_DISABLED,
+  DataProtectionStatus'
+  #-}
diff --git a/gen/Amazonka/CloudWatchLogs/Types/Destination.hs b/gen/Amazonka/CloudWatchLogs/Types/Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/Destination.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.Destination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.Destination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a cross-account destination that receives subscription log
+-- events.
+--
+-- /See:/ 'newDestination' smart constructor.
+data Destination = Destination'
+  { -- | An IAM policy document that governs which Amazon Web Services accounts
+    -- can create subscription filters against this destination.
+    accessPolicy :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of this destination.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The creation time of the destination, expressed as the number of
+    -- milliseconds after Jan 1, 1970 00:00:00 UTC.
+    creationTime :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the destination.
+    destinationName :: Prelude.Maybe Prelude.Text,
+    -- | A role for impersonation, used when delivering log events to the target.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the physical target where the log
+    -- events are delivered (for example, a Kinesis stream).
+    targetArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Destination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPolicy', 'destination_accessPolicy' - An IAM policy document that governs which Amazon Web Services accounts
+-- can create subscription filters against this destination.
+--
+-- 'arn', 'destination_arn' - The ARN of this destination.
+--
+-- 'creationTime', 'destination_creationTime' - The creation time of the destination, expressed as the number of
+-- milliseconds after Jan 1, 1970 00:00:00 UTC.
+--
+-- 'destinationName', 'destination_destinationName' - The name of the destination.
+--
+-- 'roleArn', 'destination_roleArn' - A role for impersonation, used when delivering log events to the target.
+--
+-- 'targetArn', 'destination_targetArn' - The Amazon Resource Name (ARN) of the physical target where the log
+-- events are delivered (for example, a Kinesis stream).
+newDestination ::
+  Destination
+newDestination =
+  Destination'
+    { accessPolicy = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      destinationName = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      targetArn = Prelude.Nothing
+    }
+
+-- | An IAM policy document that governs which Amazon Web Services accounts
+-- can create subscription filters against this destination.
+destination_accessPolicy :: Lens.Lens' Destination (Prelude.Maybe Prelude.Text)
+destination_accessPolicy = Lens.lens (\Destination' {accessPolicy} -> accessPolicy) (\s@Destination' {} a -> s {accessPolicy = a} :: Destination)
+
+-- | The ARN of this destination.
+destination_arn :: Lens.Lens' Destination (Prelude.Maybe Prelude.Text)
+destination_arn = Lens.lens (\Destination' {arn} -> arn) (\s@Destination' {} a -> s {arn = a} :: Destination)
+
+-- | The creation time of the destination, expressed as the number of
+-- milliseconds after Jan 1, 1970 00:00:00 UTC.
+destination_creationTime :: Lens.Lens' Destination (Prelude.Maybe Prelude.Natural)
+destination_creationTime = Lens.lens (\Destination' {creationTime} -> creationTime) (\s@Destination' {} a -> s {creationTime = a} :: Destination)
+
+-- | The name of the destination.
+destination_destinationName :: Lens.Lens' Destination (Prelude.Maybe Prelude.Text)
+destination_destinationName = Lens.lens (\Destination' {destinationName} -> destinationName) (\s@Destination' {} a -> s {destinationName = a} :: Destination)
+
+-- | A role for impersonation, used when delivering log events to the target.
+destination_roleArn :: Lens.Lens' Destination (Prelude.Maybe Prelude.Text)
+destination_roleArn = Lens.lens (\Destination' {roleArn} -> roleArn) (\s@Destination' {} a -> s {roleArn = a} :: Destination)
+
+-- | The Amazon Resource Name (ARN) of the physical target where the log
+-- events are delivered (for example, a Kinesis stream).
+destination_targetArn :: Lens.Lens' Destination (Prelude.Maybe Prelude.Text)
+destination_targetArn = Lens.lens (\Destination' {targetArn} -> targetArn) (\s@Destination' {} a -> s {targetArn = a} :: Destination)
+
+instance Data.FromJSON Destination where
+  parseJSON =
+    Data.withObject
+      "Destination"
+      ( \x ->
+          Destination'
+            Prelude.<$> (x Data..:? "accessPolicy")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "destinationName")
+            Prelude.<*> (x Data..:? "roleArn")
+            Prelude.<*> (x Data..:? "targetArn")
+      )
+
+instance Prelude.Hashable Destination where
+  hashWithSalt _salt Destination' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessPolicy
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` targetArn
+
+instance Prelude.NFData Destination where
+  rnf Destination' {..} =
+    Prelude.rnf accessPolicy
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf targetArn
diff --git a/gen/Amazonka/CloudWatchLogs/Types/Distribution.hs b/gen/Amazonka/CloudWatchLogs/Types/Distribution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/Distribution.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.Distribution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.Distribution
+  ( Distribution
+      ( ..,
+        Distribution_ByLogStream,
+        Distribution_Random
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The method used to distribute log data to the destination, which can be
+-- either random or grouped by log stream.
+newtype Distribution = Distribution'
+  { fromDistribution ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Distribution_ByLogStream :: Distribution
+pattern Distribution_ByLogStream = Distribution' "ByLogStream"
+
+pattern Distribution_Random :: Distribution
+pattern Distribution_Random = Distribution' "Random"
+
+{-# COMPLETE
+  Distribution_ByLogStream,
+  Distribution_Random,
+  Distribution'
+  #-}
diff --git a/gen/Amazonka/CloudWatchLogs/Types/ExportTask.hs b/gen/Amazonka/CloudWatchLogs/Types/ExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/ExportTask.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.ExportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.ExportTask where
+
+import Amazonka.CloudWatchLogs.Types.ExportTaskExecutionInfo
+import Amazonka.CloudWatchLogs.Types.ExportTaskStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an export task.
+--
+-- /See:/ 'newExportTask' smart constructor.
+data ExportTask = ExportTask'
+  { -- | The name of the S3 bucket to which the log data was exported.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The prefix that was used as the start of Amazon S3 key for every object
+    -- exported.
+    destinationPrefix :: Prelude.Maybe Prelude.Text,
+    -- | Execution information about the export task.
+    executionInfo :: Prelude.Maybe ExportTaskExecutionInfo,
+    -- | The start time, expressed as the number of milliseconds after
+    -- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp before this time are
+    -- not exported.
+    from :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the log group from which logs data was exported.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the export task.
+    status :: Prelude.Maybe ExportTaskStatus,
+    -- | The ID of the export task.
+    taskId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the export task.
+    taskName :: Prelude.Maybe Prelude.Text,
+    -- | The end time, expressed as the number of milliseconds after
+    -- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp later than this time
+    -- are not exported.
+    to :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'exportTask_destination' - The name of the S3 bucket to which the log data was exported.
+--
+-- 'destinationPrefix', 'exportTask_destinationPrefix' - The prefix that was used as the start of Amazon S3 key for every object
+-- exported.
+--
+-- 'executionInfo', 'exportTask_executionInfo' - Execution information about the export task.
+--
+-- 'from', 'exportTask_from' - The start time, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp before this time are
+-- not exported.
+--
+-- 'logGroupName', 'exportTask_logGroupName' - The name of the log group from which logs data was exported.
+--
+-- 'status', 'exportTask_status' - The status of the export task.
+--
+-- 'taskId', 'exportTask_taskId' - The ID of the export task.
+--
+-- 'taskName', 'exportTask_taskName' - The name of the export task.
+--
+-- 'to', 'exportTask_to' - The end time, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp later than this time
+-- are not exported.
+newExportTask ::
+  ExportTask
+newExportTask =
+  ExportTask'
+    { destination = Prelude.Nothing,
+      destinationPrefix = Prelude.Nothing,
+      executionInfo = Prelude.Nothing,
+      from = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      taskId = Prelude.Nothing,
+      taskName = Prelude.Nothing,
+      to = Prelude.Nothing
+    }
+
+-- | The name of the S3 bucket to which the log data was exported.
+exportTask_destination :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Text)
+exportTask_destination = Lens.lens (\ExportTask' {destination} -> destination) (\s@ExportTask' {} a -> s {destination = a} :: ExportTask)
+
+-- | The prefix that was used as the start of Amazon S3 key for every object
+-- exported.
+exportTask_destinationPrefix :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Text)
+exportTask_destinationPrefix = Lens.lens (\ExportTask' {destinationPrefix} -> destinationPrefix) (\s@ExportTask' {} a -> s {destinationPrefix = a} :: ExportTask)
+
+-- | Execution information about the export task.
+exportTask_executionInfo :: Lens.Lens' ExportTask (Prelude.Maybe ExportTaskExecutionInfo)
+exportTask_executionInfo = Lens.lens (\ExportTask' {executionInfo} -> executionInfo) (\s@ExportTask' {} a -> s {executionInfo = a} :: ExportTask)
+
+-- | The start time, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp before this time are
+-- not exported.
+exportTask_from :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Natural)
+exportTask_from = Lens.lens (\ExportTask' {from} -> from) (\s@ExportTask' {} a -> s {from = a} :: ExportTask)
+
+-- | The name of the log group from which logs data was exported.
+exportTask_logGroupName :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Text)
+exportTask_logGroupName = Lens.lens (\ExportTask' {logGroupName} -> logGroupName) (\s@ExportTask' {} a -> s {logGroupName = a} :: ExportTask)
+
+-- | The status of the export task.
+exportTask_status :: Lens.Lens' ExportTask (Prelude.Maybe ExportTaskStatus)
+exportTask_status = Lens.lens (\ExportTask' {status} -> status) (\s@ExportTask' {} a -> s {status = a} :: ExportTask)
+
+-- | The ID of the export task.
+exportTask_taskId :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Text)
+exportTask_taskId = Lens.lens (\ExportTask' {taskId} -> taskId) (\s@ExportTask' {} a -> s {taskId = a} :: ExportTask)
+
+-- | The name of the export task.
+exportTask_taskName :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Text)
+exportTask_taskName = Lens.lens (\ExportTask' {taskName} -> taskName) (\s@ExportTask' {} a -> s {taskName = a} :: ExportTask)
+
+-- | The end time, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. Events with a timestamp later than this time
+-- are not exported.
+exportTask_to :: Lens.Lens' ExportTask (Prelude.Maybe Prelude.Natural)
+exportTask_to = Lens.lens (\ExportTask' {to} -> to) (\s@ExportTask' {} a -> s {to = a} :: ExportTask)
+
+instance Data.FromJSON ExportTask where
+  parseJSON =
+    Data.withObject
+      "ExportTask"
+      ( \x ->
+          ExportTask'
+            Prelude.<$> (x Data..:? "destination")
+            Prelude.<*> (x Data..:? "destinationPrefix")
+            Prelude.<*> (x Data..:? "executionInfo")
+            Prelude.<*> (x Data..:? "from")
+            Prelude.<*> (x Data..:? "logGroupName")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "taskId")
+            Prelude.<*> (x Data..:? "taskName")
+            Prelude.<*> (x Data..:? "to")
+      )
+
+instance Prelude.Hashable ExportTask where
+  hashWithSalt _salt ExportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` destinationPrefix
+      `Prelude.hashWithSalt` executionInfo
+      `Prelude.hashWithSalt` from
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` taskId
+      `Prelude.hashWithSalt` taskName
+      `Prelude.hashWithSalt` to
+
+instance Prelude.NFData ExportTask where
+  rnf ExportTask' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf destinationPrefix
+      `Prelude.seq` Prelude.rnf executionInfo
+      `Prelude.seq` Prelude.rnf from
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskId
+      `Prelude.seq` Prelude.rnf taskName
+      `Prelude.seq` Prelude.rnf to
diff --git a/gen/Amazonka/CloudWatchLogs/Types/ExportTaskExecutionInfo.hs b/gen/Amazonka/CloudWatchLogs/Types/ExportTaskExecutionInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/ExportTaskExecutionInfo.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.ExportTaskExecutionInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.ExportTaskExecutionInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the status of an export task.
+--
+-- /See:/ 'newExportTaskExecutionInfo' smart constructor.
+data ExportTaskExecutionInfo = ExportTaskExecutionInfo'
+  { -- | The completion time of the export task, expressed as the number of
+    -- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+    completionTime :: Prelude.Maybe Prelude.Natural,
+    -- | The creation time of the export task, expressed as the number of
+    -- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+    creationTime :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTaskExecutionInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'completionTime', 'exportTaskExecutionInfo_completionTime' - The completion time of the export task, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'creationTime', 'exportTaskExecutionInfo_creationTime' - The creation time of the export task, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+newExportTaskExecutionInfo ::
+  ExportTaskExecutionInfo
+newExportTaskExecutionInfo =
+  ExportTaskExecutionInfo'
+    { completionTime =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing
+    }
+
+-- | The completion time of the export task, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+exportTaskExecutionInfo_completionTime :: Lens.Lens' ExportTaskExecutionInfo (Prelude.Maybe Prelude.Natural)
+exportTaskExecutionInfo_completionTime = Lens.lens (\ExportTaskExecutionInfo' {completionTime} -> completionTime) (\s@ExportTaskExecutionInfo' {} a -> s {completionTime = a} :: ExportTaskExecutionInfo)
+
+-- | The creation time of the export task, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+exportTaskExecutionInfo_creationTime :: Lens.Lens' ExportTaskExecutionInfo (Prelude.Maybe Prelude.Natural)
+exportTaskExecutionInfo_creationTime = Lens.lens (\ExportTaskExecutionInfo' {creationTime} -> creationTime) (\s@ExportTaskExecutionInfo' {} a -> s {creationTime = a} :: ExportTaskExecutionInfo)
+
+instance Data.FromJSON ExportTaskExecutionInfo where
+  parseJSON =
+    Data.withObject
+      "ExportTaskExecutionInfo"
+      ( \x ->
+          ExportTaskExecutionInfo'
+            Prelude.<$> (x Data..:? "completionTime")
+            Prelude.<*> (x Data..:? "creationTime")
+      )
+
+instance Prelude.Hashable ExportTaskExecutionInfo where
+  hashWithSalt _salt ExportTaskExecutionInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` completionTime
+      `Prelude.hashWithSalt` creationTime
+
+instance Prelude.NFData ExportTaskExecutionInfo where
+  rnf ExportTaskExecutionInfo' {..} =
+    Prelude.rnf completionTime
+      `Prelude.seq` Prelude.rnf creationTime
diff --git a/gen/Amazonka/CloudWatchLogs/Types/ExportTaskStatus.hs b/gen/Amazonka/CloudWatchLogs/Types/ExportTaskStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/ExportTaskStatus.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.ExportTaskStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.ExportTaskStatus where
+
+import Amazonka.CloudWatchLogs.Types.ExportTaskStatusCode
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the status of an export task.
+--
+-- /See:/ 'newExportTaskStatus' smart constructor.
+data ExportTaskStatus = ExportTaskStatus'
+  { -- | The status code of the export task.
+    code :: Prelude.Maybe ExportTaskStatusCode,
+    -- | The status message related to the status code.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTaskStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'exportTaskStatus_code' - The status code of the export task.
+--
+-- 'message', 'exportTaskStatus_message' - The status message related to the status code.
+newExportTaskStatus ::
+  ExportTaskStatus
+newExportTaskStatus =
+  ExportTaskStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The status code of the export task.
+exportTaskStatus_code :: Lens.Lens' ExportTaskStatus (Prelude.Maybe ExportTaskStatusCode)
+exportTaskStatus_code = Lens.lens (\ExportTaskStatus' {code} -> code) (\s@ExportTaskStatus' {} a -> s {code = a} :: ExportTaskStatus)
+
+-- | The status message related to the status code.
+exportTaskStatus_message :: Lens.Lens' ExportTaskStatus (Prelude.Maybe Prelude.Text)
+exportTaskStatus_message = Lens.lens (\ExportTaskStatus' {message} -> message) (\s@ExportTaskStatus' {} a -> s {message = a} :: ExportTaskStatus)
+
+instance Data.FromJSON ExportTaskStatus where
+  parseJSON =
+    Data.withObject
+      "ExportTaskStatus"
+      ( \x ->
+          ExportTaskStatus'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+      )
+
+instance Prelude.Hashable ExportTaskStatus where
+  hashWithSalt _salt ExportTaskStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ExportTaskStatus where
+  rnf ExportTaskStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/CloudWatchLogs/Types/ExportTaskStatusCode.hs b/gen/Amazonka/CloudWatchLogs/Types/ExportTaskStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/ExportTaskStatusCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.ExportTaskStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.ExportTaskStatusCode
+  ( ExportTaskStatusCode
+      ( ..,
+        ExportTaskStatusCode_CANCELLED,
+        ExportTaskStatusCode_COMPLETED,
+        ExportTaskStatusCode_FAILED,
+        ExportTaskStatusCode_PENDING,
+        ExportTaskStatusCode_PENDING_CANCEL,
+        ExportTaskStatusCode_RUNNING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportTaskStatusCode = ExportTaskStatusCode'
+  { fromExportTaskStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ExportTaskStatusCode_CANCELLED :: ExportTaskStatusCode
+pattern ExportTaskStatusCode_CANCELLED = ExportTaskStatusCode' "CANCELLED"
+
+pattern ExportTaskStatusCode_COMPLETED :: ExportTaskStatusCode
+pattern ExportTaskStatusCode_COMPLETED = ExportTaskStatusCode' "COMPLETED"
+
+pattern ExportTaskStatusCode_FAILED :: ExportTaskStatusCode
+pattern ExportTaskStatusCode_FAILED = ExportTaskStatusCode' "FAILED"
+
+pattern ExportTaskStatusCode_PENDING :: ExportTaskStatusCode
+pattern ExportTaskStatusCode_PENDING = ExportTaskStatusCode' "PENDING"
+
+pattern ExportTaskStatusCode_PENDING_CANCEL :: ExportTaskStatusCode
+pattern ExportTaskStatusCode_PENDING_CANCEL = ExportTaskStatusCode' "PENDING_CANCEL"
+
+pattern ExportTaskStatusCode_RUNNING :: ExportTaskStatusCode
+pattern ExportTaskStatusCode_RUNNING = ExportTaskStatusCode' "RUNNING"
+
+{-# COMPLETE
+  ExportTaskStatusCode_CANCELLED,
+  ExportTaskStatusCode_COMPLETED,
+  ExportTaskStatusCode_FAILED,
+  ExportTaskStatusCode_PENDING,
+  ExportTaskStatusCode_PENDING_CANCEL,
+  ExportTaskStatusCode_RUNNING,
+  ExportTaskStatusCode'
+  #-}
diff --git a/gen/Amazonka/CloudWatchLogs/Types/FilteredLogEvent.hs b/gen/Amazonka/CloudWatchLogs/Types/FilteredLogEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/FilteredLogEvent.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.FilteredLogEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.FilteredLogEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a matched event.
+--
+-- /See:/ 'newFilteredLogEvent' smart constructor.
+data FilteredLogEvent = FilteredLogEvent'
+  { -- | The ID of the event.
+    eventId :: Prelude.Maybe Prelude.Text,
+    -- | The time the event was ingested, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    ingestionTime :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the log stream to which this event belongs.
+    logStreamName :: Prelude.Maybe Prelude.Text,
+    -- | The data contained in the log event.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The time the event occurred, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    timestamp :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilteredLogEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventId', 'filteredLogEvent_eventId' - The ID of the event.
+--
+-- 'ingestionTime', 'filteredLogEvent_ingestionTime' - The time the event was ingested, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'logStreamName', 'filteredLogEvent_logStreamName' - The name of the log stream to which this event belongs.
+--
+-- 'message', 'filteredLogEvent_message' - The data contained in the log event.
+--
+-- 'timestamp', 'filteredLogEvent_timestamp' - The time the event occurred, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+newFilteredLogEvent ::
+  FilteredLogEvent
+newFilteredLogEvent =
+  FilteredLogEvent'
+    { eventId = Prelude.Nothing,
+      ingestionTime = Prelude.Nothing,
+      logStreamName = Prelude.Nothing,
+      message = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | The ID of the event.
+filteredLogEvent_eventId :: Lens.Lens' FilteredLogEvent (Prelude.Maybe Prelude.Text)
+filteredLogEvent_eventId = Lens.lens (\FilteredLogEvent' {eventId} -> eventId) (\s@FilteredLogEvent' {} a -> s {eventId = a} :: FilteredLogEvent)
+
+-- | The time the event was ingested, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+filteredLogEvent_ingestionTime :: Lens.Lens' FilteredLogEvent (Prelude.Maybe Prelude.Natural)
+filteredLogEvent_ingestionTime = Lens.lens (\FilteredLogEvent' {ingestionTime} -> ingestionTime) (\s@FilteredLogEvent' {} a -> s {ingestionTime = a} :: FilteredLogEvent)
+
+-- | The name of the log stream to which this event belongs.
+filteredLogEvent_logStreamName :: Lens.Lens' FilteredLogEvent (Prelude.Maybe Prelude.Text)
+filteredLogEvent_logStreamName = Lens.lens (\FilteredLogEvent' {logStreamName} -> logStreamName) (\s@FilteredLogEvent' {} a -> s {logStreamName = a} :: FilteredLogEvent)
+
+-- | The data contained in the log event.
+filteredLogEvent_message :: Lens.Lens' FilteredLogEvent (Prelude.Maybe Prelude.Text)
+filteredLogEvent_message = Lens.lens (\FilteredLogEvent' {message} -> message) (\s@FilteredLogEvent' {} a -> s {message = a} :: FilteredLogEvent)
+
+-- | The time the event occurred, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+filteredLogEvent_timestamp :: Lens.Lens' FilteredLogEvent (Prelude.Maybe Prelude.Natural)
+filteredLogEvent_timestamp = Lens.lens (\FilteredLogEvent' {timestamp} -> timestamp) (\s@FilteredLogEvent' {} a -> s {timestamp = a} :: FilteredLogEvent)
+
+instance Data.FromJSON FilteredLogEvent where
+  parseJSON =
+    Data.withObject
+      "FilteredLogEvent"
+      ( \x ->
+          FilteredLogEvent'
+            Prelude.<$> (x Data..:? "eventId")
+            Prelude.<*> (x Data..:? "ingestionTime")
+            Prelude.<*> (x Data..:? "logStreamName")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "timestamp")
+      )
+
+instance Prelude.Hashable FilteredLogEvent where
+  hashWithSalt _salt FilteredLogEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` ingestionTime
+      `Prelude.hashWithSalt` logStreamName
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData FilteredLogEvent where
+  rnf FilteredLogEvent' {..} =
+    Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf ingestionTime
+      `Prelude.seq` Prelude.rnf logStreamName
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/CloudWatchLogs/Types/InputLogEvent.hs b/gen/Amazonka/CloudWatchLogs/Types/InputLogEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/InputLogEvent.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.InputLogEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.InputLogEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a log event, which is a record of activity that was recorded
+-- by the application or resource being monitored.
+--
+-- /See:/ 'newInputLogEvent' smart constructor.
+data InputLogEvent = InputLogEvent'
+  { -- | The time the event occurred, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    timestamp :: Prelude.Natural,
+    -- | The raw event message.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputLogEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timestamp', 'inputLogEvent_timestamp' - The time the event occurred, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'message', 'inputLogEvent_message' - The raw event message.
+newInputLogEvent ::
+  -- | 'timestamp'
+  Prelude.Natural ->
+  -- | 'message'
+  Prelude.Text ->
+  InputLogEvent
+newInputLogEvent pTimestamp_ pMessage_ =
+  InputLogEvent'
+    { timestamp = pTimestamp_,
+      message = pMessage_
+    }
+
+-- | The time the event occurred, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+inputLogEvent_timestamp :: Lens.Lens' InputLogEvent Prelude.Natural
+inputLogEvent_timestamp = Lens.lens (\InputLogEvent' {timestamp} -> timestamp) (\s@InputLogEvent' {} a -> s {timestamp = a} :: InputLogEvent)
+
+-- | The raw event message.
+inputLogEvent_message :: Lens.Lens' InputLogEvent Prelude.Text
+inputLogEvent_message = Lens.lens (\InputLogEvent' {message} -> message) (\s@InputLogEvent' {} a -> s {message = a} :: InputLogEvent)
+
+instance Prelude.Hashable InputLogEvent where
+  hashWithSalt _salt InputLogEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData InputLogEvent where
+  rnf InputLogEvent' {..} =
+    Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf message
+
+instance Data.ToJSON InputLogEvent where
+  toJSON InputLogEvent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("timestamp" Data..= timestamp),
+            Prelude.Just ("message" Data..= message)
+          ]
+      )
diff --git a/gen/Amazonka/CloudWatchLogs/Types/LogGroup.hs b/gen/Amazonka/CloudWatchLogs/Types/LogGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/LogGroup.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.LogGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.LogGroup where
+
+import Amazonka.CloudWatchLogs.Types.DataProtectionStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a log group.
+--
+-- /See:/ 'newLogGroup' smart constructor.
+data LogGroup = LogGroup'
+  { -- | The Amazon Resource Name (ARN) of the log group.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The creation time of the log group, expressed as the number of
+    -- milliseconds after Jan 1, 1970 00:00:00 UTC.
+    creationTime :: Prelude.Maybe Prelude.Natural,
+    -- | Displays whether this log group has a protection policy, or whether it
+    -- had one in the past. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDataProtectionPolicy.html PutDataProtectionPolicy>.
+    dataProtectionStatus :: Prelude.Maybe DataProtectionStatus,
+    -- | The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+    -- data.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The number of metric filters.
+    metricFilterCount :: Prelude.Maybe Prelude.Int,
+    retentionInDays :: Prelude.Maybe Prelude.Int,
+    -- | The number of bytes stored.
+    storedBytes :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'logGroup_arn' - The Amazon Resource Name (ARN) of the log group.
+--
+-- 'creationTime', 'logGroup_creationTime' - The creation time of the log group, expressed as the number of
+-- milliseconds after Jan 1, 1970 00:00:00 UTC.
+--
+-- 'dataProtectionStatus', 'logGroup_dataProtectionStatus' - Displays whether this log group has a protection policy, or whether it
+-- had one in the past. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDataProtectionPolicy.html PutDataProtectionPolicy>.
+--
+-- 'kmsKeyId', 'logGroup_kmsKeyId' - The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+-- data.
+--
+-- 'logGroupName', 'logGroup_logGroupName' - The name of the log group.
+--
+-- 'metricFilterCount', 'logGroup_metricFilterCount' - The number of metric filters.
+--
+-- 'retentionInDays', 'logGroup_retentionInDays' - Undocumented member.
+--
+-- 'storedBytes', 'logGroup_storedBytes' - The number of bytes stored.
+newLogGroup ::
+  LogGroup
+newLogGroup =
+  LogGroup'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      dataProtectionStatus = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      metricFilterCount = Prelude.Nothing,
+      retentionInDays = Prelude.Nothing,
+      storedBytes = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the log group.
+logGroup_arn :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Text)
+logGroup_arn = Lens.lens (\LogGroup' {arn} -> arn) (\s@LogGroup' {} a -> s {arn = a} :: LogGroup)
+
+-- | The creation time of the log group, expressed as the number of
+-- milliseconds after Jan 1, 1970 00:00:00 UTC.
+logGroup_creationTime :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Natural)
+logGroup_creationTime = Lens.lens (\LogGroup' {creationTime} -> creationTime) (\s@LogGroup' {} a -> s {creationTime = a} :: LogGroup)
+
+-- | Displays whether this log group has a protection policy, or whether it
+-- had one in the past. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDataProtectionPolicy.html PutDataProtectionPolicy>.
+logGroup_dataProtectionStatus :: Lens.Lens' LogGroup (Prelude.Maybe DataProtectionStatus)
+logGroup_dataProtectionStatus = Lens.lens (\LogGroup' {dataProtectionStatus} -> dataProtectionStatus) (\s@LogGroup' {} a -> s {dataProtectionStatus = a} :: LogGroup)
+
+-- | The Amazon Resource Name (ARN) of the KMS key to use when encrypting log
+-- data.
+logGroup_kmsKeyId :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Text)
+logGroup_kmsKeyId = Lens.lens (\LogGroup' {kmsKeyId} -> kmsKeyId) (\s@LogGroup' {} a -> s {kmsKeyId = a} :: LogGroup)
+
+-- | The name of the log group.
+logGroup_logGroupName :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Text)
+logGroup_logGroupName = Lens.lens (\LogGroup' {logGroupName} -> logGroupName) (\s@LogGroup' {} a -> s {logGroupName = a} :: LogGroup)
+
+-- | The number of metric filters.
+logGroup_metricFilterCount :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Int)
+logGroup_metricFilterCount = Lens.lens (\LogGroup' {metricFilterCount} -> metricFilterCount) (\s@LogGroup' {} a -> s {metricFilterCount = a} :: LogGroup)
+
+-- | Undocumented member.
+logGroup_retentionInDays :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Int)
+logGroup_retentionInDays = Lens.lens (\LogGroup' {retentionInDays} -> retentionInDays) (\s@LogGroup' {} a -> s {retentionInDays = a} :: LogGroup)
+
+-- | The number of bytes stored.
+logGroup_storedBytes :: Lens.Lens' LogGroup (Prelude.Maybe Prelude.Natural)
+logGroup_storedBytes = Lens.lens (\LogGroup' {storedBytes} -> storedBytes) (\s@LogGroup' {} a -> s {storedBytes = a} :: LogGroup)
+
+instance Data.FromJSON LogGroup where
+  parseJSON =
+    Data.withObject
+      "LogGroup"
+      ( \x ->
+          LogGroup'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "dataProtectionStatus")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "logGroupName")
+            Prelude.<*> (x Data..:? "metricFilterCount")
+            Prelude.<*> (x Data..:? "retentionInDays")
+            Prelude.<*> (x Data..:? "storedBytes")
+      )
+
+instance Prelude.Hashable LogGroup where
+  hashWithSalt _salt LogGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` dataProtectionStatus
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` metricFilterCount
+      `Prelude.hashWithSalt` retentionInDays
+      `Prelude.hashWithSalt` storedBytes
+
+instance Prelude.NFData LogGroup where
+  rnf LogGroup' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataProtectionStatus
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf metricFilterCount
+      `Prelude.seq` Prelude.rnf retentionInDays
+      `Prelude.seq` Prelude.rnf storedBytes
diff --git a/gen/Amazonka/CloudWatchLogs/Types/LogGroupField.hs b/gen/Amazonka/CloudWatchLogs/Types/LogGroupField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/LogGroupField.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.LogGroupField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.LogGroupField where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The fields contained in log events found by a @GetLogGroupFields@
+-- operation, along with the percentage of queried log events in which each
+-- field appears.
+--
+-- /See:/ 'newLogGroupField' smart constructor.
+data LogGroupField = LogGroupField'
+  { -- | The name of a log field.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of log events queried that contained the field.
+    percent :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogGroupField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'logGroupField_name' - The name of a log field.
+--
+-- 'percent', 'logGroupField_percent' - The percentage of log events queried that contained the field.
+newLogGroupField ::
+  LogGroupField
+newLogGroupField =
+  LogGroupField'
+    { name = Prelude.Nothing,
+      percent = Prelude.Nothing
+    }
+
+-- | The name of a log field.
+logGroupField_name :: Lens.Lens' LogGroupField (Prelude.Maybe Prelude.Text)
+logGroupField_name = Lens.lens (\LogGroupField' {name} -> name) (\s@LogGroupField' {} a -> s {name = a} :: LogGroupField)
+
+-- | The percentage of log events queried that contained the field.
+logGroupField_percent :: Lens.Lens' LogGroupField (Prelude.Maybe Prelude.Natural)
+logGroupField_percent = Lens.lens (\LogGroupField' {percent} -> percent) (\s@LogGroupField' {} a -> s {percent = a} :: LogGroupField)
+
+instance Data.FromJSON LogGroupField where
+  parseJSON =
+    Data.withObject
+      "LogGroupField"
+      ( \x ->
+          LogGroupField'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "percent")
+      )
+
+instance Prelude.Hashable LogGroupField where
+  hashWithSalt _salt LogGroupField' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` percent
+
+instance Prelude.NFData LogGroupField where
+  rnf LogGroupField' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf percent
diff --git a/gen/Amazonka/CloudWatchLogs/Types/LogStream.hs b/gen/Amazonka/CloudWatchLogs/Types/LogStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/LogStream.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.LogStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.LogStream where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a log stream, which is a sequence of log events from a single
+-- emitter of logs.
+--
+-- /See:/ 'newLogStream' smart constructor.
+data LogStream = LogStream'
+  { -- | The Amazon Resource Name (ARN) of the log stream.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The creation time of the stream, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    creationTime :: Prelude.Maybe Prelude.Natural,
+    -- | The time of the first event, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    firstEventTimestamp :: Prelude.Maybe Prelude.Natural,
+    -- | The time of the most recent log event in the log stream in CloudWatch
+    -- Logs. This number is expressed as the number of milliseconds after
+    -- @Jan 1, 1970 00:00:00 UTC@. The @lastEventTime@ value updates on an
+    -- eventual consistency basis. It typically updates in less than an hour
+    -- from ingestion, but in rare situations might take longer.
+    lastEventTimestamp :: Prelude.Maybe Prelude.Natural,
+    -- | The ingestion time, expressed as the number of milliseconds after
+    -- @Jan 1, 1970 00:00:00 UTC@ The @lastIngestionTime@ value updates on an
+    -- eventual consistency basis. It typically updates in less than an hour
+    -- after ingestion, but in rare situations might take longer.
+    lastIngestionTime :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the log stream.
+    logStreamName :: Prelude.Maybe Prelude.Text,
+    -- | The number of bytes stored.
+    --
+    -- __Important:__ As of June 17, 2019, this parameter is no longer
+    -- supported for log streams, and is always reported as zero. This change
+    -- applies only to log streams. The @storedBytes@ parameter for log groups
+    -- is not affected.
+    storedBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The sequence token.
+    --
+    -- The sequence token is now ignored in @PutLogEvents@ actions.
+    -- @PutLogEvents@ actions are always accepted regardless of receiving an
+    -- invalid sequence token. You don\'t need to obtain @uploadSequenceToken@
+    -- to use a @PutLogEvents@ action.
+    uploadSequenceToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'logStream_arn' - The Amazon Resource Name (ARN) of the log stream.
+--
+-- 'creationTime', 'logStream_creationTime' - The creation time of the stream, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'firstEventTimestamp', 'logStream_firstEventTimestamp' - The time of the first event, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'lastEventTimestamp', 'logStream_lastEventTimestamp' - The time of the most recent log event in the log stream in CloudWatch
+-- Logs. This number is expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. The @lastEventTime@ value updates on an
+-- eventual consistency basis. It typically updates in less than an hour
+-- from ingestion, but in rare situations might take longer.
+--
+-- 'lastIngestionTime', 'logStream_lastIngestionTime' - The ingestion time, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@ The @lastIngestionTime@ value updates on an
+-- eventual consistency basis. It typically updates in less than an hour
+-- after ingestion, but in rare situations might take longer.
+--
+-- 'logStreamName', 'logStream_logStreamName' - The name of the log stream.
+--
+-- 'storedBytes', 'logStream_storedBytes' - The number of bytes stored.
+--
+-- __Important:__ As of June 17, 2019, this parameter is no longer
+-- supported for log streams, and is always reported as zero. This change
+-- applies only to log streams. The @storedBytes@ parameter for log groups
+-- is not affected.
+--
+-- 'uploadSequenceToken', 'logStream_uploadSequenceToken' - The sequence token.
+--
+-- The sequence token is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are always accepted regardless of receiving an
+-- invalid sequence token. You don\'t need to obtain @uploadSequenceToken@
+-- to use a @PutLogEvents@ action.
+newLogStream ::
+  LogStream
+newLogStream =
+  LogStream'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      firstEventTimestamp = Prelude.Nothing,
+      lastEventTimestamp = Prelude.Nothing,
+      lastIngestionTime = Prelude.Nothing,
+      logStreamName = Prelude.Nothing,
+      storedBytes = Prelude.Nothing,
+      uploadSequenceToken = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the log stream.
+logStream_arn :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Text)
+logStream_arn = Lens.lens (\LogStream' {arn} -> arn) (\s@LogStream' {} a -> s {arn = a} :: LogStream)
+
+-- | The creation time of the stream, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+logStream_creationTime :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Natural)
+logStream_creationTime = Lens.lens (\LogStream' {creationTime} -> creationTime) (\s@LogStream' {} a -> s {creationTime = a} :: LogStream)
+
+-- | The time of the first event, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+logStream_firstEventTimestamp :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Natural)
+logStream_firstEventTimestamp = Lens.lens (\LogStream' {firstEventTimestamp} -> firstEventTimestamp) (\s@LogStream' {} a -> s {firstEventTimestamp = a} :: LogStream)
+
+-- | The time of the most recent log event in the log stream in CloudWatch
+-- Logs. This number is expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@. The @lastEventTime@ value updates on an
+-- eventual consistency basis. It typically updates in less than an hour
+-- from ingestion, but in rare situations might take longer.
+logStream_lastEventTimestamp :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Natural)
+logStream_lastEventTimestamp = Lens.lens (\LogStream' {lastEventTimestamp} -> lastEventTimestamp) (\s@LogStream' {} a -> s {lastEventTimestamp = a} :: LogStream)
+
+-- | The ingestion time, expressed as the number of milliseconds after
+-- @Jan 1, 1970 00:00:00 UTC@ The @lastIngestionTime@ value updates on an
+-- eventual consistency basis. It typically updates in less than an hour
+-- after ingestion, but in rare situations might take longer.
+logStream_lastIngestionTime :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Natural)
+logStream_lastIngestionTime = Lens.lens (\LogStream' {lastIngestionTime} -> lastIngestionTime) (\s@LogStream' {} a -> s {lastIngestionTime = a} :: LogStream)
+
+-- | The name of the log stream.
+logStream_logStreamName :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Text)
+logStream_logStreamName = Lens.lens (\LogStream' {logStreamName} -> logStreamName) (\s@LogStream' {} a -> s {logStreamName = a} :: LogStream)
+
+-- | The number of bytes stored.
+--
+-- __Important:__ As of June 17, 2019, this parameter is no longer
+-- supported for log streams, and is always reported as zero. This change
+-- applies only to log streams. The @storedBytes@ parameter for log groups
+-- is not affected.
+logStream_storedBytes :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Natural)
+logStream_storedBytes = Lens.lens (\LogStream' {storedBytes} -> storedBytes) (\s@LogStream' {} a -> s {storedBytes = a} :: LogStream)
+
+-- | The sequence token.
+--
+-- The sequence token is now ignored in @PutLogEvents@ actions.
+-- @PutLogEvents@ actions are always accepted regardless of receiving an
+-- invalid sequence token. You don\'t need to obtain @uploadSequenceToken@
+-- to use a @PutLogEvents@ action.
+logStream_uploadSequenceToken :: Lens.Lens' LogStream (Prelude.Maybe Prelude.Text)
+logStream_uploadSequenceToken = Lens.lens (\LogStream' {uploadSequenceToken} -> uploadSequenceToken) (\s@LogStream' {} a -> s {uploadSequenceToken = a} :: LogStream)
+
+instance Data.FromJSON LogStream where
+  parseJSON =
+    Data.withObject
+      "LogStream"
+      ( \x ->
+          LogStream'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "firstEventTimestamp")
+            Prelude.<*> (x Data..:? "lastEventTimestamp")
+            Prelude.<*> (x Data..:? "lastIngestionTime")
+            Prelude.<*> (x Data..:? "logStreamName")
+            Prelude.<*> (x Data..:? "storedBytes")
+            Prelude.<*> (x Data..:? "uploadSequenceToken")
+      )
+
+instance Prelude.Hashable LogStream where
+  hashWithSalt _salt LogStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` firstEventTimestamp
+      `Prelude.hashWithSalt` lastEventTimestamp
+      `Prelude.hashWithSalt` lastIngestionTime
+      `Prelude.hashWithSalt` logStreamName
+      `Prelude.hashWithSalt` storedBytes
+      `Prelude.hashWithSalt` uploadSequenceToken
+
+instance Prelude.NFData LogStream where
+  rnf LogStream' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf firstEventTimestamp
+      `Prelude.seq` Prelude.rnf lastEventTimestamp
+      `Prelude.seq` Prelude.rnf lastIngestionTime
+      `Prelude.seq` Prelude.rnf logStreamName
+      `Prelude.seq` Prelude.rnf storedBytes
+      `Prelude.seq` Prelude.rnf uploadSequenceToken
diff --git a/gen/Amazonka/CloudWatchLogs/Types/MetricFilter.hs b/gen/Amazonka/CloudWatchLogs/Types/MetricFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/MetricFilter.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.MetricFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.MetricFilter where
+
+import Amazonka.CloudWatchLogs.Types.MetricTransformation
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Metric filters express how CloudWatch Logs would extract metric
+-- observations from ingested log events and transform them into metric
+-- data in a CloudWatch metric.
+--
+-- /See:/ 'newMetricFilter' smart constructor.
+data MetricFilter = MetricFilter'
+  { -- | The creation time of the metric filter, expressed as the number of
+    -- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+    creationTime :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the metric filter.
+    filterName :: Prelude.Maybe Prelude.Text,
+    filterPattern :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The metric transformations.
+    metricTransformations :: Prelude.Maybe (Prelude.NonEmpty MetricTransformation)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'metricFilter_creationTime' - The creation time of the metric filter, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'filterName', 'metricFilter_filterName' - The name of the metric filter.
+--
+-- 'filterPattern', 'metricFilter_filterPattern' - Undocumented member.
+--
+-- 'logGroupName', 'metricFilter_logGroupName' - The name of the log group.
+--
+-- 'metricTransformations', 'metricFilter_metricTransformations' - The metric transformations.
+newMetricFilter ::
+  MetricFilter
+newMetricFilter =
+  MetricFilter'
+    { creationTime = Prelude.Nothing,
+      filterName = Prelude.Nothing,
+      filterPattern = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      metricTransformations = Prelude.Nothing
+    }
+
+-- | The creation time of the metric filter, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+metricFilter_creationTime :: Lens.Lens' MetricFilter (Prelude.Maybe Prelude.Natural)
+metricFilter_creationTime = Lens.lens (\MetricFilter' {creationTime} -> creationTime) (\s@MetricFilter' {} a -> s {creationTime = a} :: MetricFilter)
+
+-- | The name of the metric filter.
+metricFilter_filterName :: Lens.Lens' MetricFilter (Prelude.Maybe Prelude.Text)
+metricFilter_filterName = Lens.lens (\MetricFilter' {filterName} -> filterName) (\s@MetricFilter' {} a -> s {filterName = a} :: MetricFilter)
+
+-- | Undocumented member.
+metricFilter_filterPattern :: Lens.Lens' MetricFilter (Prelude.Maybe Prelude.Text)
+metricFilter_filterPattern = Lens.lens (\MetricFilter' {filterPattern} -> filterPattern) (\s@MetricFilter' {} a -> s {filterPattern = a} :: MetricFilter)
+
+-- | The name of the log group.
+metricFilter_logGroupName :: Lens.Lens' MetricFilter (Prelude.Maybe Prelude.Text)
+metricFilter_logGroupName = Lens.lens (\MetricFilter' {logGroupName} -> logGroupName) (\s@MetricFilter' {} a -> s {logGroupName = a} :: MetricFilter)
+
+-- | The metric transformations.
+metricFilter_metricTransformations :: Lens.Lens' MetricFilter (Prelude.Maybe (Prelude.NonEmpty MetricTransformation))
+metricFilter_metricTransformations = Lens.lens (\MetricFilter' {metricTransformations} -> metricTransformations) (\s@MetricFilter' {} a -> s {metricTransformations = a} :: MetricFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON MetricFilter where
+  parseJSON =
+    Data.withObject
+      "MetricFilter"
+      ( \x ->
+          MetricFilter'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "filterName")
+            Prelude.<*> (x Data..:? "filterPattern")
+            Prelude.<*> (x Data..:? "logGroupName")
+            Prelude.<*> (x Data..:? "metricTransformations")
+      )
+
+instance Prelude.Hashable MetricFilter where
+  hashWithSalt _salt MetricFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` filterName
+      `Prelude.hashWithSalt` filterPattern
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` metricTransformations
+
+instance Prelude.NFData MetricFilter where
+  rnf MetricFilter' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf filterName
+      `Prelude.seq` Prelude.rnf filterPattern
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf metricTransformations
diff --git a/gen/Amazonka/CloudWatchLogs/Types/MetricFilterMatchRecord.hs b/gen/Amazonka/CloudWatchLogs/Types/MetricFilterMatchRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/MetricFilterMatchRecord.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.MetricFilterMatchRecord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.MetricFilterMatchRecord where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a matched event.
+--
+-- /See:/ 'newMetricFilterMatchRecord' smart constructor.
+data MetricFilterMatchRecord = MetricFilterMatchRecord'
+  { -- | The raw event data.
+    eventMessage :: Prelude.Maybe Prelude.Text,
+    -- | The event number.
+    eventNumber :: Prelude.Maybe Prelude.Integer,
+    -- | The values extracted from the event data by the filter.
+    extractedValues :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricFilterMatchRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventMessage', 'metricFilterMatchRecord_eventMessage' - The raw event data.
+--
+-- 'eventNumber', 'metricFilterMatchRecord_eventNumber' - The event number.
+--
+-- 'extractedValues', 'metricFilterMatchRecord_extractedValues' - The values extracted from the event data by the filter.
+newMetricFilterMatchRecord ::
+  MetricFilterMatchRecord
+newMetricFilterMatchRecord =
+  MetricFilterMatchRecord'
+    { eventMessage =
+        Prelude.Nothing,
+      eventNumber = Prelude.Nothing,
+      extractedValues = Prelude.Nothing
+    }
+
+-- | The raw event data.
+metricFilterMatchRecord_eventMessage :: Lens.Lens' MetricFilterMatchRecord (Prelude.Maybe Prelude.Text)
+metricFilterMatchRecord_eventMessage = Lens.lens (\MetricFilterMatchRecord' {eventMessage} -> eventMessage) (\s@MetricFilterMatchRecord' {} a -> s {eventMessage = a} :: MetricFilterMatchRecord)
+
+-- | The event number.
+metricFilterMatchRecord_eventNumber :: Lens.Lens' MetricFilterMatchRecord (Prelude.Maybe Prelude.Integer)
+metricFilterMatchRecord_eventNumber = Lens.lens (\MetricFilterMatchRecord' {eventNumber} -> eventNumber) (\s@MetricFilterMatchRecord' {} a -> s {eventNumber = a} :: MetricFilterMatchRecord)
+
+-- | The values extracted from the event data by the filter.
+metricFilterMatchRecord_extractedValues :: Lens.Lens' MetricFilterMatchRecord (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+metricFilterMatchRecord_extractedValues = Lens.lens (\MetricFilterMatchRecord' {extractedValues} -> extractedValues) (\s@MetricFilterMatchRecord' {} a -> s {extractedValues = a} :: MetricFilterMatchRecord) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON MetricFilterMatchRecord where
+  parseJSON =
+    Data.withObject
+      "MetricFilterMatchRecord"
+      ( \x ->
+          MetricFilterMatchRecord'
+            Prelude.<$> (x Data..:? "eventMessage")
+            Prelude.<*> (x Data..:? "eventNumber")
+            Prelude.<*> ( x
+                            Data..:? "extractedValues"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable MetricFilterMatchRecord where
+  hashWithSalt _salt MetricFilterMatchRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventMessage
+      `Prelude.hashWithSalt` eventNumber
+      `Prelude.hashWithSalt` extractedValues
+
+instance Prelude.NFData MetricFilterMatchRecord where
+  rnf MetricFilterMatchRecord' {..} =
+    Prelude.rnf eventMessage
+      `Prelude.seq` Prelude.rnf eventNumber
+      `Prelude.seq` Prelude.rnf extractedValues
diff --git a/gen/Amazonka/CloudWatchLogs/Types/MetricTransformation.hs b/gen/Amazonka/CloudWatchLogs/Types/MetricTransformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/MetricTransformation.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.MetricTransformation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.MetricTransformation where
+
+import Amazonka.CloudWatchLogs.Types.StandardUnit
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates how to transform ingested log events to metric data in a
+-- CloudWatch metric.
+--
+-- /See:/ 'newMetricTransformation' smart constructor.
+data MetricTransformation = MetricTransformation'
+  { -- | (Optional) The value to emit when a filter pattern does not match a log
+    -- event. This value can be null.
+    defaultValue :: Prelude.Maybe Prelude.Double,
+    -- | The fields to use as dimensions for the metric. One metric filter can
+    -- include as many as three dimensions.
+    --
+    -- Metrics extracted from log events are charged as custom metrics. To
+    -- prevent unexpected high charges, do not specify high-cardinality fields
+    -- such as @IPAddress@ or @requestID@ as dimensions. Each different value
+    -- found for a dimension is treated as a separate metric and accrues
+    -- charges as a separate custom metric.
+    --
+    -- CloudWatch Logs disables a metric filter if it generates 1000 different
+    -- name\/value pairs for your specified dimensions within a certain amount
+    -- of time. This helps to prevent accidental high charges.
+    --
+    -- You can also set up a billing alarm to alert you if your charges are
+    -- higher than expected. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html Creating a Billing Alarm to Monitor Your Estimated Amazon Web Services Charges>.
+    dimensions :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unit to assign to the metric. If you omit this, the unit is set as
+    -- @None@.
+    unit :: Prelude.Maybe StandardUnit,
+    -- | The name of the CloudWatch metric.
+    metricName :: Prelude.Text,
+    -- | A custom namespace to contain your metric in CloudWatch. Use namespaces
+    -- to group together metrics that are similar. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace Namespaces>.
+    metricNamespace :: Prelude.Text,
+    -- | The value to publish to the CloudWatch metric when a filter pattern
+    -- matches a log event.
+    metricValue :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricTransformation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultValue', 'metricTransformation_defaultValue' - (Optional) The value to emit when a filter pattern does not match a log
+-- event. This value can be null.
+--
+-- 'dimensions', 'metricTransformation_dimensions' - The fields to use as dimensions for the metric. One metric filter can
+-- include as many as three dimensions.
+--
+-- Metrics extracted from log events are charged as custom metrics. To
+-- prevent unexpected high charges, do not specify high-cardinality fields
+-- such as @IPAddress@ or @requestID@ as dimensions. Each different value
+-- found for a dimension is treated as a separate metric and accrues
+-- charges as a separate custom metric.
+--
+-- CloudWatch Logs disables a metric filter if it generates 1000 different
+-- name\/value pairs for your specified dimensions within a certain amount
+-- of time. This helps to prevent accidental high charges.
+--
+-- You can also set up a billing alarm to alert you if your charges are
+-- higher than expected. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html Creating a Billing Alarm to Monitor Your Estimated Amazon Web Services Charges>.
+--
+-- 'unit', 'metricTransformation_unit' - The unit to assign to the metric. If you omit this, the unit is set as
+-- @None@.
+--
+-- 'metricName', 'metricTransformation_metricName' - The name of the CloudWatch metric.
+--
+-- 'metricNamespace', 'metricTransformation_metricNamespace' - A custom namespace to contain your metric in CloudWatch. Use namespaces
+-- to group together metrics that are similar. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace Namespaces>.
+--
+-- 'metricValue', 'metricTransformation_metricValue' - The value to publish to the CloudWatch metric when a filter pattern
+-- matches a log event.
+newMetricTransformation ::
+  -- | 'metricName'
+  Prelude.Text ->
+  -- | 'metricNamespace'
+  Prelude.Text ->
+  -- | 'metricValue'
+  Prelude.Text ->
+  MetricTransformation
+newMetricTransformation
+  pMetricName_
+  pMetricNamespace_
+  pMetricValue_ =
+    MetricTransformation'
+      { defaultValue =
+          Prelude.Nothing,
+        dimensions = Prelude.Nothing,
+        unit = Prelude.Nothing,
+        metricName = pMetricName_,
+        metricNamespace = pMetricNamespace_,
+        metricValue = pMetricValue_
+      }
+
+-- | (Optional) The value to emit when a filter pattern does not match a log
+-- event. This value can be null.
+metricTransformation_defaultValue :: Lens.Lens' MetricTransformation (Prelude.Maybe Prelude.Double)
+metricTransformation_defaultValue = Lens.lens (\MetricTransformation' {defaultValue} -> defaultValue) (\s@MetricTransformation' {} a -> s {defaultValue = a} :: MetricTransformation)
+
+-- | The fields to use as dimensions for the metric. One metric filter can
+-- include as many as three dimensions.
+--
+-- Metrics extracted from log events are charged as custom metrics. To
+-- prevent unexpected high charges, do not specify high-cardinality fields
+-- such as @IPAddress@ or @requestID@ as dimensions. Each different value
+-- found for a dimension is treated as a separate metric and accrues
+-- charges as a separate custom metric.
+--
+-- CloudWatch Logs disables a metric filter if it generates 1000 different
+-- name\/value pairs for your specified dimensions within a certain amount
+-- of time. This helps to prevent accidental high charges.
+--
+-- You can also set up a billing alarm to alert you if your charges are
+-- higher than expected. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html Creating a Billing Alarm to Monitor Your Estimated Amazon Web Services Charges>.
+metricTransformation_dimensions :: Lens.Lens' MetricTransformation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+metricTransformation_dimensions = Lens.lens (\MetricTransformation' {dimensions} -> dimensions) (\s@MetricTransformation' {} a -> s {dimensions = a} :: MetricTransformation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unit to assign to the metric. If you omit this, the unit is set as
+-- @None@.
+metricTransformation_unit :: Lens.Lens' MetricTransformation (Prelude.Maybe StandardUnit)
+metricTransformation_unit = Lens.lens (\MetricTransformation' {unit} -> unit) (\s@MetricTransformation' {} a -> s {unit = a} :: MetricTransformation)
+
+-- | The name of the CloudWatch metric.
+metricTransformation_metricName :: Lens.Lens' MetricTransformation Prelude.Text
+metricTransformation_metricName = Lens.lens (\MetricTransformation' {metricName} -> metricName) (\s@MetricTransformation' {} a -> s {metricName = a} :: MetricTransformation)
+
+-- | A custom namespace to contain your metric in CloudWatch. Use namespaces
+-- to group together metrics that are similar. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace Namespaces>.
+metricTransformation_metricNamespace :: Lens.Lens' MetricTransformation Prelude.Text
+metricTransformation_metricNamespace = Lens.lens (\MetricTransformation' {metricNamespace} -> metricNamespace) (\s@MetricTransformation' {} a -> s {metricNamespace = a} :: MetricTransformation)
+
+-- | The value to publish to the CloudWatch metric when a filter pattern
+-- matches a log event.
+metricTransformation_metricValue :: Lens.Lens' MetricTransformation Prelude.Text
+metricTransformation_metricValue = Lens.lens (\MetricTransformation' {metricValue} -> metricValue) (\s@MetricTransformation' {} a -> s {metricValue = a} :: MetricTransformation)
+
+instance Data.FromJSON MetricTransformation where
+  parseJSON =
+    Data.withObject
+      "MetricTransformation"
+      ( \x ->
+          MetricTransformation'
+            Prelude.<$> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "dimensions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "unit")
+            Prelude.<*> (x Data..: "metricName")
+            Prelude.<*> (x Data..: "metricNamespace")
+            Prelude.<*> (x Data..: "metricValue")
+      )
+
+instance Prelude.Hashable MetricTransformation where
+  hashWithSalt _salt MetricTransformation' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` dimensions
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` metricNamespace
+      `Prelude.hashWithSalt` metricValue
+
+instance Prelude.NFData MetricTransformation where
+  rnf MetricTransformation' {..} =
+    Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf dimensions
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf metricNamespace
+      `Prelude.seq` Prelude.rnf metricValue
+
+instance Data.ToJSON MetricTransformation where
+  toJSON MetricTransformation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("dimensions" Data..=) Prelude.<$> dimensions,
+            ("unit" Data..=) Prelude.<$> unit,
+            Prelude.Just ("metricName" Data..= metricName),
+            Prelude.Just
+              ("metricNamespace" Data..= metricNamespace),
+            Prelude.Just ("metricValue" Data..= metricValue)
+          ]
+      )
diff --git a/gen/Amazonka/CloudWatchLogs/Types/OrderBy.hs b/gen/Amazonka/CloudWatchLogs/Types/OrderBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/OrderBy.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.OrderBy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.OrderBy
+  ( OrderBy
+      ( ..,
+        OrderBy_LastEventTime,
+        OrderBy_LogStreamName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OrderBy = OrderBy' {fromOrderBy :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OrderBy_LastEventTime :: OrderBy
+pattern OrderBy_LastEventTime = OrderBy' "LastEventTime"
+
+pattern OrderBy_LogStreamName :: OrderBy
+pattern OrderBy_LogStreamName = OrderBy' "LogStreamName"
+
+{-# COMPLETE
+  OrderBy_LastEventTime,
+  OrderBy_LogStreamName,
+  OrderBy'
+  #-}
diff --git a/gen/Amazonka/CloudWatchLogs/Types/OutputLogEvent.hs b/gen/Amazonka/CloudWatchLogs/Types/OutputLogEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/OutputLogEvent.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.OutputLogEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.OutputLogEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a log event.
+--
+-- /See:/ 'newOutputLogEvent' smart constructor.
+data OutputLogEvent = OutputLogEvent'
+  { -- | The time the event was ingested, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    ingestionTime :: Prelude.Maybe Prelude.Natural,
+    -- | The data contained in the log event.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The time the event occurred, expressed as the number of milliseconds
+    -- after @Jan 1, 1970 00:00:00 UTC@.
+    timestamp :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutputLogEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ingestionTime', 'outputLogEvent_ingestionTime' - The time the event was ingested, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'message', 'outputLogEvent_message' - The data contained in the log event.
+--
+-- 'timestamp', 'outputLogEvent_timestamp' - The time the event occurred, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+newOutputLogEvent ::
+  OutputLogEvent
+newOutputLogEvent =
+  OutputLogEvent'
+    { ingestionTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | The time the event was ingested, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+outputLogEvent_ingestionTime :: Lens.Lens' OutputLogEvent (Prelude.Maybe Prelude.Natural)
+outputLogEvent_ingestionTime = Lens.lens (\OutputLogEvent' {ingestionTime} -> ingestionTime) (\s@OutputLogEvent' {} a -> s {ingestionTime = a} :: OutputLogEvent)
+
+-- | The data contained in the log event.
+outputLogEvent_message :: Lens.Lens' OutputLogEvent (Prelude.Maybe Prelude.Text)
+outputLogEvent_message = Lens.lens (\OutputLogEvent' {message} -> message) (\s@OutputLogEvent' {} a -> s {message = a} :: OutputLogEvent)
+
+-- | The time the event occurred, expressed as the number of milliseconds
+-- after @Jan 1, 1970 00:00:00 UTC@.
+outputLogEvent_timestamp :: Lens.Lens' OutputLogEvent (Prelude.Maybe Prelude.Natural)
+outputLogEvent_timestamp = Lens.lens (\OutputLogEvent' {timestamp} -> timestamp) (\s@OutputLogEvent' {} a -> s {timestamp = a} :: OutputLogEvent)
+
+instance Data.FromJSON OutputLogEvent where
+  parseJSON =
+    Data.withObject
+      "OutputLogEvent"
+      ( \x ->
+          OutputLogEvent'
+            Prelude.<$> (x Data..:? "ingestionTime")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "timestamp")
+      )
+
+instance Prelude.Hashable OutputLogEvent where
+  hashWithSalt _salt OutputLogEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` ingestionTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData OutputLogEvent where
+  rnf OutputLogEvent' {..} =
+    Prelude.rnf ingestionTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/CloudWatchLogs/Types/QueryDefinition.hs b/gen/Amazonka/CloudWatchLogs/Types/QueryDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/QueryDefinition.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.QueryDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.QueryDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | This structure contains details about a saved CloudWatch Logs Insights
+-- query definition.
+--
+-- /See:/ 'newQueryDefinition' smart constructor.
+data QueryDefinition = QueryDefinition'
+  { -- | The date that the query definition was most recently modified.
+    lastModified :: Prelude.Maybe Prelude.Natural,
+    -- | If this query definition contains a list of log groups that it is
+    -- limited to, that list appears here.
+    logGroupNames :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the query definition.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the query definition.
+    queryDefinitionId :: Prelude.Maybe Prelude.Text,
+    -- | The query string to use for this definition. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+    queryString :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastModified', 'queryDefinition_lastModified' - The date that the query definition was most recently modified.
+--
+-- 'logGroupNames', 'queryDefinition_logGroupNames' - If this query definition contains a list of log groups that it is
+-- limited to, that list appears here.
+--
+-- 'name', 'queryDefinition_name' - The name of the query definition.
+--
+-- 'queryDefinitionId', 'queryDefinition_queryDefinitionId' - The unique ID of the query definition.
+--
+-- 'queryString', 'queryDefinition_queryString' - The query string to use for this definition. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+newQueryDefinition ::
+  QueryDefinition
+newQueryDefinition =
+  QueryDefinition'
+    { lastModified = Prelude.Nothing,
+      logGroupNames = Prelude.Nothing,
+      name = Prelude.Nothing,
+      queryDefinitionId = Prelude.Nothing,
+      queryString = Prelude.Nothing
+    }
+
+-- | The date that the query definition was most recently modified.
+queryDefinition_lastModified :: Lens.Lens' QueryDefinition (Prelude.Maybe Prelude.Natural)
+queryDefinition_lastModified = Lens.lens (\QueryDefinition' {lastModified} -> lastModified) (\s@QueryDefinition' {} a -> s {lastModified = a} :: QueryDefinition)
+
+-- | If this query definition contains a list of log groups that it is
+-- limited to, that list appears here.
+queryDefinition_logGroupNames :: Lens.Lens' QueryDefinition (Prelude.Maybe [Prelude.Text])
+queryDefinition_logGroupNames = Lens.lens (\QueryDefinition' {logGroupNames} -> logGroupNames) (\s@QueryDefinition' {} a -> s {logGroupNames = a} :: QueryDefinition) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the query definition.
+queryDefinition_name :: Lens.Lens' QueryDefinition (Prelude.Maybe Prelude.Text)
+queryDefinition_name = Lens.lens (\QueryDefinition' {name} -> name) (\s@QueryDefinition' {} a -> s {name = a} :: QueryDefinition)
+
+-- | The unique ID of the query definition.
+queryDefinition_queryDefinitionId :: Lens.Lens' QueryDefinition (Prelude.Maybe Prelude.Text)
+queryDefinition_queryDefinitionId = Lens.lens (\QueryDefinition' {queryDefinitionId} -> queryDefinitionId) (\s@QueryDefinition' {} a -> s {queryDefinitionId = a} :: QueryDefinition)
+
+-- | The query string to use for this definition. For more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html CloudWatch Logs Insights Query Syntax>.
+queryDefinition_queryString :: Lens.Lens' QueryDefinition (Prelude.Maybe Prelude.Text)
+queryDefinition_queryString = Lens.lens (\QueryDefinition' {queryString} -> queryString) (\s@QueryDefinition' {} a -> s {queryString = a} :: QueryDefinition)
+
+instance Data.FromJSON QueryDefinition where
+  parseJSON =
+    Data.withObject
+      "QueryDefinition"
+      ( \x ->
+          QueryDefinition'
+            Prelude.<$> (x Data..:? "lastModified")
+            Prelude.<*> (x Data..:? "logGroupNames" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "queryDefinitionId")
+            Prelude.<*> (x Data..:? "queryString")
+      )
+
+instance Prelude.Hashable QueryDefinition where
+  hashWithSalt _salt QueryDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastModified
+      `Prelude.hashWithSalt` logGroupNames
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` queryDefinitionId
+      `Prelude.hashWithSalt` queryString
+
+instance Prelude.NFData QueryDefinition where
+  rnf QueryDefinition' {..} =
+    Prelude.rnf lastModified
+      `Prelude.seq` Prelude.rnf logGroupNames
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf queryDefinitionId
+      `Prelude.seq` Prelude.rnf queryString
diff --git a/gen/Amazonka/CloudWatchLogs/Types/QueryInfo.hs b/gen/Amazonka/CloudWatchLogs/Types/QueryInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/QueryInfo.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.QueryInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.QueryInfo where
+
+import Amazonka.CloudWatchLogs.Types.QueryStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about one CloudWatch Logs Insights query that matches the
+-- request in a @DescribeQueries@ operation.
+--
+-- /See:/ 'newQueryInfo' smart constructor.
+data QueryInfo = QueryInfo'
+  { -- | The date and time that this query was created.
+    createTime :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the log group scanned by this query.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID number of this query.
+    queryId :: Prelude.Maybe Prelude.Text,
+    -- | The query string used in this query.
+    queryString :: Prelude.Maybe Prelude.Text,
+    -- | The status of this query. Possible values are @Cancelled@, @Complete@,
+    -- @Failed@, @Running@, @Scheduled@, and @Unknown@.
+    status :: Prelude.Maybe QueryStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'queryInfo_createTime' - The date and time that this query was created.
+--
+-- 'logGroupName', 'queryInfo_logGroupName' - The name of the log group scanned by this query.
+--
+-- 'queryId', 'queryInfo_queryId' - The unique ID number of this query.
+--
+-- 'queryString', 'queryInfo_queryString' - The query string used in this query.
+--
+-- 'status', 'queryInfo_status' - The status of this query. Possible values are @Cancelled@, @Complete@,
+-- @Failed@, @Running@, @Scheduled@, and @Unknown@.
+newQueryInfo ::
+  QueryInfo
+newQueryInfo =
+  QueryInfo'
+    { createTime = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      queryId = Prelude.Nothing,
+      queryString = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The date and time that this query was created.
+queryInfo_createTime :: Lens.Lens' QueryInfo (Prelude.Maybe Prelude.Natural)
+queryInfo_createTime = Lens.lens (\QueryInfo' {createTime} -> createTime) (\s@QueryInfo' {} a -> s {createTime = a} :: QueryInfo)
+
+-- | The name of the log group scanned by this query.
+queryInfo_logGroupName :: Lens.Lens' QueryInfo (Prelude.Maybe Prelude.Text)
+queryInfo_logGroupName = Lens.lens (\QueryInfo' {logGroupName} -> logGroupName) (\s@QueryInfo' {} a -> s {logGroupName = a} :: QueryInfo)
+
+-- | The unique ID number of this query.
+queryInfo_queryId :: Lens.Lens' QueryInfo (Prelude.Maybe Prelude.Text)
+queryInfo_queryId = Lens.lens (\QueryInfo' {queryId} -> queryId) (\s@QueryInfo' {} a -> s {queryId = a} :: QueryInfo)
+
+-- | The query string used in this query.
+queryInfo_queryString :: Lens.Lens' QueryInfo (Prelude.Maybe Prelude.Text)
+queryInfo_queryString = Lens.lens (\QueryInfo' {queryString} -> queryString) (\s@QueryInfo' {} a -> s {queryString = a} :: QueryInfo)
+
+-- | The status of this query. Possible values are @Cancelled@, @Complete@,
+-- @Failed@, @Running@, @Scheduled@, and @Unknown@.
+queryInfo_status :: Lens.Lens' QueryInfo (Prelude.Maybe QueryStatus)
+queryInfo_status = Lens.lens (\QueryInfo' {status} -> status) (\s@QueryInfo' {} a -> s {status = a} :: QueryInfo)
+
+instance Data.FromJSON QueryInfo where
+  parseJSON =
+    Data.withObject
+      "QueryInfo"
+      ( \x ->
+          QueryInfo'
+            Prelude.<$> (x Data..:? "createTime")
+            Prelude.<*> (x Data..:? "logGroupName")
+            Prelude.<*> (x Data..:? "queryId")
+            Prelude.<*> (x Data..:? "queryString")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable QueryInfo where
+  hashWithSalt _salt QueryInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` queryId
+      `Prelude.hashWithSalt` queryString
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData QueryInfo where
+  rnf QueryInfo' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf queryId
+      `Prelude.seq` Prelude.rnf queryString
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/CloudWatchLogs/Types/QueryStatistics.hs b/gen/Amazonka/CloudWatchLogs/Types/QueryStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/QueryStatistics.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.QueryStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.QueryStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the number of log events scanned by the query, the number of
+-- log events that matched the query criteria, and the total number of
+-- bytes in the log events that were scanned.
+--
+-- /See:/ 'newQueryStatistics' smart constructor.
+data QueryStatistics = QueryStatistics'
+  { -- | The total number of bytes in the log events scanned during the query.
+    bytesScanned :: Prelude.Maybe Prelude.Double,
+    -- | The number of log events that matched the query string.
+    recordsMatched :: Prelude.Maybe Prelude.Double,
+    -- | The total number of log events scanned during the query.
+    recordsScanned :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bytesScanned', 'queryStatistics_bytesScanned' - The total number of bytes in the log events scanned during the query.
+--
+-- 'recordsMatched', 'queryStatistics_recordsMatched' - The number of log events that matched the query string.
+--
+-- 'recordsScanned', 'queryStatistics_recordsScanned' - The total number of log events scanned during the query.
+newQueryStatistics ::
+  QueryStatistics
+newQueryStatistics =
+  QueryStatistics'
+    { bytesScanned = Prelude.Nothing,
+      recordsMatched = Prelude.Nothing,
+      recordsScanned = Prelude.Nothing
+    }
+
+-- | The total number of bytes in the log events scanned during the query.
+queryStatistics_bytesScanned :: Lens.Lens' QueryStatistics (Prelude.Maybe Prelude.Double)
+queryStatistics_bytesScanned = Lens.lens (\QueryStatistics' {bytesScanned} -> bytesScanned) (\s@QueryStatistics' {} a -> s {bytesScanned = a} :: QueryStatistics)
+
+-- | The number of log events that matched the query string.
+queryStatistics_recordsMatched :: Lens.Lens' QueryStatistics (Prelude.Maybe Prelude.Double)
+queryStatistics_recordsMatched = Lens.lens (\QueryStatistics' {recordsMatched} -> recordsMatched) (\s@QueryStatistics' {} a -> s {recordsMatched = a} :: QueryStatistics)
+
+-- | The total number of log events scanned during the query.
+queryStatistics_recordsScanned :: Lens.Lens' QueryStatistics (Prelude.Maybe Prelude.Double)
+queryStatistics_recordsScanned = Lens.lens (\QueryStatistics' {recordsScanned} -> recordsScanned) (\s@QueryStatistics' {} a -> s {recordsScanned = a} :: QueryStatistics)
+
+instance Data.FromJSON QueryStatistics where
+  parseJSON =
+    Data.withObject
+      "QueryStatistics"
+      ( \x ->
+          QueryStatistics'
+            Prelude.<$> (x Data..:? "bytesScanned")
+            Prelude.<*> (x Data..:? "recordsMatched")
+            Prelude.<*> (x Data..:? "recordsScanned")
+      )
+
+instance Prelude.Hashable QueryStatistics where
+  hashWithSalt _salt QueryStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` bytesScanned
+      `Prelude.hashWithSalt` recordsMatched
+      `Prelude.hashWithSalt` recordsScanned
+
+instance Prelude.NFData QueryStatistics where
+  rnf QueryStatistics' {..} =
+    Prelude.rnf bytesScanned
+      `Prelude.seq` Prelude.rnf recordsMatched
+      `Prelude.seq` Prelude.rnf recordsScanned
diff --git a/gen/Amazonka/CloudWatchLogs/Types/QueryStatus.hs b/gen/Amazonka/CloudWatchLogs/Types/QueryStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/QueryStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.QueryStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.QueryStatus
+  ( QueryStatus
+      ( ..,
+        QueryStatus_Cancelled,
+        QueryStatus_Complete,
+        QueryStatus_Failed,
+        QueryStatus_Running,
+        QueryStatus_Scheduled,
+        QueryStatus_Timeout,
+        QueryStatus_Unknown
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QueryStatus = QueryStatus'
+  { fromQueryStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern QueryStatus_Cancelled :: QueryStatus
+pattern QueryStatus_Cancelled = QueryStatus' "Cancelled"
+
+pattern QueryStatus_Complete :: QueryStatus
+pattern QueryStatus_Complete = QueryStatus' "Complete"
+
+pattern QueryStatus_Failed :: QueryStatus
+pattern QueryStatus_Failed = QueryStatus' "Failed"
+
+pattern QueryStatus_Running :: QueryStatus
+pattern QueryStatus_Running = QueryStatus' "Running"
+
+pattern QueryStatus_Scheduled :: QueryStatus
+pattern QueryStatus_Scheduled = QueryStatus' "Scheduled"
+
+pattern QueryStatus_Timeout :: QueryStatus
+pattern QueryStatus_Timeout = QueryStatus' "Timeout"
+
+pattern QueryStatus_Unknown :: QueryStatus
+pattern QueryStatus_Unknown = QueryStatus' "Unknown"
+
+{-# COMPLETE
+  QueryStatus_Cancelled,
+  QueryStatus_Complete,
+  QueryStatus_Failed,
+  QueryStatus_Running,
+  QueryStatus_Scheduled,
+  QueryStatus_Timeout,
+  QueryStatus_Unknown,
+  QueryStatus'
+  #-}
diff --git a/gen/Amazonka/CloudWatchLogs/Types/RejectedLogEventsInfo.hs b/gen/Amazonka/CloudWatchLogs/Types/RejectedLogEventsInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/RejectedLogEventsInfo.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.RejectedLogEventsInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.RejectedLogEventsInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the rejected events.
+--
+-- /See:/ 'newRejectedLogEventsInfo' smart constructor.
+data RejectedLogEventsInfo = RejectedLogEventsInfo'
+  { -- | The expired log events.
+    expiredLogEventEndIndex :: Prelude.Maybe Prelude.Int,
+    -- | The log events that are too new.
+    tooNewLogEventStartIndex :: Prelude.Maybe Prelude.Int,
+    -- | The log events that are dated too far in the past.
+    tooOldLogEventEndIndex :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectedLogEventsInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expiredLogEventEndIndex', 'rejectedLogEventsInfo_expiredLogEventEndIndex' - The expired log events.
+--
+-- 'tooNewLogEventStartIndex', 'rejectedLogEventsInfo_tooNewLogEventStartIndex' - The log events that are too new.
+--
+-- 'tooOldLogEventEndIndex', 'rejectedLogEventsInfo_tooOldLogEventEndIndex' - The log events that are dated too far in the past.
+newRejectedLogEventsInfo ::
+  RejectedLogEventsInfo
+newRejectedLogEventsInfo =
+  RejectedLogEventsInfo'
+    { expiredLogEventEndIndex =
+        Prelude.Nothing,
+      tooNewLogEventStartIndex = Prelude.Nothing,
+      tooOldLogEventEndIndex = Prelude.Nothing
+    }
+
+-- | The expired log events.
+rejectedLogEventsInfo_expiredLogEventEndIndex :: Lens.Lens' RejectedLogEventsInfo (Prelude.Maybe Prelude.Int)
+rejectedLogEventsInfo_expiredLogEventEndIndex = Lens.lens (\RejectedLogEventsInfo' {expiredLogEventEndIndex} -> expiredLogEventEndIndex) (\s@RejectedLogEventsInfo' {} a -> s {expiredLogEventEndIndex = a} :: RejectedLogEventsInfo)
+
+-- | The log events that are too new.
+rejectedLogEventsInfo_tooNewLogEventStartIndex :: Lens.Lens' RejectedLogEventsInfo (Prelude.Maybe Prelude.Int)
+rejectedLogEventsInfo_tooNewLogEventStartIndex = Lens.lens (\RejectedLogEventsInfo' {tooNewLogEventStartIndex} -> tooNewLogEventStartIndex) (\s@RejectedLogEventsInfo' {} a -> s {tooNewLogEventStartIndex = a} :: RejectedLogEventsInfo)
+
+-- | The log events that are dated too far in the past.
+rejectedLogEventsInfo_tooOldLogEventEndIndex :: Lens.Lens' RejectedLogEventsInfo (Prelude.Maybe Prelude.Int)
+rejectedLogEventsInfo_tooOldLogEventEndIndex = Lens.lens (\RejectedLogEventsInfo' {tooOldLogEventEndIndex} -> tooOldLogEventEndIndex) (\s@RejectedLogEventsInfo' {} a -> s {tooOldLogEventEndIndex = a} :: RejectedLogEventsInfo)
+
+instance Data.FromJSON RejectedLogEventsInfo where
+  parseJSON =
+    Data.withObject
+      "RejectedLogEventsInfo"
+      ( \x ->
+          RejectedLogEventsInfo'
+            Prelude.<$> (x Data..:? "expiredLogEventEndIndex")
+            Prelude.<*> (x Data..:? "tooNewLogEventStartIndex")
+            Prelude.<*> (x Data..:? "tooOldLogEventEndIndex")
+      )
+
+instance Prelude.Hashable RejectedLogEventsInfo where
+  hashWithSalt _salt RejectedLogEventsInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` expiredLogEventEndIndex
+      `Prelude.hashWithSalt` tooNewLogEventStartIndex
+      `Prelude.hashWithSalt` tooOldLogEventEndIndex
+
+instance Prelude.NFData RejectedLogEventsInfo where
+  rnf RejectedLogEventsInfo' {..} =
+    Prelude.rnf expiredLogEventEndIndex
+      `Prelude.seq` Prelude.rnf tooNewLogEventStartIndex
+      `Prelude.seq` Prelude.rnf tooOldLogEventEndIndex
diff --git a/gen/Amazonka/CloudWatchLogs/Types/ResourcePolicy.hs b/gen/Amazonka/CloudWatchLogs/Types/ResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/ResourcePolicy.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.ResourcePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.ResourcePolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A policy enabling one or more entities to put logs to a log group in
+-- this account.
+--
+-- /See:/ 'newResourcePolicy' smart constructor.
+data ResourcePolicy = ResourcePolicy'
+  { -- | Timestamp showing when this policy was last updated, expressed as the
+    -- number of milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Natural,
+    -- | The details of the policy.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource policy.
+    policyName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourcePolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastUpdatedTime', 'resourcePolicy_lastUpdatedTime' - Timestamp showing when this policy was last updated, expressed as the
+-- number of milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'policyDocument', 'resourcePolicy_policyDocument' - The details of the policy.
+--
+-- 'policyName', 'resourcePolicy_policyName' - The name of the resource policy.
+newResourcePolicy ::
+  ResourcePolicy
+newResourcePolicy =
+  ResourcePolicy'
+    { lastUpdatedTime = Prelude.Nothing,
+      policyDocument = Prelude.Nothing,
+      policyName = Prelude.Nothing
+    }
+
+-- | Timestamp showing when this policy was last updated, expressed as the
+-- number of milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+resourcePolicy_lastUpdatedTime :: Lens.Lens' ResourcePolicy (Prelude.Maybe Prelude.Natural)
+resourcePolicy_lastUpdatedTime = Lens.lens (\ResourcePolicy' {lastUpdatedTime} -> lastUpdatedTime) (\s@ResourcePolicy' {} a -> s {lastUpdatedTime = a} :: ResourcePolicy)
+
+-- | The details of the policy.
+resourcePolicy_policyDocument :: Lens.Lens' ResourcePolicy (Prelude.Maybe Prelude.Text)
+resourcePolicy_policyDocument = Lens.lens (\ResourcePolicy' {policyDocument} -> policyDocument) (\s@ResourcePolicy' {} a -> s {policyDocument = a} :: ResourcePolicy)
+
+-- | The name of the resource policy.
+resourcePolicy_policyName :: Lens.Lens' ResourcePolicy (Prelude.Maybe Prelude.Text)
+resourcePolicy_policyName = Lens.lens (\ResourcePolicy' {policyName} -> policyName) (\s@ResourcePolicy' {} a -> s {policyName = a} :: ResourcePolicy)
+
+instance Data.FromJSON ResourcePolicy where
+  parseJSON =
+    Data.withObject
+      "ResourcePolicy"
+      ( \x ->
+          ResourcePolicy'
+            Prelude.<$> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "policyDocument")
+            Prelude.<*> (x Data..:? "policyName")
+      )
+
+instance Prelude.Hashable ResourcePolicy where
+  hashWithSalt _salt ResourcePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` policyName
+
+instance Prelude.NFData ResourcePolicy where
+  rnf ResourcePolicy' {..} =
+    Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf policyName
diff --git a/gen/Amazonka/CloudWatchLogs/Types/ResultField.hs b/gen/Amazonka/CloudWatchLogs/Types/ResultField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/ResultField.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.ResultField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.ResultField where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains one field from one log event returned by a CloudWatch Logs
+-- Insights query, along with the value of that field.
+--
+-- For more information about the fields that are generated by CloudWatch
+-- logs, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html Supported Logs and Discovered Fields>.
+--
+-- /See:/ 'newResultField' smart constructor.
+data ResultField = ResultField'
+  { -- | The log event field.
+    field :: Prelude.Maybe Prelude.Text,
+    -- | The value of this field.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResultField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'field', 'resultField_field' - The log event field.
+--
+-- 'value', 'resultField_value' - The value of this field.
+newResultField ::
+  ResultField
+newResultField =
+  ResultField'
+    { field = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The log event field.
+resultField_field :: Lens.Lens' ResultField (Prelude.Maybe Prelude.Text)
+resultField_field = Lens.lens (\ResultField' {field} -> field) (\s@ResultField' {} a -> s {field = a} :: ResultField)
+
+-- | The value of this field.
+resultField_value :: Lens.Lens' ResultField (Prelude.Maybe Prelude.Text)
+resultField_value = Lens.lens (\ResultField' {value} -> value) (\s@ResultField' {} a -> s {value = a} :: ResultField)
+
+instance Data.FromJSON ResultField where
+  parseJSON =
+    Data.withObject
+      "ResultField"
+      ( \x ->
+          ResultField'
+            Prelude.<$> (x Data..:? "field")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable ResultField where
+  hashWithSalt _salt ResultField' {..} =
+    _salt
+      `Prelude.hashWithSalt` field
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ResultField where
+  rnf ResultField' {..} =
+    Prelude.rnf field `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/CloudWatchLogs/Types/SearchedLogStream.hs b/gen/Amazonka/CloudWatchLogs/Types/SearchedLogStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/SearchedLogStream.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.SearchedLogStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.SearchedLogStream where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the search status of a log stream.
+--
+-- /See:/ 'newSearchedLogStream' smart constructor.
+data SearchedLogStream = SearchedLogStream'
+  { -- | The name of the log stream.
+    logStreamName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether all the events in this log stream were searched.
+    searchedCompletely :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchedLogStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logStreamName', 'searchedLogStream_logStreamName' - The name of the log stream.
+--
+-- 'searchedCompletely', 'searchedLogStream_searchedCompletely' - Indicates whether all the events in this log stream were searched.
+newSearchedLogStream ::
+  SearchedLogStream
+newSearchedLogStream =
+  SearchedLogStream'
+    { logStreamName = Prelude.Nothing,
+      searchedCompletely = Prelude.Nothing
+    }
+
+-- | The name of the log stream.
+searchedLogStream_logStreamName :: Lens.Lens' SearchedLogStream (Prelude.Maybe Prelude.Text)
+searchedLogStream_logStreamName = Lens.lens (\SearchedLogStream' {logStreamName} -> logStreamName) (\s@SearchedLogStream' {} a -> s {logStreamName = a} :: SearchedLogStream)
+
+-- | Indicates whether all the events in this log stream were searched.
+searchedLogStream_searchedCompletely :: Lens.Lens' SearchedLogStream (Prelude.Maybe Prelude.Bool)
+searchedLogStream_searchedCompletely = Lens.lens (\SearchedLogStream' {searchedCompletely} -> searchedCompletely) (\s@SearchedLogStream' {} a -> s {searchedCompletely = a} :: SearchedLogStream)
+
+instance Data.FromJSON SearchedLogStream where
+  parseJSON =
+    Data.withObject
+      "SearchedLogStream"
+      ( \x ->
+          SearchedLogStream'
+            Prelude.<$> (x Data..:? "logStreamName")
+            Prelude.<*> (x Data..:? "searchedCompletely")
+      )
+
+instance Prelude.Hashable SearchedLogStream where
+  hashWithSalt _salt SearchedLogStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` logStreamName
+      `Prelude.hashWithSalt` searchedCompletely
+
+instance Prelude.NFData SearchedLogStream where
+  rnf SearchedLogStream' {..} =
+    Prelude.rnf logStreamName
+      `Prelude.seq` Prelude.rnf searchedCompletely
diff --git a/gen/Amazonka/CloudWatchLogs/Types/StandardUnit.hs b/gen/Amazonka/CloudWatchLogs/Types/StandardUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/StandardUnit.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.StandardUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.StandardUnit
+  ( StandardUnit
+      ( ..,
+        StandardUnit_Bits,
+        StandardUnit_Bits_Second,
+        StandardUnit_Bytes,
+        StandardUnit_Bytes_Second,
+        StandardUnit_Count,
+        StandardUnit_Count_Second,
+        StandardUnit_Gigabits,
+        StandardUnit_Gigabits_Second,
+        StandardUnit_Gigabytes,
+        StandardUnit_Gigabytes_Second,
+        StandardUnit_Kilobits,
+        StandardUnit_Kilobits_Second,
+        StandardUnit_Kilobytes,
+        StandardUnit_Kilobytes_Second,
+        StandardUnit_Megabits,
+        StandardUnit_Megabits_Second,
+        StandardUnit_Megabytes,
+        StandardUnit_Megabytes_Second,
+        StandardUnit_Microseconds,
+        StandardUnit_Milliseconds,
+        StandardUnit_None,
+        StandardUnit_Percent,
+        StandardUnit_Seconds,
+        StandardUnit_Terabits,
+        StandardUnit_Terabits_Second,
+        StandardUnit_Terabytes,
+        StandardUnit_Terabytes_Second
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StandardUnit = StandardUnit'
+  { fromStandardUnit ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StandardUnit_Bits :: StandardUnit
+pattern StandardUnit_Bits = StandardUnit' "Bits"
+
+pattern StandardUnit_Bits_Second :: StandardUnit
+pattern StandardUnit_Bits_Second = StandardUnit' "Bits/Second"
+
+pattern StandardUnit_Bytes :: StandardUnit
+pattern StandardUnit_Bytes = StandardUnit' "Bytes"
+
+pattern StandardUnit_Bytes_Second :: StandardUnit
+pattern StandardUnit_Bytes_Second = StandardUnit' "Bytes/Second"
+
+pattern StandardUnit_Count :: StandardUnit
+pattern StandardUnit_Count = StandardUnit' "Count"
+
+pattern StandardUnit_Count_Second :: StandardUnit
+pattern StandardUnit_Count_Second = StandardUnit' "Count/Second"
+
+pattern StandardUnit_Gigabits :: StandardUnit
+pattern StandardUnit_Gigabits = StandardUnit' "Gigabits"
+
+pattern StandardUnit_Gigabits_Second :: StandardUnit
+pattern StandardUnit_Gigabits_Second = StandardUnit' "Gigabits/Second"
+
+pattern StandardUnit_Gigabytes :: StandardUnit
+pattern StandardUnit_Gigabytes = StandardUnit' "Gigabytes"
+
+pattern StandardUnit_Gigabytes_Second :: StandardUnit
+pattern StandardUnit_Gigabytes_Second = StandardUnit' "Gigabytes/Second"
+
+pattern StandardUnit_Kilobits :: StandardUnit
+pattern StandardUnit_Kilobits = StandardUnit' "Kilobits"
+
+pattern StandardUnit_Kilobits_Second :: StandardUnit
+pattern StandardUnit_Kilobits_Second = StandardUnit' "Kilobits/Second"
+
+pattern StandardUnit_Kilobytes :: StandardUnit
+pattern StandardUnit_Kilobytes = StandardUnit' "Kilobytes"
+
+pattern StandardUnit_Kilobytes_Second :: StandardUnit
+pattern StandardUnit_Kilobytes_Second = StandardUnit' "Kilobytes/Second"
+
+pattern StandardUnit_Megabits :: StandardUnit
+pattern StandardUnit_Megabits = StandardUnit' "Megabits"
+
+pattern StandardUnit_Megabits_Second :: StandardUnit
+pattern StandardUnit_Megabits_Second = StandardUnit' "Megabits/Second"
+
+pattern StandardUnit_Megabytes :: StandardUnit
+pattern StandardUnit_Megabytes = StandardUnit' "Megabytes"
+
+pattern StandardUnit_Megabytes_Second :: StandardUnit
+pattern StandardUnit_Megabytes_Second = StandardUnit' "Megabytes/Second"
+
+pattern StandardUnit_Microseconds :: StandardUnit
+pattern StandardUnit_Microseconds = StandardUnit' "Microseconds"
+
+pattern StandardUnit_Milliseconds :: StandardUnit
+pattern StandardUnit_Milliseconds = StandardUnit' "Milliseconds"
+
+pattern StandardUnit_None :: StandardUnit
+pattern StandardUnit_None = StandardUnit' "None"
+
+pattern StandardUnit_Percent :: StandardUnit
+pattern StandardUnit_Percent = StandardUnit' "Percent"
+
+pattern StandardUnit_Seconds :: StandardUnit
+pattern StandardUnit_Seconds = StandardUnit' "Seconds"
+
+pattern StandardUnit_Terabits :: StandardUnit
+pattern StandardUnit_Terabits = StandardUnit' "Terabits"
+
+pattern StandardUnit_Terabits_Second :: StandardUnit
+pattern StandardUnit_Terabits_Second = StandardUnit' "Terabits/Second"
+
+pattern StandardUnit_Terabytes :: StandardUnit
+pattern StandardUnit_Terabytes = StandardUnit' "Terabytes"
+
+pattern StandardUnit_Terabytes_Second :: StandardUnit
+pattern StandardUnit_Terabytes_Second = StandardUnit' "Terabytes/Second"
+
+{-# COMPLETE
+  StandardUnit_Bits,
+  StandardUnit_Bits_Second,
+  StandardUnit_Bytes,
+  StandardUnit_Bytes_Second,
+  StandardUnit_Count,
+  StandardUnit_Count_Second,
+  StandardUnit_Gigabits,
+  StandardUnit_Gigabits_Second,
+  StandardUnit_Gigabytes,
+  StandardUnit_Gigabytes_Second,
+  StandardUnit_Kilobits,
+  StandardUnit_Kilobits_Second,
+  StandardUnit_Kilobytes,
+  StandardUnit_Kilobytes_Second,
+  StandardUnit_Megabits,
+  StandardUnit_Megabits_Second,
+  StandardUnit_Megabytes,
+  StandardUnit_Megabytes_Second,
+  StandardUnit_Microseconds,
+  StandardUnit_Milliseconds,
+  StandardUnit_None,
+  StandardUnit_Percent,
+  StandardUnit_Seconds,
+  StandardUnit_Terabits,
+  StandardUnit_Terabits_Second,
+  StandardUnit_Terabytes,
+  StandardUnit_Terabytes_Second,
+  StandardUnit'
+  #-}
diff --git a/gen/Amazonka/CloudWatchLogs/Types/SubscriptionFilter.hs b/gen/Amazonka/CloudWatchLogs/Types/SubscriptionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Types/SubscriptionFilter.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Types.SubscriptionFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Types.SubscriptionFilter where
+
+import Amazonka.CloudWatchLogs.Types.Distribution
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a subscription filter.
+--
+-- /See:/ 'newSubscriptionFilter' smart constructor.
+data SubscriptionFilter = SubscriptionFilter'
+  { -- | The creation time of the subscription filter, expressed as the number of
+    -- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+    creationTime :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of the destination.
+    destinationArn :: Prelude.Maybe Prelude.Text,
+    distribution :: Prelude.Maybe Distribution,
+    -- | The name of the subscription filter.
+    filterName :: Prelude.Maybe Prelude.Text,
+    filterPattern :: Prelude.Maybe Prelude.Text,
+    -- | The name of the log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubscriptionFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'subscriptionFilter_creationTime' - The creation time of the subscription filter, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+--
+-- 'destinationArn', 'subscriptionFilter_destinationArn' - The Amazon Resource Name (ARN) of the destination.
+--
+-- 'distribution', 'subscriptionFilter_distribution' - Undocumented member.
+--
+-- 'filterName', 'subscriptionFilter_filterName' - The name of the subscription filter.
+--
+-- 'filterPattern', 'subscriptionFilter_filterPattern' - Undocumented member.
+--
+-- 'logGroupName', 'subscriptionFilter_logGroupName' - The name of the log group.
+--
+-- 'roleArn', 'subscriptionFilter_roleArn' -
+newSubscriptionFilter ::
+  SubscriptionFilter
+newSubscriptionFilter =
+  SubscriptionFilter'
+    { creationTime = Prelude.Nothing,
+      destinationArn = Prelude.Nothing,
+      distribution = Prelude.Nothing,
+      filterName = Prelude.Nothing,
+      filterPattern = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | The creation time of the subscription filter, expressed as the number of
+-- milliseconds after @Jan 1, 1970 00:00:00 UTC@.
+subscriptionFilter_creationTime :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Prelude.Natural)
+subscriptionFilter_creationTime = Lens.lens (\SubscriptionFilter' {creationTime} -> creationTime) (\s@SubscriptionFilter' {} a -> s {creationTime = a} :: SubscriptionFilter)
+
+-- | The Amazon Resource Name (ARN) of the destination.
+subscriptionFilter_destinationArn :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Prelude.Text)
+subscriptionFilter_destinationArn = Lens.lens (\SubscriptionFilter' {destinationArn} -> destinationArn) (\s@SubscriptionFilter' {} a -> s {destinationArn = a} :: SubscriptionFilter)
+
+-- | Undocumented member.
+subscriptionFilter_distribution :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Distribution)
+subscriptionFilter_distribution = Lens.lens (\SubscriptionFilter' {distribution} -> distribution) (\s@SubscriptionFilter' {} a -> s {distribution = a} :: SubscriptionFilter)
+
+-- | The name of the subscription filter.
+subscriptionFilter_filterName :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Prelude.Text)
+subscriptionFilter_filterName = Lens.lens (\SubscriptionFilter' {filterName} -> filterName) (\s@SubscriptionFilter' {} a -> s {filterName = a} :: SubscriptionFilter)
+
+-- | Undocumented member.
+subscriptionFilter_filterPattern :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Prelude.Text)
+subscriptionFilter_filterPattern = Lens.lens (\SubscriptionFilter' {filterPattern} -> filterPattern) (\s@SubscriptionFilter' {} a -> s {filterPattern = a} :: SubscriptionFilter)
+
+-- | The name of the log group.
+subscriptionFilter_logGroupName :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Prelude.Text)
+subscriptionFilter_logGroupName = Lens.lens (\SubscriptionFilter' {logGroupName} -> logGroupName) (\s@SubscriptionFilter' {} a -> s {logGroupName = a} :: SubscriptionFilter)
+
+subscriptionFilter_roleArn :: Lens.Lens' SubscriptionFilter (Prelude.Maybe Prelude.Text)
+subscriptionFilter_roleArn = Lens.lens (\SubscriptionFilter' {roleArn} -> roleArn) (\s@SubscriptionFilter' {} a -> s {roleArn = a} :: SubscriptionFilter)
+
+instance Data.FromJSON SubscriptionFilter where
+  parseJSON =
+    Data.withObject
+      "SubscriptionFilter"
+      ( \x ->
+          SubscriptionFilter'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "destinationArn")
+            Prelude.<*> (x Data..:? "distribution")
+            Prelude.<*> (x Data..:? "filterName")
+            Prelude.<*> (x Data..:? "filterPattern")
+            Prelude.<*> (x Data..:? "logGroupName")
+            Prelude.<*> (x Data..:? "roleArn")
+      )
+
+instance Prelude.Hashable SubscriptionFilter where
+  hashWithSalt _salt SubscriptionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` destinationArn
+      `Prelude.hashWithSalt` distribution
+      `Prelude.hashWithSalt` filterName
+      `Prelude.hashWithSalt` filterPattern
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData SubscriptionFilter where
+  rnf SubscriptionFilter' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destinationArn
+      `Prelude.seq` Prelude.rnf distribution
+      `Prelude.seq` Prelude.rnf filterName
+      `Prelude.seq` Prelude.rnf filterPattern
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf roleArn
diff --git a/gen/Amazonka/CloudWatchLogs/UntagResource.hs b/gen/Amazonka/CloudWatchLogs/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/UntagResource.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more tags from the specified resource.
+module Amazonka.CloudWatchLogs.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The ARN of the CloudWatch Logs resource that you\'re removing tags from.
+    --
+    -- The ARN format of a log group is
+    -- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+    --
+    -- The ARN format of a destination is
+    -- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+    --
+    -- For more information about ARN format, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+    resourceArn :: Prelude.Text,
+    -- | The list of tag keys to remove from the resource.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The ARN of the CloudWatch Logs resource that you\'re removing tags from.
+--
+-- The ARN format of a log group is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+--
+-- The ARN format of a destination is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+--
+-- For more information about ARN format, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The list of tag keys to remove from the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the CloudWatch Logs resource that you\'re removing tags from.
+--
+-- The ARN format of a log group is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:log-group:@/@log-group-name@/@ @
+--
+-- The ARN format of a destination is
+-- @arn:aws:logs:@/@Region@/@:@/@account-id@/@:destination:@/@destination-name@/@ @
+--
+-- For more information about ARN format, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html CloudWatch Logs resources and operations>.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The list of tag keys to remove from the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "Logs_20140328.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("resourceArn" Data..= resourceArn),
+            Prelude.Just ("tagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/CloudWatchLogs/Waiters.hs b/gen/Amazonka/CloudWatchLogs/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/CloudWatchLogs/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.CloudWatchLogs.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.CloudWatchLogs.Waiters where
+
+import Amazonka.CloudWatchLogs.Lens
+import Amazonka.CloudWatchLogs.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Network/AWS/CloudWatchLogs.hs b/gen/Network/AWS/CloudWatchLogs.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs.hs
+++ /dev/null
@@ -1,378 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.CloudWatchLogs
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- You can use Amazon CloudWatch Logs to monitor, store, and access your log files from Amazon EC2 instances, AWS CloudTrail, or other sources. You can then retrieve the associated log data from CloudWatch Logs using the CloudWatch console, CloudWatch Logs commands in the AWS CLI, CloudWatch Logs API, or CloudWatch Logs SDK.
---
---
--- You can use CloudWatch Logs to:
---
---     * __Monitor logs from EC2 instances in real-time__ : You can use CloudWatch Logs to monitor applications and systems using log data. For example, CloudWatch Logs can track the number of errors that occur in your application logs and send you a notification whenever the rate of errors exceeds a threshold that you specify. CloudWatch Logs uses your log data for monitoring; so, no code changes are required. For example, you can monitor application logs for specific literal terms (such as "NullReferenceException") or count the number of occurrences of a literal term at a particular position in log data (such as "404" status codes in an Apache access log). When the term you are searching for is found, CloudWatch Logs reports the data to a CloudWatch metric that you specify.
---
---     * __Monitor AWS CloudTrail logged events__ : You can create alarms in CloudWatch and receive notifications of particular API activity as captured by CloudTrail and use the notification to perform troubleshooting.
---
---     * __Archive log data__ : You can use CloudWatch Logs to store your log data in highly durable storage. You can change the log retention setting so that any log events older than this setting are automatically deleted. The CloudWatch Logs agent makes it easy to quickly send both rotated and non-rotated log data off of a host and into the log service. You can then access the raw log data when you need it.
---
---
---
-module Network.AWS.CloudWatchLogs
-    (
-    -- * Service Configuration
-      cloudWatchLogs
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidParameterException
-    , _InvalidParameterException
-
-    -- ** InvalidSequenceTokenException
-    , _InvalidSequenceTokenException
-
-    -- ** ResourceAlreadyExistsException
-    , _ResourceAlreadyExistsException
-
-    -- ** OperationAbortedException
-    , _OperationAbortedException
-
-    -- ** ServiceUnavailableException
-    , _ServiceUnavailableException
-
-    -- ** DataAlreadyAcceptedException
-    , _DataAlreadyAcceptedException
-
-    -- ** InvalidOperationException
-    , _InvalidOperationException
-
-    -- ** ResourceNotFoundException
-    , _ResourceNotFoundException
-
-    -- ** LimitExceededException
-    , _LimitExceededException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** DescribeDestinations (Paginated)
-    , module Network.AWS.CloudWatchLogs.DescribeDestinations
-
-    -- ** UntagLogGroup
-    , module Network.AWS.CloudWatchLogs.UntagLogGroup
-
-    -- ** CreateExportTask
-    , module Network.AWS.CloudWatchLogs.CreateExportTask
-
-    -- ** PutDestination
-    , module Network.AWS.CloudWatchLogs.PutDestination
-
-    -- ** DescribeSubscriptionFilters (Paginated)
-    , module Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
-
-    -- ** GetLogEvents
-    , module Network.AWS.CloudWatchLogs.GetLogEvents
-
-    -- ** DescribeLogGroups (Paginated)
-    , module Network.AWS.CloudWatchLogs.DescribeLogGroups
-
-    -- ** DeleteDestination
-    , module Network.AWS.CloudWatchLogs.DeleteDestination
-
-    -- ** DisassociateKMSKey
-    , module Network.AWS.CloudWatchLogs.DisassociateKMSKey
-
-    -- ** FilterLogEvents (Paginated)
-    , module Network.AWS.CloudWatchLogs.FilterLogEvents
-
-    -- ** TagLogGroup
-    , module Network.AWS.CloudWatchLogs.TagLogGroup
-
-    -- ** DescribeResourcePolicies
-    , module Network.AWS.CloudWatchLogs.DescribeResourcePolicies
-
-    -- ** DeleteLogStream
-    , module Network.AWS.CloudWatchLogs.DeleteLogStream
-
-    -- ** CreateLogStream
-    , module Network.AWS.CloudWatchLogs.CreateLogStream
-
-    -- ** CreateLogGroup
-    , module Network.AWS.CloudWatchLogs.CreateLogGroup
-
-    -- ** DescribeExportTasks
-    , module Network.AWS.CloudWatchLogs.DescribeExportTasks
-
-    -- ** CancelExportTask
-    , module Network.AWS.CloudWatchLogs.CancelExportTask
-
-    -- ** PutSubscriptionFilter
-    , module Network.AWS.CloudWatchLogs.PutSubscriptionFilter
-
-    -- ** DeleteLogGroup
-    , module Network.AWS.CloudWatchLogs.DeleteLogGroup
-
-    -- ** DeleteSubscriptionFilter
-    , module Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
-
-    -- ** PutLogEvents
-    , module Network.AWS.CloudWatchLogs.PutLogEvents
-
-    -- ** DescribeMetricFilters (Paginated)
-    , module Network.AWS.CloudWatchLogs.DescribeMetricFilters
-
-    -- ** TestMetricFilter
-    , module Network.AWS.CloudWatchLogs.TestMetricFilter
-
-    -- ** PutDestinationPolicy
-    , module Network.AWS.CloudWatchLogs.PutDestinationPolicy
-
-    -- ** PutMetricFilter
-    , module Network.AWS.CloudWatchLogs.PutMetricFilter
-
-    -- ** DeleteRetentionPolicy
-    , module Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
-
-    -- ** DeleteMetricFilter
-    , module Network.AWS.CloudWatchLogs.DeleteMetricFilter
-
-    -- ** PutRetentionPolicy
-    , module Network.AWS.CloudWatchLogs.PutRetentionPolicy
-
-    -- ** ListTagsLogGroup
-    , module Network.AWS.CloudWatchLogs.ListTagsLogGroup
-
-    -- ** PutResourcePolicy
-    , module Network.AWS.CloudWatchLogs.PutResourcePolicy
-
-    -- ** DeleteResourcePolicy
-    , module Network.AWS.CloudWatchLogs.DeleteResourcePolicy
-
-    -- ** AssociateKMSKey
-    , module Network.AWS.CloudWatchLogs.AssociateKMSKey
-
-    -- ** DescribeLogStreams (Paginated)
-    , module Network.AWS.CloudWatchLogs.DescribeLogStreams
-
-    -- * Types
-
-    -- ** Distribution
-    , Distribution (..)
-
-    -- ** ExportTaskStatusCode
-    , ExportTaskStatusCode (..)
-
-    -- ** OrderBy
-    , OrderBy (..)
-
-    -- ** Destination
-    , Destination
-    , destination
-    , dTargetARN
-    , dCreationTime
-    , dArn
-    , dAccessPolicy
-    , dDestinationName
-    , dRoleARN
-
-    -- ** ExportTask
-    , ExportTask
-    , exportTask
-    , etDestinationPrefix
-    , etDestination
-    , etStatus
-    , etTaskName
-    , etTaskId
-    , etTo
-    , etFrom
-    , etLogGroupName
-    , etExecutionInfo
-
-    -- ** ExportTaskExecutionInfo
-    , ExportTaskExecutionInfo
-    , exportTaskExecutionInfo
-    , eteiCreationTime
-    , eteiCompletionTime
-
-    -- ** ExportTaskStatus
-    , ExportTaskStatus
-    , exportTaskStatus
-    , etsCode
-    , etsMessage
-
-    -- ** FilteredLogEvent
-    , FilteredLogEvent
-    , filteredLogEvent
-    , fleIngestionTime
-    , fleLogStreamName
-    , fleMessage
-    , fleTimestamp
-    , fleEventId
-
-    -- ** InputLogEvent
-    , InputLogEvent
-    , inputLogEvent
-    , ileTimestamp
-    , ileMessage
-
-    -- ** LogGroup
-    , LogGroup
-    , logGroup
-    , lgCreationTime
-    , lgMetricFilterCount
-    , lgArn
-    , lgLogGroupName
-    , lgRetentionInDays
-    , lgKmsKeyId
-    , lgStoredBytes
-
-    -- ** LogStream
-    , LogStream
-    , logStream
-    , lsCreationTime
-    , lsUploadSequenceToken
-    , lsArn
-    , lsFirstEventTimestamp
-    , lsLogStreamName
-    , lsStoredBytes
-    , lsLastIngestionTime
-    , lsLastEventTimestamp
-
-    -- ** MetricFilter
-    , MetricFilter
-    , metricFilter
-    , mfCreationTime
-    , mfFilterName
-    , mfLogGroupName
-    , mfFilterPattern
-    , mfMetricTransformations
-
-    -- ** MetricFilterMatchRecord
-    , MetricFilterMatchRecord
-    , metricFilterMatchRecord
-    , mfmrExtractedValues
-    , mfmrEventNumber
-    , mfmrEventMessage
-
-    -- ** MetricTransformation
-    , MetricTransformation
-    , metricTransformation
-    , mtDefaultValue
-    , mtMetricName
-    , mtMetricNamespace
-    , mtMetricValue
-
-    -- ** OutputLogEvent
-    , OutputLogEvent
-    , outputLogEvent
-    , oleIngestionTime
-    , oleMessage
-    , oleTimestamp
-
-    -- ** RejectedLogEventsInfo
-    , RejectedLogEventsInfo
-    , rejectedLogEventsInfo
-    , rleiTooOldLogEventEndIndex
-    , rleiTooNewLogEventStartIndex
-    , rleiExpiredLogEventEndIndex
-
-    -- ** ResourcePolicy
-    , ResourcePolicy
-    , resourcePolicy
-    , rpPolicyName
-    , rpPolicyDocument
-    , rpLastUpdatedTime
-
-    -- ** SearchedLogStream
-    , SearchedLogStream
-    , searchedLogStream
-    , slsLogStreamName
-    , slsSearchedCompletely
-
-    -- ** SubscriptionFilter
-    , SubscriptionFilter
-    , subscriptionFilter
-    , sfCreationTime
-    , sfFilterName
-    , sfDistribution
-    , sfDestinationARN
-    , sfLogGroupName
-    , sfFilterPattern
-    , sfRoleARN
-    ) where
-
-import Network.AWS.CloudWatchLogs.AssociateKMSKey
-import Network.AWS.CloudWatchLogs.CancelExportTask
-import Network.AWS.CloudWatchLogs.CreateExportTask
-import Network.AWS.CloudWatchLogs.CreateLogGroup
-import Network.AWS.CloudWatchLogs.CreateLogStream
-import Network.AWS.CloudWatchLogs.DeleteDestination
-import Network.AWS.CloudWatchLogs.DeleteLogGroup
-import Network.AWS.CloudWatchLogs.DeleteLogStream
-import Network.AWS.CloudWatchLogs.DeleteMetricFilter
-import Network.AWS.CloudWatchLogs.DeleteResourcePolicy
-import Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
-import Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
-import Network.AWS.CloudWatchLogs.DescribeDestinations
-import Network.AWS.CloudWatchLogs.DescribeExportTasks
-import Network.AWS.CloudWatchLogs.DescribeLogGroups
-import Network.AWS.CloudWatchLogs.DescribeLogStreams
-import Network.AWS.CloudWatchLogs.DescribeMetricFilters
-import Network.AWS.CloudWatchLogs.DescribeResourcePolicies
-import Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
-import Network.AWS.CloudWatchLogs.DisassociateKMSKey
-import Network.AWS.CloudWatchLogs.FilterLogEvents
-import Network.AWS.CloudWatchLogs.GetLogEvents
-import Network.AWS.CloudWatchLogs.ListTagsLogGroup
-import Network.AWS.CloudWatchLogs.PutDestination
-import Network.AWS.CloudWatchLogs.PutDestinationPolicy
-import Network.AWS.CloudWatchLogs.PutLogEvents
-import Network.AWS.CloudWatchLogs.PutMetricFilter
-import Network.AWS.CloudWatchLogs.PutResourcePolicy
-import Network.AWS.CloudWatchLogs.PutRetentionPolicy
-import Network.AWS.CloudWatchLogs.PutSubscriptionFilter
-import Network.AWS.CloudWatchLogs.TagLogGroup
-import Network.AWS.CloudWatchLogs.TestMetricFilter
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.UntagLogGroup
-import Network.AWS.CloudWatchLogs.Waiters
-
-{- $errors
-Error matchers are designed for use with the functions provided by
-<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-This allows catching (and rethrowing) service specific errors returned
-by 'CloudWatchLogs'.
--}
-
-{- $operations
-Some AWS operations return results that are incomplete and require subsequent
-requests in order to obtain the entire result set. The process of sending
-subsequent requests to continue where a previous request left off is called
-pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-1000 objects at a time, and you must send subsequent requests with the
-appropriate Marker in order to retrieve the next page of results.
-
-Operations that have an 'AWSPager' instance can transparently perform subsequent
-requests, correctly setting Markers and other request facets to iterate through
-the entire result set of a truncated API operation. Operations which support
-this have an additional note in the documentation.
-
-Many operations have the ability to filter results on the server side. See the
-individual operation parameters for details.
--}
-
-{- $waiters
-Waiters poll by repeatedly sending a request until some remote success condition
-configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-determines how many attempts should be made, in addition to delay and retry strategies.
--}
diff --git a/gen/Network/AWS/CloudWatchLogs/AssociateKMSKey.hs b/gen/Network/AWS/CloudWatchLogs/AssociateKMSKey.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/AssociateKMSKey.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{-# 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.CloudWatchLogs.AssociateKMSKey
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates the specified AWS Key Management Service (AWS KMS) customer master key (CMK) with the specified log group.
---
---
--- Associating an AWS KMS CMK with a log group overrides any existing associations between the log group and a CMK. After a CMK is associated with a log group, all newly ingested data for the log group is encrypted using the CMK. This association is stored as long as the data encrypted with the CMK is still within Amazon CloudWatch Logs. This enables Amazon CloudWatch Logs to decrypt this data whenever it is requested.
---
--- Note that it can take up to 5 minutes for this operation to take effect.
---
--- If you attempt to associate a CMK with a log group but the CMK does not exist or the CMK is disabled, you will receive an @InvalidParameterException@ error.
---
-module Network.AWS.CloudWatchLogs.AssociateKMSKey
-    (
-    -- * Creating a Request
-      associateKMSKey
-    , AssociateKMSKey
-    -- * Request Lenses
-    , akkLogGroupName
-    , akkKmsKeyId
-
-    -- * Destructuring the Response
-    , associateKMSKeyResponse
-    , AssociateKMSKeyResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'associateKMSKey' smart constructor.
-data AssociateKMSKey = AssociateKMSKey'
-  { _akkLogGroupName :: !Text
-  , _akkKmsKeyId     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateKMSKey' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'akkLogGroupName' - The name of the log group.
---
--- * 'akkKmsKeyId' - The Amazon Resource Name (ARN) of the CMK to use when encrypting log data. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names - AWS Key Management Service (AWS KMS)> .
-associateKMSKey
-    :: Text -- ^ 'akkLogGroupName'
-    -> Text -- ^ 'akkKmsKeyId'
-    -> AssociateKMSKey
-associateKMSKey pLogGroupName_ pKmsKeyId_ =
-  AssociateKMSKey'
-    {_akkLogGroupName = pLogGroupName_, _akkKmsKeyId = pKmsKeyId_}
-
-
--- | The name of the log group.
-akkLogGroupName :: Lens' AssociateKMSKey Text
-akkLogGroupName = lens _akkLogGroupName (\ s a -> s{_akkLogGroupName = a})
-
--- | The Amazon Resource Name (ARN) of the CMK to use when encrypting log data. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names - AWS Key Management Service (AWS KMS)> .
-akkKmsKeyId :: Lens' AssociateKMSKey Text
-akkKmsKeyId = lens _akkKmsKeyId (\ s a -> s{_akkKmsKeyId = a})
-
-instance AWSRequest AssociateKMSKey where
-        type Rs AssociateKMSKey = AssociateKMSKeyResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull AssociateKMSKeyResponse'
-
-instance Hashable AssociateKMSKey where
-
-instance NFData AssociateKMSKey where
-
-instance ToHeaders AssociateKMSKey where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.AssociateKmsKey" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AssociateKMSKey where
-        toJSON AssociateKMSKey'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _akkLogGroupName),
-                  Just ("kmsKeyId" .= _akkKmsKeyId)])
-
-instance ToPath AssociateKMSKey where
-        toPath = const "/"
-
-instance ToQuery AssociateKMSKey where
-        toQuery = const mempty
-
--- | /See:/ 'associateKMSKeyResponse' smart constructor.
-data AssociateKMSKeyResponse =
-  AssociateKMSKeyResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateKMSKeyResponse' with the minimum fields required to make a request.
---
-associateKMSKeyResponse
-    :: AssociateKMSKeyResponse
-associateKMSKeyResponse = AssociateKMSKeyResponse'
-
-
-instance NFData AssociateKMSKeyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/CancelExportTask.hs b/gen/Network/AWS/CloudWatchLogs/CancelExportTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/CancelExportTask.hs
+++ /dev/null
@@ -1,108 +0,0 @@
-{-# 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.CloudWatchLogs.CancelExportTask
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels the specified export task.
---
---
--- The task must be in the @PENDING@ or @RUNNING@ state.
---
-module Network.AWS.CloudWatchLogs.CancelExportTask
-    (
-    -- * Creating a Request
-      cancelExportTask
-    , CancelExportTask
-    -- * Request Lenses
-    , cetTaskId
-
-    -- * Destructuring the Response
-    , cancelExportTaskResponse
-    , CancelExportTaskResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'cancelExportTask' smart constructor.
-newtype CancelExportTask = CancelExportTask'
-  { _cetTaskId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CancelExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cetTaskId' - The ID of the export task.
-cancelExportTask
-    :: Text -- ^ 'cetTaskId'
-    -> CancelExportTask
-cancelExportTask pTaskId_ = CancelExportTask' {_cetTaskId = pTaskId_}
-
-
--- | The ID of the export task.
-cetTaskId :: Lens' CancelExportTask Text
-cetTaskId = lens _cetTaskId (\ s a -> s{_cetTaskId = a})
-
-instance AWSRequest CancelExportTask where
-        type Rs CancelExportTask = CancelExportTaskResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull CancelExportTaskResponse'
-
-instance Hashable CancelExportTask where
-
-instance NFData CancelExportTask where
-
-instance ToHeaders CancelExportTask where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.CancelExportTask" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CancelExportTask where
-        toJSON CancelExportTask'{..}
-          = object (catMaybes [Just ("taskId" .= _cetTaskId)])
-
-instance ToPath CancelExportTask where
-        toPath = const "/"
-
-instance ToQuery CancelExportTask where
-        toQuery = const mempty
-
--- | /See:/ 'cancelExportTaskResponse' smart constructor.
-data CancelExportTaskResponse =
-  CancelExportTaskResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CancelExportTaskResponse' with the minimum fields required to make a request.
---
-cancelExportTaskResponse
-    :: CancelExportTaskResponse
-cancelExportTaskResponse = CancelExportTaskResponse'
-
-
-instance NFData CancelExportTaskResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateExportTask.hs b/gen/Network/AWS/CloudWatchLogs/CreateExportTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/CreateExportTask.hs
+++ /dev/null
@@ -1,202 +0,0 @@
-{-# 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.CloudWatchLogs.CreateExportTask
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an export task, which allows you to efficiently export data from a log group to an Amazon S3 bucket.
---
---
--- This is an asynchronous call. If all the required information is provided, this operation initiates an export task and responds with the ID of the task. After the task has started, you can use 'DescribeExportTasks' to get the status of the export task. Each account can only have one active (@RUNNING@ or @PENDING@ ) export task at a time. To cancel an export task, use 'CancelExportTask' .
---
--- You can export logs from multiple log groups or multiple time ranges to the same S3 bucket. To separate out log data for each export task, you can specify a prefix to be used as the Amazon S3 key prefix for all exported objects.
---
-module Network.AWS.CloudWatchLogs.CreateExportTask
-    (
-    -- * Creating a Request
-      createExportTask
-    , CreateExportTask
-    -- * Request Lenses
-    , cetDestinationPrefix
-    , cetTaskName
-    , cetLogStreamNamePrefix
-    , cetLogGroupName
-    , cetFrom
-    , cetTo
-    , cetDestination
-
-    -- * Destructuring the Response
-    , createExportTaskResponse
-    , CreateExportTaskResponse
-    -- * Response Lenses
-    , cetrsTaskId
-    , cetrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createExportTask' smart constructor.
-data CreateExportTask = CreateExportTask'
-  { _cetDestinationPrefix   :: !(Maybe Text)
-  , _cetTaskName            :: !(Maybe Text)
-  , _cetLogStreamNamePrefix :: !(Maybe Text)
-  , _cetLogGroupName        :: !Text
-  , _cetFrom                :: !Nat
-  , _cetTo                  :: !Nat
-  , _cetDestination         :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cetDestinationPrefix' - The prefix used as the start of the key for every object exported. If you don't specify a value, the default is @exportedlogs@ .
---
--- * 'cetTaskName' - The name of the export task.
---
--- * 'cetLogStreamNamePrefix' - Export only log streams that match the provided prefix. If you don't specify a value, no prefix filter is applied.
---
--- * 'cetLogGroupName' - The name of the log group.
---
--- * 'cetFrom' - The start time of the range for the request, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp earlier than this time are not exported.
---
--- * 'cetTo' - The end time of the range for the request, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not exported.
---
--- * 'cetDestination' - The name of S3 bucket for the exported log data. The bucket must be in the same AWS region.
-createExportTask
-    :: Text -- ^ 'cetLogGroupName'
-    -> Natural -- ^ 'cetFrom'
-    -> Natural -- ^ 'cetTo'
-    -> Text -- ^ 'cetDestination'
-    -> CreateExportTask
-createExportTask pLogGroupName_ pFrom_ pTo_ pDestination_ =
-  CreateExportTask'
-    { _cetDestinationPrefix = Nothing
-    , _cetTaskName = Nothing
-    , _cetLogStreamNamePrefix = Nothing
-    , _cetLogGroupName = pLogGroupName_
-    , _cetFrom = _Nat # pFrom_
-    , _cetTo = _Nat # pTo_
-    , _cetDestination = pDestination_
-    }
-
-
--- | The prefix used as the start of the key for every object exported. If you don't specify a value, the default is @exportedlogs@ .
-cetDestinationPrefix :: Lens' CreateExportTask (Maybe Text)
-cetDestinationPrefix = lens _cetDestinationPrefix (\ s a -> s{_cetDestinationPrefix = a})
-
--- | The name of the export task.
-cetTaskName :: Lens' CreateExportTask (Maybe Text)
-cetTaskName = lens _cetTaskName (\ s a -> s{_cetTaskName = a})
-
--- | Export only log streams that match the provided prefix. If you don't specify a value, no prefix filter is applied.
-cetLogStreamNamePrefix :: Lens' CreateExportTask (Maybe Text)
-cetLogStreamNamePrefix = lens _cetLogStreamNamePrefix (\ s a -> s{_cetLogStreamNamePrefix = a})
-
--- | The name of the log group.
-cetLogGroupName :: Lens' CreateExportTask Text
-cetLogGroupName = lens _cetLogGroupName (\ s a -> s{_cetLogGroupName = a})
-
--- | The start time of the range for the request, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp earlier than this time are not exported.
-cetFrom :: Lens' CreateExportTask Natural
-cetFrom = lens _cetFrom (\ s a -> s{_cetFrom = a}) . _Nat
-
--- | The end time of the range for the request, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not exported.
-cetTo :: Lens' CreateExportTask Natural
-cetTo = lens _cetTo (\ s a -> s{_cetTo = a}) . _Nat
-
--- | The name of S3 bucket for the exported log data. The bucket must be in the same AWS region.
-cetDestination :: Lens' CreateExportTask Text
-cetDestination = lens _cetDestination (\ s a -> s{_cetDestination = a})
-
-instance AWSRequest CreateExportTask where
-        type Rs CreateExportTask = CreateExportTaskResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateExportTaskResponse' <$>
-                   (x .?> "taskId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateExportTask where
-
-instance NFData CreateExportTask where
-
-instance ToHeaders CreateExportTask where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.CreateExportTask" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateExportTask where
-        toJSON CreateExportTask'{..}
-          = object
-              (catMaybes
-                 [("destinationPrefix" .=) <$> _cetDestinationPrefix,
-                  ("taskName" .=) <$> _cetTaskName,
-                  ("logStreamNamePrefix" .=) <$>
-                    _cetLogStreamNamePrefix,
-                  Just ("logGroupName" .= _cetLogGroupName),
-                  Just ("from" .= _cetFrom), Just ("to" .= _cetTo),
-                  Just ("destination" .= _cetDestination)])
-
-instance ToPath CreateExportTask where
-        toPath = const "/"
-
-instance ToQuery CreateExportTask where
-        toQuery = const mempty
-
--- | /See:/ 'createExportTaskResponse' smart constructor.
-data CreateExportTaskResponse = CreateExportTaskResponse'
-  { _cetrsTaskId         :: !(Maybe Text)
-  , _cetrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateExportTaskResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cetrsTaskId' - The ID of the export task.
---
--- * 'cetrsResponseStatus' - -- | The response status code.
-createExportTaskResponse
-    :: Int -- ^ 'cetrsResponseStatus'
-    -> CreateExportTaskResponse
-createExportTaskResponse pResponseStatus_ =
-  CreateExportTaskResponse'
-    {_cetrsTaskId = Nothing, _cetrsResponseStatus = pResponseStatus_}
-
-
--- | The ID of the export task.
-cetrsTaskId :: Lens' CreateExportTaskResponse (Maybe Text)
-cetrsTaskId = lens _cetrsTaskId (\ s a -> s{_cetrsTaskId = a})
-
--- | -- | The response status code.
-cetrsResponseStatus :: Lens' CreateExportTaskResponse Int
-cetrsResponseStatus = lens _cetrsResponseStatus (\ s a -> s{_cetrsResponseStatus = a})
-
-instance NFData CreateExportTaskResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/CreateLogGroup.hs
+++ /dev/null
@@ -1,147 +0,0 @@
-{-# 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.CloudWatchLogs.CreateLogGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a log group with the specified name.
---
---
--- You can create up to 5000 log groups per account.
---
--- You must use the following guidelines when naming a log group:
---
---     * Log group names must be unique within a region for an AWS account.
---
---     * Log group names can be between 1 and 512 characters long.
---
---     * Log group names consist of the following characters: a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.' (period).
---
---
---
--- If you associate a AWS Key Management Service (AWS KMS) customer master key (CMK) with the log group, ingested data is encrypted using the CMK. This association is stored as long as the data encrypted with the CMK is still within Amazon CloudWatch Logs. This enables Amazon CloudWatch Logs to decrypt this data whenever it is requested.
---
--- If you attempt to associate a CMK with the log group but the CMK does not exist or the CMK is disabled, you will receive an @InvalidParameterException@ error.
---
-module Network.AWS.CloudWatchLogs.CreateLogGroup
-    (
-    -- * Creating a Request
-      createLogGroup
-    , CreateLogGroup
-    -- * Request Lenses
-    , clgKmsKeyId
-    , clgTags
-    , clgLogGroupName
-
-    -- * Destructuring the Response
-    , createLogGroupResponse
-    , CreateLogGroupResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createLogGroup' smart constructor.
-data CreateLogGroup = CreateLogGroup'
-  { _clgKmsKeyId     :: !(Maybe Text)
-  , _clgTags         :: !(Maybe (Map Text Text))
-  , _clgLogGroupName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateLogGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'clgKmsKeyId' - The Amazon Resource Name (ARN) of the CMK to use when encrypting log data. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names - AWS Key Management Service (AWS KMS)> .
---
--- * 'clgTags' - The key-value pairs to use for the tags.
---
--- * 'clgLogGroupName' - The name of the log group.
-createLogGroup
-    :: Text -- ^ 'clgLogGroupName'
-    -> CreateLogGroup
-createLogGroup pLogGroupName_ =
-  CreateLogGroup'
-    { _clgKmsKeyId = Nothing
-    , _clgTags = Nothing
-    , _clgLogGroupName = pLogGroupName_
-    }
-
-
--- | The Amazon Resource Name (ARN) of the CMK to use when encrypting log data. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kms Amazon Resource Names - AWS Key Management Service (AWS KMS)> .
-clgKmsKeyId :: Lens' CreateLogGroup (Maybe Text)
-clgKmsKeyId = lens _clgKmsKeyId (\ s a -> s{_clgKmsKeyId = a})
-
--- | The key-value pairs to use for the tags.
-clgTags :: Lens' CreateLogGroup (HashMap Text Text)
-clgTags = lens _clgTags (\ s a -> s{_clgTags = a}) . _Default . _Map
-
--- | The name of the log group.
-clgLogGroupName :: Lens' CreateLogGroup Text
-clgLogGroupName = lens _clgLogGroupName (\ s a -> s{_clgLogGroupName = a})
-
-instance AWSRequest CreateLogGroup where
-        type Rs CreateLogGroup = CreateLogGroupResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull CreateLogGroupResponse'
-
-instance Hashable CreateLogGroup where
-
-instance NFData CreateLogGroup where
-
-instance ToHeaders CreateLogGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.CreateLogGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateLogGroup where
-        toJSON CreateLogGroup'{..}
-          = object
-              (catMaybes
-                 [("kmsKeyId" .=) <$> _clgKmsKeyId,
-                  ("tags" .=) <$> _clgTags,
-                  Just ("logGroupName" .= _clgLogGroupName)])
-
-instance ToPath CreateLogGroup where
-        toPath = const "/"
-
-instance ToQuery CreateLogGroup where
-        toQuery = const mempty
-
--- | /See:/ 'createLogGroupResponse' smart constructor.
-data CreateLogGroupResponse =
-  CreateLogGroupResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateLogGroupResponse' with the minimum fields required to make a request.
---
-createLogGroupResponse
-    :: CreateLogGroupResponse
-createLogGroupResponse = CreateLogGroupResponse'
-
-
-instance NFData CreateLogGroupResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs b/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/CreateLogStream.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# 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.CloudWatchLogs.CreateLogStream
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a log stream for the specified log group.
---
---
--- There is no limit on the number of log streams that you can create for a log group.
---
--- You must use the following guidelines when naming a log stream:
---
---     * Log stream names must be unique within the log group.
---
---     * Log stream names can be between 1 and 512 characters long.
---
---     * The ':' (colon) and '*' (asterisk) characters are not allowed.
---
---
---
-module Network.AWS.CloudWatchLogs.CreateLogStream
-    (
-    -- * Creating a Request
-      createLogStream
-    , CreateLogStream
-    -- * Request Lenses
-    , clsLogGroupName
-    , clsLogStreamName
-
-    -- * Destructuring the Response
-    , createLogStreamResponse
-    , CreateLogStreamResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createLogStream' smart constructor.
-data CreateLogStream = CreateLogStream'
-  { _clsLogGroupName  :: !Text
-  , _clsLogStreamName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateLogStream' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'clsLogGroupName' - The name of the log group.
---
--- * 'clsLogStreamName' - The name of the log stream.
-createLogStream
-    :: Text -- ^ 'clsLogGroupName'
-    -> Text -- ^ 'clsLogStreamName'
-    -> CreateLogStream
-createLogStream pLogGroupName_ pLogStreamName_ =
-  CreateLogStream'
-    {_clsLogGroupName = pLogGroupName_, _clsLogStreamName = pLogStreamName_}
-
-
--- | The name of the log group.
-clsLogGroupName :: Lens' CreateLogStream Text
-clsLogGroupName = lens _clsLogGroupName (\ s a -> s{_clsLogGroupName = a})
-
--- | The name of the log stream.
-clsLogStreamName :: Lens' CreateLogStream Text
-clsLogStreamName = lens _clsLogStreamName (\ s a -> s{_clsLogStreamName = a})
-
-instance AWSRequest CreateLogStream where
-        type Rs CreateLogStream = CreateLogStreamResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull CreateLogStreamResponse'
-
-instance Hashable CreateLogStream where
-
-instance NFData CreateLogStream where
-
-instance ToHeaders CreateLogStream where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.CreateLogStream" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateLogStream where
-        toJSON CreateLogStream'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _clsLogGroupName),
-                  Just ("logStreamName" .= _clsLogStreamName)])
-
-instance ToPath CreateLogStream where
-        toPath = const "/"
-
-instance ToQuery CreateLogStream where
-        toQuery = const mempty
-
--- | /See:/ 'createLogStreamResponse' smart constructor.
-data CreateLogStreamResponse =
-  CreateLogStreamResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateLogStreamResponse' with the minimum fields required to make a request.
---
-createLogStreamResponse
-    :: CreateLogStreamResponse
-createLogStreamResponse = CreateLogStreamResponse'
-
-
-instance NFData CreateLogStreamResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs b/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteDestination.hs
+++ /dev/null
@@ -1,109 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteDestination
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified destination, and eventually disables all the subscription filters that publish to it. This operation does not delete the physical resource encapsulated by the destination.
---
---
-module Network.AWS.CloudWatchLogs.DeleteDestination
-    (
-    -- * Creating a Request
-      deleteDestination
-    , DeleteDestination
-    -- * Request Lenses
-    , ddDestinationName
-
-    -- * Destructuring the Response
-    , deleteDestinationResponse
-    , DeleteDestinationResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteDestination' smart constructor.
-newtype DeleteDestination = DeleteDestination'
-  { _ddDestinationName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddDestinationName' - The name of the destination.
-deleteDestination
-    :: Text -- ^ 'ddDestinationName'
-    -> DeleteDestination
-deleteDestination pDestinationName_ =
-  DeleteDestination' {_ddDestinationName = pDestinationName_}
-
-
--- | The name of the destination.
-ddDestinationName :: Lens' DeleteDestination Text
-ddDestinationName = lens _ddDestinationName (\ s a -> s{_ddDestinationName = a})
-
-instance AWSRequest DeleteDestination where
-        type Rs DeleteDestination = DeleteDestinationResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DeleteDestinationResponse'
-
-instance Hashable DeleteDestination where
-
-instance NFData DeleteDestination where
-
-instance ToHeaders DeleteDestination where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteDestination" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteDestination where
-        toJSON DeleteDestination'{..}
-          = object
-              (catMaybes
-                 [Just ("destinationName" .= _ddDestinationName)])
-
-instance ToPath DeleteDestination where
-        toPath = const "/"
-
-instance ToQuery DeleteDestination where
-        toQuery = const mempty
-
--- | /See:/ 'deleteDestinationResponse' smart constructor.
-data DeleteDestinationResponse =
-  DeleteDestinationResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteDestinationResponse' with the minimum fields required to make a request.
---
-deleteDestinationResponse
-    :: DeleteDestinationResponse
-deleteDestinationResponse = DeleteDestinationResponse'
-
-
-instance NFData DeleteDestinationResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteLogGroup.hs
+++ /dev/null
@@ -1,109 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteLogGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified log group and permanently deletes all the archived log events associated with the log group.
---
---
-module Network.AWS.CloudWatchLogs.DeleteLogGroup
-    (
-    -- * Creating a Request
-      deleteLogGroup
-    , DeleteLogGroup
-    -- * Request Lenses
-    , dlgLogGroupName
-
-    -- * Destructuring the Response
-    , deleteLogGroupResponse
-    , DeleteLogGroupResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteLogGroup' smart constructor.
-newtype DeleteLogGroup = DeleteLogGroup'
-  { _dlgLogGroupName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteLogGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlgLogGroupName' - The name of the log group.
-deleteLogGroup
-    :: Text -- ^ 'dlgLogGroupName'
-    -> DeleteLogGroup
-deleteLogGroup pLogGroupName_ =
-  DeleteLogGroup' {_dlgLogGroupName = pLogGroupName_}
-
-
--- | The name of the log group.
-dlgLogGroupName :: Lens' DeleteLogGroup Text
-dlgLogGroupName = lens _dlgLogGroupName (\ s a -> s{_dlgLogGroupName = a})
-
-instance AWSRequest DeleteLogGroup where
-        type Rs DeleteLogGroup = DeleteLogGroupResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DeleteLogGroupResponse'
-
-instance Hashable DeleteLogGroup where
-
-instance NFData DeleteLogGroup where
-
-instance ToHeaders DeleteLogGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteLogGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteLogGroup where
-        toJSON DeleteLogGroup'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _dlgLogGroupName)])
-
-instance ToPath DeleteLogGroup where
-        toPath = const "/"
-
-instance ToQuery DeleteLogGroup where
-        toQuery = const mempty
-
--- | /See:/ 'deleteLogGroupResponse' smart constructor.
-data DeleteLogGroupResponse =
-  DeleteLogGroupResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteLogGroupResponse' with the minimum fields required to make a request.
---
-deleteLogGroupResponse
-    :: DeleteLogGroupResponse
-deleteLogGroupResponse = DeleteLogGroupResponse'
-
-
-instance NFData DeleteLogGroupResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs b/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteLogStream.hs
+++ /dev/null
@@ -1,120 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteLogStream
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified log stream and permanently deletes all the archived log events associated with the log stream.
---
---
-module Network.AWS.CloudWatchLogs.DeleteLogStream
-    (
-    -- * Creating a Request
-      deleteLogStream
-    , DeleteLogStream
-    -- * Request Lenses
-    , dlsLogGroupName
-    , dlsLogStreamName
-
-    -- * Destructuring the Response
-    , deleteLogStreamResponse
-    , DeleteLogStreamResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteLogStream' smart constructor.
-data DeleteLogStream = DeleteLogStream'
-  { _dlsLogGroupName  :: !Text
-  , _dlsLogStreamName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteLogStream' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlsLogGroupName' - The name of the log group.
---
--- * 'dlsLogStreamName' - The name of the log stream.
-deleteLogStream
-    :: Text -- ^ 'dlsLogGroupName'
-    -> Text -- ^ 'dlsLogStreamName'
-    -> DeleteLogStream
-deleteLogStream pLogGroupName_ pLogStreamName_ =
-  DeleteLogStream'
-    {_dlsLogGroupName = pLogGroupName_, _dlsLogStreamName = pLogStreamName_}
-
-
--- | The name of the log group.
-dlsLogGroupName :: Lens' DeleteLogStream Text
-dlsLogGroupName = lens _dlsLogGroupName (\ s a -> s{_dlsLogGroupName = a})
-
--- | The name of the log stream.
-dlsLogStreamName :: Lens' DeleteLogStream Text
-dlsLogStreamName = lens _dlsLogStreamName (\ s a -> s{_dlsLogStreamName = a})
-
-instance AWSRequest DeleteLogStream where
-        type Rs DeleteLogStream = DeleteLogStreamResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DeleteLogStreamResponse'
-
-instance Hashable DeleteLogStream where
-
-instance NFData DeleteLogStream where
-
-instance ToHeaders DeleteLogStream where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteLogStream" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteLogStream where
-        toJSON DeleteLogStream'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _dlsLogGroupName),
-                  Just ("logStreamName" .= _dlsLogStreamName)])
-
-instance ToPath DeleteLogStream where
-        toPath = const "/"
-
-instance ToQuery DeleteLogStream where
-        toQuery = const mempty
-
--- | /See:/ 'deleteLogStreamResponse' smart constructor.
-data DeleteLogStreamResponse =
-  DeleteLogStreamResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteLogStreamResponse' with the minimum fields required to make a request.
---
-deleteLogStreamResponse
-    :: DeleteLogStreamResponse
-deleteLogStreamResponse = DeleteLogStreamResponse'
-
-
-instance NFData DeleteLogStreamResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteMetricFilter.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteMetricFilter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified metric filter.
---
---
-module Network.AWS.CloudWatchLogs.DeleteMetricFilter
-    (
-    -- * Creating a Request
-      deleteMetricFilter
-    , DeleteMetricFilter
-    -- * Request Lenses
-    , delLogGroupName
-    , delFilterName
-
-    -- * Destructuring the Response
-    , deleteMetricFilterResponse
-    , DeleteMetricFilterResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteMetricFilter' smart constructor.
-data DeleteMetricFilter = DeleteMetricFilter'
-  { _delLogGroupName :: !Text
-  , _delFilterName   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteMetricFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'delLogGroupName' - The name of the log group.
---
--- * 'delFilterName' - The name of the metric filter.
-deleteMetricFilter
-    :: Text -- ^ 'delLogGroupName'
-    -> Text -- ^ 'delFilterName'
-    -> DeleteMetricFilter
-deleteMetricFilter pLogGroupName_ pFilterName_ =
-  DeleteMetricFilter'
-    {_delLogGroupName = pLogGroupName_, _delFilterName = pFilterName_}
-
-
--- | The name of the log group.
-delLogGroupName :: Lens' DeleteMetricFilter Text
-delLogGroupName = lens _delLogGroupName (\ s a -> s{_delLogGroupName = a})
-
--- | The name of the metric filter.
-delFilterName :: Lens' DeleteMetricFilter Text
-delFilterName = lens _delFilterName (\ s a -> s{_delFilterName = a})
-
-instance AWSRequest DeleteMetricFilter where
-        type Rs DeleteMetricFilter =
-             DeleteMetricFilterResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DeleteMetricFilterResponse'
-
-instance Hashable DeleteMetricFilter where
-
-instance NFData DeleteMetricFilter where
-
-instance ToHeaders DeleteMetricFilter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteMetricFilter" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteMetricFilter where
-        toJSON DeleteMetricFilter'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _delLogGroupName),
-                  Just ("filterName" .= _delFilterName)])
-
-instance ToPath DeleteMetricFilter where
-        toPath = const "/"
-
-instance ToQuery DeleteMetricFilter where
-        toQuery = const mempty
-
--- | /See:/ 'deleteMetricFilterResponse' smart constructor.
-data DeleteMetricFilterResponse =
-  DeleteMetricFilterResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteMetricFilterResponse' with the minimum fields required to make a request.
---
-deleteMetricFilterResponse
-    :: DeleteMetricFilterResponse
-deleteMetricFilterResponse = DeleteMetricFilterResponse'
-
-
-instance NFData DeleteMetricFilterResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteResourcePolicy.hs b/gen/Network/AWS/CloudWatchLogs/DeleteResourcePolicy.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteResourcePolicy.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteResourcePolicy
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a resource policy from this account. This revokes the access of the identities in that policy to put log events to this account.
---
---
-module Network.AWS.CloudWatchLogs.DeleteResourcePolicy
-    (
-    -- * Creating a Request
-      deleteResourcePolicy
-    , DeleteResourcePolicy
-    -- * Request Lenses
-    , drpPolicyName
-
-    -- * Destructuring the Response
-    , deleteResourcePolicyResponse
-    , DeleteResourcePolicyResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteResourcePolicy' smart constructor.
-newtype DeleteResourcePolicy = DeleteResourcePolicy'
-  { _drpPolicyName :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteResourcePolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drpPolicyName' - The name of the policy to be revoked. This parameter is required.
-deleteResourcePolicy
-    :: DeleteResourcePolicy
-deleteResourcePolicy = DeleteResourcePolicy' {_drpPolicyName = Nothing}
-
-
--- | The name of the policy to be revoked. This parameter is required.
-drpPolicyName :: Lens' DeleteResourcePolicy (Maybe Text)
-drpPolicyName = lens _drpPolicyName (\ s a -> s{_drpPolicyName = a})
-
-instance AWSRequest DeleteResourcePolicy where
-        type Rs DeleteResourcePolicy =
-             DeleteResourcePolicyResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DeleteResourcePolicyResponse'
-
-instance Hashable DeleteResourcePolicy where
-
-instance NFData DeleteResourcePolicy where
-
-instance ToHeaders DeleteResourcePolicy where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteResourcePolicy" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteResourcePolicy where
-        toJSON DeleteResourcePolicy'{..}
-          = object
-              (catMaybes [("policyName" .=) <$> _drpPolicyName])
-
-instance ToPath DeleteResourcePolicy where
-        toPath = const "/"
-
-instance ToQuery DeleteResourcePolicy where
-        toQuery = const mempty
-
--- | /See:/ 'deleteResourcePolicyResponse' smart constructor.
-data DeleteResourcePolicyResponse =
-  DeleteResourcePolicyResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteResourcePolicyResponse' with the minimum fields required to make a request.
---
-deleteResourcePolicyResponse
-    :: DeleteResourcePolicyResponse
-deleteResourcePolicyResponse = DeleteResourcePolicyResponse'
-
-
-instance NFData DeleteResourcePolicyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs b/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteRetentionPolicy.hs
+++ /dev/null
@@ -1,113 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteRetentionPolicy
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified retention policy.
---
---
--- Log events do not expire if they belong to log groups without a retention policy.
---
-module Network.AWS.CloudWatchLogs.DeleteRetentionPolicy
-    (
-    -- * Creating a Request
-      deleteRetentionPolicy
-    , DeleteRetentionPolicy
-    -- * Request Lenses
-    , drpLogGroupName
-
-    -- * Destructuring the Response
-    , deleteRetentionPolicyResponse
-    , DeleteRetentionPolicyResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteRetentionPolicy' smart constructor.
-newtype DeleteRetentionPolicy = DeleteRetentionPolicy'
-  { _drpLogGroupName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteRetentionPolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drpLogGroupName' - The name of the log group.
-deleteRetentionPolicy
-    :: Text -- ^ 'drpLogGroupName'
-    -> DeleteRetentionPolicy
-deleteRetentionPolicy pLogGroupName_ =
-  DeleteRetentionPolicy' {_drpLogGroupName = pLogGroupName_}
-
-
--- | The name of the log group.
-drpLogGroupName :: Lens' DeleteRetentionPolicy Text
-drpLogGroupName = lens _drpLogGroupName (\ s a -> s{_drpLogGroupName = a})
-
-instance AWSRequest DeleteRetentionPolicy where
-        type Rs DeleteRetentionPolicy =
-             DeleteRetentionPolicyResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DeleteRetentionPolicyResponse'
-
-instance Hashable DeleteRetentionPolicy where
-
-instance NFData DeleteRetentionPolicy where
-
-instance ToHeaders DeleteRetentionPolicy where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteRetentionPolicy" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteRetentionPolicy where
-        toJSON DeleteRetentionPolicy'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _drpLogGroupName)])
-
-instance ToPath DeleteRetentionPolicy where
-        toPath = const "/"
-
-instance ToQuery DeleteRetentionPolicy where
-        toQuery = const mempty
-
--- | /See:/ 'deleteRetentionPolicyResponse' smart constructor.
-data DeleteRetentionPolicyResponse =
-  DeleteRetentionPolicyResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteRetentionPolicyResponse' with the minimum fields required to make a request.
---
-deleteRetentionPolicyResponse
-    :: DeleteRetentionPolicyResponse
-deleteRetentionPolicyResponse = DeleteRetentionPolicyResponse'
-
-
-instance NFData DeleteRetentionPolicyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs b/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DeleteSubscriptionFilter.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# 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.CloudWatchLogs.DeleteSubscriptionFilter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified subscription filter.
---
---
-module Network.AWS.CloudWatchLogs.DeleteSubscriptionFilter
-    (
-    -- * Creating a Request
-      deleteSubscriptionFilter
-    , DeleteSubscriptionFilter
-    -- * Request Lenses
-    , dLogGroupName
-    , dFilterName
-
-    -- * Destructuring the Response
-    , deleteSubscriptionFilterResponse
-    , DeleteSubscriptionFilterResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteSubscriptionFilter' smart constructor.
-data DeleteSubscriptionFilter = DeleteSubscriptionFilter'
-  { _dLogGroupName :: !Text
-  , _dFilterName   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteSubscriptionFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dLogGroupName' - The name of the log group.
---
--- * 'dFilterName' - The name of the subscription filter.
-deleteSubscriptionFilter
-    :: Text -- ^ 'dLogGroupName'
-    -> Text -- ^ 'dFilterName'
-    -> DeleteSubscriptionFilter
-deleteSubscriptionFilter pLogGroupName_ pFilterName_ =
-  DeleteSubscriptionFilter'
-    {_dLogGroupName = pLogGroupName_, _dFilterName = pFilterName_}
-
-
--- | The name of the log group.
-dLogGroupName :: Lens' DeleteSubscriptionFilter Text
-dLogGroupName = lens _dLogGroupName (\ s a -> s{_dLogGroupName = a})
-
--- | The name of the subscription filter.
-dFilterName :: Lens' DeleteSubscriptionFilter Text
-dFilterName = lens _dFilterName (\ s a -> s{_dFilterName = a})
-
-instance AWSRequest DeleteSubscriptionFilter where
-        type Rs DeleteSubscriptionFilter =
-             DeleteSubscriptionFilterResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveNull DeleteSubscriptionFilterResponse'
-
-instance Hashable DeleteSubscriptionFilter where
-
-instance NFData DeleteSubscriptionFilter where
-
-instance ToHeaders DeleteSubscriptionFilter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DeleteSubscriptionFilter" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteSubscriptionFilter where
-        toJSON DeleteSubscriptionFilter'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _dLogGroupName),
-                  Just ("filterName" .= _dFilterName)])
-
-instance ToPath DeleteSubscriptionFilter where
-        toPath = const "/"
-
-instance ToQuery DeleteSubscriptionFilter where
-        toQuery = const mempty
-
--- | /See:/ 'deleteSubscriptionFilterResponse' smart constructor.
-data DeleteSubscriptionFilterResponse =
-  DeleteSubscriptionFilterResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteSubscriptionFilterResponse' with the minimum fields required to make a request.
---
-deleteSubscriptionFilterResponse
-    :: DeleteSubscriptionFilterResponse
-deleteSubscriptionFilterResponse = DeleteSubscriptionFilterResponse'
-
-
-instance NFData DeleteSubscriptionFilterResponse
-         where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs b/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeDestinations.hs
+++ /dev/null
@@ -1,179 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeDestinations
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists all your destinations. The results are ASCII-sorted by destination name.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.CloudWatchLogs.DescribeDestinations
-    (
-    -- * Creating a Request
-      describeDestinations
-    , DescribeDestinations
-    -- * Request Lenses
-    , ddNextToken
-    , ddLimit
-    , ddDestinationNamePrefix
-
-    -- * Destructuring the Response
-    , describeDestinationsResponse
-    , DescribeDestinationsResponse
-    -- * Response Lenses
-    , ddrsNextToken
-    , ddrsDestinations
-    , ddrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeDestinations' smart constructor.
-data DescribeDestinations = DescribeDestinations'
-  { _ddNextToken             :: !(Maybe Text)
-  , _ddLimit                 :: !(Maybe Nat)
-  , _ddDestinationNamePrefix :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeDestinations' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'ddLimit' - The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
---
--- * 'ddDestinationNamePrefix' - The prefix to match. If you don't specify a value, no prefix filter is applied.
-describeDestinations
-    :: DescribeDestinations
-describeDestinations =
-  DescribeDestinations'
-    { _ddNextToken = Nothing
-    , _ddLimit = Nothing
-    , _ddDestinationNamePrefix = Nothing
-    }
-
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-ddNextToken :: Lens' DescribeDestinations (Maybe Text)
-ddNextToken = lens _ddNextToken (\ s a -> s{_ddNextToken = a})
-
--- | The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-ddLimit :: Lens' DescribeDestinations (Maybe Natural)
-ddLimit = lens _ddLimit (\ s a -> s{_ddLimit = a}) . mapping _Nat
-
--- | The prefix to match. If you don't specify a value, no prefix filter is applied.
-ddDestinationNamePrefix :: Lens' DescribeDestinations (Maybe Text)
-ddDestinationNamePrefix = lens _ddDestinationNamePrefix (\ s a -> s{_ddDestinationNamePrefix = a})
-
-instance AWSPager DescribeDestinations where
-        page rq rs
-          | stop (rs ^. ddrsNextToken) = Nothing
-          | stop (rs ^. ddrsDestinations) = Nothing
-          | otherwise =
-            Just $ rq & ddNextToken .~ rs ^. ddrsNextToken
-
-instance AWSRequest DescribeDestinations where
-        type Rs DescribeDestinations =
-             DescribeDestinationsResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeDestinationsResponse' <$>
-                   (x .?> "nextToken") <*>
-                     (x .?> "destinations" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeDestinations where
-
-instance NFData DescribeDestinations where
-
-instance ToHeaders DescribeDestinations where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeDestinations" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeDestinations where
-        toJSON DescribeDestinations'{..}
-          = object
-              (catMaybes
-                 [("nextToken" .=) <$> _ddNextToken,
-                  ("limit" .=) <$> _ddLimit,
-                  ("DestinationNamePrefix" .=) <$>
-                    _ddDestinationNamePrefix])
-
-instance ToPath DescribeDestinations where
-        toPath = const "/"
-
-instance ToQuery DescribeDestinations where
-        toQuery = const mempty
-
--- | /See:/ 'describeDestinationsResponse' smart constructor.
-data DescribeDestinationsResponse = DescribeDestinationsResponse'
-  { _ddrsNextToken      :: !(Maybe Text)
-  , _ddrsDestinations   :: !(Maybe [Destination])
-  , _ddrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeDestinationsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddrsNextToken' - Undocumented member.
---
--- * 'ddrsDestinations' - The destinations.
---
--- * 'ddrsResponseStatus' - -- | The response status code.
-describeDestinationsResponse
-    :: Int -- ^ 'ddrsResponseStatus'
-    -> DescribeDestinationsResponse
-describeDestinationsResponse pResponseStatus_ =
-  DescribeDestinationsResponse'
-    { _ddrsNextToken = Nothing
-    , _ddrsDestinations = Nothing
-    , _ddrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-ddrsNextToken :: Lens' DescribeDestinationsResponse (Maybe Text)
-ddrsNextToken = lens _ddrsNextToken (\ s a -> s{_ddrsNextToken = a})
-
--- | The destinations.
-ddrsDestinations :: Lens' DescribeDestinationsResponse [Destination]
-ddrsDestinations = lens _ddrsDestinations (\ s a -> s{_ddrsDestinations = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-ddrsResponseStatus :: Lens' DescribeDestinationsResponse Int
-ddrsResponseStatus = lens _ddrsResponseStatus (\ s a -> s{_ddrsResponseStatus = a})
-
-instance NFData DescribeDestinationsResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeExportTasks.hs b/gen/Network/AWS/CloudWatchLogs/DescribeExportTasks.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeExportTasks.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeExportTasks
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the specified export tasks. You can list all your export tasks or filter the results based on task ID or task status.
---
---
-module Network.AWS.CloudWatchLogs.DescribeExportTasks
-    (
-    -- * Creating a Request
-      describeExportTasks
-    , DescribeExportTasks
-    -- * Request Lenses
-    , detTaskId
-    , detNextToken
-    , detLimit
-    , detStatusCode
-
-    -- * Destructuring the Response
-    , describeExportTasksResponse
-    , DescribeExportTasksResponse
-    -- * Response Lenses
-    , detrsNextToken
-    , detrsExportTasks
-    , detrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeExportTasks' smart constructor.
-data DescribeExportTasks = DescribeExportTasks'
-  { _detTaskId     :: !(Maybe Text)
-  , _detNextToken  :: !(Maybe Text)
-  , _detLimit      :: !(Maybe Nat)
-  , _detStatusCode :: !(Maybe ExportTaskStatusCode)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeExportTasks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'detTaskId' - The ID of the export task. Specifying a task ID filters the results to zero or one export tasks.
---
--- * 'detNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'detLimit' - The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
---
--- * 'detStatusCode' - The status code of the export task. Specifying a status code filters the results to zero or more export tasks.
-describeExportTasks
-    :: DescribeExportTasks
-describeExportTasks =
-  DescribeExportTasks'
-    { _detTaskId = Nothing
-    , _detNextToken = Nothing
-    , _detLimit = Nothing
-    , _detStatusCode = Nothing
-    }
-
-
--- | The ID of the export task. Specifying a task ID filters the results to zero or one export tasks.
-detTaskId :: Lens' DescribeExportTasks (Maybe Text)
-detTaskId = lens _detTaskId (\ s a -> s{_detTaskId = a})
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-detNextToken :: Lens' DescribeExportTasks (Maybe Text)
-detNextToken = lens _detNextToken (\ s a -> s{_detNextToken = a})
-
--- | The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-detLimit :: Lens' DescribeExportTasks (Maybe Natural)
-detLimit = lens _detLimit (\ s a -> s{_detLimit = a}) . mapping _Nat
-
--- | The status code of the export task. Specifying a status code filters the results to zero or more export tasks.
-detStatusCode :: Lens' DescribeExportTasks (Maybe ExportTaskStatusCode)
-detStatusCode = lens _detStatusCode (\ s a -> s{_detStatusCode = a})
-
-instance AWSRequest DescribeExportTasks where
-        type Rs DescribeExportTasks =
-             DescribeExportTasksResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeExportTasksResponse' <$>
-                   (x .?> "nextToken") <*>
-                     (x .?> "exportTasks" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeExportTasks where
-
-instance NFData DescribeExportTasks where
-
-instance ToHeaders DescribeExportTasks where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeExportTasks" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeExportTasks where
-        toJSON DescribeExportTasks'{..}
-          = object
-              (catMaybes
-                 [("taskId" .=) <$> _detTaskId,
-                  ("nextToken" .=) <$> _detNextToken,
-                  ("limit" .=) <$> _detLimit,
-                  ("statusCode" .=) <$> _detStatusCode])
-
-instance ToPath DescribeExportTasks where
-        toPath = const "/"
-
-instance ToQuery DescribeExportTasks where
-        toQuery = const mempty
-
--- | /See:/ 'describeExportTasksResponse' smart constructor.
-data DescribeExportTasksResponse = DescribeExportTasksResponse'
-  { _detrsNextToken      :: !(Maybe Text)
-  , _detrsExportTasks    :: !(Maybe [ExportTask])
-  , _detrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeExportTasksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'detrsNextToken' - Undocumented member.
---
--- * 'detrsExportTasks' - The export tasks.
---
--- * 'detrsResponseStatus' - -- | The response status code.
-describeExportTasksResponse
-    :: Int -- ^ 'detrsResponseStatus'
-    -> DescribeExportTasksResponse
-describeExportTasksResponse pResponseStatus_ =
-  DescribeExportTasksResponse'
-    { _detrsNextToken = Nothing
-    , _detrsExportTasks = Nothing
-    , _detrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-detrsNextToken :: Lens' DescribeExportTasksResponse (Maybe Text)
-detrsNextToken = lens _detrsNextToken (\ s a -> s{_detrsNextToken = a})
-
--- | The export tasks.
-detrsExportTasks :: Lens' DescribeExportTasksResponse [ExportTask]
-detrsExportTasks = lens _detrsExportTasks (\ s a -> s{_detrsExportTasks = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-detrsResponseStatus :: Lens' DescribeExportTasksResponse Int
-detrsResponseStatus = lens _detrsResponseStatus (\ s a -> s{_detrsResponseStatus = a})
-
-instance NFData DescribeExportTasksResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs b/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeLogGroups.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeLogGroups
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the specified log groups. You can list all your log groups or filter the results by prefix. The results are ASCII-sorted by log group name.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.CloudWatchLogs.DescribeLogGroups
-    (
-    -- * Creating a Request
-      describeLogGroups
-    , DescribeLogGroups
-    -- * Request Lenses
-    , dlgLogGroupNamePrefix
-    , dlgNextToken
-    , dlgLimit
-
-    -- * Destructuring the Response
-    , describeLogGroupsResponse
-    , DescribeLogGroupsResponse
-    -- * Response Lenses
-    , dlgrsLogGroups
-    , dlgrsNextToken
-    , dlgrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeLogGroups' smart constructor.
-data DescribeLogGroups = DescribeLogGroups'
-  { _dlgLogGroupNamePrefix :: !(Maybe Text)
-  , _dlgNextToken          :: !(Maybe Text)
-  , _dlgLimit              :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeLogGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlgLogGroupNamePrefix' - The prefix to match.
---
--- * 'dlgNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'dlgLimit' - The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-describeLogGroups
-    :: DescribeLogGroups
-describeLogGroups =
-  DescribeLogGroups'
-    { _dlgLogGroupNamePrefix = Nothing
-    , _dlgNextToken = Nothing
-    , _dlgLimit = Nothing
-    }
-
-
--- | The prefix to match.
-dlgLogGroupNamePrefix :: Lens' DescribeLogGroups (Maybe Text)
-dlgLogGroupNamePrefix = lens _dlgLogGroupNamePrefix (\ s a -> s{_dlgLogGroupNamePrefix = a})
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-dlgNextToken :: Lens' DescribeLogGroups (Maybe Text)
-dlgNextToken = lens _dlgNextToken (\ s a -> s{_dlgNextToken = a})
-
--- | The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-dlgLimit :: Lens' DescribeLogGroups (Maybe Natural)
-dlgLimit = lens _dlgLimit (\ s a -> s{_dlgLimit = a}) . mapping _Nat
-
-instance AWSPager DescribeLogGroups where
-        page rq rs
-          | stop (rs ^. dlgrsNextToken) = Nothing
-          | stop (rs ^. dlgrsLogGroups) = Nothing
-          | otherwise =
-            Just $ rq & dlgNextToken .~ rs ^. dlgrsNextToken
-
-instance AWSRequest DescribeLogGroups where
-        type Rs DescribeLogGroups = DescribeLogGroupsResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeLogGroupsResponse' <$>
-                   (x .?> "logGroups" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeLogGroups where
-
-instance NFData DescribeLogGroups where
-
-instance ToHeaders DescribeLogGroups where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeLogGroups" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeLogGroups where
-        toJSON DescribeLogGroups'{..}
-          = object
-              (catMaybes
-                 [("logGroupNamePrefix" .=) <$>
-                    _dlgLogGroupNamePrefix,
-                  ("nextToken" .=) <$> _dlgNextToken,
-                  ("limit" .=) <$> _dlgLimit])
-
-instance ToPath DescribeLogGroups where
-        toPath = const "/"
-
-instance ToQuery DescribeLogGroups where
-        toQuery = const mempty
-
--- | /See:/ 'describeLogGroupsResponse' smart constructor.
-data DescribeLogGroupsResponse = DescribeLogGroupsResponse'
-  { _dlgrsLogGroups      :: !(Maybe [LogGroup])
-  , _dlgrsNextToken      :: !(Maybe Text)
-  , _dlgrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeLogGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlgrsLogGroups' - The log groups.
---
--- * 'dlgrsNextToken' - Undocumented member.
---
--- * 'dlgrsResponseStatus' - -- | The response status code.
-describeLogGroupsResponse
-    :: Int -- ^ 'dlgrsResponseStatus'
-    -> DescribeLogGroupsResponse
-describeLogGroupsResponse pResponseStatus_ =
-  DescribeLogGroupsResponse'
-    { _dlgrsLogGroups = Nothing
-    , _dlgrsNextToken = Nothing
-    , _dlgrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The log groups.
-dlgrsLogGroups :: Lens' DescribeLogGroupsResponse [LogGroup]
-dlgrsLogGroups = lens _dlgrsLogGroups (\ s a -> s{_dlgrsLogGroups = a}) . _Default . _Coerce
-
--- | Undocumented member.
-dlgrsNextToken :: Lens' DescribeLogGroupsResponse (Maybe Text)
-dlgrsNextToken = lens _dlgrsNextToken (\ s a -> s{_dlgrsNextToken = a})
-
--- | -- | The response status code.
-dlgrsResponseStatus :: Lens' DescribeLogGroupsResponse Int
-dlgrsResponseStatus = lens _dlgrsResponseStatus (\ s a -> s{_dlgrsResponseStatus = a})
-
-instance NFData DescribeLogGroupsResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs b/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeLogStreams.hs
+++ /dev/null
@@ -1,212 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeLogStreams
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the log streams for the specified log group. You can list all the log streams or filter the results by prefix. You can also control how the results are ordered.
---
---
--- This operation has a limit of five transactions per second, after which transactions are throttled.
---
---
--- This operation returns paginated results.
-module Network.AWS.CloudWatchLogs.DescribeLogStreams
-    (
-    -- * Creating a Request
-      describeLogStreams
-    , DescribeLogStreams
-    -- * Request Lenses
-    , dlssOrderBy
-    , dlssDescending
-    , dlssNextToken
-    , dlssLogStreamNamePrefix
-    , dlssLimit
-    , dlssLogGroupName
-
-    -- * Destructuring the Response
-    , describeLogStreamsResponse
-    , DescribeLogStreamsResponse
-    -- * Response Lenses
-    , dlsrsNextToken
-    , dlsrsLogStreams
-    , dlsrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeLogStreams' smart constructor.
-data DescribeLogStreams = DescribeLogStreams'
-  { _dlssOrderBy             :: !(Maybe OrderBy)
-  , _dlssDescending          :: !(Maybe Bool)
-  , _dlssNextToken           :: !(Maybe Text)
-  , _dlssLogStreamNamePrefix :: !(Maybe Text)
-  , _dlssLimit               :: !(Maybe Nat)
-  , _dlssLogGroupName        :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeLogStreams' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlssOrderBy' - If the value is @LogStreamName@ , the results are ordered by log stream name. If the value is @LastEventTime@ , the results are ordered by the event time. The default value is @LogStreamName@ . If you order the results by event time, you cannot specify the @logStreamNamePrefix@ parameter. lastEventTimestamp represents the time of the most recent log event in the log stream in CloudWatch Logs. This number is expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. lastEventTimeStamp updates on an eventual consistency basis. It typically updates in less than an hour from ingestion, but may take longer in some rare situations.
---
--- * 'dlssDescending' - If the value is true, results are returned in descending order. If the value is to false, results are returned in ascending order. The default value is false.
---
--- * 'dlssNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'dlssLogStreamNamePrefix' - The prefix to match. iIf @orderBy@ is @LastEventTime@ ,you cannot specify this parameter.
---
--- * 'dlssLimit' - The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
---
--- * 'dlssLogGroupName' - The name of the log group.
-describeLogStreams
-    :: Text -- ^ 'dlssLogGroupName'
-    -> DescribeLogStreams
-describeLogStreams pLogGroupName_ =
-  DescribeLogStreams'
-    { _dlssOrderBy = Nothing
-    , _dlssDescending = Nothing
-    , _dlssNextToken = Nothing
-    , _dlssLogStreamNamePrefix = Nothing
-    , _dlssLimit = Nothing
-    , _dlssLogGroupName = pLogGroupName_
-    }
-
-
--- | If the value is @LogStreamName@ , the results are ordered by log stream name. If the value is @LastEventTime@ , the results are ordered by the event time. The default value is @LogStreamName@ . If you order the results by event time, you cannot specify the @logStreamNamePrefix@ parameter. lastEventTimestamp represents the time of the most recent log event in the log stream in CloudWatch Logs. This number is expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. lastEventTimeStamp updates on an eventual consistency basis. It typically updates in less than an hour from ingestion, but may take longer in some rare situations.
-dlssOrderBy :: Lens' DescribeLogStreams (Maybe OrderBy)
-dlssOrderBy = lens _dlssOrderBy (\ s a -> s{_dlssOrderBy = a})
-
--- | If the value is true, results are returned in descending order. If the value is to false, results are returned in ascending order. The default value is false.
-dlssDescending :: Lens' DescribeLogStreams (Maybe Bool)
-dlssDescending = lens _dlssDescending (\ s a -> s{_dlssDescending = a})
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-dlssNextToken :: Lens' DescribeLogStreams (Maybe Text)
-dlssNextToken = lens _dlssNextToken (\ s a -> s{_dlssNextToken = a})
-
--- | The prefix to match. iIf @orderBy@ is @LastEventTime@ ,you cannot specify this parameter.
-dlssLogStreamNamePrefix :: Lens' DescribeLogStreams (Maybe Text)
-dlssLogStreamNamePrefix = lens _dlssLogStreamNamePrefix (\ s a -> s{_dlssLogStreamNamePrefix = a})
-
--- | The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-dlssLimit :: Lens' DescribeLogStreams (Maybe Natural)
-dlssLimit = lens _dlssLimit (\ s a -> s{_dlssLimit = a}) . mapping _Nat
-
--- | The name of the log group.
-dlssLogGroupName :: Lens' DescribeLogStreams Text
-dlssLogGroupName = lens _dlssLogGroupName (\ s a -> s{_dlssLogGroupName = a})
-
-instance AWSPager DescribeLogStreams where
-        page rq rs
-          | stop (rs ^. dlsrsNextToken) = Nothing
-          | stop (rs ^. dlsrsLogStreams) = Nothing
-          | otherwise =
-            Just $ rq & dlssNextToken .~ rs ^. dlsrsNextToken
-
-instance AWSRequest DescribeLogStreams where
-        type Rs DescribeLogStreams =
-             DescribeLogStreamsResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeLogStreamsResponse' <$>
-                   (x .?> "nextToken") <*>
-                     (x .?> "logStreams" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeLogStreams where
-
-instance NFData DescribeLogStreams where
-
-instance ToHeaders DescribeLogStreams where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeLogStreams" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeLogStreams where
-        toJSON DescribeLogStreams'{..}
-          = object
-              (catMaybes
-                 [("orderBy" .=) <$> _dlssOrderBy,
-                  ("descending" .=) <$> _dlssDescending,
-                  ("nextToken" .=) <$> _dlssNextToken,
-                  ("logStreamNamePrefix" .=) <$>
-                    _dlssLogStreamNamePrefix,
-                  ("limit" .=) <$> _dlssLimit,
-                  Just ("logGroupName" .= _dlssLogGroupName)])
-
-instance ToPath DescribeLogStreams where
-        toPath = const "/"
-
-instance ToQuery DescribeLogStreams where
-        toQuery = const mempty
-
--- | /See:/ 'describeLogStreamsResponse' smart constructor.
-data DescribeLogStreamsResponse = DescribeLogStreamsResponse'
-  { _dlsrsNextToken      :: !(Maybe Text)
-  , _dlsrsLogStreams     :: !(Maybe [LogStream])
-  , _dlsrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeLogStreamsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dlsrsNextToken' - Undocumented member.
---
--- * 'dlsrsLogStreams' - The log streams.
---
--- * 'dlsrsResponseStatus' - -- | The response status code.
-describeLogStreamsResponse
-    :: Int -- ^ 'dlsrsResponseStatus'
-    -> DescribeLogStreamsResponse
-describeLogStreamsResponse pResponseStatus_ =
-  DescribeLogStreamsResponse'
-    { _dlsrsNextToken = Nothing
-    , _dlsrsLogStreams = Nothing
-    , _dlsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-dlsrsNextToken :: Lens' DescribeLogStreamsResponse (Maybe Text)
-dlsrsNextToken = lens _dlsrsNextToken (\ s a -> s{_dlsrsNextToken = a})
-
--- | The log streams.
-dlsrsLogStreams :: Lens' DescribeLogStreamsResponse [LogStream]
-dlsrsLogStreams = lens _dlsrsLogStreams (\ s a -> s{_dlsrsLogStreams = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dlsrsResponseStatus :: Lens' DescribeLogStreamsResponse Int
-dlsrsResponseStatus = lens _dlsrsResponseStatus (\ s a -> s{_dlsrsResponseStatus = a})
-
-instance NFData DescribeLogStreamsResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs b/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeMetricFilters.hs
+++ /dev/null
@@ -1,209 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeMetricFilters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the specified metric filters. You can list all the metric filters or filter the results by log name, prefix, metric name, or metric namespace. The results are ASCII-sorted by filter name.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.CloudWatchLogs.DescribeMetricFilters
-    (
-    -- * Creating a Request
-      describeMetricFilters
-    , DescribeMetricFilters
-    -- * Request Lenses
-    , dmfFilterNamePrefix
-    , dmfMetricName
-    , dmfLogGroupName
-    , dmfNextToken
-    , dmfMetricNamespace
-    , dmfLimit
-
-    -- * Destructuring the Response
-    , describeMetricFiltersResponse
-    , DescribeMetricFiltersResponse
-    -- * Response Lenses
-    , dmfrsNextToken
-    , dmfrsMetricFilters
-    , dmfrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeMetricFilters' smart constructor.
-data DescribeMetricFilters = DescribeMetricFilters'
-  { _dmfFilterNamePrefix :: !(Maybe Text)
-  , _dmfMetricName       :: !(Maybe Text)
-  , _dmfLogGroupName     :: !(Maybe Text)
-  , _dmfNextToken        :: !(Maybe Text)
-  , _dmfMetricNamespace  :: !(Maybe Text)
-  , _dmfLimit            :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeMetricFilters' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmfFilterNamePrefix' - The prefix to match.
---
--- * 'dmfMetricName' - Undocumented member.
---
--- * 'dmfLogGroupName' - The name of the log group.
---
--- * 'dmfNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'dmfMetricNamespace' - The namespace of the CloudWatch metric.
---
--- * 'dmfLimit' - The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-describeMetricFilters
-    :: DescribeMetricFilters
-describeMetricFilters =
-  DescribeMetricFilters'
-    { _dmfFilterNamePrefix = Nothing
-    , _dmfMetricName = Nothing
-    , _dmfLogGroupName = Nothing
-    , _dmfNextToken = Nothing
-    , _dmfMetricNamespace = Nothing
-    , _dmfLimit = Nothing
-    }
-
-
--- | The prefix to match.
-dmfFilterNamePrefix :: Lens' DescribeMetricFilters (Maybe Text)
-dmfFilterNamePrefix = lens _dmfFilterNamePrefix (\ s a -> s{_dmfFilterNamePrefix = a})
-
--- | Undocumented member.
-dmfMetricName :: Lens' DescribeMetricFilters (Maybe Text)
-dmfMetricName = lens _dmfMetricName (\ s a -> s{_dmfMetricName = a})
-
--- | The name of the log group.
-dmfLogGroupName :: Lens' DescribeMetricFilters (Maybe Text)
-dmfLogGroupName = lens _dmfLogGroupName (\ s a -> s{_dmfLogGroupName = a})
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-dmfNextToken :: Lens' DescribeMetricFilters (Maybe Text)
-dmfNextToken = lens _dmfNextToken (\ s a -> s{_dmfNextToken = a})
-
--- | The namespace of the CloudWatch metric.
-dmfMetricNamespace :: Lens' DescribeMetricFilters (Maybe Text)
-dmfMetricNamespace = lens _dmfMetricNamespace (\ s a -> s{_dmfMetricNamespace = a})
-
--- | The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-dmfLimit :: Lens' DescribeMetricFilters (Maybe Natural)
-dmfLimit = lens _dmfLimit (\ s a -> s{_dmfLimit = a}) . mapping _Nat
-
-instance AWSPager DescribeMetricFilters where
-        page rq rs
-          | stop (rs ^. dmfrsNextToken) = Nothing
-          | stop (rs ^. dmfrsMetricFilters) = Nothing
-          | otherwise =
-            Just $ rq & dmfNextToken .~ rs ^. dmfrsNextToken
-
-instance AWSRequest DescribeMetricFilters where
-        type Rs DescribeMetricFilters =
-             DescribeMetricFiltersResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeMetricFiltersResponse' <$>
-                   (x .?> "nextToken") <*>
-                     (x .?> "metricFilters" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeMetricFilters where
-
-instance NFData DescribeMetricFilters where
-
-instance ToHeaders DescribeMetricFilters where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeMetricFilters" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeMetricFilters where
-        toJSON DescribeMetricFilters'{..}
-          = object
-              (catMaybes
-                 [("filterNamePrefix" .=) <$> _dmfFilterNamePrefix,
-                  ("metricName" .=) <$> _dmfMetricName,
-                  ("logGroupName" .=) <$> _dmfLogGroupName,
-                  ("nextToken" .=) <$> _dmfNextToken,
-                  ("metricNamespace" .=) <$> _dmfMetricNamespace,
-                  ("limit" .=) <$> _dmfLimit])
-
-instance ToPath DescribeMetricFilters where
-        toPath = const "/"
-
-instance ToQuery DescribeMetricFilters where
-        toQuery = const mempty
-
--- | /See:/ 'describeMetricFiltersResponse' smart constructor.
-data DescribeMetricFiltersResponse = DescribeMetricFiltersResponse'
-  { _dmfrsNextToken      :: !(Maybe Text)
-  , _dmfrsMetricFilters  :: !(Maybe [MetricFilter])
-  , _dmfrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeMetricFiltersResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmfrsNextToken' - Undocumented member.
---
--- * 'dmfrsMetricFilters' - The metric filters.
---
--- * 'dmfrsResponseStatus' - -- | The response status code.
-describeMetricFiltersResponse
-    :: Int -- ^ 'dmfrsResponseStatus'
-    -> DescribeMetricFiltersResponse
-describeMetricFiltersResponse pResponseStatus_ =
-  DescribeMetricFiltersResponse'
-    { _dmfrsNextToken = Nothing
-    , _dmfrsMetricFilters = Nothing
-    , _dmfrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-dmfrsNextToken :: Lens' DescribeMetricFiltersResponse (Maybe Text)
-dmfrsNextToken = lens _dmfrsNextToken (\ s a -> s{_dmfrsNextToken = a})
-
--- | The metric filters.
-dmfrsMetricFilters :: Lens' DescribeMetricFiltersResponse [MetricFilter]
-dmfrsMetricFilters = lens _dmfrsMetricFilters (\ s a -> s{_dmfrsMetricFilters = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dmfrsResponseStatus :: Lens' DescribeMetricFiltersResponse Int
-dmfrsResponseStatus = lens _dmfrsResponseStatus (\ s a -> s{_dmfrsResponseStatus = a})
-
-instance NFData DescribeMetricFiltersResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeResourcePolicies.hs b/gen/Network/AWS/CloudWatchLogs/DescribeResourcePolicies.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeResourcePolicies.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeResourcePolicies
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the resource policies in this account.
---
---
-module Network.AWS.CloudWatchLogs.DescribeResourcePolicies
-    (
-    -- * Creating a Request
-      describeResourcePolicies
-    , DescribeResourcePolicies
-    -- * Request Lenses
-    , drpNextToken
-    , drpLimit
-
-    -- * Destructuring the Response
-    , describeResourcePoliciesResponse
-    , DescribeResourcePoliciesResponse
-    -- * Response Lenses
-    , drprsResourcePolicies
-    , drprsNextToken
-    , drprsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeResourcePolicies' smart constructor.
-data DescribeResourcePolicies = DescribeResourcePolicies'
-  { _drpNextToken :: !(Maybe Text)
-  , _drpLimit     :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeResourcePolicies' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drpNextToken' - Undocumented member.
---
--- * 'drpLimit' - The maximum number of resource policies to be displayed with one call of this API.
-describeResourcePolicies
-    :: DescribeResourcePolicies
-describeResourcePolicies =
-  DescribeResourcePolicies' {_drpNextToken = Nothing, _drpLimit = Nothing}
-
-
--- | Undocumented member.
-drpNextToken :: Lens' DescribeResourcePolicies (Maybe Text)
-drpNextToken = lens _drpNextToken (\ s a -> s{_drpNextToken = a})
-
--- | The maximum number of resource policies to be displayed with one call of this API.
-drpLimit :: Lens' DescribeResourcePolicies (Maybe Natural)
-drpLimit = lens _drpLimit (\ s a -> s{_drpLimit = a}) . mapping _Nat
-
-instance AWSRequest DescribeResourcePolicies where
-        type Rs DescribeResourcePolicies =
-             DescribeResourcePoliciesResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeResourcePoliciesResponse' <$>
-                   (x .?> "resourcePolicies" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeResourcePolicies where
-
-instance NFData DescribeResourcePolicies where
-
-instance ToHeaders DescribeResourcePolicies where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeResourcePolicies" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeResourcePolicies where
-        toJSON DescribeResourcePolicies'{..}
-          = object
-              (catMaybes
-                 [("nextToken" .=) <$> _drpNextToken,
-                  ("limit" .=) <$> _drpLimit])
-
-instance ToPath DescribeResourcePolicies where
-        toPath = const "/"
-
-instance ToQuery DescribeResourcePolicies where
-        toQuery = const mempty
-
--- | /See:/ 'describeResourcePoliciesResponse' smart constructor.
-data DescribeResourcePoliciesResponse = DescribeResourcePoliciesResponse'
-  { _drprsResourcePolicies :: !(Maybe [ResourcePolicy])
-  , _drprsNextToken        :: !(Maybe Text)
-  , _drprsResponseStatus   :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeResourcePoliciesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drprsResourcePolicies' - The resource policies that exist in this account.
---
--- * 'drprsNextToken' - Undocumented member.
---
--- * 'drprsResponseStatus' - -- | The response status code.
-describeResourcePoliciesResponse
-    :: Int -- ^ 'drprsResponseStatus'
-    -> DescribeResourcePoliciesResponse
-describeResourcePoliciesResponse pResponseStatus_ =
-  DescribeResourcePoliciesResponse'
-    { _drprsResourcePolicies = Nothing
-    , _drprsNextToken = Nothing
-    , _drprsResponseStatus = pResponseStatus_
-    }
-
-
--- | The resource policies that exist in this account.
-drprsResourcePolicies :: Lens' DescribeResourcePoliciesResponse [ResourcePolicy]
-drprsResourcePolicies = lens _drprsResourcePolicies (\ s a -> s{_drprsResourcePolicies = a}) . _Default . _Coerce
-
--- | Undocumented member.
-drprsNextToken :: Lens' DescribeResourcePoliciesResponse (Maybe Text)
-drprsNextToken = lens _drprsNextToken (\ s a -> s{_drprsNextToken = a})
-
--- | -- | The response status code.
-drprsResponseStatus :: Lens' DescribeResourcePoliciesResponse Int
-drprsResponseStatus = lens _drprsResponseStatus (\ s a -> s{_drprsResponseStatus = a})
-
-instance NFData DescribeResourcePoliciesResponse
-         where
diff --git a/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs b/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DescribeSubscriptionFilters.hs
+++ /dev/null
@@ -1,191 +0,0 @@
-{-# 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.CloudWatchLogs.DescribeSubscriptionFilters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the subscription filters for the specified log group. You can list all the subscription filters or filter the results by prefix. The results are ASCII-sorted by filter name.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.CloudWatchLogs.DescribeSubscriptionFilters
-    (
-    -- * Creating a Request
-      describeSubscriptionFilters
-    , DescribeSubscriptionFilters
-    -- * Request Lenses
-    , dsfFilterNamePrefix
-    , dsfNextToken
-    , dsfLimit
-    , dsfLogGroupName
-
-    -- * Destructuring the Response
-    , describeSubscriptionFiltersResponse
-    , DescribeSubscriptionFiltersResponse
-    -- * Response Lenses
-    , dsfrsSubscriptionFilters
-    , dsfrsNextToken
-    , dsfrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeSubscriptionFilters' smart constructor.
-data DescribeSubscriptionFilters = DescribeSubscriptionFilters'
-  { _dsfFilterNamePrefix :: !(Maybe Text)
-  , _dsfNextToken        :: !(Maybe Text)
-  , _dsfLimit            :: !(Maybe Nat)
-  , _dsfLogGroupName     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeSubscriptionFilters' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfFilterNamePrefix' - The prefix to match. If you don't specify a value, no prefix filter is applied.
---
--- * 'dsfNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'dsfLimit' - The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
---
--- * 'dsfLogGroupName' - The name of the log group.
-describeSubscriptionFilters
-    :: Text -- ^ 'dsfLogGroupName'
-    -> DescribeSubscriptionFilters
-describeSubscriptionFilters pLogGroupName_ =
-  DescribeSubscriptionFilters'
-    { _dsfFilterNamePrefix = Nothing
-    , _dsfNextToken = Nothing
-    , _dsfLimit = Nothing
-    , _dsfLogGroupName = pLogGroupName_
-    }
-
-
--- | The prefix to match. If you don't specify a value, no prefix filter is applied.
-dsfFilterNamePrefix :: Lens' DescribeSubscriptionFilters (Maybe Text)
-dsfFilterNamePrefix = lens _dsfFilterNamePrefix (\ s a -> s{_dsfFilterNamePrefix = a})
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-dsfNextToken :: Lens' DescribeSubscriptionFilters (Maybe Text)
-dsfNextToken = lens _dsfNextToken (\ s a -> s{_dsfNextToken = a})
-
--- | The maximum number of items returned. If you don't specify a value, the default is up to 50 items.
-dsfLimit :: Lens' DescribeSubscriptionFilters (Maybe Natural)
-dsfLimit = lens _dsfLimit (\ s a -> s{_dsfLimit = a}) . mapping _Nat
-
--- | The name of the log group.
-dsfLogGroupName :: Lens' DescribeSubscriptionFilters Text
-dsfLogGroupName = lens _dsfLogGroupName (\ s a -> s{_dsfLogGroupName = a})
-
-instance AWSPager DescribeSubscriptionFilters where
-        page rq rs
-          | stop (rs ^. dsfrsNextToken) = Nothing
-          | stop (rs ^. dsfrsSubscriptionFilters) = Nothing
-          | otherwise =
-            Just $ rq & dsfNextToken .~ rs ^. dsfrsNextToken
-
-instance AWSRequest DescribeSubscriptionFilters where
-        type Rs DescribeSubscriptionFilters =
-             DescribeSubscriptionFiltersResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeSubscriptionFiltersResponse' <$>
-                   (x .?> "subscriptionFilters" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSubscriptionFilters where
-
-instance NFData DescribeSubscriptionFilters where
-
-instance ToHeaders DescribeSubscriptionFilters where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DescribeSubscriptionFilters" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeSubscriptionFilters where
-        toJSON DescribeSubscriptionFilters'{..}
-          = object
-              (catMaybes
-                 [("filterNamePrefix" .=) <$> _dsfFilterNamePrefix,
-                  ("nextToken" .=) <$> _dsfNextToken,
-                  ("limit" .=) <$> _dsfLimit,
-                  Just ("logGroupName" .= _dsfLogGroupName)])
-
-instance ToPath DescribeSubscriptionFilters where
-        toPath = const "/"
-
-instance ToQuery DescribeSubscriptionFilters where
-        toQuery = const mempty
-
--- | /See:/ 'describeSubscriptionFiltersResponse' smart constructor.
-data DescribeSubscriptionFiltersResponse = DescribeSubscriptionFiltersResponse'
-  { _dsfrsSubscriptionFilters :: !(Maybe [SubscriptionFilter])
-  , _dsfrsNextToken           :: !(Maybe Text)
-  , _dsfrsResponseStatus      :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeSubscriptionFiltersResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfrsSubscriptionFilters' - The subscription filters.
---
--- * 'dsfrsNextToken' - Undocumented member.
---
--- * 'dsfrsResponseStatus' - -- | The response status code.
-describeSubscriptionFiltersResponse
-    :: Int -- ^ 'dsfrsResponseStatus'
-    -> DescribeSubscriptionFiltersResponse
-describeSubscriptionFiltersResponse pResponseStatus_ =
-  DescribeSubscriptionFiltersResponse'
-    { _dsfrsSubscriptionFilters = Nothing
-    , _dsfrsNextToken = Nothing
-    , _dsfrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The subscription filters.
-dsfrsSubscriptionFilters :: Lens' DescribeSubscriptionFiltersResponse [SubscriptionFilter]
-dsfrsSubscriptionFilters = lens _dsfrsSubscriptionFilters (\ s a -> s{_dsfrsSubscriptionFilters = a}) . _Default . _Coerce
-
--- | Undocumented member.
-dsfrsNextToken :: Lens' DescribeSubscriptionFiltersResponse (Maybe Text)
-dsfrsNextToken = lens _dsfrsNextToken (\ s a -> s{_dsfrsNextToken = a})
-
--- | -- | The response status code.
-dsfrsResponseStatus :: Lens' DescribeSubscriptionFiltersResponse Int
-dsfrsResponseStatus = lens _dsfrsResponseStatus (\ s a -> s{_dsfrsResponseStatus = a})
-
-instance NFData DescribeSubscriptionFiltersResponse
-         where
diff --git a/gen/Network/AWS/CloudWatchLogs/DisassociateKMSKey.hs b/gen/Network/AWS/CloudWatchLogs/DisassociateKMSKey.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/DisassociateKMSKey.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# 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.CloudWatchLogs.DisassociateKMSKey
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates the associated AWS Key Management Service (AWS KMS) customer master key (CMK) from the specified log group.
---
---
--- After the AWS KMS CMK is disassociated from the log group, AWS CloudWatch Logs stops encrypting newly ingested data for the log group. All previously ingested data remains encrypted, and AWS CloudWatch Logs requires permissions for the CMK whenever the encrypted data is requested.
---
--- Note that it can take up to 5 minutes for this operation to take effect.
---
-module Network.AWS.CloudWatchLogs.DisassociateKMSKey
-    (
-    -- * Creating a Request
-      disassociateKMSKey
-    , DisassociateKMSKey
-    -- * Request Lenses
-    , dkkLogGroupName
-
-    -- * Destructuring the Response
-    , disassociateKMSKeyResponse
-    , DisassociateKMSKeyResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'disassociateKMSKey' smart constructor.
-newtype DisassociateKMSKey = DisassociateKMSKey'
-  { _dkkLogGroupName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateKMSKey' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dkkLogGroupName' - The name of the log group.
-disassociateKMSKey
-    :: Text -- ^ 'dkkLogGroupName'
-    -> DisassociateKMSKey
-disassociateKMSKey pLogGroupName_ =
-  DisassociateKMSKey' {_dkkLogGroupName = pLogGroupName_}
-
-
--- | The name of the log group.
-dkkLogGroupName :: Lens' DisassociateKMSKey Text
-dkkLogGroupName = lens _dkkLogGroupName (\ s a -> s{_dkkLogGroupName = a})
-
-instance AWSRequest DisassociateKMSKey where
-        type Rs DisassociateKMSKey =
-             DisassociateKMSKeyResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull DisassociateKMSKeyResponse'
-
-instance Hashable DisassociateKMSKey where
-
-instance NFData DisassociateKMSKey where
-
-instance ToHeaders DisassociateKMSKey where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.DisassociateKmsKey" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateKMSKey where
-        toJSON DisassociateKMSKey'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _dkkLogGroupName)])
-
-instance ToPath DisassociateKMSKey where
-        toPath = const "/"
-
-instance ToQuery DisassociateKMSKey where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateKMSKeyResponse' smart constructor.
-data DisassociateKMSKeyResponse =
-  DisassociateKMSKeyResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateKMSKeyResponse' with the minimum fields required to make a request.
---
-disassociateKMSKeyResponse
-    :: DisassociateKMSKeyResponse
-disassociateKMSKeyResponse = DisassociateKMSKeyResponse'
-
-
-instance NFData DisassociateKMSKeyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/FilterLogEvents.hs
+++ /dev/null
@@ -1,239 +0,0 @@
-{-# 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.CloudWatchLogs.FilterLogEvents
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists log events from the specified log group. You can list all the log events or filter the results using a filter pattern, a time range, and the name of the log stream.
---
---
--- By default, this operation returns as many log events as can fit in 1 MB (up to 10,000 log events), or all the events found within the time range that you specify. If the results include a token, then there are more log events available, and you can get additional results by specifying the token in a subsequent call.
---
---
--- This operation returns paginated results.
-module Network.AWS.CloudWatchLogs.FilterLogEvents
-    (
-    -- * Creating a Request
-      filterLogEvents
-    , FilterLogEvents
-    -- * Request Lenses
-    , fleStartTime
-    , fleNextToken
-    , fleLogStreamNames
-    , fleEndTime
-    , fleLimit
-    , fleFilterPattern
-    , fleInterleaved
-    , fleLogGroupName
-
-    -- * Destructuring the Response
-    , filterLogEventsResponse
-    , FilterLogEventsResponse
-    -- * Response Lenses
-    , flersSearchedLogStreams
-    , flersNextToken
-    , flersEvents
-    , flersResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'filterLogEvents' smart constructor.
-data FilterLogEvents = FilterLogEvents'
-  { _fleStartTime      :: !(Maybe Nat)
-  , _fleNextToken      :: !(Maybe Text)
-  , _fleLogStreamNames :: !(Maybe (List1 Text))
-  , _fleEndTime        :: !(Maybe Nat)
-  , _fleLimit          :: !(Maybe Nat)
-  , _fleFilterPattern  :: !(Maybe Text)
-  , _fleInterleaved    :: !(Maybe Bool)
-  , _fleLogGroupName   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FilterLogEvents' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fleStartTime' - The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp before this time are not returned.
---
--- * 'fleNextToken' - The token for the next set of events to return. (You received this token from a previous call.)
---
--- * 'fleLogStreamNames' - Optional list of log stream names.
---
--- * 'fleEndTime' - The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not returned.
---
--- * 'fleLimit' - The maximum number of events to return. The default is 10,000 events.
---
--- * 'fleFilterPattern' - The filter pattern to use. If not provided, all the events are matched.
---
--- * 'fleInterleaved' - If the value is true, the operation makes a best effort to provide responses that contain events from multiple log streams within the log group, interleaved in a single response. If the value is false, all the matched log events in the first log stream are searched first, then those in the next log stream, and so on. The default is false.
---
--- * 'fleLogGroupName' - The name of the log group.
-filterLogEvents
-    :: Text -- ^ 'fleLogGroupName'
-    -> FilterLogEvents
-filterLogEvents pLogGroupName_ =
-  FilterLogEvents'
-    { _fleStartTime = Nothing
-    , _fleNextToken = Nothing
-    , _fleLogStreamNames = Nothing
-    , _fleEndTime = Nothing
-    , _fleLimit = Nothing
-    , _fleFilterPattern = Nothing
-    , _fleInterleaved = Nothing
-    , _fleLogGroupName = pLogGroupName_
-    }
-
-
--- | The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp before this time are not returned.
-fleStartTime :: Lens' FilterLogEvents (Maybe Natural)
-fleStartTime = lens _fleStartTime (\ s a -> s{_fleStartTime = a}) . mapping _Nat
-
--- | The token for the next set of events to return. (You received this token from a previous call.)
-fleNextToken :: Lens' FilterLogEvents (Maybe Text)
-fleNextToken = lens _fleNextToken (\ s a -> s{_fleNextToken = a})
-
--- | Optional list of log stream names.
-fleLogStreamNames :: Lens' FilterLogEvents (Maybe (NonEmpty Text))
-fleLogStreamNames = lens _fleLogStreamNames (\ s a -> s{_fleLogStreamNames = a}) . mapping _List1
-
--- | The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not returned.
-fleEndTime :: Lens' FilterLogEvents (Maybe Natural)
-fleEndTime = lens _fleEndTime (\ s a -> s{_fleEndTime = a}) . mapping _Nat
-
--- | The maximum number of events to return. The default is 10,000 events.
-fleLimit :: Lens' FilterLogEvents (Maybe Natural)
-fleLimit = lens _fleLimit (\ s a -> s{_fleLimit = a}) . mapping _Nat
-
--- | The filter pattern to use. If not provided, all the events are matched.
-fleFilterPattern :: Lens' FilterLogEvents (Maybe Text)
-fleFilterPattern = lens _fleFilterPattern (\ s a -> s{_fleFilterPattern = a})
-
--- | If the value is true, the operation makes a best effort to provide responses that contain events from multiple log streams within the log group, interleaved in a single response. If the value is false, all the matched log events in the first log stream are searched first, then those in the next log stream, and so on. The default is false.
-fleInterleaved :: Lens' FilterLogEvents (Maybe Bool)
-fleInterleaved = lens _fleInterleaved (\ s a -> s{_fleInterleaved = a})
-
--- | The name of the log group.
-fleLogGroupName :: Lens' FilterLogEvents Text
-fleLogGroupName = lens _fleLogGroupName (\ s a -> s{_fleLogGroupName = a})
-
-instance AWSPager FilterLogEvents where
-        page rq rs
-          | stop (rs ^. flersNextToken) = Nothing
-          | otherwise =
-            Just $ rq & fleNextToken .~ rs ^. flersNextToken
-
-instance AWSRequest FilterLogEvents where
-        type Rs FilterLogEvents = FilterLogEventsResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 FilterLogEventsResponse' <$>
-                   (x .?> "searchedLogStreams" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (x .?> "events" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable FilterLogEvents where
-
-instance NFData FilterLogEvents where
-
-instance ToHeaders FilterLogEvents where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.FilterLogEvents" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON FilterLogEvents where
-        toJSON FilterLogEvents'{..}
-          = object
-              (catMaybes
-                 [("startTime" .=) <$> _fleStartTime,
-                  ("nextToken" .=) <$> _fleNextToken,
-                  ("logStreamNames" .=) <$> _fleLogStreamNames,
-                  ("endTime" .=) <$> _fleEndTime,
-                  ("limit" .=) <$> _fleLimit,
-                  ("filterPattern" .=) <$> _fleFilterPattern,
-                  ("interleaved" .=) <$> _fleInterleaved,
-                  Just ("logGroupName" .= _fleLogGroupName)])
-
-instance ToPath FilterLogEvents where
-        toPath = const "/"
-
-instance ToQuery FilterLogEvents where
-        toQuery = const mempty
-
--- | /See:/ 'filterLogEventsResponse' smart constructor.
-data FilterLogEventsResponse = FilterLogEventsResponse'
-  { _flersSearchedLogStreams :: !(Maybe [SearchedLogStream])
-  , _flersNextToken          :: !(Maybe Text)
-  , _flersEvents             :: !(Maybe [FilteredLogEvent])
-  , _flersResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FilterLogEventsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'flersSearchedLogStreams' - Indicates which log streams have been searched and whether each has been searched completely.
---
--- * 'flersNextToken' - The token to use when requesting the next set of items. The token expires after 24 hours.
---
--- * 'flersEvents' - The matched events.
---
--- * 'flersResponseStatus' - -- | The response status code.
-filterLogEventsResponse
-    :: Int -- ^ 'flersResponseStatus'
-    -> FilterLogEventsResponse
-filterLogEventsResponse pResponseStatus_ =
-  FilterLogEventsResponse'
-    { _flersSearchedLogStreams = Nothing
-    , _flersNextToken = Nothing
-    , _flersEvents = Nothing
-    , _flersResponseStatus = pResponseStatus_
-    }
-
-
--- | Indicates which log streams have been searched and whether each has been searched completely.
-flersSearchedLogStreams :: Lens' FilterLogEventsResponse [SearchedLogStream]
-flersSearchedLogStreams = lens _flersSearchedLogStreams (\ s a -> s{_flersSearchedLogStreams = a}) . _Default . _Coerce
-
--- | The token to use when requesting the next set of items. The token expires after 24 hours.
-flersNextToken :: Lens' FilterLogEventsResponse (Maybe Text)
-flersNextToken = lens _flersNextToken (\ s a -> s{_flersNextToken = a})
-
--- | The matched events.
-flersEvents :: Lens' FilterLogEventsResponse [FilteredLogEvent]
-flersEvents = lens _flersEvents (\ s a -> s{_flersEvents = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-flersResponseStatus :: Lens' FilterLogEventsResponse Int
-flersResponseStatus = lens _flersResponseStatus (\ s a -> s{_flersResponseStatus = a})
-
-instance NFData FilterLogEventsResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/GetLogEvents.hs
+++ /dev/null
@@ -1,221 +0,0 @@
-{-# 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.CloudWatchLogs.GetLogEvents
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists log events from the specified log stream. You can list all the log events or filter using a time range.
---
---
--- By default, this operation returns as many log events as can fit in a response size of 1MB (up to 10,000 log events). You can get additional log events by specifying one of the tokens in a subsequent call.
---
-module Network.AWS.CloudWatchLogs.GetLogEvents
-    (
-    -- * Creating a Request
-      getLogEvents
-    , GetLogEvents
-    -- * Request Lenses
-    , gleStartTime
-    , gleStartFromHead
-    , gleNextToken
-    , gleEndTime
-    , gleLimit
-    , gleLogGroupName
-    , gleLogStreamName
-
-    -- * Destructuring the Response
-    , getLogEventsResponse
-    , GetLogEventsResponse
-    -- * Response Lenses
-    , glersNextBackwardToken
-    , glersNextForwardToken
-    , glersEvents
-    , glersResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getLogEvents' smart constructor.
-data GetLogEvents = GetLogEvents'
-  { _gleStartTime     :: !(Maybe Nat)
-  , _gleStartFromHead :: !(Maybe Bool)
-  , _gleNextToken     :: !(Maybe Text)
-  , _gleEndTime       :: !(Maybe Nat)
-  , _gleLimit         :: !(Maybe Nat)
-  , _gleLogGroupName  :: !Text
-  , _gleLogStreamName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetLogEvents' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gleStartTime' - The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp earlier than this time are not included.
---
--- * 'gleStartFromHead' - If the value is true, the earliest log events are returned first. If the value is false, the latest log events are returned first. The default value is false.
---
--- * 'gleNextToken' - The token for the next set of items to return. (You received this token from a previous call.)
---
--- * 'gleEndTime' - The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not included.
---
--- * 'gleLimit' - The maximum number of log events returned. If you don't specify a value, the maximum is as many log events as can fit in a response size of 1 MB, up to 10,000 log events.
---
--- * 'gleLogGroupName' - The name of the log group.
---
--- * 'gleLogStreamName' - The name of the log stream.
-getLogEvents
-    :: Text -- ^ 'gleLogGroupName'
-    -> Text -- ^ 'gleLogStreamName'
-    -> GetLogEvents
-getLogEvents pLogGroupName_ pLogStreamName_ =
-  GetLogEvents'
-    { _gleStartTime = Nothing
-    , _gleStartFromHead = Nothing
-    , _gleNextToken = Nothing
-    , _gleEndTime = Nothing
-    , _gleLimit = Nothing
-    , _gleLogGroupName = pLogGroupName_
-    , _gleLogStreamName = pLogStreamName_
-    }
-
-
--- | The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp earlier than this time are not included.
-gleStartTime :: Lens' GetLogEvents (Maybe Natural)
-gleStartTime = lens _gleStartTime (\ s a -> s{_gleStartTime = a}) . mapping _Nat
-
--- | If the value is true, the earliest log events are returned first. If the value is false, the latest log events are returned first. The default value is false.
-gleStartFromHead :: Lens' GetLogEvents (Maybe Bool)
-gleStartFromHead = lens _gleStartFromHead (\ s a -> s{_gleStartFromHead = a})
-
--- | The token for the next set of items to return. (You received this token from a previous call.)
-gleNextToken :: Lens' GetLogEvents (Maybe Text)
-gleNextToken = lens _gleNextToken (\ s a -> s{_gleNextToken = a})
-
--- | The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not included.
-gleEndTime :: Lens' GetLogEvents (Maybe Natural)
-gleEndTime = lens _gleEndTime (\ s a -> s{_gleEndTime = a}) . mapping _Nat
-
--- | The maximum number of log events returned. If you don't specify a value, the maximum is as many log events as can fit in a response size of 1 MB, up to 10,000 log events.
-gleLimit :: Lens' GetLogEvents (Maybe Natural)
-gleLimit = lens _gleLimit (\ s a -> s{_gleLimit = a}) . mapping _Nat
-
--- | The name of the log group.
-gleLogGroupName :: Lens' GetLogEvents Text
-gleLogGroupName = lens _gleLogGroupName (\ s a -> s{_gleLogGroupName = a})
-
--- | The name of the log stream.
-gleLogStreamName :: Lens' GetLogEvents Text
-gleLogStreamName = lens _gleLogStreamName (\ s a -> s{_gleLogStreamName = a})
-
-instance AWSRequest GetLogEvents where
-        type Rs GetLogEvents = GetLogEventsResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetLogEventsResponse' <$>
-                   (x .?> "nextBackwardToken") <*>
-                     (x .?> "nextForwardToken")
-                     <*> (x .?> "events" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetLogEvents where
-
-instance NFData GetLogEvents where
-
-instance ToHeaders GetLogEvents where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.GetLogEvents" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetLogEvents where
-        toJSON GetLogEvents'{..}
-          = object
-              (catMaybes
-                 [("startTime" .=) <$> _gleStartTime,
-                  ("startFromHead" .=) <$> _gleStartFromHead,
-                  ("nextToken" .=) <$> _gleNextToken,
-                  ("endTime" .=) <$> _gleEndTime,
-                  ("limit" .=) <$> _gleLimit,
-                  Just ("logGroupName" .= _gleLogGroupName),
-                  Just ("logStreamName" .= _gleLogStreamName)])
-
-instance ToPath GetLogEvents where
-        toPath = const "/"
-
-instance ToQuery GetLogEvents where
-        toQuery = const mempty
-
--- | /See:/ 'getLogEventsResponse' smart constructor.
-data GetLogEventsResponse = GetLogEventsResponse'
-  { _glersNextBackwardToken :: !(Maybe Text)
-  , _glersNextForwardToken  :: !(Maybe Text)
-  , _glersEvents            :: !(Maybe [OutputLogEvent])
-  , _glersResponseStatus    :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetLogEventsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'glersNextBackwardToken' - The token for the next set of items in the backward direction. The token expires after 24 hours.
---
--- * 'glersNextForwardToken' - The token for the next set of items in the forward direction. The token expires after 24 hours.
---
--- * 'glersEvents' - The events.
---
--- * 'glersResponseStatus' - -- | The response status code.
-getLogEventsResponse
-    :: Int -- ^ 'glersResponseStatus'
-    -> GetLogEventsResponse
-getLogEventsResponse pResponseStatus_ =
-  GetLogEventsResponse'
-    { _glersNextBackwardToken = Nothing
-    , _glersNextForwardToken = Nothing
-    , _glersEvents = Nothing
-    , _glersResponseStatus = pResponseStatus_
-    }
-
-
--- | The token for the next set of items in the backward direction. The token expires after 24 hours.
-glersNextBackwardToken :: Lens' GetLogEventsResponse (Maybe Text)
-glersNextBackwardToken = lens _glersNextBackwardToken (\ s a -> s{_glersNextBackwardToken = a})
-
--- | The token for the next set of items in the forward direction. The token expires after 24 hours.
-glersNextForwardToken :: Lens' GetLogEventsResponse (Maybe Text)
-glersNextForwardToken = lens _glersNextForwardToken (\ s a -> s{_glersNextForwardToken = a})
-
--- | The events.
-glersEvents :: Lens' GetLogEventsResponse [OutputLogEvent]
-glersEvents = lens _glersEvents (\ s a -> s{_glersEvents = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-glersResponseStatus :: Lens' GetLogEventsResponse Int
-glersResponseStatus = lens _glersResponseStatus (\ s a -> s{_glersResponseStatus = a})
-
-instance NFData GetLogEventsResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/ListTagsLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/ListTagsLogGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/ListTagsLogGroup.hs
+++ /dev/null
@@ -1,133 +0,0 @@
-{-# 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.CloudWatchLogs.ListTagsLogGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the tags for the specified log group.
---
---
-module Network.AWS.CloudWatchLogs.ListTagsLogGroup
-    (
-    -- * Creating a Request
-      listTagsLogGroup
-    , ListTagsLogGroup
-    -- * Request Lenses
-    , ltlgLogGroupName
-
-    -- * Destructuring the Response
-    , listTagsLogGroupResponse
-    , ListTagsLogGroupResponse
-    -- * Response Lenses
-    , ltlgrsTags
-    , ltlgrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listTagsLogGroup' smart constructor.
-newtype ListTagsLogGroup = ListTagsLogGroup'
-  { _ltlgLogGroupName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListTagsLogGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltlgLogGroupName' - The name of the log group.
-listTagsLogGroup
-    :: Text -- ^ 'ltlgLogGroupName'
-    -> ListTagsLogGroup
-listTagsLogGroup pLogGroupName_ =
-  ListTagsLogGroup' {_ltlgLogGroupName = pLogGroupName_}
-
-
--- | The name of the log group.
-ltlgLogGroupName :: Lens' ListTagsLogGroup Text
-ltlgLogGroupName = lens _ltlgLogGroupName (\ s a -> s{_ltlgLogGroupName = a})
-
-instance AWSRequest ListTagsLogGroup where
-        type Rs ListTagsLogGroup = ListTagsLogGroupResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListTagsLogGroupResponse' <$>
-                   (x .?> "tags" .!@ mempty) <*> (pure (fromEnum s)))
-
-instance Hashable ListTagsLogGroup where
-
-instance NFData ListTagsLogGroup where
-
-instance ToHeaders ListTagsLogGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.ListTagsLogGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListTagsLogGroup where
-        toJSON ListTagsLogGroup'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _ltlgLogGroupName)])
-
-instance ToPath ListTagsLogGroup where
-        toPath = const "/"
-
-instance ToQuery ListTagsLogGroup where
-        toQuery = const mempty
-
--- | /See:/ 'listTagsLogGroupResponse' smart constructor.
-data ListTagsLogGroupResponse = ListTagsLogGroupResponse'
-  { _ltlgrsTags           :: !(Maybe (Map Text Text))
-  , _ltlgrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListTagsLogGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltlgrsTags' - The tags for the log group.
---
--- * 'ltlgrsResponseStatus' - -- | The response status code.
-listTagsLogGroupResponse
-    :: Int -- ^ 'ltlgrsResponseStatus'
-    -> ListTagsLogGroupResponse
-listTagsLogGroupResponse pResponseStatus_ =
-  ListTagsLogGroupResponse'
-    {_ltlgrsTags = Nothing, _ltlgrsResponseStatus = pResponseStatus_}
-
-
--- | The tags for the log group.
-ltlgrsTags :: Lens' ListTagsLogGroupResponse (HashMap Text Text)
-ltlgrsTags = lens _ltlgrsTags (\ s a -> s{_ltlgrsTags = a}) . _Default . _Map
-
--- | -- | The response status code.
-ltlgrsResponseStatus :: Lens' ListTagsLogGroupResponse Int
-ltlgrsResponseStatus = lens _ltlgrsResponseStatus (\ s a -> s{_ltlgrsResponseStatus = a})
-
-instance NFData ListTagsLogGroupResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutDestination.hs b/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutDestination.hs
+++ /dev/null
@@ -1,159 +0,0 @@
-{-# 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.CloudWatchLogs.PutDestination
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates or updates a destination. A destination encapsulates a physical resource (such as an Amazon Kinesis stream) and enables you to subscribe to a real-time stream of log events for a different account, ingested using 'PutLogEvents' . Currently, the only supported physical resource is a Kinesis stream belonging to the same account as the destination.
---
---
--- Through an access policy, a destination controls what is written to its Kinesis stream. By default, @PutDestination@ does not set any access policy with the destination, which means a cross-account user cannot call 'PutSubscriptionFilter' against this destination. To enable this, the destination owner must call 'PutDestinationPolicy' after @PutDestination@ .
---
-module Network.AWS.CloudWatchLogs.PutDestination
-    (
-    -- * Creating a Request
-      putDestination
-    , PutDestination
-    -- * Request Lenses
-    , pdDestinationName
-    , pdTargetARN
-    , pdRoleARN
-
-    -- * Destructuring the Response
-    , putDestinationResponse
-    , PutDestinationResponse
-    -- * Response Lenses
-    , pdrsDestination
-    , pdrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putDestination' smart constructor.
-data PutDestination = PutDestination'
-  { _pdDestinationName :: !Text
-  , _pdTargetARN       :: !Text
-  , _pdRoleARN         :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdDestinationName' - A name for the destination.
---
--- * 'pdTargetARN' - The ARN of an Amazon Kinesis stream to which to deliver matching log events.
---
--- * 'pdRoleARN' - The ARN of an IAM role that grants CloudWatch Logs permissions to call the Amazon Kinesis PutRecord operation on the destination stream.
-putDestination
-    :: Text -- ^ 'pdDestinationName'
-    -> Text -- ^ 'pdTargetARN'
-    -> Text -- ^ 'pdRoleARN'
-    -> PutDestination
-putDestination pDestinationName_ pTargetARN_ pRoleARN_ =
-  PutDestination'
-    { _pdDestinationName = pDestinationName_
-    , _pdTargetARN = pTargetARN_
-    , _pdRoleARN = pRoleARN_
-    }
-
-
--- | A name for the destination.
-pdDestinationName :: Lens' PutDestination Text
-pdDestinationName = lens _pdDestinationName (\ s a -> s{_pdDestinationName = a})
-
--- | The ARN of an Amazon Kinesis stream to which to deliver matching log events.
-pdTargetARN :: Lens' PutDestination Text
-pdTargetARN = lens _pdTargetARN (\ s a -> s{_pdTargetARN = a})
-
--- | The ARN of an IAM role that grants CloudWatch Logs permissions to call the Amazon Kinesis PutRecord operation on the destination stream.
-pdRoleARN :: Lens' PutDestination Text
-pdRoleARN = lens _pdRoleARN (\ s a -> s{_pdRoleARN = a})
-
-instance AWSRequest PutDestination where
-        type Rs PutDestination = PutDestinationResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 PutDestinationResponse' <$>
-                   (x .?> "destination") <*> (pure (fromEnum s)))
-
-instance Hashable PutDestination where
-
-instance NFData PutDestination where
-
-instance ToHeaders PutDestination where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutDestination" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutDestination where
-        toJSON PutDestination'{..}
-          = object
-              (catMaybes
-                 [Just ("destinationName" .= _pdDestinationName),
-                  Just ("targetArn" .= _pdTargetARN),
-                  Just ("roleArn" .= _pdRoleARN)])
-
-instance ToPath PutDestination where
-        toPath = const "/"
-
-instance ToQuery PutDestination where
-        toQuery = const mempty
-
--- | /See:/ 'putDestinationResponse' smart constructor.
-data PutDestinationResponse = PutDestinationResponse'
-  { _pdrsDestination    :: !(Maybe Destination)
-  , _pdrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutDestinationResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdrsDestination' - The destination.
---
--- * 'pdrsResponseStatus' - -- | The response status code.
-putDestinationResponse
-    :: Int -- ^ 'pdrsResponseStatus'
-    -> PutDestinationResponse
-putDestinationResponse pResponseStatus_ =
-  PutDestinationResponse'
-    {_pdrsDestination = Nothing, _pdrsResponseStatus = pResponseStatus_}
-
-
--- | The destination.
-pdrsDestination :: Lens' PutDestinationResponse (Maybe Destination)
-pdrsDestination = lens _pdrsDestination (\ s a -> s{_pdrsDestination = a})
-
--- | -- | The response status code.
-pdrsResponseStatus :: Lens' PutDestinationResponse Int
-pdrsResponseStatus = lens _pdrsResponseStatus (\ s a -> s{_pdrsResponseStatus = a})
-
-instance NFData PutDestinationResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutDestinationPolicy.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# 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.CloudWatchLogs.PutDestinationPolicy
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates or updates an access policy associated with an existing destination. An access policy is an <http://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html IAM policy document> that is used to authorize claims to register a subscription filter against a given destination.
---
---
-module Network.AWS.CloudWatchLogs.PutDestinationPolicy
-    (
-    -- * Creating a Request
-      putDestinationPolicy
-    , PutDestinationPolicy
-    -- * Request Lenses
-    , pdpDestinationName
-    , pdpAccessPolicy
-
-    -- * Destructuring the Response
-    , putDestinationPolicyResponse
-    , PutDestinationPolicyResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putDestinationPolicy' smart constructor.
-data PutDestinationPolicy = PutDestinationPolicy'
-  { _pdpDestinationName :: !Text
-  , _pdpAccessPolicy    :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutDestinationPolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdpDestinationName' - A name for an existing destination.
---
--- * 'pdpAccessPolicy' - An IAM policy document that authorizes cross-account users to deliver their log events to the associated destination.
-putDestinationPolicy
-    :: Text -- ^ 'pdpDestinationName'
-    -> Text -- ^ 'pdpAccessPolicy'
-    -> PutDestinationPolicy
-putDestinationPolicy pDestinationName_ pAccessPolicy_ =
-  PutDestinationPolicy'
-    {_pdpDestinationName = pDestinationName_, _pdpAccessPolicy = pAccessPolicy_}
-
-
--- | A name for an existing destination.
-pdpDestinationName :: Lens' PutDestinationPolicy Text
-pdpDestinationName = lens _pdpDestinationName (\ s a -> s{_pdpDestinationName = a})
-
--- | An IAM policy document that authorizes cross-account users to deliver their log events to the associated destination.
-pdpAccessPolicy :: Lens' PutDestinationPolicy Text
-pdpAccessPolicy = lens _pdpAccessPolicy (\ s a -> s{_pdpAccessPolicy = a})
-
-instance AWSRequest PutDestinationPolicy where
-        type Rs PutDestinationPolicy =
-             PutDestinationPolicyResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull PutDestinationPolicyResponse'
-
-instance Hashable PutDestinationPolicy where
-
-instance NFData PutDestinationPolicy where
-
-instance ToHeaders PutDestinationPolicy where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutDestinationPolicy" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutDestinationPolicy where
-        toJSON PutDestinationPolicy'{..}
-          = object
-              (catMaybes
-                 [Just ("destinationName" .= _pdpDestinationName),
-                  Just ("accessPolicy" .= _pdpAccessPolicy)])
-
-instance ToPath PutDestinationPolicy where
-        toPath = const "/"
-
-instance ToQuery PutDestinationPolicy where
-        toQuery = const mempty
-
--- | /See:/ 'putDestinationPolicyResponse' smart constructor.
-data PutDestinationPolicyResponse =
-  PutDestinationPolicyResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutDestinationPolicyResponse' with the minimum fields required to make a request.
---
-putDestinationPolicyResponse
-    :: PutDestinationPolicyResponse
-putDestinationPolicyResponse = PutDestinationPolicyResponse'
-
-
-instance NFData PutDestinationPolicyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs b/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutLogEvents.hs
+++ /dev/null
@@ -1,198 +0,0 @@
-{-# 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.CloudWatchLogs.PutLogEvents
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Uploads a batch of log events to the specified log stream.
---
---
--- You must include the sequence token obtained from the response of the previous call. An upload in a newly created log stream does not require a sequence token. You can also get the sequence token using 'DescribeLogStreams' . If you call @PutLogEvents@ twice within a narrow time period using the same value for @sequenceToken@ , both calls may be successful, or one may be rejected.
---
--- The batch of events must satisfy the following constraints:
---
---     * The maximum batch size is 1,048,576 bytes, and this size is calculated as the sum of all event messages in UTF-8, plus 26 bytes for each log event.
---
---     * None of the log events in the batch can be more than 2 hours in the future.
---
---     * None of the log events in the batch can be older than 14 days or the retention period of the log group.
---
---     * The log events in the batch must be in chronological ordered by their time stamp (the time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC).
---
---     * The maximum number of log events in a batch is 10,000.
---
---     * A batch of log events in a single request cannot span more than 24 hours. Otherwise, the operation fails.
---
---
---
-module Network.AWS.CloudWatchLogs.PutLogEvents
-    (
-    -- * Creating a Request
-      putLogEvents
-    , PutLogEvents
-    -- * Request Lenses
-    , pleSequenceToken
-    , pleLogGroupName
-    , pleLogStreamName
-    , pleLogEvents
-
-    -- * Destructuring the Response
-    , putLogEventsResponse
-    , PutLogEventsResponse
-    -- * Response Lenses
-    , plersRejectedLogEventsInfo
-    , plersNextSequenceToken
-    , plersResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putLogEvents' smart constructor.
-data PutLogEvents = PutLogEvents'
-  { _pleSequenceToken :: !(Maybe Text)
-  , _pleLogGroupName  :: !Text
-  , _pleLogStreamName :: !Text
-  , _pleLogEvents     :: !(List1 InputLogEvent)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutLogEvents' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pleSequenceToken' - The sequence token obtained from the response of the previous @PutLogEvents@ call. An upload in a newly created log stream does not require a sequence token. You can also get the sequence token using 'DescribeLogStreams' . If you call @PutLogEvents@ twice within a narrow time period using the same value for @sequenceToken@ , both calls may be successful, or one may be rejected.
---
--- * 'pleLogGroupName' - The name of the log group.
---
--- * 'pleLogStreamName' - The name of the log stream.
---
--- * 'pleLogEvents' - The log events.
-putLogEvents
-    :: Text -- ^ 'pleLogGroupName'
-    -> Text -- ^ 'pleLogStreamName'
-    -> NonEmpty InputLogEvent -- ^ 'pleLogEvents'
-    -> PutLogEvents
-putLogEvents pLogGroupName_ pLogStreamName_ pLogEvents_ =
-  PutLogEvents'
-    { _pleSequenceToken = Nothing
-    , _pleLogGroupName = pLogGroupName_
-    , _pleLogStreamName = pLogStreamName_
-    , _pleLogEvents = _List1 # pLogEvents_
-    }
-
-
--- | The sequence token obtained from the response of the previous @PutLogEvents@ call. An upload in a newly created log stream does not require a sequence token. You can also get the sequence token using 'DescribeLogStreams' . If you call @PutLogEvents@ twice within a narrow time period using the same value for @sequenceToken@ , both calls may be successful, or one may be rejected.
-pleSequenceToken :: Lens' PutLogEvents (Maybe Text)
-pleSequenceToken = lens _pleSequenceToken (\ s a -> s{_pleSequenceToken = a})
-
--- | The name of the log group.
-pleLogGroupName :: Lens' PutLogEvents Text
-pleLogGroupName = lens _pleLogGroupName (\ s a -> s{_pleLogGroupName = a})
-
--- | The name of the log stream.
-pleLogStreamName :: Lens' PutLogEvents Text
-pleLogStreamName = lens _pleLogStreamName (\ s a -> s{_pleLogStreamName = a})
-
--- | The log events.
-pleLogEvents :: Lens' PutLogEvents (NonEmpty InputLogEvent)
-pleLogEvents = lens _pleLogEvents (\ s a -> s{_pleLogEvents = a}) . _List1
-
-instance AWSRequest PutLogEvents where
-        type Rs PutLogEvents = PutLogEventsResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 PutLogEventsResponse' <$>
-                   (x .?> "rejectedLogEventsInfo") <*>
-                     (x .?> "nextSequenceToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable PutLogEvents where
-
-instance NFData PutLogEvents where
-
-instance ToHeaders PutLogEvents where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutLogEvents" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutLogEvents where
-        toJSON PutLogEvents'{..}
-          = object
-              (catMaybes
-                 [("sequenceToken" .=) <$> _pleSequenceToken,
-                  Just ("logGroupName" .= _pleLogGroupName),
-                  Just ("logStreamName" .= _pleLogStreamName),
-                  Just ("logEvents" .= _pleLogEvents)])
-
-instance ToPath PutLogEvents where
-        toPath = const "/"
-
-instance ToQuery PutLogEvents where
-        toQuery = const mempty
-
--- | /See:/ 'putLogEventsResponse' smart constructor.
-data PutLogEventsResponse = PutLogEventsResponse'
-  { _plersRejectedLogEventsInfo :: !(Maybe RejectedLogEventsInfo)
-  , _plersNextSequenceToken     :: !(Maybe Text)
-  , _plersResponseStatus        :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutLogEventsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'plersRejectedLogEventsInfo' - The rejected events.
---
--- * 'plersNextSequenceToken' - The next sequence token.
---
--- * 'plersResponseStatus' - -- | The response status code.
-putLogEventsResponse
-    :: Int -- ^ 'plersResponseStatus'
-    -> PutLogEventsResponse
-putLogEventsResponse pResponseStatus_ =
-  PutLogEventsResponse'
-    { _plersRejectedLogEventsInfo = Nothing
-    , _plersNextSequenceToken = Nothing
-    , _plersResponseStatus = pResponseStatus_
-    }
-
-
--- | The rejected events.
-plersRejectedLogEventsInfo :: Lens' PutLogEventsResponse (Maybe RejectedLogEventsInfo)
-plersRejectedLogEventsInfo = lens _plersRejectedLogEventsInfo (\ s a -> s{_plersRejectedLogEventsInfo = a})
-
--- | The next sequence token.
-plersNextSequenceToken :: Lens' PutLogEventsResponse (Maybe Text)
-plersNextSequenceToken = lens _plersNextSequenceToken (\ s a -> s{_plersNextSequenceToken = a})
-
--- | -- | The response status code.
-plersResponseStatus :: Lens' PutLogEventsResponse Int
-plersResponseStatus = lens _plersResponseStatus (\ s a -> s{_plersResponseStatus = a})
-
-instance NFData PutLogEventsResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutMetricFilter.hs
+++ /dev/null
@@ -1,148 +0,0 @@
-{-# 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.CloudWatchLogs.PutMetricFilter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates or updates a metric filter and associates it with the specified log group. Metric filters allow you to configure rules to extract metric data from log events ingested through 'PutLogEvents' .
---
---
--- The maximum number of metric filters that can be associated with a log group is 100.
---
-module Network.AWS.CloudWatchLogs.PutMetricFilter
-    (
-    -- * Creating a Request
-      putMetricFilter
-    , PutMetricFilter
-    -- * Request Lenses
-    , pmfLogGroupName
-    , pmfFilterName
-    , pmfFilterPattern
-    , pmfMetricTransformations
-
-    -- * Destructuring the Response
-    , putMetricFilterResponse
-    , PutMetricFilterResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putMetricFilter' smart constructor.
-data PutMetricFilter = PutMetricFilter'
-  { _pmfLogGroupName          :: !Text
-  , _pmfFilterName            :: !Text
-  , _pmfFilterPattern         :: !Text
-  , _pmfMetricTransformations :: !(List1 MetricTransformation)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutMetricFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pmfLogGroupName' - The name of the log group.
---
--- * 'pmfFilterName' - A name for the metric filter.
---
--- * 'pmfFilterPattern' - A filter pattern for extracting metric data out of ingested log events.
---
--- * 'pmfMetricTransformations' - A collection of information that defines how metric data gets emitted.
-putMetricFilter
-    :: Text -- ^ 'pmfLogGroupName'
-    -> Text -- ^ 'pmfFilterName'
-    -> Text -- ^ 'pmfFilterPattern'
-    -> NonEmpty MetricTransformation -- ^ 'pmfMetricTransformations'
-    -> PutMetricFilter
-putMetricFilter pLogGroupName_ pFilterName_ pFilterPattern_ pMetricTransformations_ =
-  PutMetricFilter'
-    { _pmfLogGroupName = pLogGroupName_
-    , _pmfFilterName = pFilterName_
-    , _pmfFilterPattern = pFilterPattern_
-    , _pmfMetricTransformations = _List1 # pMetricTransformations_
-    }
-
-
--- | The name of the log group.
-pmfLogGroupName :: Lens' PutMetricFilter Text
-pmfLogGroupName = lens _pmfLogGroupName (\ s a -> s{_pmfLogGroupName = a})
-
--- | A name for the metric filter.
-pmfFilterName :: Lens' PutMetricFilter Text
-pmfFilterName = lens _pmfFilterName (\ s a -> s{_pmfFilterName = a})
-
--- | A filter pattern for extracting metric data out of ingested log events.
-pmfFilterPattern :: Lens' PutMetricFilter Text
-pmfFilterPattern = lens _pmfFilterPattern (\ s a -> s{_pmfFilterPattern = a})
-
--- | A collection of information that defines how metric data gets emitted.
-pmfMetricTransformations :: Lens' PutMetricFilter (NonEmpty MetricTransformation)
-pmfMetricTransformations = lens _pmfMetricTransformations (\ s a -> s{_pmfMetricTransformations = a}) . _List1
-
-instance AWSRequest PutMetricFilter where
-        type Rs PutMetricFilter = PutMetricFilterResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull PutMetricFilterResponse'
-
-instance Hashable PutMetricFilter where
-
-instance NFData PutMetricFilter where
-
-instance ToHeaders PutMetricFilter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutMetricFilter" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutMetricFilter where
-        toJSON PutMetricFilter'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _pmfLogGroupName),
-                  Just ("filterName" .= _pmfFilterName),
-                  Just ("filterPattern" .= _pmfFilterPattern),
-                  Just
-                    ("metricTransformations" .=
-                       _pmfMetricTransformations)])
-
-instance ToPath PutMetricFilter where
-        toPath = const "/"
-
-instance ToQuery PutMetricFilter where
-        toQuery = const mempty
-
--- | /See:/ 'putMetricFilterResponse' smart constructor.
-data PutMetricFilterResponse =
-  PutMetricFilterResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutMetricFilterResponse' with the minimum fields required to make a request.
---
-putMetricFilterResponse
-    :: PutMetricFilterResponse
-putMetricFilterResponse = PutMetricFilterResponse'
-
-
-instance NFData PutMetricFilterResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutResourcePolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutResourcePolicy.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutResourcePolicy.hs
+++ /dev/null
@@ -1,141 +0,0 @@
-{-# 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.CloudWatchLogs.PutResourcePolicy
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates or updates a resource policy allowing other AWS services to put log events to this account, such as Amazon Route 53. An account can have up to 50 resource policies per region.
---
---
-module Network.AWS.CloudWatchLogs.PutResourcePolicy
-    (
-    -- * Creating a Request
-      putResourcePolicy
-    , PutResourcePolicy
-    -- * Request Lenses
-    , prpPolicyName
-    , prpPolicyDocument
-
-    -- * Destructuring the Response
-    , putResourcePolicyResponse
-    , PutResourcePolicyResponse
-    -- * Response Lenses
-    , prprsResourcePolicy
-    , prprsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putResourcePolicy' smart constructor.
-data PutResourcePolicy = PutResourcePolicy'
-  { _prpPolicyName     :: !(Maybe Text)
-  , _prpPolicyDocument :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutResourcePolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prpPolicyName' - Name of the new policy. This parameter is required.
---
--- * 'prpPolicyDocument' - Details of the new policy, including the identity of the principal that is enabled to put logs to this account. This is formatted as a JSON string. The following example creates a resource policy enabling the Route 53 service to put DNS query logs in to the specified log group. Replace "logArn" with the ARN of your CloudWatch Logs resource, such as a log group or log stream. { "Version": "2012-10-17" "Statement": [ { "Sid": "Route53LogsToCloudWatchLogs", "Effect": "Allow", "Principal": { "Service": [ "route53.amazonaws.com" ] }, "Action":"logs:PutLogEvents", "Resource": logArn } ] }
-putResourcePolicy
-    :: PutResourcePolicy
-putResourcePolicy =
-  PutResourcePolicy' {_prpPolicyName = Nothing, _prpPolicyDocument = Nothing}
-
-
--- | Name of the new policy. This parameter is required.
-prpPolicyName :: Lens' PutResourcePolicy (Maybe Text)
-prpPolicyName = lens _prpPolicyName (\ s a -> s{_prpPolicyName = a})
-
--- | Details of the new policy, including the identity of the principal that is enabled to put logs to this account. This is formatted as a JSON string. The following example creates a resource policy enabling the Route 53 service to put DNS query logs in to the specified log group. Replace "logArn" with the ARN of your CloudWatch Logs resource, such as a log group or log stream. { "Version": "2012-10-17" "Statement": [ { "Sid": "Route53LogsToCloudWatchLogs", "Effect": "Allow", "Principal": { "Service": [ "route53.amazonaws.com" ] }, "Action":"logs:PutLogEvents", "Resource": logArn } ] }
-prpPolicyDocument :: Lens' PutResourcePolicy (Maybe Text)
-prpPolicyDocument = lens _prpPolicyDocument (\ s a -> s{_prpPolicyDocument = a})
-
-instance AWSRequest PutResourcePolicy where
-        type Rs PutResourcePolicy = PutResourcePolicyResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 PutResourcePolicyResponse' <$>
-                   (x .?> "resourcePolicy") <*> (pure (fromEnum s)))
-
-instance Hashable PutResourcePolicy where
-
-instance NFData PutResourcePolicy where
-
-instance ToHeaders PutResourcePolicy where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutResourcePolicy" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutResourcePolicy where
-        toJSON PutResourcePolicy'{..}
-          = object
-              (catMaybes
-                 [("policyName" .=) <$> _prpPolicyName,
-                  ("policyDocument" .=) <$> _prpPolicyDocument])
-
-instance ToPath PutResourcePolicy where
-        toPath = const "/"
-
-instance ToQuery PutResourcePolicy where
-        toQuery = const mempty
-
--- | /See:/ 'putResourcePolicyResponse' smart constructor.
-data PutResourcePolicyResponse = PutResourcePolicyResponse'
-  { _prprsResourcePolicy :: !(Maybe ResourcePolicy)
-  , _prprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutResourcePolicyResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prprsResourcePolicy' - The new policy.
---
--- * 'prprsResponseStatus' - -- | The response status code.
-putResourcePolicyResponse
-    :: Int -- ^ 'prprsResponseStatus'
-    -> PutResourcePolicyResponse
-putResourcePolicyResponse pResponseStatus_ =
-  PutResourcePolicyResponse'
-    {_prprsResourcePolicy = Nothing, _prprsResponseStatus = pResponseStatus_}
-
-
--- | The new policy.
-prprsResourcePolicy :: Lens' PutResourcePolicyResponse (Maybe ResourcePolicy)
-prprsResourcePolicy = lens _prprsResourcePolicy (\ s a -> s{_prprsResourcePolicy = a})
-
--- | -- | The response status code.
-prprsResponseStatus :: Lens' PutResourcePolicyResponse Int
-prprsResponseStatus = lens _prprsResponseStatus (\ s a -> s{_prprsResponseStatus = a})
-
-instance NFData PutResourcePolicyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs b/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutRetentionPolicy.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# 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.CloudWatchLogs.PutRetentionPolicy
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Sets the retention of the specified log group. A retention policy allows you to configure the number of days for which to retain log events in the specified log group.
---
---
-module Network.AWS.CloudWatchLogs.PutRetentionPolicy
-    (
-    -- * Creating a Request
-      putRetentionPolicy
-    , PutRetentionPolicy
-    -- * Request Lenses
-    , prpLogGroupName
-    , prpRetentionInDays
-
-    -- * Destructuring the Response
-    , putRetentionPolicyResponse
-    , PutRetentionPolicyResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putRetentionPolicy' smart constructor.
-data PutRetentionPolicy = PutRetentionPolicy'
-  { _prpLogGroupName    :: !Text
-  , _prpRetentionInDays :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutRetentionPolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prpLogGroupName' - The name of the log group.
---
--- * 'prpRetentionInDays' - Undocumented member.
-putRetentionPolicy
-    :: Text -- ^ 'prpLogGroupName'
-    -> Int -- ^ 'prpRetentionInDays'
-    -> PutRetentionPolicy
-putRetentionPolicy pLogGroupName_ pRetentionInDays_ =
-  PutRetentionPolicy'
-    {_prpLogGroupName = pLogGroupName_, _prpRetentionInDays = pRetentionInDays_}
-
-
--- | The name of the log group.
-prpLogGroupName :: Lens' PutRetentionPolicy Text
-prpLogGroupName = lens _prpLogGroupName (\ s a -> s{_prpLogGroupName = a})
-
--- | Undocumented member.
-prpRetentionInDays :: Lens' PutRetentionPolicy Int
-prpRetentionInDays = lens _prpRetentionInDays (\ s a -> s{_prpRetentionInDays = a})
-
-instance AWSRequest PutRetentionPolicy where
-        type Rs PutRetentionPolicy =
-             PutRetentionPolicyResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull PutRetentionPolicyResponse'
-
-instance Hashable PutRetentionPolicy where
-
-instance NFData PutRetentionPolicy where
-
-instance ToHeaders PutRetentionPolicy where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutRetentionPolicy" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutRetentionPolicy where
-        toJSON PutRetentionPolicy'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _prpLogGroupName),
-                  Just ("retentionInDays" .= _prpRetentionInDays)])
-
-instance ToPath PutRetentionPolicy where
-        toPath = const "/"
-
-instance ToQuery PutRetentionPolicy where
-        toQuery = const mempty
-
--- | /See:/ 'putRetentionPolicyResponse' smart constructor.
-data PutRetentionPolicyResponse =
-  PutRetentionPolicyResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutRetentionPolicyResponse' with the minimum fields required to make a request.
---
-putRetentionPolicyResponse
-    :: PutRetentionPolicyResponse
-putRetentionPolicyResponse = PutRetentionPolicyResponse'
-
-
-instance NFData PutRetentionPolicyResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs b/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/PutSubscriptionFilter.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# 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.CloudWatchLogs.PutSubscriptionFilter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates or updates a subscription filter and associates it with the specified log group. Subscription filters allow you to subscribe to a real-time stream of log events ingested through 'PutLogEvents' and have them delivered to a specific destination. Currently, the supported destinations are:
---
---
---     * An Amazon Kinesis stream belonging to the same account as the subscription filter, for same-account delivery.
---
---     * A logical destination that belongs to a different account, for cross-account delivery.
---
---     * An Amazon Kinesis Firehose delivery stream that belongs to the same account as the subscription filter, for same-account delivery.
---
---     * An AWS Lambda function that belongs to the same account as the subscription filter, for same-account delivery.
---
---
---
--- There can only be one subscription filter associated with a log group. If you are updating an existing filter, you must specify the correct name in @filterName@ . Otherwise, the call fails because you cannot associate a second filter with a log group.
---
-module Network.AWS.CloudWatchLogs.PutSubscriptionFilter
-    (
-    -- * Creating a Request
-      putSubscriptionFilter
-    , PutSubscriptionFilter
-    -- * Request Lenses
-    , psfDistribution
-    , psfRoleARN
-    , psfLogGroupName
-    , psfFilterName
-    , psfFilterPattern
-    , psfDestinationARN
-
-    -- * Destructuring the Response
-    , putSubscriptionFilterResponse
-    , PutSubscriptionFilterResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putSubscriptionFilter' smart constructor.
-data PutSubscriptionFilter = PutSubscriptionFilter'
-  { _psfDistribution   :: !(Maybe Distribution)
-  , _psfRoleARN        :: !(Maybe Text)
-  , _psfLogGroupName   :: !Text
-  , _psfFilterName     :: !Text
-  , _psfFilterPattern  :: !Text
-  , _psfDestinationARN :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutSubscriptionFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psfDistribution' - The method used to distribute log data to the destination. By default log data is grouped by log stream, but the grouping can be set to random for a more even distribution. This property is only applicable when the destination is an Amazon Kinesis stream.
---
--- * 'psfRoleARN' - The ARN of an IAM role that grants CloudWatch Logs permissions to deliver ingested log events to the destination stream. You don't need to provide the ARN when you are working with a logical destination for cross-account delivery.
---
--- * 'psfLogGroupName' - The name of the log group.
---
--- * 'psfFilterName' - A name for the subscription filter. If you are updating an existing filter, you must specify the correct name in @filterName@ . Otherwise, the call fails because you cannot associate a second filter with a log group. To find the name of the filter currently associated with a log group, use 'DescribeSubscriptionFilters' .
---
--- * 'psfFilterPattern' - A filter pattern for subscribing to a filtered stream of log events.
---
--- * 'psfDestinationARN' - The ARN of the destination to deliver matching log events to. Currently, the supported destinations are:     * An Amazon Kinesis stream belonging to the same account as the subscription filter, for same-account delivery.     * A logical destination (specified using an ARN) belonging to a different account, for cross-account delivery.     * An Amazon Kinesis Firehose delivery stream belonging to the same account as the subscription filter, for same-account delivery.     * An AWS Lambda function belonging to the same account as the subscription filter, for same-account delivery.
-putSubscriptionFilter
-    :: Text -- ^ 'psfLogGroupName'
-    -> Text -- ^ 'psfFilterName'
-    -> Text -- ^ 'psfFilterPattern'
-    -> Text -- ^ 'psfDestinationARN'
-    -> PutSubscriptionFilter
-putSubscriptionFilter pLogGroupName_ pFilterName_ pFilterPattern_ pDestinationARN_ =
-  PutSubscriptionFilter'
-    { _psfDistribution = Nothing
-    , _psfRoleARN = Nothing
-    , _psfLogGroupName = pLogGroupName_
-    , _psfFilterName = pFilterName_
-    , _psfFilterPattern = pFilterPattern_
-    , _psfDestinationARN = pDestinationARN_
-    }
-
-
--- | The method used to distribute log data to the destination. By default log data is grouped by log stream, but the grouping can be set to random for a more even distribution. This property is only applicable when the destination is an Amazon Kinesis stream.
-psfDistribution :: Lens' PutSubscriptionFilter (Maybe Distribution)
-psfDistribution = lens _psfDistribution (\ s a -> s{_psfDistribution = a})
-
--- | The ARN of an IAM role that grants CloudWatch Logs permissions to deliver ingested log events to the destination stream. You don't need to provide the ARN when you are working with a logical destination for cross-account delivery.
-psfRoleARN :: Lens' PutSubscriptionFilter (Maybe Text)
-psfRoleARN = lens _psfRoleARN (\ s a -> s{_psfRoleARN = a})
-
--- | The name of the log group.
-psfLogGroupName :: Lens' PutSubscriptionFilter Text
-psfLogGroupName = lens _psfLogGroupName (\ s a -> s{_psfLogGroupName = a})
-
--- | A name for the subscription filter. If you are updating an existing filter, you must specify the correct name in @filterName@ . Otherwise, the call fails because you cannot associate a second filter with a log group. To find the name of the filter currently associated with a log group, use 'DescribeSubscriptionFilters' .
-psfFilterName :: Lens' PutSubscriptionFilter Text
-psfFilterName = lens _psfFilterName (\ s a -> s{_psfFilterName = a})
-
--- | A filter pattern for subscribing to a filtered stream of log events.
-psfFilterPattern :: Lens' PutSubscriptionFilter Text
-psfFilterPattern = lens _psfFilterPattern (\ s a -> s{_psfFilterPattern = a})
-
--- | The ARN of the destination to deliver matching log events to. Currently, the supported destinations are:     * An Amazon Kinesis stream belonging to the same account as the subscription filter, for same-account delivery.     * A logical destination (specified using an ARN) belonging to a different account, for cross-account delivery.     * An Amazon Kinesis Firehose delivery stream belonging to the same account as the subscription filter, for same-account delivery.     * An AWS Lambda function belonging to the same account as the subscription filter, for same-account delivery.
-psfDestinationARN :: Lens' PutSubscriptionFilter Text
-psfDestinationARN = lens _psfDestinationARN (\ s a -> s{_psfDestinationARN = a})
-
-instance AWSRequest PutSubscriptionFilter where
-        type Rs PutSubscriptionFilter =
-             PutSubscriptionFilterResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull PutSubscriptionFilterResponse'
-
-instance Hashable PutSubscriptionFilter where
-
-instance NFData PutSubscriptionFilter where
-
-instance ToHeaders PutSubscriptionFilter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.PutSubscriptionFilter" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutSubscriptionFilter where
-        toJSON PutSubscriptionFilter'{..}
-          = object
-              (catMaybes
-                 [("distribution" .=) <$> _psfDistribution,
-                  ("roleArn" .=) <$> _psfRoleARN,
-                  Just ("logGroupName" .= _psfLogGroupName),
-                  Just ("filterName" .= _psfFilterName),
-                  Just ("filterPattern" .= _psfFilterPattern),
-                  Just ("destinationArn" .= _psfDestinationARN)])
-
-instance ToPath PutSubscriptionFilter where
-        toPath = const "/"
-
-instance ToQuery PutSubscriptionFilter where
-        toQuery = const mempty
-
--- | /See:/ 'putSubscriptionFilterResponse' smart constructor.
-data PutSubscriptionFilterResponse =
-  PutSubscriptionFilterResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutSubscriptionFilterResponse' with the minimum fields required to make a request.
---
-putSubscriptionFilterResponse
-    :: PutSubscriptionFilterResponse
-putSubscriptionFilterResponse = PutSubscriptionFilterResponse'
-
-
-instance NFData PutSubscriptionFilterResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/TagLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/TagLogGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/TagLogGroup.hs
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# 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.CloudWatchLogs.TagLogGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Adds or updates the specified tags for the specified log group.
---
---
--- To list the tags for a log group, use 'ListTagsLogGroup' . To remove tags, use 'UntagLogGroup' .
---
--- For more information about tags, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/log-group-tagging.html Tag Log Groups in Amazon CloudWatch Logs> in the /Amazon CloudWatch Logs User Guide/ .
---
-module Network.AWS.CloudWatchLogs.TagLogGroup
-    (
-    -- * Creating a Request
-      tagLogGroup
-    , TagLogGroup
-    -- * Request Lenses
-    , tlgLogGroupName
-    , tlgTags
-
-    -- * Destructuring the Response
-    , tagLogGroupResponse
-    , TagLogGroupResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'tagLogGroup' smart constructor.
-data TagLogGroup = TagLogGroup'
-  { _tlgLogGroupName :: !Text
-  , _tlgTags         :: !(Map Text Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagLogGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tlgLogGroupName' - The name of the log group.
---
--- * 'tlgTags' - The key-value pairs to use for the tags.
-tagLogGroup
-    :: Text -- ^ 'tlgLogGroupName'
-    -> TagLogGroup
-tagLogGroup pLogGroupName_ =
-  TagLogGroup' {_tlgLogGroupName = pLogGroupName_, _tlgTags = mempty}
-
-
--- | The name of the log group.
-tlgLogGroupName :: Lens' TagLogGroup Text
-tlgLogGroupName = lens _tlgLogGroupName (\ s a -> s{_tlgLogGroupName = a})
-
--- | The key-value pairs to use for the tags.
-tlgTags :: Lens' TagLogGroup (HashMap Text Text)
-tlgTags = lens _tlgTags (\ s a -> s{_tlgTags = a}) . _Map
-
-instance AWSRequest TagLogGroup where
-        type Rs TagLogGroup = TagLogGroupResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull TagLogGroupResponse'
-
-instance Hashable TagLogGroup where
-
-instance NFData TagLogGroup where
-
-instance ToHeaders TagLogGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.TagLogGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON TagLogGroup where
-        toJSON TagLogGroup'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _tlgLogGroupName),
-                  Just ("tags" .= _tlgTags)])
-
-instance ToPath TagLogGroup where
-        toPath = const "/"
-
-instance ToQuery TagLogGroup where
-        toQuery = const mempty
-
--- | /See:/ 'tagLogGroupResponse' smart constructor.
-data TagLogGroupResponse =
-  TagLogGroupResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagLogGroupResponse' with the minimum fields required to make a request.
---
-tagLogGroupResponse
-    :: TagLogGroupResponse
-tagLogGroupResponse = TagLogGroupResponse'
-
-
-instance NFData TagLogGroupResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs b/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/TestMetricFilter.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# 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.CloudWatchLogs.TestMetricFilter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Tests the filter pattern of a metric filter against a sample of log event messages. You can use this operation to validate the correctness of a metric filter pattern.
---
---
-module Network.AWS.CloudWatchLogs.TestMetricFilter
-    (
-    -- * Creating a Request
-      testMetricFilter
-    , TestMetricFilter
-    -- * Request Lenses
-    , tmfFilterPattern
-    , tmfLogEventMessages
-
-    -- * Destructuring the Response
-    , testMetricFilterResponse
-    , TestMetricFilterResponse
-    -- * Response Lenses
-    , tmfrsMatches
-    , tmfrsResponseStatus
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'testMetricFilter' smart constructor.
-data TestMetricFilter = TestMetricFilter'
-  { _tmfFilterPattern    :: !Text
-  , _tmfLogEventMessages :: !(List1 Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TestMetricFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tmfFilterPattern' - Undocumented member.
---
--- * 'tmfLogEventMessages' - The log event messages to test.
-testMetricFilter
-    :: Text -- ^ 'tmfFilterPattern'
-    -> NonEmpty Text -- ^ 'tmfLogEventMessages'
-    -> TestMetricFilter
-testMetricFilter pFilterPattern_ pLogEventMessages_ =
-  TestMetricFilter'
-    { _tmfFilterPattern = pFilterPattern_
-    , _tmfLogEventMessages = _List1 # pLogEventMessages_
-    }
-
-
--- | Undocumented member.
-tmfFilterPattern :: Lens' TestMetricFilter Text
-tmfFilterPattern = lens _tmfFilterPattern (\ s a -> s{_tmfFilterPattern = a})
-
--- | The log event messages to test.
-tmfLogEventMessages :: Lens' TestMetricFilter (NonEmpty Text)
-tmfLogEventMessages = lens _tmfLogEventMessages (\ s a -> s{_tmfLogEventMessages = a}) . _List1
-
-instance AWSRequest TestMetricFilter where
-        type Rs TestMetricFilter = TestMetricFilterResponse
-        request = postJSON cloudWatchLogs
-        response
-          = receiveJSON
-              (\ s h x ->
-                 TestMetricFilterResponse' <$>
-                   (x .?> "matches" .!@ mempty) <*> (pure (fromEnum s)))
-
-instance Hashable TestMetricFilter where
-
-instance NFData TestMetricFilter where
-
-instance ToHeaders TestMetricFilter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.TestMetricFilter" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON TestMetricFilter where
-        toJSON TestMetricFilter'{..}
-          = object
-              (catMaybes
-                 [Just ("filterPattern" .= _tmfFilterPattern),
-                  Just ("logEventMessages" .= _tmfLogEventMessages)])
-
-instance ToPath TestMetricFilter where
-        toPath = const "/"
-
-instance ToQuery TestMetricFilter where
-        toQuery = const mempty
-
--- | /See:/ 'testMetricFilterResponse' smart constructor.
-data TestMetricFilterResponse = TestMetricFilterResponse'
-  { _tmfrsMatches        :: !(Maybe [MetricFilterMatchRecord])
-  , _tmfrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TestMetricFilterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tmfrsMatches' - The matched events.
---
--- * 'tmfrsResponseStatus' - -- | The response status code.
-testMetricFilterResponse
-    :: Int -- ^ 'tmfrsResponseStatus'
-    -> TestMetricFilterResponse
-testMetricFilterResponse pResponseStatus_ =
-  TestMetricFilterResponse'
-    {_tmfrsMatches = Nothing, _tmfrsResponseStatus = pResponseStatus_}
-
-
--- | The matched events.
-tmfrsMatches :: Lens' TestMetricFilterResponse [MetricFilterMatchRecord]
-tmfrsMatches = lens _tmfrsMatches (\ s a -> s{_tmfrsMatches = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-tmfrsResponseStatus :: Lens' TestMetricFilterResponse Int
-tmfrsResponseStatus = lens _tmfrsResponseStatus (\ s a -> s{_tmfrsResponseStatus = a})
-
-instance NFData TestMetricFilterResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/Types.hs b/gen/Network/AWS/CloudWatchLogs/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/Types.hs
+++ /dev/null
@@ -1,289 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.CloudWatchLogs.Types
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.CloudWatchLogs.Types
-    (
-    -- * Service Configuration
-      cloudWatchLogs
-
-    -- * Errors
-    , _InvalidParameterException
-    , _InvalidSequenceTokenException
-    , _ResourceAlreadyExistsException
-    , _OperationAbortedException
-    , _ServiceUnavailableException
-    , _DataAlreadyAcceptedException
-    , _InvalidOperationException
-    , _ResourceNotFoundException
-    , _LimitExceededException
-
-    -- * Distribution
-    , Distribution (..)
-
-    -- * ExportTaskStatusCode
-    , ExportTaskStatusCode (..)
-
-    -- * OrderBy
-    , OrderBy (..)
-
-    -- * Destination
-    , Destination
-    , destination
-    , dTargetARN
-    , dCreationTime
-    , dArn
-    , dAccessPolicy
-    , dDestinationName
-    , dRoleARN
-
-    -- * ExportTask
-    , ExportTask
-    , exportTask
-    , etDestinationPrefix
-    , etDestination
-    , etStatus
-    , etTaskName
-    , etTaskId
-    , etTo
-    , etFrom
-    , etLogGroupName
-    , etExecutionInfo
-
-    -- * ExportTaskExecutionInfo
-    , ExportTaskExecutionInfo
-    , exportTaskExecutionInfo
-    , eteiCreationTime
-    , eteiCompletionTime
-
-    -- * ExportTaskStatus
-    , ExportTaskStatus
-    , exportTaskStatus
-    , etsCode
-    , etsMessage
-
-    -- * FilteredLogEvent
-    , FilteredLogEvent
-    , filteredLogEvent
-    , fleIngestionTime
-    , fleLogStreamName
-    , fleMessage
-    , fleTimestamp
-    , fleEventId
-
-    -- * InputLogEvent
-    , InputLogEvent
-    , inputLogEvent
-    , ileTimestamp
-    , ileMessage
-
-    -- * LogGroup
-    , LogGroup
-    , logGroup
-    , lgCreationTime
-    , lgMetricFilterCount
-    , lgArn
-    , lgLogGroupName
-    , lgRetentionInDays
-    , lgKmsKeyId
-    , lgStoredBytes
-
-    -- * LogStream
-    , LogStream
-    , logStream
-    , lsCreationTime
-    , lsUploadSequenceToken
-    , lsArn
-    , lsFirstEventTimestamp
-    , lsLogStreamName
-    , lsStoredBytes
-    , lsLastIngestionTime
-    , lsLastEventTimestamp
-
-    -- * MetricFilter
-    , MetricFilter
-    , metricFilter
-    , mfCreationTime
-    , mfFilterName
-    , mfLogGroupName
-    , mfFilterPattern
-    , mfMetricTransformations
-
-    -- * MetricFilterMatchRecord
-    , MetricFilterMatchRecord
-    , metricFilterMatchRecord
-    , mfmrExtractedValues
-    , mfmrEventNumber
-    , mfmrEventMessage
-
-    -- * MetricTransformation
-    , MetricTransformation
-    , metricTransformation
-    , mtDefaultValue
-    , mtMetricName
-    , mtMetricNamespace
-    , mtMetricValue
-
-    -- * OutputLogEvent
-    , OutputLogEvent
-    , outputLogEvent
-    , oleIngestionTime
-    , oleMessage
-    , oleTimestamp
-
-    -- * RejectedLogEventsInfo
-    , RejectedLogEventsInfo
-    , rejectedLogEventsInfo
-    , rleiTooOldLogEventEndIndex
-    , rleiTooNewLogEventStartIndex
-    , rleiExpiredLogEventEndIndex
-
-    -- * ResourcePolicy
-    , ResourcePolicy
-    , resourcePolicy
-    , rpPolicyName
-    , rpPolicyDocument
-    , rpLastUpdatedTime
-
-    -- * SearchedLogStream
-    , SearchedLogStream
-    , searchedLogStream
-    , slsLogStreamName
-    , slsSearchedCompletely
-
-    -- * SubscriptionFilter
-    , SubscriptionFilter
-    , subscriptionFilter
-    , sfCreationTime
-    , sfFilterName
-    , sfDistribution
-    , sfDestinationARN
-    , sfLogGroupName
-    , sfFilterPattern
-    , sfRoleARN
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.CloudWatchLogs.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2014-03-28@ of the Amazon CloudWatch Logs SDK configuration.
-cloudWatchLogs :: Service
-cloudWatchLogs =
-  Service
-    { _svcAbbrev = "CloudWatchLogs"
-    , _svcSigner = v4
-    , _svcPrefix = "logs"
-    , _svcVersion = "2014-03-28"
-    , _svcEndpoint = defaultEndpoint cloudWatchLogs
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "CloudWatchLogs"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | A parameter is specified incorrectly.
---
---
-_InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidParameterException =
-  _MatchServiceError cloudWatchLogs "InvalidParameterException"
-
-
--- | The sequence token is not valid.
---
---
-_InvalidSequenceTokenException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidSequenceTokenException =
-  _MatchServiceError cloudWatchLogs "InvalidSequenceTokenException"
-
-
--- | The specified resource already exists.
---
---
-_ResourceAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceAlreadyExistsException =
-  _MatchServiceError cloudWatchLogs "ResourceAlreadyExistsException"
-
-
--- | Multiple requests to update the same resource were in conflict.
---
---
-_OperationAbortedException :: AsError a => Getting (First ServiceError) a ServiceError
-_OperationAbortedException =
-  _MatchServiceError cloudWatchLogs "OperationAbortedException"
-
-
--- | The service cannot complete the request.
---
---
-_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_ServiceUnavailableException =
-  _MatchServiceError cloudWatchLogs "ServiceUnavailableException"
-
-
--- | The event was already logged.
---
---
-_DataAlreadyAcceptedException :: AsError a => Getting (First ServiceError) a ServiceError
-_DataAlreadyAcceptedException =
-  _MatchServiceError cloudWatchLogs "DataAlreadyAcceptedException"
-
-
--- | The operation is not valid on the specified resource.
---
---
-_InvalidOperationException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidOperationException =
-  _MatchServiceError cloudWatchLogs "InvalidOperationException"
-
-
--- | The specified resource does not exist.
---
---
-_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFoundException =
-  _MatchServiceError cloudWatchLogs "ResourceNotFoundException"
-
-
--- | You have reached the maximum number of resources that can be created.
---
---
-_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededException =
-  _MatchServiceError cloudWatchLogs "LimitExceededException"
-
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs b/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/Types/Product.hs
+++ /dev/null
@@ -1,1117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.CloudWatchLogs.Types.Product
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.CloudWatchLogs.Types.Product where
-
-import Network.AWS.CloudWatchLogs.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | Represents a cross-account destination that receives subscription log events.
---
---
---
--- /See:/ 'destination' smart constructor.
-data Destination = Destination'
-  { _dTargetARN       :: !(Maybe Text)
-  , _dCreationTime    :: !(Maybe Nat)
-  , _dArn             :: !(Maybe Text)
-  , _dAccessPolicy    :: !(Maybe Text)
-  , _dDestinationName :: !(Maybe Text)
-  , _dRoleARN         :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Destination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dTargetARN' - The Amazon Resource Name (ARN) of the physical target to where the log events are delivered (for example, a Kinesis stream).
---
--- * 'dCreationTime' - The creation time of the destination, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'dArn' - The ARN of this destination.
---
--- * 'dAccessPolicy' - An IAM policy document that governs which AWS accounts can create subscription filters against this destination.
---
--- * 'dDestinationName' - The name of the destination.
---
--- * 'dRoleARN' - A role for impersonation, used when delivering log events to the target.
-destination
-    :: Destination
-destination =
-  Destination'
-    { _dTargetARN = Nothing
-    , _dCreationTime = Nothing
-    , _dArn = Nothing
-    , _dAccessPolicy = Nothing
-    , _dDestinationName = Nothing
-    , _dRoleARN = Nothing
-    }
-
-
--- | The Amazon Resource Name (ARN) of the physical target to where the log events are delivered (for example, a Kinesis stream).
-dTargetARN :: Lens' Destination (Maybe Text)
-dTargetARN = lens _dTargetARN (\ s a -> s{_dTargetARN = a})
-
--- | The creation time of the destination, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-dCreationTime :: Lens' Destination (Maybe Natural)
-dCreationTime = lens _dCreationTime (\ s a -> s{_dCreationTime = a}) . mapping _Nat
-
--- | The ARN of this destination.
-dArn :: Lens' Destination (Maybe Text)
-dArn = lens _dArn (\ s a -> s{_dArn = a})
-
--- | An IAM policy document that governs which AWS accounts can create subscription filters against this destination.
-dAccessPolicy :: Lens' Destination (Maybe Text)
-dAccessPolicy = lens _dAccessPolicy (\ s a -> s{_dAccessPolicy = a})
-
--- | The name of the destination.
-dDestinationName :: Lens' Destination (Maybe Text)
-dDestinationName = lens _dDestinationName (\ s a -> s{_dDestinationName = a})
-
--- | A role for impersonation, used when delivering log events to the target.
-dRoleARN :: Lens' Destination (Maybe Text)
-dRoleARN = lens _dRoleARN (\ s a -> s{_dRoleARN = a})
-
-instance FromJSON Destination where
-        parseJSON
-          = withObject "Destination"
-              (\ x ->
-                 Destination' <$>
-                   (x .:? "targetArn") <*> (x .:? "creationTime") <*>
-                     (x .:? "arn")
-                     <*> (x .:? "accessPolicy")
-                     <*> (x .:? "destinationName")
-                     <*> (x .:? "roleArn"))
-
-instance Hashable Destination where
-
-instance NFData Destination where
-
--- | Represents an export task.
---
---
---
--- /See:/ 'exportTask' smart constructor.
-data ExportTask = ExportTask'
-  { _etDestinationPrefix :: !(Maybe Text)
-  , _etDestination       :: !(Maybe Text)
-  , _etStatus            :: !(Maybe ExportTaskStatus)
-  , _etTaskName          :: !(Maybe Text)
-  , _etTaskId            :: !(Maybe Text)
-  , _etTo                :: !(Maybe Nat)
-  , _etFrom              :: !(Maybe Nat)
-  , _etLogGroupName      :: !(Maybe Text)
-  , _etExecutionInfo     :: !(Maybe ExportTaskExecutionInfo)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etDestinationPrefix' - The prefix that was used as the start of Amazon S3 key for every object exported.
---
--- * 'etDestination' - The name of Amazon S3 bucket to which the log data was exported.
---
--- * 'etStatus' - The status of the export task.
---
--- * 'etTaskName' - The name of the export task.
---
--- * 'etTaskId' - The ID of the export task.
---
--- * 'etTo' - The end time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not exported.
---
--- * 'etFrom' - The start time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp before this time are not exported.
---
--- * 'etLogGroupName' - The name of the log group from which logs data was exported.
---
--- * 'etExecutionInfo' - Execution info about the export task.
-exportTask
-    :: ExportTask
-exportTask =
-  ExportTask'
-    { _etDestinationPrefix = Nothing
-    , _etDestination = Nothing
-    , _etStatus = Nothing
-    , _etTaskName = Nothing
-    , _etTaskId = Nothing
-    , _etTo = Nothing
-    , _etFrom = Nothing
-    , _etLogGroupName = Nothing
-    , _etExecutionInfo = Nothing
-    }
-
-
--- | The prefix that was used as the start of Amazon S3 key for every object exported.
-etDestinationPrefix :: Lens' ExportTask (Maybe Text)
-etDestinationPrefix = lens _etDestinationPrefix (\ s a -> s{_etDestinationPrefix = a})
-
--- | The name of Amazon S3 bucket to which the log data was exported.
-etDestination :: Lens' ExportTask (Maybe Text)
-etDestination = lens _etDestination (\ s a -> s{_etDestination = a})
-
--- | The status of the export task.
-etStatus :: Lens' ExportTask (Maybe ExportTaskStatus)
-etStatus = lens _etStatus (\ s a -> s{_etStatus = a})
-
--- | The name of the export task.
-etTaskName :: Lens' ExportTask (Maybe Text)
-etTaskName = lens _etTaskName (\ s a -> s{_etTaskName = a})
-
--- | The ID of the export task.
-etTaskId :: Lens' ExportTask (Maybe Text)
-etTaskId = lens _etTaskId (\ s a -> s{_etTaskId = a})
-
--- | The end time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not exported.
-etTo :: Lens' ExportTask (Maybe Natural)
-etTo = lens _etTo (\ s a -> s{_etTo = a}) . mapping _Nat
-
--- | The start time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp before this time are not exported.
-etFrom :: Lens' ExportTask (Maybe Natural)
-etFrom = lens _etFrom (\ s a -> s{_etFrom = a}) . mapping _Nat
-
--- | The name of the log group from which logs data was exported.
-etLogGroupName :: Lens' ExportTask (Maybe Text)
-etLogGroupName = lens _etLogGroupName (\ s a -> s{_etLogGroupName = a})
-
--- | Execution info about the export task.
-etExecutionInfo :: Lens' ExportTask (Maybe ExportTaskExecutionInfo)
-etExecutionInfo = lens _etExecutionInfo (\ s a -> s{_etExecutionInfo = a})
-
-instance FromJSON ExportTask where
-        parseJSON
-          = withObject "ExportTask"
-              (\ x ->
-                 ExportTask' <$>
-                   (x .:? "destinationPrefix") <*> (x .:? "destination")
-                     <*> (x .:? "status")
-                     <*> (x .:? "taskName")
-                     <*> (x .:? "taskId")
-                     <*> (x .:? "to")
-                     <*> (x .:? "from")
-                     <*> (x .:? "logGroupName")
-                     <*> (x .:? "executionInfo"))
-
-instance Hashable ExportTask where
-
-instance NFData ExportTask where
-
--- | Represents the status of an export task.
---
---
---
--- /See:/ 'exportTaskExecutionInfo' smart constructor.
-data ExportTaskExecutionInfo = ExportTaskExecutionInfo'
-  { _eteiCreationTime   :: !(Maybe Nat)
-  , _eteiCompletionTime :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportTaskExecutionInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eteiCreationTime' - The creation time of the export task, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'eteiCompletionTime' - The completion time of the export task, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-exportTaskExecutionInfo
-    :: ExportTaskExecutionInfo
-exportTaskExecutionInfo =
-  ExportTaskExecutionInfo'
-    {_eteiCreationTime = Nothing, _eteiCompletionTime = Nothing}
-
-
--- | The creation time of the export task, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-eteiCreationTime :: Lens' ExportTaskExecutionInfo (Maybe Natural)
-eteiCreationTime = lens _eteiCreationTime (\ s a -> s{_eteiCreationTime = a}) . mapping _Nat
-
--- | The completion time of the export task, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-eteiCompletionTime :: Lens' ExportTaskExecutionInfo (Maybe Natural)
-eteiCompletionTime = lens _eteiCompletionTime (\ s a -> s{_eteiCompletionTime = a}) . mapping _Nat
-
-instance FromJSON ExportTaskExecutionInfo where
-        parseJSON
-          = withObject "ExportTaskExecutionInfo"
-              (\ x ->
-                 ExportTaskExecutionInfo' <$>
-                   (x .:? "creationTime") <*> (x .:? "completionTime"))
-
-instance Hashable ExportTaskExecutionInfo where
-
-instance NFData ExportTaskExecutionInfo where
-
--- | Represents the status of an export task.
---
---
---
--- /See:/ 'exportTaskStatus' smart constructor.
-data ExportTaskStatus = ExportTaskStatus'
-  { _etsCode    :: !(Maybe ExportTaskStatusCode)
-  , _etsMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportTaskStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etsCode' - The status code of the export task.
---
--- * 'etsMessage' - The status message related to the status code.
-exportTaskStatus
-    :: ExportTaskStatus
-exportTaskStatus = ExportTaskStatus' {_etsCode = Nothing, _etsMessage = Nothing}
-
-
--- | The status code of the export task.
-etsCode :: Lens' ExportTaskStatus (Maybe ExportTaskStatusCode)
-etsCode = lens _etsCode (\ s a -> s{_etsCode = a})
-
--- | The status message related to the status code.
-etsMessage :: Lens' ExportTaskStatus (Maybe Text)
-etsMessage = lens _etsMessage (\ s a -> s{_etsMessage = a})
-
-instance FromJSON ExportTaskStatus where
-        parseJSON
-          = withObject "ExportTaskStatus"
-              (\ x ->
-                 ExportTaskStatus' <$>
-                   (x .:? "code") <*> (x .:? "message"))
-
-instance Hashable ExportTaskStatus where
-
-instance NFData ExportTaskStatus where
-
--- | Represents a matched event.
---
---
---
--- /See:/ 'filteredLogEvent' smart constructor.
-data FilteredLogEvent = FilteredLogEvent'
-  { _fleIngestionTime :: !(Maybe Nat)
-  , _fleLogStreamName :: !(Maybe Text)
-  , _fleMessage       :: !(Maybe Text)
-  , _fleTimestamp     :: !(Maybe Nat)
-  , _fleEventId       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FilteredLogEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fleIngestionTime' - The time the event was ingested, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'fleLogStreamName' - The name of the log stream this event belongs to.
---
--- * 'fleMessage' - The data contained in the log event.
---
--- * 'fleTimestamp' - The time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'fleEventId' - The ID of the event.
-filteredLogEvent
-    :: FilteredLogEvent
-filteredLogEvent =
-  FilteredLogEvent'
-    { _fleIngestionTime = Nothing
-    , _fleLogStreamName = Nothing
-    , _fleMessage = Nothing
-    , _fleTimestamp = Nothing
-    , _fleEventId = Nothing
-    }
-
-
--- | The time the event was ingested, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-fleIngestionTime :: Lens' FilteredLogEvent (Maybe Natural)
-fleIngestionTime = lens _fleIngestionTime (\ s a -> s{_fleIngestionTime = a}) . mapping _Nat
-
--- | The name of the log stream this event belongs to.
-fleLogStreamName :: Lens' FilteredLogEvent (Maybe Text)
-fleLogStreamName = lens _fleLogStreamName (\ s a -> s{_fleLogStreamName = a})
-
--- | The data contained in the log event.
-fleMessage :: Lens' FilteredLogEvent (Maybe Text)
-fleMessage = lens _fleMessage (\ s a -> s{_fleMessage = a})
-
--- | The time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-fleTimestamp :: Lens' FilteredLogEvent (Maybe Natural)
-fleTimestamp = lens _fleTimestamp (\ s a -> s{_fleTimestamp = a}) . mapping _Nat
-
--- | The ID of the event.
-fleEventId :: Lens' FilteredLogEvent (Maybe Text)
-fleEventId = lens _fleEventId (\ s a -> s{_fleEventId = a})
-
-instance FromJSON FilteredLogEvent where
-        parseJSON
-          = withObject "FilteredLogEvent"
-              (\ x ->
-                 FilteredLogEvent' <$>
-                   (x .:? "ingestionTime") <*> (x .:? "logStreamName")
-                     <*> (x .:? "message")
-                     <*> (x .:? "timestamp")
-                     <*> (x .:? "eventId"))
-
-instance Hashable FilteredLogEvent where
-
-instance NFData FilteredLogEvent where
-
--- | Represents a log event, which is a record of activity that was recorded by the application or resource being monitored.
---
---
---
--- /See:/ 'inputLogEvent' smart constructor.
-data InputLogEvent = InputLogEvent'
-  { _ileTimestamp :: !Nat
-  , _ileMessage   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InputLogEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ileTimestamp' - The time the event occurred, expressed as the number of milliseconds fter Jan 1, 1970 00:00:00 UTC.
---
--- * 'ileMessage' - The raw event message.
-inputLogEvent
-    :: Natural -- ^ 'ileTimestamp'
-    -> Text -- ^ 'ileMessage'
-    -> InputLogEvent
-inputLogEvent pTimestamp_ pMessage_ =
-  InputLogEvent' {_ileTimestamp = _Nat # pTimestamp_, _ileMessage = pMessage_}
-
-
--- | The time the event occurred, expressed as the number of milliseconds fter Jan 1, 1970 00:00:00 UTC.
-ileTimestamp :: Lens' InputLogEvent Natural
-ileTimestamp = lens _ileTimestamp (\ s a -> s{_ileTimestamp = a}) . _Nat
-
--- | The raw event message.
-ileMessage :: Lens' InputLogEvent Text
-ileMessage = lens _ileMessage (\ s a -> s{_ileMessage = a})
-
-instance Hashable InputLogEvent where
-
-instance NFData InputLogEvent where
-
-instance ToJSON InputLogEvent where
-        toJSON InputLogEvent'{..}
-          = object
-              (catMaybes
-                 [Just ("timestamp" .= _ileTimestamp),
-                  Just ("message" .= _ileMessage)])
-
--- | Represents a log group.
---
---
---
--- /See:/ 'logGroup' smart constructor.
-data LogGroup = LogGroup'
-  { _lgCreationTime      :: !(Maybe Nat)
-  , _lgMetricFilterCount :: !(Maybe Int)
-  , _lgArn               :: !(Maybe Text)
-  , _lgLogGroupName      :: !(Maybe Text)
-  , _lgRetentionInDays   :: !(Maybe Int)
-  , _lgKmsKeyId          :: !(Maybe Text)
-  , _lgStoredBytes       :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LogGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lgCreationTime' - The creation time of the log group, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'lgMetricFilterCount' - The number of metric filters.
---
--- * 'lgArn' - The Amazon Resource Name (ARN) of the log group.
---
--- * 'lgLogGroupName' - The name of the log group.
---
--- * 'lgRetentionInDays' - Undocumented member.
---
--- * 'lgKmsKeyId' - The Amazon Resource Name (ARN) of the CMK to use when encrypting log data.
---
--- * 'lgStoredBytes' - The number of bytes stored.
-logGroup
-    :: LogGroup
-logGroup =
-  LogGroup'
-    { _lgCreationTime = Nothing
-    , _lgMetricFilterCount = Nothing
-    , _lgArn = Nothing
-    , _lgLogGroupName = Nothing
-    , _lgRetentionInDays = Nothing
-    , _lgKmsKeyId = Nothing
-    , _lgStoredBytes = Nothing
-    }
-
-
--- | The creation time of the log group, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-lgCreationTime :: Lens' LogGroup (Maybe Natural)
-lgCreationTime = lens _lgCreationTime (\ s a -> s{_lgCreationTime = a}) . mapping _Nat
-
--- | The number of metric filters.
-lgMetricFilterCount :: Lens' LogGroup (Maybe Int)
-lgMetricFilterCount = lens _lgMetricFilterCount (\ s a -> s{_lgMetricFilterCount = a})
-
--- | The Amazon Resource Name (ARN) of the log group.
-lgArn :: Lens' LogGroup (Maybe Text)
-lgArn = lens _lgArn (\ s a -> s{_lgArn = a})
-
--- | The name of the log group.
-lgLogGroupName :: Lens' LogGroup (Maybe Text)
-lgLogGroupName = lens _lgLogGroupName (\ s a -> s{_lgLogGroupName = a})
-
--- | Undocumented member.
-lgRetentionInDays :: Lens' LogGroup (Maybe Int)
-lgRetentionInDays = lens _lgRetentionInDays (\ s a -> s{_lgRetentionInDays = a})
-
--- | The Amazon Resource Name (ARN) of the CMK to use when encrypting log data.
-lgKmsKeyId :: Lens' LogGroup (Maybe Text)
-lgKmsKeyId = lens _lgKmsKeyId (\ s a -> s{_lgKmsKeyId = a})
-
--- | The number of bytes stored.
-lgStoredBytes :: Lens' LogGroup (Maybe Natural)
-lgStoredBytes = lens _lgStoredBytes (\ s a -> s{_lgStoredBytes = a}) . mapping _Nat
-
-instance FromJSON LogGroup where
-        parseJSON
-          = withObject "LogGroup"
-              (\ x ->
-                 LogGroup' <$>
-                   (x .:? "creationTime") <*>
-                     (x .:? "metricFilterCount")
-                     <*> (x .:? "arn")
-                     <*> (x .:? "logGroupName")
-                     <*> (x .:? "retentionInDays")
-                     <*> (x .:? "kmsKeyId")
-                     <*> (x .:? "storedBytes"))
-
-instance Hashable LogGroup where
-
-instance NFData LogGroup where
-
--- | Represents a log stream, which is a sequence of log events from a single emitter of logs.
---
---
---
--- /See:/ 'logStream' smart constructor.
-data LogStream = LogStream'
-  { _lsCreationTime        :: !(Maybe Nat)
-  , _lsUploadSequenceToken :: !(Maybe Text)
-  , _lsArn                 :: !(Maybe Text)
-  , _lsFirstEventTimestamp :: !(Maybe Nat)
-  , _lsLogStreamName       :: !(Maybe Text)
-  , _lsStoredBytes         :: !(Maybe Nat)
-  , _lsLastIngestionTime   :: !(Maybe Nat)
-  , _lsLastEventTimestamp  :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LogStream' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lsCreationTime' - The creation time of the stream, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'lsUploadSequenceToken' - The sequence token.
---
--- * 'lsArn' - The Amazon Resource Name (ARN) of the log stream.
---
--- * 'lsFirstEventTimestamp' - The time of the first event, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'lsLogStreamName' - The name of the log stream.
---
--- * 'lsStoredBytes' - The number of bytes stored.
---
--- * 'lsLastIngestionTime' - The ingestion time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'lsLastEventTimestamp' - the time of the most recent log event in the log stream in CloudWatch Logs. This number is expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. lastEventTime updates on an eventual consistency basis. It typically updates in less than an hour from ingestion, but may take longer in some rare situations.
-logStream
-    :: LogStream
-logStream =
-  LogStream'
-    { _lsCreationTime = Nothing
-    , _lsUploadSequenceToken = Nothing
-    , _lsArn = Nothing
-    , _lsFirstEventTimestamp = Nothing
-    , _lsLogStreamName = Nothing
-    , _lsStoredBytes = Nothing
-    , _lsLastIngestionTime = Nothing
-    , _lsLastEventTimestamp = Nothing
-    }
-
-
--- | The creation time of the stream, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-lsCreationTime :: Lens' LogStream (Maybe Natural)
-lsCreationTime = lens _lsCreationTime (\ s a -> s{_lsCreationTime = a}) . mapping _Nat
-
--- | The sequence token.
-lsUploadSequenceToken :: Lens' LogStream (Maybe Text)
-lsUploadSequenceToken = lens _lsUploadSequenceToken (\ s a -> s{_lsUploadSequenceToken = a})
-
--- | The Amazon Resource Name (ARN) of the log stream.
-lsArn :: Lens' LogStream (Maybe Text)
-lsArn = lens _lsArn (\ s a -> s{_lsArn = a})
-
--- | The time of the first event, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-lsFirstEventTimestamp :: Lens' LogStream (Maybe Natural)
-lsFirstEventTimestamp = lens _lsFirstEventTimestamp (\ s a -> s{_lsFirstEventTimestamp = a}) . mapping _Nat
-
--- | The name of the log stream.
-lsLogStreamName :: Lens' LogStream (Maybe Text)
-lsLogStreamName = lens _lsLogStreamName (\ s a -> s{_lsLogStreamName = a})
-
--- | The number of bytes stored.
-lsStoredBytes :: Lens' LogStream (Maybe Natural)
-lsStoredBytes = lens _lsStoredBytes (\ s a -> s{_lsStoredBytes = a}) . mapping _Nat
-
--- | The ingestion time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-lsLastIngestionTime :: Lens' LogStream (Maybe Natural)
-lsLastIngestionTime = lens _lsLastIngestionTime (\ s a -> s{_lsLastIngestionTime = a}) . mapping _Nat
-
--- | the time of the most recent log event in the log stream in CloudWatch Logs. This number is expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. lastEventTime updates on an eventual consistency basis. It typically updates in less than an hour from ingestion, but may take longer in some rare situations.
-lsLastEventTimestamp :: Lens' LogStream (Maybe Natural)
-lsLastEventTimestamp = lens _lsLastEventTimestamp (\ s a -> s{_lsLastEventTimestamp = a}) . mapping _Nat
-
-instance FromJSON LogStream where
-        parseJSON
-          = withObject "LogStream"
-              (\ x ->
-                 LogStream' <$>
-                   (x .:? "creationTime") <*>
-                     (x .:? "uploadSequenceToken")
-                     <*> (x .:? "arn")
-                     <*> (x .:? "firstEventTimestamp")
-                     <*> (x .:? "logStreamName")
-                     <*> (x .:? "storedBytes")
-                     <*> (x .:? "lastIngestionTime")
-                     <*> (x .:? "lastEventTimestamp"))
-
-instance Hashable LogStream where
-
-instance NFData LogStream where
-
--- | Metric filters express how CloudWatch Logs would extract metric observations from ingested log events and transform them into metric data in a CloudWatch metric.
---
---
---
--- /See:/ 'metricFilter' smart constructor.
-data MetricFilter = MetricFilter'
-  { _mfCreationTime          :: !(Maybe Nat)
-  , _mfFilterName            :: !(Maybe Text)
-  , _mfLogGroupName          :: !(Maybe Text)
-  , _mfFilterPattern         :: !(Maybe Text)
-  , _mfMetricTransformations :: !(Maybe (List1 MetricTransformation))
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mfCreationTime' - The creation time of the metric filter, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'mfFilterName' - The name of the metric filter.
---
--- * 'mfLogGroupName' - The name of the log group.
---
--- * 'mfFilterPattern' - Undocumented member.
---
--- * 'mfMetricTransformations' - The metric transformations.
-metricFilter
-    :: MetricFilter
-metricFilter =
-  MetricFilter'
-    { _mfCreationTime = Nothing
-    , _mfFilterName = Nothing
-    , _mfLogGroupName = Nothing
-    , _mfFilterPattern = Nothing
-    , _mfMetricTransformations = Nothing
-    }
-
-
--- | The creation time of the metric filter, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-mfCreationTime :: Lens' MetricFilter (Maybe Natural)
-mfCreationTime = lens _mfCreationTime (\ s a -> s{_mfCreationTime = a}) . mapping _Nat
-
--- | The name of the metric filter.
-mfFilterName :: Lens' MetricFilter (Maybe Text)
-mfFilterName = lens _mfFilterName (\ s a -> s{_mfFilterName = a})
-
--- | The name of the log group.
-mfLogGroupName :: Lens' MetricFilter (Maybe Text)
-mfLogGroupName = lens _mfLogGroupName (\ s a -> s{_mfLogGroupName = a})
-
--- | Undocumented member.
-mfFilterPattern :: Lens' MetricFilter (Maybe Text)
-mfFilterPattern = lens _mfFilterPattern (\ s a -> s{_mfFilterPattern = a})
-
--- | The metric transformations.
-mfMetricTransformations :: Lens' MetricFilter (Maybe (NonEmpty MetricTransformation))
-mfMetricTransformations = lens _mfMetricTransformations (\ s a -> s{_mfMetricTransformations = a}) . mapping _List1
-
-instance FromJSON MetricFilter where
-        parseJSON
-          = withObject "MetricFilter"
-              (\ x ->
-                 MetricFilter' <$>
-                   (x .:? "creationTime") <*> (x .:? "filterName") <*>
-                     (x .:? "logGroupName")
-                     <*> (x .:? "filterPattern")
-                     <*> (x .:? "metricTransformations"))
-
-instance Hashable MetricFilter where
-
-instance NFData MetricFilter where
-
--- | Represents a matched event.
---
---
---
--- /See:/ 'metricFilterMatchRecord' smart constructor.
-data MetricFilterMatchRecord = MetricFilterMatchRecord'
-  { _mfmrExtractedValues :: !(Maybe (Map Text Text))
-  , _mfmrEventNumber     :: !(Maybe Integer)
-  , _mfmrEventMessage    :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricFilterMatchRecord' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mfmrExtractedValues' - The values extracted from the event data by the filter.
---
--- * 'mfmrEventNumber' - The event number.
---
--- * 'mfmrEventMessage' - The raw event data.
-metricFilterMatchRecord
-    :: MetricFilterMatchRecord
-metricFilterMatchRecord =
-  MetricFilterMatchRecord'
-    { _mfmrExtractedValues = Nothing
-    , _mfmrEventNumber = Nothing
-    , _mfmrEventMessage = Nothing
-    }
-
-
--- | The values extracted from the event data by the filter.
-mfmrExtractedValues :: Lens' MetricFilterMatchRecord (HashMap Text Text)
-mfmrExtractedValues = lens _mfmrExtractedValues (\ s a -> s{_mfmrExtractedValues = a}) . _Default . _Map
-
--- | The event number.
-mfmrEventNumber :: Lens' MetricFilterMatchRecord (Maybe Integer)
-mfmrEventNumber = lens _mfmrEventNumber (\ s a -> s{_mfmrEventNumber = a})
-
--- | The raw event data.
-mfmrEventMessage :: Lens' MetricFilterMatchRecord (Maybe Text)
-mfmrEventMessage = lens _mfmrEventMessage (\ s a -> s{_mfmrEventMessage = a})
-
-instance FromJSON MetricFilterMatchRecord where
-        parseJSON
-          = withObject "MetricFilterMatchRecord"
-              (\ x ->
-                 MetricFilterMatchRecord' <$>
-                   (x .:? "extractedValues" .!= mempty) <*>
-                     (x .:? "eventNumber")
-                     <*> (x .:? "eventMessage"))
-
-instance Hashable MetricFilterMatchRecord where
-
-instance NFData MetricFilterMatchRecord where
-
--- | Indicates how to transform ingested log events in to metric data in a CloudWatch metric.
---
---
---
--- /See:/ 'metricTransformation' smart constructor.
-data MetricTransformation = MetricTransformation'
-  { _mtDefaultValue    :: !(Maybe Double)
-  , _mtMetricName      :: !Text
-  , _mtMetricNamespace :: !Text
-  , _mtMetricValue     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricTransformation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mtDefaultValue' - (Optional) The value to emit when a filter pattern does not match a log event. This value can be null.
---
--- * 'mtMetricName' - The name of the CloudWatch metric.
---
--- * 'mtMetricNamespace' - The namespace of the CloudWatch metric.
---
--- * 'mtMetricValue' - The value to publish to the CloudWatch metric when a filter pattern matches a log event.
-metricTransformation
-    :: Text -- ^ 'mtMetricName'
-    -> Text -- ^ 'mtMetricNamespace'
-    -> Text -- ^ 'mtMetricValue'
-    -> MetricTransformation
-metricTransformation pMetricName_ pMetricNamespace_ pMetricValue_ =
-  MetricTransformation'
-    { _mtDefaultValue = Nothing
-    , _mtMetricName = pMetricName_
-    , _mtMetricNamespace = pMetricNamespace_
-    , _mtMetricValue = pMetricValue_
-    }
-
-
--- | (Optional) The value to emit when a filter pattern does not match a log event. This value can be null.
-mtDefaultValue :: Lens' MetricTransformation (Maybe Double)
-mtDefaultValue = lens _mtDefaultValue (\ s a -> s{_mtDefaultValue = a})
-
--- | The name of the CloudWatch metric.
-mtMetricName :: Lens' MetricTransformation Text
-mtMetricName = lens _mtMetricName (\ s a -> s{_mtMetricName = a})
-
--- | The namespace of the CloudWatch metric.
-mtMetricNamespace :: Lens' MetricTransformation Text
-mtMetricNamespace = lens _mtMetricNamespace (\ s a -> s{_mtMetricNamespace = a})
-
--- | The value to publish to the CloudWatch metric when a filter pattern matches a log event.
-mtMetricValue :: Lens' MetricTransformation Text
-mtMetricValue = lens _mtMetricValue (\ s a -> s{_mtMetricValue = a})
-
-instance FromJSON MetricTransformation where
-        parseJSON
-          = withObject "MetricTransformation"
-              (\ x ->
-                 MetricTransformation' <$>
-                   (x .:? "defaultValue") <*> (x .: "metricName") <*>
-                     (x .: "metricNamespace")
-                     <*> (x .: "metricValue"))
-
-instance Hashable MetricTransformation where
-
-instance NFData MetricTransformation where
-
-instance ToJSON MetricTransformation where
-        toJSON MetricTransformation'{..}
-          = object
-              (catMaybes
-                 [("defaultValue" .=) <$> _mtDefaultValue,
-                  Just ("metricName" .= _mtMetricName),
-                  Just ("metricNamespace" .= _mtMetricNamespace),
-                  Just ("metricValue" .= _mtMetricValue)])
-
--- | Represents a log event.
---
---
---
--- /See:/ 'outputLogEvent' smart constructor.
-data OutputLogEvent = OutputLogEvent'
-  { _oleIngestionTime :: !(Maybe Nat)
-  , _oleMessage       :: !(Maybe Text)
-  , _oleTimestamp     :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'OutputLogEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oleIngestionTime' - The time the event was ingested, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'oleMessage' - The data contained in the log event.
---
--- * 'oleTimestamp' - The time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-outputLogEvent
-    :: OutputLogEvent
-outputLogEvent =
-  OutputLogEvent'
-    { _oleIngestionTime = Nothing
-    , _oleMessage = Nothing
-    , _oleTimestamp = Nothing
-    }
-
-
--- | The time the event was ingested, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-oleIngestionTime :: Lens' OutputLogEvent (Maybe Natural)
-oleIngestionTime = lens _oleIngestionTime (\ s a -> s{_oleIngestionTime = a}) . mapping _Nat
-
--- | The data contained in the log event.
-oleMessage :: Lens' OutputLogEvent (Maybe Text)
-oleMessage = lens _oleMessage (\ s a -> s{_oleMessage = a})
-
--- | The time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-oleTimestamp :: Lens' OutputLogEvent (Maybe Natural)
-oleTimestamp = lens _oleTimestamp (\ s a -> s{_oleTimestamp = a}) . mapping _Nat
-
-instance FromJSON OutputLogEvent where
-        parseJSON
-          = withObject "OutputLogEvent"
-              (\ x ->
-                 OutputLogEvent' <$>
-                   (x .:? "ingestionTime") <*> (x .:? "message") <*>
-                     (x .:? "timestamp"))
-
-instance Hashable OutputLogEvent where
-
-instance NFData OutputLogEvent where
-
--- | Represents the rejected events.
---
---
---
--- /See:/ 'rejectedLogEventsInfo' smart constructor.
-data RejectedLogEventsInfo = RejectedLogEventsInfo'
-  { _rleiTooOldLogEventEndIndex   :: !(Maybe Int)
-  , _rleiTooNewLogEventStartIndex :: !(Maybe Int)
-  , _rleiExpiredLogEventEndIndex  :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RejectedLogEventsInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rleiTooOldLogEventEndIndex' - The log events that are too old.
---
--- * 'rleiTooNewLogEventStartIndex' - The log events that are too new.
---
--- * 'rleiExpiredLogEventEndIndex' - The expired log events.
-rejectedLogEventsInfo
-    :: RejectedLogEventsInfo
-rejectedLogEventsInfo =
-  RejectedLogEventsInfo'
-    { _rleiTooOldLogEventEndIndex = Nothing
-    , _rleiTooNewLogEventStartIndex = Nothing
-    , _rleiExpiredLogEventEndIndex = Nothing
-    }
-
-
--- | The log events that are too old.
-rleiTooOldLogEventEndIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
-rleiTooOldLogEventEndIndex = lens _rleiTooOldLogEventEndIndex (\ s a -> s{_rleiTooOldLogEventEndIndex = a})
-
--- | The log events that are too new.
-rleiTooNewLogEventStartIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
-rleiTooNewLogEventStartIndex = lens _rleiTooNewLogEventStartIndex (\ s a -> s{_rleiTooNewLogEventStartIndex = a})
-
--- | The expired log events.
-rleiExpiredLogEventEndIndex :: Lens' RejectedLogEventsInfo (Maybe Int)
-rleiExpiredLogEventEndIndex = lens _rleiExpiredLogEventEndIndex (\ s a -> s{_rleiExpiredLogEventEndIndex = a})
-
-instance FromJSON RejectedLogEventsInfo where
-        parseJSON
-          = withObject "RejectedLogEventsInfo"
-              (\ x ->
-                 RejectedLogEventsInfo' <$>
-                   (x .:? "tooOldLogEventEndIndex") <*>
-                     (x .:? "tooNewLogEventStartIndex")
-                     <*> (x .:? "expiredLogEventEndIndex"))
-
-instance Hashable RejectedLogEventsInfo where
-
-instance NFData RejectedLogEventsInfo where
-
--- | A policy enabling one or more entities to put logs to a log group in this account.
---
---
---
--- /See:/ 'resourcePolicy' smart constructor.
-data ResourcePolicy = ResourcePolicy'
-  { _rpPolicyName      :: !(Maybe Text)
-  , _rpPolicyDocument  :: !(Maybe Text)
-  , _rpLastUpdatedTime :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResourcePolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rpPolicyName' - The name of the resource policy.
---
--- * 'rpPolicyDocument' - The details of the policy.
---
--- * 'rpLastUpdatedTime' - Time stamp showing when this policy was last updated, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-resourcePolicy
-    :: ResourcePolicy
-resourcePolicy =
-  ResourcePolicy'
-    { _rpPolicyName = Nothing
-    , _rpPolicyDocument = Nothing
-    , _rpLastUpdatedTime = Nothing
-    }
-
-
--- | The name of the resource policy.
-rpPolicyName :: Lens' ResourcePolicy (Maybe Text)
-rpPolicyName = lens _rpPolicyName (\ s a -> s{_rpPolicyName = a})
-
--- | The details of the policy.
-rpPolicyDocument :: Lens' ResourcePolicy (Maybe Text)
-rpPolicyDocument = lens _rpPolicyDocument (\ s a -> s{_rpPolicyDocument = a})
-
--- | Time stamp showing when this policy was last updated, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-rpLastUpdatedTime :: Lens' ResourcePolicy (Maybe Natural)
-rpLastUpdatedTime = lens _rpLastUpdatedTime (\ s a -> s{_rpLastUpdatedTime = a}) . mapping _Nat
-
-instance FromJSON ResourcePolicy where
-        parseJSON
-          = withObject "ResourcePolicy"
-              (\ x ->
-                 ResourcePolicy' <$>
-                   (x .:? "policyName") <*> (x .:? "policyDocument") <*>
-                     (x .:? "lastUpdatedTime"))
-
-instance Hashable ResourcePolicy where
-
-instance NFData ResourcePolicy where
-
--- | Represents the search status of a log stream.
---
---
---
--- /See:/ 'searchedLogStream' smart constructor.
-data SearchedLogStream = SearchedLogStream'
-  { _slsLogStreamName      :: !(Maybe Text)
-  , _slsSearchedCompletely :: !(Maybe Bool)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchedLogStream' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'slsLogStreamName' - The name of the log stream.
---
--- * 'slsSearchedCompletely' - Indicates whether all the events in this log stream were searched.
-searchedLogStream
-    :: SearchedLogStream
-searchedLogStream =
-  SearchedLogStream'
-    {_slsLogStreamName = Nothing, _slsSearchedCompletely = Nothing}
-
-
--- | The name of the log stream.
-slsLogStreamName :: Lens' SearchedLogStream (Maybe Text)
-slsLogStreamName = lens _slsLogStreamName (\ s a -> s{_slsLogStreamName = a})
-
--- | Indicates whether all the events in this log stream were searched.
-slsSearchedCompletely :: Lens' SearchedLogStream (Maybe Bool)
-slsSearchedCompletely = lens _slsSearchedCompletely (\ s a -> s{_slsSearchedCompletely = a})
-
-instance FromJSON SearchedLogStream where
-        parseJSON
-          = withObject "SearchedLogStream"
-              (\ x ->
-                 SearchedLogStream' <$>
-                   (x .:? "logStreamName") <*>
-                     (x .:? "searchedCompletely"))
-
-instance Hashable SearchedLogStream where
-
-instance NFData SearchedLogStream where
-
--- | Represents a subscription filter.
---
---
---
--- /See:/ 'subscriptionFilter' smart constructor.
-data SubscriptionFilter = SubscriptionFilter'
-  { _sfCreationTime   :: !(Maybe Nat)
-  , _sfFilterName     :: !(Maybe Text)
-  , _sfDistribution   :: !(Maybe Distribution)
-  , _sfDestinationARN :: !(Maybe Text)
-  , _sfLogGroupName   :: !(Maybe Text)
-  , _sfFilterPattern  :: !(Maybe Text)
-  , _sfRoleARN        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SubscriptionFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfCreationTime' - The creation time of the subscription filter, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
---
--- * 'sfFilterName' - The name of the subscription filter.
---
--- * 'sfDistribution' - Undocumented member.
---
--- * 'sfDestinationARN' - The Amazon Resource Name (ARN) of the destination.
---
--- * 'sfLogGroupName' - The name of the log group.
---
--- * 'sfFilterPattern' - Undocumented member.
---
--- * 'sfRoleARN' -
-subscriptionFilter
-    :: SubscriptionFilter
-subscriptionFilter =
-  SubscriptionFilter'
-    { _sfCreationTime = Nothing
-    , _sfFilterName = Nothing
-    , _sfDistribution = Nothing
-    , _sfDestinationARN = Nothing
-    , _sfLogGroupName = Nothing
-    , _sfFilterPattern = Nothing
-    , _sfRoleARN = Nothing
-    }
-
-
--- | The creation time of the subscription filter, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.
-sfCreationTime :: Lens' SubscriptionFilter (Maybe Natural)
-sfCreationTime = lens _sfCreationTime (\ s a -> s{_sfCreationTime = a}) . mapping _Nat
-
--- | The name of the subscription filter.
-sfFilterName :: Lens' SubscriptionFilter (Maybe Text)
-sfFilterName = lens _sfFilterName (\ s a -> s{_sfFilterName = a})
-
--- | Undocumented member.
-sfDistribution :: Lens' SubscriptionFilter (Maybe Distribution)
-sfDistribution = lens _sfDistribution (\ s a -> s{_sfDistribution = a})
-
--- | The Amazon Resource Name (ARN) of the destination.
-sfDestinationARN :: Lens' SubscriptionFilter (Maybe Text)
-sfDestinationARN = lens _sfDestinationARN (\ s a -> s{_sfDestinationARN = a})
-
--- | The name of the log group.
-sfLogGroupName :: Lens' SubscriptionFilter (Maybe Text)
-sfLogGroupName = lens _sfLogGroupName (\ s a -> s{_sfLogGroupName = a})
-
--- | Undocumented member.
-sfFilterPattern :: Lens' SubscriptionFilter (Maybe Text)
-sfFilterPattern = lens _sfFilterPattern (\ s a -> s{_sfFilterPattern = a})
-
--- |
-sfRoleARN :: Lens' SubscriptionFilter (Maybe Text)
-sfRoleARN = lens _sfRoleARN (\ s a -> s{_sfRoleARN = a})
-
-instance FromJSON SubscriptionFilter where
-        parseJSON
-          = withObject "SubscriptionFilter"
-              (\ x ->
-                 SubscriptionFilter' <$>
-                   (x .:? "creationTime") <*> (x .:? "filterName") <*>
-                     (x .:? "distribution")
-                     <*> (x .:? "destinationArn")
-                     <*> (x .:? "logGroupName")
-                     <*> (x .:? "filterPattern")
-                     <*> (x .:? "roleArn"))
-
-instance Hashable SubscriptionFilter where
-
-instance NFData SubscriptionFilter where
diff --git a/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs b/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/Types/Sum.hs
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.CloudWatchLogs.Types.Sum
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.CloudWatchLogs.Types.Sum where
-
-import Network.AWS.Prelude
-
--- | The method used to distribute log data to the destination, which can be either random or grouped by log stream.
---
---
-data Distribution
-  = ByLogStream
-  | Random
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText Distribution where
-    parser = takeLowerText >>= \case
-        "bylogstream" -> pure ByLogStream
-        "random" -> pure Random
-        e -> fromTextError $ "Failure parsing Distribution from value: '" <> e
-           <> "'. Accepted values: bylogstream, random"
-
-instance ToText Distribution where
-    toText = \case
-        ByLogStream -> "ByLogStream"
-        Random -> "Random"
-
-instance Hashable     Distribution
-instance NFData       Distribution
-instance ToByteString Distribution
-instance ToQuery      Distribution
-instance ToHeader     Distribution
-
-instance ToJSON Distribution where
-    toJSON = toJSONText
-
-instance FromJSON Distribution where
-    parseJSON = parseJSONText "Distribution"
-
-data ExportTaskStatusCode
-  = Cancelled
-  | Completed
-  | Failed
-  | Pending
-  | PendingCancel
-  | Running
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ExportTaskStatusCode where
-    parser = takeLowerText >>= \case
-        "cancelled" -> pure Cancelled
-        "completed" -> pure Completed
-        "failed" -> pure Failed
-        "pending" -> pure Pending
-        "pending_cancel" -> pure PendingCancel
-        "running" -> pure Running
-        e -> fromTextError $ "Failure parsing ExportTaskStatusCode from value: '" <> e
-           <> "'. Accepted values: cancelled, completed, failed, pending, pending_cancel, running"
-
-instance ToText ExportTaskStatusCode where
-    toText = \case
-        Cancelled -> "CANCELLED"
-        Completed -> "COMPLETED"
-        Failed -> "FAILED"
-        Pending -> "PENDING"
-        PendingCancel -> "PENDING_CANCEL"
-        Running -> "RUNNING"
-
-instance Hashable     ExportTaskStatusCode
-instance NFData       ExportTaskStatusCode
-instance ToByteString ExportTaskStatusCode
-instance ToQuery      ExportTaskStatusCode
-instance ToHeader     ExportTaskStatusCode
-
-instance ToJSON ExportTaskStatusCode where
-    toJSON = toJSONText
-
-instance FromJSON ExportTaskStatusCode where
-    parseJSON = parseJSONText "ExportTaskStatusCode"
-
-data OrderBy
-  = LastEventTime
-  | LogStreamName
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText OrderBy where
-    parser = takeLowerText >>= \case
-        "lasteventtime" -> pure LastEventTime
-        "logstreamname" -> pure LogStreamName
-        e -> fromTextError $ "Failure parsing OrderBy from value: '" <> e
-           <> "'. Accepted values: lasteventtime, logstreamname"
-
-instance ToText OrderBy where
-    toText = \case
-        LastEventTime -> "LastEventTime"
-        LogStreamName -> "LogStreamName"
-
-instance Hashable     OrderBy
-instance NFData       OrderBy
-instance ToByteString OrderBy
-instance ToQuery      OrderBy
-instance ToHeader     OrderBy
-
-instance ToJSON OrderBy where
-    toJSON = toJSONText
diff --git a/gen/Network/AWS/CloudWatchLogs/UntagLogGroup.hs b/gen/Network/AWS/CloudWatchLogs/UntagLogGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/UntagLogGroup.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# 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.CloudWatchLogs.UntagLogGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Removes the specified tags from the specified log group.
---
---
--- To list the tags for a log group, use 'ListTagsLogGroup' . To add tags, use 'UntagLogGroup' .
---
-module Network.AWS.CloudWatchLogs.UntagLogGroup
-    (
-    -- * Creating a Request
-      untagLogGroup
-    , UntagLogGroup
-    -- * Request Lenses
-    , ulgLogGroupName
-    , ulgTags
-
-    -- * Destructuring the Response
-    , untagLogGroupResponse
-    , UntagLogGroupResponse
-    ) where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.CloudWatchLogs.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'untagLogGroup' smart constructor.
-data UntagLogGroup = UntagLogGroup'
-  { _ulgLogGroupName :: !Text
-  , _ulgTags         :: !(List1 Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagLogGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ulgLogGroupName' - The name of the log group.
---
--- * 'ulgTags' - The tag keys. The corresponding tags are removed from the log group.
-untagLogGroup
-    :: Text -- ^ 'ulgLogGroupName'
-    -> NonEmpty Text -- ^ 'ulgTags'
-    -> UntagLogGroup
-untagLogGroup pLogGroupName_ pTags_ =
-  UntagLogGroup' {_ulgLogGroupName = pLogGroupName_, _ulgTags = _List1 # pTags_}
-
-
--- | The name of the log group.
-ulgLogGroupName :: Lens' UntagLogGroup Text
-ulgLogGroupName = lens _ulgLogGroupName (\ s a -> s{_ulgLogGroupName = a})
-
--- | The tag keys. The corresponding tags are removed from the log group.
-ulgTags :: Lens' UntagLogGroup (NonEmpty Text)
-ulgTags = lens _ulgTags (\ s a -> s{_ulgTags = a}) . _List1
-
-instance AWSRequest UntagLogGroup where
-        type Rs UntagLogGroup = UntagLogGroupResponse
-        request = postJSON cloudWatchLogs
-        response = receiveNull UntagLogGroupResponse'
-
-instance Hashable UntagLogGroup where
-
-instance NFData UntagLogGroup where
-
-instance ToHeaders UntagLogGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("Logs_20140328.UntagLogGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UntagLogGroup where
-        toJSON UntagLogGroup'{..}
-          = object
-              (catMaybes
-                 [Just ("logGroupName" .= _ulgLogGroupName),
-                  Just ("tags" .= _ulgTags)])
-
-instance ToPath UntagLogGroup where
-        toPath = const "/"
-
-instance ToQuery UntagLogGroup where
-        toQuery = const mempty
-
--- | /See:/ 'untagLogGroupResponse' smart constructor.
-data UntagLogGroupResponse =
-  UntagLogGroupResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagLogGroupResponse' with the minimum fields required to make a request.
---
-untagLogGroupResponse
-    :: UntagLogGroupResponse
-untagLogGroupResponse = UntagLogGroupResponse'
-
-
-instance NFData UntagLogGroupResponse where
diff --git a/gen/Network/AWS/CloudWatchLogs/Waiters.hs b/gen/Network/AWS/CloudWatchLogs/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/CloudWatchLogs/Waiters.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.CloudWatchLogs.Waiters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.CloudWatchLogs.Waiters where
-
-import Network.AWS.CloudWatchLogs.Types
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2018 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.CloudWatchLogs
+import Test.Amazonka.CloudWatchLogs.Internal
 import Test.Tasty
-import Test.AWS.CloudWatchLogs
-import Test.AWS.CloudWatchLogs.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "CloudWatchLogs"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "CloudWatchLogs"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/CloudWatchLogs.hs b/test/Test/AWS/CloudWatchLogs.hs
deleted file mode 100644
--- a/test/Test/AWS/CloudWatchLogs.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Module      : Test.AWS.CloudWatchLogs
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.CloudWatchLogs
-    ( tests
-    , fixtures
-    ) where
-
-import           Network.AWS.CloudWatchLogs
-import           Test.AWS.Gen.CloudWatchLogs
-import           Test.Tasty
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/CloudWatchLogs/Internal.hs b/test/Test/AWS/CloudWatchLogs/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/CloudWatchLogs/Internal.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.CloudWatchLogs.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.CloudWatchLogs.Internal where
-
-import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CloudWatchLogs.hs b/test/Test/AWS/Gen/CloudWatchLogs.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/CloudWatchLogs.hs
+++ /dev/null
@@ -1,633 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.CloudWatchLogs
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.CloudWatchLogs where
-
-import Data.Proxy
-import Network.AWS.CloudWatchLogs
-import Test.AWS.CloudWatchLogs.Internal
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestDescribeDestinations $
---             describeDestinations
---
---         , requestUntagLogGroup $
---             untagLogGroup
---
---         , requestCreateExportTask $
---             createExportTask
---
---         , requestPutDestination $
---             putDestination
---
---         , requestDescribeSubscriptionFilters $
---             describeSubscriptionFilters
---
---         , requestGetLogEvents $
---             getLogEvents
---
---         , requestDescribeLogGroups $
---             describeLogGroups
---
---         , requestDeleteDestination $
---             deleteDestination
---
---         , requestDisassociateKMSKey $
---             disassociateKMSKey
---
---         , requestFilterLogEvents $
---             filterLogEvents
---
---         , requestTagLogGroup $
---             tagLogGroup
---
---         , requestDescribeResourcePolicies $
---             describeResourcePolicies
---
---         , requestDeleteLogStream $
---             deleteLogStream
---
---         , requestCreateLogStream $
---             createLogStream
---
---         , requestCreateLogGroup $
---             createLogGroup
---
---         , requestDescribeExportTasks $
---             describeExportTasks
---
---         , requestCancelExportTask $
---             cancelExportTask
---
---         , requestPutSubscriptionFilter $
---             putSubscriptionFilter
---
---         , requestDeleteLogGroup $
---             deleteLogGroup
---
---         , requestDeleteSubscriptionFilter $
---             deleteSubscriptionFilter
---
---         , requestPutLogEvents $
---             putLogEvents
---
---         , requestDescribeMetricFilters $
---             describeMetricFilters
---
---         , requestTestMetricFilter $
---             testMetricFilter
---
---         , requestPutDestinationPolicy $
---             putDestinationPolicy
---
---         , requestPutMetricFilter $
---             putMetricFilter
---
---         , requestDeleteRetentionPolicy $
---             deleteRetentionPolicy
---
---         , requestDeleteMetricFilter $
---             deleteMetricFilter
---
---         , requestPutRetentionPolicy $
---             putRetentionPolicy
---
---         , requestListTagsLogGroup $
---             listTagsLogGroup
---
---         , requestPutResourcePolicy $
---             putResourcePolicy
---
---         , requestDeleteResourcePolicy $
---             deleteResourcePolicy
---
---         , requestAssociateKMSKey $
---             associateKMSKey
---
---         , requestDescribeLogStreams $
---             describeLogStreams
---
---           ]
-
---     , testGroup "response"
---         [ responseDescribeDestinations $
---             describeDestinationsResponse
---
---         , responseUntagLogGroup $
---             untagLogGroupResponse
---
---         , responseCreateExportTask $
---             createExportTaskResponse
---
---         , responsePutDestination $
---             putDestinationResponse
---
---         , responseDescribeSubscriptionFilters $
---             describeSubscriptionFiltersResponse
---
---         , responseGetLogEvents $
---             getLogEventsResponse
---
---         , responseDescribeLogGroups $
---             describeLogGroupsResponse
---
---         , responseDeleteDestination $
---             deleteDestinationResponse
---
---         , responseDisassociateKMSKey $
---             disassociateKMSKeyResponse
---
---         , responseFilterLogEvents $
---             filterLogEventsResponse
---
---         , responseTagLogGroup $
---             tagLogGroupResponse
---
---         , responseDescribeResourcePolicies $
---             describeResourcePoliciesResponse
---
---         , responseDeleteLogStream $
---             deleteLogStreamResponse
---
---         , responseCreateLogStream $
---             createLogStreamResponse
---
---         , responseCreateLogGroup $
---             createLogGroupResponse
---
---         , responseDescribeExportTasks $
---             describeExportTasksResponse
---
---         , responseCancelExportTask $
---             cancelExportTaskResponse
---
---         , responsePutSubscriptionFilter $
---             putSubscriptionFilterResponse
---
---         , responseDeleteLogGroup $
---             deleteLogGroupResponse
---
---         , responseDeleteSubscriptionFilter $
---             deleteSubscriptionFilterResponse
---
---         , responsePutLogEvents $
---             putLogEventsResponse
---
---         , responseDescribeMetricFilters $
---             describeMetricFiltersResponse
---
---         , responseTestMetricFilter $
---             testMetricFilterResponse
---
---         , responsePutDestinationPolicy $
---             putDestinationPolicyResponse
---
---         , responsePutMetricFilter $
---             putMetricFilterResponse
---
---         , responseDeleteRetentionPolicy $
---             deleteRetentionPolicyResponse
---
---         , responseDeleteMetricFilter $
---             deleteMetricFilterResponse
---
---         , responsePutRetentionPolicy $
---             putRetentionPolicyResponse
---
---         , responseListTagsLogGroup $
---             listTagsLogGroupResponse
---
---         , responsePutResourcePolicy $
---             putResourcePolicyResponse
---
---         , responseDeleteResourcePolicy $
---             deleteResourcePolicyResponse
---
---         , responseAssociateKMSKey $
---             associateKMSKeyResponse
---
---         , responseDescribeLogStreams $
---             describeLogStreamsResponse
---
---           ]
---     ]
-
--- Requests
-
-requestDescribeDestinations :: DescribeDestinations -> TestTree
-requestDescribeDestinations = req
-    "DescribeDestinations"
-    "fixture/DescribeDestinations.yaml"
-
-requestUntagLogGroup :: UntagLogGroup -> TestTree
-requestUntagLogGroup = req
-    "UntagLogGroup"
-    "fixture/UntagLogGroup.yaml"
-
-requestCreateExportTask :: CreateExportTask -> TestTree
-requestCreateExportTask = req
-    "CreateExportTask"
-    "fixture/CreateExportTask.yaml"
-
-requestPutDestination :: PutDestination -> TestTree
-requestPutDestination = req
-    "PutDestination"
-    "fixture/PutDestination.yaml"
-
-requestDescribeSubscriptionFilters :: DescribeSubscriptionFilters -> TestTree
-requestDescribeSubscriptionFilters = req
-    "DescribeSubscriptionFilters"
-    "fixture/DescribeSubscriptionFilters.yaml"
-
-requestGetLogEvents :: GetLogEvents -> TestTree
-requestGetLogEvents = req
-    "GetLogEvents"
-    "fixture/GetLogEvents.yaml"
-
-requestDescribeLogGroups :: DescribeLogGroups -> TestTree
-requestDescribeLogGroups = req
-    "DescribeLogGroups"
-    "fixture/DescribeLogGroups.yaml"
-
-requestDeleteDestination :: DeleteDestination -> TestTree
-requestDeleteDestination = req
-    "DeleteDestination"
-    "fixture/DeleteDestination.yaml"
-
-requestDisassociateKMSKey :: DisassociateKMSKey -> TestTree
-requestDisassociateKMSKey = req
-    "DisassociateKMSKey"
-    "fixture/DisassociateKMSKey.yaml"
-
-requestFilterLogEvents :: FilterLogEvents -> TestTree
-requestFilterLogEvents = req
-    "FilterLogEvents"
-    "fixture/FilterLogEvents.yaml"
-
-requestTagLogGroup :: TagLogGroup -> TestTree
-requestTagLogGroup = req
-    "TagLogGroup"
-    "fixture/TagLogGroup.yaml"
-
-requestDescribeResourcePolicies :: DescribeResourcePolicies -> TestTree
-requestDescribeResourcePolicies = req
-    "DescribeResourcePolicies"
-    "fixture/DescribeResourcePolicies.yaml"
-
-requestDeleteLogStream :: DeleteLogStream -> TestTree
-requestDeleteLogStream = req
-    "DeleteLogStream"
-    "fixture/DeleteLogStream.yaml"
-
-requestCreateLogStream :: CreateLogStream -> TestTree
-requestCreateLogStream = req
-    "CreateLogStream"
-    "fixture/CreateLogStream.yaml"
-
-requestCreateLogGroup :: CreateLogGroup -> TestTree
-requestCreateLogGroup = req
-    "CreateLogGroup"
-    "fixture/CreateLogGroup.yaml"
-
-requestDescribeExportTasks :: DescribeExportTasks -> TestTree
-requestDescribeExportTasks = req
-    "DescribeExportTasks"
-    "fixture/DescribeExportTasks.yaml"
-
-requestCancelExportTask :: CancelExportTask -> TestTree
-requestCancelExportTask = req
-    "CancelExportTask"
-    "fixture/CancelExportTask.yaml"
-
-requestPutSubscriptionFilter :: PutSubscriptionFilter -> TestTree
-requestPutSubscriptionFilter = req
-    "PutSubscriptionFilter"
-    "fixture/PutSubscriptionFilter.yaml"
-
-requestDeleteLogGroup :: DeleteLogGroup -> TestTree
-requestDeleteLogGroup = req
-    "DeleteLogGroup"
-    "fixture/DeleteLogGroup.yaml"
-
-requestDeleteSubscriptionFilter :: DeleteSubscriptionFilter -> TestTree
-requestDeleteSubscriptionFilter = req
-    "DeleteSubscriptionFilter"
-    "fixture/DeleteSubscriptionFilter.yaml"
-
-requestPutLogEvents :: PutLogEvents -> TestTree
-requestPutLogEvents = req
-    "PutLogEvents"
-    "fixture/PutLogEvents.yaml"
-
-requestDescribeMetricFilters :: DescribeMetricFilters -> TestTree
-requestDescribeMetricFilters = req
-    "DescribeMetricFilters"
-    "fixture/DescribeMetricFilters.yaml"
-
-requestTestMetricFilter :: TestMetricFilter -> TestTree
-requestTestMetricFilter = req
-    "TestMetricFilter"
-    "fixture/TestMetricFilter.yaml"
-
-requestPutDestinationPolicy :: PutDestinationPolicy -> TestTree
-requestPutDestinationPolicy = req
-    "PutDestinationPolicy"
-    "fixture/PutDestinationPolicy.yaml"
-
-requestPutMetricFilter :: PutMetricFilter -> TestTree
-requestPutMetricFilter = req
-    "PutMetricFilter"
-    "fixture/PutMetricFilter.yaml"
-
-requestDeleteRetentionPolicy :: DeleteRetentionPolicy -> TestTree
-requestDeleteRetentionPolicy = req
-    "DeleteRetentionPolicy"
-    "fixture/DeleteRetentionPolicy.yaml"
-
-requestDeleteMetricFilter :: DeleteMetricFilter -> TestTree
-requestDeleteMetricFilter = req
-    "DeleteMetricFilter"
-    "fixture/DeleteMetricFilter.yaml"
-
-requestPutRetentionPolicy :: PutRetentionPolicy -> TestTree
-requestPutRetentionPolicy = req
-    "PutRetentionPolicy"
-    "fixture/PutRetentionPolicy.yaml"
-
-requestListTagsLogGroup :: ListTagsLogGroup -> TestTree
-requestListTagsLogGroup = req
-    "ListTagsLogGroup"
-    "fixture/ListTagsLogGroup.yaml"
-
-requestPutResourcePolicy :: PutResourcePolicy -> TestTree
-requestPutResourcePolicy = req
-    "PutResourcePolicy"
-    "fixture/PutResourcePolicy.yaml"
-
-requestDeleteResourcePolicy :: DeleteResourcePolicy -> TestTree
-requestDeleteResourcePolicy = req
-    "DeleteResourcePolicy"
-    "fixture/DeleteResourcePolicy.yaml"
-
-requestAssociateKMSKey :: AssociateKMSKey -> TestTree
-requestAssociateKMSKey = req
-    "AssociateKMSKey"
-    "fixture/AssociateKMSKey.yaml"
-
-requestDescribeLogStreams :: DescribeLogStreams -> TestTree
-requestDescribeLogStreams = req
-    "DescribeLogStreams"
-    "fixture/DescribeLogStreams.yaml"
-
--- Responses
-
-responseDescribeDestinations :: DescribeDestinationsResponse -> TestTree
-responseDescribeDestinations = res
-    "DescribeDestinationsResponse"
-    "fixture/DescribeDestinationsResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeDestinations)
-
-responseUntagLogGroup :: UntagLogGroupResponse -> TestTree
-responseUntagLogGroup = res
-    "UntagLogGroupResponse"
-    "fixture/UntagLogGroupResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy UntagLogGroup)
-
-responseCreateExportTask :: CreateExportTaskResponse -> TestTree
-responseCreateExportTask = res
-    "CreateExportTaskResponse"
-    "fixture/CreateExportTaskResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy CreateExportTask)
-
-responsePutDestination :: PutDestinationResponse -> TestTree
-responsePutDestination = res
-    "PutDestinationResponse"
-    "fixture/PutDestinationResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutDestination)
-
-responseDescribeSubscriptionFilters :: DescribeSubscriptionFiltersResponse -> TestTree
-responseDescribeSubscriptionFilters = res
-    "DescribeSubscriptionFiltersResponse"
-    "fixture/DescribeSubscriptionFiltersResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeSubscriptionFilters)
-
-responseGetLogEvents :: GetLogEventsResponse -> TestTree
-responseGetLogEvents = res
-    "GetLogEventsResponse"
-    "fixture/GetLogEventsResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy GetLogEvents)
-
-responseDescribeLogGroups :: DescribeLogGroupsResponse -> TestTree
-responseDescribeLogGroups = res
-    "DescribeLogGroupsResponse"
-    "fixture/DescribeLogGroupsResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeLogGroups)
-
-responseDeleteDestination :: DeleteDestinationResponse -> TestTree
-responseDeleteDestination = res
-    "DeleteDestinationResponse"
-    "fixture/DeleteDestinationResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteDestination)
-
-responseDisassociateKMSKey :: DisassociateKMSKeyResponse -> TestTree
-responseDisassociateKMSKey = res
-    "DisassociateKMSKeyResponse"
-    "fixture/DisassociateKMSKeyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DisassociateKMSKey)
-
-responseFilterLogEvents :: FilterLogEventsResponse -> TestTree
-responseFilterLogEvents = res
-    "FilterLogEventsResponse"
-    "fixture/FilterLogEventsResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy FilterLogEvents)
-
-responseTagLogGroup :: TagLogGroupResponse -> TestTree
-responseTagLogGroup = res
-    "TagLogGroupResponse"
-    "fixture/TagLogGroupResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy TagLogGroup)
-
-responseDescribeResourcePolicies :: DescribeResourcePoliciesResponse -> TestTree
-responseDescribeResourcePolicies = res
-    "DescribeResourcePoliciesResponse"
-    "fixture/DescribeResourcePoliciesResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeResourcePolicies)
-
-responseDeleteLogStream :: DeleteLogStreamResponse -> TestTree
-responseDeleteLogStream = res
-    "DeleteLogStreamResponse"
-    "fixture/DeleteLogStreamResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteLogStream)
-
-responseCreateLogStream :: CreateLogStreamResponse -> TestTree
-responseCreateLogStream = res
-    "CreateLogStreamResponse"
-    "fixture/CreateLogStreamResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy CreateLogStream)
-
-responseCreateLogGroup :: CreateLogGroupResponse -> TestTree
-responseCreateLogGroup = res
-    "CreateLogGroupResponse"
-    "fixture/CreateLogGroupResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy CreateLogGroup)
-
-responseDescribeExportTasks :: DescribeExportTasksResponse -> TestTree
-responseDescribeExportTasks = res
-    "DescribeExportTasksResponse"
-    "fixture/DescribeExportTasksResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeExportTasks)
-
-responseCancelExportTask :: CancelExportTaskResponse -> TestTree
-responseCancelExportTask = res
-    "CancelExportTaskResponse"
-    "fixture/CancelExportTaskResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy CancelExportTask)
-
-responsePutSubscriptionFilter :: PutSubscriptionFilterResponse -> TestTree
-responsePutSubscriptionFilter = res
-    "PutSubscriptionFilterResponse"
-    "fixture/PutSubscriptionFilterResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutSubscriptionFilter)
-
-responseDeleteLogGroup :: DeleteLogGroupResponse -> TestTree
-responseDeleteLogGroup = res
-    "DeleteLogGroupResponse"
-    "fixture/DeleteLogGroupResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteLogGroup)
-
-responseDeleteSubscriptionFilter :: DeleteSubscriptionFilterResponse -> TestTree
-responseDeleteSubscriptionFilter = res
-    "DeleteSubscriptionFilterResponse"
-    "fixture/DeleteSubscriptionFilterResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteSubscriptionFilter)
-
-responsePutLogEvents :: PutLogEventsResponse -> TestTree
-responsePutLogEvents = res
-    "PutLogEventsResponse"
-    "fixture/PutLogEventsResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutLogEvents)
-
-responseDescribeMetricFilters :: DescribeMetricFiltersResponse -> TestTree
-responseDescribeMetricFilters = res
-    "DescribeMetricFiltersResponse"
-    "fixture/DescribeMetricFiltersResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeMetricFilters)
-
-responseTestMetricFilter :: TestMetricFilterResponse -> TestTree
-responseTestMetricFilter = res
-    "TestMetricFilterResponse"
-    "fixture/TestMetricFilterResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy TestMetricFilter)
-
-responsePutDestinationPolicy :: PutDestinationPolicyResponse -> TestTree
-responsePutDestinationPolicy = res
-    "PutDestinationPolicyResponse"
-    "fixture/PutDestinationPolicyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutDestinationPolicy)
-
-responsePutMetricFilter :: PutMetricFilterResponse -> TestTree
-responsePutMetricFilter = res
-    "PutMetricFilterResponse"
-    "fixture/PutMetricFilterResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutMetricFilter)
-
-responseDeleteRetentionPolicy :: DeleteRetentionPolicyResponse -> TestTree
-responseDeleteRetentionPolicy = res
-    "DeleteRetentionPolicyResponse"
-    "fixture/DeleteRetentionPolicyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteRetentionPolicy)
-
-responseDeleteMetricFilter :: DeleteMetricFilterResponse -> TestTree
-responseDeleteMetricFilter = res
-    "DeleteMetricFilterResponse"
-    "fixture/DeleteMetricFilterResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteMetricFilter)
-
-responsePutRetentionPolicy :: PutRetentionPolicyResponse -> TestTree
-responsePutRetentionPolicy = res
-    "PutRetentionPolicyResponse"
-    "fixture/PutRetentionPolicyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutRetentionPolicy)
-
-responseListTagsLogGroup :: ListTagsLogGroupResponse -> TestTree
-responseListTagsLogGroup = res
-    "ListTagsLogGroupResponse"
-    "fixture/ListTagsLogGroupResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy ListTagsLogGroup)
-
-responsePutResourcePolicy :: PutResourcePolicyResponse -> TestTree
-responsePutResourcePolicy = res
-    "PutResourcePolicyResponse"
-    "fixture/PutResourcePolicyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy PutResourcePolicy)
-
-responseDeleteResourcePolicy :: DeleteResourcePolicyResponse -> TestTree
-responseDeleteResourcePolicy = res
-    "DeleteResourcePolicyResponse"
-    "fixture/DeleteResourcePolicyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DeleteResourcePolicy)
-
-responseAssociateKMSKey :: AssociateKMSKeyResponse -> TestTree
-responseAssociateKMSKey = res
-    "AssociateKMSKeyResponse"
-    "fixture/AssociateKMSKeyResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy AssociateKMSKey)
-
-responseDescribeLogStreams :: DescribeLogStreamsResponse -> TestTree
-responseDescribeLogStreams = res
-    "DescribeLogStreamsResponse"
-    "fixture/DescribeLogStreamsResponse.proto"
-    cloudWatchLogs
-    (Proxy :: Proxy DescribeLogStreams)
diff --git a/test/Test/Amazonka/CloudWatchLogs.hs b/test/Test/Amazonka/CloudWatchLogs.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/CloudWatchLogs.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.CloudWatchLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.CloudWatchLogs
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/CloudWatchLogs/Internal.hs b/test/Test/Amazonka/CloudWatchLogs/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/CloudWatchLogs/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.CloudWatchLogs.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.CloudWatchLogs.Internal where
diff --git a/test/Test/Amazonka/Gen/CloudWatchLogs.hs b/test/Test/Amazonka/Gen/CloudWatchLogs.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/CloudWatchLogs.hs
@@ -0,0 +1,938 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.CloudWatchLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.CloudWatchLogs where
+
+import Amazonka.CloudWatchLogs
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.CloudWatchLogs.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAssociateKmsKey $
+--             newAssociateKmsKey
+--
+--         , requestCancelExportTask $
+--             newCancelExportTask
+--
+--         , requestCreateExportTask $
+--             newCreateExportTask
+--
+--         , requestCreateLogGroup $
+--             newCreateLogGroup
+--
+--         , requestCreateLogStream $
+--             newCreateLogStream
+--
+--         , requestDeleteDataProtectionPolicy $
+--             newDeleteDataProtectionPolicy
+--
+--         , requestDeleteDestination $
+--             newDeleteDestination
+--
+--         , requestDeleteLogGroup $
+--             newDeleteLogGroup
+--
+--         , requestDeleteLogStream $
+--             newDeleteLogStream
+--
+--         , requestDeleteMetricFilter $
+--             newDeleteMetricFilter
+--
+--         , requestDeleteQueryDefinition $
+--             newDeleteQueryDefinition
+--
+--         , requestDeleteResourcePolicy $
+--             newDeleteResourcePolicy
+--
+--         , requestDeleteRetentionPolicy $
+--             newDeleteRetentionPolicy
+--
+--         , requestDeleteSubscriptionFilter $
+--             newDeleteSubscriptionFilter
+--
+--         , requestDescribeDestinations $
+--             newDescribeDestinations
+--
+--         , requestDescribeExportTasks $
+--             newDescribeExportTasks
+--
+--         , requestDescribeLogGroups $
+--             newDescribeLogGroups
+--
+--         , requestDescribeLogStreams $
+--             newDescribeLogStreams
+--
+--         , requestDescribeMetricFilters $
+--             newDescribeMetricFilters
+--
+--         , requestDescribeQueries $
+--             newDescribeQueries
+--
+--         , requestDescribeQueryDefinitions $
+--             newDescribeQueryDefinitions
+--
+--         , requestDescribeResourcePolicies $
+--             newDescribeResourcePolicies
+--
+--         , requestDescribeSubscriptionFilters $
+--             newDescribeSubscriptionFilters
+--
+--         , requestDisassociateKmsKey $
+--             newDisassociateKmsKey
+--
+--         , requestFilterLogEvents $
+--             newFilterLogEvents
+--
+--         , requestGetDataProtectionPolicy $
+--             newGetDataProtectionPolicy
+--
+--         , requestGetLogEvents $
+--             newGetLogEvents
+--
+--         , requestGetLogGroupFields $
+--             newGetLogGroupFields
+--
+--         , requestGetLogRecord $
+--             newGetLogRecord
+--
+--         , requestGetQueryResults $
+--             newGetQueryResults
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutDataProtectionPolicy $
+--             newPutDataProtectionPolicy
+--
+--         , requestPutDestination $
+--             newPutDestination
+--
+--         , requestPutDestinationPolicy $
+--             newPutDestinationPolicy
+--
+--         , requestPutLogEvents $
+--             newPutLogEvents
+--
+--         , requestPutMetricFilter $
+--             newPutMetricFilter
+--
+--         , requestPutQueryDefinition $
+--             newPutQueryDefinition
+--
+--         , requestPutResourcePolicy $
+--             newPutResourcePolicy
+--
+--         , requestPutRetentionPolicy $
+--             newPutRetentionPolicy
+--
+--         , requestPutSubscriptionFilter $
+--             newPutSubscriptionFilter
+--
+--         , requestStartQuery $
+--             newStartQuery
+--
+--         , requestStopQuery $
+--             newStopQuery
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestTestMetricFilter $
+--             newTestMetricFilter
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateKmsKey $
+--             newAssociateKmsKeyResponse
+--
+--         , responseCancelExportTask $
+--             newCancelExportTaskResponse
+--
+--         , responseCreateExportTask $
+--             newCreateExportTaskResponse
+--
+--         , responseCreateLogGroup $
+--             newCreateLogGroupResponse
+--
+--         , responseCreateLogStream $
+--             newCreateLogStreamResponse
+--
+--         , responseDeleteDataProtectionPolicy $
+--             newDeleteDataProtectionPolicyResponse
+--
+--         , responseDeleteDestination $
+--             newDeleteDestinationResponse
+--
+--         , responseDeleteLogGroup $
+--             newDeleteLogGroupResponse
+--
+--         , responseDeleteLogStream $
+--             newDeleteLogStreamResponse
+--
+--         , responseDeleteMetricFilter $
+--             newDeleteMetricFilterResponse
+--
+--         , responseDeleteQueryDefinition $
+--             newDeleteQueryDefinitionResponse
+--
+--         , responseDeleteResourcePolicy $
+--             newDeleteResourcePolicyResponse
+--
+--         , responseDeleteRetentionPolicy $
+--             newDeleteRetentionPolicyResponse
+--
+--         , responseDeleteSubscriptionFilter $
+--             newDeleteSubscriptionFilterResponse
+--
+--         , responseDescribeDestinations $
+--             newDescribeDestinationsResponse
+--
+--         , responseDescribeExportTasks $
+--             newDescribeExportTasksResponse
+--
+--         , responseDescribeLogGroups $
+--             newDescribeLogGroupsResponse
+--
+--         , responseDescribeLogStreams $
+--             newDescribeLogStreamsResponse
+--
+--         , responseDescribeMetricFilters $
+--             newDescribeMetricFiltersResponse
+--
+--         , responseDescribeQueries $
+--             newDescribeQueriesResponse
+--
+--         , responseDescribeQueryDefinitions $
+--             newDescribeQueryDefinitionsResponse
+--
+--         , responseDescribeResourcePolicies $
+--             newDescribeResourcePoliciesResponse
+--
+--         , responseDescribeSubscriptionFilters $
+--             newDescribeSubscriptionFiltersResponse
+--
+--         , responseDisassociateKmsKey $
+--             newDisassociateKmsKeyResponse
+--
+--         , responseFilterLogEvents $
+--             newFilterLogEventsResponse
+--
+--         , responseGetDataProtectionPolicy $
+--             newGetDataProtectionPolicyResponse
+--
+--         , responseGetLogEvents $
+--             newGetLogEventsResponse
+--
+--         , responseGetLogGroupFields $
+--             newGetLogGroupFieldsResponse
+--
+--         , responseGetLogRecord $
+--             newGetLogRecordResponse
+--
+--         , responseGetQueryResults $
+--             newGetQueryResultsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutDataProtectionPolicy $
+--             newPutDataProtectionPolicyResponse
+--
+--         , responsePutDestination $
+--             newPutDestinationResponse
+--
+--         , responsePutDestinationPolicy $
+--             newPutDestinationPolicyResponse
+--
+--         , responsePutLogEvents $
+--             newPutLogEventsResponse
+--
+--         , responsePutMetricFilter $
+--             newPutMetricFilterResponse
+--
+--         , responsePutQueryDefinition $
+--             newPutQueryDefinitionResponse
+--
+--         , responsePutResourcePolicy $
+--             newPutResourcePolicyResponse
+--
+--         , responsePutRetentionPolicy $
+--             newPutRetentionPolicyResponse
+--
+--         , responsePutSubscriptionFilter $
+--             newPutSubscriptionFilterResponse
+--
+--         , responseStartQuery $
+--             newStartQueryResponse
+--
+--         , responseStopQuery $
+--             newStopQueryResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseTestMetricFilter $
+--             newTestMetricFilterResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateKmsKey :: AssociateKmsKey -> TestTree
+requestAssociateKmsKey =
+  req
+    "AssociateKmsKey"
+    "fixture/AssociateKmsKey.yaml"
+
+requestCancelExportTask :: CancelExportTask -> TestTree
+requestCancelExportTask =
+  req
+    "CancelExportTask"
+    "fixture/CancelExportTask.yaml"
+
+requestCreateExportTask :: CreateExportTask -> TestTree
+requestCreateExportTask =
+  req
+    "CreateExportTask"
+    "fixture/CreateExportTask.yaml"
+
+requestCreateLogGroup :: CreateLogGroup -> TestTree
+requestCreateLogGroup =
+  req
+    "CreateLogGroup"
+    "fixture/CreateLogGroup.yaml"
+
+requestCreateLogStream :: CreateLogStream -> TestTree
+requestCreateLogStream =
+  req
+    "CreateLogStream"
+    "fixture/CreateLogStream.yaml"
+
+requestDeleteDataProtectionPolicy :: DeleteDataProtectionPolicy -> TestTree
+requestDeleteDataProtectionPolicy =
+  req
+    "DeleteDataProtectionPolicy"
+    "fixture/DeleteDataProtectionPolicy.yaml"
+
+requestDeleteDestination :: DeleteDestination -> TestTree
+requestDeleteDestination =
+  req
+    "DeleteDestination"
+    "fixture/DeleteDestination.yaml"
+
+requestDeleteLogGroup :: DeleteLogGroup -> TestTree
+requestDeleteLogGroup =
+  req
+    "DeleteLogGroup"
+    "fixture/DeleteLogGroup.yaml"
+
+requestDeleteLogStream :: DeleteLogStream -> TestTree
+requestDeleteLogStream =
+  req
+    "DeleteLogStream"
+    "fixture/DeleteLogStream.yaml"
+
+requestDeleteMetricFilter :: DeleteMetricFilter -> TestTree
+requestDeleteMetricFilter =
+  req
+    "DeleteMetricFilter"
+    "fixture/DeleteMetricFilter.yaml"
+
+requestDeleteQueryDefinition :: DeleteQueryDefinition -> TestTree
+requestDeleteQueryDefinition =
+  req
+    "DeleteQueryDefinition"
+    "fixture/DeleteQueryDefinition.yaml"
+
+requestDeleteResourcePolicy :: DeleteResourcePolicy -> TestTree
+requestDeleteResourcePolicy =
+  req
+    "DeleteResourcePolicy"
+    "fixture/DeleteResourcePolicy.yaml"
+
+requestDeleteRetentionPolicy :: DeleteRetentionPolicy -> TestTree
+requestDeleteRetentionPolicy =
+  req
+    "DeleteRetentionPolicy"
+    "fixture/DeleteRetentionPolicy.yaml"
+
+requestDeleteSubscriptionFilter :: DeleteSubscriptionFilter -> TestTree
+requestDeleteSubscriptionFilter =
+  req
+    "DeleteSubscriptionFilter"
+    "fixture/DeleteSubscriptionFilter.yaml"
+
+requestDescribeDestinations :: DescribeDestinations -> TestTree
+requestDescribeDestinations =
+  req
+    "DescribeDestinations"
+    "fixture/DescribeDestinations.yaml"
+
+requestDescribeExportTasks :: DescribeExportTasks -> TestTree
+requestDescribeExportTasks =
+  req
+    "DescribeExportTasks"
+    "fixture/DescribeExportTasks.yaml"
+
+requestDescribeLogGroups :: DescribeLogGroups -> TestTree
+requestDescribeLogGroups =
+  req
+    "DescribeLogGroups"
+    "fixture/DescribeLogGroups.yaml"
+
+requestDescribeLogStreams :: DescribeLogStreams -> TestTree
+requestDescribeLogStreams =
+  req
+    "DescribeLogStreams"
+    "fixture/DescribeLogStreams.yaml"
+
+requestDescribeMetricFilters :: DescribeMetricFilters -> TestTree
+requestDescribeMetricFilters =
+  req
+    "DescribeMetricFilters"
+    "fixture/DescribeMetricFilters.yaml"
+
+requestDescribeQueries :: DescribeQueries -> TestTree
+requestDescribeQueries =
+  req
+    "DescribeQueries"
+    "fixture/DescribeQueries.yaml"
+
+requestDescribeQueryDefinitions :: DescribeQueryDefinitions -> TestTree
+requestDescribeQueryDefinitions =
+  req
+    "DescribeQueryDefinitions"
+    "fixture/DescribeQueryDefinitions.yaml"
+
+requestDescribeResourcePolicies :: DescribeResourcePolicies -> TestTree
+requestDescribeResourcePolicies =
+  req
+    "DescribeResourcePolicies"
+    "fixture/DescribeResourcePolicies.yaml"
+
+requestDescribeSubscriptionFilters :: DescribeSubscriptionFilters -> TestTree
+requestDescribeSubscriptionFilters =
+  req
+    "DescribeSubscriptionFilters"
+    "fixture/DescribeSubscriptionFilters.yaml"
+
+requestDisassociateKmsKey :: DisassociateKmsKey -> TestTree
+requestDisassociateKmsKey =
+  req
+    "DisassociateKmsKey"
+    "fixture/DisassociateKmsKey.yaml"
+
+requestFilterLogEvents :: FilterLogEvents -> TestTree
+requestFilterLogEvents =
+  req
+    "FilterLogEvents"
+    "fixture/FilterLogEvents.yaml"
+
+requestGetDataProtectionPolicy :: GetDataProtectionPolicy -> TestTree
+requestGetDataProtectionPolicy =
+  req
+    "GetDataProtectionPolicy"
+    "fixture/GetDataProtectionPolicy.yaml"
+
+requestGetLogEvents :: GetLogEvents -> TestTree
+requestGetLogEvents =
+  req
+    "GetLogEvents"
+    "fixture/GetLogEvents.yaml"
+
+requestGetLogGroupFields :: GetLogGroupFields -> TestTree
+requestGetLogGroupFields =
+  req
+    "GetLogGroupFields"
+    "fixture/GetLogGroupFields.yaml"
+
+requestGetLogRecord :: GetLogRecord -> TestTree
+requestGetLogRecord =
+  req
+    "GetLogRecord"
+    "fixture/GetLogRecord.yaml"
+
+requestGetQueryResults :: GetQueryResults -> TestTree
+requestGetQueryResults =
+  req
+    "GetQueryResults"
+    "fixture/GetQueryResults.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutDataProtectionPolicy :: PutDataProtectionPolicy -> TestTree
+requestPutDataProtectionPolicy =
+  req
+    "PutDataProtectionPolicy"
+    "fixture/PutDataProtectionPolicy.yaml"
+
+requestPutDestination :: PutDestination -> TestTree
+requestPutDestination =
+  req
+    "PutDestination"
+    "fixture/PutDestination.yaml"
+
+requestPutDestinationPolicy :: PutDestinationPolicy -> TestTree
+requestPutDestinationPolicy =
+  req
+    "PutDestinationPolicy"
+    "fixture/PutDestinationPolicy.yaml"
+
+requestPutLogEvents :: PutLogEvents -> TestTree
+requestPutLogEvents =
+  req
+    "PutLogEvents"
+    "fixture/PutLogEvents.yaml"
+
+requestPutMetricFilter :: PutMetricFilter -> TestTree
+requestPutMetricFilter =
+  req
+    "PutMetricFilter"
+    "fixture/PutMetricFilter.yaml"
+
+requestPutQueryDefinition :: PutQueryDefinition -> TestTree
+requestPutQueryDefinition =
+  req
+    "PutQueryDefinition"
+    "fixture/PutQueryDefinition.yaml"
+
+requestPutResourcePolicy :: PutResourcePolicy -> TestTree
+requestPutResourcePolicy =
+  req
+    "PutResourcePolicy"
+    "fixture/PutResourcePolicy.yaml"
+
+requestPutRetentionPolicy :: PutRetentionPolicy -> TestTree
+requestPutRetentionPolicy =
+  req
+    "PutRetentionPolicy"
+    "fixture/PutRetentionPolicy.yaml"
+
+requestPutSubscriptionFilter :: PutSubscriptionFilter -> TestTree
+requestPutSubscriptionFilter =
+  req
+    "PutSubscriptionFilter"
+    "fixture/PutSubscriptionFilter.yaml"
+
+requestStartQuery :: StartQuery -> TestTree
+requestStartQuery =
+  req
+    "StartQuery"
+    "fixture/StartQuery.yaml"
+
+requestStopQuery :: StopQuery -> TestTree
+requestStopQuery =
+  req
+    "StopQuery"
+    "fixture/StopQuery.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestTestMetricFilter :: TestMetricFilter -> TestTree
+requestTestMetricFilter =
+  req
+    "TestMetricFilter"
+    "fixture/TestMetricFilter.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+-- Responses
+
+responseAssociateKmsKey :: AssociateKmsKeyResponse -> TestTree
+responseAssociateKmsKey =
+  res
+    "AssociateKmsKeyResponse"
+    "fixture/AssociateKmsKeyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateKmsKey)
+
+responseCancelExportTask :: CancelExportTaskResponse -> TestTree
+responseCancelExportTask =
+  res
+    "CancelExportTaskResponse"
+    "fixture/CancelExportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelExportTask)
+
+responseCreateExportTask :: CreateExportTaskResponse -> TestTree
+responseCreateExportTask =
+  res
+    "CreateExportTaskResponse"
+    "fixture/CreateExportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExportTask)
+
+responseCreateLogGroup :: CreateLogGroupResponse -> TestTree
+responseCreateLogGroup =
+  res
+    "CreateLogGroupResponse"
+    "fixture/CreateLogGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLogGroup)
+
+responseCreateLogStream :: CreateLogStreamResponse -> TestTree
+responseCreateLogStream =
+  res
+    "CreateLogStreamResponse"
+    "fixture/CreateLogStreamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLogStream)
+
+responseDeleteDataProtectionPolicy :: DeleteDataProtectionPolicyResponse -> TestTree
+responseDeleteDataProtectionPolicy =
+  res
+    "DeleteDataProtectionPolicyResponse"
+    "fixture/DeleteDataProtectionPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDataProtectionPolicy)
+
+responseDeleteDestination :: DeleteDestinationResponse -> TestTree
+responseDeleteDestination =
+  res
+    "DeleteDestinationResponse"
+    "fixture/DeleteDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDestination)
+
+responseDeleteLogGroup :: DeleteLogGroupResponse -> TestTree
+responseDeleteLogGroup =
+  res
+    "DeleteLogGroupResponse"
+    "fixture/DeleteLogGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLogGroup)
+
+responseDeleteLogStream :: DeleteLogStreamResponse -> TestTree
+responseDeleteLogStream =
+  res
+    "DeleteLogStreamResponse"
+    "fixture/DeleteLogStreamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLogStream)
+
+responseDeleteMetricFilter :: DeleteMetricFilterResponse -> TestTree
+responseDeleteMetricFilter =
+  res
+    "DeleteMetricFilterResponse"
+    "fixture/DeleteMetricFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMetricFilter)
+
+responseDeleteQueryDefinition :: DeleteQueryDefinitionResponse -> TestTree
+responseDeleteQueryDefinition =
+  res
+    "DeleteQueryDefinitionResponse"
+    "fixture/DeleteQueryDefinitionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteQueryDefinition)
+
+responseDeleteResourcePolicy :: DeleteResourcePolicyResponse -> TestTree
+responseDeleteResourcePolicy =
+  res
+    "DeleteResourcePolicyResponse"
+    "fixture/DeleteResourcePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteResourcePolicy)
+
+responseDeleteRetentionPolicy :: DeleteRetentionPolicyResponse -> TestTree
+responseDeleteRetentionPolicy =
+  res
+    "DeleteRetentionPolicyResponse"
+    "fixture/DeleteRetentionPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRetentionPolicy)
+
+responseDeleteSubscriptionFilter :: DeleteSubscriptionFilterResponse -> TestTree
+responseDeleteSubscriptionFilter =
+  res
+    "DeleteSubscriptionFilterResponse"
+    "fixture/DeleteSubscriptionFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSubscriptionFilter)
+
+responseDescribeDestinations :: DescribeDestinationsResponse -> TestTree
+responseDescribeDestinations =
+  res
+    "DescribeDestinationsResponse"
+    "fixture/DescribeDestinationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDestinations)
+
+responseDescribeExportTasks :: DescribeExportTasksResponse -> TestTree
+responseDescribeExportTasks =
+  res
+    "DescribeExportTasksResponse"
+    "fixture/DescribeExportTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExportTasks)
+
+responseDescribeLogGroups :: DescribeLogGroupsResponse -> TestTree
+responseDescribeLogGroups =
+  res
+    "DescribeLogGroupsResponse"
+    "fixture/DescribeLogGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLogGroups)
+
+responseDescribeLogStreams :: DescribeLogStreamsResponse -> TestTree
+responseDescribeLogStreams =
+  res
+    "DescribeLogStreamsResponse"
+    "fixture/DescribeLogStreamsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLogStreams)
+
+responseDescribeMetricFilters :: DescribeMetricFiltersResponse -> TestTree
+responseDescribeMetricFilters =
+  res
+    "DescribeMetricFiltersResponse"
+    "fixture/DescribeMetricFiltersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeMetricFilters)
+
+responseDescribeQueries :: DescribeQueriesResponse -> TestTree
+responseDescribeQueries =
+  res
+    "DescribeQueriesResponse"
+    "fixture/DescribeQueriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeQueries)
+
+responseDescribeQueryDefinitions :: DescribeQueryDefinitionsResponse -> TestTree
+responseDescribeQueryDefinitions =
+  res
+    "DescribeQueryDefinitionsResponse"
+    "fixture/DescribeQueryDefinitionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeQueryDefinitions)
+
+responseDescribeResourcePolicies :: DescribeResourcePoliciesResponse -> TestTree
+responseDescribeResourcePolicies =
+  res
+    "DescribeResourcePoliciesResponse"
+    "fixture/DescribeResourcePoliciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeResourcePolicies)
+
+responseDescribeSubscriptionFilters :: DescribeSubscriptionFiltersResponse -> TestTree
+responseDescribeSubscriptionFilters =
+  res
+    "DescribeSubscriptionFiltersResponse"
+    "fixture/DescribeSubscriptionFiltersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSubscriptionFilters)
+
+responseDisassociateKmsKey :: DisassociateKmsKeyResponse -> TestTree
+responseDisassociateKmsKey =
+  res
+    "DisassociateKmsKeyResponse"
+    "fixture/DisassociateKmsKeyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateKmsKey)
+
+responseFilterLogEvents :: FilterLogEventsResponse -> TestTree
+responseFilterLogEvents =
+  res
+    "FilterLogEventsResponse"
+    "fixture/FilterLogEventsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy FilterLogEvents)
+
+responseGetDataProtectionPolicy :: GetDataProtectionPolicyResponse -> TestTree
+responseGetDataProtectionPolicy =
+  res
+    "GetDataProtectionPolicyResponse"
+    "fixture/GetDataProtectionPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDataProtectionPolicy)
+
+responseGetLogEvents :: GetLogEventsResponse -> TestTree
+responseGetLogEvents =
+  res
+    "GetLogEventsResponse"
+    "fixture/GetLogEventsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLogEvents)
+
+responseGetLogGroupFields :: GetLogGroupFieldsResponse -> TestTree
+responseGetLogGroupFields =
+  res
+    "GetLogGroupFieldsResponse"
+    "fixture/GetLogGroupFieldsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLogGroupFields)
+
+responseGetLogRecord :: GetLogRecordResponse -> TestTree
+responseGetLogRecord =
+  res
+    "GetLogRecordResponse"
+    "fixture/GetLogRecordResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLogRecord)
+
+responseGetQueryResults :: GetQueryResultsResponse -> TestTree
+responseGetQueryResults =
+  res
+    "GetQueryResultsResponse"
+    "fixture/GetQueryResultsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetQueryResults)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutDataProtectionPolicy :: PutDataProtectionPolicyResponse -> TestTree
+responsePutDataProtectionPolicy =
+  res
+    "PutDataProtectionPolicyResponse"
+    "fixture/PutDataProtectionPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDataProtectionPolicy)
+
+responsePutDestination :: PutDestinationResponse -> TestTree
+responsePutDestination =
+  res
+    "PutDestinationResponse"
+    "fixture/PutDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDestination)
+
+responsePutDestinationPolicy :: PutDestinationPolicyResponse -> TestTree
+responsePutDestinationPolicy =
+  res
+    "PutDestinationPolicyResponse"
+    "fixture/PutDestinationPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDestinationPolicy)
+
+responsePutLogEvents :: PutLogEventsResponse -> TestTree
+responsePutLogEvents =
+  res
+    "PutLogEventsResponse"
+    "fixture/PutLogEventsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutLogEvents)
+
+responsePutMetricFilter :: PutMetricFilterResponse -> TestTree
+responsePutMetricFilter =
+  res
+    "PutMetricFilterResponse"
+    "fixture/PutMetricFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutMetricFilter)
+
+responsePutQueryDefinition :: PutQueryDefinitionResponse -> TestTree
+responsePutQueryDefinition =
+  res
+    "PutQueryDefinitionResponse"
+    "fixture/PutQueryDefinitionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutQueryDefinition)
+
+responsePutResourcePolicy :: PutResourcePolicyResponse -> TestTree
+responsePutResourcePolicy =
+  res
+    "PutResourcePolicyResponse"
+    "fixture/PutResourcePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutResourcePolicy)
+
+responsePutRetentionPolicy :: PutRetentionPolicyResponse -> TestTree
+responsePutRetentionPolicy =
+  res
+    "PutRetentionPolicyResponse"
+    "fixture/PutRetentionPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutRetentionPolicy)
+
+responsePutSubscriptionFilter :: PutSubscriptionFilterResponse -> TestTree
+responsePutSubscriptionFilter =
+  res
+    "PutSubscriptionFilterResponse"
+    "fixture/PutSubscriptionFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutSubscriptionFilter)
+
+responseStartQuery :: StartQueryResponse -> TestTree
+responseStartQuery =
+  res
+    "StartQueryResponse"
+    "fixture/StartQueryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartQuery)
+
+responseStopQuery :: StopQueryResponse -> TestTree
+responseStopQuery =
+  res
+    "StopQueryResponse"
+    "fixture/StopQueryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopQuery)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseTestMetricFilter :: TestMetricFilterResponse -> TestTree
+responseTestMetricFilter =
+  res
+    "TestMetricFilterResponse"
+    "fixture/TestMetricFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TestMetricFilter)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
