diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon DevOps Guru SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-12-01@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-devops-guru)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, 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
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.DevOpsGuru](http://hackage.haskell.org/package/amazonka-devops-guru/docs/Amazonka-DevOpsGuru.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-devops-guru` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-devops-guru.cabal b/amazonka-devops-guru.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-devops-guru.cabal
@@ -0,0 +1,226 @@
+cabal-version:      2.2
+name:               amazonka-devops-guru
+version:            2.0
+synopsis:           Amazon DevOps Guru 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:
+  Derived from API version @2020-12-01@ 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.DevOpsGuru.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.DevOpsGuru" 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-devops-guru
+
+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:
+    Amazonka.DevOpsGuru
+    Amazonka.DevOpsGuru.AddNotificationChannel
+    Amazonka.DevOpsGuru.DeleteInsight
+    Amazonka.DevOpsGuru.DescribeAccountHealth
+    Amazonka.DevOpsGuru.DescribeAccountOverview
+    Amazonka.DevOpsGuru.DescribeAnomaly
+    Amazonka.DevOpsGuru.DescribeEventSourcesConfig
+    Amazonka.DevOpsGuru.DescribeFeedback
+    Amazonka.DevOpsGuru.DescribeInsight
+    Amazonka.DevOpsGuru.DescribeOrganizationHealth
+    Amazonka.DevOpsGuru.DescribeOrganizationOverview
+    Amazonka.DevOpsGuru.DescribeOrganizationResourceCollectionHealth
+    Amazonka.DevOpsGuru.DescribeResourceCollectionHealth
+    Amazonka.DevOpsGuru.DescribeServiceIntegration
+    Amazonka.DevOpsGuru.GetCostEstimation
+    Amazonka.DevOpsGuru.GetResourceCollection
+    Amazonka.DevOpsGuru.Lens
+    Amazonka.DevOpsGuru.ListAnomaliesForInsight
+    Amazonka.DevOpsGuru.ListAnomalousLogGroups
+    Amazonka.DevOpsGuru.ListEvents
+    Amazonka.DevOpsGuru.ListInsights
+    Amazonka.DevOpsGuru.ListMonitoredResources
+    Amazonka.DevOpsGuru.ListNotificationChannels
+    Amazonka.DevOpsGuru.ListOrganizationInsights
+    Amazonka.DevOpsGuru.ListRecommendations
+    Amazonka.DevOpsGuru.PutFeedback
+    Amazonka.DevOpsGuru.RemoveNotificationChannel
+    Amazonka.DevOpsGuru.SearchInsights
+    Amazonka.DevOpsGuru.SearchOrganizationInsights
+    Amazonka.DevOpsGuru.StartCostEstimation
+    Amazonka.DevOpsGuru.Types
+    Amazonka.DevOpsGuru.Types.AccountHealth
+    Amazonka.DevOpsGuru.Types.AccountInsightHealth
+    Amazonka.DevOpsGuru.Types.AmazonCodeGuruProfilerIntegration
+    Amazonka.DevOpsGuru.Types.AnomalousLogGroup
+    Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+    Amazonka.DevOpsGuru.Types.AnomalyResource
+    Amazonka.DevOpsGuru.Types.AnomalySeverity
+    Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+    Amazonka.DevOpsGuru.Types.AnomalySourceMetadata
+    Amazonka.DevOpsGuru.Types.AnomalyStatus
+    Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+    Amazonka.DevOpsGuru.Types.AnomalyType
+    Amazonka.DevOpsGuru.Types.CloudFormationCollection
+    Amazonka.DevOpsGuru.Types.CloudFormationCollectionFilter
+    Amazonka.DevOpsGuru.Types.CloudFormationCostEstimationResourceCollectionFilter
+    Amazonka.DevOpsGuru.Types.CloudFormationHealth
+    Amazonka.DevOpsGuru.Types.CloudWatchMetricDataStatusCode
+    Amazonka.DevOpsGuru.Types.CloudWatchMetricsDataSummary
+    Amazonka.DevOpsGuru.Types.CloudWatchMetricsDetail
+    Amazonka.DevOpsGuru.Types.CloudWatchMetricsDimension
+    Amazonka.DevOpsGuru.Types.CloudWatchMetricsStat
+    Amazonka.DevOpsGuru.Types.CostEstimationResourceCollectionFilter
+    Amazonka.DevOpsGuru.Types.CostEstimationServiceResourceState
+    Amazonka.DevOpsGuru.Types.CostEstimationStatus
+    Amazonka.DevOpsGuru.Types.CostEstimationTimeRange
+    Amazonka.DevOpsGuru.Types.EndTimeRange
+    Amazonka.DevOpsGuru.Types.Event
+    Amazonka.DevOpsGuru.Types.EventClass
+    Amazonka.DevOpsGuru.Types.EventDataSource
+    Amazonka.DevOpsGuru.Types.EventResource
+    Amazonka.DevOpsGuru.Types.EventSourceOptInStatus
+    Amazonka.DevOpsGuru.Types.EventSourcesConfig
+    Amazonka.DevOpsGuru.Types.EventTimeRange
+    Amazonka.DevOpsGuru.Types.InsightFeedback
+    Amazonka.DevOpsGuru.Types.InsightFeedbackOption
+    Amazonka.DevOpsGuru.Types.InsightHealth
+    Amazonka.DevOpsGuru.Types.InsightSeverity
+    Amazonka.DevOpsGuru.Types.InsightStatus
+    Amazonka.DevOpsGuru.Types.InsightTimeRange
+    Amazonka.DevOpsGuru.Types.InsightType
+    Amazonka.DevOpsGuru.Types.ListEventsFilters
+    Amazonka.DevOpsGuru.Types.ListInsightsAnyStatusFilter
+    Amazonka.DevOpsGuru.Types.ListInsightsClosedStatusFilter
+    Amazonka.DevOpsGuru.Types.ListInsightsOngoingStatusFilter
+    Amazonka.DevOpsGuru.Types.ListInsightsStatusFilter
+    Amazonka.DevOpsGuru.Types.ListMonitoredResourcesFilters
+    Amazonka.DevOpsGuru.Types.Locale
+    Amazonka.DevOpsGuru.Types.LogAnomalyClass
+    Amazonka.DevOpsGuru.Types.LogAnomalyShowcase
+    Amazonka.DevOpsGuru.Types.LogAnomalyType
+    Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegration
+    Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegrationConfig
+    Amazonka.DevOpsGuru.Types.MonitoredResourceIdentifier
+    Amazonka.DevOpsGuru.Types.NotificationChannel
+    Amazonka.DevOpsGuru.Types.NotificationChannelConfig
+    Amazonka.DevOpsGuru.Types.NotificationFilterConfig
+    Amazonka.DevOpsGuru.Types.NotificationMessageType
+    Amazonka.DevOpsGuru.Types.OpsCenterIntegration
+    Amazonka.DevOpsGuru.Types.OpsCenterIntegrationConfig
+    Amazonka.DevOpsGuru.Types.OptInStatus
+    Amazonka.DevOpsGuru.Types.OrganizationResourceCollectionType
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricDimensionGroup
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricQuery
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricsDetail
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceComparisonValues
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceData
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceMetric
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceScalar
+    Amazonka.DevOpsGuru.Types.PerformanceInsightsStat
+    Amazonka.DevOpsGuru.Types.PredictionTimeRange
+    Amazonka.DevOpsGuru.Types.ProactiveAnomaly
+    Amazonka.DevOpsGuru.Types.ProactiveAnomalySummary
+    Amazonka.DevOpsGuru.Types.ProactiveInsight
+    Amazonka.DevOpsGuru.Types.ProactiveInsightSummary
+    Amazonka.DevOpsGuru.Types.ProactiveOrganizationInsightSummary
+    Amazonka.DevOpsGuru.Types.ReactiveAnomaly
+    Amazonka.DevOpsGuru.Types.ReactiveAnomalySummary
+    Amazonka.DevOpsGuru.Types.ReactiveInsight
+    Amazonka.DevOpsGuru.Types.ReactiveInsightSummary
+    Amazonka.DevOpsGuru.Types.ReactiveOrganizationInsightSummary
+    Amazonka.DevOpsGuru.Types.Recommendation
+    Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomaly
+    Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalyResource
+    Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalySourceDetail
+    Amazonka.DevOpsGuru.Types.RecommendationRelatedCloudWatchMetricsSourceDetail
+    Amazonka.DevOpsGuru.Types.RecommendationRelatedEvent
+    Amazonka.DevOpsGuru.Types.RecommendationRelatedEventResource
+    Amazonka.DevOpsGuru.Types.ResourceCollection
+    Amazonka.DevOpsGuru.Types.ResourceCollectionFilter
+    Amazonka.DevOpsGuru.Types.ResourceCollectionType
+    Amazonka.DevOpsGuru.Types.ResourcePermission
+    Amazonka.DevOpsGuru.Types.ResourceTypeFilter
+    Amazonka.DevOpsGuru.Types.SearchInsightsFilters
+    Amazonka.DevOpsGuru.Types.SearchOrganizationInsightsFilters
+    Amazonka.DevOpsGuru.Types.ServiceCollection
+    Amazonka.DevOpsGuru.Types.ServiceHealth
+    Amazonka.DevOpsGuru.Types.ServiceInsightHealth
+    Amazonka.DevOpsGuru.Types.ServiceIntegrationConfig
+    Amazonka.DevOpsGuru.Types.ServiceName
+    Amazonka.DevOpsGuru.Types.ServiceResourceCost
+    Amazonka.DevOpsGuru.Types.SnsChannelConfig
+    Amazonka.DevOpsGuru.Types.StartTimeRange
+    Amazonka.DevOpsGuru.Types.TagCollection
+    Amazonka.DevOpsGuru.Types.TagCollectionFilter
+    Amazonka.DevOpsGuru.Types.TagCostEstimationResourceCollectionFilter
+    Amazonka.DevOpsGuru.Types.TagHealth
+    Amazonka.DevOpsGuru.Types.TimestampMetricValuePair
+    Amazonka.DevOpsGuru.Types.UpdateCloudFormationCollectionFilter
+    Amazonka.DevOpsGuru.Types.UpdateResourceCollectionAction
+    Amazonka.DevOpsGuru.Types.UpdateResourceCollectionFilter
+    Amazonka.DevOpsGuru.Types.UpdateServiceIntegrationConfig
+    Amazonka.DevOpsGuru.Types.UpdateTagCollectionFilter
+    Amazonka.DevOpsGuru.UpdateEventSourcesConfig
+    Amazonka.DevOpsGuru.UpdateResourceCollection
+    Amazonka.DevOpsGuru.UpdateServiceIntegration
+    Amazonka.DevOpsGuru.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-devops-guru-test
+  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.Amazonka.DevOpsGuru
+    Test.Amazonka.DevOpsGuru.Internal
+    Test.Amazonka.Gen.DevOpsGuru
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-devops-guru
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AddNotificationChannel.yaml b/fixture/AddNotificationChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddNotificationChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/AddNotificationChannelResponse.proto b/fixture/AddNotificationChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddNotificationChannelResponse.proto
diff --git a/fixture/DeleteInsight.yaml b/fixture/DeleteInsight.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInsight.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DeleteInsightResponse.proto b/fixture/DeleteInsightResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInsightResponse.proto
diff --git a/fixture/DescribeAccountHealth.yaml b/fixture/DescribeAccountHealth.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountHealth.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeAccountHealthResponse.proto b/fixture/DescribeAccountHealthResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountHealthResponse.proto
diff --git a/fixture/DescribeAccountOverview.yaml b/fixture/DescribeAccountOverview.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountOverview.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeAccountOverviewResponse.proto b/fixture/DescribeAccountOverviewResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountOverviewResponse.proto
diff --git a/fixture/DescribeAnomaly.yaml b/fixture/DescribeAnomaly.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAnomaly.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeAnomalyResponse.proto b/fixture/DescribeAnomalyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAnomalyResponse.proto
diff --git a/fixture/DescribeEventSourcesConfig.yaml b/fixture/DescribeEventSourcesConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEventSourcesConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeEventSourcesConfigResponse.proto b/fixture/DescribeEventSourcesConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEventSourcesConfigResponse.proto
diff --git a/fixture/DescribeFeedback.yaml b/fixture/DescribeFeedback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFeedback.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeFeedbackResponse.proto b/fixture/DescribeFeedbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFeedbackResponse.proto
diff --git a/fixture/DescribeInsight.yaml b/fixture/DescribeInsight.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInsight.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeInsightResponse.proto b/fixture/DescribeInsightResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInsightResponse.proto
diff --git a/fixture/DescribeOrganizationHealth.yaml b/fixture/DescribeOrganizationHealth.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationHealth.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeOrganizationHealthResponse.proto b/fixture/DescribeOrganizationHealthResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationHealthResponse.proto
diff --git a/fixture/DescribeOrganizationOverview.yaml b/fixture/DescribeOrganizationOverview.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationOverview.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeOrganizationOverviewResponse.proto b/fixture/DescribeOrganizationOverviewResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationOverviewResponse.proto
diff --git a/fixture/DescribeOrganizationResourceCollectionHealth.yaml b/fixture/DescribeOrganizationResourceCollectionHealth.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationResourceCollectionHealth.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeOrganizationResourceCollectionHealthResponse.proto b/fixture/DescribeOrganizationResourceCollectionHealthResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrganizationResourceCollectionHealthResponse.proto
diff --git a/fixture/DescribeResourceCollectionHealth.yaml b/fixture/DescribeResourceCollectionHealth.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResourceCollectionHealth.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeResourceCollectionHealthResponse.proto b/fixture/DescribeResourceCollectionHealthResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResourceCollectionHealthResponse.proto
diff --git a/fixture/DescribeServiceIntegration.yaml b/fixture/DescribeServiceIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeServiceIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/DescribeServiceIntegrationResponse.proto b/fixture/DescribeServiceIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeServiceIntegrationResponse.proto
diff --git a/fixture/GetCostEstimation.yaml b/fixture/GetCostEstimation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCostEstimation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/GetCostEstimationResponse.proto b/fixture/GetCostEstimationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCostEstimationResponse.proto
diff --git a/fixture/GetResourceCollection.yaml b/fixture/GetResourceCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/GetResourceCollectionResponse.proto b/fixture/GetResourceCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceCollectionResponse.proto
diff --git a/fixture/ListAnomaliesForInsight.yaml b/fixture/ListAnomaliesForInsight.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomaliesForInsight.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListAnomaliesForInsightResponse.proto b/fixture/ListAnomaliesForInsightResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomaliesForInsightResponse.proto
diff --git a/fixture/ListAnomalousLogGroups.yaml b/fixture/ListAnomalousLogGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalousLogGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListAnomalousLogGroupsResponse.proto b/fixture/ListAnomalousLogGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalousLogGroupsResponse.proto
diff --git a/fixture/ListEvents.yaml b/fixture/ListEvents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEvents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListEventsResponse.proto b/fixture/ListEventsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventsResponse.proto
diff --git a/fixture/ListInsights.yaml b/fixture/ListInsights.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListInsights.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListInsightsResponse.proto b/fixture/ListInsightsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListInsightsResponse.proto
diff --git a/fixture/ListMonitoredResources.yaml b/fixture/ListMonitoredResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMonitoredResources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListMonitoredResourcesResponse.proto b/fixture/ListMonitoredResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMonitoredResourcesResponse.proto
diff --git a/fixture/ListNotificationChannels.yaml b/fixture/ListNotificationChannels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListNotificationChannels.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListNotificationChannelsResponse.proto b/fixture/ListNotificationChannelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListNotificationChannelsResponse.proto
diff --git a/fixture/ListOrganizationInsights.yaml b/fixture/ListOrganizationInsights.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListOrganizationInsights.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListOrganizationInsightsResponse.proto b/fixture/ListOrganizationInsightsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListOrganizationInsightsResponse.proto
diff --git a/fixture/ListRecommendations.yaml b/fixture/ListRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/ListRecommendationsResponse.proto b/fixture/ListRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendationsResponse.proto
diff --git a/fixture/PutFeedback.yaml b/fixture/PutFeedback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutFeedback.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/PutFeedbackResponse.proto b/fixture/PutFeedbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutFeedbackResponse.proto
diff --git a/fixture/RemoveNotificationChannel.yaml b/fixture/RemoveNotificationChannel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveNotificationChannel.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/RemoveNotificationChannelResponse.proto b/fixture/RemoveNotificationChannelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveNotificationChannelResponse.proto
diff --git a/fixture/SearchInsights.yaml b/fixture/SearchInsights.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchInsights.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/SearchInsightsResponse.proto b/fixture/SearchInsightsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchInsightsResponse.proto
diff --git a/fixture/SearchOrganizationInsights.yaml b/fixture/SearchOrganizationInsights.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchOrganizationInsights.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/SearchOrganizationInsightsResponse.proto b/fixture/SearchOrganizationInsightsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchOrganizationInsightsResponse.proto
diff --git a/fixture/StartCostEstimation.yaml b/fixture/StartCostEstimation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartCostEstimation.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/StartCostEstimationResponse.proto b/fixture/StartCostEstimationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartCostEstimationResponse.proto
diff --git a/fixture/UpdateEventSourcesConfig.yaml b/fixture/UpdateEventSourcesConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventSourcesConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/UpdateEventSourcesConfigResponse.proto b/fixture/UpdateEventSourcesConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventSourcesConfigResponse.proto
diff --git a/fixture/UpdateResourceCollection.yaml b/fixture/UpdateResourceCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/UpdateResourceCollectionResponse.proto b/fixture/UpdateResourceCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceCollectionResponse.proto
diff --git a/fixture/UpdateServiceIntegration.yaml b/fixture/UpdateServiceIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateServiceIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/devops-guru/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  devops-guru.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/UpdateServiceIntegrationResponse.proto b/fixture/UpdateServiceIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateServiceIntegrationResponse.proto
diff --git a/gen/Amazonka/DevOpsGuru.hs b/gen/Amazonka/DevOpsGuru.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru.hs
@@ -0,0 +1,743 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.DevOpsGuru
+-- 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 @2020-12-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon DevOps Guru is a fully managed service that helps you identify
+-- anomalous behavior in business critical operational applications. You
+-- specify the Amazon Web Services resources that you want DevOps Guru to
+-- cover, then the Amazon CloudWatch metrics and Amazon Web Services
+-- CloudTrail events related to those resources are analyzed. When
+-- anomalous behavior is detected, DevOps Guru creates an /insight/ that
+-- includes recommendations, related events, and related metrics that can
+-- help you improve your operational applications. For more information,
+-- see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/welcome.html What is Amazon DevOps Guru>.
+--
+-- You can specify 1 or 2 Amazon Simple Notification Service topics so you
+-- are notified every time a new insight is created. You can also enable
+-- DevOps Guru to generate an OpsItem in Amazon Web Services Systems
+-- Manager for each insight to help you manage and track your work
+-- addressing insights.
+--
+-- To learn about the DevOps Guru workflow, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/welcome.html#how-it-works How DevOps Guru works>.
+-- To learn about DevOps Guru concepts, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/concepts.html Concepts in DevOps Guru>.
+module Amazonka.DevOpsGuru
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AddNotificationChannel
+    AddNotificationChannel (AddNotificationChannel'),
+    newAddNotificationChannel,
+    AddNotificationChannelResponse (AddNotificationChannelResponse'),
+    newAddNotificationChannelResponse,
+
+    -- ** DeleteInsight
+    DeleteInsight (DeleteInsight'),
+    newDeleteInsight,
+    DeleteInsightResponse (DeleteInsightResponse'),
+    newDeleteInsightResponse,
+
+    -- ** DescribeAccountHealth
+    DescribeAccountHealth (DescribeAccountHealth'),
+    newDescribeAccountHealth,
+    DescribeAccountHealthResponse (DescribeAccountHealthResponse'),
+    newDescribeAccountHealthResponse,
+
+    -- ** DescribeAccountOverview
+    DescribeAccountOverview (DescribeAccountOverview'),
+    newDescribeAccountOverview,
+    DescribeAccountOverviewResponse (DescribeAccountOverviewResponse'),
+    newDescribeAccountOverviewResponse,
+
+    -- ** DescribeAnomaly
+    DescribeAnomaly (DescribeAnomaly'),
+    newDescribeAnomaly,
+    DescribeAnomalyResponse (DescribeAnomalyResponse'),
+    newDescribeAnomalyResponse,
+
+    -- ** DescribeEventSourcesConfig
+    DescribeEventSourcesConfig (DescribeEventSourcesConfig'),
+    newDescribeEventSourcesConfig,
+    DescribeEventSourcesConfigResponse (DescribeEventSourcesConfigResponse'),
+    newDescribeEventSourcesConfigResponse,
+
+    -- ** DescribeFeedback
+    DescribeFeedback (DescribeFeedback'),
+    newDescribeFeedback,
+    DescribeFeedbackResponse (DescribeFeedbackResponse'),
+    newDescribeFeedbackResponse,
+
+    -- ** DescribeInsight
+    DescribeInsight (DescribeInsight'),
+    newDescribeInsight,
+    DescribeInsightResponse (DescribeInsightResponse'),
+    newDescribeInsightResponse,
+
+    -- ** DescribeOrganizationHealth
+    DescribeOrganizationHealth (DescribeOrganizationHealth'),
+    newDescribeOrganizationHealth,
+    DescribeOrganizationHealthResponse (DescribeOrganizationHealthResponse'),
+    newDescribeOrganizationHealthResponse,
+
+    -- ** DescribeOrganizationOverview
+    DescribeOrganizationOverview (DescribeOrganizationOverview'),
+    newDescribeOrganizationOverview,
+    DescribeOrganizationOverviewResponse (DescribeOrganizationOverviewResponse'),
+    newDescribeOrganizationOverviewResponse,
+
+    -- ** DescribeOrganizationResourceCollectionHealth (Paginated)
+    DescribeOrganizationResourceCollectionHealth (DescribeOrganizationResourceCollectionHealth'),
+    newDescribeOrganizationResourceCollectionHealth,
+    DescribeOrganizationResourceCollectionHealthResponse (DescribeOrganizationResourceCollectionHealthResponse'),
+    newDescribeOrganizationResourceCollectionHealthResponse,
+
+    -- ** DescribeResourceCollectionHealth (Paginated)
+    DescribeResourceCollectionHealth (DescribeResourceCollectionHealth'),
+    newDescribeResourceCollectionHealth,
+    DescribeResourceCollectionHealthResponse (DescribeResourceCollectionHealthResponse'),
+    newDescribeResourceCollectionHealthResponse,
+
+    -- ** DescribeServiceIntegration
+    DescribeServiceIntegration (DescribeServiceIntegration'),
+    newDescribeServiceIntegration,
+    DescribeServiceIntegrationResponse (DescribeServiceIntegrationResponse'),
+    newDescribeServiceIntegrationResponse,
+
+    -- ** GetCostEstimation (Paginated)
+    GetCostEstimation (GetCostEstimation'),
+    newGetCostEstimation,
+    GetCostEstimationResponse (GetCostEstimationResponse'),
+    newGetCostEstimationResponse,
+
+    -- ** GetResourceCollection (Paginated)
+    GetResourceCollection (GetResourceCollection'),
+    newGetResourceCollection,
+    GetResourceCollectionResponse (GetResourceCollectionResponse'),
+    newGetResourceCollectionResponse,
+
+    -- ** ListAnomaliesForInsight (Paginated)
+    ListAnomaliesForInsight (ListAnomaliesForInsight'),
+    newListAnomaliesForInsight,
+    ListAnomaliesForInsightResponse (ListAnomaliesForInsightResponse'),
+    newListAnomaliesForInsightResponse,
+
+    -- ** ListAnomalousLogGroups (Paginated)
+    ListAnomalousLogGroups (ListAnomalousLogGroups'),
+    newListAnomalousLogGroups,
+    ListAnomalousLogGroupsResponse (ListAnomalousLogGroupsResponse'),
+    newListAnomalousLogGroupsResponse,
+
+    -- ** ListEvents (Paginated)
+    ListEvents (ListEvents'),
+    newListEvents,
+    ListEventsResponse (ListEventsResponse'),
+    newListEventsResponse,
+
+    -- ** ListInsights (Paginated)
+    ListInsights (ListInsights'),
+    newListInsights,
+    ListInsightsResponse (ListInsightsResponse'),
+    newListInsightsResponse,
+
+    -- ** ListMonitoredResources (Paginated)
+    ListMonitoredResources (ListMonitoredResources'),
+    newListMonitoredResources,
+    ListMonitoredResourcesResponse (ListMonitoredResourcesResponse'),
+    newListMonitoredResourcesResponse,
+
+    -- ** ListNotificationChannels (Paginated)
+    ListNotificationChannels (ListNotificationChannels'),
+    newListNotificationChannels,
+    ListNotificationChannelsResponse (ListNotificationChannelsResponse'),
+    newListNotificationChannelsResponse,
+
+    -- ** ListOrganizationInsights (Paginated)
+    ListOrganizationInsights (ListOrganizationInsights'),
+    newListOrganizationInsights,
+    ListOrganizationInsightsResponse (ListOrganizationInsightsResponse'),
+    newListOrganizationInsightsResponse,
+
+    -- ** ListRecommendations (Paginated)
+    ListRecommendations (ListRecommendations'),
+    newListRecommendations,
+    ListRecommendationsResponse (ListRecommendationsResponse'),
+    newListRecommendationsResponse,
+
+    -- ** PutFeedback
+    PutFeedback (PutFeedback'),
+    newPutFeedback,
+    PutFeedbackResponse (PutFeedbackResponse'),
+    newPutFeedbackResponse,
+
+    -- ** RemoveNotificationChannel
+    RemoveNotificationChannel (RemoveNotificationChannel'),
+    newRemoveNotificationChannel,
+    RemoveNotificationChannelResponse (RemoveNotificationChannelResponse'),
+    newRemoveNotificationChannelResponse,
+
+    -- ** SearchInsights (Paginated)
+    SearchInsights (SearchInsights'),
+    newSearchInsights,
+    SearchInsightsResponse (SearchInsightsResponse'),
+    newSearchInsightsResponse,
+
+    -- ** SearchOrganizationInsights (Paginated)
+    SearchOrganizationInsights (SearchOrganizationInsights'),
+    newSearchOrganizationInsights,
+    SearchOrganizationInsightsResponse (SearchOrganizationInsightsResponse'),
+    newSearchOrganizationInsightsResponse,
+
+    -- ** StartCostEstimation
+    StartCostEstimation (StartCostEstimation'),
+    newStartCostEstimation,
+    StartCostEstimationResponse (StartCostEstimationResponse'),
+    newStartCostEstimationResponse,
+
+    -- ** UpdateEventSourcesConfig
+    UpdateEventSourcesConfig (UpdateEventSourcesConfig'),
+    newUpdateEventSourcesConfig,
+    UpdateEventSourcesConfigResponse (UpdateEventSourcesConfigResponse'),
+    newUpdateEventSourcesConfigResponse,
+
+    -- ** UpdateResourceCollection
+    UpdateResourceCollection (UpdateResourceCollection'),
+    newUpdateResourceCollection,
+    UpdateResourceCollectionResponse (UpdateResourceCollectionResponse'),
+    newUpdateResourceCollectionResponse,
+
+    -- ** UpdateServiceIntegration
+    UpdateServiceIntegration (UpdateServiceIntegration'),
+    newUpdateServiceIntegration,
+    UpdateServiceIntegrationResponse (UpdateServiceIntegrationResponse'),
+    newUpdateServiceIntegrationResponse,
+
+    -- * Types
+
+    -- ** AnomalySeverity
+    AnomalySeverity (..),
+
+    -- ** AnomalyStatus
+    AnomalyStatus (..),
+
+    -- ** AnomalyType
+    AnomalyType (..),
+
+    -- ** CloudWatchMetricDataStatusCode
+    CloudWatchMetricDataStatusCode (..),
+
+    -- ** CloudWatchMetricsStat
+    CloudWatchMetricsStat (..),
+
+    -- ** CostEstimationServiceResourceState
+    CostEstimationServiceResourceState (..),
+
+    -- ** CostEstimationStatus
+    CostEstimationStatus (..),
+
+    -- ** EventClass
+    EventClass (..),
+
+    -- ** EventDataSource
+    EventDataSource (..),
+
+    -- ** EventSourceOptInStatus
+    EventSourceOptInStatus (..),
+
+    -- ** InsightFeedbackOption
+    InsightFeedbackOption (..),
+
+    -- ** InsightSeverity
+    InsightSeverity (..),
+
+    -- ** InsightStatus
+    InsightStatus (..),
+
+    -- ** InsightType
+    InsightType (..),
+
+    -- ** Locale
+    Locale (..),
+
+    -- ** LogAnomalyType
+    LogAnomalyType (..),
+
+    -- ** NotificationMessageType
+    NotificationMessageType (..),
+
+    -- ** OptInStatus
+    OptInStatus (..),
+
+    -- ** OrganizationResourceCollectionType
+    OrganizationResourceCollectionType (..),
+
+    -- ** ResourceCollectionType
+    ResourceCollectionType (..),
+
+    -- ** ResourcePermission
+    ResourcePermission (..),
+
+    -- ** ResourceTypeFilter
+    ResourceTypeFilter (..),
+
+    -- ** ServiceName
+    ServiceName (..),
+
+    -- ** UpdateResourceCollectionAction
+    UpdateResourceCollectionAction (..),
+
+    -- ** AccountHealth
+    AccountHealth (AccountHealth'),
+    newAccountHealth,
+
+    -- ** AccountInsightHealth
+    AccountInsightHealth (AccountInsightHealth'),
+    newAccountInsightHealth,
+
+    -- ** AmazonCodeGuruProfilerIntegration
+    AmazonCodeGuruProfilerIntegration (AmazonCodeGuruProfilerIntegration'),
+    newAmazonCodeGuruProfilerIntegration,
+
+    -- ** AnomalousLogGroup
+    AnomalousLogGroup (AnomalousLogGroup'),
+    newAnomalousLogGroup,
+
+    -- ** AnomalyReportedTimeRange
+    AnomalyReportedTimeRange (AnomalyReportedTimeRange'),
+    newAnomalyReportedTimeRange,
+
+    -- ** AnomalyResource
+    AnomalyResource (AnomalyResource'),
+    newAnomalyResource,
+
+    -- ** AnomalySourceDetails
+    AnomalySourceDetails (AnomalySourceDetails'),
+    newAnomalySourceDetails,
+
+    -- ** AnomalySourceMetadata
+    AnomalySourceMetadata (AnomalySourceMetadata'),
+    newAnomalySourceMetadata,
+
+    -- ** AnomalyTimeRange
+    AnomalyTimeRange (AnomalyTimeRange'),
+    newAnomalyTimeRange,
+
+    -- ** CloudFormationCollection
+    CloudFormationCollection (CloudFormationCollection'),
+    newCloudFormationCollection,
+
+    -- ** CloudFormationCollectionFilter
+    CloudFormationCollectionFilter (CloudFormationCollectionFilter'),
+    newCloudFormationCollectionFilter,
+
+    -- ** CloudFormationCostEstimationResourceCollectionFilter
+    CloudFormationCostEstimationResourceCollectionFilter (CloudFormationCostEstimationResourceCollectionFilter'),
+    newCloudFormationCostEstimationResourceCollectionFilter,
+
+    -- ** CloudFormationHealth
+    CloudFormationHealth (CloudFormationHealth'),
+    newCloudFormationHealth,
+
+    -- ** CloudWatchMetricsDataSummary
+    CloudWatchMetricsDataSummary (CloudWatchMetricsDataSummary'),
+    newCloudWatchMetricsDataSummary,
+
+    -- ** CloudWatchMetricsDetail
+    CloudWatchMetricsDetail (CloudWatchMetricsDetail'),
+    newCloudWatchMetricsDetail,
+
+    -- ** CloudWatchMetricsDimension
+    CloudWatchMetricsDimension (CloudWatchMetricsDimension'),
+    newCloudWatchMetricsDimension,
+
+    -- ** CostEstimationResourceCollectionFilter
+    CostEstimationResourceCollectionFilter (CostEstimationResourceCollectionFilter'),
+    newCostEstimationResourceCollectionFilter,
+
+    -- ** CostEstimationTimeRange
+    CostEstimationTimeRange (CostEstimationTimeRange'),
+    newCostEstimationTimeRange,
+
+    -- ** EndTimeRange
+    EndTimeRange (EndTimeRange'),
+    newEndTimeRange,
+
+    -- ** Event
+    Event (Event'),
+    newEvent,
+
+    -- ** EventResource
+    EventResource (EventResource'),
+    newEventResource,
+
+    -- ** EventSourcesConfig
+    EventSourcesConfig (EventSourcesConfig'),
+    newEventSourcesConfig,
+
+    -- ** EventTimeRange
+    EventTimeRange (EventTimeRange'),
+    newEventTimeRange,
+
+    -- ** InsightFeedback
+    InsightFeedback (InsightFeedback'),
+    newInsightFeedback,
+
+    -- ** InsightHealth
+    InsightHealth (InsightHealth'),
+    newInsightHealth,
+
+    -- ** InsightTimeRange
+    InsightTimeRange (InsightTimeRange'),
+    newInsightTimeRange,
+
+    -- ** ListEventsFilters
+    ListEventsFilters (ListEventsFilters'),
+    newListEventsFilters,
+
+    -- ** ListInsightsAnyStatusFilter
+    ListInsightsAnyStatusFilter (ListInsightsAnyStatusFilter'),
+    newListInsightsAnyStatusFilter,
+
+    -- ** ListInsightsClosedStatusFilter
+    ListInsightsClosedStatusFilter (ListInsightsClosedStatusFilter'),
+    newListInsightsClosedStatusFilter,
+
+    -- ** ListInsightsOngoingStatusFilter
+    ListInsightsOngoingStatusFilter (ListInsightsOngoingStatusFilter'),
+    newListInsightsOngoingStatusFilter,
+
+    -- ** ListInsightsStatusFilter
+    ListInsightsStatusFilter (ListInsightsStatusFilter'),
+    newListInsightsStatusFilter,
+
+    -- ** ListMonitoredResourcesFilters
+    ListMonitoredResourcesFilters (ListMonitoredResourcesFilters'),
+    newListMonitoredResourcesFilters,
+
+    -- ** LogAnomalyClass
+    LogAnomalyClass (LogAnomalyClass'),
+    newLogAnomalyClass,
+
+    -- ** LogAnomalyShowcase
+    LogAnomalyShowcase (LogAnomalyShowcase'),
+    newLogAnomalyShowcase,
+
+    -- ** LogsAnomalyDetectionIntegration
+    LogsAnomalyDetectionIntegration (LogsAnomalyDetectionIntegration'),
+    newLogsAnomalyDetectionIntegration,
+
+    -- ** LogsAnomalyDetectionIntegrationConfig
+    LogsAnomalyDetectionIntegrationConfig (LogsAnomalyDetectionIntegrationConfig'),
+    newLogsAnomalyDetectionIntegrationConfig,
+
+    -- ** MonitoredResourceIdentifier
+    MonitoredResourceIdentifier (MonitoredResourceIdentifier'),
+    newMonitoredResourceIdentifier,
+
+    -- ** NotificationChannel
+    NotificationChannel (NotificationChannel'),
+    newNotificationChannel,
+
+    -- ** NotificationChannelConfig
+    NotificationChannelConfig (NotificationChannelConfig'),
+    newNotificationChannelConfig,
+
+    -- ** NotificationFilterConfig
+    NotificationFilterConfig (NotificationFilterConfig'),
+    newNotificationFilterConfig,
+
+    -- ** OpsCenterIntegration
+    OpsCenterIntegration (OpsCenterIntegration'),
+    newOpsCenterIntegration,
+
+    -- ** OpsCenterIntegrationConfig
+    OpsCenterIntegrationConfig (OpsCenterIntegrationConfig'),
+    newOpsCenterIntegrationConfig,
+
+    -- ** PerformanceInsightsMetricDimensionGroup
+    PerformanceInsightsMetricDimensionGroup (PerformanceInsightsMetricDimensionGroup'),
+    newPerformanceInsightsMetricDimensionGroup,
+
+    -- ** PerformanceInsightsMetricQuery
+    PerformanceInsightsMetricQuery (PerformanceInsightsMetricQuery'),
+    newPerformanceInsightsMetricQuery,
+
+    -- ** PerformanceInsightsMetricsDetail
+    PerformanceInsightsMetricsDetail (PerformanceInsightsMetricsDetail'),
+    newPerformanceInsightsMetricsDetail,
+
+    -- ** PerformanceInsightsReferenceComparisonValues
+    PerformanceInsightsReferenceComparisonValues (PerformanceInsightsReferenceComparisonValues'),
+    newPerformanceInsightsReferenceComparisonValues,
+
+    -- ** PerformanceInsightsReferenceData
+    PerformanceInsightsReferenceData (PerformanceInsightsReferenceData'),
+    newPerformanceInsightsReferenceData,
+
+    -- ** PerformanceInsightsReferenceMetric
+    PerformanceInsightsReferenceMetric (PerformanceInsightsReferenceMetric'),
+    newPerformanceInsightsReferenceMetric,
+
+    -- ** PerformanceInsightsReferenceScalar
+    PerformanceInsightsReferenceScalar (PerformanceInsightsReferenceScalar'),
+    newPerformanceInsightsReferenceScalar,
+
+    -- ** PerformanceInsightsStat
+    PerformanceInsightsStat (PerformanceInsightsStat'),
+    newPerformanceInsightsStat,
+
+    -- ** PredictionTimeRange
+    PredictionTimeRange (PredictionTimeRange'),
+    newPredictionTimeRange,
+
+    -- ** ProactiveAnomaly
+    ProactiveAnomaly (ProactiveAnomaly'),
+    newProactiveAnomaly,
+
+    -- ** ProactiveAnomalySummary
+    ProactiveAnomalySummary (ProactiveAnomalySummary'),
+    newProactiveAnomalySummary,
+
+    -- ** ProactiveInsight
+    ProactiveInsight (ProactiveInsight'),
+    newProactiveInsight,
+
+    -- ** ProactiveInsightSummary
+    ProactiveInsightSummary (ProactiveInsightSummary'),
+    newProactiveInsightSummary,
+
+    -- ** ProactiveOrganizationInsightSummary
+    ProactiveOrganizationInsightSummary (ProactiveOrganizationInsightSummary'),
+    newProactiveOrganizationInsightSummary,
+
+    -- ** ReactiveAnomaly
+    ReactiveAnomaly (ReactiveAnomaly'),
+    newReactiveAnomaly,
+
+    -- ** ReactiveAnomalySummary
+    ReactiveAnomalySummary (ReactiveAnomalySummary'),
+    newReactiveAnomalySummary,
+
+    -- ** ReactiveInsight
+    ReactiveInsight (ReactiveInsight'),
+    newReactiveInsight,
+
+    -- ** ReactiveInsightSummary
+    ReactiveInsightSummary (ReactiveInsightSummary'),
+    newReactiveInsightSummary,
+
+    -- ** ReactiveOrganizationInsightSummary
+    ReactiveOrganizationInsightSummary (ReactiveOrganizationInsightSummary'),
+    newReactiveOrganizationInsightSummary,
+
+    -- ** Recommendation
+    Recommendation (Recommendation'),
+    newRecommendation,
+
+    -- ** RecommendationRelatedAnomaly
+    RecommendationRelatedAnomaly (RecommendationRelatedAnomaly'),
+    newRecommendationRelatedAnomaly,
+
+    -- ** RecommendationRelatedAnomalyResource
+    RecommendationRelatedAnomalyResource (RecommendationRelatedAnomalyResource'),
+    newRecommendationRelatedAnomalyResource,
+
+    -- ** RecommendationRelatedAnomalySourceDetail
+    RecommendationRelatedAnomalySourceDetail (RecommendationRelatedAnomalySourceDetail'),
+    newRecommendationRelatedAnomalySourceDetail,
+
+    -- ** RecommendationRelatedCloudWatchMetricsSourceDetail
+    RecommendationRelatedCloudWatchMetricsSourceDetail (RecommendationRelatedCloudWatchMetricsSourceDetail'),
+    newRecommendationRelatedCloudWatchMetricsSourceDetail,
+
+    -- ** RecommendationRelatedEvent
+    RecommendationRelatedEvent (RecommendationRelatedEvent'),
+    newRecommendationRelatedEvent,
+
+    -- ** RecommendationRelatedEventResource
+    RecommendationRelatedEventResource (RecommendationRelatedEventResource'),
+    newRecommendationRelatedEventResource,
+
+    -- ** ResourceCollection
+    ResourceCollection (ResourceCollection'),
+    newResourceCollection,
+
+    -- ** ResourceCollectionFilter
+    ResourceCollectionFilter (ResourceCollectionFilter'),
+    newResourceCollectionFilter,
+
+    -- ** SearchInsightsFilters
+    SearchInsightsFilters (SearchInsightsFilters'),
+    newSearchInsightsFilters,
+
+    -- ** SearchOrganizationInsightsFilters
+    SearchOrganizationInsightsFilters (SearchOrganizationInsightsFilters'),
+    newSearchOrganizationInsightsFilters,
+
+    -- ** ServiceCollection
+    ServiceCollection (ServiceCollection'),
+    newServiceCollection,
+
+    -- ** ServiceHealth
+    ServiceHealth (ServiceHealth'),
+    newServiceHealth,
+
+    -- ** ServiceInsightHealth
+    ServiceInsightHealth (ServiceInsightHealth'),
+    newServiceInsightHealth,
+
+    -- ** ServiceIntegrationConfig
+    ServiceIntegrationConfig (ServiceIntegrationConfig'),
+    newServiceIntegrationConfig,
+
+    -- ** ServiceResourceCost
+    ServiceResourceCost (ServiceResourceCost'),
+    newServiceResourceCost,
+
+    -- ** SnsChannelConfig
+    SnsChannelConfig (SnsChannelConfig'),
+    newSnsChannelConfig,
+
+    -- ** StartTimeRange
+    StartTimeRange (StartTimeRange'),
+    newStartTimeRange,
+
+    -- ** TagCollection
+    TagCollection (TagCollection'),
+    newTagCollection,
+
+    -- ** TagCollectionFilter
+    TagCollectionFilter (TagCollectionFilter'),
+    newTagCollectionFilter,
+
+    -- ** TagCostEstimationResourceCollectionFilter
+    TagCostEstimationResourceCollectionFilter (TagCostEstimationResourceCollectionFilter'),
+    newTagCostEstimationResourceCollectionFilter,
+
+    -- ** TagHealth
+    TagHealth (TagHealth'),
+    newTagHealth,
+
+    -- ** TimestampMetricValuePair
+    TimestampMetricValuePair (TimestampMetricValuePair'),
+    newTimestampMetricValuePair,
+
+    -- ** UpdateCloudFormationCollectionFilter
+    UpdateCloudFormationCollectionFilter (UpdateCloudFormationCollectionFilter'),
+    newUpdateCloudFormationCollectionFilter,
+
+    -- ** UpdateResourceCollectionFilter
+    UpdateResourceCollectionFilter (UpdateResourceCollectionFilter'),
+    newUpdateResourceCollectionFilter,
+
+    -- ** UpdateServiceIntegrationConfig
+    UpdateServiceIntegrationConfig (UpdateServiceIntegrationConfig'),
+    newUpdateServiceIntegrationConfig,
+
+    -- ** UpdateTagCollectionFilter
+    UpdateTagCollectionFilter (UpdateTagCollectionFilter'),
+    newUpdateTagCollectionFilter,
+  )
+where
+
+import Amazonka.DevOpsGuru.AddNotificationChannel
+import Amazonka.DevOpsGuru.DeleteInsight
+import Amazonka.DevOpsGuru.DescribeAccountHealth
+import Amazonka.DevOpsGuru.DescribeAccountOverview
+import Amazonka.DevOpsGuru.DescribeAnomaly
+import Amazonka.DevOpsGuru.DescribeEventSourcesConfig
+import Amazonka.DevOpsGuru.DescribeFeedback
+import Amazonka.DevOpsGuru.DescribeInsight
+import Amazonka.DevOpsGuru.DescribeOrganizationHealth
+import Amazonka.DevOpsGuru.DescribeOrganizationOverview
+import Amazonka.DevOpsGuru.DescribeOrganizationResourceCollectionHealth
+import Amazonka.DevOpsGuru.DescribeResourceCollectionHealth
+import Amazonka.DevOpsGuru.DescribeServiceIntegration
+import Amazonka.DevOpsGuru.GetCostEstimation
+import Amazonka.DevOpsGuru.GetResourceCollection
+import Amazonka.DevOpsGuru.Lens
+import Amazonka.DevOpsGuru.ListAnomaliesForInsight
+import Amazonka.DevOpsGuru.ListAnomalousLogGroups
+import Amazonka.DevOpsGuru.ListEvents
+import Amazonka.DevOpsGuru.ListInsights
+import Amazonka.DevOpsGuru.ListMonitoredResources
+import Amazonka.DevOpsGuru.ListNotificationChannels
+import Amazonka.DevOpsGuru.ListOrganizationInsights
+import Amazonka.DevOpsGuru.ListRecommendations
+import Amazonka.DevOpsGuru.PutFeedback
+import Amazonka.DevOpsGuru.RemoveNotificationChannel
+import Amazonka.DevOpsGuru.SearchInsights
+import Amazonka.DevOpsGuru.SearchOrganizationInsights
+import Amazonka.DevOpsGuru.StartCostEstimation
+import Amazonka.DevOpsGuru.Types
+import Amazonka.DevOpsGuru.UpdateEventSourcesConfig
+import Amazonka.DevOpsGuru.UpdateResourceCollection
+import Amazonka.DevOpsGuru.UpdateServiceIntegration
+import Amazonka.DevOpsGuru.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 'DevOpsGuru'.
+
+-- $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/DevOpsGuru/AddNotificationChannel.hs b/gen/Amazonka/DevOpsGuru/AddNotificationChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/AddNotificationChannel.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.DevOpsGuru.AddNotificationChannel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a notification channel to DevOps Guru. A notification channel is
+-- used to notify you about important DevOps Guru events, such as when an
+-- insight is generated.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. DevOps Guru only
+-- supports standard SNS topics. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-required-permissions.html Permissions for cross account Amazon SNS topics>.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. For more information,
+-- see Permissions for cross account Amazon SNS topics.
+--
+-- If you use an Amazon SNS topic that is encrypted by an Amazon Web
+-- Services Key Management Service customer-managed key (CMK), then you
+-- must add permissions to the CMK. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-kms-permissions.html Permissions for Amazon Web Services KMS–encrypted Amazon SNS topics>.
+module Amazonka.DevOpsGuru.AddNotificationChannel
+  ( -- * Creating a Request
+    AddNotificationChannel (..),
+    newAddNotificationChannel,
+
+    -- * Request Lenses
+    addNotificationChannel_config,
+
+    -- * Destructuring the Response
+    AddNotificationChannelResponse (..),
+    newAddNotificationChannelResponse,
+
+    -- * Response Lenses
+    addNotificationChannelResponse_httpStatus,
+    addNotificationChannelResponse_id,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAddNotificationChannel' smart constructor.
+data AddNotificationChannel = AddNotificationChannel'
+  { -- | A @NotificationChannelConfig@ object that specifies what type of
+    -- notification channel to add. The one supported notification channel is
+    -- Amazon Simple Notification Service (Amazon SNS).
+    config :: NotificationChannelConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddNotificationChannel' 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:
+--
+-- 'config', 'addNotificationChannel_config' - A @NotificationChannelConfig@ object that specifies what type of
+-- notification channel to add. The one supported notification channel is
+-- Amazon Simple Notification Service (Amazon SNS).
+newAddNotificationChannel ::
+  -- | 'config'
+  NotificationChannelConfig ->
+  AddNotificationChannel
+newAddNotificationChannel pConfig_ =
+  AddNotificationChannel' {config = pConfig_}
+
+-- | A @NotificationChannelConfig@ object that specifies what type of
+-- notification channel to add. The one supported notification channel is
+-- Amazon Simple Notification Service (Amazon SNS).
+addNotificationChannel_config :: Lens.Lens' AddNotificationChannel NotificationChannelConfig
+addNotificationChannel_config = Lens.lens (\AddNotificationChannel' {config} -> config) (\s@AddNotificationChannel' {} a -> s {config = a} :: AddNotificationChannel)
+
+instance Core.AWSRequest AddNotificationChannel where
+  type
+    AWSResponse AddNotificationChannel =
+      AddNotificationChannelResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddNotificationChannelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Id")
+      )
+
+instance Prelude.Hashable AddNotificationChannel where
+  hashWithSalt _salt AddNotificationChannel' {..} =
+    _salt `Prelude.hashWithSalt` config
+
+instance Prelude.NFData AddNotificationChannel where
+  rnf AddNotificationChannel' {..} = Prelude.rnf config
+
+instance Data.ToHeaders AddNotificationChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddNotificationChannel where
+  toJSON AddNotificationChannel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Config" Data..= config)]
+      )
+
+instance Data.ToPath AddNotificationChannel where
+  toPath = Prelude.const "/channels"
+
+instance Data.ToQuery AddNotificationChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddNotificationChannelResponse' smart constructor.
+data AddNotificationChannelResponse = AddNotificationChannelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the added notification channel.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddNotificationChannelResponse' 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:
+--
+-- 'httpStatus', 'addNotificationChannelResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'addNotificationChannelResponse_id' - The ID of the added notification channel.
+newAddNotificationChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  AddNotificationChannelResponse
+newAddNotificationChannelResponse pHttpStatus_ pId_ =
+  AddNotificationChannelResponse'
+    { httpStatus =
+        pHttpStatus_,
+      id = pId_
+    }
+
+-- | The response's http status code.
+addNotificationChannelResponse_httpStatus :: Lens.Lens' AddNotificationChannelResponse Prelude.Int
+addNotificationChannelResponse_httpStatus = Lens.lens (\AddNotificationChannelResponse' {httpStatus} -> httpStatus) (\s@AddNotificationChannelResponse' {} a -> s {httpStatus = a} :: AddNotificationChannelResponse)
+
+-- | The ID of the added notification channel.
+addNotificationChannelResponse_id :: Lens.Lens' AddNotificationChannelResponse Prelude.Text
+addNotificationChannelResponse_id = Lens.lens (\AddNotificationChannelResponse' {id} -> id) (\s@AddNotificationChannelResponse' {} a -> s {id = a} :: AddNotificationChannelResponse)
+
+instance
+  Prelude.NFData
+    AddNotificationChannelResponse
+  where
+  rnf AddNotificationChannelResponse' {..} =
+    Prelude.rnf httpStatus `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/DevOpsGuru/DeleteInsight.hs b/gen/Amazonka/DevOpsGuru/DeleteInsight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DeleteInsight.hs
@@ -0,0 +1,143 @@
+{-# 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.DevOpsGuru.DeleteInsight
+-- 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 insight along with the associated anomalies, events and
+-- recommendations.
+module Amazonka.DevOpsGuru.DeleteInsight
+  ( -- * Creating a Request
+    DeleteInsight (..),
+    newDeleteInsight,
+
+    -- * Request Lenses
+    deleteInsight_id,
+
+    -- * Destructuring the Response
+    DeleteInsightResponse (..),
+    newDeleteInsightResponse,
+
+    -- * Response Lenses
+    deleteInsightResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteInsight' smart constructor.
+data DeleteInsight = DeleteInsight'
+  { -- | The ID of the insight.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInsight' 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:
+--
+-- 'id', 'deleteInsight_id' - The ID of the insight.
+newDeleteInsight ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteInsight
+newDeleteInsight pId_ = DeleteInsight' {id = pId_}
+
+-- | The ID of the insight.
+deleteInsight_id :: Lens.Lens' DeleteInsight Prelude.Text
+deleteInsight_id = Lens.lens (\DeleteInsight' {id} -> id) (\s@DeleteInsight' {} a -> s {id = a} :: DeleteInsight)
+
+instance Core.AWSRequest DeleteInsight where
+  type
+    AWSResponse DeleteInsight =
+      DeleteInsightResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteInsightResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteInsight where
+  hashWithSalt _salt DeleteInsight' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteInsight where
+  rnf DeleteInsight' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteInsight where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteInsight where
+  toPath DeleteInsight' {..} =
+    Prelude.mconcat ["/insights/", Data.toBS id]
+
+instance Data.ToQuery DeleteInsight where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteInsightResponse' smart constructor.
+data DeleteInsightResponse = DeleteInsightResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInsightResponse' 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:
+--
+-- 'httpStatus', 'deleteInsightResponse_httpStatus' - The response's http status code.
+newDeleteInsightResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteInsightResponse
+newDeleteInsightResponse pHttpStatus_ =
+  DeleteInsightResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteInsightResponse_httpStatus :: Lens.Lens' DeleteInsightResponse Prelude.Int
+deleteInsightResponse_httpStatus = Lens.lens (\DeleteInsightResponse' {httpStatus} -> httpStatus) (\s@DeleteInsightResponse' {} a -> s {httpStatus = a} :: DeleteInsightResponse)
+
+instance Prelude.NFData DeleteInsightResponse where
+  rnf DeleteInsightResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeAccountHealth.hs b/gen/Amazonka/DevOpsGuru/DescribeAccountHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeAccountHealth.hs
@@ -0,0 +1,222 @@
+{-# 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.DevOpsGuru.DescribeAccountHealth
+-- 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 number of open reactive insights, the number of open
+-- proactive insights, and the number of metrics analyzed in your Amazon
+-- Web Services account. Use these numbers to gauge the health of
+-- operations in your Amazon Web Services account.
+module Amazonka.DevOpsGuru.DescribeAccountHealth
+  ( -- * Creating a Request
+    DescribeAccountHealth (..),
+    newDescribeAccountHealth,
+
+    -- * Destructuring the Response
+    DescribeAccountHealthResponse (..),
+    newDescribeAccountHealthResponse,
+
+    -- * Response Lenses
+    describeAccountHealthResponse_analyzedResourceCount,
+    describeAccountHealthResponse_httpStatus,
+    describeAccountHealthResponse_openReactiveInsights,
+    describeAccountHealthResponse_openProactiveInsights,
+    describeAccountHealthResponse_metricsAnalyzed,
+    describeAccountHealthResponse_resourceHours,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAccountHealth' smart constructor.
+data DescribeAccountHealth = DescribeAccountHealth'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountHealth' 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.
+newDescribeAccountHealth ::
+  DescribeAccountHealth
+newDescribeAccountHealth = DescribeAccountHealth'
+
+instance Core.AWSRequest DescribeAccountHealth where
+  type
+    AWSResponse DescribeAccountHealth =
+      DescribeAccountHealthResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAccountHealthResponse'
+            Prelude.<$> (x Data..?> "AnalyzedResourceCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "OpenReactiveInsights")
+            Prelude.<*> (x Data..:> "OpenProactiveInsights")
+            Prelude.<*> (x Data..:> "MetricsAnalyzed")
+            Prelude.<*> (x Data..:> "ResourceHours")
+      )
+
+instance Prelude.Hashable DescribeAccountHealth where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DescribeAccountHealth where
+  rnf _ = ()
+
+instance Data.ToHeaders DescribeAccountHealth where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeAccountHealth where
+  toPath = Prelude.const "/accounts/health"
+
+instance Data.ToQuery DescribeAccountHealth where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAccountHealthResponse' smart constructor.
+data DescribeAccountHealthResponse = DescribeAccountHealthResponse'
+  { -- | Number of resources that DevOps Guru is monitoring in your Amazon Web
+    -- Services account.
+    analyzedResourceCount :: Prelude.Maybe Prelude.Integer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account.
+    openReactiveInsights :: Prelude.Int,
+    -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account.
+    openProactiveInsights :: Prelude.Int,
+    -- | An integer that specifies the number of metrics that have been analyzed
+    -- in your Amazon Web Services account.
+    metricsAnalyzed :: Prelude.Int,
+    -- | The number of Amazon DevOps Guru resource analysis hours billed to the
+    -- current Amazon Web Services account in the last hour.
+    resourceHours :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountHealthResponse' 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:
+--
+-- 'analyzedResourceCount', 'describeAccountHealthResponse_analyzedResourceCount' - Number of resources that DevOps Guru is monitoring in your Amazon Web
+-- Services account.
+--
+-- 'httpStatus', 'describeAccountHealthResponse_httpStatus' - The response's http status code.
+--
+-- 'openReactiveInsights', 'describeAccountHealthResponse_openReactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+--
+-- 'openProactiveInsights', 'describeAccountHealthResponse_openProactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+--
+-- 'metricsAnalyzed', 'describeAccountHealthResponse_metricsAnalyzed' - An integer that specifies the number of metrics that have been analyzed
+-- in your Amazon Web Services account.
+--
+-- 'resourceHours', 'describeAccountHealthResponse_resourceHours' - The number of Amazon DevOps Guru resource analysis hours billed to the
+-- current Amazon Web Services account in the last hour.
+newDescribeAccountHealthResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'openReactiveInsights'
+  Prelude.Int ->
+  -- | 'openProactiveInsights'
+  Prelude.Int ->
+  -- | 'metricsAnalyzed'
+  Prelude.Int ->
+  -- | 'resourceHours'
+  Prelude.Integer ->
+  DescribeAccountHealthResponse
+newDescribeAccountHealthResponse
+  pHttpStatus_
+  pOpenReactiveInsights_
+  pOpenProactiveInsights_
+  pMetricsAnalyzed_
+  pResourceHours_ =
+    DescribeAccountHealthResponse'
+      { analyzedResourceCount =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        openReactiveInsights =
+          pOpenReactiveInsights_,
+        openProactiveInsights =
+          pOpenProactiveInsights_,
+        metricsAnalyzed = pMetricsAnalyzed_,
+        resourceHours = pResourceHours_
+      }
+
+-- | Number of resources that DevOps Guru is monitoring in your Amazon Web
+-- Services account.
+describeAccountHealthResponse_analyzedResourceCount :: Lens.Lens' DescribeAccountHealthResponse (Prelude.Maybe Prelude.Integer)
+describeAccountHealthResponse_analyzedResourceCount = Lens.lens (\DescribeAccountHealthResponse' {analyzedResourceCount} -> analyzedResourceCount) (\s@DescribeAccountHealthResponse' {} a -> s {analyzedResourceCount = a} :: DescribeAccountHealthResponse)
+
+-- | The response's http status code.
+describeAccountHealthResponse_httpStatus :: Lens.Lens' DescribeAccountHealthResponse Prelude.Int
+describeAccountHealthResponse_httpStatus = Lens.lens (\DescribeAccountHealthResponse' {httpStatus} -> httpStatus) (\s@DescribeAccountHealthResponse' {} a -> s {httpStatus = a} :: DescribeAccountHealthResponse)
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+describeAccountHealthResponse_openReactiveInsights :: Lens.Lens' DescribeAccountHealthResponse Prelude.Int
+describeAccountHealthResponse_openReactiveInsights = Lens.lens (\DescribeAccountHealthResponse' {openReactiveInsights} -> openReactiveInsights) (\s@DescribeAccountHealthResponse' {} a -> s {openReactiveInsights = a} :: DescribeAccountHealthResponse)
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+describeAccountHealthResponse_openProactiveInsights :: Lens.Lens' DescribeAccountHealthResponse Prelude.Int
+describeAccountHealthResponse_openProactiveInsights = Lens.lens (\DescribeAccountHealthResponse' {openProactiveInsights} -> openProactiveInsights) (\s@DescribeAccountHealthResponse' {} a -> s {openProactiveInsights = a} :: DescribeAccountHealthResponse)
+
+-- | An integer that specifies the number of metrics that have been analyzed
+-- in your Amazon Web Services account.
+describeAccountHealthResponse_metricsAnalyzed :: Lens.Lens' DescribeAccountHealthResponse Prelude.Int
+describeAccountHealthResponse_metricsAnalyzed = Lens.lens (\DescribeAccountHealthResponse' {metricsAnalyzed} -> metricsAnalyzed) (\s@DescribeAccountHealthResponse' {} a -> s {metricsAnalyzed = a} :: DescribeAccountHealthResponse)
+
+-- | The number of Amazon DevOps Guru resource analysis hours billed to the
+-- current Amazon Web Services account in the last hour.
+describeAccountHealthResponse_resourceHours :: Lens.Lens' DescribeAccountHealthResponse Prelude.Integer
+describeAccountHealthResponse_resourceHours = Lens.lens (\DescribeAccountHealthResponse' {resourceHours} -> resourceHours) (\s@DescribeAccountHealthResponse' {} a -> s {resourceHours = a} :: DescribeAccountHealthResponse)
+
+instance Prelude.NFData DescribeAccountHealthResponse where
+  rnf DescribeAccountHealthResponse' {..} =
+    Prelude.rnf analyzedResourceCount
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf openReactiveInsights
+      `Prelude.seq` Prelude.rnf openProactiveInsights
+      `Prelude.seq` Prelude.rnf metricsAnalyzed
+      `Prelude.seq` Prelude.rnf resourceHours
diff --git a/gen/Amazonka/DevOpsGuru/DescribeAccountOverview.hs b/gen/Amazonka/DevOpsGuru/DescribeAccountOverview.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeAccountOverview.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.DevOpsGuru.DescribeAccountOverview
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- For the time range passed in, returns the number of open reactive
+-- insight that were created, the number of open proactive insights that
+-- were created, and the Mean Time to Recover (MTTR) for all closed
+-- reactive insights.
+module Amazonka.DevOpsGuru.DescribeAccountOverview
+  ( -- * Creating a Request
+    DescribeAccountOverview (..),
+    newDescribeAccountOverview,
+
+    -- * Request Lenses
+    describeAccountOverview_toTime,
+    describeAccountOverview_fromTime,
+
+    -- * Destructuring the Response
+    DescribeAccountOverviewResponse (..),
+    newDescribeAccountOverviewResponse,
+
+    -- * Response Lenses
+    describeAccountOverviewResponse_httpStatus,
+    describeAccountOverviewResponse_reactiveInsights,
+    describeAccountOverviewResponse_proactiveInsights,
+    describeAccountOverviewResponse_meanTimeToRecoverInMilliseconds,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAccountOverview' smart constructor.
+data DescribeAccountOverview = DescribeAccountOverview'
+  { -- | The end of the time range passed in. The start time granularity is at
+    -- the day level. The floor of the start time is used. Returned information
+    -- occurred before this day. If this is not specified, then the current day
+    -- is used.
+    toTime :: Prelude.Maybe Data.POSIX,
+    -- | The start of the time range passed in. The start time granularity is at
+    -- the day level. The floor of the start time is used. Returned information
+    -- occurred after this day.
+    fromTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountOverview' 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:
+--
+-- 'toTime', 'describeAccountOverview_toTime' - The end of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred before this day. If this is not specified, then the current day
+-- is used.
+--
+-- 'fromTime', 'describeAccountOverview_fromTime' - The start of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred after this day.
+newDescribeAccountOverview ::
+  -- | 'fromTime'
+  Prelude.UTCTime ->
+  DescribeAccountOverview
+newDescribeAccountOverview pFromTime_ =
+  DescribeAccountOverview'
+    { toTime = Prelude.Nothing,
+      fromTime = Data._Time Lens.# pFromTime_
+    }
+
+-- | The end of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred before this day. If this is not specified, then the current day
+-- is used.
+describeAccountOverview_toTime :: Lens.Lens' DescribeAccountOverview (Prelude.Maybe Prelude.UTCTime)
+describeAccountOverview_toTime = Lens.lens (\DescribeAccountOverview' {toTime} -> toTime) (\s@DescribeAccountOverview' {} a -> s {toTime = a} :: DescribeAccountOverview) Prelude.. Lens.mapping Data._Time
+
+-- | The start of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred after this day.
+describeAccountOverview_fromTime :: Lens.Lens' DescribeAccountOverview Prelude.UTCTime
+describeAccountOverview_fromTime = Lens.lens (\DescribeAccountOverview' {fromTime} -> fromTime) (\s@DescribeAccountOverview' {} a -> s {fromTime = a} :: DescribeAccountOverview) Prelude.. Data._Time
+
+instance Core.AWSRequest DescribeAccountOverview where
+  type
+    AWSResponse DescribeAccountOverview =
+      DescribeAccountOverviewResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAccountOverviewResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ReactiveInsights")
+            Prelude.<*> (x Data..:> "ProactiveInsights")
+            Prelude.<*> (x Data..:> "MeanTimeToRecoverInMilliseconds")
+      )
+
+instance Prelude.Hashable DescribeAccountOverview where
+  hashWithSalt _salt DescribeAccountOverview' {..} =
+    _salt
+      `Prelude.hashWithSalt` toTime
+      `Prelude.hashWithSalt` fromTime
+
+instance Prelude.NFData DescribeAccountOverview where
+  rnf DescribeAccountOverview' {..} =
+    Prelude.rnf toTime
+      `Prelude.seq` Prelude.rnf fromTime
+
+instance Data.ToHeaders DescribeAccountOverview where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAccountOverview where
+  toJSON DescribeAccountOverview' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ToTime" Data..=) Prelude.<$> toTime,
+            Prelude.Just ("FromTime" Data..= fromTime)
+          ]
+      )
+
+instance Data.ToPath DescribeAccountOverview where
+  toPath = Prelude.const "/accounts/overview"
+
+instance Data.ToQuery DescribeAccountOverview where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAccountOverviewResponse' smart constructor.
+data DescribeAccountOverviewResponse = DescribeAccountOverviewResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account that were created during the time range
+    -- passed in.
+    reactiveInsights :: Prelude.Int,
+    -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account that were created during the time range
+    -- passed in.
+    proactiveInsights :: Prelude.Int,
+    -- | The Mean Time to Recover (MTTR) for all closed insights that were
+    -- created during the time range passed in.
+    meanTimeToRecoverInMilliseconds :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountOverviewResponse' 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:
+--
+-- 'httpStatus', 'describeAccountOverviewResponse_httpStatus' - The response's http status code.
+--
+-- 'reactiveInsights', 'describeAccountOverviewResponse_reactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account that were created during the time range
+-- passed in.
+--
+-- 'proactiveInsights', 'describeAccountOverviewResponse_proactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account that were created during the time range
+-- passed in.
+--
+-- 'meanTimeToRecoverInMilliseconds', 'describeAccountOverviewResponse_meanTimeToRecoverInMilliseconds' - The Mean Time to Recover (MTTR) for all closed insights that were
+-- created during the time range passed in.
+newDescribeAccountOverviewResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'reactiveInsights'
+  Prelude.Int ->
+  -- | 'proactiveInsights'
+  Prelude.Int ->
+  -- | 'meanTimeToRecoverInMilliseconds'
+  Prelude.Integer ->
+  DescribeAccountOverviewResponse
+newDescribeAccountOverviewResponse
+  pHttpStatus_
+  pReactiveInsights_
+  pProactiveInsights_
+  pMeanTimeToRecoverInMilliseconds_ =
+    DescribeAccountOverviewResponse'
+      { httpStatus =
+          pHttpStatus_,
+        reactiveInsights = pReactiveInsights_,
+        proactiveInsights = pProactiveInsights_,
+        meanTimeToRecoverInMilliseconds =
+          pMeanTimeToRecoverInMilliseconds_
+      }
+
+-- | The response's http status code.
+describeAccountOverviewResponse_httpStatus :: Lens.Lens' DescribeAccountOverviewResponse Prelude.Int
+describeAccountOverviewResponse_httpStatus = Lens.lens (\DescribeAccountOverviewResponse' {httpStatus} -> httpStatus) (\s@DescribeAccountOverviewResponse' {} a -> s {httpStatus = a} :: DescribeAccountOverviewResponse)
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account that were created during the time range
+-- passed in.
+describeAccountOverviewResponse_reactiveInsights :: Lens.Lens' DescribeAccountOverviewResponse Prelude.Int
+describeAccountOverviewResponse_reactiveInsights = Lens.lens (\DescribeAccountOverviewResponse' {reactiveInsights} -> reactiveInsights) (\s@DescribeAccountOverviewResponse' {} a -> s {reactiveInsights = a} :: DescribeAccountOverviewResponse)
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account that were created during the time range
+-- passed in.
+describeAccountOverviewResponse_proactiveInsights :: Lens.Lens' DescribeAccountOverviewResponse Prelude.Int
+describeAccountOverviewResponse_proactiveInsights = Lens.lens (\DescribeAccountOverviewResponse' {proactiveInsights} -> proactiveInsights) (\s@DescribeAccountOverviewResponse' {} a -> s {proactiveInsights = a} :: DescribeAccountOverviewResponse)
+
+-- | The Mean Time to Recover (MTTR) for all closed insights that were
+-- created during the time range passed in.
+describeAccountOverviewResponse_meanTimeToRecoverInMilliseconds :: Lens.Lens' DescribeAccountOverviewResponse Prelude.Integer
+describeAccountOverviewResponse_meanTimeToRecoverInMilliseconds = Lens.lens (\DescribeAccountOverviewResponse' {meanTimeToRecoverInMilliseconds} -> meanTimeToRecoverInMilliseconds) (\s@DescribeAccountOverviewResponse' {} a -> s {meanTimeToRecoverInMilliseconds = a} :: DescribeAccountOverviewResponse)
+
+instance
+  Prelude.NFData
+    DescribeAccountOverviewResponse
+  where
+  rnf DescribeAccountOverviewResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf reactiveInsights
+      `Prelude.seq` Prelude.rnf proactiveInsights
+      `Prelude.seq` Prelude.rnf meanTimeToRecoverInMilliseconds
diff --git a/gen/Amazonka/DevOpsGuru/DescribeAnomaly.hs b/gen/Amazonka/DevOpsGuru/DescribeAnomaly.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeAnomaly.hs
@@ -0,0 +1,186 @@
+{-# 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.DevOpsGuru.DescribeAnomaly
+-- 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 details about an anomaly that you specify using its ID.
+module Amazonka.DevOpsGuru.DescribeAnomaly
+  ( -- * Creating a Request
+    DescribeAnomaly (..),
+    newDescribeAnomaly,
+
+    -- * Request Lenses
+    describeAnomaly_accountId,
+    describeAnomaly_id,
+
+    -- * Destructuring the Response
+    DescribeAnomalyResponse (..),
+    newDescribeAnomalyResponse,
+
+    -- * Response Lenses
+    describeAnomalyResponse_proactiveAnomaly,
+    describeAnomalyResponse_reactiveAnomaly,
+    describeAnomalyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAnomaly' smart constructor.
+data DescribeAnomaly = DescribeAnomaly'
+  { -- | The ID of the member account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the anomaly.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAnomaly' 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:
+--
+-- 'accountId', 'describeAnomaly_accountId' - The ID of the member account.
+--
+-- 'id', 'describeAnomaly_id' - The ID of the anomaly.
+newDescribeAnomaly ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribeAnomaly
+newDescribeAnomaly pId_ =
+  DescribeAnomaly'
+    { accountId = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The ID of the member account.
+describeAnomaly_accountId :: Lens.Lens' DescribeAnomaly (Prelude.Maybe Prelude.Text)
+describeAnomaly_accountId = Lens.lens (\DescribeAnomaly' {accountId} -> accountId) (\s@DescribeAnomaly' {} a -> s {accountId = a} :: DescribeAnomaly)
+
+-- | The ID of the anomaly.
+describeAnomaly_id :: Lens.Lens' DescribeAnomaly Prelude.Text
+describeAnomaly_id = Lens.lens (\DescribeAnomaly' {id} -> id) (\s@DescribeAnomaly' {} a -> s {id = a} :: DescribeAnomaly)
+
+instance Core.AWSRequest DescribeAnomaly where
+  type
+    AWSResponse DescribeAnomaly =
+      DescribeAnomalyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAnomalyResponse'
+            Prelude.<$> (x Data..?> "ProactiveAnomaly")
+            Prelude.<*> (x Data..?> "ReactiveAnomaly")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAnomaly where
+  hashWithSalt _salt DescribeAnomaly' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DescribeAnomaly where
+  rnf DescribeAnomaly' {..} =
+    Prelude.rnf accountId `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DescribeAnomaly where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeAnomaly where
+  toPath DescribeAnomaly' {..} =
+    Prelude.mconcat ["/anomalies/", Data.toBS id]
+
+instance Data.ToQuery DescribeAnomaly where
+  toQuery DescribeAnomaly' {..} =
+    Prelude.mconcat ["AccountId" Data.=: accountId]
+
+-- | /See:/ 'newDescribeAnomalyResponse' smart constructor.
+data DescribeAnomalyResponse = DescribeAnomalyResponse'
+  { -- | A @ProactiveAnomaly@ object that represents the requested anomaly.
+    proactiveAnomaly :: Prelude.Maybe ProactiveAnomaly,
+    -- | A @ReactiveAnomaly@ object that represents the requested anomaly.
+    reactiveAnomaly :: Prelude.Maybe ReactiveAnomaly,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAnomalyResponse' 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:
+--
+-- 'proactiveAnomaly', 'describeAnomalyResponse_proactiveAnomaly' - A @ProactiveAnomaly@ object that represents the requested anomaly.
+--
+-- 'reactiveAnomaly', 'describeAnomalyResponse_reactiveAnomaly' - A @ReactiveAnomaly@ object that represents the requested anomaly.
+--
+-- 'httpStatus', 'describeAnomalyResponse_httpStatus' - The response's http status code.
+newDescribeAnomalyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAnomalyResponse
+newDescribeAnomalyResponse pHttpStatus_ =
+  DescribeAnomalyResponse'
+    { proactiveAnomaly =
+        Prelude.Nothing,
+      reactiveAnomaly = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A @ProactiveAnomaly@ object that represents the requested anomaly.
+describeAnomalyResponse_proactiveAnomaly :: Lens.Lens' DescribeAnomalyResponse (Prelude.Maybe ProactiveAnomaly)
+describeAnomalyResponse_proactiveAnomaly = Lens.lens (\DescribeAnomalyResponse' {proactiveAnomaly} -> proactiveAnomaly) (\s@DescribeAnomalyResponse' {} a -> s {proactiveAnomaly = a} :: DescribeAnomalyResponse)
+
+-- | A @ReactiveAnomaly@ object that represents the requested anomaly.
+describeAnomalyResponse_reactiveAnomaly :: Lens.Lens' DescribeAnomalyResponse (Prelude.Maybe ReactiveAnomaly)
+describeAnomalyResponse_reactiveAnomaly = Lens.lens (\DescribeAnomalyResponse' {reactiveAnomaly} -> reactiveAnomaly) (\s@DescribeAnomalyResponse' {} a -> s {reactiveAnomaly = a} :: DescribeAnomalyResponse)
+
+-- | The response's http status code.
+describeAnomalyResponse_httpStatus :: Lens.Lens' DescribeAnomalyResponse Prelude.Int
+describeAnomalyResponse_httpStatus = Lens.lens (\DescribeAnomalyResponse' {httpStatus} -> httpStatus) (\s@DescribeAnomalyResponse' {} a -> s {httpStatus = a} :: DescribeAnomalyResponse)
+
+instance Prelude.NFData DescribeAnomalyResponse where
+  rnf DescribeAnomalyResponse' {..} =
+    Prelude.rnf proactiveAnomaly
+      `Prelude.seq` Prelude.rnf reactiveAnomaly
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeEventSourcesConfig.hs b/gen/Amazonka/DevOpsGuru/DescribeEventSourcesConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeEventSourcesConfig.hs
@@ -0,0 +1,152 @@
+{-# 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.DevOpsGuru.DescribeEventSourcesConfig
+-- 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 integration status of services that are integrated with
+-- DevOps Guru as Consumer via EventBridge. The one service that can be
+-- integrated with DevOps Guru is Amazon CodeGuru Profiler, which can
+-- produce proactive recommendations which can be stored and viewed in
+-- DevOps Guru.
+module Amazonka.DevOpsGuru.DescribeEventSourcesConfig
+  ( -- * Creating a Request
+    DescribeEventSourcesConfig (..),
+    newDescribeEventSourcesConfig,
+
+    -- * Destructuring the Response
+    DescribeEventSourcesConfigResponse (..),
+    newDescribeEventSourcesConfigResponse,
+
+    -- * Response Lenses
+    describeEventSourcesConfigResponse_eventSources,
+    describeEventSourcesConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeEventSourcesConfig' smart constructor.
+data DescribeEventSourcesConfig = DescribeEventSourcesConfig'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEventSourcesConfig' 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.
+newDescribeEventSourcesConfig ::
+  DescribeEventSourcesConfig
+newDescribeEventSourcesConfig =
+  DescribeEventSourcesConfig'
+
+instance Core.AWSRequest DescribeEventSourcesConfig where
+  type
+    AWSResponse DescribeEventSourcesConfig =
+      DescribeEventSourcesConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEventSourcesConfigResponse'
+            Prelude.<$> (x Data..?> "EventSources")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeEventSourcesConfig where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DescribeEventSourcesConfig where
+  rnf _ = ()
+
+instance Data.ToHeaders DescribeEventSourcesConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEventSourcesConfig where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DescribeEventSourcesConfig where
+  toPath = Prelude.const "/event-sources"
+
+instance Data.ToQuery DescribeEventSourcesConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEventSourcesConfigResponse' smart constructor.
+data DescribeEventSourcesConfigResponse = DescribeEventSourcesConfigResponse'
+  { -- | Lists the event sources in the configuration.
+    eventSources :: Prelude.Maybe EventSourcesConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEventSourcesConfigResponse' 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:
+--
+-- 'eventSources', 'describeEventSourcesConfigResponse_eventSources' - Lists the event sources in the configuration.
+--
+-- 'httpStatus', 'describeEventSourcesConfigResponse_httpStatus' - The response's http status code.
+newDescribeEventSourcesConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEventSourcesConfigResponse
+newDescribeEventSourcesConfigResponse pHttpStatus_ =
+  DescribeEventSourcesConfigResponse'
+    { eventSources =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists the event sources in the configuration.
+describeEventSourcesConfigResponse_eventSources :: Lens.Lens' DescribeEventSourcesConfigResponse (Prelude.Maybe EventSourcesConfig)
+describeEventSourcesConfigResponse_eventSources = Lens.lens (\DescribeEventSourcesConfigResponse' {eventSources} -> eventSources) (\s@DescribeEventSourcesConfigResponse' {} a -> s {eventSources = a} :: DescribeEventSourcesConfigResponse)
+
+-- | The response's http status code.
+describeEventSourcesConfigResponse_httpStatus :: Lens.Lens' DescribeEventSourcesConfigResponse Prelude.Int
+describeEventSourcesConfigResponse_httpStatus = Lens.lens (\DescribeEventSourcesConfigResponse' {httpStatus} -> httpStatus) (\s@DescribeEventSourcesConfigResponse' {} a -> s {httpStatus = a} :: DescribeEventSourcesConfigResponse)
+
+instance
+  Prelude.NFData
+    DescribeEventSourcesConfigResponse
+  where
+  rnf DescribeEventSourcesConfigResponse' {..} =
+    Prelude.rnf eventSources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeFeedback.hs b/gen/Amazonka/DevOpsGuru/DescribeFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeFeedback.hs
@@ -0,0 +1,162 @@
+{-# 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.DevOpsGuru.DescribeFeedback
+-- 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 most recent feedback submitted in the current Amazon Web
+-- Services account and Region.
+module Amazonka.DevOpsGuru.DescribeFeedback
+  ( -- * Creating a Request
+    DescribeFeedback (..),
+    newDescribeFeedback,
+
+    -- * Request Lenses
+    describeFeedback_insightId,
+
+    -- * Destructuring the Response
+    DescribeFeedbackResponse (..),
+    newDescribeFeedbackResponse,
+
+    -- * Response Lenses
+    describeFeedbackResponse_insightFeedback,
+    describeFeedbackResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFeedback' smart constructor.
+data DescribeFeedback = DescribeFeedback'
+  { -- | The ID of the insight for which the feedback was provided.
+    insightId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFeedback' 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:
+--
+-- 'insightId', 'describeFeedback_insightId' - The ID of the insight for which the feedback was provided.
+newDescribeFeedback ::
+  DescribeFeedback
+newDescribeFeedback =
+  DescribeFeedback' {insightId = Prelude.Nothing}
+
+-- | The ID of the insight for which the feedback was provided.
+describeFeedback_insightId :: Lens.Lens' DescribeFeedback (Prelude.Maybe Prelude.Text)
+describeFeedback_insightId = Lens.lens (\DescribeFeedback' {insightId} -> insightId) (\s@DescribeFeedback' {} a -> s {insightId = a} :: DescribeFeedback)
+
+instance Core.AWSRequest DescribeFeedback where
+  type
+    AWSResponse DescribeFeedback =
+      DescribeFeedbackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeFeedbackResponse'
+            Prelude.<$> (x Data..?> "InsightFeedback")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFeedback where
+  hashWithSalt _salt DescribeFeedback' {..} =
+    _salt `Prelude.hashWithSalt` insightId
+
+instance Prelude.NFData DescribeFeedback where
+  rnf DescribeFeedback' {..} = Prelude.rnf insightId
+
+instance Data.ToHeaders DescribeFeedback where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeFeedback where
+  toJSON DescribeFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("InsightId" Data..=) Prelude.<$> insightId]
+      )
+
+instance Data.ToPath DescribeFeedback where
+  toPath = Prelude.const "/feedback"
+
+instance Data.ToQuery DescribeFeedback where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeFeedbackResponse' smart constructor.
+data DescribeFeedbackResponse = DescribeFeedbackResponse'
+  { insightFeedback :: Prelude.Maybe InsightFeedback,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFeedbackResponse' 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:
+--
+-- 'insightFeedback', 'describeFeedbackResponse_insightFeedback' - Undocumented member.
+--
+-- 'httpStatus', 'describeFeedbackResponse_httpStatus' - The response's http status code.
+newDescribeFeedbackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFeedbackResponse
+newDescribeFeedbackResponse pHttpStatus_ =
+  DescribeFeedbackResponse'
+    { insightFeedback =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeFeedbackResponse_insightFeedback :: Lens.Lens' DescribeFeedbackResponse (Prelude.Maybe InsightFeedback)
+describeFeedbackResponse_insightFeedback = Lens.lens (\DescribeFeedbackResponse' {insightFeedback} -> insightFeedback) (\s@DescribeFeedbackResponse' {} a -> s {insightFeedback = a} :: DescribeFeedbackResponse)
+
+-- | The response's http status code.
+describeFeedbackResponse_httpStatus :: Lens.Lens' DescribeFeedbackResponse Prelude.Int
+describeFeedbackResponse_httpStatus = Lens.lens (\DescribeFeedbackResponse' {httpStatus} -> httpStatus) (\s@DescribeFeedbackResponse' {} a -> s {httpStatus = a} :: DescribeFeedbackResponse)
+
+instance Prelude.NFData DescribeFeedbackResponse where
+  rnf DescribeFeedbackResponse' {..} =
+    Prelude.rnf insightFeedback
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeInsight.hs b/gen/Amazonka/DevOpsGuru/DescribeInsight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeInsight.hs
@@ -0,0 +1,186 @@
+{-# 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.DevOpsGuru.DescribeInsight
+-- 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 details about an insight that you specify using its ID.
+module Amazonka.DevOpsGuru.DescribeInsight
+  ( -- * Creating a Request
+    DescribeInsight (..),
+    newDescribeInsight,
+
+    -- * Request Lenses
+    describeInsight_accountId,
+    describeInsight_id,
+
+    -- * Destructuring the Response
+    DescribeInsightResponse (..),
+    newDescribeInsightResponse,
+
+    -- * Response Lenses
+    describeInsightResponse_proactiveInsight,
+    describeInsightResponse_reactiveInsight,
+    describeInsightResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInsight' smart constructor.
+data DescribeInsight = DescribeInsight'
+  { -- | The ID of the member account in the organization.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the insight.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInsight' 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:
+--
+-- 'accountId', 'describeInsight_accountId' - The ID of the member account in the organization.
+--
+-- 'id', 'describeInsight_id' - The ID of the insight.
+newDescribeInsight ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribeInsight
+newDescribeInsight pId_ =
+  DescribeInsight'
+    { accountId = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The ID of the member account in the organization.
+describeInsight_accountId :: Lens.Lens' DescribeInsight (Prelude.Maybe Prelude.Text)
+describeInsight_accountId = Lens.lens (\DescribeInsight' {accountId} -> accountId) (\s@DescribeInsight' {} a -> s {accountId = a} :: DescribeInsight)
+
+-- | The ID of the insight.
+describeInsight_id :: Lens.Lens' DescribeInsight Prelude.Text
+describeInsight_id = Lens.lens (\DescribeInsight' {id} -> id) (\s@DescribeInsight' {} a -> s {id = a} :: DescribeInsight)
+
+instance Core.AWSRequest DescribeInsight where
+  type
+    AWSResponse DescribeInsight =
+      DescribeInsightResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeInsightResponse'
+            Prelude.<$> (x Data..?> "ProactiveInsight")
+            Prelude.<*> (x Data..?> "ReactiveInsight")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInsight where
+  hashWithSalt _salt DescribeInsight' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DescribeInsight where
+  rnf DescribeInsight' {..} =
+    Prelude.rnf accountId `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DescribeInsight where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeInsight where
+  toPath DescribeInsight' {..} =
+    Prelude.mconcat ["/insights/", Data.toBS id]
+
+instance Data.ToQuery DescribeInsight where
+  toQuery DescribeInsight' {..} =
+    Prelude.mconcat ["AccountId" Data.=: accountId]
+
+-- | /See:/ 'newDescribeInsightResponse' smart constructor.
+data DescribeInsightResponse = DescribeInsightResponse'
+  { -- | A @ProactiveInsight@ object that represents the requested insight.
+    proactiveInsight :: Prelude.Maybe ProactiveInsight,
+    -- | A @ReactiveInsight@ object that represents the requested insight.
+    reactiveInsight :: Prelude.Maybe ReactiveInsight,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInsightResponse' 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:
+--
+-- 'proactiveInsight', 'describeInsightResponse_proactiveInsight' - A @ProactiveInsight@ object that represents the requested insight.
+--
+-- 'reactiveInsight', 'describeInsightResponse_reactiveInsight' - A @ReactiveInsight@ object that represents the requested insight.
+--
+-- 'httpStatus', 'describeInsightResponse_httpStatus' - The response's http status code.
+newDescribeInsightResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInsightResponse
+newDescribeInsightResponse pHttpStatus_ =
+  DescribeInsightResponse'
+    { proactiveInsight =
+        Prelude.Nothing,
+      reactiveInsight = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A @ProactiveInsight@ object that represents the requested insight.
+describeInsightResponse_proactiveInsight :: Lens.Lens' DescribeInsightResponse (Prelude.Maybe ProactiveInsight)
+describeInsightResponse_proactiveInsight = Lens.lens (\DescribeInsightResponse' {proactiveInsight} -> proactiveInsight) (\s@DescribeInsightResponse' {} a -> s {proactiveInsight = a} :: DescribeInsightResponse)
+
+-- | A @ReactiveInsight@ object that represents the requested insight.
+describeInsightResponse_reactiveInsight :: Lens.Lens' DescribeInsightResponse (Prelude.Maybe ReactiveInsight)
+describeInsightResponse_reactiveInsight = Lens.lens (\DescribeInsightResponse' {reactiveInsight} -> reactiveInsight) (\s@DescribeInsightResponse' {} a -> s {reactiveInsight = a} :: DescribeInsightResponse)
+
+-- | The response's http status code.
+describeInsightResponse_httpStatus :: Lens.Lens' DescribeInsightResponse Prelude.Int
+describeInsightResponse_httpStatus = Lens.lens (\DescribeInsightResponse' {httpStatus} -> httpStatus) (\s@DescribeInsightResponse' {} a -> s {httpStatus = a} :: DescribeInsightResponse)
+
+instance Prelude.NFData DescribeInsightResponse where
+  rnf DescribeInsightResponse' {..} =
+    Prelude.rnf proactiveInsight
+      `Prelude.seq` Prelude.rnf reactiveInsight
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeOrganizationHealth.hs b/gen/Amazonka/DevOpsGuru/DescribeOrganizationHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeOrganizationHealth.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.DevOpsGuru.DescribeOrganizationHealth
+-- 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 active insights, predictive insights, and resource hours
+-- analyzed in last hour.
+module Amazonka.DevOpsGuru.DescribeOrganizationHealth
+  ( -- * Creating a Request
+    DescribeOrganizationHealth (..),
+    newDescribeOrganizationHealth,
+
+    -- * Request Lenses
+    describeOrganizationHealth_accountIds,
+    describeOrganizationHealth_organizationalUnitIds,
+
+    -- * Destructuring the Response
+    DescribeOrganizationHealthResponse (..),
+    newDescribeOrganizationHealthResponse,
+
+    -- * Response Lenses
+    describeOrganizationHealthResponse_httpStatus,
+    describeOrganizationHealthResponse_openReactiveInsights,
+    describeOrganizationHealthResponse_openProactiveInsights,
+    describeOrganizationHealthResponse_metricsAnalyzed,
+    describeOrganizationHealthResponse_resourceHours,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeOrganizationHealth' smart constructor.
+data DescribeOrganizationHealth = DescribeOrganizationHealth'
+  { -- | The ID of the Amazon Web Services account.
+    accountIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the organizational unit.
+    organizationalUnitIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationHealth' 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:
+--
+-- 'accountIds', 'describeOrganizationHealth_accountIds' - The ID of the Amazon Web Services account.
+--
+-- 'organizationalUnitIds', 'describeOrganizationHealth_organizationalUnitIds' - The ID of the organizational unit.
+newDescribeOrganizationHealth ::
+  DescribeOrganizationHealth
+newDescribeOrganizationHealth =
+  DescribeOrganizationHealth'
+    { accountIds =
+        Prelude.Nothing,
+      organizationalUnitIds = Prelude.Nothing
+    }
+
+-- | The ID of the Amazon Web Services account.
+describeOrganizationHealth_accountIds :: Lens.Lens' DescribeOrganizationHealth (Prelude.Maybe [Prelude.Text])
+describeOrganizationHealth_accountIds = Lens.lens (\DescribeOrganizationHealth' {accountIds} -> accountIds) (\s@DescribeOrganizationHealth' {} a -> s {accountIds = a} :: DescribeOrganizationHealth) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the organizational unit.
+describeOrganizationHealth_organizationalUnitIds :: Lens.Lens' DescribeOrganizationHealth (Prelude.Maybe [Prelude.Text])
+describeOrganizationHealth_organizationalUnitIds = Lens.lens (\DescribeOrganizationHealth' {organizationalUnitIds} -> organizationalUnitIds) (\s@DescribeOrganizationHealth' {} a -> s {organizationalUnitIds = a} :: DescribeOrganizationHealth) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeOrganizationHealth where
+  type
+    AWSResponse DescribeOrganizationHealth =
+      DescribeOrganizationHealthResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeOrganizationHealthResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "OpenReactiveInsights")
+            Prelude.<*> (x Data..:> "OpenProactiveInsights")
+            Prelude.<*> (x Data..:> "MetricsAnalyzed")
+            Prelude.<*> (x Data..:> "ResourceHours")
+      )
+
+instance Prelude.Hashable DescribeOrganizationHealth where
+  hashWithSalt _salt DescribeOrganizationHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountIds
+      `Prelude.hashWithSalt` organizationalUnitIds
+
+instance Prelude.NFData DescribeOrganizationHealth where
+  rnf DescribeOrganizationHealth' {..} =
+    Prelude.rnf accountIds
+      `Prelude.seq` Prelude.rnf organizationalUnitIds
+
+instance Data.ToHeaders DescribeOrganizationHealth where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeOrganizationHealth where
+  toJSON DescribeOrganizationHealth' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountIds" Data..=) Prelude.<$> accountIds,
+            ("OrganizationalUnitIds" Data..=)
+              Prelude.<$> organizationalUnitIds
+          ]
+      )
+
+instance Data.ToPath DescribeOrganizationHealth where
+  toPath = Prelude.const "/organization/health"
+
+instance Data.ToQuery DescribeOrganizationHealth where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeOrganizationHealthResponse' smart constructor.
+data DescribeOrganizationHealthResponse = DescribeOrganizationHealthResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account.
+    openReactiveInsights :: Prelude.Int,
+    -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account.
+    openProactiveInsights :: Prelude.Int,
+    -- | An integer that specifies the number of metrics that have been analyzed
+    -- in your organization.
+    metricsAnalyzed :: Prelude.Int,
+    -- | The number of Amazon DevOps Guru resource analysis hours billed to the
+    -- current Amazon Web Services account in the last hour.
+    resourceHours :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationHealthResponse' 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:
+--
+-- 'httpStatus', 'describeOrganizationHealthResponse_httpStatus' - The response's http status code.
+--
+-- 'openReactiveInsights', 'describeOrganizationHealthResponse_openReactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+--
+-- 'openProactiveInsights', 'describeOrganizationHealthResponse_openProactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+--
+-- 'metricsAnalyzed', 'describeOrganizationHealthResponse_metricsAnalyzed' - An integer that specifies the number of metrics that have been analyzed
+-- in your organization.
+--
+-- 'resourceHours', 'describeOrganizationHealthResponse_resourceHours' - The number of Amazon DevOps Guru resource analysis hours billed to the
+-- current Amazon Web Services account in the last hour.
+newDescribeOrganizationHealthResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'openReactiveInsights'
+  Prelude.Int ->
+  -- | 'openProactiveInsights'
+  Prelude.Int ->
+  -- | 'metricsAnalyzed'
+  Prelude.Int ->
+  -- | 'resourceHours'
+  Prelude.Integer ->
+  DescribeOrganizationHealthResponse
+newDescribeOrganizationHealthResponse
+  pHttpStatus_
+  pOpenReactiveInsights_
+  pOpenProactiveInsights_
+  pMetricsAnalyzed_
+  pResourceHours_ =
+    DescribeOrganizationHealthResponse'
+      { httpStatus =
+          pHttpStatus_,
+        openReactiveInsights =
+          pOpenReactiveInsights_,
+        openProactiveInsights =
+          pOpenProactiveInsights_,
+        metricsAnalyzed = pMetricsAnalyzed_,
+        resourceHours = pResourceHours_
+      }
+
+-- | The response's http status code.
+describeOrganizationHealthResponse_httpStatus :: Lens.Lens' DescribeOrganizationHealthResponse Prelude.Int
+describeOrganizationHealthResponse_httpStatus = Lens.lens (\DescribeOrganizationHealthResponse' {httpStatus} -> httpStatus) (\s@DescribeOrganizationHealthResponse' {} a -> s {httpStatus = a} :: DescribeOrganizationHealthResponse)
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+describeOrganizationHealthResponse_openReactiveInsights :: Lens.Lens' DescribeOrganizationHealthResponse Prelude.Int
+describeOrganizationHealthResponse_openReactiveInsights = Lens.lens (\DescribeOrganizationHealthResponse' {openReactiveInsights} -> openReactiveInsights) (\s@DescribeOrganizationHealthResponse' {} a -> s {openReactiveInsights = a} :: DescribeOrganizationHealthResponse)
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+describeOrganizationHealthResponse_openProactiveInsights :: Lens.Lens' DescribeOrganizationHealthResponse Prelude.Int
+describeOrganizationHealthResponse_openProactiveInsights = Lens.lens (\DescribeOrganizationHealthResponse' {openProactiveInsights} -> openProactiveInsights) (\s@DescribeOrganizationHealthResponse' {} a -> s {openProactiveInsights = a} :: DescribeOrganizationHealthResponse)
+
+-- | An integer that specifies the number of metrics that have been analyzed
+-- in your organization.
+describeOrganizationHealthResponse_metricsAnalyzed :: Lens.Lens' DescribeOrganizationHealthResponse Prelude.Int
+describeOrganizationHealthResponse_metricsAnalyzed = Lens.lens (\DescribeOrganizationHealthResponse' {metricsAnalyzed} -> metricsAnalyzed) (\s@DescribeOrganizationHealthResponse' {} a -> s {metricsAnalyzed = a} :: DescribeOrganizationHealthResponse)
+
+-- | The number of Amazon DevOps Guru resource analysis hours billed to the
+-- current Amazon Web Services account in the last hour.
+describeOrganizationHealthResponse_resourceHours :: Lens.Lens' DescribeOrganizationHealthResponse Prelude.Integer
+describeOrganizationHealthResponse_resourceHours = Lens.lens (\DescribeOrganizationHealthResponse' {resourceHours} -> resourceHours) (\s@DescribeOrganizationHealthResponse' {} a -> s {resourceHours = a} :: DescribeOrganizationHealthResponse)
+
+instance
+  Prelude.NFData
+    DescribeOrganizationHealthResponse
+  where
+  rnf DescribeOrganizationHealthResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf openReactiveInsights
+      `Prelude.seq` Prelude.rnf openProactiveInsights
+      `Prelude.seq` Prelude.rnf metricsAnalyzed
+      `Prelude.seq` Prelude.rnf resourceHours
diff --git a/gen/Amazonka/DevOpsGuru/DescribeOrganizationOverview.hs b/gen/Amazonka/DevOpsGuru/DescribeOrganizationOverview.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeOrganizationOverview.hs
@@ -0,0 +1,259 @@
+{-# 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.DevOpsGuru.DescribeOrganizationOverview
+-- 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 an overview of your organization\'s history based on the
+-- specified time range. The overview includes the total reactive and
+-- proactive insights.
+module Amazonka.DevOpsGuru.DescribeOrganizationOverview
+  ( -- * Creating a Request
+    DescribeOrganizationOverview (..),
+    newDescribeOrganizationOverview,
+
+    -- * Request Lenses
+    describeOrganizationOverview_accountIds,
+    describeOrganizationOverview_organizationalUnitIds,
+    describeOrganizationOverview_toTime,
+    describeOrganizationOverview_fromTime,
+
+    -- * Destructuring the Response
+    DescribeOrganizationOverviewResponse (..),
+    newDescribeOrganizationOverviewResponse,
+
+    -- * Response Lenses
+    describeOrganizationOverviewResponse_httpStatus,
+    describeOrganizationOverviewResponse_reactiveInsights,
+    describeOrganizationOverviewResponse_proactiveInsights,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeOrganizationOverview' smart constructor.
+data DescribeOrganizationOverview = DescribeOrganizationOverview'
+  { -- | The ID of the Amazon Web Services account.
+    accountIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the organizational unit.
+    organizationalUnitIds :: Prelude.Maybe [Prelude.Text],
+    -- | The end of the time range passed in. The start time granularity is at
+    -- the day level. The floor of the start time is used. Returned information
+    -- occurred before this day. If this is not specified, then the current day
+    -- is used.
+    toTime :: Prelude.Maybe Data.POSIX,
+    -- | The start of the time range passed in. The start time granularity is at
+    -- the day level. The floor of the start time is used. Returned information
+    -- occurred after this day.
+    fromTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationOverview' 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:
+--
+-- 'accountIds', 'describeOrganizationOverview_accountIds' - The ID of the Amazon Web Services account.
+--
+-- 'organizationalUnitIds', 'describeOrganizationOverview_organizationalUnitIds' - The ID of the organizational unit.
+--
+-- 'toTime', 'describeOrganizationOverview_toTime' - The end of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred before this day. If this is not specified, then the current day
+-- is used.
+--
+-- 'fromTime', 'describeOrganizationOverview_fromTime' - The start of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred after this day.
+newDescribeOrganizationOverview ::
+  -- | 'fromTime'
+  Prelude.UTCTime ->
+  DescribeOrganizationOverview
+newDescribeOrganizationOverview pFromTime_ =
+  DescribeOrganizationOverview'
+    { accountIds =
+        Prelude.Nothing,
+      organizationalUnitIds = Prelude.Nothing,
+      toTime = Prelude.Nothing,
+      fromTime = Data._Time Lens.# pFromTime_
+    }
+
+-- | The ID of the Amazon Web Services account.
+describeOrganizationOverview_accountIds :: Lens.Lens' DescribeOrganizationOverview (Prelude.Maybe [Prelude.Text])
+describeOrganizationOverview_accountIds = Lens.lens (\DescribeOrganizationOverview' {accountIds} -> accountIds) (\s@DescribeOrganizationOverview' {} a -> s {accountIds = a} :: DescribeOrganizationOverview) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the organizational unit.
+describeOrganizationOverview_organizationalUnitIds :: Lens.Lens' DescribeOrganizationOverview (Prelude.Maybe [Prelude.Text])
+describeOrganizationOverview_organizationalUnitIds = Lens.lens (\DescribeOrganizationOverview' {organizationalUnitIds} -> organizationalUnitIds) (\s@DescribeOrganizationOverview' {} a -> s {organizationalUnitIds = a} :: DescribeOrganizationOverview) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred before this day. If this is not specified, then the current day
+-- is used.
+describeOrganizationOverview_toTime :: Lens.Lens' DescribeOrganizationOverview (Prelude.Maybe Prelude.UTCTime)
+describeOrganizationOverview_toTime = Lens.lens (\DescribeOrganizationOverview' {toTime} -> toTime) (\s@DescribeOrganizationOverview' {} a -> s {toTime = a} :: DescribeOrganizationOverview) Prelude.. Lens.mapping Data._Time
+
+-- | The start of the time range passed in. The start time granularity is at
+-- the day level. The floor of the start time is used. Returned information
+-- occurred after this day.
+describeOrganizationOverview_fromTime :: Lens.Lens' DescribeOrganizationOverview Prelude.UTCTime
+describeOrganizationOverview_fromTime = Lens.lens (\DescribeOrganizationOverview' {fromTime} -> fromTime) (\s@DescribeOrganizationOverview' {} a -> s {fromTime = a} :: DescribeOrganizationOverview) Prelude.. Data._Time
+
+instance Core.AWSRequest DescribeOrganizationOverview where
+  type
+    AWSResponse DescribeOrganizationOverview =
+      DescribeOrganizationOverviewResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeOrganizationOverviewResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "ReactiveInsights")
+            Prelude.<*> (x Data..:> "ProactiveInsights")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeOrganizationOverview
+  where
+  hashWithSalt _salt DescribeOrganizationOverview' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountIds
+      `Prelude.hashWithSalt` organizationalUnitIds
+      `Prelude.hashWithSalt` toTime
+      `Prelude.hashWithSalt` fromTime
+
+instance Prelude.NFData DescribeOrganizationOverview where
+  rnf DescribeOrganizationOverview' {..} =
+    Prelude.rnf accountIds
+      `Prelude.seq` Prelude.rnf organizationalUnitIds
+      `Prelude.seq` Prelude.rnf toTime
+      `Prelude.seq` Prelude.rnf fromTime
+
+instance Data.ToHeaders DescribeOrganizationOverview where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeOrganizationOverview where
+  toJSON DescribeOrganizationOverview' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountIds" Data..=) Prelude.<$> accountIds,
+            ("OrganizationalUnitIds" Data..=)
+              Prelude.<$> organizationalUnitIds,
+            ("ToTime" Data..=) Prelude.<$> toTime,
+            Prelude.Just ("FromTime" Data..= fromTime)
+          ]
+      )
+
+instance Data.ToPath DescribeOrganizationOverview where
+  toPath = Prelude.const "/organization/overview"
+
+instance Data.ToQuery DescribeOrganizationOverview where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeOrganizationOverviewResponse' smart constructor.
+data DescribeOrganizationOverviewResponse = DescribeOrganizationOverviewResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account.
+    reactiveInsights :: Prelude.Int,
+    -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account.
+    proactiveInsights :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationOverviewResponse' 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:
+--
+-- 'httpStatus', 'describeOrganizationOverviewResponse_httpStatus' - The response's http status code.
+--
+-- 'reactiveInsights', 'describeOrganizationOverviewResponse_reactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+--
+-- 'proactiveInsights', 'describeOrganizationOverviewResponse_proactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+newDescribeOrganizationOverviewResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'reactiveInsights'
+  Prelude.Int ->
+  -- | 'proactiveInsights'
+  Prelude.Int ->
+  DescribeOrganizationOverviewResponse
+newDescribeOrganizationOverviewResponse
+  pHttpStatus_
+  pReactiveInsights_
+  pProactiveInsights_ =
+    DescribeOrganizationOverviewResponse'
+      { httpStatus =
+          pHttpStatus_,
+        reactiveInsights = pReactiveInsights_,
+        proactiveInsights =
+          pProactiveInsights_
+      }
+
+-- | The response's http status code.
+describeOrganizationOverviewResponse_httpStatus :: Lens.Lens' DescribeOrganizationOverviewResponse Prelude.Int
+describeOrganizationOverviewResponse_httpStatus = Lens.lens (\DescribeOrganizationOverviewResponse' {httpStatus} -> httpStatus) (\s@DescribeOrganizationOverviewResponse' {} a -> s {httpStatus = a} :: DescribeOrganizationOverviewResponse)
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+describeOrganizationOverviewResponse_reactiveInsights :: Lens.Lens' DescribeOrganizationOverviewResponse Prelude.Int
+describeOrganizationOverviewResponse_reactiveInsights = Lens.lens (\DescribeOrganizationOverviewResponse' {reactiveInsights} -> reactiveInsights) (\s@DescribeOrganizationOverviewResponse' {} a -> s {reactiveInsights = a} :: DescribeOrganizationOverviewResponse)
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+describeOrganizationOverviewResponse_proactiveInsights :: Lens.Lens' DescribeOrganizationOverviewResponse Prelude.Int
+describeOrganizationOverviewResponse_proactiveInsights = Lens.lens (\DescribeOrganizationOverviewResponse' {proactiveInsights} -> proactiveInsights) (\s@DescribeOrganizationOverviewResponse' {} a -> s {proactiveInsights = a} :: DescribeOrganizationOverviewResponse)
+
+instance
+  Prelude.NFData
+    DescribeOrganizationOverviewResponse
+  where
+  rnf DescribeOrganizationOverviewResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf reactiveInsights
+      `Prelude.seq` Prelude.rnf proactiveInsights
diff --git a/gen/Amazonka/DevOpsGuru/DescribeOrganizationResourceCollectionHealth.hs b/gen/Amazonka/DevOpsGuru/DescribeOrganizationResourceCollectionHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeOrganizationResourceCollectionHealth.hs
@@ -0,0 +1,496 @@
+{-# 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.DevOpsGuru.DescribeOrganizationResourceCollectionHealth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides an overview of your system\'s health. If additional member
+-- accounts are part of your organization, you can filter those accounts
+-- using the @AccountIds@ field.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.DescribeOrganizationResourceCollectionHealth
+  ( -- * Creating a Request
+    DescribeOrganizationResourceCollectionHealth (..),
+    newDescribeOrganizationResourceCollectionHealth,
+
+    -- * Request Lenses
+    describeOrganizationResourceCollectionHealth_accountIds,
+    describeOrganizationResourceCollectionHealth_maxResults,
+    describeOrganizationResourceCollectionHealth_nextToken,
+    describeOrganizationResourceCollectionHealth_organizationalUnitIds,
+    describeOrganizationResourceCollectionHealth_organizationResourceCollectionType,
+
+    -- * Destructuring the Response
+    DescribeOrganizationResourceCollectionHealthResponse (..),
+    newDescribeOrganizationResourceCollectionHealthResponse,
+
+    -- * Response Lenses
+    describeOrganizationResourceCollectionHealthResponse_account,
+    describeOrganizationResourceCollectionHealthResponse_cloudFormation,
+    describeOrganizationResourceCollectionHealthResponse_nextToken,
+    describeOrganizationResourceCollectionHealthResponse_service,
+    describeOrganizationResourceCollectionHealthResponse_tags,
+    describeOrganizationResourceCollectionHealthResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeOrganizationResourceCollectionHealth' smart constructor.
+data DescribeOrganizationResourceCollectionHealth = DescribeOrganizationResourceCollectionHealth'
+  { -- | The ID of the Amazon Web Services account.
+    accountIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the organizational unit.
+    organizationalUnitIds :: Prelude.Maybe [Prelude.Text],
+    -- | An Amazon Web Services resource collection type. This type specifies how
+    -- analyzed Amazon Web Services resources are defined. The two types of
+    -- Amazon Web Services resource collections supported are Amazon Web
+    -- Services CloudFormation stacks and Amazon Web Services resources that
+    -- contain the same Amazon Web Services tag. DevOps Guru can be configured
+    -- to analyze the Amazon Web Services resources that are defined in the
+    -- stacks or that are tagged using the same tag /key/. You can specify up
+    -- to 500 Amazon Web Services CloudFormation stacks.
+    organizationResourceCollectionType :: OrganizationResourceCollectionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationResourceCollectionHealth' 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:
+--
+-- 'accountIds', 'describeOrganizationResourceCollectionHealth_accountIds' - The ID of the Amazon Web Services account.
+--
+-- 'maxResults', 'describeOrganizationResourceCollectionHealth_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeOrganizationResourceCollectionHealth_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'organizationalUnitIds', 'describeOrganizationResourceCollectionHealth_organizationalUnitIds' - The ID of the organizational unit.
+--
+-- 'organizationResourceCollectionType', 'describeOrganizationResourceCollectionHealth_organizationResourceCollectionType' - An Amazon Web Services resource collection type. This type specifies how
+-- analyzed Amazon Web Services resources are defined. The two types of
+-- Amazon Web Services resource collections supported are Amazon Web
+-- Services CloudFormation stacks and Amazon Web Services resources that
+-- contain the same Amazon Web Services tag. DevOps Guru can be configured
+-- to analyze the Amazon Web Services resources that are defined in the
+-- stacks or that are tagged using the same tag /key/. You can specify up
+-- to 500 Amazon Web Services CloudFormation stacks.
+newDescribeOrganizationResourceCollectionHealth ::
+  -- | 'organizationResourceCollectionType'
+  OrganizationResourceCollectionType ->
+  DescribeOrganizationResourceCollectionHealth
+newDescribeOrganizationResourceCollectionHealth
+  pOrganizationResourceCollectionType_ =
+    DescribeOrganizationResourceCollectionHealth'
+      { accountIds =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        organizationalUnitIds =
+          Prelude.Nothing,
+        organizationResourceCollectionType =
+          pOrganizationResourceCollectionType_
+      }
+
+-- | The ID of the Amazon Web Services account.
+describeOrganizationResourceCollectionHealth_accountIds :: Lens.Lens' DescribeOrganizationResourceCollectionHealth (Prelude.Maybe [Prelude.Text])
+describeOrganizationResourceCollectionHealth_accountIds = Lens.lens (\DescribeOrganizationResourceCollectionHealth' {accountIds} -> accountIds) (\s@DescribeOrganizationResourceCollectionHealth' {} a -> s {accountIds = a} :: DescribeOrganizationResourceCollectionHealth) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeOrganizationResourceCollectionHealth_maxResults :: Lens.Lens' DescribeOrganizationResourceCollectionHealth (Prelude.Maybe Prelude.Natural)
+describeOrganizationResourceCollectionHealth_maxResults = Lens.lens (\DescribeOrganizationResourceCollectionHealth' {maxResults} -> maxResults) (\s@DescribeOrganizationResourceCollectionHealth' {} a -> s {maxResults = a} :: DescribeOrganizationResourceCollectionHealth)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeOrganizationResourceCollectionHealth_nextToken :: Lens.Lens' DescribeOrganizationResourceCollectionHealth (Prelude.Maybe Prelude.Text)
+describeOrganizationResourceCollectionHealth_nextToken = Lens.lens (\DescribeOrganizationResourceCollectionHealth' {nextToken} -> nextToken) (\s@DescribeOrganizationResourceCollectionHealth' {} a -> s {nextToken = a} :: DescribeOrganizationResourceCollectionHealth)
+
+-- | The ID of the organizational unit.
+describeOrganizationResourceCollectionHealth_organizationalUnitIds :: Lens.Lens' DescribeOrganizationResourceCollectionHealth (Prelude.Maybe [Prelude.Text])
+describeOrganizationResourceCollectionHealth_organizationalUnitIds = Lens.lens (\DescribeOrganizationResourceCollectionHealth' {organizationalUnitIds} -> organizationalUnitIds) (\s@DescribeOrganizationResourceCollectionHealth' {} a -> s {organizationalUnitIds = a} :: DescribeOrganizationResourceCollectionHealth) Prelude.. Lens.mapping Lens.coerced
+
+-- | An Amazon Web Services resource collection type. This type specifies how
+-- analyzed Amazon Web Services resources are defined. The two types of
+-- Amazon Web Services resource collections supported are Amazon Web
+-- Services CloudFormation stacks and Amazon Web Services resources that
+-- contain the same Amazon Web Services tag. DevOps Guru can be configured
+-- to analyze the Amazon Web Services resources that are defined in the
+-- stacks or that are tagged using the same tag /key/. You can specify up
+-- to 500 Amazon Web Services CloudFormation stacks.
+describeOrganizationResourceCollectionHealth_organizationResourceCollectionType :: Lens.Lens' DescribeOrganizationResourceCollectionHealth OrganizationResourceCollectionType
+describeOrganizationResourceCollectionHealth_organizationResourceCollectionType = Lens.lens (\DescribeOrganizationResourceCollectionHealth' {organizationResourceCollectionType} -> organizationResourceCollectionType) (\s@DescribeOrganizationResourceCollectionHealth' {} a -> s {organizationResourceCollectionType = a} :: DescribeOrganizationResourceCollectionHealth)
+
+instance
+  Core.AWSPager
+    DescribeOrganizationResourceCollectionHealth
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeOrganizationResourceCollectionHealthResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeOrganizationResourceCollectionHealthResponse_cloudFormation
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeOrganizationResourceCollectionHealthResponse_account
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeOrganizationResourceCollectionHealthResponse_service
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeOrganizationResourceCollectionHealthResponse_tags
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeOrganizationResourceCollectionHealth_nextToken
+          Lens..~ rs
+          Lens.^? describeOrganizationResourceCollectionHealthResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeOrganizationResourceCollectionHealth
+  where
+  type
+    AWSResponse
+      DescribeOrganizationResourceCollectionHealth =
+      DescribeOrganizationResourceCollectionHealthResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeOrganizationResourceCollectionHealthResponse'
+            Prelude.<$> (x Data..?> "Account" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "CloudFormation" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Service" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeOrganizationResourceCollectionHealth
+  where
+  hashWithSalt
+    _salt
+    DescribeOrganizationResourceCollectionHealth' {..} =
+      _salt
+        `Prelude.hashWithSalt` accountIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` organizationalUnitIds
+        `Prelude.hashWithSalt` organizationResourceCollectionType
+
+instance
+  Prelude.NFData
+    DescribeOrganizationResourceCollectionHealth
+  where
+  rnf DescribeOrganizationResourceCollectionHealth' {..} =
+    Prelude.rnf accountIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf organizationalUnitIds
+      `Prelude.seq` Prelude.rnf organizationResourceCollectionType
+
+instance
+  Data.ToHeaders
+    DescribeOrganizationResourceCollectionHealth
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeOrganizationResourceCollectionHealth
+  where
+  toJSON
+    DescribeOrganizationResourceCollectionHealth' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("AccountIds" Data..=) Prelude.<$> accountIds,
+              ("MaxResults" Data..=) Prelude.<$> maxResults,
+              ("NextToken" Data..=) Prelude.<$> nextToken,
+              ("OrganizationalUnitIds" Data..=)
+                Prelude.<$> organizationalUnitIds,
+              Prelude.Just
+                ( "OrganizationResourceCollectionType"
+                    Data..= organizationResourceCollectionType
+                )
+            ]
+        )
+
+instance
+  Data.ToPath
+    DescribeOrganizationResourceCollectionHealth
+  where
+  toPath =
+    Prelude.const
+      "/organization/health/resource-collection"
+
+instance
+  Data.ToQuery
+    DescribeOrganizationResourceCollectionHealth
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeOrganizationResourceCollectionHealthResponse' smart constructor.
+data DescribeOrganizationResourceCollectionHealthResponse = DescribeOrganizationResourceCollectionHealthResponse'
+  { -- | The name of the organization\'s account.
+    account :: Prelude.Maybe [AccountHealth],
+    -- | The returned @CloudFormationHealthOverview@ object that contains an
+    -- @InsightHealthOverview@ object with the requested system health
+    -- information.
+    cloudFormation :: Prelude.Maybe [CloudFormationHealth],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @ServiceHealth@ objects that describes the health of the
+    -- Amazon Web Services services associated with the resources in the
+    -- collection.
+    service :: Prelude.Maybe [ServiceHealth],
+    -- | Tags help you identify and organize your Amazon Web Services resources.
+    -- Many Amazon Web Services services support tagging, so you can assign the
+    -- same tag to resources from different services to indicate that the
+    -- resources are related. For example, you can assign the same tag to an
+    -- Amazon DynamoDB table resource that you assign to an Lambda function.
+    -- For more information about using tags, see the
+    -- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+    -- whitepaper.
+    --
+    -- Each Amazon Web Services tag has two parts.
+    --
+    -- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+    --     @Secret@). Tag /keys/ are case-sensitive.
+    --
+    -- -   An optional field known as a tag /value/ (for example,
+    --     @111122223333@, @Production@, or a team name). Omitting the tag
+    --     /value/ is the same as using an empty string. Like tag /keys/, tag
+    --     /values/ are case-sensitive.
+    --
+    -- Together these are known as /key/-/value/ pairs.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    tags :: Prelude.Maybe [TagHealth],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOrganizationResourceCollectionHealthResponse' 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:
+--
+-- 'account', 'describeOrganizationResourceCollectionHealthResponse_account' - The name of the organization\'s account.
+--
+-- 'cloudFormation', 'describeOrganizationResourceCollectionHealthResponse_cloudFormation' - The returned @CloudFormationHealthOverview@ object that contains an
+-- @InsightHealthOverview@ object with the requested system health
+-- information.
+--
+-- 'nextToken', 'describeOrganizationResourceCollectionHealthResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'service', 'describeOrganizationResourceCollectionHealthResponse_service' - An array of @ServiceHealth@ objects that describes the health of the
+-- Amazon Web Services services associated with the resources in the
+-- collection.
+--
+-- 'tags', 'describeOrganizationResourceCollectionHealthResponse_tags' - Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'httpStatus', 'describeOrganizationResourceCollectionHealthResponse_httpStatus' - The response's http status code.
+newDescribeOrganizationResourceCollectionHealthResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeOrganizationResourceCollectionHealthResponse
+newDescribeOrganizationResourceCollectionHealthResponse
+  pHttpStatus_ =
+    DescribeOrganizationResourceCollectionHealthResponse'
+      { account =
+          Prelude.Nothing,
+        cloudFormation =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        service =
+          Prelude.Nothing,
+        tags =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The name of the organization\'s account.
+describeOrganizationResourceCollectionHealthResponse_account :: Lens.Lens' DescribeOrganizationResourceCollectionHealthResponse (Prelude.Maybe [AccountHealth])
+describeOrganizationResourceCollectionHealthResponse_account = Lens.lens (\DescribeOrganizationResourceCollectionHealthResponse' {account} -> account) (\s@DescribeOrganizationResourceCollectionHealthResponse' {} a -> s {account = a} :: DescribeOrganizationResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The returned @CloudFormationHealthOverview@ object that contains an
+-- @InsightHealthOverview@ object with the requested system health
+-- information.
+describeOrganizationResourceCollectionHealthResponse_cloudFormation :: Lens.Lens' DescribeOrganizationResourceCollectionHealthResponse (Prelude.Maybe [CloudFormationHealth])
+describeOrganizationResourceCollectionHealthResponse_cloudFormation = Lens.lens (\DescribeOrganizationResourceCollectionHealthResponse' {cloudFormation} -> cloudFormation) (\s@DescribeOrganizationResourceCollectionHealthResponse' {} a -> s {cloudFormation = a} :: DescribeOrganizationResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeOrganizationResourceCollectionHealthResponse_nextToken :: Lens.Lens' DescribeOrganizationResourceCollectionHealthResponse (Prelude.Maybe Prelude.Text)
+describeOrganizationResourceCollectionHealthResponse_nextToken = Lens.lens (\DescribeOrganizationResourceCollectionHealthResponse' {nextToken} -> nextToken) (\s@DescribeOrganizationResourceCollectionHealthResponse' {} a -> s {nextToken = a} :: DescribeOrganizationResourceCollectionHealthResponse)
+
+-- | An array of @ServiceHealth@ objects that describes the health of the
+-- Amazon Web Services services associated with the resources in the
+-- collection.
+describeOrganizationResourceCollectionHealthResponse_service :: Lens.Lens' DescribeOrganizationResourceCollectionHealthResponse (Prelude.Maybe [ServiceHealth])
+describeOrganizationResourceCollectionHealthResponse_service = Lens.lens (\DescribeOrganizationResourceCollectionHealthResponse' {service} -> service) (\s@DescribeOrganizationResourceCollectionHealthResponse' {} a -> s {service = a} :: DescribeOrganizationResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+describeOrganizationResourceCollectionHealthResponse_tags :: Lens.Lens' DescribeOrganizationResourceCollectionHealthResponse (Prelude.Maybe [TagHealth])
+describeOrganizationResourceCollectionHealthResponse_tags = Lens.lens (\DescribeOrganizationResourceCollectionHealthResponse' {tags} -> tags) (\s@DescribeOrganizationResourceCollectionHealthResponse' {} a -> s {tags = a} :: DescribeOrganizationResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeOrganizationResourceCollectionHealthResponse_httpStatus :: Lens.Lens' DescribeOrganizationResourceCollectionHealthResponse Prelude.Int
+describeOrganizationResourceCollectionHealthResponse_httpStatus = Lens.lens (\DescribeOrganizationResourceCollectionHealthResponse' {httpStatus} -> httpStatus) (\s@DescribeOrganizationResourceCollectionHealthResponse' {} a -> s {httpStatus = a} :: DescribeOrganizationResourceCollectionHealthResponse)
+
+instance
+  Prelude.NFData
+    DescribeOrganizationResourceCollectionHealthResponse
+  where
+  rnf
+    DescribeOrganizationResourceCollectionHealthResponse' {..} =
+      Prelude.rnf account
+        `Prelude.seq` Prelude.rnf cloudFormation
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf service
+        `Prelude.seq` Prelude.rnf tags
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeResourceCollectionHealth.hs b/gen/Amazonka/DevOpsGuru/DescribeResourceCollectionHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeResourceCollectionHealth.hs
@@ -0,0 +1,424 @@
+{-# 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.DevOpsGuru.DescribeResourceCollectionHealth
+-- 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 number of open proactive insights, open reactive insights,
+-- and the Mean Time to Recover (MTTR) for all closed insights in resource
+-- collections in your account. You specify the type of Amazon Web Services
+-- resources collection. The two types of Amazon Web Services resource
+-- collections supported are Amazon Web Services CloudFormation stacks and
+-- Amazon Web Services resources that contain the same Amazon Web Services
+-- tag. DevOps Guru can be configured to analyze the Amazon Web Services
+-- resources that are defined in the stacks or that are tagged using the
+-- same tag /key/. You can specify up to 500 Amazon Web Services
+-- CloudFormation stacks.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.DescribeResourceCollectionHealth
+  ( -- * Creating a Request
+    DescribeResourceCollectionHealth (..),
+    newDescribeResourceCollectionHealth,
+
+    -- * Request Lenses
+    describeResourceCollectionHealth_nextToken,
+    describeResourceCollectionHealth_resourceCollectionType,
+
+    -- * Destructuring the Response
+    DescribeResourceCollectionHealthResponse (..),
+    newDescribeResourceCollectionHealthResponse,
+
+    -- * Response Lenses
+    describeResourceCollectionHealthResponse_cloudFormation,
+    describeResourceCollectionHealthResponse_nextToken,
+    describeResourceCollectionHealthResponse_service,
+    describeResourceCollectionHealthResponse_tags,
+    describeResourceCollectionHealthResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeResourceCollectionHealth' smart constructor.
+data DescribeResourceCollectionHealth = DescribeResourceCollectionHealth'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An Amazon Web Services resource collection type. This type specifies how
+    -- analyzed Amazon Web Services resources are defined. The two types of
+    -- Amazon Web Services resource collections supported are Amazon Web
+    -- Services CloudFormation stacks and Amazon Web Services resources that
+    -- contain the same Amazon Web Services tag. DevOps Guru can be configured
+    -- to analyze the Amazon Web Services resources that are defined in the
+    -- stacks or that are tagged using the same tag /key/. You can specify up
+    -- to 500 Amazon Web Services CloudFormation stacks.
+    resourceCollectionType :: ResourceCollectionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResourceCollectionHealth' 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', 'describeResourceCollectionHealth_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'resourceCollectionType', 'describeResourceCollectionHealth_resourceCollectionType' - An Amazon Web Services resource collection type. This type specifies how
+-- analyzed Amazon Web Services resources are defined. The two types of
+-- Amazon Web Services resource collections supported are Amazon Web
+-- Services CloudFormation stacks and Amazon Web Services resources that
+-- contain the same Amazon Web Services tag. DevOps Guru can be configured
+-- to analyze the Amazon Web Services resources that are defined in the
+-- stacks or that are tagged using the same tag /key/. You can specify up
+-- to 500 Amazon Web Services CloudFormation stacks.
+newDescribeResourceCollectionHealth ::
+  -- | 'resourceCollectionType'
+  ResourceCollectionType ->
+  DescribeResourceCollectionHealth
+newDescribeResourceCollectionHealth
+  pResourceCollectionType_ =
+    DescribeResourceCollectionHealth'
+      { nextToken =
+          Prelude.Nothing,
+        resourceCollectionType =
+          pResourceCollectionType_
+      }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeResourceCollectionHealth_nextToken :: Lens.Lens' DescribeResourceCollectionHealth (Prelude.Maybe Prelude.Text)
+describeResourceCollectionHealth_nextToken = Lens.lens (\DescribeResourceCollectionHealth' {nextToken} -> nextToken) (\s@DescribeResourceCollectionHealth' {} a -> s {nextToken = a} :: DescribeResourceCollectionHealth)
+
+-- | An Amazon Web Services resource collection type. This type specifies how
+-- analyzed Amazon Web Services resources are defined. The two types of
+-- Amazon Web Services resource collections supported are Amazon Web
+-- Services CloudFormation stacks and Amazon Web Services resources that
+-- contain the same Amazon Web Services tag. DevOps Guru can be configured
+-- to analyze the Amazon Web Services resources that are defined in the
+-- stacks or that are tagged using the same tag /key/. You can specify up
+-- to 500 Amazon Web Services CloudFormation stacks.
+describeResourceCollectionHealth_resourceCollectionType :: Lens.Lens' DescribeResourceCollectionHealth ResourceCollectionType
+describeResourceCollectionHealth_resourceCollectionType = Lens.lens (\DescribeResourceCollectionHealth' {resourceCollectionType} -> resourceCollectionType) (\s@DescribeResourceCollectionHealth' {} a -> s {resourceCollectionType = a} :: DescribeResourceCollectionHealth)
+
+instance
+  Core.AWSPager
+    DescribeResourceCollectionHealth
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeResourceCollectionHealthResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeResourceCollectionHealthResponse_cloudFormation
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeResourceCollectionHealthResponse_service
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeResourceCollectionHealthResponse_tags
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeResourceCollectionHealth_nextToken
+          Lens..~ rs
+          Lens.^? describeResourceCollectionHealthResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeResourceCollectionHealth
+  where
+  type
+    AWSResponse DescribeResourceCollectionHealth =
+      DescribeResourceCollectionHealthResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeResourceCollectionHealthResponse'
+            Prelude.<$> (x Data..?> "CloudFormation" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Service" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeResourceCollectionHealth
+  where
+  hashWithSalt
+    _salt
+    DescribeResourceCollectionHealth' {..} =
+      _salt
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` resourceCollectionType
+
+instance
+  Prelude.NFData
+    DescribeResourceCollectionHealth
+  where
+  rnf DescribeResourceCollectionHealth' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceCollectionType
+
+instance
+  Data.ToHeaders
+    DescribeResourceCollectionHealth
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeResourceCollectionHealth where
+  toPath DescribeResourceCollectionHealth' {..} =
+    Prelude.mconcat
+      [ "/accounts/health/resource-collection/",
+        Data.toBS resourceCollectionType
+      ]
+
+instance
+  Data.ToQuery
+    DescribeResourceCollectionHealth
+  where
+  toQuery DescribeResourceCollectionHealth' {..} =
+    Prelude.mconcat ["NextToken" Data.=: nextToken]
+
+-- | /See:/ 'newDescribeResourceCollectionHealthResponse' smart constructor.
+data DescribeResourceCollectionHealthResponse = DescribeResourceCollectionHealthResponse'
+  { -- | The returned @CloudFormationHealthOverview@ object that contains an
+    -- @InsightHealthOverview@ object with the requested system health
+    -- information.
+    cloudFormation :: Prelude.Maybe [CloudFormationHealth],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @ServiceHealth@ objects that describes the health of the
+    -- Amazon Web Services services associated with the resources in the
+    -- collection.
+    service :: Prelude.Maybe [ServiceHealth],
+    -- | The Amazon Web Services tags that are used by resources in the resource
+    -- collection.
+    --
+    -- Tags help you identify and organize your Amazon Web Services resources.
+    -- Many Amazon Web Services services support tagging, so you can assign the
+    -- same tag to resources from different services to indicate that the
+    -- resources are related. For example, you can assign the same tag to an
+    -- Amazon DynamoDB table resource that you assign to an Lambda function.
+    -- For more information about using tags, see the
+    -- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+    -- whitepaper.
+    --
+    -- Each Amazon Web Services tag has two parts.
+    --
+    -- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+    --     @Secret@). Tag /keys/ are case-sensitive.
+    --
+    -- -   An optional field known as a tag /value/ (for example,
+    --     @111122223333@, @Production@, or a team name). Omitting the tag
+    --     /value/ is the same as using an empty string. Like tag /keys/, tag
+    --     /values/ are case-sensitive.
+    --
+    -- Together these are known as /key/-/value/ pairs.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    tags :: Prelude.Maybe [TagHealth],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResourceCollectionHealthResponse' 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:
+--
+-- 'cloudFormation', 'describeResourceCollectionHealthResponse_cloudFormation' - The returned @CloudFormationHealthOverview@ object that contains an
+-- @InsightHealthOverview@ object with the requested system health
+-- information.
+--
+-- 'nextToken', 'describeResourceCollectionHealthResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'service', 'describeResourceCollectionHealthResponse_service' - An array of @ServiceHealth@ objects that describes the health of the
+-- Amazon Web Services services associated with the resources in the
+-- collection.
+--
+-- 'tags', 'describeResourceCollectionHealthResponse_tags' - The Amazon Web Services tags that are used by resources in the resource
+-- collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'httpStatus', 'describeResourceCollectionHealthResponse_httpStatus' - The response's http status code.
+newDescribeResourceCollectionHealthResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeResourceCollectionHealthResponse
+newDescribeResourceCollectionHealthResponse
+  pHttpStatus_ =
+    DescribeResourceCollectionHealthResponse'
+      { cloudFormation =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        service = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The returned @CloudFormationHealthOverview@ object that contains an
+-- @InsightHealthOverview@ object with the requested system health
+-- information.
+describeResourceCollectionHealthResponse_cloudFormation :: Lens.Lens' DescribeResourceCollectionHealthResponse (Prelude.Maybe [CloudFormationHealth])
+describeResourceCollectionHealthResponse_cloudFormation = Lens.lens (\DescribeResourceCollectionHealthResponse' {cloudFormation} -> cloudFormation) (\s@DescribeResourceCollectionHealthResponse' {} a -> s {cloudFormation = a} :: DescribeResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeResourceCollectionHealthResponse_nextToken :: Lens.Lens' DescribeResourceCollectionHealthResponse (Prelude.Maybe Prelude.Text)
+describeResourceCollectionHealthResponse_nextToken = Lens.lens (\DescribeResourceCollectionHealthResponse' {nextToken} -> nextToken) (\s@DescribeResourceCollectionHealthResponse' {} a -> s {nextToken = a} :: DescribeResourceCollectionHealthResponse)
+
+-- | An array of @ServiceHealth@ objects that describes the health of the
+-- Amazon Web Services services associated with the resources in the
+-- collection.
+describeResourceCollectionHealthResponse_service :: Lens.Lens' DescribeResourceCollectionHealthResponse (Prelude.Maybe [ServiceHealth])
+describeResourceCollectionHealthResponse_service = Lens.lens (\DescribeResourceCollectionHealthResponse' {service} -> service) (\s@DescribeResourceCollectionHealthResponse' {} a -> s {service = a} :: DescribeResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services tags that are used by resources in the resource
+-- collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+describeResourceCollectionHealthResponse_tags :: Lens.Lens' DescribeResourceCollectionHealthResponse (Prelude.Maybe [TagHealth])
+describeResourceCollectionHealthResponse_tags = Lens.lens (\DescribeResourceCollectionHealthResponse' {tags} -> tags) (\s@DescribeResourceCollectionHealthResponse' {} a -> s {tags = a} :: DescribeResourceCollectionHealthResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeResourceCollectionHealthResponse_httpStatus :: Lens.Lens' DescribeResourceCollectionHealthResponse Prelude.Int
+describeResourceCollectionHealthResponse_httpStatus = Lens.lens (\DescribeResourceCollectionHealthResponse' {httpStatus} -> httpStatus) (\s@DescribeResourceCollectionHealthResponse' {} a -> s {httpStatus = a} :: DescribeResourceCollectionHealthResponse)
+
+instance
+  Prelude.NFData
+    DescribeResourceCollectionHealthResponse
+  where
+  rnf DescribeResourceCollectionHealthResponse' {..} =
+    Prelude.rnf cloudFormation
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf service
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/DescribeServiceIntegration.hs b/gen/Amazonka/DevOpsGuru/DescribeServiceIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/DescribeServiceIntegration.hs
@@ -0,0 +1,147 @@
+{-# 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.DevOpsGuru.DescribeServiceIntegration
+-- 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 integration status of services that are integrated with
+-- DevOps Guru. The one service that can be integrated with DevOps Guru is
+-- Amazon Web Services Systems Manager, which can be used to create an
+-- OpsItem for each generated insight.
+module Amazonka.DevOpsGuru.DescribeServiceIntegration
+  ( -- * Creating a Request
+    DescribeServiceIntegration (..),
+    newDescribeServiceIntegration,
+
+    -- * Destructuring the Response
+    DescribeServiceIntegrationResponse (..),
+    newDescribeServiceIntegrationResponse,
+
+    -- * Response Lenses
+    describeServiceIntegrationResponse_serviceIntegration,
+    describeServiceIntegrationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeServiceIntegration' smart constructor.
+data DescribeServiceIntegration = DescribeServiceIntegration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeServiceIntegration' 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.
+newDescribeServiceIntegration ::
+  DescribeServiceIntegration
+newDescribeServiceIntegration =
+  DescribeServiceIntegration'
+
+instance Core.AWSRequest DescribeServiceIntegration where
+  type
+    AWSResponse DescribeServiceIntegration =
+      DescribeServiceIntegrationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeServiceIntegrationResponse'
+            Prelude.<$> (x Data..?> "ServiceIntegration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeServiceIntegration where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DescribeServiceIntegration where
+  rnf _ = ()
+
+instance Data.ToHeaders DescribeServiceIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeServiceIntegration where
+  toPath = Prelude.const "/service-integrations"
+
+instance Data.ToQuery DescribeServiceIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeServiceIntegrationResponse' smart constructor.
+data DescribeServiceIntegrationResponse = DescribeServiceIntegrationResponse'
+  { serviceIntegration :: Prelude.Maybe ServiceIntegrationConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeServiceIntegrationResponse' 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:
+--
+-- 'serviceIntegration', 'describeServiceIntegrationResponse_serviceIntegration' - Undocumented member.
+--
+-- 'httpStatus', 'describeServiceIntegrationResponse_httpStatus' - The response's http status code.
+newDescribeServiceIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeServiceIntegrationResponse
+newDescribeServiceIntegrationResponse pHttpStatus_ =
+  DescribeServiceIntegrationResponse'
+    { serviceIntegration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeServiceIntegrationResponse_serviceIntegration :: Lens.Lens' DescribeServiceIntegrationResponse (Prelude.Maybe ServiceIntegrationConfig)
+describeServiceIntegrationResponse_serviceIntegration = Lens.lens (\DescribeServiceIntegrationResponse' {serviceIntegration} -> serviceIntegration) (\s@DescribeServiceIntegrationResponse' {} a -> s {serviceIntegration = a} :: DescribeServiceIntegrationResponse)
+
+-- | The response's http status code.
+describeServiceIntegrationResponse_httpStatus :: Lens.Lens' DescribeServiceIntegrationResponse Prelude.Int
+describeServiceIntegrationResponse_httpStatus = Lens.lens (\DescribeServiceIntegrationResponse' {httpStatus} -> httpStatus) (\s@DescribeServiceIntegrationResponse' {} a -> s {httpStatus = a} :: DescribeServiceIntegrationResponse)
+
+instance
+  Prelude.NFData
+    DescribeServiceIntegrationResponse
+  where
+  rnf DescribeServiceIntegrationResponse' {..} =
+    Prelude.rnf serviceIntegration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/GetCostEstimation.hs b/gen/Amazonka/DevOpsGuru/GetCostEstimation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/GetCostEstimation.hs
@@ -0,0 +1,270 @@
+{-# 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.DevOpsGuru.GetCostEstimation
+-- 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 an estimate of the monthly cost for DevOps Guru to analyze your
+-- Amazon Web Services resources. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/cost-estimate.html Estimate your Amazon DevOps Guru costs>
+-- and
+-- <http://aws.amazon.com/devops-guru/pricing/ Amazon DevOps Guru pricing>.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.GetCostEstimation
+  ( -- * Creating a Request
+    GetCostEstimation (..),
+    newGetCostEstimation,
+
+    -- * Request Lenses
+    getCostEstimation_nextToken,
+
+    -- * Destructuring the Response
+    GetCostEstimationResponse (..),
+    newGetCostEstimationResponse,
+
+    -- * Response Lenses
+    getCostEstimationResponse_costs,
+    getCostEstimationResponse_nextToken,
+    getCostEstimationResponse_resourceCollection,
+    getCostEstimationResponse_status,
+    getCostEstimationResponse_timeRange,
+    getCostEstimationResponse_totalCost,
+    getCostEstimationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCostEstimation' smart constructor.
+data GetCostEstimation = GetCostEstimation'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCostEstimation' 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', 'getCostEstimation_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newGetCostEstimation ::
+  GetCostEstimation
+newGetCostEstimation =
+  GetCostEstimation' {nextToken = Prelude.Nothing}
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+getCostEstimation_nextToken :: Lens.Lens' GetCostEstimation (Prelude.Maybe Prelude.Text)
+getCostEstimation_nextToken = Lens.lens (\GetCostEstimation' {nextToken} -> nextToken) (\s@GetCostEstimation' {} a -> s {nextToken = a} :: GetCostEstimation)
+
+instance Core.AWSPager GetCostEstimation where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getCostEstimationResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getCostEstimationResponse_costs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getCostEstimation_nextToken
+          Lens..~ rs
+          Lens.^? getCostEstimationResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetCostEstimation where
+  type
+    AWSResponse GetCostEstimation =
+      GetCostEstimationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCostEstimationResponse'
+            Prelude.<$> (x Data..?> "Costs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "ResourceCollection")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TimeRange")
+            Prelude.<*> (x Data..?> "TotalCost")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCostEstimation where
+  hashWithSalt _salt GetCostEstimation' {..} =
+    _salt `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetCostEstimation where
+  rnf GetCostEstimation' {..} = Prelude.rnf nextToken
+
+instance Data.ToHeaders GetCostEstimation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetCostEstimation where
+  toPath = Prelude.const "/cost-estimation"
+
+instance Data.ToQuery GetCostEstimation where
+  toQuery GetCostEstimation' {..} =
+    Prelude.mconcat ["NextToken" Data.=: nextToken]
+
+-- | /See:/ 'newGetCostEstimationResponse' smart constructor.
+data GetCostEstimationResponse = GetCostEstimationResponse'
+  { -- | An array of @ResourceCost@ objects that each contains details about the
+    -- monthly cost estimate to analyze one of your Amazon Web Services
+    -- resources.
+    costs :: Prelude.Maybe [ServiceResourceCost],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The collection of the Amazon Web Services resources used to create your
+    -- monthly DevOps Guru cost estimate.
+    resourceCollection :: Prelude.Maybe CostEstimationResourceCollectionFilter,
+    -- | The status of creating this cost estimate. If it\'s still in progress,
+    -- the status @ONGOING@ is returned. If it is finished, the status
+    -- @COMPLETED@ is returned.
+    status :: Prelude.Maybe CostEstimationStatus,
+    -- | The start and end time of the cost estimation.
+    timeRange :: Prelude.Maybe CostEstimationTimeRange,
+    -- | The estimated monthly cost to analyze the Amazon Web Services resources.
+    -- This value is the sum of the estimated costs to analyze each resource in
+    -- the @Costs@ object in this response.
+    totalCost :: Prelude.Maybe Prelude.Double,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCostEstimationResponse' 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:
+--
+-- 'costs', 'getCostEstimationResponse_costs' - An array of @ResourceCost@ objects that each contains details about the
+-- monthly cost estimate to analyze one of your Amazon Web Services
+-- resources.
+--
+-- 'nextToken', 'getCostEstimationResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'resourceCollection', 'getCostEstimationResponse_resourceCollection' - The collection of the Amazon Web Services resources used to create your
+-- monthly DevOps Guru cost estimate.
+--
+-- 'status', 'getCostEstimationResponse_status' - The status of creating this cost estimate. If it\'s still in progress,
+-- the status @ONGOING@ is returned. If it is finished, the status
+-- @COMPLETED@ is returned.
+--
+-- 'timeRange', 'getCostEstimationResponse_timeRange' - The start and end time of the cost estimation.
+--
+-- 'totalCost', 'getCostEstimationResponse_totalCost' - The estimated monthly cost to analyze the Amazon Web Services resources.
+-- This value is the sum of the estimated costs to analyze each resource in
+-- the @Costs@ object in this response.
+--
+-- 'httpStatus', 'getCostEstimationResponse_httpStatus' - The response's http status code.
+newGetCostEstimationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCostEstimationResponse
+newGetCostEstimationResponse pHttpStatus_ =
+  GetCostEstimationResponse'
+    { costs = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timeRange = Prelude.Nothing,
+      totalCost = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of @ResourceCost@ objects that each contains details about the
+-- monthly cost estimate to analyze one of your Amazon Web Services
+-- resources.
+getCostEstimationResponse_costs :: Lens.Lens' GetCostEstimationResponse (Prelude.Maybe [ServiceResourceCost])
+getCostEstimationResponse_costs = Lens.lens (\GetCostEstimationResponse' {costs} -> costs) (\s@GetCostEstimationResponse' {} a -> s {costs = a} :: GetCostEstimationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+getCostEstimationResponse_nextToken :: Lens.Lens' GetCostEstimationResponse (Prelude.Maybe Prelude.Text)
+getCostEstimationResponse_nextToken = Lens.lens (\GetCostEstimationResponse' {nextToken} -> nextToken) (\s@GetCostEstimationResponse' {} a -> s {nextToken = a} :: GetCostEstimationResponse)
+
+-- | The collection of the Amazon Web Services resources used to create your
+-- monthly DevOps Guru cost estimate.
+getCostEstimationResponse_resourceCollection :: Lens.Lens' GetCostEstimationResponse (Prelude.Maybe CostEstimationResourceCollectionFilter)
+getCostEstimationResponse_resourceCollection = Lens.lens (\GetCostEstimationResponse' {resourceCollection} -> resourceCollection) (\s@GetCostEstimationResponse' {} a -> s {resourceCollection = a} :: GetCostEstimationResponse)
+
+-- | The status of creating this cost estimate. If it\'s still in progress,
+-- the status @ONGOING@ is returned. If it is finished, the status
+-- @COMPLETED@ is returned.
+getCostEstimationResponse_status :: Lens.Lens' GetCostEstimationResponse (Prelude.Maybe CostEstimationStatus)
+getCostEstimationResponse_status = Lens.lens (\GetCostEstimationResponse' {status} -> status) (\s@GetCostEstimationResponse' {} a -> s {status = a} :: GetCostEstimationResponse)
+
+-- | The start and end time of the cost estimation.
+getCostEstimationResponse_timeRange :: Lens.Lens' GetCostEstimationResponse (Prelude.Maybe CostEstimationTimeRange)
+getCostEstimationResponse_timeRange = Lens.lens (\GetCostEstimationResponse' {timeRange} -> timeRange) (\s@GetCostEstimationResponse' {} a -> s {timeRange = a} :: GetCostEstimationResponse)
+
+-- | The estimated monthly cost to analyze the Amazon Web Services resources.
+-- This value is the sum of the estimated costs to analyze each resource in
+-- the @Costs@ object in this response.
+getCostEstimationResponse_totalCost :: Lens.Lens' GetCostEstimationResponse (Prelude.Maybe Prelude.Double)
+getCostEstimationResponse_totalCost = Lens.lens (\GetCostEstimationResponse' {totalCost} -> totalCost) (\s@GetCostEstimationResponse' {} a -> s {totalCost = a} :: GetCostEstimationResponse)
+
+-- | The response's http status code.
+getCostEstimationResponse_httpStatus :: Lens.Lens' GetCostEstimationResponse Prelude.Int
+getCostEstimationResponse_httpStatus = Lens.lens (\GetCostEstimationResponse' {httpStatus} -> httpStatus) (\s@GetCostEstimationResponse' {} a -> s {httpStatus = a} :: GetCostEstimationResponse)
+
+instance Prelude.NFData GetCostEstimationResponse where
+  rnf GetCostEstimationResponse' {..} =
+    Prelude.rnf costs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timeRange
+      `Prelude.seq` Prelude.rnf totalCost
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/GetResourceCollection.hs b/gen/Amazonka/DevOpsGuru/GetResourceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/GetResourceCollection.hs
@@ -0,0 +1,263 @@
+{-# 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.DevOpsGuru.GetResourceCollection
+-- 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 lists Amazon Web Services resources that are of the specified
+-- resource collection type. The two types of Amazon Web Services resource
+-- collections supported are Amazon Web Services CloudFormation stacks and
+-- Amazon Web Services resources that contain the same Amazon Web Services
+-- tag. DevOps Guru can be configured to analyze the Amazon Web Services
+-- resources that are defined in the stacks or that are tagged using the
+-- same tag /key/. You can specify up to 500 Amazon Web Services
+-- CloudFormation stacks.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.GetResourceCollection
+  ( -- * Creating a Request
+    GetResourceCollection (..),
+    newGetResourceCollection,
+
+    -- * Request Lenses
+    getResourceCollection_nextToken,
+    getResourceCollection_resourceCollectionType,
+
+    -- * Destructuring the Response
+    GetResourceCollectionResponse (..),
+    newGetResourceCollectionResponse,
+
+    -- * Response Lenses
+    getResourceCollectionResponse_nextToken,
+    getResourceCollectionResponse_resourceCollection,
+    getResourceCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetResourceCollection' smart constructor.
+data GetResourceCollection = GetResourceCollection'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The type of Amazon Web Services resource collections to return. The one
+    -- valid value is @CLOUD_FORMATION@ for Amazon Web Services CloudFormation
+    -- stacks.
+    resourceCollectionType :: ResourceCollectionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceCollection' 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', 'getResourceCollection_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'resourceCollectionType', 'getResourceCollection_resourceCollectionType' - The type of Amazon Web Services resource collections to return. The one
+-- valid value is @CLOUD_FORMATION@ for Amazon Web Services CloudFormation
+-- stacks.
+newGetResourceCollection ::
+  -- | 'resourceCollectionType'
+  ResourceCollectionType ->
+  GetResourceCollection
+newGetResourceCollection pResourceCollectionType_ =
+  GetResourceCollection'
+    { nextToken = Prelude.Nothing,
+      resourceCollectionType = pResourceCollectionType_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+getResourceCollection_nextToken :: Lens.Lens' GetResourceCollection (Prelude.Maybe Prelude.Text)
+getResourceCollection_nextToken = Lens.lens (\GetResourceCollection' {nextToken} -> nextToken) (\s@GetResourceCollection' {} a -> s {nextToken = a} :: GetResourceCollection)
+
+-- | The type of Amazon Web Services resource collections to return. The one
+-- valid value is @CLOUD_FORMATION@ for Amazon Web Services CloudFormation
+-- stacks.
+getResourceCollection_resourceCollectionType :: Lens.Lens' GetResourceCollection ResourceCollectionType
+getResourceCollection_resourceCollectionType = Lens.lens (\GetResourceCollection' {resourceCollectionType} -> resourceCollectionType) (\s@GetResourceCollection' {} a -> s {resourceCollectionType = a} :: GetResourceCollection)
+
+instance Core.AWSPager GetResourceCollection where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getResourceCollectionResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getResourceCollectionResponse_resourceCollection
+            Prelude.. Lens._Just
+            Prelude.. resourceCollectionFilter_cloudFormation
+            Prelude.. Lens._Just
+            Prelude.. cloudFormationCollectionFilter_stackNames
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getResourceCollectionResponse_resourceCollection
+            Prelude.. Lens._Just
+            Prelude.. resourceCollectionFilter_tags
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getResourceCollection_nextToken
+          Lens..~ rs
+          Lens.^? getResourceCollectionResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetResourceCollection where
+  type
+    AWSResponse GetResourceCollection =
+      GetResourceCollectionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetResourceCollectionResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "ResourceCollection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetResourceCollection where
+  hashWithSalt _salt GetResourceCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceCollectionType
+
+instance Prelude.NFData GetResourceCollection where
+  rnf GetResourceCollection' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceCollectionType
+
+instance Data.ToHeaders GetResourceCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetResourceCollection where
+  toPath GetResourceCollection' {..} =
+    Prelude.mconcat
+      [ "/resource-collections/",
+        Data.toBS resourceCollectionType
+      ]
+
+instance Data.ToQuery GetResourceCollection where
+  toQuery GetResourceCollection' {..} =
+    Prelude.mconcat ["NextToken" Data.=: nextToken]
+
+-- | /See:/ 'newGetResourceCollectionResponse' smart constructor.
+data GetResourceCollectionResponse = GetResourceCollectionResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The requested list of Amazon Web Services resource collections. The two
+    -- types of Amazon Web Services resource collections supported are Amazon
+    -- Web Services CloudFormation stacks and Amazon Web Services resources
+    -- that contain the same Amazon Web Services tag. DevOps Guru can be
+    -- configured to analyze the Amazon Web Services resources that are defined
+    -- in the stacks or that are tagged using the same tag /key/. You can
+    -- specify up to 500 Amazon Web Services CloudFormation stacks.
+    resourceCollection :: Prelude.Maybe ResourceCollectionFilter,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceCollectionResponse' 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', 'getResourceCollectionResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'resourceCollection', 'getResourceCollectionResponse_resourceCollection' - The requested list of Amazon Web Services resource collections. The two
+-- types of Amazon Web Services resource collections supported are Amazon
+-- Web Services CloudFormation stacks and Amazon Web Services resources
+-- that contain the same Amazon Web Services tag. DevOps Guru can be
+-- configured to analyze the Amazon Web Services resources that are defined
+-- in the stacks or that are tagged using the same tag /key/. You can
+-- specify up to 500 Amazon Web Services CloudFormation stacks.
+--
+-- 'httpStatus', 'getResourceCollectionResponse_httpStatus' - The response's http status code.
+newGetResourceCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourceCollectionResponse
+newGetResourceCollectionResponse pHttpStatus_ =
+  GetResourceCollectionResponse'
+    { nextToken =
+        Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+getResourceCollectionResponse_nextToken :: Lens.Lens' GetResourceCollectionResponse (Prelude.Maybe Prelude.Text)
+getResourceCollectionResponse_nextToken = Lens.lens (\GetResourceCollectionResponse' {nextToken} -> nextToken) (\s@GetResourceCollectionResponse' {} a -> s {nextToken = a} :: GetResourceCollectionResponse)
+
+-- | The requested list of Amazon Web Services resource collections. The two
+-- types of Amazon Web Services resource collections supported are Amazon
+-- Web Services CloudFormation stacks and Amazon Web Services resources
+-- that contain the same Amazon Web Services tag. DevOps Guru can be
+-- configured to analyze the Amazon Web Services resources that are defined
+-- in the stacks or that are tagged using the same tag /key/. You can
+-- specify up to 500 Amazon Web Services CloudFormation stacks.
+getResourceCollectionResponse_resourceCollection :: Lens.Lens' GetResourceCollectionResponse (Prelude.Maybe ResourceCollectionFilter)
+getResourceCollectionResponse_resourceCollection = Lens.lens (\GetResourceCollectionResponse' {resourceCollection} -> resourceCollection) (\s@GetResourceCollectionResponse' {} a -> s {resourceCollection = a} :: GetResourceCollectionResponse)
+
+-- | The response's http status code.
+getResourceCollectionResponse_httpStatus :: Lens.Lens' GetResourceCollectionResponse Prelude.Int
+getResourceCollectionResponse_httpStatus = Lens.lens (\GetResourceCollectionResponse' {httpStatus} -> httpStatus) (\s@GetResourceCollectionResponse' {} a -> s {httpStatus = a} :: GetResourceCollectionResponse)
+
+instance Prelude.NFData GetResourceCollectionResponse where
+  rnf GetResourceCollectionResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/Lens.hs b/gen/Amazonka/DevOpsGuru/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Lens.hs
@@ -0,0 +1,842 @@
+{-# 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.DevOpsGuru.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.DevOpsGuru.Lens
+  ( -- * Operations
+
+    -- ** AddNotificationChannel
+    addNotificationChannel_config,
+    addNotificationChannelResponse_httpStatus,
+    addNotificationChannelResponse_id,
+
+    -- ** DeleteInsight
+    deleteInsight_id,
+    deleteInsightResponse_httpStatus,
+
+    -- ** DescribeAccountHealth
+    describeAccountHealthResponse_analyzedResourceCount,
+    describeAccountHealthResponse_httpStatus,
+    describeAccountHealthResponse_openReactiveInsights,
+    describeAccountHealthResponse_openProactiveInsights,
+    describeAccountHealthResponse_metricsAnalyzed,
+    describeAccountHealthResponse_resourceHours,
+
+    -- ** DescribeAccountOverview
+    describeAccountOverview_toTime,
+    describeAccountOverview_fromTime,
+    describeAccountOverviewResponse_httpStatus,
+    describeAccountOverviewResponse_reactiveInsights,
+    describeAccountOverviewResponse_proactiveInsights,
+    describeAccountOverviewResponse_meanTimeToRecoverInMilliseconds,
+
+    -- ** DescribeAnomaly
+    describeAnomaly_accountId,
+    describeAnomaly_id,
+    describeAnomalyResponse_proactiveAnomaly,
+    describeAnomalyResponse_reactiveAnomaly,
+    describeAnomalyResponse_httpStatus,
+
+    -- ** DescribeEventSourcesConfig
+    describeEventSourcesConfigResponse_eventSources,
+    describeEventSourcesConfigResponse_httpStatus,
+
+    -- ** DescribeFeedback
+    describeFeedback_insightId,
+    describeFeedbackResponse_insightFeedback,
+    describeFeedbackResponse_httpStatus,
+
+    -- ** DescribeInsight
+    describeInsight_accountId,
+    describeInsight_id,
+    describeInsightResponse_proactiveInsight,
+    describeInsightResponse_reactiveInsight,
+    describeInsightResponse_httpStatus,
+
+    -- ** DescribeOrganizationHealth
+    describeOrganizationHealth_accountIds,
+    describeOrganizationHealth_organizationalUnitIds,
+    describeOrganizationHealthResponse_httpStatus,
+    describeOrganizationHealthResponse_openReactiveInsights,
+    describeOrganizationHealthResponse_openProactiveInsights,
+    describeOrganizationHealthResponse_metricsAnalyzed,
+    describeOrganizationHealthResponse_resourceHours,
+
+    -- ** DescribeOrganizationOverview
+    describeOrganizationOverview_accountIds,
+    describeOrganizationOverview_organizationalUnitIds,
+    describeOrganizationOverview_toTime,
+    describeOrganizationOverview_fromTime,
+    describeOrganizationOverviewResponse_httpStatus,
+    describeOrganizationOverviewResponse_reactiveInsights,
+    describeOrganizationOverviewResponse_proactiveInsights,
+
+    -- ** DescribeOrganizationResourceCollectionHealth
+    describeOrganizationResourceCollectionHealth_accountIds,
+    describeOrganizationResourceCollectionHealth_maxResults,
+    describeOrganizationResourceCollectionHealth_nextToken,
+    describeOrganizationResourceCollectionHealth_organizationalUnitIds,
+    describeOrganizationResourceCollectionHealth_organizationResourceCollectionType,
+    describeOrganizationResourceCollectionHealthResponse_account,
+    describeOrganizationResourceCollectionHealthResponse_cloudFormation,
+    describeOrganizationResourceCollectionHealthResponse_nextToken,
+    describeOrganizationResourceCollectionHealthResponse_service,
+    describeOrganizationResourceCollectionHealthResponse_tags,
+    describeOrganizationResourceCollectionHealthResponse_httpStatus,
+
+    -- ** DescribeResourceCollectionHealth
+    describeResourceCollectionHealth_nextToken,
+    describeResourceCollectionHealth_resourceCollectionType,
+    describeResourceCollectionHealthResponse_cloudFormation,
+    describeResourceCollectionHealthResponse_nextToken,
+    describeResourceCollectionHealthResponse_service,
+    describeResourceCollectionHealthResponse_tags,
+    describeResourceCollectionHealthResponse_httpStatus,
+
+    -- ** DescribeServiceIntegration
+    describeServiceIntegrationResponse_serviceIntegration,
+    describeServiceIntegrationResponse_httpStatus,
+
+    -- ** GetCostEstimation
+    getCostEstimation_nextToken,
+    getCostEstimationResponse_costs,
+    getCostEstimationResponse_nextToken,
+    getCostEstimationResponse_resourceCollection,
+    getCostEstimationResponse_status,
+    getCostEstimationResponse_timeRange,
+    getCostEstimationResponse_totalCost,
+    getCostEstimationResponse_httpStatus,
+
+    -- ** GetResourceCollection
+    getResourceCollection_nextToken,
+    getResourceCollection_resourceCollectionType,
+    getResourceCollectionResponse_nextToken,
+    getResourceCollectionResponse_resourceCollection,
+    getResourceCollectionResponse_httpStatus,
+
+    -- ** ListAnomaliesForInsight
+    listAnomaliesForInsight_accountId,
+    listAnomaliesForInsight_maxResults,
+    listAnomaliesForInsight_nextToken,
+    listAnomaliesForInsight_startTimeRange,
+    listAnomaliesForInsight_insightId,
+    listAnomaliesForInsightResponse_nextToken,
+    listAnomaliesForInsightResponse_proactiveAnomalies,
+    listAnomaliesForInsightResponse_reactiveAnomalies,
+    listAnomaliesForInsightResponse_httpStatus,
+
+    -- ** ListAnomalousLogGroups
+    listAnomalousLogGroups_maxResults,
+    listAnomalousLogGroups_nextToken,
+    listAnomalousLogGroups_insightId,
+    listAnomalousLogGroupsResponse_nextToken,
+    listAnomalousLogGroupsResponse_httpStatus,
+    listAnomalousLogGroupsResponse_insightId,
+    listAnomalousLogGroupsResponse_anomalousLogGroups,
+
+    -- ** ListEvents
+    listEvents_accountId,
+    listEvents_maxResults,
+    listEvents_nextToken,
+    listEvents_filters,
+    listEventsResponse_nextToken,
+    listEventsResponse_httpStatus,
+    listEventsResponse_events,
+
+    -- ** ListInsights
+    listInsights_maxResults,
+    listInsights_nextToken,
+    listInsights_statusFilter,
+    listInsightsResponse_nextToken,
+    listInsightsResponse_proactiveInsights,
+    listInsightsResponse_reactiveInsights,
+    listInsightsResponse_httpStatus,
+
+    -- ** ListMonitoredResources
+    listMonitoredResources_filters,
+    listMonitoredResources_maxResults,
+    listMonitoredResources_nextToken,
+    listMonitoredResourcesResponse_nextToken,
+    listMonitoredResourcesResponse_httpStatus,
+    listMonitoredResourcesResponse_monitoredResourceIdentifiers,
+
+    -- ** ListNotificationChannels
+    listNotificationChannels_nextToken,
+    listNotificationChannelsResponse_channels,
+    listNotificationChannelsResponse_nextToken,
+    listNotificationChannelsResponse_httpStatus,
+
+    -- ** ListOrganizationInsights
+    listOrganizationInsights_accountIds,
+    listOrganizationInsights_maxResults,
+    listOrganizationInsights_nextToken,
+    listOrganizationInsights_organizationalUnitIds,
+    listOrganizationInsights_statusFilter,
+    listOrganizationInsightsResponse_nextToken,
+    listOrganizationInsightsResponse_proactiveInsights,
+    listOrganizationInsightsResponse_reactiveInsights,
+    listOrganizationInsightsResponse_httpStatus,
+
+    -- ** ListRecommendations
+    listRecommendations_accountId,
+    listRecommendations_locale,
+    listRecommendations_nextToken,
+    listRecommendations_insightId,
+    listRecommendationsResponse_nextToken,
+    listRecommendationsResponse_recommendations,
+    listRecommendationsResponse_httpStatus,
+
+    -- ** PutFeedback
+    putFeedback_insightFeedback,
+    putFeedbackResponse_httpStatus,
+
+    -- ** RemoveNotificationChannel
+    removeNotificationChannel_id,
+    removeNotificationChannelResponse_httpStatus,
+
+    -- ** SearchInsights
+    searchInsights_filters,
+    searchInsights_maxResults,
+    searchInsights_nextToken,
+    searchInsights_startTimeRange,
+    searchInsights_type,
+    searchInsightsResponse_nextToken,
+    searchInsightsResponse_proactiveInsights,
+    searchInsightsResponse_reactiveInsights,
+    searchInsightsResponse_httpStatus,
+
+    -- ** SearchOrganizationInsights
+    searchOrganizationInsights_filters,
+    searchOrganizationInsights_maxResults,
+    searchOrganizationInsights_nextToken,
+    searchOrganizationInsights_accountIds,
+    searchOrganizationInsights_startTimeRange,
+    searchOrganizationInsights_type,
+    searchOrganizationInsightsResponse_nextToken,
+    searchOrganizationInsightsResponse_proactiveInsights,
+    searchOrganizationInsightsResponse_reactiveInsights,
+    searchOrganizationInsightsResponse_httpStatus,
+
+    -- ** StartCostEstimation
+    startCostEstimation_clientToken,
+    startCostEstimation_resourceCollection,
+    startCostEstimationResponse_httpStatus,
+
+    -- ** UpdateEventSourcesConfig
+    updateEventSourcesConfig_eventSources,
+    updateEventSourcesConfigResponse_httpStatus,
+
+    -- ** UpdateResourceCollection
+    updateResourceCollection_action,
+    updateResourceCollection_resourceCollection,
+    updateResourceCollectionResponse_httpStatus,
+
+    -- ** UpdateServiceIntegration
+    updateServiceIntegration_serviceIntegration,
+    updateServiceIntegrationResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccountHealth
+    accountHealth_accountId,
+    accountHealth_insight,
+
+    -- ** AccountInsightHealth
+    accountInsightHealth_openProactiveInsights,
+    accountInsightHealth_openReactiveInsights,
+
+    -- ** AmazonCodeGuruProfilerIntegration
+    amazonCodeGuruProfilerIntegration_status,
+
+    -- ** AnomalousLogGroup
+    anomalousLogGroup_impactEndTime,
+    anomalousLogGroup_impactStartTime,
+    anomalousLogGroup_logAnomalyShowcases,
+    anomalousLogGroup_logGroupName,
+    anomalousLogGroup_numberOfLogLinesScanned,
+
+    -- ** AnomalyReportedTimeRange
+    anomalyReportedTimeRange_closeTime,
+    anomalyReportedTimeRange_openTime,
+
+    -- ** AnomalyResource
+    anomalyResource_name,
+    anomalyResource_type,
+
+    -- ** AnomalySourceDetails
+    anomalySourceDetails_cloudWatchMetrics,
+    anomalySourceDetails_performanceInsightsMetrics,
+
+    -- ** AnomalySourceMetadata
+    anomalySourceMetadata_source,
+    anomalySourceMetadata_sourceResourceName,
+    anomalySourceMetadata_sourceResourceType,
+
+    -- ** AnomalyTimeRange
+    anomalyTimeRange_endTime,
+    anomalyTimeRange_startTime,
+
+    -- ** CloudFormationCollection
+    cloudFormationCollection_stackNames,
+
+    -- ** CloudFormationCollectionFilter
+    cloudFormationCollectionFilter_stackNames,
+
+    -- ** CloudFormationCostEstimationResourceCollectionFilter
+    cloudFormationCostEstimationResourceCollectionFilter_stackNames,
+
+    -- ** CloudFormationHealth
+    cloudFormationHealth_analyzedResourceCount,
+    cloudFormationHealth_insight,
+    cloudFormationHealth_stackName,
+
+    -- ** CloudWatchMetricsDataSummary
+    cloudWatchMetricsDataSummary_statusCode,
+    cloudWatchMetricsDataSummary_timestampMetricValuePairList,
+
+    -- ** CloudWatchMetricsDetail
+    cloudWatchMetricsDetail_dimensions,
+    cloudWatchMetricsDetail_metricDataSummary,
+    cloudWatchMetricsDetail_metricName,
+    cloudWatchMetricsDetail_namespace,
+    cloudWatchMetricsDetail_period,
+    cloudWatchMetricsDetail_stat,
+    cloudWatchMetricsDetail_unit,
+
+    -- ** CloudWatchMetricsDimension
+    cloudWatchMetricsDimension_name,
+    cloudWatchMetricsDimension_value,
+
+    -- ** CostEstimationResourceCollectionFilter
+    costEstimationResourceCollectionFilter_cloudFormation,
+    costEstimationResourceCollectionFilter_tags,
+
+    -- ** CostEstimationTimeRange
+    costEstimationTimeRange_endTime,
+    costEstimationTimeRange_startTime,
+
+    -- ** EndTimeRange
+    endTimeRange_fromTime,
+    endTimeRange_toTime,
+
+    -- ** Event
+    event_dataSource,
+    event_eventClass,
+    event_eventSource,
+    event_id,
+    event_name,
+    event_resourceCollection,
+    event_resources,
+    event_time,
+
+    -- ** EventResource
+    eventResource_arn,
+    eventResource_name,
+    eventResource_type,
+
+    -- ** EventSourcesConfig
+    eventSourcesConfig_amazonCodeGuruProfiler,
+
+    -- ** EventTimeRange
+    eventTimeRange_fromTime,
+    eventTimeRange_toTime,
+
+    -- ** InsightFeedback
+    insightFeedback_feedback,
+    insightFeedback_id,
+
+    -- ** InsightHealth
+    insightHealth_meanTimeToRecoverInMilliseconds,
+    insightHealth_openProactiveInsights,
+    insightHealth_openReactiveInsights,
+
+    -- ** InsightTimeRange
+    insightTimeRange_endTime,
+    insightTimeRange_startTime,
+
+    -- ** ListEventsFilters
+    listEventsFilters_dataSource,
+    listEventsFilters_eventClass,
+    listEventsFilters_eventSource,
+    listEventsFilters_eventTimeRange,
+    listEventsFilters_insightId,
+    listEventsFilters_resourceCollection,
+
+    -- ** ListInsightsAnyStatusFilter
+    listInsightsAnyStatusFilter_type,
+    listInsightsAnyStatusFilter_startTimeRange,
+
+    -- ** ListInsightsClosedStatusFilter
+    listInsightsClosedStatusFilter_type,
+    listInsightsClosedStatusFilter_endTimeRange,
+
+    -- ** ListInsightsOngoingStatusFilter
+    listInsightsOngoingStatusFilter_type,
+
+    -- ** ListInsightsStatusFilter
+    listInsightsStatusFilter_any,
+    listInsightsStatusFilter_closed,
+    listInsightsStatusFilter_ongoing,
+
+    -- ** ListMonitoredResourcesFilters
+    listMonitoredResourcesFilters_resourcePermission,
+    listMonitoredResourcesFilters_resourceTypeFilters,
+
+    -- ** LogAnomalyClass
+    logAnomalyClass_explanation,
+    logAnomalyClass_logAnomalyToken,
+    logAnomalyClass_logAnomalyType,
+    logAnomalyClass_logEventId,
+    logAnomalyClass_logEventTimestamp,
+    logAnomalyClass_logStreamName,
+    logAnomalyClass_numberOfLogLinesOccurrences,
+
+    -- ** LogAnomalyShowcase
+    logAnomalyShowcase_logAnomalyClasses,
+
+    -- ** LogsAnomalyDetectionIntegration
+    logsAnomalyDetectionIntegration_optInStatus,
+
+    -- ** LogsAnomalyDetectionIntegrationConfig
+    logsAnomalyDetectionIntegrationConfig_optInStatus,
+
+    -- ** MonitoredResourceIdentifier
+    monitoredResourceIdentifier_lastUpdated,
+    monitoredResourceIdentifier_monitoredResourceName,
+    monitoredResourceIdentifier_resourceCollection,
+    monitoredResourceIdentifier_resourcePermission,
+    monitoredResourceIdentifier_type,
+
+    -- ** NotificationChannel
+    notificationChannel_config,
+    notificationChannel_id,
+
+    -- ** NotificationChannelConfig
+    notificationChannelConfig_filters,
+    notificationChannelConfig_sns,
+
+    -- ** NotificationFilterConfig
+    notificationFilterConfig_messageTypes,
+    notificationFilterConfig_severities,
+
+    -- ** OpsCenterIntegration
+    opsCenterIntegration_optInStatus,
+
+    -- ** OpsCenterIntegrationConfig
+    opsCenterIntegrationConfig_optInStatus,
+
+    -- ** PerformanceInsightsMetricDimensionGroup
+    performanceInsightsMetricDimensionGroup_dimensions,
+    performanceInsightsMetricDimensionGroup_group,
+    performanceInsightsMetricDimensionGroup_limit,
+
+    -- ** PerformanceInsightsMetricQuery
+    performanceInsightsMetricQuery_filter,
+    performanceInsightsMetricQuery_groupBy,
+    performanceInsightsMetricQuery_metric,
+
+    -- ** PerformanceInsightsMetricsDetail
+    performanceInsightsMetricsDetail_metricDisplayName,
+    performanceInsightsMetricsDetail_metricQuery,
+    performanceInsightsMetricsDetail_referenceData,
+    performanceInsightsMetricsDetail_statsAtAnomaly,
+    performanceInsightsMetricsDetail_statsAtBaseline,
+    performanceInsightsMetricsDetail_unit,
+
+    -- ** PerformanceInsightsReferenceComparisonValues
+    performanceInsightsReferenceComparisonValues_referenceMetric,
+    performanceInsightsReferenceComparisonValues_referenceScalar,
+
+    -- ** PerformanceInsightsReferenceData
+    performanceInsightsReferenceData_comparisonValues,
+    performanceInsightsReferenceData_name,
+
+    -- ** PerformanceInsightsReferenceMetric
+    performanceInsightsReferenceMetric_metricQuery,
+
+    -- ** PerformanceInsightsReferenceScalar
+    performanceInsightsReferenceScalar_value,
+
+    -- ** PerformanceInsightsStat
+    performanceInsightsStat_type,
+    performanceInsightsStat_value,
+
+    -- ** PredictionTimeRange
+    predictionTimeRange_endTime,
+    predictionTimeRange_startTime,
+
+    -- ** ProactiveAnomaly
+    proactiveAnomaly_anomalyReportedTimeRange,
+    proactiveAnomaly_anomalyResources,
+    proactiveAnomaly_anomalyTimeRange,
+    proactiveAnomaly_associatedInsightId,
+    proactiveAnomaly_id,
+    proactiveAnomaly_limit,
+    proactiveAnomaly_predictionTimeRange,
+    proactiveAnomaly_resourceCollection,
+    proactiveAnomaly_severity,
+    proactiveAnomaly_sourceDetails,
+    proactiveAnomaly_sourceMetadata,
+    proactiveAnomaly_status,
+    proactiveAnomaly_updateTime,
+
+    -- ** ProactiveAnomalySummary
+    proactiveAnomalySummary_anomalyReportedTimeRange,
+    proactiveAnomalySummary_anomalyResources,
+    proactiveAnomalySummary_anomalyTimeRange,
+    proactiveAnomalySummary_associatedInsightId,
+    proactiveAnomalySummary_id,
+    proactiveAnomalySummary_limit,
+    proactiveAnomalySummary_predictionTimeRange,
+    proactiveAnomalySummary_resourceCollection,
+    proactiveAnomalySummary_severity,
+    proactiveAnomalySummary_sourceDetails,
+    proactiveAnomalySummary_sourceMetadata,
+    proactiveAnomalySummary_status,
+    proactiveAnomalySummary_updateTime,
+
+    -- ** ProactiveInsight
+    proactiveInsight_description,
+    proactiveInsight_id,
+    proactiveInsight_insightTimeRange,
+    proactiveInsight_name,
+    proactiveInsight_predictionTimeRange,
+    proactiveInsight_resourceCollection,
+    proactiveInsight_severity,
+    proactiveInsight_ssmOpsItemId,
+    proactiveInsight_status,
+
+    -- ** ProactiveInsightSummary
+    proactiveInsightSummary_associatedResourceArns,
+    proactiveInsightSummary_id,
+    proactiveInsightSummary_insightTimeRange,
+    proactiveInsightSummary_name,
+    proactiveInsightSummary_predictionTimeRange,
+    proactiveInsightSummary_resourceCollection,
+    proactiveInsightSummary_serviceCollection,
+    proactiveInsightSummary_severity,
+    proactiveInsightSummary_status,
+
+    -- ** ProactiveOrganizationInsightSummary
+    proactiveOrganizationInsightSummary_accountId,
+    proactiveOrganizationInsightSummary_id,
+    proactiveOrganizationInsightSummary_insightTimeRange,
+    proactiveOrganizationInsightSummary_name,
+    proactiveOrganizationInsightSummary_organizationalUnitId,
+    proactiveOrganizationInsightSummary_predictionTimeRange,
+    proactiveOrganizationInsightSummary_resourceCollection,
+    proactiveOrganizationInsightSummary_serviceCollection,
+    proactiveOrganizationInsightSummary_severity,
+    proactiveOrganizationInsightSummary_status,
+
+    -- ** ReactiveAnomaly
+    reactiveAnomaly_anomalyReportedTimeRange,
+    reactiveAnomaly_anomalyResources,
+    reactiveAnomaly_anomalyTimeRange,
+    reactiveAnomaly_associatedInsightId,
+    reactiveAnomaly_causalAnomalyId,
+    reactiveAnomaly_description,
+    reactiveAnomaly_id,
+    reactiveAnomaly_name,
+    reactiveAnomaly_resourceCollection,
+    reactiveAnomaly_severity,
+    reactiveAnomaly_sourceDetails,
+    reactiveAnomaly_status,
+    reactiveAnomaly_type,
+
+    -- ** ReactiveAnomalySummary
+    reactiveAnomalySummary_anomalyReportedTimeRange,
+    reactiveAnomalySummary_anomalyResources,
+    reactiveAnomalySummary_anomalyTimeRange,
+    reactiveAnomalySummary_associatedInsightId,
+    reactiveAnomalySummary_causalAnomalyId,
+    reactiveAnomalySummary_description,
+    reactiveAnomalySummary_id,
+    reactiveAnomalySummary_name,
+    reactiveAnomalySummary_resourceCollection,
+    reactiveAnomalySummary_severity,
+    reactiveAnomalySummary_sourceDetails,
+    reactiveAnomalySummary_status,
+    reactiveAnomalySummary_type,
+
+    -- ** ReactiveInsight
+    reactiveInsight_description,
+    reactiveInsight_id,
+    reactiveInsight_insightTimeRange,
+    reactiveInsight_name,
+    reactiveInsight_resourceCollection,
+    reactiveInsight_severity,
+    reactiveInsight_ssmOpsItemId,
+    reactiveInsight_status,
+
+    -- ** ReactiveInsightSummary
+    reactiveInsightSummary_associatedResourceArns,
+    reactiveInsightSummary_id,
+    reactiveInsightSummary_insightTimeRange,
+    reactiveInsightSummary_name,
+    reactiveInsightSummary_resourceCollection,
+    reactiveInsightSummary_serviceCollection,
+    reactiveInsightSummary_severity,
+    reactiveInsightSummary_status,
+
+    -- ** ReactiveOrganizationInsightSummary
+    reactiveOrganizationInsightSummary_accountId,
+    reactiveOrganizationInsightSummary_id,
+    reactiveOrganizationInsightSummary_insightTimeRange,
+    reactiveOrganizationInsightSummary_name,
+    reactiveOrganizationInsightSummary_organizationalUnitId,
+    reactiveOrganizationInsightSummary_resourceCollection,
+    reactiveOrganizationInsightSummary_serviceCollection,
+    reactiveOrganizationInsightSummary_severity,
+    reactiveOrganizationInsightSummary_status,
+
+    -- ** Recommendation
+    recommendation_category,
+    recommendation_description,
+    recommendation_link,
+    recommendation_name,
+    recommendation_reason,
+    recommendation_relatedAnomalies,
+    recommendation_relatedEvents,
+
+    -- ** RecommendationRelatedAnomaly
+    recommendationRelatedAnomaly_anomalyId,
+    recommendationRelatedAnomaly_resources,
+    recommendationRelatedAnomaly_sourceDetails,
+
+    -- ** RecommendationRelatedAnomalyResource
+    recommendationRelatedAnomalyResource_name,
+    recommendationRelatedAnomalyResource_type,
+
+    -- ** RecommendationRelatedAnomalySourceDetail
+    recommendationRelatedAnomalySourceDetail_cloudWatchMetrics,
+
+    -- ** RecommendationRelatedCloudWatchMetricsSourceDetail
+    recommendationRelatedCloudWatchMetricsSourceDetail_metricName,
+    recommendationRelatedCloudWatchMetricsSourceDetail_namespace,
+
+    -- ** RecommendationRelatedEvent
+    recommendationRelatedEvent_name,
+    recommendationRelatedEvent_resources,
+
+    -- ** RecommendationRelatedEventResource
+    recommendationRelatedEventResource_name,
+    recommendationRelatedEventResource_type,
+
+    -- ** ResourceCollection
+    resourceCollection_cloudFormation,
+    resourceCollection_tags,
+
+    -- ** ResourceCollectionFilter
+    resourceCollectionFilter_cloudFormation,
+    resourceCollectionFilter_tags,
+
+    -- ** SearchInsightsFilters
+    searchInsightsFilters_resourceCollection,
+    searchInsightsFilters_serviceCollection,
+    searchInsightsFilters_severities,
+    searchInsightsFilters_statuses,
+
+    -- ** SearchOrganizationInsightsFilters
+    searchOrganizationInsightsFilters_resourceCollection,
+    searchOrganizationInsightsFilters_serviceCollection,
+    searchOrganizationInsightsFilters_severities,
+    searchOrganizationInsightsFilters_statuses,
+
+    -- ** ServiceCollection
+    serviceCollection_serviceNames,
+
+    -- ** ServiceHealth
+    serviceHealth_analyzedResourceCount,
+    serviceHealth_insight,
+    serviceHealth_serviceName,
+
+    -- ** ServiceInsightHealth
+    serviceInsightHealth_openProactiveInsights,
+    serviceInsightHealth_openReactiveInsights,
+
+    -- ** ServiceIntegrationConfig
+    serviceIntegrationConfig_logsAnomalyDetection,
+    serviceIntegrationConfig_opsCenter,
+
+    -- ** ServiceResourceCost
+    serviceResourceCost_cost,
+    serviceResourceCost_count,
+    serviceResourceCost_state,
+    serviceResourceCost_type,
+    serviceResourceCost_unitCost,
+
+    -- ** SnsChannelConfig
+    snsChannelConfig_topicArn,
+
+    -- ** StartTimeRange
+    startTimeRange_fromTime,
+    startTimeRange_toTime,
+
+    -- ** TagCollection
+    tagCollection_appBoundaryKey,
+    tagCollection_tagValues,
+
+    -- ** TagCollectionFilter
+    tagCollectionFilter_appBoundaryKey,
+    tagCollectionFilter_tagValues,
+
+    -- ** TagCostEstimationResourceCollectionFilter
+    tagCostEstimationResourceCollectionFilter_appBoundaryKey,
+    tagCostEstimationResourceCollectionFilter_tagValues,
+
+    -- ** TagHealth
+    tagHealth_analyzedResourceCount,
+    tagHealth_appBoundaryKey,
+    tagHealth_insight,
+    tagHealth_tagValue,
+
+    -- ** TimestampMetricValuePair
+    timestampMetricValuePair_metricValue,
+    timestampMetricValuePair_timestamp,
+
+    -- ** UpdateCloudFormationCollectionFilter
+    updateCloudFormationCollectionFilter_stackNames,
+
+    -- ** UpdateResourceCollectionFilter
+    updateResourceCollectionFilter_cloudFormation,
+    updateResourceCollectionFilter_tags,
+
+    -- ** UpdateServiceIntegrationConfig
+    updateServiceIntegrationConfig_logsAnomalyDetection,
+    updateServiceIntegrationConfig_opsCenter,
+
+    -- ** UpdateTagCollectionFilter
+    updateTagCollectionFilter_appBoundaryKey,
+    updateTagCollectionFilter_tagValues,
+  )
+where
+
+import Amazonka.DevOpsGuru.AddNotificationChannel
+import Amazonka.DevOpsGuru.DeleteInsight
+import Amazonka.DevOpsGuru.DescribeAccountHealth
+import Amazonka.DevOpsGuru.DescribeAccountOverview
+import Amazonka.DevOpsGuru.DescribeAnomaly
+import Amazonka.DevOpsGuru.DescribeEventSourcesConfig
+import Amazonka.DevOpsGuru.DescribeFeedback
+import Amazonka.DevOpsGuru.DescribeInsight
+import Amazonka.DevOpsGuru.DescribeOrganizationHealth
+import Amazonka.DevOpsGuru.DescribeOrganizationOverview
+import Amazonka.DevOpsGuru.DescribeOrganizationResourceCollectionHealth
+import Amazonka.DevOpsGuru.DescribeResourceCollectionHealth
+import Amazonka.DevOpsGuru.DescribeServiceIntegration
+import Amazonka.DevOpsGuru.GetCostEstimation
+import Amazonka.DevOpsGuru.GetResourceCollection
+import Amazonka.DevOpsGuru.ListAnomaliesForInsight
+import Amazonka.DevOpsGuru.ListAnomalousLogGroups
+import Amazonka.DevOpsGuru.ListEvents
+import Amazonka.DevOpsGuru.ListInsights
+import Amazonka.DevOpsGuru.ListMonitoredResources
+import Amazonka.DevOpsGuru.ListNotificationChannels
+import Amazonka.DevOpsGuru.ListOrganizationInsights
+import Amazonka.DevOpsGuru.ListRecommendations
+import Amazonka.DevOpsGuru.PutFeedback
+import Amazonka.DevOpsGuru.RemoveNotificationChannel
+import Amazonka.DevOpsGuru.SearchInsights
+import Amazonka.DevOpsGuru.SearchOrganizationInsights
+import Amazonka.DevOpsGuru.StartCostEstimation
+import Amazonka.DevOpsGuru.Types.AccountHealth
+import Amazonka.DevOpsGuru.Types.AccountInsightHealth
+import Amazonka.DevOpsGuru.Types.AmazonCodeGuruProfilerIntegration
+import Amazonka.DevOpsGuru.Types.AnomalousLogGroup
+import Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyResource
+import Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+import Amazonka.DevOpsGuru.Types.AnomalySourceMetadata
+import Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+import Amazonka.DevOpsGuru.Types.CloudFormationCollection
+import Amazonka.DevOpsGuru.Types.CloudFormationCollectionFilter
+import Amazonka.DevOpsGuru.Types.CloudFormationCostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.CloudFormationHealth
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDataSummary
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDetail
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDimension
+import Amazonka.DevOpsGuru.Types.CostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.CostEstimationTimeRange
+import Amazonka.DevOpsGuru.Types.EndTimeRange
+import Amazonka.DevOpsGuru.Types.Event
+import Amazonka.DevOpsGuru.Types.EventResource
+import Amazonka.DevOpsGuru.Types.EventSourcesConfig
+import Amazonka.DevOpsGuru.Types.EventTimeRange
+import Amazonka.DevOpsGuru.Types.InsightFeedback
+import Amazonka.DevOpsGuru.Types.InsightHealth
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.ListEventsFilters
+import Amazonka.DevOpsGuru.Types.ListInsightsAnyStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsClosedStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsOngoingStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsStatusFilter
+import Amazonka.DevOpsGuru.Types.ListMonitoredResourcesFilters
+import Amazonka.DevOpsGuru.Types.LogAnomalyClass
+import Amazonka.DevOpsGuru.Types.LogAnomalyShowcase
+import Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegration
+import Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegrationConfig
+import Amazonka.DevOpsGuru.Types.MonitoredResourceIdentifier
+import Amazonka.DevOpsGuru.Types.NotificationChannel
+import Amazonka.DevOpsGuru.Types.NotificationChannelConfig
+import Amazonka.DevOpsGuru.Types.NotificationFilterConfig
+import Amazonka.DevOpsGuru.Types.OpsCenterIntegration
+import Amazonka.DevOpsGuru.Types.OpsCenterIntegrationConfig
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricDimensionGroup
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricQuery
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricsDetail
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceComparisonValues
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceData
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceMetric
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceScalar
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsStat
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ProactiveAnomaly
+import Amazonka.DevOpsGuru.Types.ProactiveAnomalySummary
+import Amazonka.DevOpsGuru.Types.ProactiveInsight
+import Amazonka.DevOpsGuru.Types.ProactiveInsightSummary
+import Amazonka.DevOpsGuru.Types.ProactiveOrganizationInsightSummary
+import Amazonka.DevOpsGuru.Types.ReactiveAnomaly
+import Amazonka.DevOpsGuru.Types.ReactiveAnomalySummary
+import Amazonka.DevOpsGuru.Types.ReactiveInsight
+import Amazonka.DevOpsGuru.Types.ReactiveInsightSummary
+import Amazonka.DevOpsGuru.Types.ReactiveOrganizationInsightSummary
+import Amazonka.DevOpsGuru.Types.Recommendation
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomaly
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalyResource
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalySourceDetail
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedCloudWatchMetricsSourceDetail
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedEvent
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedEventResource
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.SearchInsightsFilters
+import Amazonka.DevOpsGuru.Types.SearchOrganizationInsightsFilters
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import Amazonka.DevOpsGuru.Types.ServiceHealth
+import Amazonka.DevOpsGuru.Types.ServiceInsightHealth
+import Amazonka.DevOpsGuru.Types.ServiceIntegrationConfig
+import Amazonka.DevOpsGuru.Types.ServiceResourceCost
+import Amazonka.DevOpsGuru.Types.SnsChannelConfig
+import Amazonka.DevOpsGuru.Types.StartTimeRange
+import Amazonka.DevOpsGuru.Types.TagCollection
+import Amazonka.DevOpsGuru.Types.TagCollectionFilter
+import Amazonka.DevOpsGuru.Types.TagCostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.TagHealth
+import Amazonka.DevOpsGuru.Types.TimestampMetricValuePair
+import Amazonka.DevOpsGuru.Types.UpdateCloudFormationCollectionFilter
+import Amazonka.DevOpsGuru.Types.UpdateResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.UpdateServiceIntegrationConfig
+import Amazonka.DevOpsGuru.Types.UpdateTagCollectionFilter
+import Amazonka.DevOpsGuru.UpdateEventSourcesConfig
+import Amazonka.DevOpsGuru.UpdateResourceCollection
+import Amazonka.DevOpsGuru.UpdateServiceIntegration
diff --git a/gen/Amazonka/DevOpsGuru/ListAnomaliesForInsight.hs b/gen/Amazonka/DevOpsGuru/ListAnomaliesForInsight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListAnomaliesForInsight.hs
@@ -0,0 +1,309 @@
+{-# 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.DevOpsGuru.ListAnomaliesForInsight
+-- 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 anomalies that belong to an insight that you
+-- specify using its ID.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListAnomaliesForInsight
+  ( -- * Creating a Request
+    ListAnomaliesForInsight (..),
+    newListAnomaliesForInsight,
+
+    -- * Request Lenses
+    listAnomaliesForInsight_accountId,
+    listAnomaliesForInsight_maxResults,
+    listAnomaliesForInsight_nextToken,
+    listAnomaliesForInsight_startTimeRange,
+    listAnomaliesForInsight_insightId,
+
+    -- * Destructuring the Response
+    ListAnomaliesForInsightResponse (..),
+    newListAnomaliesForInsightResponse,
+
+    -- * Response Lenses
+    listAnomaliesForInsightResponse_nextToken,
+    listAnomaliesForInsightResponse_proactiveAnomalies,
+    listAnomaliesForInsightResponse_reactiveAnomalies,
+    listAnomaliesForInsightResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAnomaliesForInsight' smart constructor.
+data ListAnomaliesForInsight = ListAnomaliesForInsight'
+  { -- | The ID of the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A time range used to specify when the requested anomalies started. All
+    -- returned anomalies started during this time range.
+    startTimeRange :: Prelude.Maybe StartTimeRange,
+    -- | The ID of the insight. The returned anomalies belong to this insight.
+    insightId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomaliesForInsight' 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:
+--
+-- 'accountId', 'listAnomaliesForInsight_accountId' - The ID of the Amazon Web Services account.
+--
+-- 'maxResults', 'listAnomaliesForInsight_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listAnomaliesForInsight_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'startTimeRange', 'listAnomaliesForInsight_startTimeRange' - A time range used to specify when the requested anomalies started. All
+-- returned anomalies started during this time range.
+--
+-- 'insightId', 'listAnomaliesForInsight_insightId' - The ID of the insight. The returned anomalies belong to this insight.
+newListAnomaliesForInsight ::
+  -- | 'insightId'
+  Prelude.Text ->
+  ListAnomaliesForInsight
+newListAnomaliesForInsight pInsightId_ =
+  ListAnomaliesForInsight'
+    { accountId =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTimeRange = Prelude.Nothing,
+      insightId = pInsightId_
+    }
+
+-- | The ID of the Amazon Web Services account.
+listAnomaliesForInsight_accountId :: Lens.Lens' ListAnomaliesForInsight (Prelude.Maybe Prelude.Text)
+listAnomaliesForInsight_accountId = Lens.lens (\ListAnomaliesForInsight' {accountId} -> accountId) (\s@ListAnomaliesForInsight' {} a -> s {accountId = a} :: ListAnomaliesForInsight)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listAnomaliesForInsight_maxResults :: Lens.Lens' ListAnomaliesForInsight (Prelude.Maybe Prelude.Natural)
+listAnomaliesForInsight_maxResults = Lens.lens (\ListAnomaliesForInsight' {maxResults} -> maxResults) (\s@ListAnomaliesForInsight' {} a -> s {maxResults = a} :: ListAnomaliesForInsight)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listAnomaliesForInsight_nextToken :: Lens.Lens' ListAnomaliesForInsight (Prelude.Maybe Prelude.Text)
+listAnomaliesForInsight_nextToken = Lens.lens (\ListAnomaliesForInsight' {nextToken} -> nextToken) (\s@ListAnomaliesForInsight' {} a -> s {nextToken = a} :: ListAnomaliesForInsight)
+
+-- | A time range used to specify when the requested anomalies started. All
+-- returned anomalies started during this time range.
+listAnomaliesForInsight_startTimeRange :: Lens.Lens' ListAnomaliesForInsight (Prelude.Maybe StartTimeRange)
+listAnomaliesForInsight_startTimeRange = Lens.lens (\ListAnomaliesForInsight' {startTimeRange} -> startTimeRange) (\s@ListAnomaliesForInsight' {} a -> s {startTimeRange = a} :: ListAnomaliesForInsight)
+
+-- | The ID of the insight. The returned anomalies belong to this insight.
+listAnomaliesForInsight_insightId :: Lens.Lens' ListAnomaliesForInsight Prelude.Text
+listAnomaliesForInsight_insightId = Lens.lens (\ListAnomaliesForInsight' {insightId} -> insightId) (\s@ListAnomaliesForInsight' {} a -> s {insightId = a} :: ListAnomaliesForInsight)
+
+instance Core.AWSPager ListAnomaliesForInsight where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAnomaliesForInsightResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAnomaliesForInsightResponse_reactiveAnomalies
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAnomaliesForInsightResponse_proactiveAnomalies
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAnomaliesForInsight_nextToken
+          Lens..~ rs
+          Lens.^? listAnomaliesForInsightResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAnomaliesForInsight where
+  type
+    AWSResponse ListAnomaliesForInsight =
+      ListAnomaliesForInsightResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAnomaliesForInsightResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ProactiveAnomalies"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "ReactiveAnomalies"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAnomaliesForInsight where
+  hashWithSalt _salt ListAnomaliesForInsight' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTimeRange
+      `Prelude.hashWithSalt` insightId
+
+instance Prelude.NFData ListAnomaliesForInsight where
+  rnf ListAnomaliesForInsight' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTimeRange
+      `Prelude.seq` Prelude.rnf insightId
+
+instance Data.ToHeaders ListAnomaliesForInsight where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAnomaliesForInsight where
+  toJSON ListAnomaliesForInsight' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountId" Data..=) Prelude.<$> accountId,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StartTimeRange" Data..=)
+              Prelude.<$> startTimeRange
+          ]
+      )
+
+instance Data.ToPath ListAnomaliesForInsight where
+  toPath ListAnomaliesForInsight' {..} =
+    Prelude.mconcat
+      ["/anomalies/insight/", Data.toBS insightId]
+
+instance Data.ToQuery ListAnomaliesForInsight where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAnomaliesForInsightResponse' smart constructor.
+data ListAnomaliesForInsightResponse = ListAnomaliesForInsightResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @ProactiveAnomalySummary@ objects that represent the
+    -- requested anomalies
+    proactiveAnomalies :: Prelude.Maybe [ProactiveAnomalySummary],
+    -- | An array of @ReactiveAnomalySummary@ objects that represent the
+    -- requested anomalies
+    reactiveAnomalies :: Prelude.Maybe [ReactiveAnomalySummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomaliesForInsightResponse' 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', 'listAnomaliesForInsightResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'proactiveAnomalies', 'listAnomaliesForInsightResponse_proactiveAnomalies' - An array of @ProactiveAnomalySummary@ objects that represent the
+-- requested anomalies
+--
+-- 'reactiveAnomalies', 'listAnomaliesForInsightResponse_reactiveAnomalies' - An array of @ReactiveAnomalySummary@ objects that represent the
+-- requested anomalies
+--
+-- 'httpStatus', 'listAnomaliesForInsightResponse_httpStatus' - The response's http status code.
+newListAnomaliesForInsightResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAnomaliesForInsightResponse
+newListAnomaliesForInsightResponse pHttpStatus_ =
+  ListAnomaliesForInsightResponse'
+    { nextToken =
+        Prelude.Nothing,
+      proactiveAnomalies = Prelude.Nothing,
+      reactiveAnomalies = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listAnomaliesForInsightResponse_nextToken :: Lens.Lens' ListAnomaliesForInsightResponse (Prelude.Maybe Prelude.Text)
+listAnomaliesForInsightResponse_nextToken = Lens.lens (\ListAnomaliesForInsightResponse' {nextToken} -> nextToken) (\s@ListAnomaliesForInsightResponse' {} a -> s {nextToken = a} :: ListAnomaliesForInsightResponse)
+
+-- | An array of @ProactiveAnomalySummary@ objects that represent the
+-- requested anomalies
+listAnomaliesForInsightResponse_proactiveAnomalies :: Lens.Lens' ListAnomaliesForInsightResponse (Prelude.Maybe [ProactiveAnomalySummary])
+listAnomaliesForInsightResponse_proactiveAnomalies = Lens.lens (\ListAnomaliesForInsightResponse' {proactiveAnomalies} -> proactiveAnomalies) (\s@ListAnomaliesForInsightResponse' {} a -> s {proactiveAnomalies = a} :: ListAnomaliesForInsightResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of @ReactiveAnomalySummary@ objects that represent the
+-- requested anomalies
+listAnomaliesForInsightResponse_reactiveAnomalies :: Lens.Lens' ListAnomaliesForInsightResponse (Prelude.Maybe [ReactiveAnomalySummary])
+listAnomaliesForInsightResponse_reactiveAnomalies = Lens.lens (\ListAnomaliesForInsightResponse' {reactiveAnomalies} -> reactiveAnomalies) (\s@ListAnomaliesForInsightResponse' {} a -> s {reactiveAnomalies = a} :: ListAnomaliesForInsightResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listAnomaliesForInsightResponse_httpStatus :: Lens.Lens' ListAnomaliesForInsightResponse Prelude.Int
+listAnomaliesForInsightResponse_httpStatus = Lens.lens (\ListAnomaliesForInsightResponse' {httpStatus} -> httpStatus) (\s@ListAnomaliesForInsightResponse' {} a -> s {httpStatus = a} :: ListAnomaliesForInsightResponse)
+
+instance
+  Prelude.NFData
+    ListAnomaliesForInsightResponse
+  where
+  rnf ListAnomaliesForInsightResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proactiveAnomalies
+      `Prelude.seq` Prelude.rnf reactiveAnomalies
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/ListAnomalousLogGroups.hs b/gen/Amazonka/DevOpsGuru/ListAnomalousLogGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListAnomalousLogGroups.hs
@@ -0,0 +1,265 @@
+{-# 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.DevOpsGuru.ListAnomalousLogGroups
+-- 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 list of log groups that contain log anomalies.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListAnomalousLogGroups
+  ( -- * Creating a Request
+    ListAnomalousLogGroups (..),
+    newListAnomalousLogGroups,
+
+    -- * Request Lenses
+    listAnomalousLogGroups_maxResults,
+    listAnomalousLogGroups_nextToken,
+    listAnomalousLogGroups_insightId,
+
+    -- * Destructuring the Response
+    ListAnomalousLogGroupsResponse (..),
+    newListAnomalousLogGroupsResponse,
+
+    -- * Response Lenses
+    listAnomalousLogGroupsResponse_nextToken,
+    listAnomalousLogGroupsResponse_httpStatus,
+    listAnomalousLogGroupsResponse_insightId,
+    listAnomalousLogGroupsResponse_anomalousLogGroups,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAnomalousLogGroups' smart constructor.
+data ListAnomalousLogGroups = ListAnomalousLogGroups'
+  { -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the insight containing the log groups.
+    insightId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomalousLogGroups' 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', 'listAnomalousLogGroups_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listAnomalousLogGroups_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'insightId', 'listAnomalousLogGroups_insightId' - The ID of the insight containing the log groups.
+newListAnomalousLogGroups ::
+  -- | 'insightId'
+  Prelude.Text ->
+  ListAnomalousLogGroups
+newListAnomalousLogGroups pInsightId_ =
+  ListAnomalousLogGroups'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      insightId = pInsightId_
+    }
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listAnomalousLogGroups_maxResults :: Lens.Lens' ListAnomalousLogGroups (Prelude.Maybe Prelude.Natural)
+listAnomalousLogGroups_maxResults = Lens.lens (\ListAnomalousLogGroups' {maxResults} -> maxResults) (\s@ListAnomalousLogGroups' {} a -> s {maxResults = a} :: ListAnomalousLogGroups)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listAnomalousLogGroups_nextToken :: Lens.Lens' ListAnomalousLogGroups (Prelude.Maybe Prelude.Text)
+listAnomalousLogGroups_nextToken = Lens.lens (\ListAnomalousLogGroups' {nextToken} -> nextToken) (\s@ListAnomalousLogGroups' {} a -> s {nextToken = a} :: ListAnomalousLogGroups)
+
+-- | The ID of the insight containing the log groups.
+listAnomalousLogGroups_insightId :: Lens.Lens' ListAnomalousLogGroups Prelude.Text
+listAnomalousLogGroups_insightId = Lens.lens (\ListAnomalousLogGroups' {insightId} -> insightId) (\s@ListAnomalousLogGroups' {} a -> s {insightId = a} :: ListAnomalousLogGroups)
+
+instance Core.AWSPager ListAnomalousLogGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAnomalousLogGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listAnomalousLogGroupsResponse_anomalousLogGroups
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAnomalousLogGroups_nextToken
+          Lens..~ rs
+          Lens.^? listAnomalousLogGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAnomalousLogGroups where
+  type
+    AWSResponse ListAnomalousLogGroups =
+      ListAnomalousLogGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAnomalousLogGroupsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "InsightId")
+            Prelude.<*> ( x
+                            Data..?> "AnomalousLogGroups"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListAnomalousLogGroups where
+  hashWithSalt _salt ListAnomalousLogGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` insightId
+
+instance Prelude.NFData ListAnomalousLogGroups where
+  rnf ListAnomalousLogGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf insightId
+
+instance Data.ToHeaders ListAnomalousLogGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAnomalousLogGroups where
+  toJSON ListAnomalousLogGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("InsightId" Data..= insightId)
+          ]
+      )
+
+instance Data.ToPath ListAnomalousLogGroups where
+  toPath = Prelude.const "/list-log-anomalies"
+
+instance Data.ToQuery ListAnomalousLogGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAnomalousLogGroupsResponse' smart constructor.
+data ListAnomalousLogGroupsResponse = ListAnomalousLogGroupsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the insight containing the log groups.
+    insightId :: Prelude.Text,
+    -- | The list of Amazon CloudWatch log groups that are related to an insight.
+    anomalousLogGroups :: [AnomalousLogGroup]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomalousLogGroupsResponse' 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', 'listAnomalousLogGroupsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'listAnomalousLogGroupsResponse_httpStatus' - The response's http status code.
+--
+-- 'insightId', 'listAnomalousLogGroupsResponse_insightId' - The ID of the insight containing the log groups.
+--
+-- 'anomalousLogGroups', 'listAnomalousLogGroupsResponse_anomalousLogGroups' - The list of Amazon CloudWatch log groups that are related to an insight.
+newListAnomalousLogGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'insightId'
+  Prelude.Text ->
+  ListAnomalousLogGroupsResponse
+newListAnomalousLogGroupsResponse
+  pHttpStatus_
+  pInsightId_ =
+    ListAnomalousLogGroupsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        insightId = pInsightId_,
+        anomalousLogGroups = Prelude.mempty
+      }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listAnomalousLogGroupsResponse_nextToken :: Lens.Lens' ListAnomalousLogGroupsResponse (Prelude.Maybe Prelude.Text)
+listAnomalousLogGroupsResponse_nextToken = Lens.lens (\ListAnomalousLogGroupsResponse' {nextToken} -> nextToken) (\s@ListAnomalousLogGroupsResponse' {} a -> s {nextToken = a} :: ListAnomalousLogGroupsResponse)
+
+-- | The response's http status code.
+listAnomalousLogGroupsResponse_httpStatus :: Lens.Lens' ListAnomalousLogGroupsResponse Prelude.Int
+listAnomalousLogGroupsResponse_httpStatus = Lens.lens (\ListAnomalousLogGroupsResponse' {httpStatus} -> httpStatus) (\s@ListAnomalousLogGroupsResponse' {} a -> s {httpStatus = a} :: ListAnomalousLogGroupsResponse)
+
+-- | The ID of the insight containing the log groups.
+listAnomalousLogGroupsResponse_insightId :: Lens.Lens' ListAnomalousLogGroupsResponse Prelude.Text
+listAnomalousLogGroupsResponse_insightId = Lens.lens (\ListAnomalousLogGroupsResponse' {insightId} -> insightId) (\s@ListAnomalousLogGroupsResponse' {} a -> s {insightId = a} :: ListAnomalousLogGroupsResponse)
+
+-- | The list of Amazon CloudWatch log groups that are related to an insight.
+listAnomalousLogGroupsResponse_anomalousLogGroups :: Lens.Lens' ListAnomalousLogGroupsResponse [AnomalousLogGroup]
+listAnomalousLogGroupsResponse_anomalousLogGroups = Lens.lens (\ListAnomalousLogGroupsResponse' {anomalousLogGroups} -> anomalousLogGroups) (\s@ListAnomalousLogGroupsResponse' {} a -> s {anomalousLogGroups = a} :: ListAnomalousLogGroupsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAnomalousLogGroupsResponse
+  where
+  rnf ListAnomalousLogGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf insightId
+      `Prelude.seq` Prelude.rnf anomalousLogGroups
diff --git a/gen/Amazonka/DevOpsGuru/ListEvents.hs b/gen/Amazonka/DevOpsGuru/ListEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListEvents.hs
@@ -0,0 +1,251 @@
+{-# 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.DevOpsGuru.ListEvents
+-- 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 events emitted by the resources that are evaluated
+-- by DevOps Guru. You can use filters to specify which events are
+-- returned.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListEvents
+  ( -- * Creating a Request
+    ListEvents (..),
+    newListEvents,
+
+    -- * Request Lenses
+    listEvents_accountId,
+    listEvents_maxResults,
+    listEvents_nextToken,
+    listEvents_filters,
+
+    -- * Destructuring the Response
+    ListEventsResponse (..),
+    newListEventsResponse,
+
+    -- * Response Lenses
+    listEventsResponse_nextToken,
+    listEventsResponse_httpStatus,
+    listEventsResponse_events,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEvents' smart constructor.
+data ListEvents = ListEvents'
+  { -- | The ID of the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A @ListEventsFilters@ object used to specify which events to return.
+    filters :: ListEventsFilters
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEvents' 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:
+--
+-- 'accountId', 'listEvents_accountId' - The ID of the Amazon Web Services account.
+--
+-- 'maxResults', 'listEvents_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listEvents_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'filters', 'listEvents_filters' - A @ListEventsFilters@ object used to specify which events to return.
+newListEvents ::
+  -- | 'filters'
+  ListEventsFilters ->
+  ListEvents
+newListEvents pFilters_ =
+  ListEvents'
+    { accountId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      filters = pFilters_
+    }
+
+-- | The ID of the Amazon Web Services account.
+listEvents_accountId :: Lens.Lens' ListEvents (Prelude.Maybe Prelude.Text)
+listEvents_accountId = Lens.lens (\ListEvents' {accountId} -> accountId) (\s@ListEvents' {} a -> s {accountId = a} :: ListEvents)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listEvents_maxResults :: Lens.Lens' ListEvents (Prelude.Maybe Prelude.Natural)
+listEvents_maxResults = Lens.lens (\ListEvents' {maxResults} -> maxResults) (\s@ListEvents' {} a -> s {maxResults = a} :: ListEvents)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listEvents_nextToken :: Lens.Lens' ListEvents (Prelude.Maybe Prelude.Text)
+listEvents_nextToken = Lens.lens (\ListEvents' {nextToken} -> nextToken) (\s@ListEvents' {} a -> s {nextToken = a} :: ListEvents)
+
+-- | A @ListEventsFilters@ object used to specify which events to return.
+listEvents_filters :: Lens.Lens' ListEvents ListEventsFilters
+listEvents_filters = Lens.lens (\ListEvents' {filters} -> filters) (\s@ListEvents' {} a -> s {filters = a} :: ListEvents)
+
+instance Core.AWSPager ListEvents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEventsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listEventsResponse_events) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEvents_nextToken
+          Lens..~ rs
+          Lens.^? listEventsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEvents where
+  type AWSResponse ListEvents = ListEventsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEventsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Events" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListEvents where
+  hashWithSalt _salt ListEvents' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData ListEvents where
+  rnf ListEvents' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf filters
+
+instance Data.ToHeaders ListEvents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEvents where
+  toJSON ListEvents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountId" Data..=) Prelude.<$> accountId,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("Filters" Data..= filters)
+          ]
+      )
+
+instance Data.ToPath ListEvents where
+  toPath = Prelude.const "/events"
+
+instance Data.ToQuery ListEvents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEventsResponse' smart constructor.
+data ListEventsResponse = ListEventsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of the requested events.
+    events :: [Event]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventsResponse' 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', 'listEventsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'listEventsResponse_httpStatus' - The response's http status code.
+--
+-- 'events', 'listEventsResponse_events' - A list of the requested events.
+newListEventsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEventsResponse
+newListEventsResponse pHttpStatus_ =
+  ListEventsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      events = Prelude.mempty
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listEventsResponse_nextToken :: Lens.Lens' ListEventsResponse (Prelude.Maybe Prelude.Text)
+listEventsResponse_nextToken = Lens.lens (\ListEventsResponse' {nextToken} -> nextToken) (\s@ListEventsResponse' {} a -> s {nextToken = a} :: ListEventsResponse)
+
+-- | The response's http status code.
+listEventsResponse_httpStatus :: Lens.Lens' ListEventsResponse Prelude.Int
+listEventsResponse_httpStatus = Lens.lens (\ListEventsResponse' {httpStatus} -> httpStatus) (\s@ListEventsResponse' {} a -> s {httpStatus = a} :: ListEventsResponse)
+
+-- | A list of the requested events.
+listEventsResponse_events :: Lens.Lens' ListEventsResponse [Event]
+listEventsResponse_events = Lens.lens (\ListEventsResponse' {events} -> events) (\s@ListEventsResponse' {} a -> s {events = a} :: ListEventsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListEventsResponse where
+  rnf ListEventsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf events
diff --git a/gen/Amazonka/DevOpsGuru/ListInsights.hs b/gen/Amazonka/DevOpsGuru/ListInsights.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListInsights.hs
@@ -0,0 +1,269 @@
+{-# 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.DevOpsGuru.ListInsights
+-- 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 insights in your Amazon Web Services account. You can
+-- specify which insights are returned by their start time and status
+-- (@ONGOING@, @CLOSED@, or @ANY@).
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListInsights
+  ( -- * Creating a Request
+    ListInsights (..),
+    newListInsights,
+
+    -- * Request Lenses
+    listInsights_maxResults,
+    listInsights_nextToken,
+    listInsights_statusFilter,
+
+    -- * Destructuring the Response
+    ListInsightsResponse (..),
+    newListInsightsResponse,
+
+    -- * Response Lenses
+    listInsightsResponse_nextToken,
+    listInsightsResponse_proactiveInsights,
+    listInsightsResponse_reactiveInsights,
+    listInsightsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListInsights' smart constructor.
+data ListInsights = ListInsights'
+  { -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A filter used to filter the returned insights by their status. You can
+    -- specify one status filter.
+    statusFilter :: ListInsightsStatusFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInsights' 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', 'listInsights_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listInsights_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'statusFilter', 'listInsights_statusFilter' - A filter used to filter the returned insights by their status. You can
+-- specify one status filter.
+newListInsights ::
+  -- | 'statusFilter'
+  ListInsightsStatusFilter ->
+  ListInsights
+newListInsights pStatusFilter_ =
+  ListInsights'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      statusFilter = pStatusFilter_
+    }
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listInsights_maxResults :: Lens.Lens' ListInsights (Prelude.Maybe Prelude.Natural)
+listInsights_maxResults = Lens.lens (\ListInsights' {maxResults} -> maxResults) (\s@ListInsights' {} a -> s {maxResults = a} :: ListInsights)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listInsights_nextToken :: Lens.Lens' ListInsights (Prelude.Maybe Prelude.Text)
+listInsights_nextToken = Lens.lens (\ListInsights' {nextToken} -> nextToken) (\s@ListInsights' {} a -> s {nextToken = a} :: ListInsights)
+
+-- | A filter used to filter the returned insights by their status. You can
+-- specify one status filter.
+listInsights_statusFilter :: Lens.Lens' ListInsights ListInsightsStatusFilter
+listInsights_statusFilter = Lens.lens (\ListInsights' {statusFilter} -> statusFilter) (\s@ListInsights' {} a -> s {statusFilter = a} :: ListInsights)
+
+instance Core.AWSPager ListInsights where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listInsightsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listInsightsResponse_proactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listInsightsResponse_reactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listInsights_nextToken
+          Lens..~ rs
+          Lens.^? listInsightsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListInsights where
+  type AWSResponse ListInsights = ListInsightsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListInsightsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ProactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "ReactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListInsights where
+  hashWithSalt _salt ListInsights' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` statusFilter
+
+instance Prelude.NFData ListInsights where
+  rnf ListInsights' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf statusFilter
+
+instance Data.ToHeaders ListInsights where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListInsights where
+  toJSON ListInsights' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("StatusFilter" Data..= statusFilter)
+          ]
+      )
+
+instance Data.ToPath ListInsights where
+  toPath = Prelude.const "/insights"
+
+instance Data.ToQuery ListInsights where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListInsightsResponse' smart constructor.
+data ListInsightsResponse = ListInsightsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The returned list of proactive insights.
+    proactiveInsights :: Prelude.Maybe [ProactiveInsightSummary],
+    -- | The returned list of reactive insights.
+    reactiveInsights :: Prelude.Maybe [ReactiveInsightSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInsightsResponse' 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', 'listInsightsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'proactiveInsights', 'listInsightsResponse_proactiveInsights' - The returned list of proactive insights.
+--
+-- 'reactiveInsights', 'listInsightsResponse_reactiveInsights' - The returned list of reactive insights.
+--
+-- 'httpStatus', 'listInsightsResponse_httpStatus' - The response's http status code.
+newListInsightsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListInsightsResponse
+newListInsightsResponse pHttpStatus_ =
+  ListInsightsResponse'
+    { nextToken = Prelude.Nothing,
+      proactiveInsights = Prelude.Nothing,
+      reactiveInsights = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listInsightsResponse_nextToken :: Lens.Lens' ListInsightsResponse (Prelude.Maybe Prelude.Text)
+listInsightsResponse_nextToken = Lens.lens (\ListInsightsResponse' {nextToken} -> nextToken) (\s@ListInsightsResponse' {} a -> s {nextToken = a} :: ListInsightsResponse)
+
+-- | The returned list of proactive insights.
+listInsightsResponse_proactiveInsights :: Lens.Lens' ListInsightsResponse (Prelude.Maybe [ProactiveInsightSummary])
+listInsightsResponse_proactiveInsights = Lens.lens (\ListInsightsResponse' {proactiveInsights} -> proactiveInsights) (\s@ListInsightsResponse' {} a -> s {proactiveInsights = a} :: ListInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The returned list of reactive insights.
+listInsightsResponse_reactiveInsights :: Lens.Lens' ListInsightsResponse (Prelude.Maybe [ReactiveInsightSummary])
+listInsightsResponse_reactiveInsights = Lens.lens (\ListInsightsResponse' {reactiveInsights} -> reactiveInsights) (\s@ListInsightsResponse' {} a -> s {reactiveInsights = a} :: ListInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listInsightsResponse_httpStatus :: Lens.Lens' ListInsightsResponse Prelude.Int
+listInsightsResponse_httpStatus = Lens.lens (\ListInsightsResponse' {httpStatus} -> httpStatus) (\s@ListInsightsResponse' {} a -> s {httpStatus = a} :: ListInsightsResponse)
+
+instance Prelude.NFData ListInsightsResponse where
+  rnf ListInsightsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proactiveInsights
+      `Prelude.seq` Prelude.rnf reactiveInsights
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/ListMonitoredResources.hs b/gen/Amazonka/DevOpsGuru/ListMonitoredResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListMonitoredResources.hs
@@ -0,0 +1,257 @@
+{-# 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.DevOpsGuru.ListMonitoredResources
+-- 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 list of all log groups that are being monitored and tagged
+-- by DevOps Guru.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListMonitoredResources
+  ( -- * Creating a Request
+    ListMonitoredResources (..),
+    newListMonitoredResources,
+
+    -- * Request Lenses
+    listMonitoredResources_filters,
+    listMonitoredResources_maxResults,
+    listMonitoredResources_nextToken,
+
+    -- * Destructuring the Response
+    ListMonitoredResourcesResponse (..),
+    newListMonitoredResourcesResponse,
+
+    -- * Response Lenses
+    listMonitoredResourcesResponse_nextToken,
+    listMonitoredResourcesResponse_httpStatus,
+    listMonitoredResourcesResponse_monitoredResourceIdentifiers,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMonitoredResources' smart constructor.
+data ListMonitoredResources = ListMonitoredResources'
+  { -- | Filters to determine which monitored resources you want to retrieve. You
+    -- can filter by resource type or resource permission status.
+    filters :: Prelude.Maybe ListMonitoredResourcesFilters,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitoredResources' 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:
+--
+-- 'filters', 'listMonitoredResources_filters' - Filters to determine which monitored resources you want to retrieve. You
+-- can filter by resource type or resource permission status.
+--
+-- 'maxResults', 'listMonitoredResources_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listMonitoredResources_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newListMonitoredResources ::
+  ListMonitoredResources
+newListMonitoredResources =
+  ListMonitoredResources'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Filters to determine which monitored resources you want to retrieve. You
+-- can filter by resource type or resource permission status.
+listMonitoredResources_filters :: Lens.Lens' ListMonitoredResources (Prelude.Maybe ListMonitoredResourcesFilters)
+listMonitoredResources_filters = Lens.lens (\ListMonitoredResources' {filters} -> filters) (\s@ListMonitoredResources' {} a -> s {filters = a} :: ListMonitoredResources)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listMonitoredResources_maxResults :: Lens.Lens' ListMonitoredResources (Prelude.Maybe Prelude.Natural)
+listMonitoredResources_maxResults = Lens.lens (\ListMonitoredResources' {maxResults} -> maxResults) (\s@ListMonitoredResources' {} a -> s {maxResults = a} :: ListMonitoredResources)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listMonitoredResources_nextToken :: Lens.Lens' ListMonitoredResources (Prelude.Maybe Prelude.Text)
+listMonitoredResources_nextToken = Lens.lens (\ListMonitoredResources' {nextToken} -> nextToken) (\s@ListMonitoredResources' {} a -> s {nextToken = a} :: ListMonitoredResources)
+
+instance Core.AWSPager ListMonitoredResources where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listMonitoredResourcesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listMonitoredResourcesResponse_monitoredResourceIdentifiers
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listMonitoredResources_nextToken
+          Lens..~ rs
+          Lens.^? listMonitoredResourcesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListMonitoredResources where
+  type
+    AWSResponse ListMonitoredResources =
+      ListMonitoredResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMonitoredResourcesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "MonitoredResourceIdentifiers"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListMonitoredResources where
+  hashWithSalt _salt ListMonitoredResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListMonitoredResources where
+  rnf ListMonitoredResources' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListMonitoredResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListMonitoredResources where
+  toJSON ListMonitoredResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListMonitoredResources where
+  toPath = Prelude.const "/monitoredResources"
+
+instance Data.ToQuery ListMonitoredResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListMonitoredResourcesResponse' smart constructor.
+data ListMonitoredResourcesResponse = ListMonitoredResourcesResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about the resource that is being monitored, including the
+    -- name of the resource, the type of resource, and whether or not
+    -- permission is given to DevOps Guru to access that resource.
+    monitoredResourceIdentifiers :: [MonitoredResourceIdentifier]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitoredResourcesResponse' 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', 'listMonitoredResourcesResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'listMonitoredResourcesResponse_httpStatus' - The response's http status code.
+--
+-- 'monitoredResourceIdentifiers', 'listMonitoredResourcesResponse_monitoredResourceIdentifiers' - Information about the resource that is being monitored, including the
+-- name of the resource, the type of resource, and whether or not
+-- permission is given to DevOps Guru to access that resource.
+newListMonitoredResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMonitoredResourcesResponse
+newListMonitoredResourcesResponse pHttpStatus_ =
+  ListMonitoredResourcesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      monitoredResourceIdentifiers =
+        Prelude.mempty
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listMonitoredResourcesResponse_nextToken :: Lens.Lens' ListMonitoredResourcesResponse (Prelude.Maybe Prelude.Text)
+listMonitoredResourcesResponse_nextToken = Lens.lens (\ListMonitoredResourcesResponse' {nextToken} -> nextToken) (\s@ListMonitoredResourcesResponse' {} a -> s {nextToken = a} :: ListMonitoredResourcesResponse)
+
+-- | The response's http status code.
+listMonitoredResourcesResponse_httpStatus :: Lens.Lens' ListMonitoredResourcesResponse Prelude.Int
+listMonitoredResourcesResponse_httpStatus = Lens.lens (\ListMonitoredResourcesResponse' {httpStatus} -> httpStatus) (\s@ListMonitoredResourcesResponse' {} a -> s {httpStatus = a} :: ListMonitoredResourcesResponse)
+
+-- | Information about the resource that is being monitored, including the
+-- name of the resource, the type of resource, and whether or not
+-- permission is given to DevOps Guru to access that resource.
+listMonitoredResourcesResponse_monitoredResourceIdentifiers :: Lens.Lens' ListMonitoredResourcesResponse [MonitoredResourceIdentifier]
+listMonitoredResourcesResponse_monitoredResourceIdentifiers = Lens.lens (\ListMonitoredResourcesResponse' {monitoredResourceIdentifiers} -> monitoredResourceIdentifiers) (\s@ListMonitoredResourcesResponse' {} a -> s {monitoredResourceIdentifiers = a} :: ListMonitoredResourcesResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListMonitoredResourcesResponse
+  where
+  rnf ListMonitoredResourcesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf monitoredResourceIdentifiers
diff --git a/gen/Amazonka/DevOpsGuru/ListNotificationChannels.hs b/gen/Amazonka/DevOpsGuru/ListNotificationChannels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListNotificationChannels.hs
@@ -0,0 +1,215 @@
+{-# 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.DevOpsGuru.ListNotificationChannels
+-- 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 notification channels configured for DevOps Guru. Each
+-- notification channel is used to notify you when DevOps Guru generates an
+-- insight that contains information about how to improve your operations.
+-- The one supported notification channel is Amazon Simple Notification
+-- Service (Amazon SNS).
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListNotificationChannels
+  ( -- * Creating a Request
+    ListNotificationChannels (..),
+    newListNotificationChannels,
+
+    -- * Request Lenses
+    listNotificationChannels_nextToken,
+
+    -- * Destructuring the Response
+    ListNotificationChannelsResponse (..),
+    newListNotificationChannelsResponse,
+
+    -- * Response Lenses
+    listNotificationChannelsResponse_channels,
+    listNotificationChannelsResponse_nextToken,
+    listNotificationChannelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListNotificationChannels' smart constructor.
+data ListNotificationChannels = ListNotificationChannels'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNotificationChannels' 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', 'listNotificationChannels_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newListNotificationChannels ::
+  ListNotificationChannels
+newListNotificationChannels =
+  ListNotificationChannels'
+    { nextToken =
+        Prelude.Nothing
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listNotificationChannels_nextToken :: Lens.Lens' ListNotificationChannels (Prelude.Maybe Prelude.Text)
+listNotificationChannels_nextToken = Lens.lens (\ListNotificationChannels' {nextToken} -> nextToken) (\s@ListNotificationChannels' {} a -> s {nextToken = a} :: ListNotificationChannels)
+
+instance Core.AWSPager ListNotificationChannels where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listNotificationChannelsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listNotificationChannelsResponse_channels
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listNotificationChannels_nextToken
+          Lens..~ rs
+          Lens.^? listNotificationChannelsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListNotificationChannels where
+  type
+    AWSResponse ListNotificationChannels =
+      ListNotificationChannelsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListNotificationChannelsResponse'
+            Prelude.<$> (x Data..?> "Channels" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListNotificationChannels where
+  hashWithSalt _salt ListNotificationChannels' {..} =
+    _salt `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListNotificationChannels where
+  rnf ListNotificationChannels' {..} =
+    Prelude.rnf nextToken
+
+instance Data.ToHeaders ListNotificationChannels where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListNotificationChannels where
+  toJSON ListNotificationChannels' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("NextToken" Data..=) Prelude.<$> nextToken]
+      )
+
+instance Data.ToPath ListNotificationChannels where
+  toPath = Prelude.const "/channels"
+
+instance Data.ToQuery ListNotificationChannels where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListNotificationChannelsResponse' smart constructor.
+data ListNotificationChannelsResponse = ListNotificationChannelsResponse'
+  { -- | An array that contains the requested notification channels.
+    channels :: Prelude.Maybe [NotificationChannel],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'ListNotificationChannelsResponse' 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:
+--
+-- 'channels', 'listNotificationChannelsResponse_channels' - An array that contains the requested notification channels.
+--
+-- 'nextToken', 'listNotificationChannelsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'listNotificationChannelsResponse_httpStatus' - The response's http status code.
+newListNotificationChannelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListNotificationChannelsResponse
+newListNotificationChannelsResponse pHttpStatus_ =
+  ListNotificationChannelsResponse'
+    { channels =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array that contains the requested notification channels.
+listNotificationChannelsResponse_channels :: Lens.Lens' ListNotificationChannelsResponse (Prelude.Maybe [NotificationChannel])
+listNotificationChannelsResponse_channels = Lens.lens (\ListNotificationChannelsResponse' {channels} -> channels) (\s@ListNotificationChannelsResponse' {} a -> s {channels = a} :: ListNotificationChannelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listNotificationChannelsResponse_nextToken :: Lens.Lens' ListNotificationChannelsResponse (Prelude.Maybe Prelude.Text)
+listNotificationChannelsResponse_nextToken = Lens.lens (\ListNotificationChannelsResponse' {nextToken} -> nextToken) (\s@ListNotificationChannelsResponse' {} a -> s {nextToken = a} :: ListNotificationChannelsResponse)
+
+-- | The response's http status code.
+listNotificationChannelsResponse_httpStatus :: Lens.Lens' ListNotificationChannelsResponse Prelude.Int
+listNotificationChannelsResponse_httpStatus = Lens.lens (\ListNotificationChannelsResponse' {httpStatus} -> httpStatus) (\s@ListNotificationChannelsResponse' {} a -> s {httpStatus = a} :: ListNotificationChannelsResponse)
+
+instance
+  Prelude.NFData
+    ListNotificationChannelsResponse
+  where
+  rnf ListNotificationChannelsResponse' {..} =
+    Prelude.rnf channels
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/ListOrganizationInsights.hs b/gen/Amazonka/DevOpsGuru/ListOrganizationInsights.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListOrganizationInsights.hs
@@ -0,0 +1,303 @@
+{-# 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.DevOpsGuru.ListOrganizationInsights
+-- 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 insights associated with the account or OU Id.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListOrganizationInsights
+  ( -- * Creating a Request
+    ListOrganizationInsights (..),
+    newListOrganizationInsights,
+
+    -- * Request Lenses
+    listOrganizationInsights_accountIds,
+    listOrganizationInsights_maxResults,
+    listOrganizationInsights_nextToken,
+    listOrganizationInsights_organizationalUnitIds,
+    listOrganizationInsights_statusFilter,
+
+    -- * Destructuring the Response
+    ListOrganizationInsightsResponse (..),
+    newListOrganizationInsightsResponse,
+
+    -- * Response Lenses
+    listOrganizationInsightsResponse_nextToken,
+    listOrganizationInsightsResponse_proactiveInsights,
+    listOrganizationInsightsResponse_reactiveInsights,
+    listOrganizationInsightsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListOrganizationInsights' smart constructor.
+data ListOrganizationInsights = ListOrganizationInsights'
+  { -- | The ID of the Amazon Web Services account.
+    accountIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the organizational unit.
+    organizationalUnitIds :: Prelude.Maybe [Prelude.Text],
+    statusFilter :: ListInsightsStatusFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOrganizationInsights' 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:
+--
+-- 'accountIds', 'listOrganizationInsights_accountIds' - The ID of the Amazon Web Services account.
+--
+-- 'maxResults', 'listOrganizationInsights_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listOrganizationInsights_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'organizationalUnitIds', 'listOrganizationInsights_organizationalUnitIds' - The ID of the organizational unit.
+--
+-- 'statusFilter', 'listOrganizationInsights_statusFilter' - Undocumented member.
+newListOrganizationInsights ::
+  -- | 'statusFilter'
+  ListInsightsStatusFilter ->
+  ListOrganizationInsights
+newListOrganizationInsights pStatusFilter_ =
+  ListOrganizationInsights'
+    { accountIds =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      organizationalUnitIds = Prelude.Nothing,
+      statusFilter = pStatusFilter_
+    }
+
+-- | The ID of the Amazon Web Services account.
+listOrganizationInsights_accountIds :: Lens.Lens' ListOrganizationInsights (Prelude.Maybe [Prelude.Text])
+listOrganizationInsights_accountIds = Lens.lens (\ListOrganizationInsights' {accountIds} -> accountIds) (\s@ListOrganizationInsights' {} a -> s {accountIds = a} :: ListOrganizationInsights) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listOrganizationInsights_maxResults :: Lens.Lens' ListOrganizationInsights (Prelude.Maybe Prelude.Natural)
+listOrganizationInsights_maxResults = Lens.lens (\ListOrganizationInsights' {maxResults} -> maxResults) (\s@ListOrganizationInsights' {} a -> s {maxResults = a} :: ListOrganizationInsights)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listOrganizationInsights_nextToken :: Lens.Lens' ListOrganizationInsights (Prelude.Maybe Prelude.Text)
+listOrganizationInsights_nextToken = Lens.lens (\ListOrganizationInsights' {nextToken} -> nextToken) (\s@ListOrganizationInsights' {} a -> s {nextToken = a} :: ListOrganizationInsights)
+
+-- | The ID of the organizational unit.
+listOrganizationInsights_organizationalUnitIds :: Lens.Lens' ListOrganizationInsights (Prelude.Maybe [Prelude.Text])
+listOrganizationInsights_organizationalUnitIds = Lens.lens (\ListOrganizationInsights' {organizationalUnitIds} -> organizationalUnitIds) (\s@ListOrganizationInsights' {} a -> s {organizationalUnitIds = a} :: ListOrganizationInsights) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+listOrganizationInsights_statusFilter :: Lens.Lens' ListOrganizationInsights ListInsightsStatusFilter
+listOrganizationInsights_statusFilter = Lens.lens (\ListOrganizationInsights' {statusFilter} -> statusFilter) (\s@ListOrganizationInsights' {} a -> s {statusFilter = a} :: ListOrganizationInsights)
+
+instance Core.AWSPager ListOrganizationInsights where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listOrganizationInsightsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listOrganizationInsightsResponse_proactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listOrganizationInsightsResponse_reactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listOrganizationInsights_nextToken
+          Lens..~ rs
+          Lens.^? listOrganizationInsightsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListOrganizationInsights where
+  type
+    AWSResponse ListOrganizationInsights =
+      ListOrganizationInsightsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListOrganizationInsightsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ProactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "ReactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListOrganizationInsights where
+  hashWithSalt _salt ListOrganizationInsights' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` organizationalUnitIds
+      `Prelude.hashWithSalt` statusFilter
+
+instance Prelude.NFData ListOrganizationInsights where
+  rnf ListOrganizationInsights' {..} =
+    Prelude.rnf accountIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf organizationalUnitIds
+      `Prelude.seq` Prelude.rnf statusFilter
+
+instance Data.ToHeaders ListOrganizationInsights where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListOrganizationInsights where
+  toJSON ListOrganizationInsights' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountIds" Data..=) Prelude.<$> accountIds,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("OrganizationalUnitIds" Data..=)
+              Prelude.<$> organizationalUnitIds,
+            Prelude.Just ("StatusFilter" Data..= statusFilter)
+          ]
+      )
+
+instance Data.ToPath ListOrganizationInsights where
+  toPath = Prelude.const "/organization/insights"
+
+instance Data.ToQuery ListOrganizationInsights where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListOrganizationInsightsResponse' smart constructor.
+data ListOrganizationInsightsResponse = ListOrganizationInsightsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account.
+    proactiveInsights :: Prelude.Maybe [ProactiveOrganizationInsightSummary],
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account.
+    reactiveInsights :: Prelude.Maybe [ReactiveOrganizationInsightSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOrganizationInsightsResponse' 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', 'listOrganizationInsightsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'proactiveInsights', 'listOrganizationInsightsResponse_proactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+--
+-- 'reactiveInsights', 'listOrganizationInsightsResponse_reactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+--
+-- 'httpStatus', 'listOrganizationInsightsResponse_httpStatus' - The response's http status code.
+newListOrganizationInsightsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListOrganizationInsightsResponse
+newListOrganizationInsightsResponse pHttpStatus_ =
+  ListOrganizationInsightsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      proactiveInsights = Prelude.Nothing,
+      reactiveInsights = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listOrganizationInsightsResponse_nextToken :: Lens.Lens' ListOrganizationInsightsResponse (Prelude.Maybe Prelude.Text)
+listOrganizationInsightsResponse_nextToken = Lens.lens (\ListOrganizationInsightsResponse' {nextToken} -> nextToken) (\s@ListOrganizationInsightsResponse' {} a -> s {nextToken = a} :: ListOrganizationInsightsResponse)
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+listOrganizationInsightsResponse_proactiveInsights :: Lens.Lens' ListOrganizationInsightsResponse (Prelude.Maybe [ProactiveOrganizationInsightSummary])
+listOrganizationInsightsResponse_proactiveInsights = Lens.lens (\ListOrganizationInsightsResponse' {proactiveInsights} -> proactiveInsights) (\s@ListOrganizationInsightsResponse' {} a -> s {proactiveInsights = a} :: ListOrganizationInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+listOrganizationInsightsResponse_reactiveInsights :: Lens.Lens' ListOrganizationInsightsResponse (Prelude.Maybe [ReactiveOrganizationInsightSummary])
+listOrganizationInsightsResponse_reactiveInsights = Lens.lens (\ListOrganizationInsightsResponse' {reactiveInsights} -> reactiveInsights) (\s@ListOrganizationInsightsResponse' {} a -> s {reactiveInsights = a} :: ListOrganizationInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listOrganizationInsightsResponse_httpStatus :: Lens.Lens' ListOrganizationInsightsResponse Prelude.Int
+listOrganizationInsightsResponse_httpStatus = Lens.lens (\ListOrganizationInsightsResponse' {httpStatus} -> httpStatus) (\s@ListOrganizationInsightsResponse' {} a -> s {httpStatus = a} :: ListOrganizationInsightsResponse)
+
+instance
+  Prelude.NFData
+    ListOrganizationInsightsResponse
+  where
+  rnf ListOrganizationInsightsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proactiveInsights
+      `Prelude.seq` Prelude.rnf reactiveInsights
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/ListRecommendations.hs b/gen/Amazonka/DevOpsGuru/ListRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/ListRecommendations.hs
@@ -0,0 +1,255 @@
+{-# 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.DevOpsGuru.ListRecommendations
+-- 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 a specified insight\'s recommendations. Each
+-- recommendation includes a list of related metrics and a list of related
+-- events.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.ListRecommendations
+  ( -- * Creating a Request
+    ListRecommendations (..),
+    newListRecommendations,
+
+    -- * Request Lenses
+    listRecommendations_accountId,
+    listRecommendations_locale,
+    listRecommendations_nextToken,
+    listRecommendations_insightId,
+
+    -- * Destructuring the Response
+    ListRecommendationsResponse (..),
+    newListRecommendationsResponse,
+
+    -- * Response Lenses
+    listRecommendationsResponse_nextToken,
+    listRecommendationsResponse_recommendations,
+    listRecommendationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRecommendations' smart constructor.
+data ListRecommendations = ListRecommendations'
+  { -- | The ID of the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | A locale that specifies the language to use for recommendations.
+    locale :: Prelude.Maybe Locale,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the requested insight.
+    insightId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendations' 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:
+--
+-- 'accountId', 'listRecommendations_accountId' - The ID of the Amazon Web Services account.
+--
+-- 'locale', 'listRecommendations_locale' - A locale that specifies the language to use for recommendations.
+--
+-- 'nextToken', 'listRecommendations_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'insightId', 'listRecommendations_insightId' - The ID of the requested insight.
+newListRecommendations ::
+  -- | 'insightId'
+  Prelude.Text ->
+  ListRecommendations
+newListRecommendations pInsightId_ =
+  ListRecommendations'
+    { accountId = Prelude.Nothing,
+      locale = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      insightId = pInsightId_
+    }
+
+-- | The ID of the Amazon Web Services account.
+listRecommendations_accountId :: Lens.Lens' ListRecommendations (Prelude.Maybe Prelude.Text)
+listRecommendations_accountId = Lens.lens (\ListRecommendations' {accountId} -> accountId) (\s@ListRecommendations' {} a -> s {accountId = a} :: ListRecommendations)
+
+-- | A locale that specifies the language to use for recommendations.
+listRecommendations_locale :: Lens.Lens' ListRecommendations (Prelude.Maybe Locale)
+listRecommendations_locale = Lens.lens (\ListRecommendations' {locale} -> locale) (\s@ListRecommendations' {} a -> s {locale = a} :: ListRecommendations)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listRecommendations_nextToken :: Lens.Lens' ListRecommendations (Prelude.Maybe Prelude.Text)
+listRecommendations_nextToken = Lens.lens (\ListRecommendations' {nextToken} -> nextToken) (\s@ListRecommendations' {} a -> s {nextToken = a} :: ListRecommendations)
+
+-- | The ID of the requested insight.
+listRecommendations_insightId :: Lens.Lens' ListRecommendations Prelude.Text
+listRecommendations_insightId = Lens.lens (\ListRecommendations' {insightId} -> insightId) (\s@ListRecommendations' {} a -> s {insightId = a} :: ListRecommendations)
+
+instance Core.AWSPager ListRecommendations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRecommendationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRecommendationsResponse_recommendations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRecommendations_nextToken
+          Lens..~ rs
+          Lens.^? listRecommendationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRecommendations where
+  type
+    AWSResponse ListRecommendations =
+      ListRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecommendationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "Recommendations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRecommendations where
+  hashWithSalt _salt ListRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` insightId
+
+instance Prelude.NFData ListRecommendations where
+  rnf ListRecommendations' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf insightId
+
+instance Data.ToHeaders ListRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRecommendations where
+  toJSON ListRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccountId" Data..=) Prelude.<$> accountId,
+            ("Locale" Data..=) Prelude.<$> locale,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("InsightId" Data..= insightId)
+          ]
+      )
+
+instance Data.ToPath ListRecommendations where
+  toPath = Prelude.const "/recommendations"
+
+instance Data.ToQuery ListRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListRecommendationsResponse' smart constructor.
+data ListRecommendationsResponse = ListRecommendationsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of the requested recommendations.
+    recommendations :: Prelude.Maybe [Recommendation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendationsResponse' 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', 'listRecommendationsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'recommendations', 'listRecommendationsResponse_recommendations' - An array of the requested recommendations.
+--
+-- 'httpStatus', 'listRecommendationsResponse_httpStatus' - The response's http status code.
+newListRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecommendationsResponse
+newListRecommendationsResponse pHttpStatus_ =
+  ListRecommendationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      recommendations = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listRecommendationsResponse_nextToken :: Lens.Lens' ListRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listRecommendationsResponse_nextToken = Lens.lens (\ListRecommendationsResponse' {nextToken} -> nextToken) (\s@ListRecommendationsResponse' {} a -> s {nextToken = a} :: ListRecommendationsResponse)
+
+-- | An array of the requested recommendations.
+listRecommendationsResponse_recommendations :: Lens.Lens' ListRecommendationsResponse (Prelude.Maybe [Recommendation])
+listRecommendationsResponse_recommendations = Lens.lens (\ListRecommendationsResponse' {recommendations} -> recommendations) (\s@ListRecommendationsResponse' {} a -> s {recommendations = a} :: ListRecommendationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRecommendationsResponse_httpStatus :: Lens.Lens' ListRecommendationsResponse Prelude.Int
+listRecommendationsResponse_httpStatus = Lens.lens (\ListRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListRecommendationsResponse' {} a -> s {httpStatus = a} :: ListRecommendationsResponse)
+
+instance Prelude.NFData ListRecommendationsResponse where
+  rnf ListRecommendationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recommendations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/PutFeedback.hs b/gen/Amazonka/DevOpsGuru/PutFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/PutFeedback.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.DevOpsGuru.PutFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Collects customer feedback about the specified insight.
+module Amazonka.DevOpsGuru.PutFeedback
+  ( -- * Creating a Request
+    PutFeedback (..),
+    newPutFeedback,
+
+    -- * Request Lenses
+    putFeedback_insightFeedback,
+
+    -- * Destructuring the Response
+    PutFeedbackResponse (..),
+    newPutFeedbackResponse,
+
+    -- * Response Lenses
+    putFeedbackResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutFeedback' smart constructor.
+data PutFeedback = PutFeedback'
+  { -- | The feedback from customers is about the recommendations in this
+    -- insight.
+    insightFeedback :: Prelude.Maybe InsightFeedback
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutFeedback' 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:
+--
+-- 'insightFeedback', 'putFeedback_insightFeedback' - The feedback from customers is about the recommendations in this
+-- insight.
+newPutFeedback ::
+  PutFeedback
+newPutFeedback =
+  PutFeedback' {insightFeedback = Prelude.Nothing}
+
+-- | The feedback from customers is about the recommendations in this
+-- insight.
+putFeedback_insightFeedback :: Lens.Lens' PutFeedback (Prelude.Maybe InsightFeedback)
+putFeedback_insightFeedback = Lens.lens (\PutFeedback' {insightFeedback} -> insightFeedback) (\s@PutFeedback' {} a -> s {insightFeedback = a} :: PutFeedback)
+
+instance Core.AWSRequest PutFeedback where
+  type AWSResponse PutFeedback = PutFeedbackResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutFeedbackResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutFeedback where
+  hashWithSalt _salt PutFeedback' {..} =
+    _salt `Prelude.hashWithSalt` insightFeedback
+
+instance Prelude.NFData PutFeedback where
+  rnf PutFeedback' {..} = Prelude.rnf insightFeedback
+
+instance Data.ToHeaders PutFeedback where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutFeedback where
+  toJSON PutFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("InsightFeedback" Data..=)
+              Prelude.<$> insightFeedback
+          ]
+      )
+
+instance Data.ToPath PutFeedback where
+  toPath = Prelude.const "/feedback"
+
+instance Data.ToQuery PutFeedback where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutFeedbackResponse' smart constructor.
+data PutFeedbackResponse = PutFeedbackResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutFeedbackResponse' 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:
+--
+-- 'httpStatus', 'putFeedbackResponse_httpStatus' - The response's http status code.
+newPutFeedbackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutFeedbackResponse
+newPutFeedbackResponse pHttpStatus_ =
+  PutFeedbackResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putFeedbackResponse_httpStatus :: Lens.Lens' PutFeedbackResponse Prelude.Int
+putFeedbackResponse_httpStatus = Lens.lens (\PutFeedbackResponse' {httpStatus} -> httpStatus) (\s@PutFeedbackResponse' {} a -> s {httpStatus = a} :: PutFeedbackResponse)
+
+instance Prelude.NFData PutFeedbackResponse where
+  rnf PutFeedbackResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/RemoveNotificationChannel.hs b/gen/Amazonka/DevOpsGuru/RemoveNotificationChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/RemoveNotificationChannel.hs
@@ -0,0 +1,151 @@
+{-# 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.DevOpsGuru.RemoveNotificationChannel
+-- 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 a notification channel from DevOps Guru. A notification channel
+-- is used to notify you when DevOps Guru generates an insight that
+-- contains information about how to improve your operations.
+module Amazonka.DevOpsGuru.RemoveNotificationChannel
+  ( -- * Creating a Request
+    RemoveNotificationChannel (..),
+    newRemoveNotificationChannel,
+
+    -- * Request Lenses
+    removeNotificationChannel_id,
+
+    -- * Destructuring the Response
+    RemoveNotificationChannelResponse (..),
+    newRemoveNotificationChannelResponse,
+
+    -- * Response Lenses
+    removeNotificationChannelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveNotificationChannel' smart constructor.
+data RemoveNotificationChannel = RemoveNotificationChannel'
+  { -- | The ID of the notification channel to be removed.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveNotificationChannel' 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:
+--
+-- 'id', 'removeNotificationChannel_id' - The ID of the notification channel to be removed.
+newRemoveNotificationChannel ::
+  -- | 'id'
+  Prelude.Text ->
+  RemoveNotificationChannel
+newRemoveNotificationChannel pId_ =
+  RemoveNotificationChannel' {id = pId_}
+
+-- | The ID of the notification channel to be removed.
+removeNotificationChannel_id :: Lens.Lens' RemoveNotificationChannel Prelude.Text
+removeNotificationChannel_id = Lens.lens (\RemoveNotificationChannel' {id} -> id) (\s@RemoveNotificationChannel' {} a -> s {id = a} :: RemoveNotificationChannel)
+
+instance Core.AWSRequest RemoveNotificationChannel where
+  type
+    AWSResponse RemoveNotificationChannel =
+      RemoveNotificationChannelResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RemoveNotificationChannelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveNotificationChannel where
+  hashWithSalt _salt RemoveNotificationChannel' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData RemoveNotificationChannel where
+  rnf RemoveNotificationChannel' {..} = Prelude.rnf id
+
+instance Data.ToHeaders RemoveNotificationChannel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveNotificationChannel where
+  toPath RemoveNotificationChannel' {..} =
+    Prelude.mconcat ["/channels/", Data.toBS id]
+
+instance Data.ToQuery RemoveNotificationChannel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveNotificationChannelResponse' smart constructor.
+data RemoveNotificationChannelResponse = RemoveNotificationChannelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveNotificationChannelResponse' 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:
+--
+-- 'httpStatus', 'removeNotificationChannelResponse_httpStatus' - The response's http status code.
+newRemoveNotificationChannelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveNotificationChannelResponse
+newRemoveNotificationChannelResponse pHttpStatus_ =
+  RemoveNotificationChannelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+removeNotificationChannelResponse_httpStatus :: Lens.Lens' RemoveNotificationChannelResponse Prelude.Int
+removeNotificationChannelResponse_httpStatus = Lens.lens (\RemoveNotificationChannelResponse' {httpStatus} -> httpStatus) (\s@RemoveNotificationChannelResponse' {} a -> s {httpStatus = a} :: RemoveNotificationChannelResponse)
+
+instance
+  Prelude.NFData
+    RemoveNotificationChannelResponse
+  where
+  rnf RemoveNotificationChannelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/SearchInsights.hs b/gen/Amazonka/DevOpsGuru/SearchInsights.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/SearchInsights.hs
@@ -0,0 +1,309 @@
+{-# 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.DevOpsGuru.SearchInsights
+-- 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 insights in your Amazon Web Services account. You can
+-- specify which insights are returned by their start time, one or more
+-- statuses (@ONGOING@ or @CLOSED@), one or more severities (@LOW@,
+-- @MEDIUM@, and @HIGH@), and type (@REACTIVE@ or @PROACTIVE@).
+--
+-- Use the @Filters@ parameter to specify status and severity search
+-- parameters. Use the @Type@ parameter to specify @REACTIVE@ or
+-- @PROACTIVE@ in your search.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.SearchInsights
+  ( -- * Creating a Request
+    SearchInsights (..),
+    newSearchInsights,
+
+    -- * Request Lenses
+    searchInsights_filters,
+    searchInsights_maxResults,
+    searchInsights_nextToken,
+    searchInsights_startTimeRange,
+    searchInsights_type,
+
+    -- * Destructuring the Response
+    SearchInsightsResponse (..),
+    newSearchInsightsResponse,
+
+    -- * Response Lenses
+    searchInsightsResponse_nextToken,
+    searchInsightsResponse_proactiveInsights,
+    searchInsightsResponse_reactiveInsights,
+    searchInsightsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchInsights' smart constructor.
+data SearchInsights = SearchInsights'
+  { -- | A @SearchInsightsFilters@ object that is used to set the severity and
+    -- status filters on your insight search.
+    filters :: Prelude.Maybe SearchInsightsFilters,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The start of the time range passed in. Returned insights occurred after
+    -- this time.
+    startTimeRange :: StartTimeRange,
+    -- | The type of insights you are searching for (@REACTIVE@ or @PROACTIVE@).
+    type' :: InsightType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchInsights' 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:
+--
+-- 'filters', 'searchInsights_filters' - A @SearchInsightsFilters@ object that is used to set the severity and
+-- status filters on your insight search.
+--
+-- 'maxResults', 'searchInsights_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'searchInsights_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'startTimeRange', 'searchInsights_startTimeRange' - The start of the time range passed in. Returned insights occurred after
+-- this time.
+--
+-- 'type'', 'searchInsights_type' - The type of insights you are searching for (@REACTIVE@ or @PROACTIVE@).
+newSearchInsights ::
+  -- | 'startTimeRange'
+  StartTimeRange ->
+  -- | 'type''
+  InsightType ->
+  SearchInsights
+newSearchInsights pStartTimeRange_ pType_ =
+  SearchInsights'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTimeRange = pStartTimeRange_,
+      type' = pType_
+    }
+
+-- | A @SearchInsightsFilters@ object that is used to set the severity and
+-- status filters on your insight search.
+searchInsights_filters :: Lens.Lens' SearchInsights (Prelude.Maybe SearchInsightsFilters)
+searchInsights_filters = Lens.lens (\SearchInsights' {filters} -> filters) (\s@SearchInsights' {} a -> s {filters = a} :: SearchInsights)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+searchInsights_maxResults :: Lens.Lens' SearchInsights (Prelude.Maybe Prelude.Natural)
+searchInsights_maxResults = Lens.lens (\SearchInsights' {maxResults} -> maxResults) (\s@SearchInsights' {} a -> s {maxResults = a} :: SearchInsights)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+searchInsights_nextToken :: Lens.Lens' SearchInsights (Prelude.Maybe Prelude.Text)
+searchInsights_nextToken = Lens.lens (\SearchInsights' {nextToken} -> nextToken) (\s@SearchInsights' {} a -> s {nextToken = a} :: SearchInsights)
+
+-- | The start of the time range passed in. Returned insights occurred after
+-- this time.
+searchInsights_startTimeRange :: Lens.Lens' SearchInsights StartTimeRange
+searchInsights_startTimeRange = Lens.lens (\SearchInsights' {startTimeRange} -> startTimeRange) (\s@SearchInsights' {} a -> s {startTimeRange = a} :: SearchInsights)
+
+-- | The type of insights you are searching for (@REACTIVE@ or @PROACTIVE@).
+searchInsights_type :: Lens.Lens' SearchInsights InsightType
+searchInsights_type = Lens.lens (\SearchInsights' {type'} -> type') (\s@SearchInsights' {} a -> s {type' = a} :: SearchInsights)
+
+instance Core.AWSPager SearchInsights where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchInsightsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchInsightsResponse_proactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchInsightsResponse_reactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchInsights_nextToken
+          Lens..~ rs
+          Lens.^? searchInsightsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchInsights where
+  type
+    AWSResponse SearchInsights =
+      SearchInsightsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchInsightsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ProactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "ReactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchInsights where
+  hashWithSalt _salt SearchInsights' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTimeRange
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SearchInsights where
+  rnf SearchInsights' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTimeRange
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders SearchInsights where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchInsights where
+  toJSON SearchInsights' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("StartTimeRange" Data..= startTimeRange),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath SearchInsights where
+  toPath = Prelude.const "/insights/search"
+
+instance Data.ToQuery SearchInsights where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchInsightsResponse' smart constructor.
+data SearchInsightsResponse = SearchInsightsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The returned proactive insights.
+    proactiveInsights :: Prelude.Maybe [ProactiveInsightSummary],
+    -- | The returned reactive insights.
+    reactiveInsights :: Prelude.Maybe [ReactiveInsightSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchInsightsResponse' 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', 'searchInsightsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'proactiveInsights', 'searchInsightsResponse_proactiveInsights' - The returned proactive insights.
+--
+-- 'reactiveInsights', 'searchInsightsResponse_reactiveInsights' - The returned reactive insights.
+--
+-- 'httpStatus', 'searchInsightsResponse_httpStatus' - The response's http status code.
+newSearchInsightsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchInsightsResponse
+newSearchInsightsResponse pHttpStatus_ =
+  SearchInsightsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      proactiveInsights = Prelude.Nothing,
+      reactiveInsights = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+searchInsightsResponse_nextToken :: Lens.Lens' SearchInsightsResponse (Prelude.Maybe Prelude.Text)
+searchInsightsResponse_nextToken = Lens.lens (\SearchInsightsResponse' {nextToken} -> nextToken) (\s@SearchInsightsResponse' {} a -> s {nextToken = a} :: SearchInsightsResponse)
+
+-- | The returned proactive insights.
+searchInsightsResponse_proactiveInsights :: Lens.Lens' SearchInsightsResponse (Prelude.Maybe [ProactiveInsightSummary])
+searchInsightsResponse_proactiveInsights = Lens.lens (\SearchInsightsResponse' {proactiveInsights} -> proactiveInsights) (\s@SearchInsightsResponse' {} a -> s {proactiveInsights = a} :: SearchInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The returned reactive insights.
+searchInsightsResponse_reactiveInsights :: Lens.Lens' SearchInsightsResponse (Prelude.Maybe [ReactiveInsightSummary])
+searchInsightsResponse_reactiveInsights = Lens.lens (\SearchInsightsResponse' {reactiveInsights} -> reactiveInsights) (\s@SearchInsightsResponse' {} a -> s {reactiveInsights = a} :: SearchInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+searchInsightsResponse_httpStatus :: Lens.Lens' SearchInsightsResponse Prelude.Int
+searchInsightsResponse_httpStatus = Lens.lens (\SearchInsightsResponse' {httpStatus} -> httpStatus) (\s@SearchInsightsResponse' {} a -> s {httpStatus = a} :: SearchInsightsResponse)
+
+instance Prelude.NFData SearchInsightsResponse where
+  rnf SearchInsightsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proactiveInsights
+      `Prelude.seq` Prelude.rnf reactiveInsights
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/SearchOrganizationInsights.hs b/gen/Amazonka/DevOpsGuru/SearchOrganizationInsights.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/SearchOrganizationInsights.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.DevOpsGuru.SearchOrganizationInsights
+-- 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 insights in your organization. You can specify which
+-- insights are returned by their start time, one or more statuses
+-- (@ONGOING@, @CLOSED@, and @CLOSED@), one or more severities (@LOW@,
+-- @MEDIUM@, and @HIGH@), and type (@REACTIVE@ or @PROACTIVE@).
+--
+-- Use the @Filters@ parameter to specify status and severity search
+-- parameters. Use the @Type@ parameter to specify @REACTIVE@ or
+-- @PROACTIVE@ in your search.
+--
+-- This operation returns paginated results.
+module Amazonka.DevOpsGuru.SearchOrganizationInsights
+  ( -- * Creating a Request
+    SearchOrganizationInsights (..),
+    newSearchOrganizationInsights,
+
+    -- * Request Lenses
+    searchOrganizationInsights_filters,
+    searchOrganizationInsights_maxResults,
+    searchOrganizationInsights_nextToken,
+    searchOrganizationInsights_accountIds,
+    searchOrganizationInsights_startTimeRange,
+    searchOrganizationInsights_type,
+
+    -- * Destructuring the Response
+    SearchOrganizationInsightsResponse (..),
+    newSearchOrganizationInsightsResponse,
+
+    -- * Response Lenses
+    searchOrganizationInsightsResponse_nextToken,
+    searchOrganizationInsightsResponse_proactiveInsights,
+    searchOrganizationInsightsResponse_reactiveInsights,
+    searchOrganizationInsightsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchOrganizationInsights' smart constructor.
+data SearchOrganizationInsights = SearchOrganizationInsights'
+  { -- | A @SearchOrganizationInsightsFilters@ object that is used to set the
+    -- severity and status filters on your insight search.
+    filters :: Prelude.Maybe SearchOrganizationInsightsFilters,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account.
+    accountIds :: Prelude.NonEmpty Prelude.Text,
+    startTimeRange :: StartTimeRange,
+    -- | The type of insights you are searching for (@REACTIVE@ or @PROACTIVE@).
+    type' :: InsightType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchOrganizationInsights' 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:
+--
+-- 'filters', 'searchOrganizationInsights_filters' - A @SearchOrganizationInsightsFilters@ object that is used to set the
+-- severity and status filters on your insight search.
+--
+-- 'maxResults', 'searchOrganizationInsights_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'searchOrganizationInsights_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'accountIds', 'searchOrganizationInsights_accountIds' - The ID of the Amazon Web Services account.
+--
+-- 'startTimeRange', 'searchOrganizationInsights_startTimeRange' - Undocumented member.
+--
+-- 'type'', 'searchOrganizationInsights_type' - The type of insights you are searching for (@REACTIVE@ or @PROACTIVE@).
+newSearchOrganizationInsights ::
+  -- | 'accountIds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'startTimeRange'
+  StartTimeRange ->
+  -- | 'type''
+  InsightType ->
+  SearchOrganizationInsights
+newSearchOrganizationInsights
+  pAccountIds_
+  pStartTimeRange_
+  pType_ =
+    SearchOrganizationInsights'
+      { filters =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        accountIds = Lens.coerced Lens.# pAccountIds_,
+        startTimeRange = pStartTimeRange_,
+        type' = pType_
+      }
+
+-- | A @SearchOrganizationInsightsFilters@ object that is used to set the
+-- severity and status filters on your insight search.
+searchOrganizationInsights_filters :: Lens.Lens' SearchOrganizationInsights (Prelude.Maybe SearchOrganizationInsightsFilters)
+searchOrganizationInsights_filters = Lens.lens (\SearchOrganizationInsights' {filters} -> filters) (\s@SearchOrganizationInsights' {} a -> s {filters = a} :: SearchOrganizationInsights)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+searchOrganizationInsights_maxResults :: Lens.Lens' SearchOrganizationInsights (Prelude.Maybe Prelude.Natural)
+searchOrganizationInsights_maxResults = Lens.lens (\SearchOrganizationInsights' {maxResults} -> maxResults) (\s@SearchOrganizationInsights' {} a -> s {maxResults = a} :: SearchOrganizationInsights)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+searchOrganizationInsights_nextToken :: Lens.Lens' SearchOrganizationInsights (Prelude.Maybe Prelude.Text)
+searchOrganizationInsights_nextToken = Lens.lens (\SearchOrganizationInsights' {nextToken} -> nextToken) (\s@SearchOrganizationInsights' {} a -> s {nextToken = a} :: SearchOrganizationInsights)
+
+-- | The ID of the Amazon Web Services account.
+searchOrganizationInsights_accountIds :: Lens.Lens' SearchOrganizationInsights (Prelude.NonEmpty Prelude.Text)
+searchOrganizationInsights_accountIds = Lens.lens (\SearchOrganizationInsights' {accountIds} -> accountIds) (\s@SearchOrganizationInsights' {} a -> s {accountIds = a} :: SearchOrganizationInsights) Prelude.. Lens.coerced
+
+-- | Undocumented member.
+searchOrganizationInsights_startTimeRange :: Lens.Lens' SearchOrganizationInsights StartTimeRange
+searchOrganizationInsights_startTimeRange = Lens.lens (\SearchOrganizationInsights' {startTimeRange} -> startTimeRange) (\s@SearchOrganizationInsights' {} a -> s {startTimeRange = a} :: SearchOrganizationInsights)
+
+-- | The type of insights you are searching for (@REACTIVE@ or @PROACTIVE@).
+searchOrganizationInsights_type :: Lens.Lens' SearchOrganizationInsights InsightType
+searchOrganizationInsights_type = Lens.lens (\SearchOrganizationInsights' {type'} -> type') (\s@SearchOrganizationInsights' {} a -> s {type' = a} :: SearchOrganizationInsights)
+
+instance Core.AWSPager SearchOrganizationInsights where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchOrganizationInsightsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchOrganizationInsightsResponse_proactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchOrganizationInsightsResponse_reactiveInsights
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchOrganizationInsights_nextToken
+          Lens..~ rs
+          Lens.^? searchOrganizationInsightsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchOrganizationInsights where
+  type
+    AWSResponse SearchOrganizationInsights =
+      SearchOrganizationInsightsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchOrganizationInsightsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ProactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "ReactiveInsights"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchOrganizationInsights where
+  hashWithSalt _salt SearchOrganizationInsights' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` accountIds
+      `Prelude.hashWithSalt` startTimeRange
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SearchOrganizationInsights where
+  rnf SearchOrganizationInsights' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf accountIds
+      `Prelude.seq` Prelude.rnf startTimeRange
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders SearchOrganizationInsights where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchOrganizationInsights where
+  toJSON SearchOrganizationInsights' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("AccountIds" Data..= accountIds),
+            Prelude.Just
+              ("StartTimeRange" Data..= startTimeRange),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath SearchOrganizationInsights where
+  toPath =
+    Prelude.const "/organization/insights/search"
+
+instance Data.ToQuery SearchOrganizationInsights where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchOrganizationInsightsResponse' smart constructor.
+data SearchOrganizationInsightsResponse = SearchOrganizationInsightsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account.
+    proactiveInsights :: Prelude.Maybe [ProactiveInsightSummary],
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account.
+    reactiveInsights :: Prelude.Maybe [ReactiveInsightSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchOrganizationInsightsResponse' 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', 'searchOrganizationInsightsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'proactiveInsights', 'searchOrganizationInsightsResponse_proactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+--
+-- 'reactiveInsights', 'searchOrganizationInsightsResponse_reactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+--
+-- 'httpStatus', 'searchOrganizationInsightsResponse_httpStatus' - The response's http status code.
+newSearchOrganizationInsightsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchOrganizationInsightsResponse
+newSearchOrganizationInsightsResponse pHttpStatus_ =
+  SearchOrganizationInsightsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      proactiveInsights = Prelude.Nothing,
+      reactiveInsights = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+searchOrganizationInsightsResponse_nextToken :: Lens.Lens' SearchOrganizationInsightsResponse (Prelude.Maybe Prelude.Text)
+searchOrganizationInsightsResponse_nextToken = Lens.lens (\SearchOrganizationInsightsResponse' {nextToken} -> nextToken) (\s@SearchOrganizationInsightsResponse' {} a -> s {nextToken = a} :: SearchOrganizationInsightsResponse)
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+searchOrganizationInsightsResponse_proactiveInsights :: Lens.Lens' SearchOrganizationInsightsResponse (Prelude.Maybe [ProactiveInsightSummary])
+searchOrganizationInsightsResponse_proactiveInsights = Lens.lens (\SearchOrganizationInsightsResponse' {proactiveInsights} -> proactiveInsights) (\s@SearchOrganizationInsightsResponse' {} a -> s {proactiveInsights = a} :: SearchOrganizationInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+searchOrganizationInsightsResponse_reactiveInsights :: Lens.Lens' SearchOrganizationInsightsResponse (Prelude.Maybe [ReactiveInsightSummary])
+searchOrganizationInsightsResponse_reactiveInsights = Lens.lens (\SearchOrganizationInsightsResponse' {reactiveInsights} -> reactiveInsights) (\s@SearchOrganizationInsightsResponse' {} a -> s {reactiveInsights = a} :: SearchOrganizationInsightsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+searchOrganizationInsightsResponse_httpStatus :: Lens.Lens' SearchOrganizationInsightsResponse Prelude.Int
+searchOrganizationInsightsResponse_httpStatus = Lens.lens (\SearchOrganizationInsightsResponse' {httpStatus} -> httpStatus) (\s@SearchOrganizationInsightsResponse' {} a -> s {httpStatus = a} :: SearchOrganizationInsightsResponse)
+
+instance
+  Prelude.NFData
+    SearchOrganizationInsightsResponse
+  where
+  rnf SearchOrganizationInsightsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proactiveInsights
+      `Prelude.seq` Prelude.rnf reactiveInsights
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/StartCostEstimation.hs b/gen/Amazonka/DevOpsGuru/StartCostEstimation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/StartCostEstimation.hs
@@ -0,0 +1,175 @@
+{-# 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.DevOpsGuru.StartCostEstimation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts the creation of an estimate of the monthly cost to analyze your
+-- Amazon Web Services resources.
+module Amazonka.DevOpsGuru.StartCostEstimation
+  ( -- * Creating a Request
+    StartCostEstimation (..),
+    newStartCostEstimation,
+
+    -- * Request Lenses
+    startCostEstimation_clientToken,
+    startCostEstimation_resourceCollection,
+
+    -- * Destructuring the Response
+    StartCostEstimationResponse (..),
+    newStartCostEstimationResponse,
+
+    -- * Response Lenses
+    startCostEstimationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartCostEstimation' smart constructor.
+data StartCostEstimation = StartCostEstimation'
+  { -- | The idempotency token used to identify each cost estimate request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The collection of Amazon Web Services resources used to create a monthly
+    -- DevOps Guru cost estimate.
+    resourceCollection :: CostEstimationResourceCollectionFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartCostEstimation' 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:
+--
+-- 'clientToken', 'startCostEstimation_clientToken' - The idempotency token used to identify each cost estimate request.
+--
+-- 'resourceCollection', 'startCostEstimation_resourceCollection' - The collection of Amazon Web Services resources used to create a monthly
+-- DevOps Guru cost estimate.
+newStartCostEstimation ::
+  -- | 'resourceCollection'
+  CostEstimationResourceCollectionFilter ->
+  StartCostEstimation
+newStartCostEstimation pResourceCollection_ =
+  StartCostEstimation'
+    { clientToken = Prelude.Nothing,
+      resourceCollection = pResourceCollection_
+    }
+
+-- | The idempotency token used to identify each cost estimate request.
+startCostEstimation_clientToken :: Lens.Lens' StartCostEstimation (Prelude.Maybe Prelude.Text)
+startCostEstimation_clientToken = Lens.lens (\StartCostEstimation' {clientToken} -> clientToken) (\s@StartCostEstimation' {} a -> s {clientToken = a} :: StartCostEstimation)
+
+-- | The collection of Amazon Web Services resources used to create a monthly
+-- DevOps Guru cost estimate.
+startCostEstimation_resourceCollection :: Lens.Lens' StartCostEstimation CostEstimationResourceCollectionFilter
+startCostEstimation_resourceCollection = Lens.lens (\StartCostEstimation' {resourceCollection} -> resourceCollection) (\s@StartCostEstimation' {} a -> s {resourceCollection = a} :: StartCostEstimation)
+
+instance Core.AWSRequest StartCostEstimation where
+  type
+    AWSResponse StartCostEstimation =
+      StartCostEstimationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartCostEstimationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartCostEstimation where
+  hashWithSalt _salt StartCostEstimation' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` resourceCollection
+
+instance Prelude.NFData StartCostEstimation where
+  rnf StartCostEstimation' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf resourceCollection
+
+instance Data.ToHeaders StartCostEstimation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartCostEstimation where
+  toJSON StartCostEstimation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just
+              ("ResourceCollection" Data..= resourceCollection)
+          ]
+      )
+
+instance Data.ToPath StartCostEstimation where
+  toPath = Prelude.const "/cost-estimation"
+
+instance Data.ToQuery StartCostEstimation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartCostEstimationResponse' smart constructor.
+data StartCostEstimationResponse = StartCostEstimationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartCostEstimationResponse' 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:
+--
+-- 'httpStatus', 'startCostEstimationResponse_httpStatus' - The response's http status code.
+newStartCostEstimationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartCostEstimationResponse
+newStartCostEstimationResponse pHttpStatus_ =
+  StartCostEstimationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+startCostEstimationResponse_httpStatus :: Lens.Lens' StartCostEstimationResponse Prelude.Int
+startCostEstimationResponse_httpStatus = Lens.lens (\StartCostEstimationResponse' {httpStatus} -> httpStatus) (\s@StartCostEstimationResponse' {} a -> s {httpStatus = a} :: StartCostEstimationResponse)
+
+instance Prelude.NFData StartCostEstimationResponse where
+  rnf StartCostEstimationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/Types.hs b/gen/Amazonka/DevOpsGuru/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types.hs
@@ -0,0 +1,999 @@
+{-# 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.DevOpsGuru.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.DevOpsGuru.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AnomalySeverity
+    AnomalySeverity (..),
+
+    -- * AnomalyStatus
+    AnomalyStatus (..),
+
+    -- * AnomalyType
+    AnomalyType (..),
+
+    -- * CloudWatchMetricDataStatusCode
+    CloudWatchMetricDataStatusCode (..),
+
+    -- * CloudWatchMetricsStat
+    CloudWatchMetricsStat (..),
+
+    -- * CostEstimationServiceResourceState
+    CostEstimationServiceResourceState (..),
+
+    -- * CostEstimationStatus
+    CostEstimationStatus (..),
+
+    -- * EventClass
+    EventClass (..),
+
+    -- * EventDataSource
+    EventDataSource (..),
+
+    -- * EventSourceOptInStatus
+    EventSourceOptInStatus (..),
+
+    -- * InsightFeedbackOption
+    InsightFeedbackOption (..),
+
+    -- * InsightSeverity
+    InsightSeverity (..),
+
+    -- * InsightStatus
+    InsightStatus (..),
+
+    -- * InsightType
+    InsightType (..),
+
+    -- * Locale
+    Locale (..),
+
+    -- * LogAnomalyType
+    LogAnomalyType (..),
+
+    -- * NotificationMessageType
+    NotificationMessageType (..),
+
+    -- * OptInStatus
+    OptInStatus (..),
+
+    -- * OrganizationResourceCollectionType
+    OrganizationResourceCollectionType (..),
+
+    -- * ResourceCollectionType
+    ResourceCollectionType (..),
+
+    -- * ResourcePermission
+    ResourcePermission (..),
+
+    -- * ResourceTypeFilter
+    ResourceTypeFilter (..),
+
+    -- * ServiceName
+    ServiceName (..),
+
+    -- * UpdateResourceCollectionAction
+    UpdateResourceCollectionAction (..),
+
+    -- * AccountHealth
+    AccountHealth (..),
+    newAccountHealth,
+    accountHealth_accountId,
+    accountHealth_insight,
+
+    -- * AccountInsightHealth
+    AccountInsightHealth (..),
+    newAccountInsightHealth,
+    accountInsightHealth_openProactiveInsights,
+    accountInsightHealth_openReactiveInsights,
+
+    -- * AmazonCodeGuruProfilerIntegration
+    AmazonCodeGuruProfilerIntegration (..),
+    newAmazonCodeGuruProfilerIntegration,
+    amazonCodeGuruProfilerIntegration_status,
+
+    -- * AnomalousLogGroup
+    AnomalousLogGroup (..),
+    newAnomalousLogGroup,
+    anomalousLogGroup_impactEndTime,
+    anomalousLogGroup_impactStartTime,
+    anomalousLogGroup_logAnomalyShowcases,
+    anomalousLogGroup_logGroupName,
+    anomalousLogGroup_numberOfLogLinesScanned,
+
+    -- * AnomalyReportedTimeRange
+    AnomalyReportedTimeRange (..),
+    newAnomalyReportedTimeRange,
+    anomalyReportedTimeRange_closeTime,
+    anomalyReportedTimeRange_openTime,
+
+    -- * AnomalyResource
+    AnomalyResource (..),
+    newAnomalyResource,
+    anomalyResource_name,
+    anomalyResource_type,
+
+    -- * AnomalySourceDetails
+    AnomalySourceDetails (..),
+    newAnomalySourceDetails,
+    anomalySourceDetails_cloudWatchMetrics,
+    anomalySourceDetails_performanceInsightsMetrics,
+
+    -- * AnomalySourceMetadata
+    AnomalySourceMetadata (..),
+    newAnomalySourceMetadata,
+    anomalySourceMetadata_source,
+    anomalySourceMetadata_sourceResourceName,
+    anomalySourceMetadata_sourceResourceType,
+
+    -- * AnomalyTimeRange
+    AnomalyTimeRange (..),
+    newAnomalyTimeRange,
+    anomalyTimeRange_endTime,
+    anomalyTimeRange_startTime,
+
+    -- * CloudFormationCollection
+    CloudFormationCollection (..),
+    newCloudFormationCollection,
+    cloudFormationCollection_stackNames,
+
+    -- * CloudFormationCollectionFilter
+    CloudFormationCollectionFilter (..),
+    newCloudFormationCollectionFilter,
+    cloudFormationCollectionFilter_stackNames,
+
+    -- * CloudFormationCostEstimationResourceCollectionFilter
+    CloudFormationCostEstimationResourceCollectionFilter (..),
+    newCloudFormationCostEstimationResourceCollectionFilter,
+    cloudFormationCostEstimationResourceCollectionFilter_stackNames,
+
+    -- * CloudFormationHealth
+    CloudFormationHealth (..),
+    newCloudFormationHealth,
+    cloudFormationHealth_analyzedResourceCount,
+    cloudFormationHealth_insight,
+    cloudFormationHealth_stackName,
+
+    -- * CloudWatchMetricsDataSummary
+    CloudWatchMetricsDataSummary (..),
+    newCloudWatchMetricsDataSummary,
+    cloudWatchMetricsDataSummary_statusCode,
+    cloudWatchMetricsDataSummary_timestampMetricValuePairList,
+
+    -- * CloudWatchMetricsDetail
+    CloudWatchMetricsDetail (..),
+    newCloudWatchMetricsDetail,
+    cloudWatchMetricsDetail_dimensions,
+    cloudWatchMetricsDetail_metricDataSummary,
+    cloudWatchMetricsDetail_metricName,
+    cloudWatchMetricsDetail_namespace,
+    cloudWatchMetricsDetail_period,
+    cloudWatchMetricsDetail_stat,
+    cloudWatchMetricsDetail_unit,
+
+    -- * CloudWatchMetricsDimension
+    CloudWatchMetricsDimension (..),
+    newCloudWatchMetricsDimension,
+    cloudWatchMetricsDimension_name,
+    cloudWatchMetricsDimension_value,
+
+    -- * CostEstimationResourceCollectionFilter
+    CostEstimationResourceCollectionFilter (..),
+    newCostEstimationResourceCollectionFilter,
+    costEstimationResourceCollectionFilter_cloudFormation,
+    costEstimationResourceCollectionFilter_tags,
+
+    -- * CostEstimationTimeRange
+    CostEstimationTimeRange (..),
+    newCostEstimationTimeRange,
+    costEstimationTimeRange_endTime,
+    costEstimationTimeRange_startTime,
+
+    -- * EndTimeRange
+    EndTimeRange (..),
+    newEndTimeRange,
+    endTimeRange_fromTime,
+    endTimeRange_toTime,
+
+    -- * Event
+    Event (..),
+    newEvent,
+    event_dataSource,
+    event_eventClass,
+    event_eventSource,
+    event_id,
+    event_name,
+    event_resourceCollection,
+    event_resources,
+    event_time,
+
+    -- * EventResource
+    EventResource (..),
+    newEventResource,
+    eventResource_arn,
+    eventResource_name,
+    eventResource_type,
+
+    -- * EventSourcesConfig
+    EventSourcesConfig (..),
+    newEventSourcesConfig,
+    eventSourcesConfig_amazonCodeGuruProfiler,
+
+    -- * EventTimeRange
+    EventTimeRange (..),
+    newEventTimeRange,
+    eventTimeRange_fromTime,
+    eventTimeRange_toTime,
+
+    -- * InsightFeedback
+    InsightFeedback (..),
+    newInsightFeedback,
+    insightFeedback_feedback,
+    insightFeedback_id,
+
+    -- * InsightHealth
+    InsightHealth (..),
+    newInsightHealth,
+    insightHealth_meanTimeToRecoverInMilliseconds,
+    insightHealth_openProactiveInsights,
+    insightHealth_openReactiveInsights,
+
+    -- * InsightTimeRange
+    InsightTimeRange (..),
+    newInsightTimeRange,
+    insightTimeRange_endTime,
+    insightTimeRange_startTime,
+
+    -- * ListEventsFilters
+    ListEventsFilters (..),
+    newListEventsFilters,
+    listEventsFilters_dataSource,
+    listEventsFilters_eventClass,
+    listEventsFilters_eventSource,
+    listEventsFilters_eventTimeRange,
+    listEventsFilters_insightId,
+    listEventsFilters_resourceCollection,
+
+    -- * ListInsightsAnyStatusFilter
+    ListInsightsAnyStatusFilter (..),
+    newListInsightsAnyStatusFilter,
+    listInsightsAnyStatusFilter_type,
+    listInsightsAnyStatusFilter_startTimeRange,
+
+    -- * ListInsightsClosedStatusFilter
+    ListInsightsClosedStatusFilter (..),
+    newListInsightsClosedStatusFilter,
+    listInsightsClosedStatusFilter_type,
+    listInsightsClosedStatusFilter_endTimeRange,
+
+    -- * ListInsightsOngoingStatusFilter
+    ListInsightsOngoingStatusFilter (..),
+    newListInsightsOngoingStatusFilter,
+    listInsightsOngoingStatusFilter_type,
+
+    -- * ListInsightsStatusFilter
+    ListInsightsStatusFilter (..),
+    newListInsightsStatusFilter,
+    listInsightsStatusFilter_any,
+    listInsightsStatusFilter_closed,
+    listInsightsStatusFilter_ongoing,
+
+    -- * ListMonitoredResourcesFilters
+    ListMonitoredResourcesFilters (..),
+    newListMonitoredResourcesFilters,
+    listMonitoredResourcesFilters_resourcePermission,
+    listMonitoredResourcesFilters_resourceTypeFilters,
+
+    -- * LogAnomalyClass
+    LogAnomalyClass (..),
+    newLogAnomalyClass,
+    logAnomalyClass_explanation,
+    logAnomalyClass_logAnomalyToken,
+    logAnomalyClass_logAnomalyType,
+    logAnomalyClass_logEventId,
+    logAnomalyClass_logEventTimestamp,
+    logAnomalyClass_logStreamName,
+    logAnomalyClass_numberOfLogLinesOccurrences,
+
+    -- * LogAnomalyShowcase
+    LogAnomalyShowcase (..),
+    newLogAnomalyShowcase,
+    logAnomalyShowcase_logAnomalyClasses,
+
+    -- * LogsAnomalyDetectionIntegration
+    LogsAnomalyDetectionIntegration (..),
+    newLogsAnomalyDetectionIntegration,
+    logsAnomalyDetectionIntegration_optInStatus,
+
+    -- * LogsAnomalyDetectionIntegrationConfig
+    LogsAnomalyDetectionIntegrationConfig (..),
+    newLogsAnomalyDetectionIntegrationConfig,
+    logsAnomalyDetectionIntegrationConfig_optInStatus,
+
+    -- * MonitoredResourceIdentifier
+    MonitoredResourceIdentifier (..),
+    newMonitoredResourceIdentifier,
+    monitoredResourceIdentifier_lastUpdated,
+    monitoredResourceIdentifier_monitoredResourceName,
+    monitoredResourceIdentifier_resourceCollection,
+    monitoredResourceIdentifier_resourcePermission,
+    monitoredResourceIdentifier_type,
+
+    -- * NotificationChannel
+    NotificationChannel (..),
+    newNotificationChannel,
+    notificationChannel_config,
+    notificationChannel_id,
+
+    -- * NotificationChannelConfig
+    NotificationChannelConfig (..),
+    newNotificationChannelConfig,
+    notificationChannelConfig_filters,
+    notificationChannelConfig_sns,
+
+    -- * NotificationFilterConfig
+    NotificationFilterConfig (..),
+    newNotificationFilterConfig,
+    notificationFilterConfig_messageTypes,
+    notificationFilterConfig_severities,
+
+    -- * OpsCenterIntegration
+    OpsCenterIntegration (..),
+    newOpsCenterIntegration,
+    opsCenterIntegration_optInStatus,
+
+    -- * OpsCenterIntegrationConfig
+    OpsCenterIntegrationConfig (..),
+    newOpsCenterIntegrationConfig,
+    opsCenterIntegrationConfig_optInStatus,
+
+    -- * PerformanceInsightsMetricDimensionGroup
+    PerformanceInsightsMetricDimensionGroup (..),
+    newPerformanceInsightsMetricDimensionGroup,
+    performanceInsightsMetricDimensionGroup_dimensions,
+    performanceInsightsMetricDimensionGroup_group,
+    performanceInsightsMetricDimensionGroup_limit,
+
+    -- * PerformanceInsightsMetricQuery
+    PerformanceInsightsMetricQuery (..),
+    newPerformanceInsightsMetricQuery,
+    performanceInsightsMetricQuery_filter,
+    performanceInsightsMetricQuery_groupBy,
+    performanceInsightsMetricQuery_metric,
+
+    -- * PerformanceInsightsMetricsDetail
+    PerformanceInsightsMetricsDetail (..),
+    newPerformanceInsightsMetricsDetail,
+    performanceInsightsMetricsDetail_metricDisplayName,
+    performanceInsightsMetricsDetail_metricQuery,
+    performanceInsightsMetricsDetail_referenceData,
+    performanceInsightsMetricsDetail_statsAtAnomaly,
+    performanceInsightsMetricsDetail_statsAtBaseline,
+    performanceInsightsMetricsDetail_unit,
+
+    -- * PerformanceInsightsReferenceComparisonValues
+    PerformanceInsightsReferenceComparisonValues (..),
+    newPerformanceInsightsReferenceComparisonValues,
+    performanceInsightsReferenceComparisonValues_referenceMetric,
+    performanceInsightsReferenceComparisonValues_referenceScalar,
+
+    -- * PerformanceInsightsReferenceData
+    PerformanceInsightsReferenceData (..),
+    newPerformanceInsightsReferenceData,
+    performanceInsightsReferenceData_comparisonValues,
+    performanceInsightsReferenceData_name,
+
+    -- * PerformanceInsightsReferenceMetric
+    PerformanceInsightsReferenceMetric (..),
+    newPerformanceInsightsReferenceMetric,
+    performanceInsightsReferenceMetric_metricQuery,
+
+    -- * PerformanceInsightsReferenceScalar
+    PerformanceInsightsReferenceScalar (..),
+    newPerformanceInsightsReferenceScalar,
+    performanceInsightsReferenceScalar_value,
+
+    -- * PerformanceInsightsStat
+    PerformanceInsightsStat (..),
+    newPerformanceInsightsStat,
+    performanceInsightsStat_type,
+    performanceInsightsStat_value,
+
+    -- * PredictionTimeRange
+    PredictionTimeRange (..),
+    newPredictionTimeRange,
+    predictionTimeRange_endTime,
+    predictionTimeRange_startTime,
+
+    -- * ProactiveAnomaly
+    ProactiveAnomaly (..),
+    newProactiveAnomaly,
+    proactiveAnomaly_anomalyReportedTimeRange,
+    proactiveAnomaly_anomalyResources,
+    proactiveAnomaly_anomalyTimeRange,
+    proactiveAnomaly_associatedInsightId,
+    proactiveAnomaly_id,
+    proactiveAnomaly_limit,
+    proactiveAnomaly_predictionTimeRange,
+    proactiveAnomaly_resourceCollection,
+    proactiveAnomaly_severity,
+    proactiveAnomaly_sourceDetails,
+    proactiveAnomaly_sourceMetadata,
+    proactiveAnomaly_status,
+    proactiveAnomaly_updateTime,
+
+    -- * ProactiveAnomalySummary
+    ProactiveAnomalySummary (..),
+    newProactiveAnomalySummary,
+    proactiveAnomalySummary_anomalyReportedTimeRange,
+    proactiveAnomalySummary_anomalyResources,
+    proactiveAnomalySummary_anomalyTimeRange,
+    proactiveAnomalySummary_associatedInsightId,
+    proactiveAnomalySummary_id,
+    proactiveAnomalySummary_limit,
+    proactiveAnomalySummary_predictionTimeRange,
+    proactiveAnomalySummary_resourceCollection,
+    proactiveAnomalySummary_severity,
+    proactiveAnomalySummary_sourceDetails,
+    proactiveAnomalySummary_sourceMetadata,
+    proactiveAnomalySummary_status,
+    proactiveAnomalySummary_updateTime,
+
+    -- * ProactiveInsight
+    ProactiveInsight (..),
+    newProactiveInsight,
+    proactiveInsight_description,
+    proactiveInsight_id,
+    proactiveInsight_insightTimeRange,
+    proactiveInsight_name,
+    proactiveInsight_predictionTimeRange,
+    proactiveInsight_resourceCollection,
+    proactiveInsight_severity,
+    proactiveInsight_ssmOpsItemId,
+    proactiveInsight_status,
+
+    -- * ProactiveInsightSummary
+    ProactiveInsightSummary (..),
+    newProactiveInsightSummary,
+    proactiveInsightSummary_associatedResourceArns,
+    proactiveInsightSummary_id,
+    proactiveInsightSummary_insightTimeRange,
+    proactiveInsightSummary_name,
+    proactiveInsightSummary_predictionTimeRange,
+    proactiveInsightSummary_resourceCollection,
+    proactiveInsightSummary_serviceCollection,
+    proactiveInsightSummary_severity,
+    proactiveInsightSummary_status,
+
+    -- * ProactiveOrganizationInsightSummary
+    ProactiveOrganizationInsightSummary (..),
+    newProactiveOrganizationInsightSummary,
+    proactiveOrganizationInsightSummary_accountId,
+    proactiveOrganizationInsightSummary_id,
+    proactiveOrganizationInsightSummary_insightTimeRange,
+    proactiveOrganizationInsightSummary_name,
+    proactiveOrganizationInsightSummary_organizationalUnitId,
+    proactiveOrganizationInsightSummary_predictionTimeRange,
+    proactiveOrganizationInsightSummary_resourceCollection,
+    proactiveOrganizationInsightSummary_serviceCollection,
+    proactiveOrganizationInsightSummary_severity,
+    proactiveOrganizationInsightSummary_status,
+
+    -- * ReactiveAnomaly
+    ReactiveAnomaly (..),
+    newReactiveAnomaly,
+    reactiveAnomaly_anomalyReportedTimeRange,
+    reactiveAnomaly_anomalyResources,
+    reactiveAnomaly_anomalyTimeRange,
+    reactiveAnomaly_associatedInsightId,
+    reactiveAnomaly_causalAnomalyId,
+    reactiveAnomaly_description,
+    reactiveAnomaly_id,
+    reactiveAnomaly_name,
+    reactiveAnomaly_resourceCollection,
+    reactiveAnomaly_severity,
+    reactiveAnomaly_sourceDetails,
+    reactiveAnomaly_status,
+    reactiveAnomaly_type,
+
+    -- * ReactiveAnomalySummary
+    ReactiveAnomalySummary (..),
+    newReactiveAnomalySummary,
+    reactiveAnomalySummary_anomalyReportedTimeRange,
+    reactiveAnomalySummary_anomalyResources,
+    reactiveAnomalySummary_anomalyTimeRange,
+    reactiveAnomalySummary_associatedInsightId,
+    reactiveAnomalySummary_causalAnomalyId,
+    reactiveAnomalySummary_description,
+    reactiveAnomalySummary_id,
+    reactiveAnomalySummary_name,
+    reactiveAnomalySummary_resourceCollection,
+    reactiveAnomalySummary_severity,
+    reactiveAnomalySummary_sourceDetails,
+    reactiveAnomalySummary_status,
+    reactiveAnomalySummary_type,
+
+    -- * ReactiveInsight
+    ReactiveInsight (..),
+    newReactiveInsight,
+    reactiveInsight_description,
+    reactiveInsight_id,
+    reactiveInsight_insightTimeRange,
+    reactiveInsight_name,
+    reactiveInsight_resourceCollection,
+    reactiveInsight_severity,
+    reactiveInsight_ssmOpsItemId,
+    reactiveInsight_status,
+
+    -- * ReactiveInsightSummary
+    ReactiveInsightSummary (..),
+    newReactiveInsightSummary,
+    reactiveInsightSummary_associatedResourceArns,
+    reactiveInsightSummary_id,
+    reactiveInsightSummary_insightTimeRange,
+    reactiveInsightSummary_name,
+    reactiveInsightSummary_resourceCollection,
+    reactiveInsightSummary_serviceCollection,
+    reactiveInsightSummary_severity,
+    reactiveInsightSummary_status,
+
+    -- * ReactiveOrganizationInsightSummary
+    ReactiveOrganizationInsightSummary (..),
+    newReactiveOrganizationInsightSummary,
+    reactiveOrganizationInsightSummary_accountId,
+    reactiveOrganizationInsightSummary_id,
+    reactiveOrganizationInsightSummary_insightTimeRange,
+    reactiveOrganizationInsightSummary_name,
+    reactiveOrganizationInsightSummary_organizationalUnitId,
+    reactiveOrganizationInsightSummary_resourceCollection,
+    reactiveOrganizationInsightSummary_serviceCollection,
+    reactiveOrganizationInsightSummary_severity,
+    reactiveOrganizationInsightSummary_status,
+
+    -- * Recommendation
+    Recommendation (..),
+    newRecommendation,
+    recommendation_category,
+    recommendation_description,
+    recommendation_link,
+    recommendation_name,
+    recommendation_reason,
+    recommendation_relatedAnomalies,
+    recommendation_relatedEvents,
+
+    -- * RecommendationRelatedAnomaly
+    RecommendationRelatedAnomaly (..),
+    newRecommendationRelatedAnomaly,
+    recommendationRelatedAnomaly_anomalyId,
+    recommendationRelatedAnomaly_resources,
+    recommendationRelatedAnomaly_sourceDetails,
+
+    -- * RecommendationRelatedAnomalyResource
+    RecommendationRelatedAnomalyResource (..),
+    newRecommendationRelatedAnomalyResource,
+    recommendationRelatedAnomalyResource_name,
+    recommendationRelatedAnomalyResource_type,
+
+    -- * RecommendationRelatedAnomalySourceDetail
+    RecommendationRelatedAnomalySourceDetail (..),
+    newRecommendationRelatedAnomalySourceDetail,
+    recommendationRelatedAnomalySourceDetail_cloudWatchMetrics,
+
+    -- * RecommendationRelatedCloudWatchMetricsSourceDetail
+    RecommendationRelatedCloudWatchMetricsSourceDetail (..),
+    newRecommendationRelatedCloudWatchMetricsSourceDetail,
+    recommendationRelatedCloudWatchMetricsSourceDetail_metricName,
+    recommendationRelatedCloudWatchMetricsSourceDetail_namespace,
+
+    -- * RecommendationRelatedEvent
+    RecommendationRelatedEvent (..),
+    newRecommendationRelatedEvent,
+    recommendationRelatedEvent_name,
+    recommendationRelatedEvent_resources,
+
+    -- * RecommendationRelatedEventResource
+    RecommendationRelatedEventResource (..),
+    newRecommendationRelatedEventResource,
+    recommendationRelatedEventResource_name,
+    recommendationRelatedEventResource_type,
+
+    -- * ResourceCollection
+    ResourceCollection (..),
+    newResourceCollection,
+    resourceCollection_cloudFormation,
+    resourceCollection_tags,
+
+    -- * ResourceCollectionFilter
+    ResourceCollectionFilter (..),
+    newResourceCollectionFilter,
+    resourceCollectionFilter_cloudFormation,
+    resourceCollectionFilter_tags,
+
+    -- * SearchInsightsFilters
+    SearchInsightsFilters (..),
+    newSearchInsightsFilters,
+    searchInsightsFilters_resourceCollection,
+    searchInsightsFilters_serviceCollection,
+    searchInsightsFilters_severities,
+    searchInsightsFilters_statuses,
+
+    -- * SearchOrganizationInsightsFilters
+    SearchOrganizationInsightsFilters (..),
+    newSearchOrganizationInsightsFilters,
+    searchOrganizationInsightsFilters_resourceCollection,
+    searchOrganizationInsightsFilters_serviceCollection,
+    searchOrganizationInsightsFilters_severities,
+    searchOrganizationInsightsFilters_statuses,
+
+    -- * ServiceCollection
+    ServiceCollection (..),
+    newServiceCollection,
+    serviceCollection_serviceNames,
+
+    -- * ServiceHealth
+    ServiceHealth (..),
+    newServiceHealth,
+    serviceHealth_analyzedResourceCount,
+    serviceHealth_insight,
+    serviceHealth_serviceName,
+
+    -- * ServiceInsightHealth
+    ServiceInsightHealth (..),
+    newServiceInsightHealth,
+    serviceInsightHealth_openProactiveInsights,
+    serviceInsightHealth_openReactiveInsights,
+
+    -- * ServiceIntegrationConfig
+    ServiceIntegrationConfig (..),
+    newServiceIntegrationConfig,
+    serviceIntegrationConfig_logsAnomalyDetection,
+    serviceIntegrationConfig_opsCenter,
+
+    -- * ServiceResourceCost
+    ServiceResourceCost (..),
+    newServiceResourceCost,
+    serviceResourceCost_cost,
+    serviceResourceCost_count,
+    serviceResourceCost_state,
+    serviceResourceCost_type,
+    serviceResourceCost_unitCost,
+
+    -- * SnsChannelConfig
+    SnsChannelConfig (..),
+    newSnsChannelConfig,
+    snsChannelConfig_topicArn,
+
+    -- * StartTimeRange
+    StartTimeRange (..),
+    newStartTimeRange,
+    startTimeRange_fromTime,
+    startTimeRange_toTime,
+
+    -- * TagCollection
+    TagCollection (..),
+    newTagCollection,
+    tagCollection_appBoundaryKey,
+    tagCollection_tagValues,
+
+    -- * TagCollectionFilter
+    TagCollectionFilter (..),
+    newTagCollectionFilter,
+    tagCollectionFilter_appBoundaryKey,
+    tagCollectionFilter_tagValues,
+
+    -- * TagCostEstimationResourceCollectionFilter
+    TagCostEstimationResourceCollectionFilter (..),
+    newTagCostEstimationResourceCollectionFilter,
+    tagCostEstimationResourceCollectionFilter_appBoundaryKey,
+    tagCostEstimationResourceCollectionFilter_tagValues,
+
+    -- * TagHealth
+    TagHealth (..),
+    newTagHealth,
+    tagHealth_analyzedResourceCount,
+    tagHealth_appBoundaryKey,
+    tagHealth_insight,
+    tagHealth_tagValue,
+
+    -- * TimestampMetricValuePair
+    TimestampMetricValuePair (..),
+    newTimestampMetricValuePair,
+    timestampMetricValuePair_metricValue,
+    timestampMetricValuePair_timestamp,
+
+    -- * UpdateCloudFormationCollectionFilter
+    UpdateCloudFormationCollectionFilter (..),
+    newUpdateCloudFormationCollectionFilter,
+    updateCloudFormationCollectionFilter_stackNames,
+
+    -- * UpdateResourceCollectionFilter
+    UpdateResourceCollectionFilter (..),
+    newUpdateResourceCollectionFilter,
+    updateResourceCollectionFilter_cloudFormation,
+    updateResourceCollectionFilter_tags,
+
+    -- * UpdateServiceIntegrationConfig
+    UpdateServiceIntegrationConfig (..),
+    newUpdateServiceIntegrationConfig,
+    updateServiceIntegrationConfig_logsAnomalyDetection,
+    updateServiceIntegrationConfig_opsCenter,
+
+    -- * UpdateTagCollectionFilter
+    UpdateTagCollectionFilter (..),
+    newUpdateTagCollectionFilter,
+    updateTagCollectionFilter_appBoundaryKey,
+    updateTagCollectionFilter_tagValues,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.DevOpsGuru.Types.AccountHealth
+import Amazonka.DevOpsGuru.Types.AccountInsightHealth
+import Amazonka.DevOpsGuru.Types.AmazonCodeGuruProfilerIntegration
+import Amazonka.DevOpsGuru.Types.AnomalousLogGroup
+import Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyResource
+import Amazonka.DevOpsGuru.Types.AnomalySeverity
+import Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+import Amazonka.DevOpsGuru.Types.AnomalySourceMetadata
+import Amazonka.DevOpsGuru.Types.AnomalyStatus
+import Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyType
+import Amazonka.DevOpsGuru.Types.CloudFormationCollection
+import Amazonka.DevOpsGuru.Types.CloudFormationCollectionFilter
+import Amazonka.DevOpsGuru.Types.CloudFormationCostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.CloudFormationHealth
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricDataStatusCode
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDataSummary
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDetail
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDimension
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsStat
+import Amazonka.DevOpsGuru.Types.CostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.CostEstimationServiceResourceState
+import Amazonka.DevOpsGuru.Types.CostEstimationStatus
+import Amazonka.DevOpsGuru.Types.CostEstimationTimeRange
+import Amazonka.DevOpsGuru.Types.EndTimeRange
+import Amazonka.DevOpsGuru.Types.Event
+import Amazonka.DevOpsGuru.Types.EventClass
+import Amazonka.DevOpsGuru.Types.EventDataSource
+import Amazonka.DevOpsGuru.Types.EventResource
+import Amazonka.DevOpsGuru.Types.EventSourceOptInStatus
+import Amazonka.DevOpsGuru.Types.EventSourcesConfig
+import Amazonka.DevOpsGuru.Types.EventTimeRange
+import Amazonka.DevOpsGuru.Types.InsightFeedback
+import Amazonka.DevOpsGuru.Types.InsightFeedbackOption
+import Amazonka.DevOpsGuru.Types.InsightHealth
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.InsightType
+import Amazonka.DevOpsGuru.Types.ListEventsFilters
+import Amazonka.DevOpsGuru.Types.ListInsightsAnyStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsClosedStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsOngoingStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsStatusFilter
+import Amazonka.DevOpsGuru.Types.ListMonitoredResourcesFilters
+import Amazonka.DevOpsGuru.Types.Locale
+import Amazonka.DevOpsGuru.Types.LogAnomalyClass
+import Amazonka.DevOpsGuru.Types.LogAnomalyShowcase
+import Amazonka.DevOpsGuru.Types.LogAnomalyType
+import Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegration
+import Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegrationConfig
+import Amazonka.DevOpsGuru.Types.MonitoredResourceIdentifier
+import Amazonka.DevOpsGuru.Types.NotificationChannel
+import Amazonka.DevOpsGuru.Types.NotificationChannelConfig
+import Amazonka.DevOpsGuru.Types.NotificationFilterConfig
+import Amazonka.DevOpsGuru.Types.NotificationMessageType
+import Amazonka.DevOpsGuru.Types.OpsCenterIntegration
+import Amazonka.DevOpsGuru.Types.OpsCenterIntegrationConfig
+import Amazonka.DevOpsGuru.Types.OptInStatus
+import Amazonka.DevOpsGuru.Types.OrganizationResourceCollectionType
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricDimensionGroup
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricQuery
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricsDetail
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceComparisonValues
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceData
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceMetric
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceScalar
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsStat
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ProactiveAnomaly
+import Amazonka.DevOpsGuru.Types.ProactiveAnomalySummary
+import Amazonka.DevOpsGuru.Types.ProactiveInsight
+import Amazonka.DevOpsGuru.Types.ProactiveInsightSummary
+import Amazonka.DevOpsGuru.Types.ProactiveOrganizationInsightSummary
+import Amazonka.DevOpsGuru.Types.ReactiveAnomaly
+import Amazonka.DevOpsGuru.Types.ReactiveAnomalySummary
+import Amazonka.DevOpsGuru.Types.ReactiveInsight
+import Amazonka.DevOpsGuru.Types.ReactiveInsightSummary
+import Amazonka.DevOpsGuru.Types.ReactiveOrganizationInsightSummary
+import Amazonka.DevOpsGuru.Types.Recommendation
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomaly
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalyResource
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalySourceDetail
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedCloudWatchMetricsSourceDetail
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedEvent
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedEventResource
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.ResourceCollectionType
+import Amazonka.DevOpsGuru.Types.ResourcePermission
+import Amazonka.DevOpsGuru.Types.ResourceTypeFilter
+import Amazonka.DevOpsGuru.Types.SearchInsightsFilters
+import Amazonka.DevOpsGuru.Types.SearchOrganizationInsightsFilters
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import Amazonka.DevOpsGuru.Types.ServiceHealth
+import Amazonka.DevOpsGuru.Types.ServiceInsightHealth
+import Amazonka.DevOpsGuru.Types.ServiceIntegrationConfig
+import Amazonka.DevOpsGuru.Types.ServiceName
+import Amazonka.DevOpsGuru.Types.ServiceResourceCost
+import Amazonka.DevOpsGuru.Types.SnsChannelConfig
+import Amazonka.DevOpsGuru.Types.StartTimeRange
+import Amazonka.DevOpsGuru.Types.TagCollection
+import Amazonka.DevOpsGuru.Types.TagCollectionFilter
+import Amazonka.DevOpsGuru.Types.TagCostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.TagHealth
+import Amazonka.DevOpsGuru.Types.TimestampMetricValuePair
+import Amazonka.DevOpsGuru.Types.UpdateCloudFormationCollectionFilter
+import Amazonka.DevOpsGuru.Types.UpdateResourceCollectionAction
+import Amazonka.DevOpsGuru.Types.UpdateResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.UpdateServiceIntegrationConfig
+import Amazonka.DevOpsGuru.Types.UpdateTagCollectionFilter
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-12-01@ of the Amazon DevOps Guru SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "DevOpsGuru",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "devops-guru",
+      Core.signingName = "devops-guru",
+      Core.version = "2020-12-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "DevOpsGuru",
+      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
+
+-- | You don\'t have permissions to perform the requested operation. The user
+-- or role that is making the request must have at least one IAM
+-- permissions policy attached that grants the required permissions. For
+-- more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html Access Management>
+-- in the /IAM User Guide/.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | An exception that is thrown when a conflict occurs.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An internal failure in an Amazon service occurred.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | A requested resource could not be found
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The request contains a value that exceeds a maximum quota.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request was denied due to a request throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | Contains information about data passed in to a field during a request
+-- that is not valid.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/DevOpsGuru/Types/AccountHealth.hs b/gen/Amazonka/DevOpsGuru/Types/AccountHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AccountHealth.hs
@@ -0,0 +1,94 @@
+{-# 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.DevOpsGuru.Types.AccountHealth
+-- 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.DevOpsGuru.Types.AccountHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.AccountInsightHealth
+import qualified Amazonka.Prelude as Prelude
+
+-- | Returns the number of open reactive insights, the number of open
+-- proactive insights, and the number of metrics analyzed in your Amazon
+-- Web Services account. Use these numbers to gauge the health of
+-- operations in your Amazon Web Services account.
+--
+-- /See:/ 'newAccountHealth' smart constructor.
+data AccountHealth = AccountHealth'
+  { -- | The ID of the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the health of the Amazon Web Services resources in
+    -- your account, including the number of open proactive, open reactive
+    -- insights, and the Mean Time to Recover (MTTR) of closed insights.
+    insight :: Prelude.Maybe AccountInsightHealth
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountHealth' 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:
+--
+-- 'accountId', 'accountHealth_accountId' - The ID of the Amazon Web Services account.
+--
+-- 'insight', 'accountHealth_insight' - Information about the health of the Amazon Web Services resources in
+-- your account, including the number of open proactive, open reactive
+-- insights, and the Mean Time to Recover (MTTR) of closed insights.
+newAccountHealth ::
+  AccountHealth
+newAccountHealth =
+  AccountHealth'
+    { accountId = Prelude.Nothing,
+      insight = Prelude.Nothing
+    }
+
+-- | The ID of the Amazon Web Services account.
+accountHealth_accountId :: Lens.Lens' AccountHealth (Prelude.Maybe Prelude.Text)
+accountHealth_accountId = Lens.lens (\AccountHealth' {accountId} -> accountId) (\s@AccountHealth' {} a -> s {accountId = a} :: AccountHealth)
+
+-- | Information about the health of the Amazon Web Services resources in
+-- your account, including the number of open proactive, open reactive
+-- insights, and the Mean Time to Recover (MTTR) of closed insights.
+accountHealth_insight :: Lens.Lens' AccountHealth (Prelude.Maybe AccountInsightHealth)
+accountHealth_insight = Lens.lens (\AccountHealth' {insight} -> insight) (\s@AccountHealth' {} a -> s {insight = a} :: AccountHealth)
+
+instance Data.FromJSON AccountHealth where
+  parseJSON =
+    Data.withObject
+      "AccountHealth"
+      ( \x ->
+          AccountHealth'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "Insight")
+      )
+
+instance Prelude.Hashable AccountHealth where
+  hashWithSalt _salt AccountHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` insight
+
+instance Prelude.NFData AccountHealth where
+  rnf AccountHealth' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf insight
diff --git a/gen/Amazonka/DevOpsGuru/Types/AccountInsightHealth.hs b/gen/Amazonka/DevOpsGuru/Types/AccountInsightHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AccountInsightHealth.hs
@@ -0,0 +1,92 @@
+{-# 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.DevOpsGuru.Types.AccountInsightHealth
+-- 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.DevOpsGuru.Types.AccountInsightHealth 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
+
+-- | Information about the number of open reactive and proactive insights
+-- that can be used to gauge the health of your system.
+--
+-- /See:/ 'newAccountInsightHealth' smart constructor.
+data AccountInsightHealth = AccountInsightHealth'
+  { -- | An integer that specifies the number of open proactive insights in your
+    -- Amazon Web Services account.
+    openProactiveInsights :: Prelude.Maybe Prelude.Int,
+    -- | An integer that specifies the number of open reactive insights in your
+    -- Amazon Web Services account.
+    openReactiveInsights :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountInsightHealth' 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:
+--
+-- 'openProactiveInsights', 'accountInsightHealth_openProactiveInsights' - An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+--
+-- 'openReactiveInsights', 'accountInsightHealth_openReactiveInsights' - An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+newAccountInsightHealth ::
+  AccountInsightHealth
+newAccountInsightHealth =
+  AccountInsightHealth'
+    { openProactiveInsights =
+        Prelude.Nothing,
+      openReactiveInsights = Prelude.Nothing
+    }
+
+-- | An integer that specifies the number of open proactive insights in your
+-- Amazon Web Services account.
+accountInsightHealth_openProactiveInsights :: Lens.Lens' AccountInsightHealth (Prelude.Maybe Prelude.Int)
+accountInsightHealth_openProactiveInsights = Lens.lens (\AccountInsightHealth' {openProactiveInsights} -> openProactiveInsights) (\s@AccountInsightHealth' {} a -> s {openProactiveInsights = a} :: AccountInsightHealth)
+
+-- | An integer that specifies the number of open reactive insights in your
+-- Amazon Web Services account.
+accountInsightHealth_openReactiveInsights :: Lens.Lens' AccountInsightHealth (Prelude.Maybe Prelude.Int)
+accountInsightHealth_openReactiveInsights = Lens.lens (\AccountInsightHealth' {openReactiveInsights} -> openReactiveInsights) (\s@AccountInsightHealth' {} a -> s {openReactiveInsights = a} :: AccountInsightHealth)
+
+instance Data.FromJSON AccountInsightHealth where
+  parseJSON =
+    Data.withObject
+      "AccountInsightHealth"
+      ( \x ->
+          AccountInsightHealth'
+            Prelude.<$> (x Data..:? "OpenProactiveInsights")
+            Prelude.<*> (x Data..:? "OpenReactiveInsights")
+      )
+
+instance Prelude.Hashable AccountInsightHealth where
+  hashWithSalt _salt AccountInsightHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` openProactiveInsights
+      `Prelude.hashWithSalt` openReactiveInsights
+
+instance Prelude.NFData AccountInsightHealth where
+  rnf AccountInsightHealth' {..} =
+    Prelude.rnf openProactiveInsights
+      `Prelude.seq` Prelude.rnf openReactiveInsights
diff --git a/gen/Amazonka/DevOpsGuru/Types/AmazonCodeGuruProfilerIntegration.hs b/gen/Amazonka/DevOpsGuru/Types/AmazonCodeGuruProfilerIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AmazonCodeGuruProfilerIntegration.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.DevOpsGuru.Types.AmazonCodeGuruProfilerIntegration
+-- 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.DevOpsGuru.Types.AmazonCodeGuruProfilerIntegration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.EventSourceOptInStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about your account\'s integration with Amazon CodeGuru
+-- Profiler. This returns whether DevOps Guru is configured to consume
+-- recommendations generated from Amazon CodeGuru Profiler.
+--
+-- /See:/ 'newAmazonCodeGuruProfilerIntegration' smart constructor.
+data AmazonCodeGuruProfilerIntegration = AmazonCodeGuruProfilerIntegration'
+  { -- | The status of the CodeGuru Profiler integration. Specifies if DevOps
+    -- Guru is enabled to consume recommendations that are generated from
+    -- Amazon CodeGuru Profiler.
+    status :: Prelude.Maybe EventSourceOptInStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AmazonCodeGuruProfilerIntegration' 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:
+--
+-- 'status', 'amazonCodeGuruProfilerIntegration_status' - The status of the CodeGuru Profiler integration. Specifies if DevOps
+-- Guru is enabled to consume recommendations that are generated from
+-- Amazon CodeGuru Profiler.
+newAmazonCodeGuruProfilerIntegration ::
+  AmazonCodeGuruProfilerIntegration
+newAmazonCodeGuruProfilerIntegration =
+  AmazonCodeGuruProfilerIntegration'
+    { status =
+        Prelude.Nothing
+    }
+
+-- | The status of the CodeGuru Profiler integration. Specifies if DevOps
+-- Guru is enabled to consume recommendations that are generated from
+-- Amazon CodeGuru Profiler.
+amazonCodeGuruProfilerIntegration_status :: Lens.Lens' AmazonCodeGuruProfilerIntegration (Prelude.Maybe EventSourceOptInStatus)
+amazonCodeGuruProfilerIntegration_status = Lens.lens (\AmazonCodeGuruProfilerIntegration' {status} -> status) (\s@AmazonCodeGuruProfilerIntegration' {} a -> s {status = a} :: AmazonCodeGuruProfilerIntegration)
+
+instance
+  Data.FromJSON
+    AmazonCodeGuruProfilerIntegration
+  where
+  parseJSON =
+    Data.withObject
+      "AmazonCodeGuruProfilerIntegration"
+      ( \x ->
+          AmazonCodeGuruProfilerIntegration'
+            Prelude.<$> (x Data..:? "Status")
+      )
+
+instance
+  Prelude.Hashable
+    AmazonCodeGuruProfilerIntegration
+  where
+  hashWithSalt
+    _salt
+    AmazonCodeGuruProfilerIntegration' {..} =
+      _salt `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    AmazonCodeGuruProfilerIntegration
+  where
+  rnf AmazonCodeGuruProfilerIntegration' {..} =
+    Prelude.rnf status
+
+instance
+  Data.ToJSON
+    AmazonCodeGuruProfilerIntegration
+  where
+  toJSON AmazonCodeGuruProfilerIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Status" Data..=) Prelude.<$> status]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalousLogGroup.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalousLogGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalousLogGroup.hs
@@ -0,0 +1,131 @@
+{-# 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.DevOpsGuru.Types.AnomalousLogGroup
+-- 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.DevOpsGuru.Types.AnomalousLogGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.LogAnomalyShowcase
+import qualified Amazonka.Prelude as Prelude
+
+-- | An Amazon CloudWatch log group that contains log anomalies and is used
+-- to generate an insight.
+--
+-- /See:/ 'newAnomalousLogGroup' smart constructor.
+data AnomalousLogGroup = AnomalousLogGroup'
+  { -- | The time the anomalous log events stopped.
+    impactEndTime :: Prelude.Maybe Data.POSIX,
+    -- | The time the anomalous log events began. The impact start time indicates
+    -- the time of the first log anomaly event that occurs.
+    impactStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The log anomalies in the log group. Each log anomaly displayed
+    -- represents a cluster of similar anomalous log events.
+    logAnomalyShowcases :: Prelude.Maybe [LogAnomalyShowcase],
+    -- | The name of the CloudWatch log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The number of log lines that were scanned for anomalous log events.
+    numberOfLogLinesScanned :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalousLogGroup' 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:
+--
+-- 'impactEndTime', 'anomalousLogGroup_impactEndTime' - The time the anomalous log events stopped.
+--
+-- 'impactStartTime', 'anomalousLogGroup_impactStartTime' - The time the anomalous log events began. The impact start time indicates
+-- the time of the first log anomaly event that occurs.
+--
+-- 'logAnomalyShowcases', 'anomalousLogGroup_logAnomalyShowcases' - The log anomalies in the log group. Each log anomaly displayed
+-- represents a cluster of similar anomalous log events.
+--
+-- 'logGroupName', 'anomalousLogGroup_logGroupName' - The name of the CloudWatch log group.
+--
+-- 'numberOfLogLinesScanned', 'anomalousLogGroup_numberOfLogLinesScanned' - The number of log lines that were scanned for anomalous log events.
+newAnomalousLogGroup ::
+  AnomalousLogGroup
+newAnomalousLogGroup =
+  AnomalousLogGroup'
+    { impactEndTime = Prelude.Nothing,
+      impactStartTime = Prelude.Nothing,
+      logAnomalyShowcases = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      numberOfLogLinesScanned = Prelude.Nothing
+    }
+
+-- | The time the anomalous log events stopped.
+anomalousLogGroup_impactEndTime :: Lens.Lens' AnomalousLogGroup (Prelude.Maybe Prelude.UTCTime)
+anomalousLogGroup_impactEndTime = Lens.lens (\AnomalousLogGroup' {impactEndTime} -> impactEndTime) (\s@AnomalousLogGroup' {} a -> s {impactEndTime = a} :: AnomalousLogGroup) Prelude.. Lens.mapping Data._Time
+
+-- | The time the anomalous log events began. The impact start time indicates
+-- the time of the first log anomaly event that occurs.
+anomalousLogGroup_impactStartTime :: Lens.Lens' AnomalousLogGroup (Prelude.Maybe Prelude.UTCTime)
+anomalousLogGroup_impactStartTime = Lens.lens (\AnomalousLogGroup' {impactStartTime} -> impactStartTime) (\s@AnomalousLogGroup' {} a -> s {impactStartTime = a} :: AnomalousLogGroup) Prelude.. Lens.mapping Data._Time
+
+-- | The log anomalies in the log group. Each log anomaly displayed
+-- represents a cluster of similar anomalous log events.
+anomalousLogGroup_logAnomalyShowcases :: Lens.Lens' AnomalousLogGroup (Prelude.Maybe [LogAnomalyShowcase])
+anomalousLogGroup_logAnomalyShowcases = Lens.lens (\AnomalousLogGroup' {logAnomalyShowcases} -> logAnomalyShowcases) (\s@AnomalousLogGroup' {} a -> s {logAnomalyShowcases = a} :: AnomalousLogGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the CloudWatch log group.
+anomalousLogGroup_logGroupName :: Lens.Lens' AnomalousLogGroup (Prelude.Maybe Prelude.Text)
+anomalousLogGroup_logGroupName = Lens.lens (\AnomalousLogGroup' {logGroupName} -> logGroupName) (\s@AnomalousLogGroup' {} a -> s {logGroupName = a} :: AnomalousLogGroup)
+
+-- | The number of log lines that were scanned for anomalous log events.
+anomalousLogGroup_numberOfLogLinesScanned :: Lens.Lens' AnomalousLogGroup (Prelude.Maybe Prelude.Int)
+anomalousLogGroup_numberOfLogLinesScanned = Lens.lens (\AnomalousLogGroup' {numberOfLogLinesScanned} -> numberOfLogLinesScanned) (\s@AnomalousLogGroup' {} a -> s {numberOfLogLinesScanned = a} :: AnomalousLogGroup)
+
+instance Data.FromJSON AnomalousLogGroup where
+  parseJSON =
+    Data.withObject
+      "AnomalousLogGroup"
+      ( \x ->
+          AnomalousLogGroup'
+            Prelude.<$> (x Data..:? "ImpactEndTime")
+            Prelude.<*> (x Data..:? "ImpactStartTime")
+            Prelude.<*> ( x
+                            Data..:? "LogAnomalyShowcases"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "LogGroupName")
+            Prelude.<*> (x Data..:? "NumberOfLogLinesScanned")
+      )
+
+instance Prelude.Hashable AnomalousLogGroup where
+  hashWithSalt _salt AnomalousLogGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` impactEndTime
+      `Prelude.hashWithSalt` impactStartTime
+      `Prelude.hashWithSalt` logAnomalyShowcases
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` numberOfLogLinesScanned
+
+instance Prelude.NFData AnomalousLogGroup where
+  rnf AnomalousLogGroup' {..} =
+    Prelude.rnf impactEndTime
+      `Prelude.seq` Prelude.rnf impactStartTime
+      `Prelude.seq` Prelude.rnf logAnomalyShowcases
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf numberOfLogLinesScanned
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalyReportedTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalyReportedTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalyReportedTimeRange.hs
@@ -0,0 +1,89 @@
+{-# 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.DevOpsGuru.Types.AnomalyReportedTimeRange
+-- 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.DevOpsGuru.Types.AnomalyReportedTimeRange 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 time range that specifies when DevOps Guru opens and then closes an
+-- anomaly. This is different from @AnomalyTimeRange@, which specifies the
+-- time range when DevOps Guru actually observes the anomalous behavior.
+--
+-- /See:/ 'newAnomalyReportedTimeRange' smart constructor.
+data AnomalyReportedTimeRange = AnomalyReportedTimeRange'
+  { -- | The time when an anomaly is closed.
+    closeTime :: Prelude.Maybe Data.POSIX,
+    -- | The time when an anomaly is opened.
+    openTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyReportedTimeRange' 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:
+--
+-- 'closeTime', 'anomalyReportedTimeRange_closeTime' - The time when an anomaly is closed.
+--
+-- 'openTime', 'anomalyReportedTimeRange_openTime' - The time when an anomaly is opened.
+newAnomalyReportedTimeRange ::
+  -- | 'openTime'
+  Prelude.UTCTime ->
+  AnomalyReportedTimeRange
+newAnomalyReportedTimeRange pOpenTime_ =
+  AnomalyReportedTimeRange'
+    { closeTime =
+        Prelude.Nothing,
+      openTime = Data._Time Lens.# pOpenTime_
+    }
+
+-- | The time when an anomaly is closed.
+anomalyReportedTimeRange_closeTime :: Lens.Lens' AnomalyReportedTimeRange (Prelude.Maybe Prelude.UTCTime)
+anomalyReportedTimeRange_closeTime = Lens.lens (\AnomalyReportedTimeRange' {closeTime} -> closeTime) (\s@AnomalyReportedTimeRange' {} a -> s {closeTime = a} :: AnomalyReportedTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The time when an anomaly is opened.
+anomalyReportedTimeRange_openTime :: Lens.Lens' AnomalyReportedTimeRange Prelude.UTCTime
+anomalyReportedTimeRange_openTime = Lens.lens (\AnomalyReportedTimeRange' {openTime} -> openTime) (\s@AnomalyReportedTimeRange' {} a -> s {openTime = a} :: AnomalyReportedTimeRange) Prelude.. Data._Time
+
+instance Data.FromJSON AnomalyReportedTimeRange where
+  parseJSON =
+    Data.withObject
+      "AnomalyReportedTimeRange"
+      ( \x ->
+          AnomalyReportedTimeRange'
+            Prelude.<$> (x Data..:? "CloseTime")
+            Prelude.<*> (x Data..: "OpenTime")
+      )
+
+instance Prelude.Hashable AnomalyReportedTimeRange where
+  hashWithSalt _salt AnomalyReportedTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` closeTime
+      `Prelude.hashWithSalt` openTime
+
+instance Prelude.NFData AnomalyReportedTimeRange where
+  rnf AnomalyReportedTimeRange' {..} =
+    Prelude.rnf closeTime
+      `Prelude.seq` Prelude.rnf openTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalyResource.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalyResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalyResource.hs
@@ -0,0 +1,87 @@
+{-# 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.DevOpsGuru.Types.AnomalyResource
+-- 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.DevOpsGuru.Types.AnomalyResource 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 Amazon Web Services resources in which DevOps Guru detected unusual
+-- behavior that resulted in the generation of an anomaly. When DevOps Guru
+-- detects multiple related anomalies, it creates and insight with details
+-- about the anomalous behavior and suggestions about how to correct the
+-- problem.
+--
+-- /See:/ 'newAnomalyResource' smart constructor.
+data AnomalyResource = AnomalyResource'
+  { -- | The name of the Amazon Web Services resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of the Amazon Web Services resource.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyResource' 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', 'anomalyResource_name' - The name of the Amazon Web Services resource.
+--
+-- 'type'', 'anomalyResource_type' - The type of the Amazon Web Services resource.
+newAnomalyResource ::
+  AnomalyResource
+newAnomalyResource =
+  AnomalyResource'
+    { name = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The name of the Amazon Web Services resource.
+anomalyResource_name :: Lens.Lens' AnomalyResource (Prelude.Maybe Prelude.Text)
+anomalyResource_name = Lens.lens (\AnomalyResource' {name} -> name) (\s@AnomalyResource' {} a -> s {name = a} :: AnomalyResource)
+
+-- | The type of the Amazon Web Services resource.
+anomalyResource_type :: Lens.Lens' AnomalyResource (Prelude.Maybe Prelude.Text)
+anomalyResource_type = Lens.lens (\AnomalyResource' {type'} -> type') (\s@AnomalyResource' {} a -> s {type' = a} :: AnomalyResource)
+
+instance Data.FromJSON AnomalyResource where
+  parseJSON =
+    Data.withObject
+      "AnomalyResource"
+      ( \x ->
+          AnomalyResource'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable AnomalyResource where
+  hashWithSalt _salt AnomalyResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AnomalyResource where
+  rnf AnomalyResource' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalySeverity.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalySeverity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalySeverity.hs
@@ -0,0 +1,76 @@
+{-# 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.DevOpsGuru.Types.AnomalySeverity
+-- 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.DevOpsGuru.Types.AnomalySeverity
+  ( AnomalySeverity
+      ( ..,
+        AnomalySeverity_HIGH,
+        AnomalySeverity_LOW,
+        AnomalySeverity_MEDIUM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnomalySeverity = AnomalySeverity'
+  { fromAnomalySeverity ::
+      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 AnomalySeverity_HIGH :: AnomalySeverity
+pattern AnomalySeverity_HIGH = AnomalySeverity' "HIGH"
+
+pattern AnomalySeverity_LOW :: AnomalySeverity
+pattern AnomalySeverity_LOW = AnomalySeverity' "LOW"
+
+pattern AnomalySeverity_MEDIUM :: AnomalySeverity
+pattern AnomalySeverity_MEDIUM = AnomalySeverity' "MEDIUM"
+
+{-# COMPLETE
+  AnomalySeverity_HIGH,
+  AnomalySeverity_LOW,
+  AnomalySeverity_MEDIUM,
+  AnomalySeverity'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalySourceDetails.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalySourceDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalySourceDetails.hs
@@ -0,0 +1,103 @@
+{-# 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.DevOpsGuru.Types.AnomalySourceDetails
+-- 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.DevOpsGuru.Types.AnomalySourceDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDetail
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricsDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the source of the anomalous operational data that
+-- triggered the anomaly.
+--
+-- /See:/ 'newAnomalySourceDetails' smart constructor.
+data AnomalySourceDetails = AnomalySourceDetails'
+  { -- | An array of @CloudWatchMetricsDetail@ objects that contain information
+    -- about analyzed CloudWatch metrics that show anomalous behavior.
+    cloudWatchMetrics :: Prelude.Maybe [CloudWatchMetricsDetail],
+    -- | An array of @PerformanceInsightsMetricsDetail@ objects that contain
+    -- information about analyzed Performance Insights metrics that show
+    -- anomalous behavior.
+    performanceInsightsMetrics :: Prelude.Maybe [PerformanceInsightsMetricsDetail]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalySourceDetails' 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:
+--
+-- 'cloudWatchMetrics', 'anomalySourceDetails_cloudWatchMetrics' - An array of @CloudWatchMetricsDetail@ objects that contain information
+-- about analyzed CloudWatch metrics that show anomalous behavior.
+--
+-- 'performanceInsightsMetrics', 'anomalySourceDetails_performanceInsightsMetrics' - An array of @PerformanceInsightsMetricsDetail@ objects that contain
+-- information about analyzed Performance Insights metrics that show
+-- anomalous behavior.
+newAnomalySourceDetails ::
+  AnomalySourceDetails
+newAnomalySourceDetails =
+  AnomalySourceDetails'
+    { cloudWatchMetrics =
+        Prelude.Nothing,
+      performanceInsightsMetrics = Prelude.Nothing
+    }
+
+-- | An array of @CloudWatchMetricsDetail@ objects that contain information
+-- about analyzed CloudWatch metrics that show anomalous behavior.
+anomalySourceDetails_cloudWatchMetrics :: Lens.Lens' AnomalySourceDetails (Prelude.Maybe [CloudWatchMetricsDetail])
+anomalySourceDetails_cloudWatchMetrics = Lens.lens (\AnomalySourceDetails' {cloudWatchMetrics} -> cloudWatchMetrics) (\s@AnomalySourceDetails' {} a -> s {cloudWatchMetrics = a} :: AnomalySourceDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of @PerformanceInsightsMetricsDetail@ objects that contain
+-- information about analyzed Performance Insights metrics that show
+-- anomalous behavior.
+anomalySourceDetails_performanceInsightsMetrics :: Lens.Lens' AnomalySourceDetails (Prelude.Maybe [PerformanceInsightsMetricsDetail])
+anomalySourceDetails_performanceInsightsMetrics = Lens.lens (\AnomalySourceDetails' {performanceInsightsMetrics} -> performanceInsightsMetrics) (\s@AnomalySourceDetails' {} a -> s {performanceInsightsMetrics = a} :: AnomalySourceDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AnomalySourceDetails where
+  parseJSON =
+    Data.withObject
+      "AnomalySourceDetails"
+      ( \x ->
+          AnomalySourceDetails'
+            Prelude.<$> ( x
+                            Data..:? "CloudWatchMetrics"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "PerformanceInsightsMetrics"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable AnomalySourceDetails where
+  hashWithSalt _salt AnomalySourceDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchMetrics
+      `Prelude.hashWithSalt` performanceInsightsMetrics
+
+instance Prelude.NFData AnomalySourceDetails where
+  rnf AnomalySourceDetails' {..} =
+    Prelude.rnf cloudWatchMetrics
+      `Prelude.seq` Prelude.rnf performanceInsightsMetrics
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalySourceMetadata.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalySourceMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalySourceMetadata.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.DevOpsGuru.Types.AnomalySourceMetadata
+-- 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.DevOpsGuru.Types.AnomalySourceMetadata 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
+
+-- | Metadata about the detection source that generates proactive anomalies.
+-- The anomaly is detected using analysis of the metric data  over a period
+-- of time
+--
+-- /See:/ 'newAnomalySourceMetadata' smart constructor.
+data AnomalySourceMetadata = AnomalySourceMetadata'
+  { -- | The source of the anomaly.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The name of the anomaly\'s resource.
+    sourceResourceName :: Prelude.Maybe Prelude.Text,
+    -- | The anomaly\'s resource type.
+    sourceResourceType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalySourceMetadata' 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:
+--
+-- 'source', 'anomalySourceMetadata_source' - The source of the anomaly.
+--
+-- 'sourceResourceName', 'anomalySourceMetadata_sourceResourceName' - The name of the anomaly\'s resource.
+--
+-- 'sourceResourceType', 'anomalySourceMetadata_sourceResourceType' - The anomaly\'s resource type.
+newAnomalySourceMetadata ::
+  AnomalySourceMetadata
+newAnomalySourceMetadata =
+  AnomalySourceMetadata'
+    { source = Prelude.Nothing,
+      sourceResourceName = Prelude.Nothing,
+      sourceResourceType = Prelude.Nothing
+    }
+
+-- | The source of the anomaly.
+anomalySourceMetadata_source :: Lens.Lens' AnomalySourceMetadata (Prelude.Maybe Prelude.Text)
+anomalySourceMetadata_source = Lens.lens (\AnomalySourceMetadata' {source} -> source) (\s@AnomalySourceMetadata' {} a -> s {source = a} :: AnomalySourceMetadata)
+
+-- | The name of the anomaly\'s resource.
+anomalySourceMetadata_sourceResourceName :: Lens.Lens' AnomalySourceMetadata (Prelude.Maybe Prelude.Text)
+anomalySourceMetadata_sourceResourceName = Lens.lens (\AnomalySourceMetadata' {sourceResourceName} -> sourceResourceName) (\s@AnomalySourceMetadata' {} a -> s {sourceResourceName = a} :: AnomalySourceMetadata)
+
+-- | The anomaly\'s resource type.
+anomalySourceMetadata_sourceResourceType :: Lens.Lens' AnomalySourceMetadata (Prelude.Maybe Prelude.Text)
+anomalySourceMetadata_sourceResourceType = Lens.lens (\AnomalySourceMetadata' {sourceResourceType} -> sourceResourceType) (\s@AnomalySourceMetadata' {} a -> s {sourceResourceType = a} :: AnomalySourceMetadata)
+
+instance Data.FromJSON AnomalySourceMetadata where
+  parseJSON =
+    Data.withObject
+      "AnomalySourceMetadata"
+      ( \x ->
+          AnomalySourceMetadata'
+            Prelude.<$> (x Data..:? "Source")
+            Prelude.<*> (x Data..:? "SourceResourceName")
+            Prelude.<*> (x Data..:? "SourceResourceType")
+      )
+
+instance Prelude.Hashable AnomalySourceMetadata where
+  hashWithSalt _salt AnomalySourceMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` sourceResourceName
+      `Prelude.hashWithSalt` sourceResourceType
+
+instance Prelude.NFData AnomalySourceMetadata where
+  rnf AnomalySourceMetadata' {..} =
+    Prelude.rnf source
+      `Prelude.seq` Prelude.rnf sourceResourceName
+      `Prelude.seq` Prelude.rnf sourceResourceType
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalyStatus.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalyStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalyStatus.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.AnomalyStatus
+-- 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.DevOpsGuru.Types.AnomalyStatus
+  ( AnomalyStatus
+      ( ..,
+        AnomalyStatus_CLOSED,
+        AnomalyStatus_ONGOING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnomalyStatus = AnomalyStatus'
+  { fromAnomalyStatus ::
+      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 AnomalyStatus_CLOSED :: AnomalyStatus
+pattern AnomalyStatus_CLOSED = AnomalyStatus' "CLOSED"
+
+pattern AnomalyStatus_ONGOING :: AnomalyStatus
+pattern AnomalyStatus_ONGOING = AnomalyStatus' "ONGOING"
+
+{-# COMPLETE
+  AnomalyStatus_CLOSED,
+  AnomalyStatus_ONGOING,
+  AnomalyStatus'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalyTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalyTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalyTimeRange.hs
@@ -0,0 +1,89 @@
+{-# 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.DevOpsGuru.Types.AnomalyTimeRange
+-- 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.DevOpsGuru.Types.AnomalyTimeRange 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 time range that specifies when the observed unusual behavior in an
+-- anomaly started and ended. This is different from
+-- @AnomalyReportedTimeRange@, which specifies the time range when DevOps
+-- Guru opens and then closes an anomaly.
+--
+-- /See:/ 'newAnomalyTimeRange' smart constructor.
+data AnomalyTimeRange = AnomalyTimeRange'
+  { -- | The time when the anomalous behavior ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The time when the anomalous behavior started.
+    startTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyTimeRange' 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', 'anomalyTimeRange_endTime' - The time when the anomalous behavior ended.
+--
+-- 'startTime', 'anomalyTimeRange_startTime' - The time when the anomalous behavior started.
+newAnomalyTimeRange ::
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  AnomalyTimeRange
+newAnomalyTimeRange pStartTime_ =
+  AnomalyTimeRange'
+    { endTime = Prelude.Nothing,
+      startTime = Data._Time Lens.# pStartTime_
+    }
+
+-- | The time when the anomalous behavior ended.
+anomalyTimeRange_endTime :: Lens.Lens' AnomalyTimeRange (Prelude.Maybe Prelude.UTCTime)
+anomalyTimeRange_endTime = Lens.lens (\AnomalyTimeRange' {endTime} -> endTime) (\s@AnomalyTimeRange' {} a -> s {endTime = a} :: AnomalyTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the anomalous behavior started.
+anomalyTimeRange_startTime :: Lens.Lens' AnomalyTimeRange Prelude.UTCTime
+anomalyTimeRange_startTime = Lens.lens (\AnomalyTimeRange' {startTime} -> startTime) (\s@AnomalyTimeRange' {} a -> s {startTime = a} :: AnomalyTimeRange) Prelude.. Data._Time
+
+instance Data.FromJSON AnomalyTimeRange where
+  parseJSON =
+    Data.withObject
+      "AnomalyTimeRange"
+      ( \x ->
+          AnomalyTimeRange'
+            Prelude.<$> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..: "StartTime")
+      )
+
+instance Prelude.Hashable AnomalyTimeRange where
+  hashWithSalt _salt AnomalyTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData AnomalyTimeRange where
+  rnf AnomalyTimeRange' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/AnomalyType.hs b/gen/Amazonka/DevOpsGuru/Types/AnomalyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/AnomalyType.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.AnomalyType
+-- 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.DevOpsGuru.Types.AnomalyType
+  ( AnomalyType
+      ( ..,
+        AnomalyType_CAUSAL,
+        AnomalyType_CONTEXTUAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnomalyType = AnomalyType'
+  { fromAnomalyType ::
+      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 AnomalyType_CAUSAL :: AnomalyType
+pattern AnomalyType_CAUSAL = AnomalyType' "CAUSAL"
+
+pattern AnomalyType_CONTEXTUAL :: AnomalyType
+pattern AnomalyType_CONTEXTUAL = AnomalyType' "CONTEXTUAL"
+
+{-# COMPLETE
+  AnomalyType_CAUSAL,
+  AnomalyType_CONTEXTUAL,
+  AnomalyType'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudFormationCollection.hs b/gen/Amazonka/DevOpsGuru/Types/CloudFormationCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudFormationCollection.hs
@@ -0,0 +1,83 @@
+{-# 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.DevOpsGuru.Types.CloudFormationCollection
+-- 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.DevOpsGuru.Types.CloudFormationCollection 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
+
+-- | Information about Amazon Web Services CloudFormation stacks. You can use
+-- up to 500 stacks to specify which Amazon Web Services resources in your
+-- account to analyze. For more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+--
+-- /See:/ 'newCloudFormationCollection' smart constructor.
+data CloudFormationCollection = CloudFormationCollection'
+  { -- | An array of CloudFormation stack names.
+    stackNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudFormationCollection' 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:
+--
+-- 'stackNames', 'cloudFormationCollection_stackNames' - An array of CloudFormation stack names.
+newCloudFormationCollection ::
+  CloudFormationCollection
+newCloudFormationCollection =
+  CloudFormationCollection'
+    { stackNames =
+        Prelude.Nothing
+    }
+
+-- | An array of CloudFormation stack names.
+cloudFormationCollection_stackNames :: Lens.Lens' CloudFormationCollection (Prelude.Maybe [Prelude.Text])
+cloudFormationCollection_stackNames = Lens.lens (\CloudFormationCollection' {stackNames} -> stackNames) (\s@CloudFormationCollection' {} a -> s {stackNames = a} :: CloudFormationCollection) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CloudFormationCollection where
+  parseJSON =
+    Data.withObject
+      "CloudFormationCollection"
+      ( \x ->
+          CloudFormationCollection'
+            Prelude.<$> (x Data..:? "StackNames" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable CloudFormationCollection where
+  hashWithSalt _salt CloudFormationCollection' {..} =
+    _salt `Prelude.hashWithSalt` stackNames
+
+instance Prelude.NFData CloudFormationCollection where
+  rnf CloudFormationCollection' {..} =
+    Prelude.rnf stackNames
+
+instance Data.ToJSON CloudFormationCollection where
+  toJSON CloudFormationCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("StackNames" Data..=) Prelude.<$> stackNames]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudFormationCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/CloudFormationCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudFormationCollectionFilter.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.DevOpsGuru.Types.CloudFormationCollectionFilter
+-- 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.DevOpsGuru.Types.CloudFormationCollectionFilter 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
+
+-- | Information about Amazon Web Services CloudFormation stacks. You can use
+-- up to 500 stacks to specify which Amazon Web Services resources in your
+-- account to analyze. For more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+--
+-- /See:/ 'newCloudFormationCollectionFilter' smart constructor.
+data CloudFormationCollectionFilter = CloudFormationCollectionFilter'
+  { -- | An array of CloudFormation stack names.
+    stackNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudFormationCollectionFilter' 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:
+--
+-- 'stackNames', 'cloudFormationCollectionFilter_stackNames' - An array of CloudFormation stack names.
+newCloudFormationCollectionFilter ::
+  CloudFormationCollectionFilter
+newCloudFormationCollectionFilter =
+  CloudFormationCollectionFilter'
+    { stackNames =
+        Prelude.Nothing
+    }
+
+-- | An array of CloudFormation stack names.
+cloudFormationCollectionFilter_stackNames :: Lens.Lens' CloudFormationCollectionFilter (Prelude.Maybe [Prelude.Text])
+cloudFormationCollectionFilter_stackNames = Lens.lens (\CloudFormationCollectionFilter' {stackNames} -> stackNames) (\s@CloudFormationCollectionFilter' {} a -> s {stackNames = a} :: CloudFormationCollectionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CloudFormationCollectionFilter where
+  parseJSON =
+    Data.withObject
+      "CloudFormationCollectionFilter"
+      ( \x ->
+          CloudFormationCollectionFilter'
+            Prelude.<$> (x Data..:? "StackNames" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    CloudFormationCollectionFilter
+  where
+  hashWithSalt
+    _salt
+    CloudFormationCollectionFilter' {..} =
+      _salt `Prelude.hashWithSalt` stackNames
+
+instance
+  Prelude.NFData
+    CloudFormationCollectionFilter
+  where
+  rnf CloudFormationCollectionFilter' {..} =
+    Prelude.rnf stackNames
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudFormationCostEstimationResourceCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/CloudFormationCostEstimationResourceCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudFormationCostEstimationResourceCollectionFilter.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.DevOpsGuru.Types.CloudFormationCostEstimationResourceCollectionFilter
+-- 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.DevOpsGuru.Types.CloudFormationCostEstimationResourceCollectionFilter 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
+
+-- | Information about an Amazon Web Services CloudFormation stack used to
+-- create a monthly cost estimate for DevOps Guru to analyze Amazon Web
+-- Services resources. The maximum number of stacks you can specify for a
+-- cost estimate is one. The estimate created is for the cost to analyze
+-- the Amazon Web Services resources defined by the stack. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+--
+-- /See:/ 'newCloudFormationCostEstimationResourceCollectionFilter' smart constructor.
+data CloudFormationCostEstimationResourceCollectionFilter = CloudFormationCostEstimationResourceCollectionFilter'
+  { -- | An array of CloudFormation stack names. Its size is fixed at 1 item.
+    stackNames :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudFormationCostEstimationResourceCollectionFilter' 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:
+--
+-- 'stackNames', 'cloudFormationCostEstimationResourceCollectionFilter_stackNames' - An array of CloudFormation stack names. Its size is fixed at 1 item.
+newCloudFormationCostEstimationResourceCollectionFilter ::
+  CloudFormationCostEstimationResourceCollectionFilter
+newCloudFormationCostEstimationResourceCollectionFilter =
+  CloudFormationCostEstimationResourceCollectionFilter'
+    { stackNames =
+        Prelude.Nothing
+    }
+
+-- | An array of CloudFormation stack names. Its size is fixed at 1 item.
+cloudFormationCostEstimationResourceCollectionFilter_stackNames :: Lens.Lens' CloudFormationCostEstimationResourceCollectionFilter (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+cloudFormationCostEstimationResourceCollectionFilter_stackNames = Lens.lens (\CloudFormationCostEstimationResourceCollectionFilter' {stackNames} -> stackNames) (\s@CloudFormationCostEstimationResourceCollectionFilter' {} a -> s {stackNames = a} :: CloudFormationCostEstimationResourceCollectionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    CloudFormationCostEstimationResourceCollectionFilter
+  where
+  parseJSON =
+    Data.withObject
+      "CloudFormationCostEstimationResourceCollectionFilter"
+      ( \x ->
+          CloudFormationCostEstimationResourceCollectionFilter'
+            Prelude.<$> (x Data..:? "StackNames")
+      )
+
+instance
+  Prelude.Hashable
+    CloudFormationCostEstimationResourceCollectionFilter
+  where
+  hashWithSalt
+    _salt
+    CloudFormationCostEstimationResourceCollectionFilter' {..} =
+      _salt `Prelude.hashWithSalt` stackNames
+
+instance
+  Prelude.NFData
+    CloudFormationCostEstimationResourceCollectionFilter
+  where
+  rnf
+    CloudFormationCostEstimationResourceCollectionFilter' {..} =
+      Prelude.rnf stackNames
+
+instance
+  Data.ToJSON
+    CloudFormationCostEstimationResourceCollectionFilter
+  where
+  toJSON
+    CloudFormationCostEstimationResourceCollectionFilter' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [("StackNames" Data..=) Prelude.<$> stackNames]
+        )
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudFormationHealth.hs b/gen/Amazonka/DevOpsGuru/Types/CloudFormationHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudFormationHealth.hs
@@ -0,0 +1,112 @@
+{-# 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.DevOpsGuru.Types.CloudFormationHealth
+-- 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.DevOpsGuru.Types.CloudFormationHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightHealth
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the health of Amazon Web Services resources in your
+-- account that are specified by an Amazon Web Services CloudFormation
+-- stack.
+--
+-- /See:/ 'newCloudFormationHealth' smart constructor.
+data CloudFormationHealth = CloudFormationHealth'
+  { -- | Number of resources that DevOps Guru is monitoring in your account that
+    -- are specified by an Amazon Web Services CloudFormation stack.
+    analyzedResourceCount :: Prelude.Maybe Prelude.Integer,
+    -- | Information about the health of the Amazon Web Services resources in
+    -- your account that are specified by an Amazon Web Services CloudFormation
+    -- stack, including the number of open proactive, open reactive insights,
+    -- and the Mean Time to Recover (MTTR) of closed insights.
+    insight :: Prelude.Maybe InsightHealth,
+    -- | The name of the CloudFormation stack.
+    stackName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudFormationHealth' 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:
+--
+-- 'analyzedResourceCount', 'cloudFormationHealth_analyzedResourceCount' - Number of resources that DevOps Guru is monitoring in your account that
+-- are specified by an Amazon Web Services CloudFormation stack.
+--
+-- 'insight', 'cloudFormationHealth_insight' - Information about the health of the Amazon Web Services resources in
+-- your account that are specified by an Amazon Web Services CloudFormation
+-- stack, including the number of open proactive, open reactive insights,
+-- and the Mean Time to Recover (MTTR) of closed insights.
+--
+-- 'stackName', 'cloudFormationHealth_stackName' - The name of the CloudFormation stack.
+newCloudFormationHealth ::
+  CloudFormationHealth
+newCloudFormationHealth =
+  CloudFormationHealth'
+    { analyzedResourceCount =
+        Prelude.Nothing,
+      insight = Prelude.Nothing,
+      stackName = Prelude.Nothing
+    }
+
+-- | Number of resources that DevOps Guru is monitoring in your account that
+-- are specified by an Amazon Web Services CloudFormation stack.
+cloudFormationHealth_analyzedResourceCount :: Lens.Lens' CloudFormationHealth (Prelude.Maybe Prelude.Integer)
+cloudFormationHealth_analyzedResourceCount = Lens.lens (\CloudFormationHealth' {analyzedResourceCount} -> analyzedResourceCount) (\s@CloudFormationHealth' {} a -> s {analyzedResourceCount = a} :: CloudFormationHealth)
+
+-- | Information about the health of the Amazon Web Services resources in
+-- your account that are specified by an Amazon Web Services CloudFormation
+-- stack, including the number of open proactive, open reactive insights,
+-- and the Mean Time to Recover (MTTR) of closed insights.
+cloudFormationHealth_insight :: Lens.Lens' CloudFormationHealth (Prelude.Maybe InsightHealth)
+cloudFormationHealth_insight = Lens.lens (\CloudFormationHealth' {insight} -> insight) (\s@CloudFormationHealth' {} a -> s {insight = a} :: CloudFormationHealth)
+
+-- | The name of the CloudFormation stack.
+cloudFormationHealth_stackName :: Lens.Lens' CloudFormationHealth (Prelude.Maybe Prelude.Text)
+cloudFormationHealth_stackName = Lens.lens (\CloudFormationHealth' {stackName} -> stackName) (\s@CloudFormationHealth' {} a -> s {stackName = a} :: CloudFormationHealth)
+
+instance Data.FromJSON CloudFormationHealth where
+  parseJSON =
+    Data.withObject
+      "CloudFormationHealth"
+      ( \x ->
+          CloudFormationHealth'
+            Prelude.<$> (x Data..:? "AnalyzedResourceCount")
+            Prelude.<*> (x Data..:? "Insight")
+            Prelude.<*> (x Data..:? "StackName")
+      )
+
+instance Prelude.Hashable CloudFormationHealth where
+  hashWithSalt _salt CloudFormationHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` analyzedResourceCount
+      `Prelude.hashWithSalt` insight
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData CloudFormationHealth where
+  rnf CloudFormationHealth' {..} =
+    Prelude.rnf analyzedResourceCount
+      `Prelude.seq` Prelude.rnf insight
+      `Prelude.seq` Prelude.rnf stackName
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricDataStatusCode.hs b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricDataStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricDataStatusCode.hs
@@ -0,0 +1,76 @@
+{-# 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.DevOpsGuru.Types.CloudWatchMetricDataStatusCode
+-- 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.DevOpsGuru.Types.CloudWatchMetricDataStatusCode
+  ( CloudWatchMetricDataStatusCode
+      ( ..,
+        CloudWatchMetricDataStatusCode_Complete,
+        CloudWatchMetricDataStatusCode_InternalError,
+        CloudWatchMetricDataStatusCode_PartialData
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CloudWatchMetricDataStatusCode = CloudWatchMetricDataStatusCode'
+  { fromCloudWatchMetricDataStatusCode ::
+      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 CloudWatchMetricDataStatusCode_Complete :: CloudWatchMetricDataStatusCode
+pattern CloudWatchMetricDataStatusCode_Complete = CloudWatchMetricDataStatusCode' "Complete"
+
+pattern CloudWatchMetricDataStatusCode_InternalError :: CloudWatchMetricDataStatusCode
+pattern CloudWatchMetricDataStatusCode_InternalError = CloudWatchMetricDataStatusCode' "InternalError"
+
+pattern CloudWatchMetricDataStatusCode_PartialData :: CloudWatchMetricDataStatusCode
+pattern CloudWatchMetricDataStatusCode_PartialData = CloudWatchMetricDataStatusCode' "PartialData"
+
+{-# COMPLETE
+  CloudWatchMetricDataStatusCode_Complete,
+  CloudWatchMetricDataStatusCode_InternalError,
+  CloudWatchMetricDataStatusCode_PartialData,
+  CloudWatchMetricDataStatusCode'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDataSummary.hs b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDataSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDataSummary.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.DevOpsGuru.Types.CloudWatchMetricsDataSummary
+-- 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.DevOpsGuru.Types.CloudWatchMetricsDataSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricDataStatusCode
+import Amazonka.DevOpsGuru.Types.TimestampMetricValuePair
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the analyzed metrics that displayed anomalous
+-- behavior.
+--
+-- /See:/ 'newCloudWatchMetricsDataSummary' smart constructor.
+data CloudWatchMetricsDataSummary = CloudWatchMetricsDataSummary'
+  { -- | This is an enum of the status showing whether the metric value pair list
+    -- has partial or complete data, or if there was an error.
+    statusCode :: Prelude.Maybe CloudWatchMetricDataStatusCode,
+    -- | This is a list of Amazon CloudWatch metric values at given timestamp.
+    timestampMetricValuePairList :: Prelude.Maybe [TimestampMetricValuePair]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchMetricsDataSummary' 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:
+--
+-- 'statusCode', 'cloudWatchMetricsDataSummary_statusCode' - This is an enum of the status showing whether the metric value pair list
+-- has partial or complete data, or if there was an error.
+--
+-- 'timestampMetricValuePairList', 'cloudWatchMetricsDataSummary_timestampMetricValuePairList' - This is a list of Amazon CloudWatch metric values at given timestamp.
+newCloudWatchMetricsDataSummary ::
+  CloudWatchMetricsDataSummary
+newCloudWatchMetricsDataSummary =
+  CloudWatchMetricsDataSummary'
+    { statusCode =
+        Prelude.Nothing,
+      timestampMetricValuePairList =
+        Prelude.Nothing
+    }
+
+-- | This is an enum of the status showing whether the metric value pair list
+-- has partial or complete data, or if there was an error.
+cloudWatchMetricsDataSummary_statusCode :: Lens.Lens' CloudWatchMetricsDataSummary (Prelude.Maybe CloudWatchMetricDataStatusCode)
+cloudWatchMetricsDataSummary_statusCode = Lens.lens (\CloudWatchMetricsDataSummary' {statusCode} -> statusCode) (\s@CloudWatchMetricsDataSummary' {} a -> s {statusCode = a} :: CloudWatchMetricsDataSummary)
+
+-- | This is a list of Amazon CloudWatch metric values at given timestamp.
+cloudWatchMetricsDataSummary_timestampMetricValuePairList :: Lens.Lens' CloudWatchMetricsDataSummary (Prelude.Maybe [TimestampMetricValuePair])
+cloudWatchMetricsDataSummary_timestampMetricValuePairList = Lens.lens (\CloudWatchMetricsDataSummary' {timestampMetricValuePairList} -> timestampMetricValuePairList) (\s@CloudWatchMetricsDataSummary' {} a -> s {timestampMetricValuePairList = a} :: CloudWatchMetricsDataSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CloudWatchMetricsDataSummary where
+  parseJSON =
+    Data.withObject
+      "CloudWatchMetricsDataSummary"
+      ( \x ->
+          CloudWatchMetricsDataSummary'
+            Prelude.<$> (x Data..:? "StatusCode")
+            Prelude.<*> ( x
+                            Data..:? "TimestampMetricValuePairList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    CloudWatchMetricsDataSummary
+  where
+  hashWithSalt _salt CloudWatchMetricsDataSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` timestampMetricValuePairList
+
+instance Prelude.NFData CloudWatchMetricsDataSummary where
+  rnf CloudWatchMetricsDataSummary' {..} =
+    Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf timestampMetricValuePairList
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDetail.hs b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDetail.hs
@@ -0,0 +1,166 @@
+{-# 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.DevOpsGuru.Types.CloudWatchMetricsDetail
+-- 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.DevOpsGuru.Types.CloudWatchMetricsDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDataSummary
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsDimension
+import Amazonka.DevOpsGuru.Types.CloudWatchMetricsStat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an Amazon CloudWatch metric.
+--
+-- /See:/ 'newCloudWatchMetricsDetail' smart constructor.
+data CloudWatchMetricsDetail = CloudWatchMetricsDetail'
+  { -- | An array of CloudWatch dimensions associated with
+    dimensions :: Prelude.Maybe [CloudWatchMetricsDimension],
+    -- | This object returns anomaly metric data.
+    metricDataSummary :: Prelude.Maybe CloudWatchMetricsDataSummary,
+    -- | The name of the CloudWatch metric.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the CloudWatch metric. A namespace is a container for
+    -- CloudWatch metrics.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The length of time associated with the CloudWatch metric in number of
+    -- seconds.
+    period :: Prelude.Maybe Prelude.Int,
+    -- | The type of statistic associated with the CloudWatch metric. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistic Statistics>
+    -- in the /Amazon CloudWatch User Guide/.
+    stat :: Prelude.Maybe CloudWatchMetricsStat,
+    -- | The unit of measure used for the CloudWatch metric. For example,
+    -- @Bytes@, @Seconds@, @Count@, and @Percent@.
+    unit :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchMetricsDetail' 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:
+--
+-- 'dimensions', 'cloudWatchMetricsDetail_dimensions' - An array of CloudWatch dimensions associated with
+--
+-- 'metricDataSummary', 'cloudWatchMetricsDetail_metricDataSummary' - This object returns anomaly metric data.
+--
+-- 'metricName', 'cloudWatchMetricsDetail_metricName' - The name of the CloudWatch metric.
+--
+-- 'namespace', 'cloudWatchMetricsDetail_namespace' - The namespace of the CloudWatch metric. A namespace is a container for
+-- CloudWatch metrics.
+--
+-- 'period', 'cloudWatchMetricsDetail_period' - The length of time associated with the CloudWatch metric in number of
+-- seconds.
+--
+-- 'stat', 'cloudWatchMetricsDetail_stat' - The type of statistic associated with the CloudWatch metric. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistic Statistics>
+-- in the /Amazon CloudWatch User Guide/.
+--
+-- 'unit', 'cloudWatchMetricsDetail_unit' - The unit of measure used for the CloudWatch metric. For example,
+-- @Bytes@, @Seconds@, @Count@, and @Percent@.
+newCloudWatchMetricsDetail ::
+  CloudWatchMetricsDetail
+newCloudWatchMetricsDetail =
+  CloudWatchMetricsDetail'
+    { dimensions =
+        Prelude.Nothing,
+      metricDataSummary = Prelude.Nothing,
+      metricName = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      period = Prelude.Nothing,
+      stat = Prelude.Nothing,
+      unit = Prelude.Nothing
+    }
+
+-- | An array of CloudWatch dimensions associated with
+cloudWatchMetricsDetail_dimensions :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe [CloudWatchMetricsDimension])
+cloudWatchMetricsDetail_dimensions = Lens.lens (\CloudWatchMetricsDetail' {dimensions} -> dimensions) (\s@CloudWatchMetricsDetail' {} a -> s {dimensions = a} :: CloudWatchMetricsDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | This object returns anomaly metric data.
+cloudWatchMetricsDetail_metricDataSummary :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe CloudWatchMetricsDataSummary)
+cloudWatchMetricsDetail_metricDataSummary = Lens.lens (\CloudWatchMetricsDetail' {metricDataSummary} -> metricDataSummary) (\s@CloudWatchMetricsDetail' {} a -> s {metricDataSummary = a} :: CloudWatchMetricsDetail)
+
+-- | The name of the CloudWatch metric.
+cloudWatchMetricsDetail_metricName :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe Prelude.Text)
+cloudWatchMetricsDetail_metricName = Lens.lens (\CloudWatchMetricsDetail' {metricName} -> metricName) (\s@CloudWatchMetricsDetail' {} a -> s {metricName = a} :: CloudWatchMetricsDetail)
+
+-- | The namespace of the CloudWatch metric. A namespace is a container for
+-- CloudWatch metrics.
+cloudWatchMetricsDetail_namespace :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe Prelude.Text)
+cloudWatchMetricsDetail_namespace = Lens.lens (\CloudWatchMetricsDetail' {namespace} -> namespace) (\s@CloudWatchMetricsDetail' {} a -> s {namespace = a} :: CloudWatchMetricsDetail)
+
+-- | The length of time associated with the CloudWatch metric in number of
+-- seconds.
+cloudWatchMetricsDetail_period :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe Prelude.Int)
+cloudWatchMetricsDetail_period = Lens.lens (\CloudWatchMetricsDetail' {period} -> period) (\s@CloudWatchMetricsDetail' {} a -> s {period = a} :: CloudWatchMetricsDetail)
+
+-- | The type of statistic associated with the CloudWatch metric. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistic Statistics>
+-- in the /Amazon CloudWatch User Guide/.
+cloudWatchMetricsDetail_stat :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe CloudWatchMetricsStat)
+cloudWatchMetricsDetail_stat = Lens.lens (\CloudWatchMetricsDetail' {stat} -> stat) (\s@CloudWatchMetricsDetail' {} a -> s {stat = a} :: CloudWatchMetricsDetail)
+
+-- | The unit of measure used for the CloudWatch metric. For example,
+-- @Bytes@, @Seconds@, @Count@, and @Percent@.
+cloudWatchMetricsDetail_unit :: Lens.Lens' CloudWatchMetricsDetail (Prelude.Maybe Prelude.Text)
+cloudWatchMetricsDetail_unit = Lens.lens (\CloudWatchMetricsDetail' {unit} -> unit) (\s@CloudWatchMetricsDetail' {} a -> s {unit = a} :: CloudWatchMetricsDetail)
+
+instance Data.FromJSON CloudWatchMetricsDetail where
+  parseJSON =
+    Data.withObject
+      "CloudWatchMetricsDetail"
+      ( \x ->
+          CloudWatchMetricsDetail'
+            Prelude.<$> (x Data..:? "Dimensions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "MetricDataSummary")
+            Prelude.<*> (x Data..:? "MetricName")
+            Prelude.<*> (x Data..:? "Namespace")
+            Prelude.<*> (x Data..:? "Period")
+            Prelude.<*> (x Data..:? "Stat")
+            Prelude.<*> (x Data..:? "Unit")
+      )
+
+instance Prelude.Hashable CloudWatchMetricsDetail where
+  hashWithSalt _salt CloudWatchMetricsDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensions
+      `Prelude.hashWithSalt` metricDataSummary
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` period
+      `Prelude.hashWithSalt` stat
+      `Prelude.hashWithSalt` unit
+
+instance Prelude.NFData CloudWatchMetricsDetail where
+  rnf CloudWatchMetricsDetail' {..} =
+    Prelude.rnf dimensions
+      `Prelude.seq` Prelude.rnf metricDataSummary
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf period
+      `Prelude.seq` Prelude.rnf stat
+      `Prelude.seq` Prelude.rnf unit
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDimension.hs b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDimension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsDimension.hs
@@ -0,0 +1,89 @@
+{-# 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.DevOpsGuru.Types.CloudWatchMetricsDimension
+-- 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.DevOpsGuru.Types.CloudWatchMetricsDimension 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 dimension of an Amazon CloudWatch metric that is used when DevOps
+-- Guru analyzes the resources in your account for operational problems and
+-- anomalous behavior. A dimension is a name\/value pair that is part of
+-- the identity of a metric. A metric can have up to 10 dimensions. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension Dimensions>
+-- in the /Amazon CloudWatch User Guide/.
+--
+-- /See:/ 'newCloudWatchMetricsDimension' smart constructor.
+data CloudWatchMetricsDimension = CloudWatchMetricsDimension'
+  { -- | The name of the CloudWatch dimension.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The value of the CloudWatch dimension.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchMetricsDimension' 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', 'cloudWatchMetricsDimension_name' - The name of the CloudWatch dimension.
+--
+-- 'value', 'cloudWatchMetricsDimension_value' - The value of the CloudWatch dimension.
+newCloudWatchMetricsDimension ::
+  CloudWatchMetricsDimension
+newCloudWatchMetricsDimension =
+  CloudWatchMetricsDimension'
+    { name = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The name of the CloudWatch dimension.
+cloudWatchMetricsDimension_name :: Lens.Lens' CloudWatchMetricsDimension (Prelude.Maybe Prelude.Text)
+cloudWatchMetricsDimension_name = Lens.lens (\CloudWatchMetricsDimension' {name} -> name) (\s@CloudWatchMetricsDimension' {} a -> s {name = a} :: CloudWatchMetricsDimension)
+
+-- | The value of the CloudWatch dimension.
+cloudWatchMetricsDimension_value :: Lens.Lens' CloudWatchMetricsDimension (Prelude.Maybe Prelude.Text)
+cloudWatchMetricsDimension_value = Lens.lens (\CloudWatchMetricsDimension' {value} -> value) (\s@CloudWatchMetricsDimension' {} a -> s {value = a} :: CloudWatchMetricsDimension)
+
+instance Data.FromJSON CloudWatchMetricsDimension where
+  parseJSON =
+    Data.withObject
+      "CloudWatchMetricsDimension"
+      ( \x ->
+          CloudWatchMetricsDimension'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable CloudWatchMetricsDimension where
+  hashWithSalt _salt CloudWatchMetricsDimension' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData CloudWatchMetricsDimension where
+  rnf CloudWatchMetricsDimension' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsStat.hs b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsStat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CloudWatchMetricsStat.hs
@@ -0,0 +1,101 @@
+{-# 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.DevOpsGuru.Types.CloudWatchMetricsStat
+-- 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.DevOpsGuru.Types.CloudWatchMetricsStat
+  ( CloudWatchMetricsStat
+      ( ..,
+        CloudWatchMetricsStat_Average,
+        CloudWatchMetricsStat_Maximum,
+        CloudWatchMetricsStat_Minimum,
+        CloudWatchMetricsStat_P50,
+        CloudWatchMetricsStat_P90,
+        CloudWatchMetricsStat_P99,
+        CloudWatchMetricsStat_SampleCount,
+        CloudWatchMetricsStat_Sum
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CloudWatchMetricsStat = CloudWatchMetricsStat'
+  { fromCloudWatchMetricsStat ::
+      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 CloudWatchMetricsStat_Average :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_Average = CloudWatchMetricsStat' "Average"
+
+pattern CloudWatchMetricsStat_Maximum :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_Maximum = CloudWatchMetricsStat' "Maximum"
+
+pattern CloudWatchMetricsStat_Minimum :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_Minimum = CloudWatchMetricsStat' "Minimum"
+
+pattern CloudWatchMetricsStat_P50 :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_P50 = CloudWatchMetricsStat' "p50"
+
+pattern CloudWatchMetricsStat_P90 :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_P90 = CloudWatchMetricsStat' "p90"
+
+pattern CloudWatchMetricsStat_P99 :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_P99 = CloudWatchMetricsStat' "p99"
+
+pattern CloudWatchMetricsStat_SampleCount :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_SampleCount = CloudWatchMetricsStat' "SampleCount"
+
+pattern CloudWatchMetricsStat_Sum :: CloudWatchMetricsStat
+pattern CloudWatchMetricsStat_Sum = CloudWatchMetricsStat' "Sum"
+
+{-# COMPLETE
+  CloudWatchMetricsStat_Average,
+  CloudWatchMetricsStat_Maximum,
+  CloudWatchMetricsStat_Minimum,
+  CloudWatchMetricsStat_P50,
+  CloudWatchMetricsStat_P90,
+  CloudWatchMetricsStat_P99,
+  CloudWatchMetricsStat_SampleCount,
+  CloudWatchMetricsStat_Sum,
+  CloudWatchMetricsStat'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/CostEstimationResourceCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/CostEstimationResourceCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CostEstimationResourceCollectionFilter.hs
@@ -0,0 +1,221 @@
+{-# 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.DevOpsGuru.Types.CostEstimationResourceCollectionFilter
+-- 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.DevOpsGuru.Types.CostEstimationResourceCollectionFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CloudFormationCostEstimationResourceCollectionFilter
+import Amazonka.DevOpsGuru.Types.TagCostEstimationResourceCollectionFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a filter used to specify which Amazon Web Services
+-- resources are analyzed to create a monthly DevOps Guru cost estimate.
+-- For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/cost-estimate.html Estimate your Amazon DevOps Guru costs>
+-- and
+-- <http://aws.amazon.com/devops-guru/pricing/ Amazon DevOps Guru pricing>.
+--
+-- /See:/ 'newCostEstimationResourceCollectionFilter' smart constructor.
+data CostEstimationResourceCollectionFilter = CostEstimationResourceCollectionFilter'
+  { -- | An object that specifies the CloudFormation stack that defines the
+    -- Amazon Web Services resources used to create a monthly estimate for
+    -- DevOps Guru.
+    cloudFormation :: Prelude.Maybe CloudFormationCostEstimationResourceCollectionFilter,
+    -- | The Amazon Web Services tags used to filter the resource collection that
+    -- is used for a cost estimate.
+    --
+    -- Tags help you identify and organize your Amazon Web Services resources.
+    -- Many Amazon Web Services services support tagging, so you can assign the
+    -- same tag to resources from different services to indicate that the
+    -- resources are related. For example, you can assign the same tag to an
+    -- Amazon DynamoDB table resource that you assign to an Lambda function.
+    -- For more information about using tags, see the
+    -- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+    -- whitepaper.
+    --
+    -- Each Amazon Web Services tag has two parts.
+    --
+    -- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+    --     @Secret@). Tag /keys/ are case-sensitive.
+    --
+    -- -   An optional field known as a tag /value/ (for example,
+    --     @111122223333@, @Production@, or a team name). Omitting the tag
+    --     /value/ is the same as using an empty string. Like tag /keys/, tag
+    --     /values/ are case-sensitive.
+    --
+    -- Together these are known as /key/-/value/ pairs.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    tags :: Prelude.Maybe [TagCostEstimationResourceCollectionFilter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CostEstimationResourceCollectionFilter' 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:
+--
+-- 'cloudFormation', 'costEstimationResourceCollectionFilter_cloudFormation' - An object that specifies the CloudFormation stack that defines the
+-- Amazon Web Services resources used to create a monthly estimate for
+-- DevOps Guru.
+--
+-- 'tags', 'costEstimationResourceCollectionFilter_tags' - The Amazon Web Services tags used to filter the resource collection that
+-- is used for a cost estimate.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+newCostEstimationResourceCollectionFilter ::
+  CostEstimationResourceCollectionFilter
+newCostEstimationResourceCollectionFilter =
+  CostEstimationResourceCollectionFilter'
+    { cloudFormation =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | An object that specifies the CloudFormation stack that defines the
+-- Amazon Web Services resources used to create a monthly estimate for
+-- DevOps Guru.
+costEstimationResourceCollectionFilter_cloudFormation :: Lens.Lens' CostEstimationResourceCollectionFilter (Prelude.Maybe CloudFormationCostEstimationResourceCollectionFilter)
+costEstimationResourceCollectionFilter_cloudFormation = Lens.lens (\CostEstimationResourceCollectionFilter' {cloudFormation} -> cloudFormation) (\s@CostEstimationResourceCollectionFilter' {} a -> s {cloudFormation = a} :: CostEstimationResourceCollectionFilter)
+
+-- | The Amazon Web Services tags used to filter the resource collection that
+-- is used for a cost estimate.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+costEstimationResourceCollectionFilter_tags :: Lens.Lens' CostEstimationResourceCollectionFilter (Prelude.Maybe [TagCostEstimationResourceCollectionFilter])
+costEstimationResourceCollectionFilter_tags = Lens.lens (\CostEstimationResourceCollectionFilter' {tags} -> tags) (\s@CostEstimationResourceCollectionFilter' {} a -> s {tags = a} :: CostEstimationResourceCollectionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    CostEstimationResourceCollectionFilter
+  where
+  parseJSON =
+    Data.withObject
+      "CostEstimationResourceCollectionFilter"
+      ( \x ->
+          CostEstimationResourceCollectionFilter'
+            Prelude.<$> (x Data..:? "CloudFormation")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    CostEstimationResourceCollectionFilter
+  where
+  hashWithSalt
+    _salt
+    CostEstimationResourceCollectionFilter' {..} =
+      _salt
+        `Prelude.hashWithSalt` cloudFormation
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    CostEstimationResourceCollectionFilter
+  where
+  rnf CostEstimationResourceCollectionFilter' {..} =
+    Prelude.rnf cloudFormation
+      `Prelude.seq` Prelude.rnf tags
+
+instance
+  Data.ToJSON
+    CostEstimationResourceCollectionFilter
+  where
+  toJSON CostEstimationResourceCollectionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CloudFormation" Data..=)
+              Prelude.<$> cloudFormation,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/CostEstimationServiceResourceState.hs b/gen/Amazonka/DevOpsGuru/Types/CostEstimationServiceResourceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CostEstimationServiceResourceState.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.CostEstimationServiceResourceState
+-- 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.DevOpsGuru.Types.CostEstimationServiceResourceState
+  ( CostEstimationServiceResourceState
+      ( ..,
+        CostEstimationServiceResourceState_ACTIVE,
+        CostEstimationServiceResourceState_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CostEstimationServiceResourceState = CostEstimationServiceResourceState'
+  { fromCostEstimationServiceResourceState ::
+      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 CostEstimationServiceResourceState_ACTIVE :: CostEstimationServiceResourceState
+pattern CostEstimationServiceResourceState_ACTIVE = CostEstimationServiceResourceState' "ACTIVE"
+
+pattern CostEstimationServiceResourceState_INACTIVE :: CostEstimationServiceResourceState
+pattern CostEstimationServiceResourceState_INACTIVE = CostEstimationServiceResourceState' "INACTIVE"
+
+{-# COMPLETE
+  CostEstimationServiceResourceState_ACTIVE,
+  CostEstimationServiceResourceState_INACTIVE,
+  CostEstimationServiceResourceState'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/CostEstimationStatus.hs b/gen/Amazonka/DevOpsGuru/Types/CostEstimationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CostEstimationStatus.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.CostEstimationStatus
+-- 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.DevOpsGuru.Types.CostEstimationStatus
+  ( CostEstimationStatus
+      ( ..,
+        CostEstimationStatus_COMPLETED,
+        CostEstimationStatus_ONGOING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CostEstimationStatus = CostEstimationStatus'
+  { fromCostEstimationStatus ::
+      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 CostEstimationStatus_COMPLETED :: CostEstimationStatus
+pattern CostEstimationStatus_COMPLETED = CostEstimationStatus' "COMPLETED"
+
+pattern CostEstimationStatus_ONGOING :: CostEstimationStatus
+pattern CostEstimationStatus_ONGOING = CostEstimationStatus' "ONGOING"
+
+{-# COMPLETE
+  CostEstimationStatus_COMPLETED,
+  CostEstimationStatus_ONGOING,
+  CostEstimationStatus'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/CostEstimationTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/CostEstimationTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/CostEstimationTimeRange.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.DevOpsGuru.Types.CostEstimationTimeRange
+-- 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.DevOpsGuru.Types.CostEstimationTimeRange 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 time range of a cost estimation.
+--
+-- /See:/ 'newCostEstimationTimeRange' smart constructor.
+data CostEstimationTimeRange = CostEstimationTimeRange'
+  { -- | The end time of the cost estimation.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The start time of the cost estimation.
+    startTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CostEstimationTimeRange' 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', 'costEstimationTimeRange_endTime' - The end time of the cost estimation.
+--
+-- 'startTime', 'costEstimationTimeRange_startTime' - The start time of the cost estimation.
+newCostEstimationTimeRange ::
+  CostEstimationTimeRange
+newCostEstimationTimeRange =
+  CostEstimationTimeRange'
+    { endTime = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | The end time of the cost estimation.
+costEstimationTimeRange_endTime :: Lens.Lens' CostEstimationTimeRange (Prelude.Maybe Prelude.UTCTime)
+costEstimationTimeRange_endTime = Lens.lens (\CostEstimationTimeRange' {endTime} -> endTime) (\s@CostEstimationTimeRange' {} a -> s {endTime = a} :: CostEstimationTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The start time of the cost estimation.
+costEstimationTimeRange_startTime :: Lens.Lens' CostEstimationTimeRange (Prelude.Maybe Prelude.UTCTime)
+costEstimationTimeRange_startTime = Lens.lens (\CostEstimationTimeRange' {startTime} -> startTime) (\s@CostEstimationTimeRange' {} a -> s {startTime = a} :: CostEstimationTimeRange) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON CostEstimationTimeRange where
+  parseJSON =
+    Data.withObject
+      "CostEstimationTimeRange"
+      ( \x ->
+          CostEstimationTimeRange'
+            Prelude.<$> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..:? "StartTime")
+      )
+
+instance Prelude.Hashable CostEstimationTimeRange where
+  hashWithSalt _salt CostEstimationTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData CostEstimationTimeRange where
+  rnf CostEstimationTimeRange' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/EndTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/EndTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EndTimeRange.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.DevOpsGuru.Types.EndTimeRange
+-- 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.DevOpsGuru.Types.EndTimeRange 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 range of time that specifies when anomalous behavior in an anomaly or
+-- insight ended.
+--
+-- /See:/ 'newEndTimeRange' smart constructor.
+data EndTimeRange = EndTimeRange'
+  { -- | The earliest end time in the time range.
+    fromTime :: Prelude.Maybe Data.POSIX,
+    -- | The latest end time in the time range.
+    toTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndTimeRange' 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:
+--
+-- 'fromTime', 'endTimeRange_fromTime' - The earliest end time in the time range.
+--
+-- 'toTime', 'endTimeRange_toTime' - The latest end time in the time range.
+newEndTimeRange ::
+  EndTimeRange
+newEndTimeRange =
+  EndTimeRange'
+    { fromTime = Prelude.Nothing,
+      toTime = Prelude.Nothing
+    }
+
+-- | The earliest end time in the time range.
+endTimeRange_fromTime :: Lens.Lens' EndTimeRange (Prelude.Maybe Prelude.UTCTime)
+endTimeRange_fromTime = Lens.lens (\EndTimeRange' {fromTime} -> fromTime) (\s@EndTimeRange' {} a -> s {fromTime = a} :: EndTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The latest end time in the time range.
+endTimeRange_toTime :: Lens.Lens' EndTimeRange (Prelude.Maybe Prelude.UTCTime)
+endTimeRange_toTime = Lens.lens (\EndTimeRange' {toTime} -> toTime) (\s@EndTimeRange' {} a -> s {toTime = a} :: EndTimeRange) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable EndTimeRange where
+  hashWithSalt _salt EndTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromTime
+      `Prelude.hashWithSalt` toTime
+
+instance Prelude.NFData EndTimeRange where
+  rnf EndTimeRange' {..} =
+    Prelude.rnf fromTime
+      `Prelude.seq` Prelude.rnf toTime
+
+instance Data.ToJSON EndTimeRange where
+  toJSON EndTimeRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FromTime" Data..=) Prelude.<$> fromTime,
+            ("ToTime" Data..=) Prelude.<$> toTime
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/Event.hs b/gen/Amazonka/DevOpsGuru/Types/Event.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/Event.hs
@@ -0,0 +1,171 @@
+{-# 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.DevOpsGuru.Types.Event
+-- 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.DevOpsGuru.Types.Event where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.EventClass
+import Amazonka.DevOpsGuru.Types.EventDataSource
+import Amazonka.DevOpsGuru.Types.EventResource
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | An Amazon Web Services resource event. Amazon Web Services resource
+-- events and metrics are analyzed by DevOps Guru to find anomalous
+-- behavior and provide recommendations to improve your operational
+-- solutions.
+--
+-- /See:/ 'newEvent' smart constructor.
+data Event = Event'
+  { -- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, where DevOps Guru
+    -- analysis found the event.
+    dataSource :: Prelude.Maybe EventDataSource,
+    -- | The class of the event. The class specifies what the event is related
+    -- to, such as an infrastructure change, a deployment, or a schema change.
+    eventClass :: Prelude.Maybe EventClass,
+    -- | The Amazon Web Services source that emitted the event.
+    eventSource :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the event.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event.
+    name :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | An @EventResource@ object that contains information about the resource
+    -- that emitted the event.
+    resources :: Prelude.Maybe [EventResource],
+    -- | A @Timestamp@ that specifies the time the event occurred.
+    time :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Event' 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:
+--
+-- 'dataSource', 'event_dataSource' - The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, where DevOps Guru
+-- analysis found the event.
+--
+-- 'eventClass', 'event_eventClass' - The class of the event. The class specifies what the event is related
+-- to, such as an infrastructure change, a deployment, or a schema change.
+--
+-- 'eventSource', 'event_eventSource' - The Amazon Web Services source that emitted the event.
+--
+-- 'id', 'event_id' - The ID of the event.
+--
+-- 'name', 'event_name' - The name of the event.
+--
+-- 'resourceCollection', 'event_resourceCollection' - Undocumented member.
+--
+-- 'resources', 'event_resources' - An @EventResource@ object that contains information about the resource
+-- that emitted the event.
+--
+-- 'time', 'event_time' - A @Timestamp@ that specifies the time the event occurred.
+newEvent ::
+  Event
+newEvent =
+  Event'
+    { dataSource = Prelude.Nothing,
+      eventClass = Prelude.Nothing,
+      eventSource = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      time = Prelude.Nothing
+    }
+
+-- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, where DevOps Guru
+-- analysis found the event.
+event_dataSource :: Lens.Lens' Event (Prelude.Maybe EventDataSource)
+event_dataSource = Lens.lens (\Event' {dataSource} -> dataSource) (\s@Event' {} a -> s {dataSource = a} :: Event)
+
+-- | The class of the event. The class specifies what the event is related
+-- to, such as an infrastructure change, a deployment, or a schema change.
+event_eventClass :: Lens.Lens' Event (Prelude.Maybe EventClass)
+event_eventClass = Lens.lens (\Event' {eventClass} -> eventClass) (\s@Event' {} a -> s {eventClass = a} :: Event)
+
+-- | The Amazon Web Services source that emitted the event.
+event_eventSource :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_eventSource = Lens.lens (\Event' {eventSource} -> eventSource) (\s@Event' {} a -> s {eventSource = a} :: Event)
+
+-- | The ID of the event.
+event_id :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_id = Lens.lens (\Event' {id} -> id) (\s@Event' {} a -> s {id = a} :: Event)
+
+-- | The name of the event.
+event_name :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_name = Lens.lens (\Event' {name} -> name) (\s@Event' {} a -> s {name = a} :: Event)
+
+-- | Undocumented member.
+event_resourceCollection :: Lens.Lens' Event (Prelude.Maybe ResourceCollection)
+event_resourceCollection = Lens.lens (\Event' {resourceCollection} -> resourceCollection) (\s@Event' {} a -> s {resourceCollection = a} :: Event)
+
+-- | An @EventResource@ object that contains information about the resource
+-- that emitted the event.
+event_resources :: Lens.Lens' Event (Prelude.Maybe [EventResource])
+event_resources = Lens.lens (\Event' {resources} -> resources) (\s@Event' {} a -> s {resources = a} :: Event) Prelude.. Lens.mapping Lens.coerced
+
+-- | A @Timestamp@ that specifies the time the event occurred.
+event_time :: Lens.Lens' Event (Prelude.Maybe Prelude.UTCTime)
+event_time = Lens.lens (\Event' {time} -> time) (\s@Event' {} a -> s {time = a} :: Event) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Event where
+  parseJSON =
+    Data.withObject
+      "Event"
+      ( \x ->
+          Event'
+            Prelude.<$> (x Data..:? "DataSource")
+            Prelude.<*> (x Data..:? "EventClass")
+            Prelude.<*> (x Data..:? "EventSource")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Resources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Time")
+      )
+
+instance Prelude.Hashable Event where
+  hashWithSalt _salt Event' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` eventClass
+      `Prelude.hashWithSalt` eventSource
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` time
+
+instance Prelude.NFData Event where
+  rnf Event' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf eventClass
+      `Prelude.seq` Prelude.rnf eventSource
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf time
diff --git a/gen/Amazonka/DevOpsGuru/Types/EventClass.hs b/gen/Amazonka/DevOpsGuru/Types/EventClass.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EventClass.hs
@@ -0,0 +1,86 @@
+{-# 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.DevOpsGuru.Types.EventClass
+-- 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.DevOpsGuru.Types.EventClass
+  ( EventClass
+      ( ..,
+        EventClass_CONFIG_CHANGE,
+        EventClass_DEPLOYMENT,
+        EventClass_INFRASTRUCTURE,
+        EventClass_SCHEMA_CHANGE,
+        EventClass_SECURITY_CHANGE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventClass = EventClass'
+  { fromEventClass ::
+      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 EventClass_CONFIG_CHANGE :: EventClass
+pattern EventClass_CONFIG_CHANGE = EventClass' "CONFIG_CHANGE"
+
+pattern EventClass_DEPLOYMENT :: EventClass
+pattern EventClass_DEPLOYMENT = EventClass' "DEPLOYMENT"
+
+pattern EventClass_INFRASTRUCTURE :: EventClass
+pattern EventClass_INFRASTRUCTURE = EventClass' "INFRASTRUCTURE"
+
+pattern EventClass_SCHEMA_CHANGE :: EventClass
+pattern EventClass_SCHEMA_CHANGE = EventClass' "SCHEMA_CHANGE"
+
+pattern EventClass_SECURITY_CHANGE :: EventClass
+pattern EventClass_SECURITY_CHANGE = EventClass' "SECURITY_CHANGE"
+
+{-# COMPLETE
+  EventClass_CONFIG_CHANGE,
+  EventClass_DEPLOYMENT,
+  EventClass_INFRASTRUCTURE,
+  EventClass_SCHEMA_CHANGE,
+  EventClass_SECURITY_CHANGE,
+  EventClass'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/EventDataSource.hs b/gen/Amazonka/DevOpsGuru/Types/EventDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EventDataSource.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.EventDataSource
+-- 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.DevOpsGuru.Types.EventDataSource
+  ( EventDataSource
+      ( ..,
+        EventDataSource_AWS_CLOUD_TRAIL,
+        EventDataSource_AWS_CODE_DEPLOY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventDataSource = EventDataSource'
+  { fromEventDataSource ::
+      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 EventDataSource_AWS_CLOUD_TRAIL :: EventDataSource
+pattern EventDataSource_AWS_CLOUD_TRAIL = EventDataSource' "AWS_CLOUD_TRAIL"
+
+pattern EventDataSource_AWS_CODE_DEPLOY :: EventDataSource
+pattern EventDataSource_AWS_CODE_DEPLOY = EventDataSource' "AWS_CODE_DEPLOY"
+
+{-# COMPLETE
+  EventDataSource_AWS_CLOUD_TRAIL,
+  EventDataSource_AWS_CODE_DEPLOY,
+  EventDataSource'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/EventResource.hs b/gen/Amazonka/DevOpsGuru/Types/EventResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EventResource.hs
@@ -0,0 +1,99 @@
+{-# 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.DevOpsGuru.Types.EventResource
+-- 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.DevOpsGuru.Types.EventResource 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 Amazon Web Services resource that emitted an event. Amazon Web
+-- Services resource events and metrics are analyzed by DevOps Guru to find
+-- anomalous behavior and provide recommendations to improve your
+-- operational solutions.
+--
+-- /See:/ 'newEventResource' smart constructor.
+data EventResource = EventResource'
+  { -- | The Amazon Resource Name (ARN) of the resource that emitted an event.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource that emitted an event.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource that emitted an event.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventResource' 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', 'eventResource_arn' - The Amazon Resource Name (ARN) of the resource that emitted an event.
+--
+-- 'name', 'eventResource_name' - The name of the resource that emitted an event.
+--
+-- 'type'', 'eventResource_type' - The type of resource that emitted an event.
+newEventResource ::
+  EventResource
+newEventResource =
+  EventResource'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource that emitted an event.
+eventResource_arn :: Lens.Lens' EventResource (Prelude.Maybe Prelude.Text)
+eventResource_arn = Lens.lens (\EventResource' {arn} -> arn) (\s@EventResource' {} a -> s {arn = a} :: EventResource)
+
+-- | The name of the resource that emitted an event.
+eventResource_name :: Lens.Lens' EventResource (Prelude.Maybe Prelude.Text)
+eventResource_name = Lens.lens (\EventResource' {name} -> name) (\s@EventResource' {} a -> s {name = a} :: EventResource)
+
+-- | The type of resource that emitted an event.
+eventResource_type :: Lens.Lens' EventResource (Prelude.Maybe Prelude.Text)
+eventResource_type = Lens.lens (\EventResource' {type'} -> type') (\s@EventResource' {} a -> s {type' = a} :: EventResource)
+
+instance Data.FromJSON EventResource where
+  parseJSON =
+    Data.withObject
+      "EventResource"
+      ( \x ->
+          EventResource'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable EventResource where
+  hashWithSalt _salt EventResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData EventResource where
+  rnf EventResource' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/EventSourceOptInStatus.hs b/gen/Amazonka/DevOpsGuru/Types/EventSourceOptInStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EventSourceOptInStatus.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.EventSourceOptInStatus
+-- 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.DevOpsGuru.Types.EventSourceOptInStatus
+  ( EventSourceOptInStatus
+      ( ..,
+        EventSourceOptInStatus_DISABLED,
+        EventSourceOptInStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventSourceOptInStatus = EventSourceOptInStatus'
+  { fromEventSourceOptInStatus ::
+      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 EventSourceOptInStatus_DISABLED :: EventSourceOptInStatus
+pattern EventSourceOptInStatus_DISABLED = EventSourceOptInStatus' "DISABLED"
+
+pattern EventSourceOptInStatus_ENABLED :: EventSourceOptInStatus
+pattern EventSourceOptInStatus_ENABLED = EventSourceOptInStatus' "ENABLED"
+
+{-# COMPLETE
+  EventSourceOptInStatus_DISABLED,
+  EventSourceOptInStatus_ENABLED,
+  EventSourceOptInStatus'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/EventSourcesConfig.hs b/gen/Amazonka/DevOpsGuru/Types/EventSourcesConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EventSourcesConfig.hs
@@ -0,0 +1,86 @@
+{-# 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.DevOpsGuru.Types.EventSourcesConfig
+-- 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.DevOpsGuru.Types.EventSourcesConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.AmazonCodeGuruProfilerIntegration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the integration of DevOps Guru as consumer with
+-- another AWS service, such as AWS CodeGuru Profiler via EventBridge.
+--
+-- /See:/ 'newEventSourcesConfig' smart constructor.
+data EventSourcesConfig = EventSourcesConfig'
+  { -- | Information about whether DevOps Guru is configured to consume
+    -- recommendations which are generated from AWS CodeGuru Profiler.
+    amazonCodeGuruProfiler :: Prelude.Maybe AmazonCodeGuruProfilerIntegration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventSourcesConfig' 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:
+--
+-- 'amazonCodeGuruProfiler', 'eventSourcesConfig_amazonCodeGuruProfiler' - Information about whether DevOps Guru is configured to consume
+-- recommendations which are generated from AWS CodeGuru Profiler.
+newEventSourcesConfig ::
+  EventSourcesConfig
+newEventSourcesConfig =
+  EventSourcesConfig'
+    { amazonCodeGuruProfiler =
+        Prelude.Nothing
+    }
+
+-- | Information about whether DevOps Guru is configured to consume
+-- recommendations which are generated from AWS CodeGuru Profiler.
+eventSourcesConfig_amazonCodeGuruProfiler :: Lens.Lens' EventSourcesConfig (Prelude.Maybe AmazonCodeGuruProfilerIntegration)
+eventSourcesConfig_amazonCodeGuruProfiler = Lens.lens (\EventSourcesConfig' {amazonCodeGuruProfiler} -> amazonCodeGuruProfiler) (\s@EventSourcesConfig' {} a -> s {amazonCodeGuruProfiler = a} :: EventSourcesConfig)
+
+instance Data.FromJSON EventSourcesConfig where
+  parseJSON =
+    Data.withObject
+      "EventSourcesConfig"
+      ( \x ->
+          EventSourcesConfig'
+            Prelude.<$> (x Data..:? "AmazonCodeGuruProfiler")
+      )
+
+instance Prelude.Hashable EventSourcesConfig where
+  hashWithSalt _salt EventSourcesConfig' {..} =
+    _salt `Prelude.hashWithSalt` amazonCodeGuruProfiler
+
+instance Prelude.NFData EventSourcesConfig where
+  rnf EventSourcesConfig' {..} =
+    Prelude.rnf amazonCodeGuruProfiler
+
+instance Data.ToJSON EventSourcesConfig where
+  toJSON EventSourcesConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AmazonCodeGuruProfiler" Data..=)
+              Prelude.<$> amazonCodeGuruProfiler
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/EventTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/EventTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/EventTimeRange.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.DevOpsGuru.Types.EventTimeRange
+-- 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.DevOpsGuru.Types.EventTimeRange 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 time range during which an Amazon Web Services event occurred.
+-- Amazon Web Services resource events and metrics are analyzed by DevOps
+-- Guru to find anomalous behavior and provide recommendations to improve
+-- your operational solutions.
+--
+-- /See:/ 'newEventTimeRange' smart constructor.
+data EventTimeRange = EventTimeRange'
+  { -- | The time when the event started.
+    fromTime :: Data.POSIX,
+    -- | The time when the event ended.
+    toTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventTimeRange' 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:
+--
+-- 'fromTime', 'eventTimeRange_fromTime' - The time when the event started.
+--
+-- 'toTime', 'eventTimeRange_toTime' - The time when the event ended.
+newEventTimeRange ::
+  -- | 'fromTime'
+  Prelude.UTCTime ->
+  -- | 'toTime'
+  Prelude.UTCTime ->
+  EventTimeRange
+newEventTimeRange pFromTime_ pToTime_ =
+  EventTimeRange'
+    { fromTime =
+        Data._Time Lens.# pFromTime_,
+      toTime = Data._Time Lens.# pToTime_
+    }
+
+-- | The time when the event started.
+eventTimeRange_fromTime :: Lens.Lens' EventTimeRange Prelude.UTCTime
+eventTimeRange_fromTime = Lens.lens (\EventTimeRange' {fromTime} -> fromTime) (\s@EventTimeRange' {} a -> s {fromTime = a} :: EventTimeRange) Prelude.. Data._Time
+
+-- | The time when the event ended.
+eventTimeRange_toTime :: Lens.Lens' EventTimeRange Prelude.UTCTime
+eventTimeRange_toTime = Lens.lens (\EventTimeRange' {toTime} -> toTime) (\s@EventTimeRange' {} a -> s {toTime = a} :: EventTimeRange) Prelude.. Data._Time
+
+instance Prelude.Hashable EventTimeRange where
+  hashWithSalt _salt EventTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromTime
+      `Prelude.hashWithSalt` toTime
+
+instance Prelude.NFData EventTimeRange where
+  rnf EventTimeRange' {..} =
+    Prelude.rnf fromTime
+      `Prelude.seq` Prelude.rnf toTime
+
+instance Data.ToJSON EventTimeRange where
+  toJSON EventTimeRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("FromTime" Data..= fromTime),
+            Prelude.Just ("ToTime" Data..= toTime)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightFeedback.hs b/gen/Amazonka/DevOpsGuru/Types/InsightFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightFeedback.hs
@@ -0,0 +1,93 @@
+{-# 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.DevOpsGuru.Types.InsightFeedback
+-- 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.DevOpsGuru.Types.InsightFeedback where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightFeedbackOption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about insight feedback received from a customer.
+--
+-- /See:/ 'newInsightFeedback' smart constructor.
+data InsightFeedback = InsightFeedback'
+  { -- | The feedback provided by the customer.
+    feedback :: Prelude.Maybe InsightFeedbackOption,
+    -- | The insight feedback ID.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InsightFeedback' 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:
+--
+-- 'feedback', 'insightFeedback_feedback' - The feedback provided by the customer.
+--
+-- 'id', 'insightFeedback_id' - The insight feedback ID.
+newInsightFeedback ::
+  InsightFeedback
+newInsightFeedback =
+  InsightFeedback'
+    { feedback = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The feedback provided by the customer.
+insightFeedback_feedback :: Lens.Lens' InsightFeedback (Prelude.Maybe InsightFeedbackOption)
+insightFeedback_feedback = Lens.lens (\InsightFeedback' {feedback} -> feedback) (\s@InsightFeedback' {} a -> s {feedback = a} :: InsightFeedback)
+
+-- | The insight feedback ID.
+insightFeedback_id :: Lens.Lens' InsightFeedback (Prelude.Maybe Prelude.Text)
+insightFeedback_id = Lens.lens (\InsightFeedback' {id} -> id) (\s@InsightFeedback' {} a -> s {id = a} :: InsightFeedback)
+
+instance Data.FromJSON InsightFeedback where
+  parseJSON =
+    Data.withObject
+      "InsightFeedback"
+      ( \x ->
+          InsightFeedback'
+            Prelude.<$> (x Data..:? "Feedback")
+            Prelude.<*> (x Data..:? "Id")
+      )
+
+instance Prelude.Hashable InsightFeedback where
+  hashWithSalt _salt InsightFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` feedback
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData InsightFeedback where
+  rnf InsightFeedback' {..} =
+    Prelude.rnf feedback `Prelude.seq` Prelude.rnf id
+
+instance Data.ToJSON InsightFeedback where
+  toJSON InsightFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Feedback" Data..=) Prelude.<$> feedback,
+            ("Id" Data..=) Prelude.<$> id
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightFeedbackOption.hs b/gen/Amazonka/DevOpsGuru/Types/InsightFeedbackOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightFeedbackOption.hs
@@ -0,0 +1,86 @@
+{-# 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.DevOpsGuru.Types.InsightFeedbackOption
+-- 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.DevOpsGuru.Types.InsightFeedbackOption
+  ( InsightFeedbackOption
+      ( ..,
+        InsightFeedbackOption_ALERT_TOO_SENSITIVE,
+        InsightFeedbackOption_DATA_INCORRECT,
+        InsightFeedbackOption_DATA_NOISY_ANOMALY,
+        InsightFeedbackOption_RECOMMENDATION_USEFUL,
+        InsightFeedbackOption_VALID_COLLECTION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InsightFeedbackOption = InsightFeedbackOption'
+  { fromInsightFeedbackOption ::
+      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 InsightFeedbackOption_ALERT_TOO_SENSITIVE :: InsightFeedbackOption
+pattern InsightFeedbackOption_ALERT_TOO_SENSITIVE = InsightFeedbackOption' "ALERT_TOO_SENSITIVE"
+
+pattern InsightFeedbackOption_DATA_INCORRECT :: InsightFeedbackOption
+pattern InsightFeedbackOption_DATA_INCORRECT = InsightFeedbackOption' "DATA_INCORRECT"
+
+pattern InsightFeedbackOption_DATA_NOISY_ANOMALY :: InsightFeedbackOption
+pattern InsightFeedbackOption_DATA_NOISY_ANOMALY = InsightFeedbackOption' "DATA_NOISY_ANOMALY"
+
+pattern InsightFeedbackOption_RECOMMENDATION_USEFUL :: InsightFeedbackOption
+pattern InsightFeedbackOption_RECOMMENDATION_USEFUL = InsightFeedbackOption' "RECOMMENDATION_USEFUL"
+
+pattern InsightFeedbackOption_VALID_COLLECTION :: InsightFeedbackOption
+pattern InsightFeedbackOption_VALID_COLLECTION = InsightFeedbackOption' "VALID_COLLECTION"
+
+{-# COMPLETE
+  InsightFeedbackOption_ALERT_TOO_SENSITIVE,
+  InsightFeedbackOption_DATA_INCORRECT,
+  InsightFeedbackOption_DATA_NOISY_ANOMALY,
+  InsightFeedbackOption_RECOMMENDATION_USEFUL,
+  InsightFeedbackOption_VALID_COLLECTION,
+  InsightFeedbackOption'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightHealth.hs b/gen/Amazonka/DevOpsGuru/Types/InsightHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightHealth.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.DevOpsGuru.Types.InsightHealth
+-- 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.DevOpsGuru.Types.InsightHealth 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
+
+-- | Information about the number of open reactive and proactive insights
+-- that can be used to gauge the health of your system.
+--
+-- /See:/ 'newInsightHealth' smart constructor.
+data InsightHealth = InsightHealth'
+  { -- | The Meant Time to Recover (MTTR) for the insight.
+    meanTimeToRecoverInMilliseconds :: Prelude.Maybe Prelude.Integer,
+    -- | The number of open proactive insights.
+    openProactiveInsights :: Prelude.Maybe Prelude.Int,
+    -- | The number of open reactive insights.
+    openReactiveInsights :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InsightHealth' 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:
+--
+-- 'meanTimeToRecoverInMilliseconds', 'insightHealth_meanTimeToRecoverInMilliseconds' - The Meant Time to Recover (MTTR) for the insight.
+--
+-- 'openProactiveInsights', 'insightHealth_openProactiveInsights' - The number of open proactive insights.
+--
+-- 'openReactiveInsights', 'insightHealth_openReactiveInsights' - The number of open reactive insights.
+newInsightHealth ::
+  InsightHealth
+newInsightHealth =
+  InsightHealth'
+    { meanTimeToRecoverInMilliseconds =
+        Prelude.Nothing,
+      openProactiveInsights = Prelude.Nothing,
+      openReactiveInsights = Prelude.Nothing
+    }
+
+-- | The Meant Time to Recover (MTTR) for the insight.
+insightHealth_meanTimeToRecoverInMilliseconds :: Lens.Lens' InsightHealth (Prelude.Maybe Prelude.Integer)
+insightHealth_meanTimeToRecoverInMilliseconds = Lens.lens (\InsightHealth' {meanTimeToRecoverInMilliseconds} -> meanTimeToRecoverInMilliseconds) (\s@InsightHealth' {} a -> s {meanTimeToRecoverInMilliseconds = a} :: InsightHealth)
+
+-- | The number of open proactive insights.
+insightHealth_openProactiveInsights :: Lens.Lens' InsightHealth (Prelude.Maybe Prelude.Int)
+insightHealth_openProactiveInsights = Lens.lens (\InsightHealth' {openProactiveInsights} -> openProactiveInsights) (\s@InsightHealth' {} a -> s {openProactiveInsights = a} :: InsightHealth)
+
+-- | The number of open reactive insights.
+insightHealth_openReactiveInsights :: Lens.Lens' InsightHealth (Prelude.Maybe Prelude.Int)
+insightHealth_openReactiveInsights = Lens.lens (\InsightHealth' {openReactiveInsights} -> openReactiveInsights) (\s@InsightHealth' {} a -> s {openReactiveInsights = a} :: InsightHealth)
+
+instance Data.FromJSON InsightHealth where
+  parseJSON =
+    Data.withObject
+      "InsightHealth"
+      ( \x ->
+          InsightHealth'
+            Prelude.<$> (x Data..:? "MeanTimeToRecoverInMilliseconds")
+            Prelude.<*> (x Data..:? "OpenProactiveInsights")
+            Prelude.<*> (x Data..:? "OpenReactiveInsights")
+      )
+
+instance Prelude.Hashable InsightHealth where
+  hashWithSalt _salt InsightHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` meanTimeToRecoverInMilliseconds
+      `Prelude.hashWithSalt` openProactiveInsights
+      `Prelude.hashWithSalt` openReactiveInsights
+
+instance Prelude.NFData InsightHealth where
+  rnf InsightHealth' {..} =
+    Prelude.rnf meanTimeToRecoverInMilliseconds
+      `Prelude.seq` Prelude.rnf openProactiveInsights
+      `Prelude.seq` Prelude.rnf openReactiveInsights
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightSeverity.hs b/gen/Amazonka/DevOpsGuru/Types/InsightSeverity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightSeverity.hs
@@ -0,0 +1,76 @@
+{-# 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.DevOpsGuru.Types.InsightSeverity
+-- 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.DevOpsGuru.Types.InsightSeverity
+  ( InsightSeverity
+      ( ..,
+        InsightSeverity_HIGH,
+        InsightSeverity_LOW,
+        InsightSeverity_MEDIUM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InsightSeverity = InsightSeverity'
+  { fromInsightSeverity ::
+      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 InsightSeverity_HIGH :: InsightSeverity
+pattern InsightSeverity_HIGH = InsightSeverity' "HIGH"
+
+pattern InsightSeverity_LOW :: InsightSeverity
+pattern InsightSeverity_LOW = InsightSeverity' "LOW"
+
+pattern InsightSeverity_MEDIUM :: InsightSeverity
+pattern InsightSeverity_MEDIUM = InsightSeverity' "MEDIUM"
+
+{-# COMPLETE
+  InsightSeverity_HIGH,
+  InsightSeverity_LOW,
+  InsightSeverity_MEDIUM,
+  InsightSeverity'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightStatus.hs b/gen/Amazonka/DevOpsGuru/Types/InsightStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightStatus.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.InsightStatus
+-- 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.DevOpsGuru.Types.InsightStatus
+  ( InsightStatus
+      ( ..,
+        InsightStatus_CLOSED,
+        InsightStatus_ONGOING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InsightStatus = InsightStatus'
+  { fromInsightStatus ::
+      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 InsightStatus_CLOSED :: InsightStatus
+pattern InsightStatus_CLOSED = InsightStatus' "CLOSED"
+
+pattern InsightStatus_ONGOING :: InsightStatus
+pattern InsightStatus_ONGOING = InsightStatus' "ONGOING"
+
+{-# COMPLETE
+  InsightStatus_CLOSED,
+  InsightStatus_ONGOING,
+  InsightStatus'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/InsightTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightTimeRange.hs
@@ -0,0 +1,87 @@
+{-# 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.DevOpsGuru.Types.InsightTimeRange
+-- 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.DevOpsGuru.Types.InsightTimeRange 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 time ranged that specifies when the observed behavior in an insight
+-- started and ended.
+--
+-- /See:/ 'newInsightTimeRange' smart constructor.
+data InsightTimeRange = InsightTimeRange'
+  { -- | The time when the behavior described in an insight ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The time when the behavior described in an insight started.
+    startTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InsightTimeRange' 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', 'insightTimeRange_endTime' - The time when the behavior described in an insight ended.
+--
+-- 'startTime', 'insightTimeRange_startTime' - The time when the behavior described in an insight started.
+newInsightTimeRange ::
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  InsightTimeRange
+newInsightTimeRange pStartTime_ =
+  InsightTimeRange'
+    { endTime = Prelude.Nothing,
+      startTime = Data._Time Lens.# pStartTime_
+    }
+
+-- | The time when the behavior described in an insight ended.
+insightTimeRange_endTime :: Lens.Lens' InsightTimeRange (Prelude.Maybe Prelude.UTCTime)
+insightTimeRange_endTime = Lens.lens (\InsightTimeRange' {endTime} -> endTime) (\s@InsightTimeRange' {} a -> s {endTime = a} :: InsightTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the behavior described in an insight started.
+insightTimeRange_startTime :: Lens.Lens' InsightTimeRange Prelude.UTCTime
+insightTimeRange_startTime = Lens.lens (\InsightTimeRange' {startTime} -> startTime) (\s@InsightTimeRange' {} a -> s {startTime = a} :: InsightTimeRange) Prelude.. Data._Time
+
+instance Data.FromJSON InsightTimeRange where
+  parseJSON =
+    Data.withObject
+      "InsightTimeRange"
+      ( \x ->
+          InsightTimeRange'
+            Prelude.<$> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..: "StartTime")
+      )
+
+instance Prelude.Hashable InsightTimeRange where
+  hashWithSalt _salt InsightTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData InsightTimeRange where
+  rnf InsightTimeRange' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/InsightType.hs b/gen/Amazonka/DevOpsGuru/Types/InsightType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/InsightType.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.InsightType
+-- 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.DevOpsGuru.Types.InsightType
+  ( InsightType
+      ( ..,
+        InsightType_PROACTIVE,
+        InsightType_REACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InsightType = InsightType'
+  { fromInsightType ::
+      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 InsightType_PROACTIVE :: InsightType
+pattern InsightType_PROACTIVE = InsightType' "PROACTIVE"
+
+pattern InsightType_REACTIVE :: InsightType
+pattern InsightType_REACTIVE = InsightType' "REACTIVE"
+
+{-# COMPLETE
+  InsightType_PROACTIVE,
+  InsightType_REACTIVE,
+  InsightType'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/ListEventsFilters.hs b/gen/Amazonka/DevOpsGuru/Types/ListEventsFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ListEventsFilters.hs
@@ -0,0 +1,149 @@
+{-# 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.DevOpsGuru.Types.ListEventsFilters
+-- 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.DevOpsGuru.Types.ListEventsFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.EventClass
+import Amazonka.DevOpsGuru.Types.EventDataSource
+import Amazonka.DevOpsGuru.Types.EventTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters you can use to specify which events are returned when
+-- @ListEvents@ is called.
+--
+-- /See:/ 'newListEventsFilters' smart constructor.
+data ListEventsFilters = ListEventsFilters'
+  { -- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
+    -- want returned.
+    dataSource :: Prelude.Maybe EventDataSource,
+    -- | The class of the events you want to filter for, such as an
+    -- infrastructure change, a deployment, or a schema change.
+    eventClass :: Prelude.Maybe EventClass,
+    -- | The Amazon Web Services source that emitted the events you want to
+    -- filter for.
+    eventSource :: Prelude.Maybe Prelude.Text,
+    -- | A time range during which you want the filtered events to have occurred.
+    eventTimeRange :: Prelude.Maybe EventTimeRange,
+    -- | An ID of an insight that is related to the events you want to filter
+    -- for.
+    insightId :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventsFilters' 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:
+--
+-- 'dataSource', 'listEventsFilters_dataSource' - The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
+-- want returned.
+--
+-- 'eventClass', 'listEventsFilters_eventClass' - The class of the events you want to filter for, such as an
+-- infrastructure change, a deployment, or a schema change.
+--
+-- 'eventSource', 'listEventsFilters_eventSource' - The Amazon Web Services source that emitted the events you want to
+-- filter for.
+--
+-- 'eventTimeRange', 'listEventsFilters_eventTimeRange' - A time range during which you want the filtered events to have occurred.
+--
+-- 'insightId', 'listEventsFilters_insightId' - An ID of an insight that is related to the events you want to filter
+-- for.
+--
+-- 'resourceCollection', 'listEventsFilters_resourceCollection' - Undocumented member.
+newListEventsFilters ::
+  ListEventsFilters
+newListEventsFilters =
+  ListEventsFilters'
+    { dataSource = Prelude.Nothing,
+      eventClass = Prelude.Nothing,
+      eventSource = Prelude.Nothing,
+      eventTimeRange = Prelude.Nothing,
+      insightId = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing
+    }
+
+-- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
+-- want returned.
+listEventsFilters_dataSource :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventDataSource)
+listEventsFilters_dataSource = Lens.lens (\ListEventsFilters' {dataSource} -> dataSource) (\s@ListEventsFilters' {} a -> s {dataSource = a} :: ListEventsFilters)
+
+-- | The class of the events you want to filter for, such as an
+-- infrastructure change, a deployment, or a schema change.
+listEventsFilters_eventClass :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventClass)
+listEventsFilters_eventClass = Lens.lens (\ListEventsFilters' {eventClass} -> eventClass) (\s@ListEventsFilters' {} a -> s {eventClass = a} :: ListEventsFilters)
+
+-- | The Amazon Web Services source that emitted the events you want to
+-- filter for.
+listEventsFilters_eventSource :: Lens.Lens' ListEventsFilters (Prelude.Maybe Prelude.Text)
+listEventsFilters_eventSource = Lens.lens (\ListEventsFilters' {eventSource} -> eventSource) (\s@ListEventsFilters' {} a -> s {eventSource = a} :: ListEventsFilters)
+
+-- | A time range during which you want the filtered events to have occurred.
+listEventsFilters_eventTimeRange :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventTimeRange)
+listEventsFilters_eventTimeRange = Lens.lens (\ListEventsFilters' {eventTimeRange} -> eventTimeRange) (\s@ListEventsFilters' {} a -> s {eventTimeRange = a} :: ListEventsFilters)
+
+-- | An ID of an insight that is related to the events you want to filter
+-- for.
+listEventsFilters_insightId :: Lens.Lens' ListEventsFilters (Prelude.Maybe Prelude.Text)
+listEventsFilters_insightId = Lens.lens (\ListEventsFilters' {insightId} -> insightId) (\s@ListEventsFilters' {} a -> s {insightId = a} :: ListEventsFilters)
+
+-- | Undocumented member.
+listEventsFilters_resourceCollection :: Lens.Lens' ListEventsFilters (Prelude.Maybe ResourceCollection)
+listEventsFilters_resourceCollection = Lens.lens (\ListEventsFilters' {resourceCollection} -> resourceCollection) (\s@ListEventsFilters' {} a -> s {resourceCollection = a} :: ListEventsFilters)
+
+instance Prelude.Hashable ListEventsFilters where
+  hashWithSalt _salt ListEventsFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` eventClass
+      `Prelude.hashWithSalt` eventSource
+      `Prelude.hashWithSalt` eventTimeRange
+      `Prelude.hashWithSalt` insightId
+      `Prelude.hashWithSalt` resourceCollection
+
+instance Prelude.NFData ListEventsFilters where
+  rnf ListEventsFilters' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf eventClass
+      `Prelude.seq` Prelude.rnf eventSource
+      `Prelude.seq` Prelude.rnf eventTimeRange
+      `Prelude.seq` Prelude.rnf insightId
+      `Prelude.seq` Prelude.rnf resourceCollection
+
+instance Data.ToJSON ListEventsFilters where
+  toJSON ListEventsFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSource" Data..=) Prelude.<$> dataSource,
+            ("EventClass" Data..=) Prelude.<$> eventClass,
+            ("EventSource" Data..=) Prelude.<$> eventSource,
+            ("EventTimeRange" Data..=)
+              Prelude.<$> eventTimeRange,
+            ("InsightId" Data..=) Prelude.<$> insightId,
+            ("ResourceCollection" Data..=)
+              Prelude.<$> resourceCollection
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ListInsightsAnyStatusFilter.hs b/gen/Amazonka/DevOpsGuru/Types/ListInsightsAnyStatusFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ListInsightsAnyStatusFilter.hs
@@ -0,0 +1,95 @@
+{-# 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.DevOpsGuru.Types.ListInsightsAnyStatusFilter
+-- 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.DevOpsGuru.Types.ListInsightsAnyStatusFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightType
+import Amazonka.DevOpsGuru.Types.StartTimeRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Used to filter for insights that have any status.
+--
+-- /See:/ 'newListInsightsAnyStatusFilter' smart constructor.
+data ListInsightsAnyStatusFilter = ListInsightsAnyStatusFilter'
+  { -- | Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+    type' :: InsightType,
+    -- | A time range used to specify when the behavior of the filtered insights
+    -- started.
+    startTimeRange :: StartTimeRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInsightsAnyStatusFilter' 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:
+--
+-- 'type'', 'listInsightsAnyStatusFilter_type' - Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+--
+-- 'startTimeRange', 'listInsightsAnyStatusFilter_startTimeRange' - A time range used to specify when the behavior of the filtered insights
+-- started.
+newListInsightsAnyStatusFilter ::
+  -- | 'type''
+  InsightType ->
+  -- | 'startTimeRange'
+  StartTimeRange ->
+  ListInsightsAnyStatusFilter
+newListInsightsAnyStatusFilter
+  pType_
+  pStartTimeRange_ =
+    ListInsightsAnyStatusFilter'
+      { type' = pType_,
+        startTimeRange = pStartTimeRange_
+      }
+
+-- | Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+listInsightsAnyStatusFilter_type :: Lens.Lens' ListInsightsAnyStatusFilter InsightType
+listInsightsAnyStatusFilter_type = Lens.lens (\ListInsightsAnyStatusFilter' {type'} -> type') (\s@ListInsightsAnyStatusFilter' {} a -> s {type' = a} :: ListInsightsAnyStatusFilter)
+
+-- | A time range used to specify when the behavior of the filtered insights
+-- started.
+listInsightsAnyStatusFilter_startTimeRange :: Lens.Lens' ListInsightsAnyStatusFilter StartTimeRange
+listInsightsAnyStatusFilter_startTimeRange = Lens.lens (\ListInsightsAnyStatusFilter' {startTimeRange} -> startTimeRange) (\s@ListInsightsAnyStatusFilter' {} a -> s {startTimeRange = a} :: ListInsightsAnyStatusFilter)
+
+instance Prelude.Hashable ListInsightsAnyStatusFilter where
+  hashWithSalt _salt ListInsightsAnyStatusFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` startTimeRange
+
+instance Prelude.NFData ListInsightsAnyStatusFilter where
+  rnf ListInsightsAnyStatusFilter' {..} =
+    Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf startTimeRange
+
+instance Data.ToJSON ListInsightsAnyStatusFilter where
+  toJSON ListInsightsAnyStatusFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Type" Data..= type'),
+            Prelude.Just
+              ("StartTimeRange" Data..= startTimeRange)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ListInsightsClosedStatusFilter.hs b/gen/Amazonka/DevOpsGuru/Types/ListInsightsClosedStatusFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ListInsightsClosedStatusFilter.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.DevOpsGuru.Types.ListInsightsClosedStatusFilter
+-- 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.DevOpsGuru.Types.ListInsightsClosedStatusFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.EndTimeRange
+import Amazonka.DevOpsGuru.Types.InsightType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Used to filter for insights that have the status @CLOSED@.
+--
+-- /See:/ 'newListInsightsClosedStatusFilter' smart constructor.
+data ListInsightsClosedStatusFilter = ListInsightsClosedStatusFilter'
+  { -- | Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+    type' :: InsightType,
+    -- | A time range used to specify when the behavior of the filtered insights
+    -- ended.
+    endTimeRange :: EndTimeRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInsightsClosedStatusFilter' 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:
+--
+-- 'type'', 'listInsightsClosedStatusFilter_type' - Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+--
+-- 'endTimeRange', 'listInsightsClosedStatusFilter_endTimeRange' - A time range used to specify when the behavior of the filtered insights
+-- ended.
+newListInsightsClosedStatusFilter ::
+  -- | 'type''
+  InsightType ->
+  -- | 'endTimeRange'
+  EndTimeRange ->
+  ListInsightsClosedStatusFilter
+newListInsightsClosedStatusFilter
+  pType_
+  pEndTimeRange_ =
+    ListInsightsClosedStatusFilter'
+      { type' = pType_,
+        endTimeRange = pEndTimeRange_
+      }
+
+-- | Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+listInsightsClosedStatusFilter_type :: Lens.Lens' ListInsightsClosedStatusFilter InsightType
+listInsightsClosedStatusFilter_type = Lens.lens (\ListInsightsClosedStatusFilter' {type'} -> type') (\s@ListInsightsClosedStatusFilter' {} a -> s {type' = a} :: ListInsightsClosedStatusFilter)
+
+-- | A time range used to specify when the behavior of the filtered insights
+-- ended.
+listInsightsClosedStatusFilter_endTimeRange :: Lens.Lens' ListInsightsClosedStatusFilter EndTimeRange
+listInsightsClosedStatusFilter_endTimeRange = Lens.lens (\ListInsightsClosedStatusFilter' {endTimeRange} -> endTimeRange) (\s@ListInsightsClosedStatusFilter' {} a -> s {endTimeRange = a} :: ListInsightsClosedStatusFilter)
+
+instance
+  Prelude.Hashable
+    ListInsightsClosedStatusFilter
+  where
+  hashWithSalt
+    _salt
+    ListInsightsClosedStatusFilter' {..} =
+      _salt
+        `Prelude.hashWithSalt` type'
+        `Prelude.hashWithSalt` endTimeRange
+
+instance
+  Prelude.NFData
+    ListInsightsClosedStatusFilter
+  where
+  rnf ListInsightsClosedStatusFilter' {..} =
+    Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf endTimeRange
+
+instance Data.ToJSON ListInsightsClosedStatusFilter where
+  toJSON ListInsightsClosedStatusFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("EndTimeRange" Data..= endTimeRange)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ListInsightsOngoingStatusFilter.hs b/gen/Amazonka/DevOpsGuru/Types/ListInsightsOngoingStatusFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ListInsightsOngoingStatusFilter.hs
@@ -0,0 +1,78 @@
+{-# 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.DevOpsGuru.Types.ListInsightsOngoingStatusFilter
+-- 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.DevOpsGuru.Types.ListInsightsOngoingStatusFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Used to filter for insights that have the status @ONGOING@.
+--
+-- /See:/ 'newListInsightsOngoingStatusFilter' smart constructor.
+data ListInsightsOngoingStatusFilter = ListInsightsOngoingStatusFilter'
+  { -- | Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+    type' :: InsightType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInsightsOngoingStatusFilter' 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:
+--
+-- 'type'', 'listInsightsOngoingStatusFilter_type' - Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+newListInsightsOngoingStatusFilter ::
+  -- | 'type''
+  InsightType ->
+  ListInsightsOngoingStatusFilter
+newListInsightsOngoingStatusFilter pType_ =
+  ListInsightsOngoingStatusFilter' {type' = pType_}
+
+-- | Use to filter for either @REACTIVE@ or @PROACTIVE@ insights.
+listInsightsOngoingStatusFilter_type :: Lens.Lens' ListInsightsOngoingStatusFilter InsightType
+listInsightsOngoingStatusFilter_type = Lens.lens (\ListInsightsOngoingStatusFilter' {type'} -> type') (\s@ListInsightsOngoingStatusFilter' {} a -> s {type' = a} :: ListInsightsOngoingStatusFilter)
+
+instance
+  Prelude.Hashable
+    ListInsightsOngoingStatusFilter
+  where
+  hashWithSalt
+    _salt
+    ListInsightsOngoingStatusFilter' {..} =
+      _salt `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    ListInsightsOngoingStatusFilter
+  where
+  rnf ListInsightsOngoingStatusFilter' {..} =
+    Prelude.rnf type'
+
+instance Data.ToJSON ListInsightsOngoingStatusFilter where
+  toJSON ListInsightsOngoingStatusFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Type" Data..= type')]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ListInsightsStatusFilter.hs b/gen/Amazonka/DevOpsGuru/Types/ListInsightsStatusFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ListInsightsStatusFilter.hs
@@ -0,0 +1,107 @@
+{-# 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.DevOpsGuru.Types.ListInsightsStatusFilter
+-- 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.DevOpsGuru.Types.ListInsightsStatusFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.ListInsightsAnyStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsClosedStatusFilter
+import Amazonka.DevOpsGuru.Types.ListInsightsOngoingStatusFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter used by @ListInsights@ to specify which insights to return.
+--
+-- /See:/ 'newListInsightsStatusFilter' smart constructor.
+data ListInsightsStatusFilter = ListInsightsStatusFilter'
+  { -- | A @ListInsightsAnyStatusFilter@ that specifies insights of any status
+    -- that are either @REACTIVE@ or @PROACTIVE@.
+    any :: Prelude.Maybe ListInsightsAnyStatusFilter,
+    -- | A @ListInsightsClosedStatusFilter@ that specifies closed insights that
+    -- are either @REACTIVE@ or @PROACTIVE@.
+    closed :: Prelude.Maybe ListInsightsClosedStatusFilter,
+    -- | A @ListInsightsAnyStatusFilter@ that specifies ongoing insights that are
+    -- either @REACTIVE@ or @PROACTIVE@.
+    ongoing :: Prelude.Maybe ListInsightsOngoingStatusFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInsightsStatusFilter' 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:
+--
+-- 'any', 'listInsightsStatusFilter_any' - A @ListInsightsAnyStatusFilter@ that specifies insights of any status
+-- that are either @REACTIVE@ or @PROACTIVE@.
+--
+-- 'closed', 'listInsightsStatusFilter_closed' - A @ListInsightsClosedStatusFilter@ that specifies closed insights that
+-- are either @REACTIVE@ or @PROACTIVE@.
+--
+-- 'ongoing', 'listInsightsStatusFilter_ongoing' - A @ListInsightsAnyStatusFilter@ that specifies ongoing insights that are
+-- either @REACTIVE@ or @PROACTIVE@.
+newListInsightsStatusFilter ::
+  ListInsightsStatusFilter
+newListInsightsStatusFilter =
+  ListInsightsStatusFilter'
+    { any = Prelude.Nothing,
+      closed = Prelude.Nothing,
+      ongoing = Prelude.Nothing
+    }
+
+-- | A @ListInsightsAnyStatusFilter@ that specifies insights of any status
+-- that are either @REACTIVE@ or @PROACTIVE@.
+listInsightsStatusFilter_any :: Lens.Lens' ListInsightsStatusFilter (Prelude.Maybe ListInsightsAnyStatusFilter)
+listInsightsStatusFilter_any = Lens.lens (\ListInsightsStatusFilter' {any} -> any) (\s@ListInsightsStatusFilter' {} a -> s {any = a} :: ListInsightsStatusFilter)
+
+-- | A @ListInsightsClosedStatusFilter@ that specifies closed insights that
+-- are either @REACTIVE@ or @PROACTIVE@.
+listInsightsStatusFilter_closed :: Lens.Lens' ListInsightsStatusFilter (Prelude.Maybe ListInsightsClosedStatusFilter)
+listInsightsStatusFilter_closed = Lens.lens (\ListInsightsStatusFilter' {closed} -> closed) (\s@ListInsightsStatusFilter' {} a -> s {closed = a} :: ListInsightsStatusFilter)
+
+-- | A @ListInsightsAnyStatusFilter@ that specifies ongoing insights that are
+-- either @REACTIVE@ or @PROACTIVE@.
+listInsightsStatusFilter_ongoing :: Lens.Lens' ListInsightsStatusFilter (Prelude.Maybe ListInsightsOngoingStatusFilter)
+listInsightsStatusFilter_ongoing = Lens.lens (\ListInsightsStatusFilter' {ongoing} -> ongoing) (\s@ListInsightsStatusFilter' {} a -> s {ongoing = a} :: ListInsightsStatusFilter)
+
+instance Prelude.Hashable ListInsightsStatusFilter where
+  hashWithSalt _salt ListInsightsStatusFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` any
+      `Prelude.hashWithSalt` closed
+      `Prelude.hashWithSalt` ongoing
+
+instance Prelude.NFData ListInsightsStatusFilter where
+  rnf ListInsightsStatusFilter' {..} =
+    Prelude.rnf any
+      `Prelude.seq` Prelude.rnf closed
+      `Prelude.seq` Prelude.rnf ongoing
+
+instance Data.ToJSON ListInsightsStatusFilter where
+  toJSON ListInsightsStatusFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Any" Data..=) Prelude.<$> any,
+            ("Closed" Data..=) Prelude.<$> closed,
+            ("Ongoing" Data..=) Prelude.<$> ongoing
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ListMonitoredResourcesFilters.hs b/gen/Amazonka/DevOpsGuru/Types/ListMonitoredResourcesFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ListMonitoredResourcesFilters.hs
@@ -0,0 +1,94 @@
+{-# 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.DevOpsGuru.Types.ListMonitoredResourcesFilters
+-- 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.DevOpsGuru.Types.ListMonitoredResourcesFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.ResourcePermission
+import Amazonka.DevOpsGuru.Types.ResourceTypeFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters to determine which monitored resources you want to retrieve. You
+-- can filter by resource type or resource permission status.
+--
+-- /See:/ 'newListMonitoredResourcesFilters' smart constructor.
+data ListMonitoredResourcesFilters = ListMonitoredResourcesFilters'
+  { -- | The permission status of a resource.
+    resourcePermission :: ResourcePermission,
+    -- | The type of resource that you wish to retrieve, such as log groups.
+    resourceTypeFilters :: [ResourceTypeFilter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitoredResourcesFilters' 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:
+--
+-- 'resourcePermission', 'listMonitoredResourcesFilters_resourcePermission' - The permission status of a resource.
+--
+-- 'resourceTypeFilters', 'listMonitoredResourcesFilters_resourceTypeFilters' - The type of resource that you wish to retrieve, such as log groups.
+newListMonitoredResourcesFilters ::
+  -- | 'resourcePermission'
+  ResourcePermission ->
+  ListMonitoredResourcesFilters
+newListMonitoredResourcesFilters pResourcePermission_ =
+  ListMonitoredResourcesFilters'
+    { resourcePermission =
+        pResourcePermission_,
+      resourceTypeFilters = Prelude.mempty
+    }
+
+-- | The permission status of a resource.
+listMonitoredResourcesFilters_resourcePermission :: Lens.Lens' ListMonitoredResourcesFilters ResourcePermission
+listMonitoredResourcesFilters_resourcePermission = Lens.lens (\ListMonitoredResourcesFilters' {resourcePermission} -> resourcePermission) (\s@ListMonitoredResourcesFilters' {} a -> s {resourcePermission = a} :: ListMonitoredResourcesFilters)
+
+-- | The type of resource that you wish to retrieve, such as log groups.
+listMonitoredResourcesFilters_resourceTypeFilters :: Lens.Lens' ListMonitoredResourcesFilters [ResourceTypeFilter]
+listMonitoredResourcesFilters_resourceTypeFilters = Lens.lens (\ListMonitoredResourcesFilters' {resourceTypeFilters} -> resourceTypeFilters) (\s@ListMonitoredResourcesFilters' {} a -> s {resourceTypeFilters = a} :: ListMonitoredResourcesFilters) Prelude.. Lens.coerced
+
+instance
+  Prelude.Hashable
+    ListMonitoredResourcesFilters
+  where
+  hashWithSalt _salt ListMonitoredResourcesFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourcePermission
+      `Prelude.hashWithSalt` resourceTypeFilters
+
+instance Prelude.NFData ListMonitoredResourcesFilters where
+  rnf ListMonitoredResourcesFilters' {..} =
+    Prelude.rnf resourcePermission
+      `Prelude.seq` Prelude.rnf resourceTypeFilters
+
+instance Data.ToJSON ListMonitoredResourcesFilters where
+  toJSON ListMonitoredResourcesFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ResourcePermission" Data..= resourcePermission),
+            Prelude.Just
+              ("ResourceTypeFilters" Data..= resourceTypeFilters)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/Locale.hs b/gen/Amazonka/DevOpsGuru/Types/Locale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/Locale.hs
@@ -0,0 +1,113 @@
+{-# 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.DevOpsGuru.Types.Locale
+-- 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.DevOpsGuru.Types.Locale
+  ( Locale
+      ( ..,
+        Locale_DE_DE,
+        Locale_EN_GB,
+        Locale_EN_US,
+        Locale_ES_ES,
+        Locale_FR_FR,
+        Locale_IT_IT,
+        Locale_JA_JP,
+        Locale_KO_KR,
+        Locale_PT_BR,
+        Locale_ZH_CN,
+        Locale_ZH_TW
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Locale = Locale' {fromLocale :: 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 Locale_DE_DE :: Locale
+pattern Locale_DE_DE = Locale' "DE_DE"
+
+pattern Locale_EN_GB :: Locale
+pattern Locale_EN_GB = Locale' "EN_GB"
+
+pattern Locale_EN_US :: Locale
+pattern Locale_EN_US = Locale' "EN_US"
+
+pattern Locale_ES_ES :: Locale
+pattern Locale_ES_ES = Locale' "ES_ES"
+
+pattern Locale_FR_FR :: Locale
+pattern Locale_FR_FR = Locale' "FR_FR"
+
+pattern Locale_IT_IT :: Locale
+pattern Locale_IT_IT = Locale' "IT_IT"
+
+pattern Locale_JA_JP :: Locale
+pattern Locale_JA_JP = Locale' "JA_JP"
+
+pattern Locale_KO_KR :: Locale
+pattern Locale_KO_KR = Locale' "KO_KR"
+
+pattern Locale_PT_BR :: Locale
+pattern Locale_PT_BR = Locale' "PT_BR"
+
+pattern Locale_ZH_CN :: Locale
+pattern Locale_ZH_CN = Locale' "ZH_CN"
+
+pattern Locale_ZH_TW :: Locale
+pattern Locale_ZH_TW = Locale' "ZH_TW"
+
+{-# COMPLETE
+  Locale_DE_DE,
+  Locale_EN_GB,
+  Locale_EN_US,
+  Locale_ES_ES,
+  Locale_FR_FR,
+  Locale_IT_IT,
+  Locale_JA_JP,
+  Locale_KO_KR,
+  Locale_PT_BR,
+  Locale_ZH_CN,
+  Locale_ZH_TW,
+  Locale'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/LogAnomalyClass.hs b/gen/Amazonka/DevOpsGuru/Types/LogAnomalyClass.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/LogAnomalyClass.hs
@@ -0,0 +1,157 @@
+{-# 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.DevOpsGuru.Types.LogAnomalyClass
+-- 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.DevOpsGuru.Types.LogAnomalyClass where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.LogAnomalyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an anomalous log event found within a log group.
+--
+-- /See:/ 'newLogAnomalyClass' smart constructor.
+data LogAnomalyClass = LogAnomalyClass'
+  { -- | The explanation for why the log event is considered an anomaly.
+    explanation :: Prelude.Maybe Prelude.Text,
+    -- | The token where the anomaly was detected. This may refer to an exception
+    -- or another location, or it may be blank for log anomalies such as format
+    -- anomalies.
+    logAnomalyToken :: Prelude.Maybe Prelude.Text,
+    -- | The type of log anomaly that has been detected.
+    logAnomalyType :: Prelude.Maybe LogAnomalyType,
+    -- | The ID of the log event.
+    logEventId :: Prelude.Maybe Prelude.Text,
+    -- | The time of the first occurrence of the anomalous log event.
+    logEventTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The name of the Amazon CloudWatch log stream that the anomalous log
+    -- event belongs to. A log stream is a sequence of log events that share
+    -- the same source.
+    logStreamName :: Prelude.Maybe Prelude.Text,
+    -- | The number of log lines where this anomalous log event occurs.
+    numberOfLogLinesOccurrences :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogAnomalyClass' 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:
+--
+-- 'explanation', 'logAnomalyClass_explanation' - The explanation for why the log event is considered an anomaly.
+--
+-- 'logAnomalyToken', 'logAnomalyClass_logAnomalyToken' - The token where the anomaly was detected. This may refer to an exception
+-- or another location, or it may be blank for log anomalies such as format
+-- anomalies.
+--
+-- 'logAnomalyType', 'logAnomalyClass_logAnomalyType' - The type of log anomaly that has been detected.
+--
+-- 'logEventId', 'logAnomalyClass_logEventId' - The ID of the log event.
+--
+-- 'logEventTimestamp', 'logAnomalyClass_logEventTimestamp' - The time of the first occurrence of the anomalous log event.
+--
+-- 'logStreamName', 'logAnomalyClass_logStreamName' - The name of the Amazon CloudWatch log stream that the anomalous log
+-- event belongs to. A log stream is a sequence of log events that share
+-- the same source.
+--
+-- 'numberOfLogLinesOccurrences', 'logAnomalyClass_numberOfLogLinesOccurrences' - The number of log lines where this anomalous log event occurs.
+newLogAnomalyClass ::
+  LogAnomalyClass
+newLogAnomalyClass =
+  LogAnomalyClass'
+    { explanation = Prelude.Nothing,
+      logAnomalyToken = Prelude.Nothing,
+      logAnomalyType = Prelude.Nothing,
+      logEventId = Prelude.Nothing,
+      logEventTimestamp = Prelude.Nothing,
+      logStreamName = Prelude.Nothing,
+      numberOfLogLinesOccurrences = Prelude.Nothing
+    }
+
+-- | The explanation for why the log event is considered an anomaly.
+logAnomalyClass_explanation :: Lens.Lens' LogAnomalyClass (Prelude.Maybe Prelude.Text)
+logAnomalyClass_explanation = Lens.lens (\LogAnomalyClass' {explanation} -> explanation) (\s@LogAnomalyClass' {} a -> s {explanation = a} :: LogAnomalyClass)
+
+-- | The token where the anomaly was detected. This may refer to an exception
+-- or another location, or it may be blank for log anomalies such as format
+-- anomalies.
+logAnomalyClass_logAnomalyToken :: Lens.Lens' LogAnomalyClass (Prelude.Maybe Prelude.Text)
+logAnomalyClass_logAnomalyToken = Lens.lens (\LogAnomalyClass' {logAnomalyToken} -> logAnomalyToken) (\s@LogAnomalyClass' {} a -> s {logAnomalyToken = a} :: LogAnomalyClass)
+
+-- | The type of log anomaly that has been detected.
+logAnomalyClass_logAnomalyType :: Lens.Lens' LogAnomalyClass (Prelude.Maybe LogAnomalyType)
+logAnomalyClass_logAnomalyType = Lens.lens (\LogAnomalyClass' {logAnomalyType} -> logAnomalyType) (\s@LogAnomalyClass' {} a -> s {logAnomalyType = a} :: LogAnomalyClass)
+
+-- | The ID of the log event.
+logAnomalyClass_logEventId :: Lens.Lens' LogAnomalyClass (Prelude.Maybe Prelude.Text)
+logAnomalyClass_logEventId = Lens.lens (\LogAnomalyClass' {logEventId} -> logEventId) (\s@LogAnomalyClass' {} a -> s {logEventId = a} :: LogAnomalyClass)
+
+-- | The time of the first occurrence of the anomalous log event.
+logAnomalyClass_logEventTimestamp :: Lens.Lens' LogAnomalyClass (Prelude.Maybe Prelude.UTCTime)
+logAnomalyClass_logEventTimestamp = Lens.lens (\LogAnomalyClass' {logEventTimestamp} -> logEventTimestamp) (\s@LogAnomalyClass' {} a -> s {logEventTimestamp = a} :: LogAnomalyClass) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the Amazon CloudWatch log stream that the anomalous log
+-- event belongs to. A log stream is a sequence of log events that share
+-- the same source.
+logAnomalyClass_logStreamName :: Lens.Lens' LogAnomalyClass (Prelude.Maybe Prelude.Text)
+logAnomalyClass_logStreamName = Lens.lens (\LogAnomalyClass' {logStreamName} -> logStreamName) (\s@LogAnomalyClass' {} a -> s {logStreamName = a} :: LogAnomalyClass)
+
+-- | The number of log lines where this anomalous log event occurs.
+logAnomalyClass_numberOfLogLinesOccurrences :: Lens.Lens' LogAnomalyClass (Prelude.Maybe Prelude.Int)
+logAnomalyClass_numberOfLogLinesOccurrences = Lens.lens (\LogAnomalyClass' {numberOfLogLinesOccurrences} -> numberOfLogLinesOccurrences) (\s@LogAnomalyClass' {} a -> s {numberOfLogLinesOccurrences = a} :: LogAnomalyClass)
+
+instance Data.FromJSON LogAnomalyClass where
+  parseJSON =
+    Data.withObject
+      "LogAnomalyClass"
+      ( \x ->
+          LogAnomalyClass'
+            Prelude.<$> (x Data..:? "Explanation")
+            Prelude.<*> (x Data..:? "LogAnomalyToken")
+            Prelude.<*> (x Data..:? "LogAnomalyType")
+            Prelude.<*> (x Data..:? "LogEventId")
+            Prelude.<*> (x Data..:? "LogEventTimestamp")
+            Prelude.<*> (x Data..:? "LogStreamName")
+            Prelude.<*> (x Data..:? "NumberOfLogLinesOccurrences")
+      )
+
+instance Prelude.Hashable LogAnomalyClass where
+  hashWithSalt _salt LogAnomalyClass' {..} =
+    _salt
+      `Prelude.hashWithSalt` explanation
+      `Prelude.hashWithSalt` logAnomalyToken
+      `Prelude.hashWithSalt` logAnomalyType
+      `Prelude.hashWithSalt` logEventId
+      `Prelude.hashWithSalt` logEventTimestamp
+      `Prelude.hashWithSalt` logStreamName
+      `Prelude.hashWithSalt` numberOfLogLinesOccurrences
+
+instance Prelude.NFData LogAnomalyClass where
+  rnf LogAnomalyClass' {..} =
+    Prelude.rnf explanation
+      `Prelude.seq` Prelude.rnf logAnomalyToken
+      `Prelude.seq` Prelude.rnf logAnomalyType
+      `Prelude.seq` Prelude.rnf logEventId
+      `Prelude.seq` Prelude.rnf logEventTimestamp
+      `Prelude.seq` Prelude.rnf logStreamName
+      `Prelude.seq` Prelude.rnf numberOfLogLinesOccurrences
diff --git a/gen/Amazonka/DevOpsGuru/Types/LogAnomalyShowcase.hs b/gen/Amazonka/DevOpsGuru/Types/LogAnomalyShowcase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/LogAnomalyShowcase.hs
@@ -0,0 +1,76 @@
+{-# 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.DevOpsGuru.Types.LogAnomalyShowcase
+-- 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.DevOpsGuru.Types.LogAnomalyShowcase where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.LogAnomalyClass
+import qualified Amazonka.Prelude as Prelude
+
+-- | A cluster of similar anomalous log events found within a log group.
+--
+-- /See:/ 'newLogAnomalyShowcase' smart constructor.
+data LogAnomalyShowcase = LogAnomalyShowcase'
+  { -- | A list of anomalous log events that may be related.
+    logAnomalyClasses :: Prelude.Maybe [LogAnomalyClass]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogAnomalyShowcase' 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:
+--
+-- 'logAnomalyClasses', 'logAnomalyShowcase_logAnomalyClasses' - A list of anomalous log events that may be related.
+newLogAnomalyShowcase ::
+  LogAnomalyShowcase
+newLogAnomalyShowcase =
+  LogAnomalyShowcase'
+    { logAnomalyClasses =
+        Prelude.Nothing
+    }
+
+-- | A list of anomalous log events that may be related.
+logAnomalyShowcase_logAnomalyClasses :: Lens.Lens' LogAnomalyShowcase (Prelude.Maybe [LogAnomalyClass])
+logAnomalyShowcase_logAnomalyClasses = Lens.lens (\LogAnomalyShowcase' {logAnomalyClasses} -> logAnomalyClasses) (\s@LogAnomalyShowcase' {} a -> s {logAnomalyClasses = a} :: LogAnomalyShowcase) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LogAnomalyShowcase where
+  parseJSON =
+    Data.withObject
+      "LogAnomalyShowcase"
+      ( \x ->
+          LogAnomalyShowcase'
+            Prelude.<$> ( x
+                            Data..:? "LogAnomalyClasses"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable LogAnomalyShowcase where
+  hashWithSalt _salt LogAnomalyShowcase' {..} =
+    _salt `Prelude.hashWithSalt` logAnomalyClasses
+
+instance Prelude.NFData LogAnomalyShowcase where
+  rnf LogAnomalyShowcase' {..} =
+    Prelude.rnf logAnomalyClasses
diff --git a/gen/Amazonka/DevOpsGuru/Types/LogAnomalyType.hs b/gen/Amazonka/DevOpsGuru/Types/LogAnomalyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/LogAnomalyType.hs
@@ -0,0 +1,101 @@
+{-# 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.DevOpsGuru.Types.LogAnomalyType
+-- 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.DevOpsGuru.Types.LogAnomalyType
+  ( LogAnomalyType
+      ( ..,
+        LogAnomalyType_BLOCK_FORMAT,
+        LogAnomalyType_FORMAT,
+        LogAnomalyType_HTTP_CODE,
+        LogAnomalyType_KEYWORD,
+        LogAnomalyType_KEYWORD_TOKEN,
+        LogAnomalyType_NEW_FIELD_NAME,
+        LogAnomalyType_NUMERICAL_NAN,
+        LogAnomalyType_NUMERICAL_POINT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogAnomalyType = LogAnomalyType'
+  { fromLogAnomalyType ::
+      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 LogAnomalyType_BLOCK_FORMAT :: LogAnomalyType
+pattern LogAnomalyType_BLOCK_FORMAT = LogAnomalyType' "BLOCK_FORMAT"
+
+pattern LogAnomalyType_FORMAT :: LogAnomalyType
+pattern LogAnomalyType_FORMAT = LogAnomalyType' "FORMAT"
+
+pattern LogAnomalyType_HTTP_CODE :: LogAnomalyType
+pattern LogAnomalyType_HTTP_CODE = LogAnomalyType' "HTTP_CODE"
+
+pattern LogAnomalyType_KEYWORD :: LogAnomalyType
+pattern LogAnomalyType_KEYWORD = LogAnomalyType' "KEYWORD"
+
+pattern LogAnomalyType_KEYWORD_TOKEN :: LogAnomalyType
+pattern LogAnomalyType_KEYWORD_TOKEN = LogAnomalyType' "KEYWORD_TOKEN"
+
+pattern LogAnomalyType_NEW_FIELD_NAME :: LogAnomalyType
+pattern LogAnomalyType_NEW_FIELD_NAME = LogAnomalyType' "NEW_FIELD_NAME"
+
+pattern LogAnomalyType_NUMERICAL_NAN :: LogAnomalyType
+pattern LogAnomalyType_NUMERICAL_NAN = LogAnomalyType' "NUMERICAL_NAN"
+
+pattern LogAnomalyType_NUMERICAL_POINT :: LogAnomalyType
+pattern LogAnomalyType_NUMERICAL_POINT = LogAnomalyType' "NUMERICAL_POINT"
+
+{-# COMPLETE
+  LogAnomalyType_BLOCK_FORMAT,
+  LogAnomalyType_FORMAT,
+  LogAnomalyType_HTTP_CODE,
+  LogAnomalyType_KEYWORD,
+  LogAnomalyType_KEYWORD_TOKEN,
+  LogAnomalyType_NEW_FIELD_NAME,
+  LogAnomalyType_NUMERICAL_NAN,
+  LogAnomalyType_NUMERICAL_POINT,
+  LogAnomalyType'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/LogsAnomalyDetectionIntegration.hs b/gen/Amazonka/DevOpsGuru/Types/LogsAnomalyDetectionIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/LogsAnomalyDetectionIntegration.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.DevOpsGuru.Types.LogsAnomalyDetectionIntegration
+-- 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.DevOpsGuru.Types.LogsAnomalyDetectionIntegration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.OptInStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the integration of DevOps Guru with CloudWatch log
+-- groups for log anomaly detection.
+--
+-- /See:/ 'newLogsAnomalyDetectionIntegration' smart constructor.
+data LogsAnomalyDetectionIntegration = LogsAnomalyDetectionIntegration'
+  { -- | Specifies if DevOps Guru is configured to perform log anomaly detection
+    -- on CloudWatch log groups.
+    optInStatus :: Prelude.Maybe OptInStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogsAnomalyDetectionIntegration' 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:
+--
+-- 'optInStatus', 'logsAnomalyDetectionIntegration_optInStatus' - Specifies if DevOps Guru is configured to perform log anomaly detection
+-- on CloudWatch log groups.
+newLogsAnomalyDetectionIntegration ::
+  LogsAnomalyDetectionIntegration
+newLogsAnomalyDetectionIntegration =
+  LogsAnomalyDetectionIntegration'
+    { optInStatus =
+        Prelude.Nothing
+    }
+
+-- | Specifies if DevOps Guru is configured to perform log anomaly detection
+-- on CloudWatch log groups.
+logsAnomalyDetectionIntegration_optInStatus :: Lens.Lens' LogsAnomalyDetectionIntegration (Prelude.Maybe OptInStatus)
+logsAnomalyDetectionIntegration_optInStatus = Lens.lens (\LogsAnomalyDetectionIntegration' {optInStatus} -> optInStatus) (\s@LogsAnomalyDetectionIntegration' {} a -> s {optInStatus = a} :: LogsAnomalyDetectionIntegration)
+
+instance
+  Data.FromJSON
+    LogsAnomalyDetectionIntegration
+  where
+  parseJSON =
+    Data.withObject
+      "LogsAnomalyDetectionIntegration"
+      ( \x ->
+          LogsAnomalyDetectionIntegration'
+            Prelude.<$> (x Data..:? "OptInStatus")
+      )
+
+instance
+  Prelude.Hashable
+    LogsAnomalyDetectionIntegration
+  where
+  hashWithSalt
+    _salt
+    LogsAnomalyDetectionIntegration' {..} =
+      _salt `Prelude.hashWithSalt` optInStatus
+
+instance
+  Prelude.NFData
+    LogsAnomalyDetectionIntegration
+  where
+  rnf LogsAnomalyDetectionIntegration' {..} =
+    Prelude.rnf optInStatus
diff --git a/gen/Amazonka/DevOpsGuru/Types/LogsAnomalyDetectionIntegrationConfig.hs b/gen/Amazonka/DevOpsGuru/Types/LogsAnomalyDetectionIntegrationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/LogsAnomalyDetectionIntegrationConfig.hs
@@ -0,0 +1,87 @@
+{-# 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.DevOpsGuru.Types.LogsAnomalyDetectionIntegrationConfig
+-- 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.DevOpsGuru.Types.LogsAnomalyDetectionIntegrationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.OptInStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the integration of DevOps Guru with CloudWatch log
+-- groups for log anomaly detection. You can use this to update the
+-- configuration.
+--
+-- /See:/ 'newLogsAnomalyDetectionIntegrationConfig' smart constructor.
+data LogsAnomalyDetectionIntegrationConfig = LogsAnomalyDetectionIntegrationConfig'
+  { -- | Specifies if DevOps Guru is configured to perform log anomaly detection
+    -- on CloudWatch log groups.
+    optInStatus :: Prelude.Maybe OptInStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogsAnomalyDetectionIntegrationConfig' 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:
+--
+-- 'optInStatus', 'logsAnomalyDetectionIntegrationConfig_optInStatus' - Specifies if DevOps Guru is configured to perform log anomaly detection
+-- on CloudWatch log groups.
+newLogsAnomalyDetectionIntegrationConfig ::
+  LogsAnomalyDetectionIntegrationConfig
+newLogsAnomalyDetectionIntegrationConfig =
+  LogsAnomalyDetectionIntegrationConfig'
+    { optInStatus =
+        Prelude.Nothing
+    }
+
+-- | Specifies if DevOps Guru is configured to perform log anomaly detection
+-- on CloudWatch log groups.
+logsAnomalyDetectionIntegrationConfig_optInStatus :: Lens.Lens' LogsAnomalyDetectionIntegrationConfig (Prelude.Maybe OptInStatus)
+logsAnomalyDetectionIntegrationConfig_optInStatus = Lens.lens (\LogsAnomalyDetectionIntegrationConfig' {optInStatus} -> optInStatus) (\s@LogsAnomalyDetectionIntegrationConfig' {} a -> s {optInStatus = a} :: LogsAnomalyDetectionIntegrationConfig)
+
+instance
+  Prelude.Hashable
+    LogsAnomalyDetectionIntegrationConfig
+  where
+  hashWithSalt
+    _salt
+    LogsAnomalyDetectionIntegrationConfig' {..} =
+      _salt `Prelude.hashWithSalt` optInStatus
+
+instance
+  Prelude.NFData
+    LogsAnomalyDetectionIntegrationConfig
+  where
+  rnf LogsAnomalyDetectionIntegrationConfig' {..} =
+    Prelude.rnf optInStatus
+
+instance
+  Data.ToJSON
+    LogsAnomalyDetectionIntegrationConfig
+  where
+  toJSON LogsAnomalyDetectionIntegrationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("OptInStatus" Data..=) Prelude.<$> optInStatus]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/MonitoredResourceIdentifier.hs b/gen/Amazonka/DevOpsGuru/Types/MonitoredResourceIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/MonitoredResourceIdentifier.hs
@@ -0,0 +1,124 @@
+{-# 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.DevOpsGuru.Types.MonitoredResourceIdentifier
+-- 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.DevOpsGuru.Types.MonitoredResourceIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ResourcePermission
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the resource that is being monitored, including the
+-- name of the resource, the type of resource, and whether or not
+-- permission is given to DevOps Guru to access that resource.
+--
+-- /See:/ 'newMonitoredResourceIdentifier' smart constructor.
+data MonitoredResourceIdentifier = MonitoredResourceIdentifier'
+  { -- | The time at which DevOps Guru last updated this resource.
+    lastUpdated :: Prelude.Maybe Data.POSIX,
+    -- | The name of the resource being monitored.
+    monitoredResourceName :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The permission status of a resource.
+    resourcePermission :: Prelude.Maybe ResourcePermission,
+    -- | The type of resource being monitored.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitoredResourceIdentifier' 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:
+--
+-- 'lastUpdated', 'monitoredResourceIdentifier_lastUpdated' - The time at which DevOps Guru last updated this resource.
+--
+-- 'monitoredResourceName', 'monitoredResourceIdentifier_monitoredResourceName' - The name of the resource being monitored.
+--
+-- 'resourceCollection', 'monitoredResourceIdentifier_resourceCollection' - Undocumented member.
+--
+-- 'resourcePermission', 'monitoredResourceIdentifier_resourcePermission' - The permission status of a resource.
+--
+-- 'type'', 'monitoredResourceIdentifier_type' - The type of resource being monitored.
+newMonitoredResourceIdentifier ::
+  MonitoredResourceIdentifier
+newMonitoredResourceIdentifier =
+  MonitoredResourceIdentifier'
+    { lastUpdated =
+        Prelude.Nothing,
+      monitoredResourceName = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      resourcePermission = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The time at which DevOps Guru last updated this resource.
+monitoredResourceIdentifier_lastUpdated :: Lens.Lens' MonitoredResourceIdentifier (Prelude.Maybe Prelude.UTCTime)
+monitoredResourceIdentifier_lastUpdated = Lens.lens (\MonitoredResourceIdentifier' {lastUpdated} -> lastUpdated) (\s@MonitoredResourceIdentifier' {} a -> s {lastUpdated = a} :: MonitoredResourceIdentifier) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the resource being monitored.
+monitoredResourceIdentifier_monitoredResourceName :: Lens.Lens' MonitoredResourceIdentifier (Prelude.Maybe Prelude.Text)
+monitoredResourceIdentifier_monitoredResourceName = Lens.lens (\MonitoredResourceIdentifier' {monitoredResourceName} -> monitoredResourceName) (\s@MonitoredResourceIdentifier' {} a -> s {monitoredResourceName = a} :: MonitoredResourceIdentifier)
+
+-- | Undocumented member.
+monitoredResourceIdentifier_resourceCollection :: Lens.Lens' MonitoredResourceIdentifier (Prelude.Maybe ResourceCollection)
+monitoredResourceIdentifier_resourceCollection = Lens.lens (\MonitoredResourceIdentifier' {resourceCollection} -> resourceCollection) (\s@MonitoredResourceIdentifier' {} a -> s {resourceCollection = a} :: MonitoredResourceIdentifier)
+
+-- | The permission status of a resource.
+monitoredResourceIdentifier_resourcePermission :: Lens.Lens' MonitoredResourceIdentifier (Prelude.Maybe ResourcePermission)
+monitoredResourceIdentifier_resourcePermission = Lens.lens (\MonitoredResourceIdentifier' {resourcePermission} -> resourcePermission) (\s@MonitoredResourceIdentifier' {} a -> s {resourcePermission = a} :: MonitoredResourceIdentifier)
+
+-- | The type of resource being monitored.
+monitoredResourceIdentifier_type :: Lens.Lens' MonitoredResourceIdentifier (Prelude.Maybe Prelude.Text)
+monitoredResourceIdentifier_type = Lens.lens (\MonitoredResourceIdentifier' {type'} -> type') (\s@MonitoredResourceIdentifier' {} a -> s {type' = a} :: MonitoredResourceIdentifier)
+
+instance Data.FromJSON MonitoredResourceIdentifier where
+  parseJSON =
+    Data.withObject
+      "MonitoredResourceIdentifier"
+      ( \x ->
+          MonitoredResourceIdentifier'
+            Prelude.<$> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "MonitoredResourceName")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "ResourcePermission")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable MonitoredResourceIdentifier where
+  hashWithSalt _salt MonitoredResourceIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` monitoredResourceName
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` resourcePermission
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData MonitoredResourceIdentifier where
+  rnf MonitoredResourceIdentifier' {..} =
+    Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf monitoredResourceName
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf resourcePermission
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/NotificationChannel.hs b/gen/Amazonka/DevOpsGuru/Types/NotificationChannel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/NotificationChannel.hs
@@ -0,0 +1,107 @@
+{-# 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.DevOpsGuru.Types.NotificationChannel
+-- 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.DevOpsGuru.Types.NotificationChannel where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.NotificationChannelConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a notification channel. A notification channel is used
+-- to notify you when DevOps Guru creates an insight. The one supported
+-- notification channel is Amazon Simple Notification Service (Amazon SNS).
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. DevOps Guru only
+-- supports standard SNS topics. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-required-permissions.html Permissions for cross account Amazon SNS topics>.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. For more information,
+-- see Permissions for cross account Amazon SNS topics.
+--
+-- If you use an Amazon SNS topic that is encrypted by an Amazon Web
+-- Services Key Management Service customer-managed key (CMK), then you
+-- must add permissions to the CMK. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-kms-permissions.html Permissions for Amazon Web Services KMS–encrypted Amazon SNS topics>.
+--
+-- /See:/ 'newNotificationChannel' smart constructor.
+data NotificationChannel = NotificationChannel'
+  { -- | A @NotificationChannelConfig@ object that contains information about
+    -- configured notification channels.
+    config :: Prelude.Maybe NotificationChannelConfig,
+    -- | The ID of a notification channel.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationChannel' 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:
+--
+-- 'config', 'notificationChannel_config' - A @NotificationChannelConfig@ object that contains information about
+-- configured notification channels.
+--
+-- 'id', 'notificationChannel_id' - The ID of a notification channel.
+newNotificationChannel ::
+  NotificationChannel
+newNotificationChannel =
+  NotificationChannel'
+    { config = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | A @NotificationChannelConfig@ object that contains information about
+-- configured notification channels.
+notificationChannel_config :: Lens.Lens' NotificationChannel (Prelude.Maybe NotificationChannelConfig)
+notificationChannel_config = Lens.lens (\NotificationChannel' {config} -> config) (\s@NotificationChannel' {} a -> s {config = a} :: NotificationChannel)
+
+-- | The ID of a notification channel.
+notificationChannel_id :: Lens.Lens' NotificationChannel (Prelude.Maybe Prelude.Text)
+notificationChannel_id = Lens.lens (\NotificationChannel' {id} -> id) (\s@NotificationChannel' {} a -> s {id = a} :: NotificationChannel)
+
+instance Data.FromJSON NotificationChannel where
+  parseJSON =
+    Data.withObject
+      "NotificationChannel"
+      ( \x ->
+          NotificationChannel'
+            Prelude.<$> (x Data..:? "Config")
+            Prelude.<*> (x Data..:? "Id")
+      )
+
+instance Prelude.Hashable NotificationChannel where
+  hashWithSalt _salt NotificationChannel' {..} =
+    _salt
+      `Prelude.hashWithSalt` config
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData NotificationChannel where
+  rnf NotificationChannel' {..} =
+    Prelude.rnf config `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/DevOpsGuru/Types/NotificationChannelConfig.hs b/gen/Amazonka/DevOpsGuru/Types/NotificationChannelConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/NotificationChannelConfig.hs
@@ -0,0 +1,165 @@
+{-# 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.DevOpsGuru.Types.NotificationChannelConfig
+-- 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.DevOpsGuru.Types.NotificationChannelConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.NotificationFilterConfig
+import Amazonka.DevOpsGuru.Types.SnsChannelConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about notification channels you have configured with DevOps
+-- Guru. The one supported notification channel is Amazon Simple
+-- Notification Service (Amazon SNS).
+--
+-- /See:/ 'newNotificationChannelConfig' smart constructor.
+data NotificationChannelConfig = NotificationChannelConfig'
+  { -- | The filter configurations for the Amazon SNS notification topic you use
+    -- with DevOps Guru. If you do not provide filter configurations, the
+    -- default configurations are to receive notifications for all message
+    -- types of @High@ or @Medium@ severity.
+    filters :: Prelude.Maybe NotificationFilterConfig,
+    -- | Information about a notification channel configured in DevOps Guru to
+    -- send notifications when insights are created.
+    --
+    -- If you use an Amazon SNS topic in another account, you must attach a
+    -- policy to it that grants DevOps Guru permission to it notifications.
+    -- DevOps Guru adds the required policy on your behalf to send
+    -- notifications using Amazon SNS in your account. DevOps Guru only
+    -- supports standard SNS topics. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-required-permissions.html Permissions for cross account Amazon SNS topics>.
+    --
+    -- If you use an Amazon SNS topic in another account, you must attach a
+    -- policy to it that grants DevOps Guru permission to it notifications.
+    -- DevOps Guru adds the required policy on your behalf to send
+    -- notifications using Amazon SNS in your account. For more information,
+    -- see Permissions for cross account Amazon SNS topics.
+    --
+    -- If you use an Amazon SNS topic that is encrypted by an Amazon Web
+    -- Services Key Management Service customer-managed key (CMK), then you
+    -- must add permissions to the CMK. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-kms-permissions.html Permissions for Amazon Web Services KMS–encrypted Amazon SNS topics>.
+    sns :: SnsChannelConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationChannelConfig' 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:
+--
+-- 'filters', 'notificationChannelConfig_filters' - The filter configurations for the Amazon SNS notification topic you use
+-- with DevOps Guru. If you do not provide filter configurations, the
+-- default configurations are to receive notifications for all message
+-- types of @High@ or @Medium@ severity.
+--
+-- 'sns', 'notificationChannelConfig_sns' - Information about a notification channel configured in DevOps Guru to
+-- send notifications when insights are created.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. DevOps Guru only
+-- supports standard SNS topics. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-required-permissions.html Permissions for cross account Amazon SNS topics>.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. For more information,
+-- see Permissions for cross account Amazon SNS topics.
+--
+-- If you use an Amazon SNS topic that is encrypted by an Amazon Web
+-- Services Key Management Service customer-managed key (CMK), then you
+-- must add permissions to the CMK. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-kms-permissions.html Permissions for Amazon Web Services KMS–encrypted Amazon SNS topics>.
+newNotificationChannelConfig ::
+  -- | 'sns'
+  SnsChannelConfig ->
+  NotificationChannelConfig
+newNotificationChannelConfig pSns_ =
+  NotificationChannelConfig'
+    { filters =
+        Prelude.Nothing,
+      sns = pSns_
+    }
+
+-- | The filter configurations for the Amazon SNS notification topic you use
+-- with DevOps Guru. If you do not provide filter configurations, the
+-- default configurations are to receive notifications for all message
+-- types of @High@ or @Medium@ severity.
+notificationChannelConfig_filters :: Lens.Lens' NotificationChannelConfig (Prelude.Maybe NotificationFilterConfig)
+notificationChannelConfig_filters = Lens.lens (\NotificationChannelConfig' {filters} -> filters) (\s@NotificationChannelConfig' {} a -> s {filters = a} :: NotificationChannelConfig)
+
+-- | Information about a notification channel configured in DevOps Guru to
+-- send notifications when insights are created.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. DevOps Guru only
+-- supports standard SNS topics. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-required-permissions.html Permissions for cross account Amazon SNS topics>.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. For more information,
+-- see Permissions for cross account Amazon SNS topics.
+--
+-- If you use an Amazon SNS topic that is encrypted by an Amazon Web
+-- Services Key Management Service customer-managed key (CMK), then you
+-- must add permissions to the CMK. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-kms-permissions.html Permissions for Amazon Web Services KMS–encrypted Amazon SNS topics>.
+notificationChannelConfig_sns :: Lens.Lens' NotificationChannelConfig SnsChannelConfig
+notificationChannelConfig_sns = Lens.lens (\NotificationChannelConfig' {sns} -> sns) (\s@NotificationChannelConfig' {} a -> s {sns = a} :: NotificationChannelConfig)
+
+instance Data.FromJSON NotificationChannelConfig where
+  parseJSON =
+    Data.withObject
+      "NotificationChannelConfig"
+      ( \x ->
+          NotificationChannelConfig'
+            Prelude.<$> (x Data..:? "Filters")
+            Prelude.<*> (x Data..: "Sns")
+      )
+
+instance Prelude.Hashable NotificationChannelConfig where
+  hashWithSalt _salt NotificationChannelConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` sns
+
+instance Prelude.NFData NotificationChannelConfig where
+  rnf NotificationChannelConfig' {..} =
+    Prelude.rnf filters `Prelude.seq` Prelude.rnf sns
+
+instance Data.ToJSON NotificationChannelConfig where
+  toJSON NotificationChannelConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            Prelude.Just ("Sns" Data..= sns)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/NotificationFilterConfig.hs b/gen/Amazonka/DevOpsGuru/Types/NotificationFilterConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/NotificationFilterConfig.hs
@@ -0,0 +1,114 @@
+{-# 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.DevOpsGuru.Types.NotificationFilterConfig
+-- 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.DevOpsGuru.Types.NotificationFilterConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.NotificationMessageType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The filter configurations for the Amazon SNS notification topic you use
+-- with DevOps Guru. You can choose to specify which events or message
+-- types to receive notifications for. You can also choose to specify which
+-- severity levels to receive notifications for.
+--
+-- /See:/ 'newNotificationFilterConfig' smart constructor.
+data NotificationFilterConfig = NotificationFilterConfig'
+  { -- | The events that you want to receive notifications for. For example, you
+    -- can choose to receive notifications only when the severity level is
+    -- upgraded or a new insight is created.
+    messageTypes :: Prelude.Maybe [NotificationMessageType],
+    -- | The severity levels that you want to receive notifications for. For
+    -- example, you can choose to receive notifications only for insights with
+    -- @HIGH@ and @MEDIUM@ severity levels. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>.
+    severities :: Prelude.Maybe [InsightSeverity]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationFilterConfig' 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:
+--
+-- 'messageTypes', 'notificationFilterConfig_messageTypes' - The events that you want to receive notifications for. For example, you
+-- can choose to receive notifications only when the severity level is
+-- upgraded or a new insight is created.
+--
+-- 'severities', 'notificationFilterConfig_severities' - The severity levels that you want to receive notifications for. For
+-- example, you can choose to receive notifications only for insights with
+-- @HIGH@ and @MEDIUM@ severity levels. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>.
+newNotificationFilterConfig ::
+  NotificationFilterConfig
+newNotificationFilterConfig =
+  NotificationFilterConfig'
+    { messageTypes =
+        Prelude.Nothing,
+      severities = Prelude.Nothing
+    }
+
+-- | The events that you want to receive notifications for. For example, you
+-- can choose to receive notifications only when the severity level is
+-- upgraded or a new insight is created.
+notificationFilterConfig_messageTypes :: Lens.Lens' NotificationFilterConfig (Prelude.Maybe [NotificationMessageType])
+notificationFilterConfig_messageTypes = Lens.lens (\NotificationFilterConfig' {messageTypes} -> messageTypes) (\s@NotificationFilterConfig' {} a -> s {messageTypes = a} :: NotificationFilterConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The severity levels that you want to receive notifications for. For
+-- example, you can choose to receive notifications only for insights with
+-- @HIGH@ and @MEDIUM@ severity levels. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>.
+notificationFilterConfig_severities :: Lens.Lens' NotificationFilterConfig (Prelude.Maybe [InsightSeverity])
+notificationFilterConfig_severities = Lens.lens (\NotificationFilterConfig' {severities} -> severities) (\s@NotificationFilterConfig' {} a -> s {severities = a} :: NotificationFilterConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON NotificationFilterConfig where
+  parseJSON =
+    Data.withObject
+      "NotificationFilterConfig"
+      ( \x ->
+          NotificationFilterConfig'
+            Prelude.<$> (x Data..:? "MessageTypes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Severities" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable NotificationFilterConfig where
+  hashWithSalt _salt NotificationFilterConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` messageTypes
+      `Prelude.hashWithSalt` severities
+
+instance Prelude.NFData NotificationFilterConfig where
+  rnf NotificationFilterConfig' {..} =
+    Prelude.rnf messageTypes
+      `Prelude.seq` Prelude.rnf severities
+
+instance Data.ToJSON NotificationFilterConfig where
+  toJSON NotificationFilterConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MessageTypes" Data..=) Prelude.<$> messageTypes,
+            ("Severities" Data..=) Prelude.<$> severities
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/NotificationMessageType.hs b/gen/Amazonka/DevOpsGuru/Types/NotificationMessageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/NotificationMessageType.hs
@@ -0,0 +1,86 @@
+{-# 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.DevOpsGuru.Types.NotificationMessageType
+-- 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.DevOpsGuru.Types.NotificationMessageType
+  ( NotificationMessageType
+      ( ..,
+        NotificationMessageType_CLOSED_INSIGHT,
+        NotificationMessageType_NEW_ASSOCIATION,
+        NotificationMessageType_NEW_INSIGHT,
+        NotificationMessageType_NEW_RECOMMENDATION,
+        NotificationMessageType_SEVERITY_UPGRADED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NotificationMessageType = NotificationMessageType'
+  { fromNotificationMessageType ::
+      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 NotificationMessageType_CLOSED_INSIGHT :: NotificationMessageType
+pattern NotificationMessageType_CLOSED_INSIGHT = NotificationMessageType' "CLOSED_INSIGHT"
+
+pattern NotificationMessageType_NEW_ASSOCIATION :: NotificationMessageType
+pattern NotificationMessageType_NEW_ASSOCIATION = NotificationMessageType' "NEW_ASSOCIATION"
+
+pattern NotificationMessageType_NEW_INSIGHT :: NotificationMessageType
+pattern NotificationMessageType_NEW_INSIGHT = NotificationMessageType' "NEW_INSIGHT"
+
+pattern NotificationMessageType_NEW_RECOMMENDATION :: NotificationMessageType
+pattern NotificationMessageType_NEW_RECOMMENDATION = NotificationMessageType' "NEW_RECOMMENDATION"
+
+pattern NotificationMessageType_SEVERITY_UPGRADED :: NotificationMessageType
+pattern NotificationMessageType_SEVERITY_UPGRADED = NotificationMessageType' "SEVERITY_UPGRADED"
+
+{-# COMPLETE
+  NotificationMessageType_CLOSED_INSIGHT,
+  NotificationMessageType_NEW_ASSOCIATION,
+  NotificationMessageType_NEW_INSIGHT,
+  NotificationMessageType_NEW_RECOMMENDATION,
+  NotificationMessageType_SEVERITY_UPGRADED,
+  NotificationMessageType'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/OpsCenterIntegration.hs b/gen/Amazonka/DevOpsGuru/Types/OpsCenterIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/OpsCenterIntegration.hs
@@ -0,0 +1,78 @@
+{-# 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.DevOpsGuru.Types.OpsCenterIntegration
+-- 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.DevOpsGuru.Types.OpsCenterIntegration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.OptInStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about whether DevOps Guru is configured to create an OpsItem
+-- in Amazon Web Services Systems Manager OpsCenter for each created
+-- insight.
+--
+-- /See:/ 'newOpsCenterIntegration' smart constructor.
+data OpsCenterIntegration = OpsCenterIntegration'
+  { -- | Specifies if DevOps Guru is enabled to create an Amazon Web Services
+    -- Systems Manager OpsItem for each created insight.
+    optInStatus :: Prelude.Maybe OptInStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OpsCenterIntegration' 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:
+--
+-- 'optInStatus', 'opsCenterIntegration_optInStatus' - Specifies if DevOps Guru is enabled to create an Amazon Web Services
+-- Systems Manager OpsItem for each created insight.
+newOpsCenterIntegration ::
+  OpsCenterIntegration
+newOpsCenterIntegration =
+  OpsCenterIntegration'
+    { optInStatus =
+        Prelude.Nothing
+    }
+
+-- | Specifies if DevOps Guru is enabled to create an Amazon Web Services
+-- Systems Manager OpsItem for each created insight.
+opsCenterIntegration_optInStatus :: Lens.Lens' OpsCenterIntegration (Prelude.Maybe OptInStatus)
+opsCenterIntegration_optInStatus = Lens.lens (\OpsCenterIntegration' {optInStatus} -> optInStatus) (\s@OpsCenterIntegration' {} a -> s {optInStatus = a} :: OpsCenterIntegration)
+
+instance Data.FromJSON OpsCenterIntegration where
+  parseJSON =
+    Data.withObject
+      "OpsCenterIntegration"
+      ( \x ->
+          OpsCenterIntegration'
+            Prelude.<$> (x Data..:? "OptInStatus")
+      )
+
+instance Prelude.Hashable OpsCenterIntegration where
+  hashWithSalt _salt OpsCenterIntegration' {..} =
+    _salt `Prelude.hashWithSalt` optInStatus
+
+instance Prelude.NFData OpsCenterIntegration where
+  rnf OpsCenterIntegration' {..} =
+    Prelude.rnf optInStatus
diff --git a/gen/Amazonka/DevOpsGuru/Types/OpsCenterIntegrationConfig.hs b/gen/Amazonka/DevOpsGuru/Types/OpsCenterIntegrationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/OpsCenterIntegrationConfig.hs
@@ -0,0 +1,76 @@
+{-# 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.DevOpsGuru.Types.OpsCenterIntegrationConfig
+-- 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.DevOpsGuru.Types.OpsCenterIntegrationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.OptInStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about whether DevOps Guru is configured to create an OpsItem
+-- in Amazon Web Services Systems Manager OpsCenter for each created
+-- insight. You can use this to update the configuration.
+--
+-- /See:/ 'newOpsCenterIntegrationConfig' smart constructor.
+data OpsCenterIntegrationConfig = OpsCenterIntegrationConfig'
+  { -- | Specifies if DevOps Guru is enabled to create an Amazon Web Services
+    -- Systems Manager OpsItem for each created insight.
+    optInStatus :: Prelude.Maybe OptInStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OpsCenterIntegrationConfig' 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:
+--
+-- 'optInStatus', 'opsCenterIntegrationConfig_optInStatus' - Specifies if DevOps Guru is enabled to create an Amazon Web Services
+-- Systems Manager OpsItem for each created insight.
+newOpsCenterIntegrationConfig ::
+  OpsCenterIntegrationConfig
+newOpsCenterIntegrationConfig =
+  OpsCenterIntegrationConfig'
+    { optInStatus =
+        Prelude.Nothing
+    }
+
+-- | Specifies if DevOps Guru is enabled to create an Amazon Web Services
+-- Systems Manager OpsItem for each created insight.
+opsCenterIntegrationConfig_optInStatus :: Lens.Lens' OpsCenterIntegrationConfig (Prelude.Maybe OptInStatus)
+opsCenterIntegrationConfig_optInStatus = Lens.lens (\OpsCenterIntegrationConfig' {optInStatus} -> optInStatus) (\s@OpsCenterIntegrationConfig' {} a -> s {optInStatus = a} :: OpsCenterIntegrationConfig)
+
+instance Prelude.Hashable OpsCenterIntegrationConfig where
+  hashWithSalt _salt OpsCenterIntegrationConfig' {..} =
+    _salt `Prelude.hashWithSalt` optInStatus
+
+instance Prelude.NFData OpsCenterIntegrationConfig where
+  rnf OpsCenterIntegrationConfig' {..} =
+    Prelude.rnf optInStatus
+
+instance Data.ToJSON OpsCenterIntegrationConfig where
+  toJSON OpsCenterIntegrationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("OptInStatus" Data..=) Prelude.<$> optInStatus]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/OptInStatus.hs b/gen/Amazonka/DevOpsGuru/Types/OptInStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/OptInStatus.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.DevOpsGuru.Types.OptInStatus
+-- 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.DevOpsGuru.Types.OptInStatus
+  ( OptInStatus
+      ( ..,
+        OptInStatus_DISABLED,
+        OptInStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies if DevOps Guru is enabled to create an Amazon Web Services
+-- Systems Manager OpsItem for each created insight.
+newtype OptInStatus = OptInStatus'
+  { fromOptInStatus ::
+      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 OptInStatus_DISABLED :: OptInStatus
+pattern OptInStatus_DISABLED = OptInStatus' "DISABLED"
+
+pattern OptInStatus_ENABLED :: OptInStatus
+pattern OptInStatus_ENABLED = OptInStatus' "ENABLED"
+
+{-# COMPLETE
+  OptInStatus_DISABLED,
+  OptInStatus_ENABLED,
+  OptInStatus'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/OrganizationResourceCollectionType.hs b/gen/Amazonka/DevOpsGuru/Types/OrganizationResourceCollectionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/OrganizationResourceCollectionType.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.DevOpsGuru.Types.OrganizationResourceCollectionType
+-- 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.DevOpsGuru.Types.OrganizationResourceCollectionType
+  ( OrganizationResourceCollectionType
+      ( ..,
+        OrganizationResourceCollectionType_AWS_ACCOUNT,
+        OrganizationResourceCollectionType_AWS_CLOUD_FORMATION,
+        OrganizationResourceCollectionType_AWS_SERVICE,
+        OrganizationResourceCollectionType_AWS_TAGS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OrganizationResourceCollectionType = OrganizationResourceCollectionType'
+  { fromOrganizationResourceCollectionType ::
+      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 OrganizationResourceCollectionType_AWS_ACCOUNT :: OrganizationResourceCollectionType
+pattern OrganizationResourceCollectionType_AWS_ACCOUNT = OrganizationResourceCollectionType' "AWS_ACCOUNT"
+
+pattern OrganizationResourceCollectionType_AWS_CLOUD_FORMATION :: OrganizationResourceCollectionType
+pattern OrganizationResourceCollectionType_AWS_CLOUD_FORMATION = OrganizationResourceCollectionType' "AWS_CLOUD_FORMATION"
+
+pattern OrganizationResourceCollectionType_AWS_SERVICE :: OrganizationResourceCollectionType
+pattern OrganizationResourceCollectionType_AWS_SERVICE = OrganizationResourceCollectionType' "AWS_SERVICE"
+
+pattern OrganizationResourceCollectionType_AWS_TAGS :: OrganizationResourceCollectionType
+pattern OrganizationResourceCollectionType_AWS_TAGS = OrganizationResourceCollectionType' "AWS_TAGS"
+
+{-# COMPLETE
+  OrganizationResourceCollectionType_AWS_ACCOUNT,
+  OrganizationResourceCollectionType_AWS_CLOUD_FORMATION,
+  OrganizationResourceCollectionType_AWS_SERVICE,
+  OrganizationResourceCollectionType_AWS_TAGS,
+  OrganizationResourceCollectionType'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricDimensionGroup.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricDimensionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricDimensionGroup.hs
@@ -0,0 +1,360 @@
+{-# 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.DevOpsGuru.Types.PerformanceInsightsMetricDimensionGroup
+-- 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.DevOpsGuru.Types.PerformanceInsightsMetricDimensionGroup 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 logical grouping of Performance Insights metrics for a related subject
+-- area. For example, the @db.sql@ dimension group consists of the
+-- following dimensions: @db.sql.id@, @db.sql.db_id@, @db.sql.statement@,
+-- and @db.sql.tokenized_id@.
+--
+-- Each response element returns a maximum of 500 bytes. For larger
+-- elements, such as SQL statements, only the first 500 bytes are returned.
+--
+-- Amazon RDS Performance Insights enables you to monitor and explore
+-- different dimensions of database load based on data captured from a
+-- running DB instance. DB load is measured as average active sessions.
+-- Performance Insights provides the data to API consumers as a
+-- two-dimensional time-series dataset. The time dimension provides DB load
+-- data for each time point in the queried time range. Each time point
+-- decomposes overall load in relation to the requested dimensions,
+-- measured at that time point. Examples include SQL, Wait event, User, and
+-- Host.
+--
+-- -   To learn more about Performance Insights and Amazon Aurora DB
+--     instances, go to the
+--     <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.html Amazon Aurora User Guide>.
+--
+-- -   To learn more about Performance Insights and Amazon RDS DB
+--     instances, go to the
+--     <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html Amazon RDS User Guide>.
+--
+-- /See:/ 'newPerformanceInsightsMetricDimensionGroup' smart constructor.
+data PerformanceInsightsMetricDimensionGroup = PerformanceInsightsMetricDimensionGroup'
+  { -- | A list of specific dimensions from a dimension group. If this parameter
+    -- is not present, then it signifies that all of the dimensions in the
+    -- group were requested or are present in the response.
+    --
+    -- Valid values for elements in the @Dimensions@ array are:
+    --
+    -- -   @db.application.name@ - The name of the application that is
+    --     connected to the database (only Aurora PostgreSQL and RDS
+    --     PostgreSQL)
+    --
+    -- -   @db.host.id@ - The host ID of the connected client (all engines)
+    --
+    -- -   @db.host.name@ - The host name of the connected client (all engines)
+    --
+    -- -   @db.name@ - The name of the database to which the client is
+    --     connected (only Aurora PostgreSQL, Amazon RDS PostgreSQL, Aurora
+    --     MySQL, Amazon RDS MySQL, and MariaDB)
+    --
+    -- -   @db.session_type.name@ - The type of the current session (only
+    --     Aurora PostgreSQL and RDS PostgreSQL)
+    --
+    -- -   @db.sql.id@ - The SQL ID generated by Performance Insights (all
+    --     engines)
+    --
+    -- -   @db.sql.db_id@ - The SQL ID generated by the database (all engines)
+    --
+    -- -   @db.sql.statement@ - The SQL text that is being executed (all
+    --     engines)
+    --
+    -- -   @db.sql.tokenized_id@
+    --
+    -- -   @db.sql_tokenized.id@ - The SQL digest ID generated by Performance
+    --     Insights (all engines)
+    --
+    -- -   @db.sql_tokenized.db_id@ - SQL digest ID generated by the database
+    --     (all engines)
+    --
+    -- -   @db.sql_tokenized.statement@ - The SQL digest text (all engines)
+    --
+    -- -   @db.user.id@ - The ID of the user logged in to the database (all
+    --     engines)
+    --
+    -- -   @db.user.name@ - The name of the user logged in to the database (all
+    --     engines)
+    --
+    -- -   @db.wait_event.name@ - The event for which the backend is waiting
+    --     (all engines)
+    --
+    -- -   @db.wait_event.type@ - The type of event for which the backend is
+    --     waiting (all engines)
+    --
+    -- -   @db.wait_event_type.name@ - The name of the event type for which the
+    --     backend is waiting (all engines)
+    dimensions :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the dimension group. Its valid values are:
+    --
+    -- -   @db@ - The name of the database to which the client is connected
+    --     (only Aurora PostgreSQL, Amazon RDS PostgreSQL, Aurora MySQL, Amazon
+    --     RDS MySQL, and MariaDB)
+    --
+    -- -   @db.application@ - The name of the application that is connected to
+    --     the database (only Aurora PostgreSQL and RDS PostgreSQL)
+    --
+    -- -   @db.host@ - The host name of the connected client (all engines)
+    --
+    -- -   @db.session_type@ - The type of the current session (only Aurora
+    --     PostgreSQL and RDS PostgreSQL)
+    --
+    -- -   @db.sql@ - The SQL that is currently executing (all engines)
+    --
+    -- -   @db.sql_tokenized@ - The SQL digest (all engines)
+    --
+    -- -   @db.wait_event@ - The event for which the database backend is
+    --     waiting (all engines)
+    --
+    -- -   @db.wait_event_type@ - The type of event for which the database
+    --     backend is waiting (all engines)
+    --
+    -- -   @db.user@ - The user logged in to the database (all engines)
+    group' :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of items to fetch for this dimension group.
+    limit :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsMetricDimensionGroup' 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:
+--
+-- 'dimensions', 'performanceInsightsMetricDimensionGroup_dimensions' - A list of specific dimensions from a dimension group. If this parameter
+-- is not present, then it signifies that all of the dimensions in the
+-- group were requested or are present in the response.
+--
+-- Valid values for elements in the @Dimensions@ array are:
+--
+-- -   @db.application.name@ - The name of the application that is
+--     connected to the database (only Aurora PostgreSQL and RDS
+--     PostgreSQL)
+--
+-- -   @db.host.id@ - The host ID of the connected client (all engines)
+--
+-- -   @db.host.name@ - The host name of the connected client (all engines)
+--
+-- -   @db.name@ - The name of the database to which the client is
+--     connected (only Aurora PostgreSQL, Amazon RDS PostgreSQL, Aurora
+--     MySQL, Amazon RDS MySQL, and MariaDB)
+--
+-- -   @db.session_type.name@ - The type of the current session (only
+--     Aurora PostgreSQL and RDS PostgreSQL)
+--
+-- -   @db.sql.id@ - The SQL ID generated by Performance Insights (all
+--     engines)
+--
+-- -   @db.sql.db_id@ - The SQL ID generated by the database (all engines)
+--
+-- -   @db.sql.statement@ - The SQL text that is being executed (all
+--     engines)
+--
+-- -   @db.sql.tokenized_id@
+--
+-- -   @db.sql_tokenized.id@ - The SQL digest ID generated by Performance
+--     Insights (all engines)
+--
+-- -   @db.sql_tokenized.db_id@ - SQL digest ID generated by the database
+--     (all engines)
+--
+-- -   @db.sql_tokenized.statement@ - The SQL digest text (all engines)
+--
+-- -   @db.user.id@ - The ID of the user logged in to the database (all
+--     engines)
+--
+-- -   @db.user.name@ - The name of the user logged in to the database (all
+--     engines)
+--
+-- -   @db.wait_event.name@ - The event for which the backend is waiting
+--     (all engines)
+--
+-- -   @db.wait_event.type@ - The type of event for which the backend is
+--     waiting (all engines)
+--
+-- -   @db.wait_event_type.name@ - The name of the event type for which the
+--     backend is waiting (all engines)
+--
+-- 'group'', 'performanceInsightsMetricDimensionGroup_group' - The name of the dimension group. Its valid values are:
+--
+-- -   @db@ - The name of the database to which the client is connected
+--     (only Aurora PostgreSQL, Amazon RDS PostgreSQL, Aurora MySQL, Amazon
+--     RDS MySQL, and MariaDB)
+--
+-- -   @db.application@ - The name of the application that is connected to
+--     the database (only Aurora PostgreSQL and RDS PostgreSQL)
+--
+-- -   @db.host@ - The host name of the connected client (all engines)
+--
+-- -   @db.session_type@ - The type of the current session (only Aurora
+--     PostgreSQL and RDS PostgreSQL)
+--
+-- -   @db.sql@ - The SQL that is currently executing (all engines)
+--
+-- -   @db.sql_tokenized@ - The SQL digest (all engines)
+--
+-- -   @db.wait_event@ - The event for which the database backend is
+--     waiting (all engines)
+--
+-- -   @db.wait_event_type@ - The type of event for which the database
+--     backend is waiting (all engines)
+--
+-- -   @db.user@ - The user logged in to the database (all engines)
+--
+-- 'limit', 'performanceInsightsMetricDimensionGroup_limit' - The maximum number of items to fetch for this dimension group.
+newPerformanceInsightsMetricDimensionGroup ::
+  PerformanceInsightsMetricDimensionGroup
+newPerformanceInsightsMetricDimensionGroup =
+  PerformanceInsightsMetricDimensionGroup'
+    { dimensions =
+        Prelude.Nothing,
+      group' = Prelude.Nothing,
+      limit = Prelude.Nothing
+    }
+
+-- | A list of specific dimensions from a dimension group. If this parameter
+-- is not present, then it signifies that all of the dimensions in the
+-- group were requested or are present in the response.
+--
+-- Valid values for elements in the @Dimensions@ array are:
+--
+-- -   @db.application.name@ - The name of the application that is
+--     connected to the database (only Aurora PostgreSQL and RDS
+--     PostgreSQL)
+--
+-- -   @db.host.id@ - The host ID of the connected client (all engines)
+--
+-- -   @db.host.name@ - The host name of the connected client (all engines)
+--
+-- -   @db.name@ - The name of the database to which the client is
+--     connected (only Aurora PostgreSQL, Amazon RDS PostgreSQL, Aurora
+--     MySQL, Amazon RDS MySQL, and MariaDB)
+--
+-- -   @db.session_type.name@ - The type of the current session (only
+--     Aurora PostgreSQL and RDS PostgreSQL)
+--
+-- -   @db.sql.id@ - The SQL ID generated by Performance Insights (all
+--     engines)
+--
+-- -   @db.sql.db_id@ - The SQL ID generated by the database (all engines)
+--
+-- -   @db.sql.statement@ - The SQL text that is being executed (all
+--     engines)
+--
+-- -   @db.sql.tokenized_id@
+--
+-- -   @db.sql_tokenized.id@ - The SQL digest ID generated by Performance
+--     Insights (all engines)
+--
+-- -   @db.sql_tokenized.db_id@ - SQL digest ID generated by the database
+--     (all engines)
+--
+-- -   @db.sql_tokenized.statement@ - The SQL digest text (all engines)
+--
+-- -   @db.user.id@ - The ID of the user logged in to the database (all
+--     engines)
+--
+-- -   @db.user.name@ - The name of the user logged in to the database (all
+--     engines)
+--
+-- -   @db.wait_event.name@ - The event for which the backend is waiting
+--     (all engines)
+--
+-- -   @db.wait_event.type@ - The type of event for which the backend is
+--     waiting (all engines)
+--
+-- -   @db.wait_event_type.name@ - The name of the event type for which the
+--     backend is waiting (all engines)
+performanceInsightsMetricDimensionGroup_dimensions :: Lens.Lens' PerformanceInsightsMetricDimensionGroup (Prelude.Maybe [Prelude.Text])
+performanceInsightsMetricDimensionGroup_dimensions = Lens.lens (\PerformanceInsightsMetricDimensionGroup' {dimensions} -> dimensions) (\s@PerformanceInsightsMetricDimensionGroup' {} a -> s {dimensions = a} :: PerformanceInsightsMetricDimensionGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the dimension group. Its valid values are:
+--
+-- -   @db@ - The name of the database to which the client is connected
+--     (only Aurora PostgreSQL, Amazon RDS PostgreSQL, Aurora MySQL, Amazon
+--     RDS MySQL, and MariaDB)
+--
+-- -   @db.application@ - The name of the application that is connected to
+--     the database (only Aurora PostgreSQL and RDS PostgreSQL)
+--
+-- -   @db.host@ - The host name of the connected client (all engines)
+--
+-- -   @db.session_type@ - The type of the current session (only Aurora
+--     PostgreSQL and RDS PostgreSQL)
+--
+-- -   @db.sql@ - The SQL that is currently executing (all engines)
+--
+-- -   @db.sql_tokenized@ - The SQL digest (all engines)
+--
+-- -   @db.wait_event@ - The event for which the database backend is
+--     waiting (all engines)
+--
+-- -   @db.wait_event_type@ - The type of event for which the database
+--     backend is waiting (all engines)
+--
+-- -   @db.user@ - The user logged in to the database (all engines)
+performanceInsightsMetricDimensionGroup_group :: Lens.Lens' PerformanceInsightsMetricDimensionGroup (Prelude.Maybe Prelude.Text)
+performanceInsightsMetricDimensionGroup_group = Lens.lens (\PerformanceInsightsMetricDimensionGroup' {group'} -> group') (\s@PerformanceInsightsMetricDimensionGroup' {} a -> s {group' = a} :: PerformanceInsightsMetricDimensionGroup)
+
+-- | The maximum number of items to fetch for this dimension group.
+performanceInsightsMetricDimensionGroup_limit :: Lens.Lens' PerformanceInsightsMetricDimensionGroup (Prelude.Maybe Prelude.Natural)
+performanceInsightsMetricDimensionGroup_limit = Lens.lens (\PerformanceInsightsMetricDimensionGroup' {limit} -> limit) (\s@PerformanceInsightsMetricDimensionGroup' {} a -> s {limit = a} :: PerformanceInsightsMetricDimensionGroup)
+
+instance
+  Data.FromJSON
+    PerformanceInsightsMetricDimensionGroup
+  where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsMetricDimensionGroup"
+      ( \x ->
+          PerformanceInsightsMetricDimensionGroup'
+            Prelude.<$> (x Data..:? "Dimensions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Group")
+            Prelude.<*> (x Data..:? "Limit")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsMetricDimensionGroup
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsMetricDimensionGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` dimensions
+        `Prelude.hashWithSalt` group'
+        `Prelude.hashWithSalt` limit
+
+instance
+  Prelude.NFData
+    PerformanceInsightsMetricDimensionGroup
+  where
+  rnf PerformanceInsightsMetricDimensionGroup' {..} =
+    Prelude.rnf dimensions
+      `Prelude.seq` Prelude.rnf group'
+      `Prelude.seq` Prelude.rnf limit
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricQuery.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricQuery.hs
@@ -0,0 +1,212 @@
+{-# 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.DevOpsGuru.Types.PerformanceInsightsMetricQuery
+-- 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.DevOpsGuru.Types.PerformanceInsightsMetricQuery where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricDimensionGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | A single query to be processed. Use these parameters to query the
+-- Performance Insights @GetResourceMetrics@ API to retrieve the metrics
+-- for an anomaly. For more information, see
+-- @ @<https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_GetResourceMetrics.html GetResourceMetrics>@ @
+-- in the /Amazon RDS Performance Insights API Reference/.
+--
+-- Amazon RDS Performance Insights enables you to monitor and explore
+-- different dimensions of database load based on data captured from a
+-- running DB instance. DB load is measured as average active sessions.
+-- Performance Insights provides the data to API consumers as a
+-- two-dimensional time-series dataset. The time dimension provides DB load
+-- data for each time point in the queried time range. Each time point
+-- decomposes overall load in relation to the requested dimensions,
+-- measured at that time point. Examples include SQL, Wait event, User, and
+-- Host.
+--
+-- -   To learn more about Performance Insights and Amazon Aurora DB
+--     instances, go to the
+--     <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.html Amazon Aurora User Guide>.
+--
+-- -   To learn more about Performance Insights and Amazon RDS DB
+--     instances, go to the
+--     <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html Amazon RDS User Guide>.
+--
+-- /See:/ 'newPerformanceInsightsMetricQuery' smart constructor.
+data PerformanceInsightsMetricQuery = PerformanceInsightsMetricQuery'
+  { -- | One or more filters to apply to a Performance Insights
+    -- @GetResourceMetrics@ API query. Restrictions:
+    --
+    -- -   Any number of filters by the same dimension, as specified in the
+    --     @GroupBy@ parameter.
+    --
+    -- -   A single filter for any other dimension in this dimension group.
+    filter' :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The specification for how to aggregate the data points from a
+    -- Performance Insights @GetResourceMetrics@ API query. The Performance
+    -- Insights query returns all of the dimensions within that group, unless
+    -- you provide the names of specific dimensions within that group. You can
+    -- also request that Performance Insights return a limited number of values
+    -- for a dimension.
+    groupBy :: Prelude.Maybe PerformanceInsightsMetricDimensionGroup,
+    -- | The name of the meteric used used when querying an Performance Insights
+    -- @GetResourceMetrics@ API for anomaly metrics.
+    --
+    -- Valid values for @Metric@ are:
+    --
+    -- -   @db.load.avg@ - a scaled representation of the number of active
+    --     sessions for the database engine.
+    --
+    -- -   @db.sampledload.avg@ - the raw number of active sessions for the
+    --     database engine.
+    --
+    -- If the number of active sessions is less than an internal Performance
+    -- Insights threshold, @db.load.avg@ and @db.sampledload.avg@ are the same
+    -- value. If the number of active sessions is greater than the internal
+    -- threshold, Performance Insights samples the active sessions, with
+    -- @db.load.avg@ showing the scaled values, @db.sampledload.avg@ showing
+    -- the raw values, and @db.sampledload.avg@ less than @db.load.avg@. For
+    -- most use cases, you can query @db.load.avg@ only.
+    metric :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsMetricQuery' 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:
+--
+-- 'filter'', 'performanceInsightsMetricQuery_filter' - One or more filters to apply to a Performance Insights
+-- @GetResourceMetrics@ API query. Restrictions:
+--
+-- -   Any number of filters by the same dimension, as specified in the
+--     @GroupBy@ parameter.
+--
+-- -   A single filter for any other dimension in this dimension group.
+--
+-- 'groupBy', 'performanceInsightsMetricQuery_groupBy' - The specification for how to aggregate the data points from a
+-- Performance Insights @GetResourceMetrics@ API query. The Performance
+-- Insights query returns all of the dimensions within that group, unless
+-- you provide the names of specific dimensions within that group. You can
+-- also request that Performance Insights return a limited number of values
+-- for a dimension.
+--
+-- 'metric', 'performanceInsightsMetricQuery_metric' - The name of the meteric used used when querying an Performance Insights
+-- @GetResourceMetrics@ API for anomaly metrics.
+--
+-- Valid values for @Metric@ are:
+--
+-- -   @db.load.avg@ - a scaled representation of the number of active
+--     sessions for the database engine.
+--
+-- -   @db.sampledload.avg@ - the raw number of active sessions for the
+--     database engine.
+--
+-- If the number of active sessions is less than an internal Performance
+-- Insights threshold, @db.load.avg@ and @db.sampledload.avg@ are the same
+-- value. If the number of active sessions is greater than the internal
+-- threshold, Performance Insights samples the active sessions, with
+-- @db.load.avg@ showing the scaled values, @db.sampledload.avg@ showing
+-- the raw values, and @db.sampledload.avg@ less than @db.load.avg@. For
+-- most use cases, you can query @db.load.avg@ only.
+newPerformanceInsightsMetricQuery ::
+  PerformanceInsightsMetricQuery
+newPerformanceInsightsMetricQuery =
+  PerformanceInsightsMetricQuery'
+    { filter' =
+        Prelude.Nothing,
+      groupBy = Prelude.Nothing,
+      metric = Prelude.Nothing
+    }
+
+-- | One or more filters to apply to a Performance Insights
+-- @GetResourceMetrics@ API query. Restrictions:
+--
+-- -   Any number of filters by the same dimension, as specified in the
+--     @GroupBy@ parameter.
+--
+-- -   A single filter for any other dimension in this dimension group.
+performanceInsightsMetricQuery_filter :: Lens.Lens' PerformanceInsightsMetricQuery (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+performanceInsightsMetricQuery_filter = Lens.lens (\PerformanceInsightsMetricQuery' {filter'} -> filter') (\s@PerformanceInsightsMetricQuery' {} a -> s {filter' = a} :: PerformanceInsightsMetricQuery) Prelude.. Lens.mapping Lens.coerced
+
+-- | The specification for how to aggregate the data points from a
+-- Performance Insights @GetResourceMetrics@ API query. The Performance
+-- Insights query returns all of the dimensions within that group, unless
+-- you provide the names of specific dimensions within that group. You can
+-- also request that Performance Insights return a limited number of values
+-- for a dimension.
+performanceInsightsMetricQuery_groupBy :: Lens.Lens' PerformanceInsightsMetricQuery (Prelude.Maybe PerformanceInsightsMetricDimensionGroup)
+performanceInsightsMetricQuery_groupBy = Lens.lens (\PerformanceInsightsMetricQuery' {groupBy} -> groupBy) (\s@PerformanceInsightsMetricQuery' {} a -> s {groupBy = a} :: PerformanceInsightsMetricQuery)
+
+-- | The name of the meteric used used when querying an Performance Insights
+-- @GetResourceMetrics@ API for anomaly metrics.
+--
+-- Valid values for @Metric@ are:
+--
+-- -   @db.load.avg@ - a scaled representation of the number of active
+--     sessions for the database engine.
+--
+-- -   @db.sampledload.avg@ - the raw number of active sessions for the
+--     database engine.
+--
+-- If the number of active sessions is less than an internal Performance
+-- Insights threshold, @db.load.avg@ and @db.sampledload.avg@ are the same
+-- value. If the number of active sessions is greater than the internal
+-- threshold, Performance Insights samples the active sessions, with
+-- @db.load.avg@ showing the scaled values, @db.sampledload.avg@ showing
+-- the raw values, and @db.sampledload.avg@ less than @db.load.avg@. For
+-- most use cases, you can query @db.load.avg@ only.
+performanceInsightsMetricQuery_metric :: Lens.Lens' PerformanceInsightsMetricQuery (Prelude.Maybe Prelude.Text)
+performanceInsightsMetricQuery_metric = Lens.lens (\PerformanceInsightsMetricQuery' {metric} -> metric) (\s@PerformanceInsightsMetricQuery' {} a -> s {metric = a} :: PerformanceInsightsMetricQuery)
+
+instance Data.FromJSON PerformanceInsightsMetricQuery where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsMetricQuery"
+      ( \x ->
+          PerformanceInsightsMetricQuery'
+            Prelude.<$> (x Data..:? "Filter" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "GroupBy")
+            Prelude.<*> (x Data..:? "Metric")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsMetricQuery
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsMetricQuery' {..} =
+      _salt
+        `Prelude.hashWithSalt` filter'
+        `Prelude.hashWithSalt` groupBy
+        `Prelude.hashWithSalt` metric
+
+instance
+  Prelude.NFData
+    PerformanceInsightsMetricQuery
+  where
+  rnf PerformanceInsightsMetricQuery' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf groupBy
+      `Prelude.seq` Prelude.rnf metric
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricsDetail.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricsDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsMetricsDetail.hs
@@ -0,0 +1,183 @@
+{-# 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.DevOpsGuru.Types.PerformanceInsightsMetricsDetail
+-- 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.DevOpsGuru.Types.PerformanceInsightsMetricsDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricQuery
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceData
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsStat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about Performance Insights metrics.
+--
+-- Amazon RDS Performance Insights enables you to monitor and explore
+-- different dimensions of database load based on data captured from a
+-- running DB instance. DB load is measured as average active sessions.
+-- Performance Insights provides the data to API consumers as a
+-- two-dimensional time-series dataset. The time dimension provides DB load
+-- data for each time point in the queried time range. Each time point
+-- decomposes overall load in relation to the requested dimensions,
+-- measured at that time point. Examples include SQL, Wait event, User, and
+-- Host.
+--
+-- -   To learn more about Performance Insights and Amazon Aurora DB
+--     instances, go to the
+--     <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.html Amazon Aurora User Guide>.
+--
+-- -   To learn more about Performance Insights and Amazon RDS DB
+--     instances, go to the
+--     <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html Amazon RDS User Guide>.
+--
+-- /See:/ 'newPerformanceInsightsMetricsDetail' smart constructor.
+data PerformanceInsightsMetricsDetail = PerformanceInsightsMetricsDetail'
+  { -- | The name used for a specific Performance Insights metric.
+    metricDisplayName :: Prelude.Maybe Prelude.Text,
+    -- | A single query to be processed for the metric. For more information, see
+    -- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsMetricQuery.html PerformanceInsightsMetricQuery>@ @.
+    metricQuery :: Prelude.Maybe PerformanceInsightsMetricQuery,
+    -- | For more information, see
+    -- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsReferenceData.html PerformanceInsightsReferenceData>@ @.
+    referenceData :: Prelude.Maybe [PerformanceInsightsReferenceData],
+    -- | The metric statistics during the anomalous period detected by DevOps
+    -- Guru;
+    statsAtAnomaly :: Prelude.Maybe [PerformanceInsightsStat],
+    -- | Typical metric statistics that are not considered anomalous. When DevOps
+    -- Guru analyzes metrics, it compares them to @StatsAtBaseline@ to help
+    -- determine if they are anomalous.
+    statsAtBaseline :: Prelude.Maybe [PerformanceInsightsStat],
+    -- | The unit of measure for a metric. For example, a session or a process.
+    unit :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsMetricsDetail' 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:
+--
+-- 'metricDisplayName', 'performanceInsightsMetricsDetail_metricDisplayName' - The name used for a specific Performance Insights metric.
+--
+-- 'metricQuery', 'performanceInsightsMetricsDetail_metricQuery' - A single query to be processed for the metric. For more information, see
+-- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsMetricQuery.html PerformanceInsightsMetricQuery>@ @.
+--
+-- 'referenceData', 'performanceInsightsMetricsDetail_referenceData' - For more information, see
+-- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsReferenceData.html PerformanceInsightsReferenceData>@ @.
+--
+-- 'statsAtAnomaly', 'performanceInsightsMetricsDetail_statsAtAnomaly' - The metric statistics during the anomalous period detected by DevOps
+-- Guru;
+--
+-- 'statsAtBaseline', 'performanceInsightsMetricsDetail_statsAtBaseline' - Typical metric statistics that are not considered anomalous. When DevOps
+-- Guru analyzes metrics, it compares them to @StatsAtBaseline@ to help
+-- determine if they are anomalous.
+--
+-- 'unit', 'performanceInsightsMetricsDetail_unit' - The unit of measure for a metric. For example, a session or a process.
+newPerformanceInsightsMetricsDetail ::
+  PerformanceInsightsMetricsDetail
+newPerformanceInsightsMetricsDetail =
+  PerformanceInsightsMetricsDetail'
+    { metricDisplayName =
+        Prelude.Nothing,
+      metricQuery = Prelude.Nothing,
+      referenceData = Prelude.Nothing,
+      statsAtAnomaly = Prelude.Nothing,
+      statsAtBaseline = Prelude.Nothing,
+      unit = Prelude.Nothing
+    }
+
+-- | The name used for a specific Performance Insights metric.
+performanceInsightsMetricsDetail_metricDisplayName :: Lens.Lens' PerformanceInsightsMetricsDetail (Prelude.Maybe Prelude.Text)
+performanceInsightsMetricsDetail_metricDisplayName = Lens.lens (\PerformanceInsightsMetricsDetail' {metricDisplayName} -> metricDisplayName) (\s@PerformanceInsightsMetricsDetail' {} a -> s {metricDisplayName = a} :: PerformanceInsightsMetricsDetail)
+
+-- | A single query to be processed for the metric. For more information, see
+-- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsMetricQuery.html PerformanceInsightsMetricQuery>@ @.
+performanceInsightsMetricsDetail_metricQuery :: Lens.Lens' PerformanceInsightsMetricsDetail (Prelude.Maybe PerformanceInsightsMetricQuery)
+performanceInsightsMetricsDetail_metricQuery = Lens.lens (\PerformanceInsightsMetricsDetail' {metricQuery} -> metricQuery) (\s@PerformanceInsightsMetricsDetail' {} a -> s {metricQuery = a} :: PerformanceInsightsMetricsDetail)
+
+-- | For more information, see
+-- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsReferenceData.html PerformanceInsightsReferenceData>@ @.
+performanceInsightsMetricsDetail_referenceData :: Lens.Lens' PerformanceInsightsMetricsDetail (Prelude.Maybe [PerformanceInsightsReferenceData])
+performanceInsightsMetricsDetail_referenceData = Lens.lens (\PerformanceInsightsMetricsDetail' {referenceData} -> referenceData) (\s@PerformanceInsightsMetricsDetail' {} a -> s {referenceData = a} :: PerformanceInsightsMetricsDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The metric statistics during the anomalous period detected by DevOps
+-- Guru;
+performanceInsightsMetricsDetail_statsAtAnomaly :: Lens.Lens' PerformanceInsightsMetricsDetail (Prelude.Maybe [PerformanceInsightsStat])
+performanceInsightsMetricsDetail_statsAtAnomaly = Lens.lens (\PerformanceInsightsMetricsDetail' {statsAtAnomaly} -> statsAtAnomaly) (\s@PerformanceInsightsMetricsDetail' {} a -> s {statsAtAnomaly = a} :: PerformanceInsightsMetricsDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | Typical metric statistics that are not considered anomalous. When DevOps
+-- Guru analyzes metrics, it compares them to @StatsAtBaseline@ to help
+-- determine if they are anomalous.
+performanceInsightsMetricsDetail_statsAtBaseline :: Lens.Lens' PerformanceInsightsMetricsDetail (Prelude.Maybe [PerformanceInsightsStat])
+performanceInsightsMetricsDetail_statsAtBaseline = Lens.lens (\PerformanceInsightsMetricsDetail' {statsAtBaseline} -> statsAtBaseline) (\s@PerformanceInsightsMetricsDetail' {} a -> s {statsAtBaseline = a} :: PerformanceInsightsMetricsDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unit of measure for a metric. For example, a session or a process.
+performanceInsightsMetricsDetail_unit :: Lens.Lens' PerformanceInsightsMetricsDetail (Prelude.Maybe Prelude.Text)
+performanceInsightsMetricsDetail_unit = Lens.lens (\PerformanceInsightsMetricsDetail' {unit} -> unit) (\s@PerformanceInsightsMetricsDetail' {} a -> s {unit = a} :: PerformanceInsightsMetricsDetail)
+
+instance
+  Data.FromJSON
+    PerformanceInsightsMetricsDetail
+  where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsMetricsDetail"
+      ( \x ->
+          PerformanceInsightsMetricsDetail'
+            Prelude.<$> (x Data..:? "MetricDisplayName")
+            Prelude.<*> (x Data..:? "MetricQuery")
+            Prelude.<*> (x Data..:? "ReferenceData" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "StatsAtAnomaly" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "StatsAtBaseline"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Unit")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsMetricsDetail
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsMetricsDetail' {..} =
+      _salt
+        `Prelude.hashWithSalt` metricDisplayName
+        `Prelude.hashWithSalt` metricQuery
+        `Prelude.hashWithSalt` referenceData
+        `Prelude.hashWithSalt` statsAtAnomaly
+        `Prelude.hashWithSalt` statsAtBaseline
+        `Prelude.hashWithSalt` unit
+
+instance
+  Prelude.NFData
+    PerformanceInsightsMetricsDetail
+  where
+  rnf PerformanceInsightsMetricsDetail' {..} =
+    Prelude.rnf metricDisplayName
+      `Prelude.seq` Prelude.rnf metricQuery
+      `Prelude.seq` Prelude.rnf referenceData
+      `Prelude.seq` Prelude.rnf statsAtAnomaly
+      `Prelude.seq` Prelude.rnf statsAtBaseline
+      `Prelude.seq` Prelude.rnf unit
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceComparisonValues.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceComparisonValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceComparisonValues.hs
@@ -0,0 +1,114 @@
+{-# 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.DevOpsGuru.Types.PerformanceInsightsReferenceComparisonValues
+-- 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.DevOpsGuru.Types.PerformanceInsightsReferenceComparisonValues where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceMetric
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceScalar
+import qualified Amazonka.Prelude as Prelude
+
+-- | Reference scalar values and other metrics that DevOps Guru displays on a
+-- graph in its console along with the actual metrics it analyzed. Compare
+-- these reference values to your actual metrics to help you understand
+-- anomalous behavior that DevOps Guru detected.
+--
+-- /See:/ 'newPerformanceInsightsReferenceComparisonValues' smart constructor.
+data PerformanceInsightsReferenceComparisonValues = PerformanceInsightsReferenceComparisonValues'
+  { -- | A metric that DevOps Guru compares to actual metric values. This
+    -- reference metric is used to determine if an actual metric should be
+    -- considered anomalous.
+    referenceMetric :: Prelude.Maybe PerformanceInsightsReferenceMetric,
+    -- | A scalar value DevOps Guru for a metric that DevOps Guru compares to
+    -- actual metric values. This reference value is used to determine if an
+    -- actual metric value should be considered anomalous.
+    referenceScalar :: Prelude.Maybe PerformanceInsightsReferenceScalar
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsReferenceComparisonValues' 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:
+--
+-- 'referenceMetric', 'performanceInsightsReferenceComparisonValues_referenceMetric' - A metric that DevOps Guru compares to actual metric values. This
+-- reference metric is used to determine if an actual metric should be
+-- considered anomalous.
+--
+-- 'referenceScalar', 'performanceInsightsReferenceComparisonValues_referenceScalar' - A scalar value DevOps Guru for a metric that DevOps Guru compares to
+-- actual metric values. This reference value is used to determine if an
+-- actual metric value should be considered anomalous.
+newPerformanceInsightsReferenceComparisonValues ::
+  PerformanceInsightsReferenceComparisonValues
+newPerformanceInsightsReferenceComparisonValues =
+  PerformanceInsightsReferenceComparisonValues'
+    { referenceMetric =
+        Prelude.Nothing,
+      referenceScalar =
+        Prelude.Nothing
+    }
+
+-- | A metric that DevOps Guru compares to actual metric values. This
+-- reference metric is used to determine if an actual metric should be
+-- considered anomalous.
+performanceInsightsReferenceComparisonValues_referenceMetric :: Lens.Lens' PerformanceInsightsReferenceComparisonValues (Prelude.Maybe PerformanceInsightsReferenceMetric)
+performanceInsightsReferenceComparisonValues_referenceMetric = Lens.lens (\PerformanceInsightsReferenceComparisonValues' {referenceMetric} -> referenceMetric) (\s@PerformanceInsightsReferenceComparisonValues' {} a -> s {referenceMetric = a} :: PerformanceInsightsReferenceComparisonValues)
+
+-- | A scalar value DevOps Guru for a metric that DevOps Guru compares to
+-- actual metric values. This reference value is used to determine if an
+-- actual metric value should be considered anomalous.
+performanceInsightsReferenceComparisonValues_referenceScalar :: Lens.Lens' PerformanceInsightsReferenceComparisonValues (Prelude.Maybe PerformanceInsightsReferenceScalar)
+performanceInsightsReferenceComparisonValues_referenceScalar = Lens.lens (\PerformanceInsightsReferenceComparisonValues' {referenceScalar} -> referenceScalar) (\s@PerformanceInsightsReferenceComparisonValues' {} a -> s {referenceScalar = a} :: PerformanceInsightsReferenceComparisonValues)
+
+instance
+  Data.FromJSON
+    PerformanceInsightsReferenceComparisonValues
+  where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsReferenceComparisonValues"
+      ( \x ->
+          PerformanceInsightsReferenceComparisonValues'
+            Prelude.<$> (x Data..:? "ReferenceMetric")
+            Prelude.<*> (x Data..:? "ReferenceScalar")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsReferenceComparisonValues
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsReferenceComparisonValues' {..} =
+      _salt
+        `Prelude.hashWithSalt` referenceMetric
+        `Prelude.hashWithSalt` referenceScalar
+
+instance
+  Prelude.NFData
+    PerformanceInsightsReferenceComparisonValues
+  where
+  rnf PerformanceInsightsReferenceComparisonValues' {..} =
+    Prelude.rnf referenceMetric
+      `Prelude.seq` Prelude.rnf referenceScalar
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceData.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceData.hs
@@ -0,0 +1,104 @@
+{-# 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.DevOpsGuru.Types.PerformanceInsightsReferenceData
+-- 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.DevOpsGuru.Types.PerformanceInsightsReferenceData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsReferenceComparisonValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Reference data used to evaluate Performance Insights to determine if its
+-- performance is anomalous or not.
+--
+-- /See:/ 'newPerformanceInsightsReferenceData' smart constructor.
+data PerformanceInsightsReferenceData = PerformanceInsightsReferenceData'
+  { -- | The specific reference values used to evaluate the Performance Insights.
+    -- For more information, see
+    -- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsReferenceComparisonValues.html PerformanceInsightsReferenceComparisonValues>@ @.
+    comparisonValues :: Prelude.Maybe PerformanceInsightsReferenceComparisonValues,
+    -- | The name of the reference data.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsReferenceData' 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:
+--
+-- 'comparisonValues', 'performanceInsightsReferenceData_comparisonValues' - The specific reference values used to evaluate the Performance Insights.
+-- For more information, see
+-- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsReferenceComparisonValues.html PerformanceInsightsReferenceComparisonValues>@ @.
+--
+-- 'name', 'performanceInsightsReferenceData_name' - The name of the reference data.
+newPerformanceInsightsReferenceData ::
+  PerformanceInsightsReferenceData
+newPerformanceInsightsReferenceData =
+  PerformanceInsightsReferenceData'
+    { comparisonValues =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The specific reference values used to evaluate the Performance Insights.
+-- For more information, see
+-- @ @<https://docs.aws.amazon.com/devops-guru/latest/APIReference/API_PerformanceInsightsReferenceComparisonValues.html PerformanceInsightsReferenceComparisonValues>@ @.
+performanceInsightsReferenceData_comparisonValues :: Lens.Lens' PerformanceInsightsReferenceData (Prelude.Maybe PerformanceInsightsReferenceComparisonValues)
+performanceInsightsReferenceData_comparisonValues = Lens.lens (\PerformanceInsightsReferenceData' {comparisonValues} -> comparisonValues) (\s@PerformanceInsightsReferenceData' {} a -> s {comparisonValues = a} :: PerformanceInsightsReferenceData)
+
+-- | The name of the reference data.
+performanceInsightsReferenceData_name :: Lens.Lens' PerformanceInsightsReferenceData (Prelude.Maybe Prelude.Text)
+performanceInsightsReferenceData_name = Lens.lens (\PerformanceInsightsReferenceData' {name} -> name) (\s@PerformanceInsightsReferenceData' {} a -> s {name = a} :: PerformanceInsightsReferenceData)
+
+instance
+  Data.FromJSON
+    PerformanceInsightsReferenceData
+  where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsReferenceData"
+      ( \x ->
+          PerformanceInsightsReferenceData'
+            Prelude.<$> (x Data..:? "ComparisonValues")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsReferenceData
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsReferenceData' {..} =
+      _salt
+        `Prelude.hashWithSalt` comparisonValues
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    PerformanceInsightsReferenceData
+  where
+  rnf PerformanceInsightsReferenceData' {..} =
+    Prelude.rnf comparisonValues
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceMetric.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceMetric.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.DevOpsGuru.Types.PerformanceInsightsReferenceMetric
+-- 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.DevOpsGuru.Types.PerformanceInsightsReferenceMetric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.PerformanceInsightsMetricQuery
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a reference metric used to evaluate Performance
+-- Insights.
+--
+-- /See:/ 'newPerformanceInsightsReferenceMetric' smart constructor.
+data PerformanceInsightsReferenceMetric = PerformanceInsightsReferenceMetric'
+  { -- | A query to be processed on the metric.
+    metricQuery :: Prelude.Maybe PerformanceInsightsMetricQuery
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsReferenceMetric' 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:
+--
+-- 'metricQuery', 'performanceInsightsReferenceMetric_metricQuery' - A query to be processed on the metric.
+newPerformanceInsightsReferenceMetric ::
+  PerformanceInsightsReferenceMetric
+newPerformanceInsightsReferenceMetric =
+  PerformanceInsightsReferenceMetric'
+    { metricQuery =
+        Prelude.Nothing
+    }
+
+-- | A query to be processed on the metric.
+performanceInsightsReferenceMetric_metricQuery :: Lens.Lens' PerformanceInsightsReferenceMetric (Prelude.Maybe PerformanceInsightsMetricQuery)
+performanceInsightsReferenceMetric_metricQuery = Lens.lens (\PerformanceInsightsReferenceMetric' {metricQuery} -> metricQuery) (\s@PerformanceInsightsReferenceMetric' {} a -> s {metricQuery = a} :: PerformanceInsightsReferenceMetric)
+
+instance
+  Data.FromJSON
+    PerformanceInsightsReferenceMetric
+  where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsReferenceMetric"
+      ( \x ->
+          PerformanceInsightsReferenceMetric'
+            Prelude.<$> (x Data..:? "MetricQuery")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsReferenceMetric
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsReferenceMetric' {..} =
+      _salt `Prelude.hashWithSalt` metricQuery
+
+instance
+  Prelude.NFData
+    PerformanceInsightsReferenceMetric
+  where
+  rnf PerformanceInsightsReferenceMetric' {..} =
+    Prelude.rnf metricQuery
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceScalar.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceScalar.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsReferenceScalar.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.DevOpsGuru.Types.PerformanceInsightsReferenceScalar
+-- 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.DevOpsGuru.Types.PerformanceInsightsReferenceScalar 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 reference value to compare Performance Insights metrics against to
+-- determine if the metrics demonstrate anomalous behavior.
+--
+-- /See:/ 'newPerformanceInsightsReferenceScalar' smart constructor.
+data PerformanceInsightsReferenceScalar = PerformanceInsightsReferenceScalar'
+  { -- | The reference value.
+    value :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsReferenceScalar' 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:
+--
+-- 'value', 'performanceInsightsReferenceScalar_value' - The reference value.
+newPerformanceInsightsReferenceScalar ::
+  PerformanceInsightsReferenceScalar
+newPerformanceInsightsReferenceScalar =
+  PerformanceInsightsReferenceScalar'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The reference value.
+performanceInsightsReferenceScalar_value :: Lens.Lens' PerformanceInsightsReferenceScalar (Prelude.Maybe Prelude.Double)
+performanceInsightsReferenceScalar_value = Lens.lens (\PerformanceInsightsReferenceScalar' {value} -> value) (\s@PerformanceInsightsReferenceScalar' {} a -> s {value = a} :: PerformanceInsightsReferenceScalar)
+
+instance
+  Data.FromJSON
+    PerformanceInsightsReferenceScalar
+  where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsReferenceScalar"
+      ( \x ->
+          PerformanceInsightsReferenceScalar'
+            Prelude.<$> (x Data..:? "Value")
+      )
+
+instance
+  Prelude.Hashable
+    PerformanceInsightsReferenceScalar
+  where
+  hashWithSalt
+    _salt
+    PerformanceInsightsReferenceScalar' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    PerformanceInsightsReferenceScalar
+  where
+  rnf PerformanceInsightsReferenceScalar' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsStat.hs b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsStat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PerformanceInsightsStat.hs
@@ -0,0 +1,83 @@
+{-# 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.DevOpsGuru.Types.PerformanceInsightsStat
+-- 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.DevOpsGuru.Types.PerformanceInsightsStat 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 statistic in a Performance Insights collection.
+--
+-- /See:/ 'newPerformanceInsightsStat' smart constructor.
+data PerformanceInsightsStat = PerformanceInsightsStat'
+  { -- | The statistic type.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The value of the statistic.
+    value :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PerformanceInsightsStat' 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:
+--
+-- 'type'', 'performanceInsightsStat_type' - The statistic type.
+--
+-- 'value', 'performanceInsightsStat_value' - The value of the statistic.
+newPerformanceInsightsStat ::
+  PerformanceInsightsStat
+newPerformanceInsightsStat =
+  PerformanceInsightsStat'
+    { type' = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The statistic type.
+performanceInsightsStat_type :: Lens.Lens' PerformanceInsightsStat (Prelude.Maybe Prelude.Text)
+performanceInsightsStat_type = Lens.lens (\PerformanceInsightsStat' {type'} -> type') (\s@PerformanceInsightsStat' {} a -> s {type' = a} :: PerformanceInsightsStat)
+
+-- | The value of the statistic.
+performanceInsightsStat_value :: Lens.Lens' PerformanceInsightsStat (Prelude.Maybe Prelude.Double)
+performanceInsightsStat_value = Lens.lens (\PerformanceInsightsStat' {value} -> value) (\s@PerformanceInsightsStat' {} a -> s {value = a} :: PerformanceInsightsStat)
+
+instance Data.FromJSON PerformanceInsightsStat where
+  parseJSON =
+    Data.withObject
+      "PerformanceInsightsStat"
+      ( \x ->
+          PerformanceInsightsStat'
+            Prelude.<$> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable PerformanceInsightsStat where
+  hashWithSalt _salt PerformanceInsightsStat' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData PerformanceInsightsStat where
+  rnf PerformanceInsightsStat' {..} =
+    Prelude.rnf type' `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/DevOpsGuru/Types/PredictionTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/PredictionTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/PredictionTimeRange.hs
@@ -0,0 +1,90 @@
+{-# 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.DevOpsGuru.Types.PredictionTimeRange
+-- 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.DevOpsGuru.Types.PredictionTimeRange 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 time range during which anomalous behavior in a proactive anomaly or
+-- an insight is expected to occur.
+--
+-- /See:/ 'newPredictionTimeRange' smart constructor.
+data PredictionTimeRange = PredictionTimeRange'
+  { -- | The time when the behavior in a proactive insight is expected to end.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The time range during which a metric limit is expected to be exceeded.
+    -- This applies to proactive insights only.
+    startTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictionTimeRange' 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', 'predictionTimeRange_endTime' - The time when the behavior in a proactive insight is expected to end.
+--
+-- 'startTime', 'predictionTimeRange_startTime' - The time range during which a metric limit is expected to be exceeded.
+-- This applies to proactive insights only.
+newPredictionTimeRange ::
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  PredictionTimeRange
+newPredictionTimeRange pStartTime_ =
+  PredictionTimeRange'
+    { endTime = Prelude.Nothing,
+      startTime = Data._Time Lens.# pStartTime_
+    }
+
+-- | The time when the behavior in a proactive insight is expected to end.
+predictionTimeRange_endTime :: Lens.Lens' PredictionTimeRange (Prelude.Maybe Prelude.UTCTime)
+predictionTimeRange_endTime = Lens.lens (\PredictionTimeRange' {endTime} -> endTime) (\s@PredictionTimeRange' {} a -> s {endTime = a} :: PredictionTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The time range during which a metric limit is expected to be exceeded.
+-- This applies to proactive insights only.
+predictionTimeRange_startTime :: Lens.Lens' PredictionTimeRange Prelude.UTCTime
+predictionTimeRange_startTime = Lens.lens (\PredictionTimeRange' {startTime} -> startTime) (\s@PredictionTimeRange' {} a -> s {startTime = a} :: PredictionTimeRange) Prelude.. Data._Time
+
+instance Data.FromJSON PredictionTimeRange where
+  parseJSON =
+    Data.withObject
+      "PredictionTimeRange"
+      ( \x ->
+          PredictionTimeRange'
+            Prelude.<$> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..: "StartTime")
+      )
+
+instance Prelude.Hashable PredictionTimeRange where
+  hashWithSalt _salt PredictionTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData PredictionTimeRange where
+  rnf PredictionTimeRange' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/ProactiveAnomaly.hs b/gen/Amazonka/DevOpsGuru/Types/ProactiveAnomaly.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ProactiveAnomaly.hs
@@ -0,0 +1,254 @@
+{-# 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.DevOpsGuru.Types.ProactiveAnomaly
+-- 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.DevOpsGuru.Types.ProactiveAnomaly where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyResource
+import Amazonka.DevOpsGuru.Types.AnomalySeverity
+import Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+import Amazonka.DevOpsGuru.Types.AnomalySourceMetadata
+import Amazonka.DevOpsGuru.Types.AnomalyStatus
+import Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an anomaly. This object is returned by
+-- @ListAnomalies@.
+--
+-- /See:/ 'newProactiveAnomaly' smart constructor.
+data ProactiveAnomaly = ProactiveAnomaly'
+  { -- | An @AnomalyReportedTimeRange@ object that specifies the time range
+    -- between when the anomaly is opened and the time when it is closed.
+    anomalyReportedTimeRange :: Prelude.Maybe AnomalyReportedTimeRange,
+    -- | Information about a resource in which DevOps Guru detected anomalous
+    -- behavior.
+    anomalyResources :: Prelude.Maybe [AnomalyResource],
+    anomalyTimeRange :: Prelude.Maybe AnomalyTimeRange,
+    -- | The ID of the insight that contains this anomaly. An insight is composed
+    -- of related anomalies.
+    associatedInsightId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a proactive anomaly.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A threshold that was exceeded by behavior in analyzed resources.
+    -- Exceeding this threshold is related to the anomalous behavior that
+    -- generated this anomaly.
+    limit :: Prelude.Maybe Prelude.Double,
+    predictionTimeRange :: Prelude.Maybe PredictionTimeRange,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The severity of the anomaly. The severity of anomalies that generate an
+    -- insight determine that insight\'s severity. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe AnomalySeverity,
+    -- | Details about the source of the analyzed operational data that triggered
+    -- the anomaly. The one supported source is Amazon CloudWatch metrics.
+    sourceDetails :: Prelude.Maybe AnomalySourceDetails,
+    -- | The metadata for the anomaly.
+    sourceMetadata :: Prelude.Maybe AnomalySourceMetadata,
+    -- | The status of a proactive anomaly.
+    status :: Prelude.Maybe AnomalyStatus,
+    -- | The time of the anomaly\'s most recent update.
+    updateTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProactiveAnomaly' 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:
+--
+-- 'anomalyReportedTimeRange', 'proactiveAnomaly_anomalyReportedTimeRange' - An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+--
+-- 'anomalyResources', 'proactiveAnomaly_anomalyResources' - Information about a resource in which DevOps Guru detected anomalous
+-- behavior.
+--
+-- 'anomalyTimeRange', 'proactiveAnomaly_anomalyTimeRange' - Undocumented member.
+--
+-- 'associatedInsightId', 'proactiveAnomaly_associatedInsightId' - The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+--
+-- 'id', 'proactiveAnomaly_id' - The ID of a proactive anomaly.
+--
+-- 'limit', 'proactiveAnomaly_limit' - A threshold that was exceeded by behavior in analyzed resources.
+-- Exceeding this threshold is related to the anomalous behavior that
+-- generated this anomaly.
+--
+-- 'predictionTimeRange', 'proactiveAnomaly_predictionTimeRange' - Undocumented member.
+--
+-- 'resourceCollection', 'proactiveAnomaly_resourceCollection' - Undocumented member.
+--
+-- 'severity', 'proactiveAnomaly_severity' - The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'sourceDetails', 'proactiveAnomaly_sourceDetails' - Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+--
+-- 'sourceMetadata', 'proactiveAnomaly_sourceMetadata' - The metadata for the anomaly.
+--
+-- 'status', 'proactiveAnomaly_status' - The status of a proactive anomaly.
+--
+-- 'updateTime', 'proactiveAnomaly_updateTime' - The time of the anomaly\'s most recent update.
+newProactiveAnomaly ::
+  ProactiveAnomaly
+newProactiveAnomaly =
+  ProactiveAnomaly'
+    { anomalyReportedTimeRange =
+        Prelude.Nothing,
+      anomalyResources = Prelude.Nothing,
+      anomalyTimeRange = Prelude.Nothing,
+      associatedInsightId = Prelude.Nothing,
+      id = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      predictionTimeRange = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      sourceDetails = Prelude.Nothing,
+      sourceMetadata = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updateTime = Prelude.Nothing
+    }
+
+-- | An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+proactiveAnomaly_anomalyReportedTimeRange :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe AnomalyReportedTimeRange)
+proactiveAnomaly_anomalyReportedTimeRange = Lens.lens (\ProactiveAnomaly' {anomalyReportedTimeRange} -> anomalyReportedTimeRange) (\s@ProactiveAnomaly' {} a -> s {anomalyReportedTimeRange = a} :: ProactiveAnomaly)
+
+-- | Information about a resource in which DevOps Guru detected anomalous
+-- behavior.
+proactiveAnomaly_anomalyResources :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe [AnomalyResource])
+proactiveAnomaly_anomalyResources = Lens.lens (\ProactiveAnomaly' {anomalyResources} -> anomalyResources) (\s@ProactiveAnomaly' {} a -> s {anomalyResources = a} :: ProactiveAnomaly) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+proactiveAnomaly_anomalyTimeRange :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe AnomalyTimeRange)
+proactiveAnomaly_anomalyTimeRange = Lens.lens (\ProactiveAnomaly' {anomalyTimeRange} -> anomalyTimeRange) (\s@ProactiveAnomaly' {} a -> s {anomalyTimeRange = a} :: ProactiveAnomaly)
+
+-- | The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+proactiveAnomaly_associatedInsightId :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe Prelude.Text)
+proactiveAnomaly_associatedInsightId = Lens.lens (\ProactiveAnomaly' {associatedInsightId} -> associatedInsightId) (\s@ProactiveAnomaly' {} a -> s {associatedInsightId = a} :: ProactiveAnomaly)
+
+-- | The ID of a proactive anomaly.
+proactiveAnomaly_id :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe Prelude.Text)
+proactiveAnomaly_id = Lens.lens (\ProactiveAnomaly' {id} -> id) (\s@ProactiveAnomaly' {} a -> s {id = a} :: ProactiveAnomaly)
+
+-- | A threshold that was exceeded by behavior in analyzed resources.
+-- Exceeding this threshold is related to the anomalous behavior that
+-- generated this anomaly.
+proactiveAnomaly_limit :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe Prelude.Double)
+proactiveAnomaly_limit = Lens.lens (\ProactiveAnomaly' {limit} -> limit) (\s@ProactiveAnomaly' {} a -> s {limit = a} :: ProactiveAnomaly)
+
+-- | Undocumented member.
+proactiveAnomaly_predictionTimeRange :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe PredictionTimeRange)
+proactiveAnomaly_predictionTimeRange = Lens.lens (\ProactiveAnomaly' {predictionTimeRange} -> predictionTimeRange) (\s@ProactiveAnomaly' {} a -> s {predictionTimeRange = a} :: ProactiveAnomaly)
+
+-- | Undocumented member.
+proactiveAnomaly_resourceCollection :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe ResourceCollection)
+proactiveAnomaly_resourceCollection = Lens.lens (\ProactiveAnomaly' {resourceCollection} -> resourceCollection) (\s@ProactiveAnomaly' {} a -> s {resourceCollection = a} :: ProactiveAnomaly)
+
+-- | The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+proactiveAnomaly_severity :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe AnomalySeverity)
+proactiveAnomaly_severity = Lens.lens (\ProactiveAnomaly' {severity} -> severity) (\s@ProactiveAnomaly' {} a -> s {severity = a} :: ProactiveAnomaly)
+
+-- | Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+proactiveAnomaly_sourceDetails :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe AnomalySourceDetails)
+proactiveAnomaly_sourceDetails = Lens.lens (\ProactiveAnomaly' {sourceDetails} -> sourceDetails) (\s@ProactiveAnomaly' {} a -> s {sourceDetails = a} :: ProactiveAnomaly)
+
+-- | The metadata for the anomaly.
+proactiveAnomaly_sourceMetadata :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe AnomalySourceMetadata)
+proactiveAnomaly_sourceMetadata = Lens.lens (\ProactiveAnomaly' {sourceMetadata} -> sourceMetadata) (\s@ProactiveAnomaly' {} a -> s {sourceMetadata = a} :: ProactiveAnomaly)
+
+-- | The status of a proactive anomaly.
+proactiveAnomaly_status :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe AnomalyStatus)
+proactiveAnomaly_status = Lens.lens (\ProactiveAnomaly' {status} -> status) (\s@ProactiveAnomaly' {} a -> s {status = a} :: ProactiveAnomaly)
+
+-- | The time of the anomaly\'s most recent update.
+proactiveAnomaly_updateTime :: Lens.Lens' ProactiveAnomaly (Prelude.Maybe Prelude.UTCTime)
+proactiveAnomaly_updateTime = Lens.lens (\ProactiveAnomaly' {updateTime} -> updateTime) (\s@ProactiveAnomaly' {} a -> s {updateTime = a} :: ProactiveAnomaly) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ProactiveAnomaly where
+  parseJSON =
+    Data.withObject
+      "ProactiveAnomaly"
+      ( \x ->
+          ProactiveAnomaly'
+            Prelude.<$> (x Data..:? "AnomalyReportedTimeRange")
+            Prelude.<*> ( x
+                            Data..:? "AnomalyResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "AnomalyTimeRange")
+            Prelude.<*> (x Data..:? "AssociatedInsightId")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Limit")
+            Prelude.<*> (x Data..:? "PredictionTimeRange")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "SourceDetails")
+            Prelude.<*> (x Data..:? "SourceMetadata")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UpdateTime")
+      )
+
+instance Prelude.Hashable ProactiveAnomaly where
+  hashWithSalt _salt ProactiveAnomaly' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyReportedTimeRange
+      `Prelude.hashWithSalt` anomalyResources
+      `Prelude.hashWithSalt` anomalyTimeRange
+      `Prelude.hashWithSalt` associatedInsightId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` predictionTimeRange
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` sourceDetails
+      `Prelude.hashWithSalt` sourceMetadata
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData ProactiveAnomaly where
+  rnf ProactiveAnomaly' {..} =
+    Prelude.rnf anomalyReportedTimeRange
+      `Prelude.seq` Prelude.rnf anomalyResources
+      `Prelude.seq` Prelude.rnf anomalyTimeRange
+      `Prelude.seq` Prelude.rnf associatedInsightId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf predictionTimeRange
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf sourceDetails
+      `Prelude.seq` Prelude.rnf sourceMetadata
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/ProactiveAnomalySummary.hs b/gen/Amazonka/DevOpsGuru/Types/ProactiveAnomalySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ProactiveAnomalySummary.hs
@@ -0,0 +1,254 @@
+{-# 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.DevOpsGuru.Types.ProactiveAnomalySummary
+-- 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.DevOpsGuru.Types.ProactiveAnomalySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyResource
+import Amazonka.DevOpsGuru.Types.AnomalySeverity
+import Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+import Amazonka.DevOpsGuru.Types.AnomalySourceMetadata
+import Amazonka.DevOpsGuru.Types.AnomalyStatus
+import Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a proactive anomaly. This object is returned by
+-- @DescribeAnomaly.@
+--
+-- /See:/ 'newProactiveAnomalySummary' smart constructor.
+data ProactiveAnomalySummary = ProactiveAnomalySummary'
+  { -- | An @AnomalyReportedTimeRange@ object that specifies the time range
+    -- between when the anomaly is opened and the time when it is closed.
+    anomalyReportedTimeRange :: Prelude.Maybe AnomalyReportedTimeRange,
+    -- | Information about a resource in which DevOps Guru detected anomalous
+    -- behavior.
+    anomalyResources :: Prelude.Maybe [AnomalyResource],
+    anomalyTimeRange :: Prelude.Maybe AnomalyTimeRange,
+    -- | The ID of the insight that contains this anomaly. An insight is composed
+    -- of related anomalies.
+    associatedInsightId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the anomaly.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A threshold that was exceeded by behavior in analyzed resources.
+    -- Exceeding this threshold is related to the anomalous behavior that
+    -- generated this anomaly.
+    limit :: Prelude.Maybe Prelude.Double,
+    predictionTimeRange :: Prelude.Maybe PredictionTimeRange,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The severity of the anomaly. The severity of anomalies that generate an
+    -- insight determine that insight\'s severity. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe AnomalySeverity,
+    -- | Details about the source of the analyzed operational data that triggered
+    -- the anomaly. The one supported source is Amazon CloudWatch metrics.
+    sourceDetails :: Prelude.Maybe AnomalySourceDetails,
+    -- | The metadata of the source which detects proactive anomalies.
+    sourceMetadata :: Prelude.Maybe AnomalySourceMetadata,
+    -- | The status of the anomaly.
+    status :: Prelude.Maybe AnomalyStatus,
+    -- | The time of the anomaly\'s most recent update.
+    updateTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProactiveAnomalySummary' 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:
+--
+-- 'anomalyReportedTimeRange', 'proactiveAnomalySummary_anomalyReportedTimeRange' - An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+--
+-- 'anomalyResources', 'proactiveAnomalySummary_anomalyResources' - Information about a resource in which DevOps Guru detected anomalous
+-- behavior.
+--
+-- 'anomalyTimeRange', 'proactiveAnomalySummary_anomalyTimeRange' - Undocumented member.
+--
+-- 'associatedInsightId', 'proactiveAnomalySummary_associatedInsightId' - The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+--
+-- 'id', 'proactiveAnomalySummary_id' - The ID of the anomaly.
+--
+-- 'limit', 'proactiveAnomalySummary_limit' - A threshold that was exceeded by behavior in analyzed resources.
+-- Exceeding this threshold is related to the anomalous behavior that
+-- generated this anomaly.
+--
+-- 'predictionTimeRange', 'proactiveAnomalySummary_predictionTimeRange' - Undocumented member.
+--
+-- 'resourceCollection', 'proactiveAnomalySummary_resourceCollection' - Undocumented member.
+--
+-- 'severity', 'proactiveAnomalySummary_severity' - The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'sourceDetails', 'proactiveAnomalySummary_sourceDetails' - Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+--
+-- 'sourceMetadata', 'proactiveAnomalySummary_sourceMetadata' - The metadata of the source which detects proactive anomalies.
+--
+-- 'status', 'proactiveAnomalySummary_status' - The status of the anomaly.
+--
+-- 'updateTime', 'proactiveAnomalySummary_updateTime' - The time of the anomaly\'s most recent update.
+newProactiveAnomalySummary ::
+  ProactiveAnomalySummary
+newProactiveAnomalySummary =
+  ProactiveAnomalySummary'
+    { anomalyReportedTimeRange =
+        Prelude.Nothing,
+      anomalyResources = Prelude.Nothing,
+      anomalyTimeRange = Prelude.Nothing,
+      associatedInsightId = Prelude.Nothing,
+      id = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      predictionTimeRange = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      sourceDetails = Prelude.Nothing,
+      sourceMetadata = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updateTime = Prelude.Nothing
+    }
+
+-- | An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+proactiveAnomalySummary_anomalyReportedTimeRange :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe AnomalyReportedTimeRange)
+proactiveAnomalySummary_anomalyReportedTimeRange = Lens.lens (\ProactiveAnomalySummary' {anomalyReportedTimeRange} -> anomalyReportedTimeRange) (\s@ProactiveAnomalySummary' {} a -> s {anomalyReportedTimeRange = a} :: ProactiveAnomalySummary)
+
+-- | Information about a resource in which DevOps Guru detected anomalous
+-- behavior.
+proactiveAnomalySummary_anomalyResources :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe [AnomalyResource])
+proactiveAnomalySummary_anomalyResources = Lens.lens (\ProactiveAnomalySummary' {anomalyResources} -> anomalyResources) (\s@ProactiveAnomalySummary' {} a -> s {anomalyResources = a} :: ProactiveAnomalySummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+proactiveAnomalySummary_anomalyTimeRange :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe AnomalyTimeRange)
+proactiveAnomalySummary_anomalyTimeRange = Lens.lens (\ProactiveAnomalySummary' {anomalyTimeRange} -> anomalyTimeRange) (\s@ProactiveAnomalySummary' {} a -> s {anomalyTimeRange = a} :: ProactiveAnomalySummary)
+
+-- | The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+proactiveAnomalySummary_associatedInsightId :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+proactiveAnomalySummary_associatedInsightId = Lens.lens (\ProactiveAnomalySummary' {associatedInsightId} -> associatedInsightId) (\s@ProactiveAnomalySummary' {} a -> s {associatedInsightId = a} :: ProactiveAnomalySummary)
+
+-- | The ID of the anomaly.
+proactiveAnomalySummary_id :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+proactiveAnomalySummary_id = Lens.lens (\ProactiveAnomalySummary' {id} -> id) (\s@ProactiveAnomalySummary' {} a -> s {id = a} :: ProactiveAnomalySummary)
+
+-- | A threshold that was exceeded by behavior in analyzed resources.
+-- Exceeding this threshold is related to the anomalous behavior that
+-- generated this anomaly.
+proactiveAnomalySummary_limit :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe Prelude.Double)
+proactiveAnomalySummary_limit = Lens.lens (\ProactiveAnomalySummary' {limit} -> limit) (\s@ProactiveAnomalySummary' {} a -> s {limit = a} :: ProactiveAnomalySummary)
+
+-- | Undocumented member.
+proactiveAnomalySummary_predictionTimeRange :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe PredictionTimeRange)
+proactiveAnomalySummary_predictionTimeRange = Lens.lens (\ProactiveAnomalySummary' {predictionTimeRange} -> predictionTimeRange) (\s@ProactiveAnomalySummary' {} a -> s {predictionTimeRange = a} :: ProactiveAnomalySummary)
+
+-- | Undocumented member.
+proactiveAnomalySummary_resourceCollection :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe ResourceCollection)
+proactiveAnomalySummary_resourceCollection = Lens.lens (\ProactiveAnomalySummary' {resourceCollection} -> resourceCollection) (\s@ProactiveAnomalySummary' {} a -> s {resourceCollection = a} :: ProactiveAnomalySummary)
+
+-- | The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+proactiveAnomalySummary_severity :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe AnomalySeverity)
+proactiveAnomalySummary_severity = Lens.lens (\ProactiveAnomalySummary' {severity} -> severity) (\s@ProactiveAnomalySummary' {} a -> s {severity = a} :: ProactiveAnomalySummary)
+
+-- | Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+proactiveAnomalySummary_sourceDetails :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe AnomalySourceDetails)
+proactiveAnomalySummary_sourceDetails = Lens.lens (\ProactiveAnomalySummary' {sourceDetails} -> sourceDetails) (\s@ProactiveAnomalySummary' {} a -> s {sourceDetails = a} :: ProactiveAnomalySummary)
+
+-- | The metadata of the source which detects proactive anomalies.
+proactiveAnomalySummary_sourceMetadata :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe AnomalySourceMetadata)
+proactiveAnomalySummary_sourceMetadata = Lens.lens (\ProactiveAnomalySummary' {sourceMetadata} -> sourceMetadata) (\s@ProactiveAnomalySummary' {} a -> s {sourceMetadata = a} :: ProactiveAnomalySummary)
+
+-- | The status of the anomaly.
+proactiveAnomalySummary_status :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe AnomalyStatus)
+proactiveAnomalySummary_status = Lens.lens (\ProactiveAnomalySummary' {status} -> status) (\s@ProactiveAnomalySummary' {} a -> s {status = a} :: ProactiveAnomalySummary)
+
+-- | The time of the anomaly\'s most recent update.
+proactiveAnomalySummary_updateTime :: Lens.Lens' ProactiveAnomalySummary (Prelude.Maybe Prelude.UTCTime)
+proactiveAnomalySummary_updateTime = Lens.lens (\ProactiveAnomalySummary' {updateTime} -> updateTime) (\s@ProactiveAnomalySummary' {} a -> s {updateTime = a} :: ProactiveAnomalySummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ProactiveAnomalySummary where
+  parseJSON =
+    Data.withObject
+      "ProactiveAnomalySummary"
+      ( \x ->
+          ProactiveAnomalySummary'
+            Prelude.<$> (x Data..:? "AnomalyReportedTimeRange")
+            Prelude.<*> ( x
+                            Data..:? "AnomalyResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "AnomalyTimeRange")
+            Prelude.<*> (x Data..:? "AssociatedInsightId")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Limit")
+            Prelude.<*> (x Data..:? "PredictionTimeRange")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "SourceDetails")
+            Prelude.<*> (x Data..:? "SourceMetadata")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UpdateTime")
+      )
+
+instance Prelude.Hashable ProactiveAnomalySummary where
+  hashWithSalt _salt ProactiveAnomalySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyReportedTimeRange
+      `Prelude.hashWithSalt` anomalyResources
+      `Prelude.hashWithSalt` anomalyTimeRange
+      `Prelude.hashWithSalt` associatedInsightId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` predictionTimeRange
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` sourceDetails
+      `Prelude.hashWithSalt` sourceMetadata
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData ProactiveAnomalySummary where
+  rnf ProactiveAnomalySummary' {..} =
+    Prelude.rnf anomalyReportedTimeRange
+      `Prelude.seq` Prelude.rnf anomalyResources
+      `Prelude.seq` Prelude.rnf anomalyTimeRange
+      `Prelude.seq` Prelude.rnf associatedInsightId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf predictionTimeRange
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf sourceDetails
+      `Prelude.seq` Prelude.rnf sourceMetadata
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/DevOpsGuru/Types/ProactiveInsight.hs b/gen/Amazonka/DevOpsGuru/Types/ProactiveInsight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ProactiveInsight.hs
@@ -0,0 +1,183 @@
+{-# 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.DevOpsGuru.Types.ProactiveInsight
+-- 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.DevOpsGuru.Types.ProactiveInsight where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a proactive insight. This object is returned by
+-- @ListInsights@.
+--
+-- /See:/ 'newProactiveInsight' smart constructor.
+data ProactiveInsight = ProactiveInsight'
+  { -- | Describes the proactive insight.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the proactive insight.
+    id :: Prelude.Maybe Prelude.Text,
+    insightTimeRange :: Prelude.Maybe InsightTimeRange,
+    -- | The name of the proactive insight.
+    name :: Prelude.Maybe Prelude.Text,
+    predictionTimeRange :: Prelude.Maybe PredictionTimeRange,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The severity of the insight. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe InsightSeverity,
+    -- | The ID of the Amazon Web Services System Manager OpsItem created for
+    -- this insight. You must enable the creation of OpstItems insights before
+    -- they are created for each insight.
+    ssmOpsItemId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the proactive insight.
+    status :: Prelude.Maybe InsightStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProactiveInsight' 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:
+--
+-- 'description', 'proactiveInsight_description' - Describes the proactive insight.
+--
+-- 'id', 'proactiveInsight_id' - The ID of the proactive insight.
+--
+-- 'insightTimeRange', 'proactiveInsight_insightTimeRange' - Undocumented member.
+--
+-- 'name', 'proactiveInsight_name' - The name of the proactive insight.
+--
+-- 'predictionTimeRange', 'proactiveInsight_predictionTimeRange' - Undocumented member.
+--
+-- 'resourceCollection', 'proactiveInsight_resourceCollection' - Undocumented member.
+--
+-- 'severity', 'proactiveInsight_severity' - The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'ssmOpsItemId', 'proactiveInsight_ssmOpsItemId' - The ID of the Amazon Web Services System Manager OpsItem created for
+-- this insight. You must enable the creation of OpstItems insights before
+-- they are created for each insight.
+--
+-- 'status', 'proactiveInsight_status' - The status of the proactive insight.
+newProactiveInsight ::
+  ProactiveInsight
+newProactiveInsight =
+  ProactiveInsight'
+    { description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      insightTimeRange = Prelude.Nothing,
+      name = Prelude.Nothing,
+      predictionTimeRange = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      ssmOpsItemId = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Describes the proactive insight.
+proactiveInsight_description :: Lens.Lens' ProactiveInsight (Prelude.Maybe Prelude.Text)
+proactiveInsight_description = Lens.lens (\ProactiveInsight' {description} -> description) (\s@ProactiveInsight' {} a -> s {description = a} :: ProactiveInsight)
+
+-- | The ID of the proactive insight.
+proactiveInsight_id :: Lens.Lens' ProactiveInsight (Prelude.Maybe Prelude.Text)
+proactiveInsight_id = Lens.lens (\ProactiveInsight' {id} -> id) (\s@ProactiveInsight' {} a -> s {id = a} :: ProactiveInsight)
+
+-- | Undocumented member.
+proactiveInsight_insightTimeRange :: Lens.Lens' ProactiveInsight (Prelude.Maybe InsightTimeRange)
+proactiveInsight_insightTimeRange = Lens.lens (\ProactiveInsight' {insightTimeRange} -> insightTimeRange) (\s@ProactiveInsight' {} a -> s {insightTimeRange = a} :: ProactiveInsight)
+
+-- | The name of the proactive insight.
+proactiveInsight_name :: Lens.Lens' ProactiveInsight (Prelude.Maybe Prelude.Text)
+proactiveInsight_name = Lens.lens (\ProactiveInsight' {name} -> name) (\s@ProactiveInsight' {} a -> s {name = a} :: ProactiveInsight)
+
+-- | Undocumented member.
+proactiveInsight_predictionTimeRange :: Lens.Lens' ProactiveInsight (Prelude.Maybe PredictionTimeRange)
+proactiveInsight_predictionTimeRange = Lens.lens (\ProactiveInsight' {predictionTimeRange} -> predictionTimeRange) (\s@ProactiveInsight' {} a -> s {predictionTimeRange = a} :: ProactiveInsight)
+
+-- | Undocumented member.
+proactiveInsight_resourceCollection :: Lens.Lens' ProactiveInsight (Prelude.Maybe ResourceCollection)
+proactiveInsight_resourceCollection = Lens.lens (\ProactiveInsight' {resourceCollection} -> resourceCollection) (\s@ProactiveInsight' {} a -> s {resourceCollection = a} :: ProactiveInsight)
+
+-- | The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+proactiveInsight_severity :: Lens.Lens' ProactiveInsight (Prelude.Maybe InsightSeverity)
+proactiveInsight_severity = Lens.lens (\ProactiveInsight' {severity} -> severity) (\s@ProactiveInsight' {} a -> s {severity = a} :: ProactiveInsight)
+
+-- | The ID of the Amazon Web Services System Manager OpsItem created for
+-- this insight. You must enable the creation of OpstItems insights before
+-- they are created for each insight.
+proactiveInsight_ssmOpsItemId :: Lens.Lens' ProactiveInsight (Prelude.Maybe Prelude.Text)
+proactiveInsight_ssmOpsItemId = Lens.lens (\ProactiveInsight' {ssmOpsItemId} -> ssmOpsItemId) (\s@ProactiveInsight' {} a -> s {ssmOpsItemId = a} :: ProactiveInsight)
+
+-- | The status of the proactive insight.
+proactiveInsight_status :: Lens.Lens' ProactiveInsight (Prelude.Maybe InsightStatus)
+proactiveInsight_status = Lens.lens (\ProactiveInsight' {status} -> status) (\s@ProactiveInsight' {} a -> s {status = a} :: ProactiveInsight)
+
+instance Data.FromJSON ProactiveInsight where
+  parseJSON =
+    Data.withObject
+      "ProactiveInsight"
+      ( \x ->
+          ProactiveInsight'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InsightTimeRange")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "PredictionTimeRange")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "SsmOpsItemId")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ProactiveInsight where
+  hashWithSalt _salt ProactiveInsight' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` insightTimeRange
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` predictionTimeRange
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` ssmOpsItemId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ProactiveInsight where
+  rnf ProactiveInsight' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf insightTimeRange
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf predictionTimeRange
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf ssmOpsItemId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DevOpsGuru/Types/ProactiveInsightSummary.hs b/gen/Amazonka/DevOpsGuru/Types/ProactiveInsightSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ProactiveInsightSummary.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.DevOpsGuru.Types.ProactiveInsightSummary
+-- 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.DevOpsGuru.Types.ProactiveInsightSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a proactive insight. This object is returned by
+-- @DescribeInsight.@
+--
+-- /See:/ 'newProactiveInsightSummary' smart constructor.
+data ProactiveInsightSummary = ProactiveInsightSummary'
+  { -- | The Amazon Resource Names (ARNs) of the Amazon Web Services resources
+    -- that generated this insight.
+    associatedResourceArns :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the proactive insight.
+    id :: Prelude.Maybe Prelude.Text,
+    insightTimeRange :: Prelude.Maybe InsightTimeRange,
+    -- | The name of the proactive insight.
+    name :: Prelude.Maybe Prelude.Text,
+    predictionTimeRange :: Prelude.Maybe PredictionTimeRange,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | A collection of the names of Amazon Web Services services.
+    serviceCollection :: Prelude.Maybe ServiceCollection,
+    -- | The severity of the insight. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe InsightSeverity,
+    -- | The status of the proactive insight.
+    status :: Prelude.Maybe InsightStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProactiveInsightSummary' 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:
+--
+-- 'associatedResourceArns', 'proactiveInsightSummary_associatedResourceArns' - The Amazon Resource Names (ARNs) of the Amazon Web Services resources
+-- that generated this insight.
+--
+-- 'id', 'proactiveInsightSummary_id' - The ID of the proactive insight.
+--
+-- 'insightTimeRange', 'proactiveInsightSummary_insightTimeRange' - Undocumented member.
+--
+-- 'name', 'proactiveInsightSummary_name' - The name of the proactive insight.
+--
+-- 'predictionTimeRange', 'proactiveInsightSummary_predictionTimeRange' - Undocumented member.
+--
+-- 'resourceCollection', 'proactiveInsightSummary_resourceCollection' - Undocumented member.
+--
+-- 'serviceCollection', 'proactiveInsightSummary_serviceCollection' - A collection of the names of Amazon Web Services services.
+--
+-- 'severity', 'proactiveInsightSummary_severity' - The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'status', 'proactiveInsightSummary_status' - The status of the proactive insight.
+newProactiveInsightSummary ::
+  ProactiveInsightSummary
+newProactiveInsightSummary =
+  ProactiveInsightSummary'
+    { associatedResourceArns =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      insightTimeRange = Prelude.Nothing,
+      name = Prelude.Nothing,
+      predictionTimeRange = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      serviceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Names (ARNs) of the Amazon Web Services resources
+-- that generated this insight.
+proactiveInsightSummary_associatedResourceArns :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe [Prelude.Text])
+proactiveInsightSummary_associatedResourceArns = Lens.lens (\ProactiveInsightSummary' {associatedResourceArns} -> associatedResourceArns) (\s@ProactiveInsightSummary' {} a -> s {associatedResourceArns = a} :: ProactiveInsightSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the proactive insight.
+proactiveInsightSummary_id :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe Prelude.Text)
+proactiveInsightSummary_id = Lens.lens (\ProactiveInsightSummary' {id} -> id) (\s@ProactiveInsightSummary' {} a -> s {id = a} :: ProactiveInsightSummary)
+
+-- | Undocumented member.
+proactiveInsightSummary_insightTimeRange :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe InsightTimeRange)
+proactiveInsightSummary_insightTimeRange = Lens.lens (\ProactiveInsightSummary' {insightTimeRange} -> insightTimeRange) (\s@ProactiveInsightSummary' {} a -> s {insightTimeRange = a} :: ProactiveInsightSummary)
+
+-- | The name of the proactive insight.
+proactiveInsightSummary_name :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe Prelude.Text)
+proactiveInsightSummary_name = Lens.lens (\ProactiveInsightSummary' {name} -> name) (\s@ProactiveInsightSummary' {} a -> s {name = a} :: ProactiveInsightSummary)
+
+-- | Undocumented member.
+proactiveInsightSummary_predictionTimeRange :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe PredictionTimeRange)
+proactiveInsightSummary_predictionTimeRange = Lens.lens (\ProactiveInsightSummary' {predictionTimeRange} -> predictionTimeRange) (\s@ProactiveInsightSummary' {} a -> s {predictionTimeRange = a} :: ProactiveInsightSummary)
+
+-- | Undocumented member.
+proactiveInsightSummary_resourceCollection :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe ResourceCollection)
+proactiveInsightSummary_resourceCollection = Lens.lens (\ProactiveInsightSummary' {resourceCollection} -> resourceCollection) (\s@ProactiveInsightSummary' {} a -> s {resourceCollection = a} :: ProactiveInsightSummary)
+
+-- | A collection of the names of Amazon Web Services services.
+proactiveInsightSummary_serviceCollection :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe ServiceCollection)
+proactiveInsightSummary_serviceCollection = Lens.lens (\ProactiveInsightSummary' {serviceCollection} -> serviceCollection) (\s@ProactiveInsightSummary' {} a -> s {serviceCollection = a} :: ProactiveInsightSummary)
+
+-- | The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+proactiveInsightSummary_severity :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe InsightSeverity)
+proactiveInsightSummary_severity = Lens.lens (\ProactiveInsightSummary' {severity} -> severity) (\s@ProactiveInsightSummary' {} a -> s {severity = a} :: ProactiveInsightSummary)
+
+-- | The status of the proactive insight.
+proactiveInsightSummary_status :: Lens.Lens' ProactiveInsightSummary (Prelude.Maybe InsightStatus)
+proactiveInsightSummary_status = Lens.lens (\ProactiveInsightSummary' {status} -> status) (\s@ProactiveInsightSummary' {} a -> s {status = a} :: ProactiveInsightSummary)
+
+instance Data.FromJSON ProactiveInsightSummary where
+  parseJSON =
+    Data.withObject
+      "ProactiveInsightSummary"
+      ( \x ->
+          ProactiveInsightSummary'
+            Prelude.<$> ( x
+                            Data..:? "AssociatedResourceArns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InsightTimeRange")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "PredictionTimeRange")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "ServiceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ProactiveInsightSummary where
+  hashWithSalt _salt ProactiveInsightSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedResourceArns
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` insightTimeRange
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` predictionTimeRange
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` serviceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ProactiveInsightSummary where
+  rnf ProactiveInsightSummary' {..} =
+    Prelude.rnf associatedResourceArns
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf insightTimeRange
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf predictionTimeRange
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf serviceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DevOpsGuru/Types/ProactiveOrganizationInsightSummary.hs b/gen/Amazonka/DevOpsGuru/Types/ProactiveOrganizationInsightSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ProactiveOrganizationInsightSummary.hs
@@ -0,0 +1,204 @@
+{-# 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.DevOpsGuru.Types.ProactiveOrganizationInsightSummary
+-- 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.DevOpsGuru.Types.ProactiveOrganizationInsightSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.PredictionTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a proactive insight. This object is returned by
+-- @DescribeInsight@.
+--
+-- /See:/ 'newProactiveOrganizationInsightSummary' smart constructor.
+data ProactiveOrganizationInsightSummary = ProactiveOrganizationInsightSummary'
+  { -- | The ID of the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the insight summary.
+    id :: Prelude.Maybe Prelude.Text,
+    insightTimeRange :: Prelude.Maybe InsightTimeRange,
+    -- | The name of the insight summary.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the organizational unit.
+    organizationalUnitId :: Prelude.Maybe Prelude.Text,
+    predictionTimeRange :: Prelude.Maybe PredictionTimeRange,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    serviceCollection :: Prelude.Maybe ServiceCollection,
+    -- | An array of severity values used to search for insights. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe InsightSeverity,
+    -- | An array of status values used to search for insights.
+    status :: Prelude.Maybe InsightStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProactiveOrganizationInsightSummary' 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:
+--
+-- 'accountId', 'proactiveOrganizationInsightSummary_accountId' - The ID of the Amazon Web Services account.
+--
+-- 'id', 'proactiveOrganizationInsightSummary_id' - The ID of the insight summary.
+--
+-- 'insightTimeRange', 'proactiveOrganizationInsightSummary_insightTimeRange' - Undocumented member.
+--
+-- 'name', 'proactiveOrganizationInsightSummary_name' - The name of the insight summary.
+--
+-- 'organizationalUnitId', 'proactiveOrganizationInsightSummary_organizationalUnitId' - The ID of the organizational unit.
+--
+-- 'predictionTimeRange', 'proactiveOrganizationInsightSummary_predictionTimeRange' - Undocumented member.
+--
+-- 'resourceCollection', 'proactiveOrganizationInsightSummary_resourceCollection' - Undocumented member.
+--
+-- 'serviceCollection', 'proactiveOrganizationInsightSummary_serviceCollection' - Undocumented member.
+--
+-- 'severity', 'proactiveOrganizationInsightSummary_severity' - An array of severity values used to search for insights. For more
+-- information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'status', 'proactiveOrganizationInsightSummary_status' - An array of status values used to search for insights.
+newProactiveOrganizationInsightSummary ::
+  ProactiveOrganizationInsightSummary
+newProactiveOrganizationInsightSummary =
+  ProactiveOrganizationInsightSummary'
+    { accountId =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      insightTimeRange = Prelude.Nothing,
+      name = Prelude.Nothing,
+      organizationalUnitId = Prelude.Nothing,
+      predictionTimeRange = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      serviceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The ID of the Amazon Web Services account.
+proactiveOrganizationInsightSummary_accountId :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+proactiveOrganizationInsightSummary_accountId = Lens.lens (\ProactiveOrganizationInsightSummary' {accountId} -> accountId) (\s@ProactiveOrganizationInsightSummary' {} a -> s {accountId = a} :: ProactiveOrganizationInsightSummary)
+
+-- | The ID of the insight summary.
+proactiveOrganizationInsightSummary_id :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+proactiveOrganizationInsightSummary_id = Lens.lens (\ProactiveOrganizationInsightSummary' {id} -> id) (\s@ProactiveOrganizationInsightSummary' {} a -> s {id = a} :: ProactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+proactiveOrganizationInsightSummary_insightTimeRange :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe InsightTimeRange)
+proactiveOrganizationInsightSummary_insightTimeRange = Lens.lens (\ProactiveOrganizationInsightSummary' {insightTimeRange} -> insightTimeRange) (\s@ProactiveOrganizationInsightSummary' {} a -> s {insightTimeRange = a} :: ProactiveOrganizationInsightSummary)
+
+-- | The name of the insight summary.
+proactiveOrganizationInsightSummary_name :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+proactiveOrganizationInsightSummary_name = Lens.lens (\ProactiveOrganizationInsightSummary' {name} -> name) (\s@ProactiveOrganizationInsightSummary' {} a -> s {name = a} :: ProactiveOrganizationInsightSummary)
+
+-- | The ID of the organizational unit.
+proactiveOrganizationInsightSummary_organizationalUnitId :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+proactiveOrganizationInsightSummary_organizationalUnitId = Lens.lens (\ProactiveOrganizationInsightSummary' {organizationalUnitId} -> organizationalUnitId) (\s@ProactiveOrganizationInsightSummary' {} a -> s {organizationalUnitId = a} :: ProactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+proactiveOrganizationInsightSummary_predictionTimeRange :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe PredictionTimeRange)
+proactiveOrganizationInsightSummary_predictionTimeRange = Lens.lens (\ProactiveOrganizationInsightSummary' {predictionTimeRange} -> predictionTimeRange) (\s@ProactiveOrganizationInsightSummary' {} a -> s {predictionTimeRange = a} :: ProactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+proactiveOrganizationInsightSummary_resourceCollection :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe ResourceCollection)
+proactiveOrganizationInsightSummary_resourceCollection = Lens.lens (\ProactiveOrganizationInsightSummary' {resourceCollection} -> resourceCollection) (\s@ProactiveOrganizationInsightSummary' {} a -> s {resourceCollection = a} :: ProactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+proactiveOrganizationInsightSummary_serviceCollection :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe ServiceCollection)
+proactiveOrganizationInsightSummary_serviceCollection = Lens.lens (\ProactiveOrganizationInsightSummary' {serviceCollection} -> serviceCollection) (\s@ProactiveOrganizationInsightSummary' {} a -> s {serviceCollection = a} :: ProactiveOrganizationInsightSummary)
+
+-- | An array of severity values used to search for insights. For more
+-- information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+proactiveOrganizationInsightSummary_severity :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe InsightSeverity)
+proactiveOrganizationInsightSummary_severity = Lens.lens (\ProactiveOrganizationInsightSummary' {severity} -> severity) (\s@ProactiveOrganizationInsightSummary' {} a -> s {severity = a} :: ProactiveOrganizationInsightSummary)
+
+-- | An array of status values used to search for insights.
+proactiveOrganizationInsightSummary_status :: Lens.Lens' ProactiveOrganizationInsightSummary (Prelude.Maybe InsightStatus)
+proactiveOrganizationInsightSummary_status = Lens.lens (\ProactiveOrganizationInsightSummary' {status} -> status) (\s@ProactiveOrganizationInsightSummary' {} a -> s {status = a} :: ProactiveOrganizationInsightSummary)
+
+instance
+  Data.FromJSON
+    ProactiveOrganizationInsightSummary
+  where
+  parseJSON =
+    Data.withObject
+      "ProactiveOrganizationInsightSummary"
+      ( \x ->
+          ProactiveOrganizationInsightSummary'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InsightTimeRange")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "OrganizationalUnitId")
+            Prelude.<*> (x Data..:? "PredictionTimeRange")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "ServiceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance
+  Prelude.Hashable
+    ProactiveOrganizationInsightSummary
+  where
+  hashWithSalt
+    _salt
+    ProactiveOrganizationInsightSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` accountId
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` insightTimeRange
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` organizationalUnitId
+        `Prelude.hashWithSalt` predictionTimeRange
+        `Prelude.hashWithSalt` resourceCollection
+        `Prelude.hashWithSalt` serviceCollection
+        `Prelude.hashWithSalt` severity
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    ProactiveOrganizationInsightSummary
+  where
+  rnf ProactiveOrganizationInsightSummary' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf insightTimeRange
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf organizationalUnitId
+      `Prelude.seq` Prelude.rnf predictionTimeRange
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf serviceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DevOpsGuru/Types/ReactiveAnomaly.hs b/gen/Amazonka/DevOpsGuru/Types/ReactiveAnomaly.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ReactiveAnomaly.hs
@@ -0,0 +1,266 @@
+{-# 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.DevOpsGuru.Types.ReactiveAnomaly
+-- 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.DevOpsGuru.Types.ReactiveAnomaly where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyResource
+import Amazonka.DevOpsGuru.Types.AnomalySeverity
+import Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+import Amazonka.DevOpsGuru.Types.AnomalyStatus
+import Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyType
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a reactive anomaly. This object is returned by
+-- @ListAnomalies@.
+--
+-- /See:/ 'newReactiveAnomaly' smart constructor.
+data ReactiveAnomaly = ReactiveAnomaly'
+  { -- | An @AnomalyReportedTimeRange@ object that specifies the time range
+    -- between when the anomaly is opened and the time when it is closed.
+    anomalyReportedTimeRange :: Prelude.Maybe AnomalyReportedTimeRange,
+    -- | The Amazon Web Services resources in which anomalous behavior was
+    -- detected by DevOps Guru.
+    anomalyResources :: Prelude.Maybe [AnomalyResource],
+    anomalyTimeRange :: Prelude.Maybe AnomalyTimeRange,
+    -- | The ID of the insight that contains this anomaly. An insight is composed
+    -- of related anomalies.
+    associatedInsightId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the causal anomaly that is associated with this reactive
+    -- anomaly. The ID of a \`CAUSAL\` anomaly is always \`NULL\`.
+    causalAnomalyId :: Prelude.Maybe Prelude.Text,
+    -- | A description of the reactive anomaly.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the reactive anomaly.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the reactive anomaly.
+    name :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The severity of the anomaly. The severity of anomalies that generate an
+    -- insight determine that insight\'s severity. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe AnomalySeverity,
+    -- | Details about the source of the analyzed operational data that triggered
+    -- the anomaly. The one supported source is Amazon CloudWatch metrics.
+    sourceDetails :: Prelude.Maybe AnomalySourceDetails,
+    -- | The status of the anomaly.
+    status :: Prelude.Maybe AnomalyStatus,
+    -- | The type of the reactive anomaly. It can be one of the following types.
+    --
+    -- -   @CAUSAL@ - the anomaly can cause a new insight.
+    --
+    -- -   @CONTEXTUAL@ - the anomaly contains additional information about an
+    --     insight or its causal anomaly.
+    type' :: Prelude.Maybe AnomalyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReactiveAnomaly' 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:
+--
+-- 'anomalyReportedTimeRange', 'reactiveAnomaly_anomalyReportedTimeRange' - An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+--
+-- 'anomalyResources', 'reactiveAnomaly_anomalyResources' - The Amazon Web Services resources in which anomalous behavior was
+-- detected by DevOps Guru.
+--
+-- 'anomalyTimeRange', 'reactiveAnomaly_anomalyTimeRange' - Undocumented member.
+--
+-- 'associatedInsightId', 'reactiveAnomaly_associatedInsightId' - The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+--
+-- 'causalAnomalyId', 'reactiveAnomaly_causalAnomalyId' - The ID of the causal anomaly that is associated with this reactive
+-- anomaly. The ID of a \`CAUSAL\` anomaly is always \`NULL\`.
+--
+-- 'description', 'reactiveAnomaly_description' - A description of the reactive anomaly.
+--
+-- 'id', 'reactiveAnomaly_id' - The ID of the reactive anomaly.
+--
+-- 'name', 'reactiveAnomaly_name' - The name of the reactive anomaly.
+--
+-- 'resourceCollection', 'reactiveAnomaly_resourceCollection' - Undocumented member.
+--
+-- 'severity', 'reactiveAnomaly_severity' - The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'sourceDetails', 'reactiveAnomaly_sourceDetails' - Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+--
+-- 'status', 'reactiveAnomaly_status' - The status of the anomaly.
+--
+-- 'type'', 'reactiveAnomaly_type' - The type of the reactive anomaly. It can be one of the following types.
+--
+-- -   @CAUSAL@ - the anomaly can cause a new insight.
+--
+-- -   @CONTEXTUAL@ - the anomaly contains additional information about an
+--     insight or its causal anomaly.
+newReactiveAnomaly ::
+  ReactiveAnomaly
+newReactiveAnomaly =
+  ReactiveAnomaly'
+    { anomalyReportedTimeRange =
+        Prelude.Nothing,
+      anomalyResources = Prelude.Nothing,
+      anomalyTimeRange = Prelude.Nothing,
+      associatedInsightId = Prelude.Nothing,
+      causalAnomalyId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      sourceDetails = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+reactiveAnomaly_anomalyReportedTimeRange :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe AnomalyReportedTimeRange)
+reactiveAnomaly_anomalyReportedTimeRange = Lens.lens (\ReactiveAnomaly' {anomalyReportedTimeRange} -> anomalyReportedTimeRange) (\s@ReactiveAnomaly' {} a -> s {anomalyReportedTimeRange = a} :: ReactiveAnomaly)
+
+-- | The Amazon Web Services resources in which anomalous behavior was
+-- detected by DevOps Guru.
+reactiveAnomaly_anomalyResources :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe [AnomalyResource])
+reactiveAnomaly_anomalyResources = Lens.lens (\ReactiveAnomaly' {anomalyResources} -> anomalyResources) (\s@ReactiveAnomaly' {} a -> s {anomalyResources = a} :: ReactiveAnomaly) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+reactiveAnomaly_anomalyTimeRange :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe AnomalyTimeRange)
+reactiveAnomaly_anomalyTimeRange = Lens.lens (\ReactiveAnomaly' {anomalyTimeRange} -> anomalyTimeRange) (\s@ReactiveAnomaly' {} a -> s {anomalyTimeRange = a} :: ReactiveAnomaly)
+
+-- | The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+reactiveAnomaly_associatedInsightId :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe Prelude.Text)
+reactiveAnomaly_associatedInsightId = Lens.lens (\ReactiveAnomaly' {associatedInsightId} -> associatedInsightId) (\s@ReactiveAnomaly' {} a -> s {associatedInsightId = a} :: ReactiveAnomaly)
+
+-- | The ID of the causal anomaly that is associated with this reactive
+-- anomaly. The ID of a \`CAUSAL\` anomaly is always \`NULL\`.
+reactiveAnomaly_causalAnomalyId :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe Prelude.Text)
+reactiveAnomaly_causalAnomalyId = Lens.lens (\ReactiveAnomaly' {causalAnomalyId} -> causalAnomalyId) (\s@ReactiveAnomaly' {} a -> s {causalAnomalyId = a} :: ReactiveAnomaly)
+
+-- | A description of the reactive anomaly.
+reactiveAnomaly_description :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe Prelude.Text)
+reactiveAnomaly_description = Lens.lens (\ReactiveAnomaly' {description} -> description) (\s@ReactiveAnomaly' {} a -> s {description = a} :: ReactiveAnomaly)
+
+-- | The ID of the reactive anomaly.
+reactiveAnomaly_id :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe Prelude.Text)
+reactiveAnomaly_id = Lens.lens (\ReactiveAnomaly' {id} -> id) (\s@ReactiveAnomaly' {} a -> s {id = a} :: ReactiveAnomaly)
+
+-- | The name of the reactive anomaly.
+reactiveAnomaly_name :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe Prelude.Text)
+reactiveAnomaly_name = Lens.lens (\ReactiveAnomaly' {name} -> name) (\s@ReactiveAnomaly' {} a -> s {name = a} :: ReactiveAnomaly)
+
+-- | Undocumented member.
+reactiveAnomaly_resourceCollection :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe ResourceCollection)
+reactiveAnomaly_resourceCollection = Lens.lens (\ReactiveAnomaly' {resourceCollection} -> resourceCollection) (\s@ReactiveAnomaly' {} a -> s {resourceCollection = a} :: ReactiveAnomaly)
+
+-- | The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+reactiveAnomaly_severity :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe AnomalySeverity)
+reactiveAnomaly_severity = Lens.lens (\ReactiveAnomaly' {severity} -> severity) (\s@ReactiveAnomaly' {} a -> s {severity = a} :: ReactiveAnomaly)
+
+-- | Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+reactiveAnomaly_sourceDetails :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe AnomalySourceDetails)
+reactiveAnomaly_sourceDetails = Lens.lens (\ReactiveAnomaly' {sourceDetails} -> sourceDetails) (\s@ReactiveAnomaly' {} a -> s {sourceDetails = a} :: ReactiveAnomaly)
+
+-- | The status of the anomaly.
+reactiveAnomaly_status :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe AnomalyStatus)
+reactiveAnomaly_status = Lens.lens (\ReactiveAnomaly' {status} -> status) (\s@ReactiveAnomaly' {} a -> s {status = a} :: ReactiveAnomaly)
+
+-- | The type of the reactive anomaly. It can be one of the following types.
+--
+-- -   @CAUSAL@ - the anomaly can cause a new insight.
+--
+-- -   @CONTEXTUAL@ - the anomaly contains additional information about an
+--     insight or its causal anomaly.
+reactiveAnomaly_type :: Lens.Lens' ReactiveAnomaly (Prelude.Maybe AnomalyType)
+reactiveAnomaly_type = Lens.lens (\ReactiveAnomaly' {type'} -> type') (\s@ReactiveAnomaly' {} a -> s {type' = a} :: ReactiveAnomaly)
+
+instance Data.FromJSON ReactiveAnomaly where
+  parseJSON =
+    Data.withObject
+      "ReactiveAnomaly"
+      ( \x ->
+          ReactiveAnomaly'
+            Prelude.<$> (x Data..:? "AnomalyReportedTimeRange")
+            Prelude.<*> ( x
+                            Data..:? "AnomalyResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "AnomalyTimeRange")
+            Prelude.<*> (x Data..:? "AssociatedInsightId")
+            Prelude.<*> (x Data..:? "CausalAnomalyId")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "SourceDetails")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable ReactiveAnomaly where
+  hashWithSalt _salt ReactiveAnomaly' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyReportedTimeRange
+      `Prelude.hashWithSalt` anomalyResources
+      `Prelude.hashWithSalt` anomalyTimeRange
+      `Prelude.hashWithSalt` associatedInsightId
+      `Prelude.hashWithSalt` causalAnomalyId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` sourceDetails
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ReactiveAnomaly where
+  rnf ReactiveAnomaly' {..} =
+    Prelude.rnf anomalyReportedTimeRange
+      `Prelude.seq` Prelude.rnf anomalyResources
+      `Prelude.seq` Prelude.rnf anomalyTimeRange
+      `Prelude.seq` Prelude.rnf associatedInsightId
+      `Prelude.seq` Prelude.rnf causalAnomalyId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf sourceDetails
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/ReactiveAnomalySummary.hs b/gen/Amazonka/DevOpsGuru/Types/ReactiveAnomalySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ReactiveAnomalySummary.hs
@@ -0,0 +1,266 @@
+{-# 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.DevOpsGuru.Types.ReactiveAnomalySummary
+-- 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.DevOpsGuru.Types.ReactiveAnomalySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.AnomalyReportedTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyResource
+import Amazonka.DevOpsGuru.Types.AnomalySeverity
+import Amazonka.DevOpsGuru.Types.AnomalySourceDetails
+import Amazonka.DevOpsGuru.Types.AnomalyStatus
+import Amazonka.DevOpsGuru.Types.AnomalyTimeRange
+import Amazonka.DevOpsGuru.Types.AnomalyType
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a reactive anomaly. This object is returned by
+-- @DescribeAnomaly.@
+--
+-- /See:/ 'newReactiveAnomalySummary' smart constructor.
+data ReactiveAnomalySummary = ReactiveAnomalySummary'
+  { -- | An @AnomalyReportedTimeRange@ object that specifies the time range
+    -- between when the anomaly is opened and the time when it is closed.
+    anomalyReportedTimeRange :: Prelude.Maybe AnomalyReportedTimeRange,
+    -- | The Amazon Web Services resources in which anomalous behavior was
+    -- detected by DevOps Guru.
+    anomalyResources :: Prelude.Maybe [AnomalyResource],
+    anomalyTimeRange :: Prelude.Maybe AnomalyTimeRange,
+    -- | The ID of the insight that contains this anomaly. An insight is composed
+    -- of related anomalies.
+    associatedInsightId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the causal anomaly that is associated with this reactive
+    -- anomaly. The ID of a \`CAUSAL\` anomaly is always \`NULL\`.
+    causalAnomalyId :: Prelude.Maybe Prelude.Text,
+    -- | A description of the reactive anomaly.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the reactive anomaly.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the reactive anomaly.
+    name :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The severity of the anomaly. The severity of anomalies that generate an
+    -- insight determine that insight\'s severity. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe AnomalySeverity,
+    -- | Details about the source of the analyzed operational data that triggered
+    -- the anomaly. The one supported source is Amazon CloudWatch metrics.
+    sourceDetails :: Prelude.Maybe AnomalySourceDetails,
+    -- | The status of the reactive anomaly.
+    status :: Prelude.Maybe AnomalyStatus,
+    -- | The type of the reactive anomaly. It can be one of the following types.
+    --
+    -- -   @CAUSAL@ - the anomaly can cause a new insight.
+    --
+    -- -   @CONTEXTUAL@ - the anomaly contains additional information about an
+    --     insight or its causal anomaly.
+    type' :: Prelude.Maybe AnomalyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReactiveAnomalySummary' 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:
+--
+-- 'anomalyReportedTimeRange', 'reactiveAnomalySummary_anomalyReportedTimeRange' - An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+--
+-- 'anomalyResources', 'reactiveAnomalySummary_anomalyResources' - The Amazon Web Services resources in which anomalous behavior was
+-- detected by DevOps Guru.
+--
+-- 'anomalyTimeRange', 'reactiveAnomalySummary_anomalyTimeRange' - Undocumented member.
+--
+-- 'associatedInsightId', 'reactiveAnomalySummary_associatedInsightId' - The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+--
+-- 'causalAnomalyId', 'reactiveAnomalySummary_causalAnomalyId' - The ID of the causal anomaly that is associated with this reactive
+-- anomaly. The ID of a \`CAUSAL\` anomaly is always \`NULL\`.
+--
+-- 'description', 'reactiveAnomalySummary_description' - A description of the reactive anomaly.
+--
+-- 'id', 'reactiveAnomalySummary_id' - The ID of the reactive anomaly.
+--
+-- 'name', 'reactiveAnomalySummary_name' - The name of the reactive anomaly.
+--
+-- 'resourceCollection', 'reactiveAnomalySummary_resourceCollection' - Undocumented member.
+--
+-- 'severity', 'reactiveAnomalySummary_severity' - The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'sourceDetails', 'reactiveAnomalySummary_sourceDetails' - Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+--
+-- 'status', 'reactiveAnomalySummary_status' - The status of the reactive anomaly.
+--
+-- 'type'', 'reactiveAnomalySummary_type' - The type of the reactive anomaly. It can be one of the following types.
+--
+-- -   @CAUSAL@ - the anomaly can cause a new insight.
+--
+-- -   @CONTEXTUAL@ - the anomaly contains additional information about an
+--     insight or its causal anomaly.
+newReactiveAnomalySummary ::
+  ReactiveAnomalySummary
+newReactiveAnomalySummary =
+  ReactiveAnomalySummary'
+    { anomalyReportedTimeRange =
+        Prelude.Nothing,
+      anomalyResources = Prelude.Nothing,
+      anomalyTimeRange = Prelude.Nothing,
+      associatedInsightId = Prelude.Nothing,
+      causalAnomalyId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      sourceDetails = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | An @AnomalyReportedTimeRange@ object that specifies the time range
+-- between when the anomaly is opened and the time when it is closed.
+reactiveAnomalySummary_anomalyReportedTimeRange :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe AnomalyReportedTimeRange)
+reactiveAnomalySummary_anomalyReportedTimeRange = Lens.lens (\ReactiveAnomalySummary' {anomalyReportedTimeRange} -> anomalyReportedTimeRange) (\s@ReactiveAnomalySummary' {} a -> s {anomalyReportedTimeRange = a} :: ReactiveAnomalySummary)
+
+-- | The Amazon Web Services resources in which anomalous behavior was
+-- detected by DevOps Guru.
+reactiveAnomalySummary_anomalyResources :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe [AnomalyResource])
+reactiveAnomalySummary_anomalyResources = Lens.lens (\ReactiveAnomalySummary' {anomalyResources} -> anomalyResources) (\s@ReactiveAnomalySummary' {} a -> s {anomalyResources = a} :: ReactiveAnomalySummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+reactiveAnomalySummary_anomalyTimeRange :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe AnomalyTimeRange)
+reactiveAnomalySummary_anomalyTimeRange = Lens.lens (\ReactiveAnomalySummary' {anomalyTimeRange} -> anomalyTimeRange) (\s@ReactiveAnomalySummary' {} a -> s {anomalyTimeRange = a} :: ReactiveAnomalySummary)
+
+-- | The ID of the insight that contains this anomaly. An insight is composed
+-- of related anomalies.
+reactiveAnomalySummary_associatedInsightId :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+reactiveAnomalySummary_associatedInsightId = Lens.lens (\ReactiveAnomalySummary' {associatedInsightId} -> associatedInsightId) (\s@ReactiveAnomalySummary' {} a -> s {associatedInsightId = a} :: ReactiveAnomalySummary)
+
+-- | The ID of the causal anomaly that is associated with this reactive
+-- anomaly. The ID of a \`CAUSAL\` anomaly is always \`NULL\`.
+reactiveAnomalySummary_causalAnomalyId :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+reactiveAnomalySummary_causalAnomalyId = Lens.lens (\ReactiveAnomalySummary' {causalAnomalyId} -> causalAnomalyId) (\s@ReactiveAnomalySummary' {} a -> s {causalAnomalyId = a} :: ReactiveAnomalySummary)
+
+-- | A description of the reactive anomaly.
+reactiveAnomalySummary_description :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+reactiveAnomalySummary_description = Lens.lens (\ReactiveAnomalySummary' {description} -> description) (\s@ReactiveAnomalySummary' {} a -> s {description = a} :: ReactiveAnomalySummary)
+
+-- | The ID of the reactive anomaly.
+reactiveAnomalySummary_id :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+reactiveAnomalySummary_id = Lens.lens (\ReactiveAnomalySummary' {id} -> id) (\s@ReactiveAnomalySummary' {} a -> s {id = a} :: ReactiveAnomalySummary)
+
+-- | The name of the reactive anomaly.
+reactiveAnomalySummary_name :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe Prelude.Text)
+reactiveAnomalySummary_name = Lens.lens (\ReactiveAnomalySummary' {name} -> name) (\s@ReactiveAnomalySummary' {} a -> s {name = a} :: ReactiveAnomalySummary)
+
+-- | Undocumented member.
+reactiveAnomalySummary_resourceCollection :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe ResourceCollection)
+reactiveAnomalySummary_resourceCollection = Lens.lens (\ReactiveAnomalySummary' {resourceCollection} -> resourceCollection) (\s@ReactiveAnomalySummary' {} a -> s {resourceCollection = a} :: ReactiveAnomalySummary)
+
+-- | The severity of the anomaly. The severity of anomalies that generate an
+-- insight determine that insight\'s severity. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+reactiveAnomalySummary_severity :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe AnomalySeverity)
+reactiveAnomalySummary_severity = Lens.lens (\ReactiveAnomalySummary' {severity} -> severity) (\s@ReactiveAnomalySummary' {} a -> s {severity = a} :: ReactiveAnomalySummary)
+
+-- | Details about the source of the analyzed operational data that triggered
+-- the anomaly. The one supported source is Amazon CloudWatch metrics.
+reactiveAnomalySummary_sourceDetails :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe AnomalySourceDetails)
+reactiveAnomalySummary_sourceDetails = Lens.lens (\ReactiveAnomalySummary' {sourceDetails} -> sourceDetails) (\s@ReactiveAnomalySummary' {} a -> s {sourceDetails = a} :: ReactiveAnomalySummary)
+
+-- | The status of the reactive anomaly.
+reactiveAnomalySummary_status :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe AnomalyStatus)
+reactiveAnomalySummary_status = Lens.lens (\ReactiveAnomalySummary' {status} -> status) (\s@ReactiveAnomalySummary' {} a -> s {status = a} :: ReactiveAnomalySummary)
+
+-- | The type of the reactive anomaly. It can be one of the following types.
+--
+-- -   @CAUSAL@ - the anomaly can cause a new insight.
+--
+-- -   @CONTEXTUAL@ - the anomaly contains additional information about an
+--     insight or its causal anomaly.
+reactiveAnomalySummary_type :: Lens.Lens' ReactiveAnomalySummary (Prelude.Maybe AnomalyType)
+reactiveAnomalySummary_type = Lens.lens (\ReactiveAnomalySummary' {type'} -> type') (\s@ReactiveAnomalySummary' {} a -> s {type' = a} :: ReactiveAnomalySummary)
+
+instance Data.FromJSON ReactiveAnomalySummary where
+  parseJSON =
+    Data.withObject
+      "ReactiveAnomalySummary"
+      ( \x ->
+          ReactiveAnomalySummary'
+            Prelude.<$> (x Data..:? "AnomalyReportedTimeRange")
+            Prelude.<*> ( x
+                            Data..:? "AnomalyResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "AnomalyTimeRange")
+            Prelude.<*> (x Data..:? "AssociatedInsightId")
+            Prelude.<*> (x Data..:? "CausalAnomalyId")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "SourceDetails")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable ReactiveAnomalySummary where
+  hashWithSalt _salt ReactiveAnomalySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyReportedTimeRange
+      `Prelude.hashWithSalt` anomalyResources
+      `Prelude.hashWithSalt` anomalyTimeRange
+      `Prelude.hashWithSalt` associatedInsightId
+      `Prelude.hashWithSalt` causalAnomalyId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` sourceDetails
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ReactiveAnomalySummary where
+  rnf ReactiveAnomalySummary' {..} =
+    Prelude.rnf anomalyReportedTimeRange
+      `Prelude.seq` Prelude.rnf anomalyResources
+      `Prelude.seq` Prelude.rnf anomalyTimeRange
+      `Prelude.seq` Prelude.rnf associatedInsightId
+      `Prelude.seq` Prelude.rnf causalAnomalyId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf sourceDetails
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/ReactiveInsight.hs b/gen/Amazonka/DevOpsGuru/Types/ReactiveInsight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ReactiveInsight.hs
@@ -0,0 +1,171 @@
+{-# 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.DevOpsGuru.Types.ReactiveInsight
+-- 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.DevOpsGuru.Types.ReactiveInsight where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a reactive insight. This object is returned by
+-- @ListInsights@.
+--
+-- /See:/ 'newReactiveInsight' smart constructor.
+data ReactiveInsight = ReactiveInsight'
+  { -- | Describes the reactive insight.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a reactive insight.
+    id :: Prelude.Maybe Prelude.Text,
+    insightTimeRange :: Prelude.Maybe InsightTimeRange,
+    -- | The name of a reactive insight.
+    name :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | The severity of the insight. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe InsightSeverity,
+    -- | The ID of the Amazon Web Services System Manager OpsItem created for
+    -- this insight. You must enable the creation of OpstItems insights before
+    -- they are created for each insight.
+    ssmOpsItemId :: Prelude.Maybe Prelude.Text,
+    -- | The status of a reactive insight.
+    status :: Prelude.Maybe InsightStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReactiveInsight' 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:
+--
+-- 'description', 'reactiveInsight_description' - Describes the reactive insight.
+--
+-- 'id', 'reactiveInsight_id' - The ID of a reactive insight.
+--
+-- 'insightTimeRange', 'reactiveInsight_insightTimeRange' - Undocumented member.
+--
+-- 'name', 'reactiveInsight_name' - The name of a reactive insight.
+--
+-- 'resourceCollection', 'reactiveInsight_resourceCollection' - Undocumented member.
+--
+-- 'severity', 'reactiveInsight_severity' - The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'ssmOpsItemId', 'reactiveInsight_ssmOpsItemId' - The ID of the Amazon Web Services System Manager OpsItem created for
+-- this insight. You must enable the creation of OpstItems insights before
+-- they are created for each insight.
+--
+-- 'status', 'reactiveInsight_status' - The status of a reactive insight.
+newReactiveInsight ::
+  ReactiveInsight
+newReactiveInsight =
+  ReactiveInsight'
+    { description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      insightTimeRange = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      ssmOpsItemId = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Describes the reactive insight.
+reactiveInsight_description :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
+reactiveInsight_description = Lens.lens (\ReactiveInsight' {description} -> description) (\s@ReactiveInsight' {} a -> s {description = a} :: ReactiveInsight)
+
+-- | The ID of a reactive insight.
+reactiveInsight_id :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
+reactiveInsight_id = Lens.lens (\ReactiveInsight' {id} -> id) (\s@ReactiveInsight' {} a -> s {id = a} :: ReactiveInsight)
+
+-- | Undocumented member.
+reactiveInsight_insightTimeRange :: Lens.Lens' ReactiveInsight (Prelude.Maybe InsightTimeRange)
+reactiveInsight_insightTimeRange = Lens.lens (\ReactiveInsight' {insightTimeRange} -> insightTimeRange) (\s@ReactiveInsight' {} a -> s {insightTimeRange = a} :: ReactiveInsight)
+
+-- | The name of a reactive insight.
+reactiveInsight_name :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
+reactiveInsight_name = Lens.lens (\ReactiveInsight' {name} -> name) (\s@ReactiveInsight' {} a -> s {name = a} :: ReactiveInsight)
+
+-- | Undocumented member.
+reactiveInsight_resourceCollection :: Lens.Lens' ReactiveInsight (Prelude.Maybe ResourceCollection)
+reactiveInsight_resourceCollection = Lens.lens (\ReactiveInsight' {resourceCollection} -> resourceCollection) (\s@ReactiveInsight' {} a -> s {resourceCollection = a} :: ReactiveInsight)
+
+-- | The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+reactiveInsight_severity :: Lens.Lens' ReactiveInsight (Prelude.Maybe InsightSeverity)
+reactiveInsight_severity = Lens.lens (\ReactiveInsight' {severity} -> severity) (\s@ReactiveInsight' {} a -> s {severity = a} :: ReactiveInsight)
+
+-- | The ID of the Amazon Web Services System Manager OpsItem created for
+-- this insight. You must enable the creation of OpstItems insights before
+-- they are created for each insight.
+reactiveInsight_ssmOpsItemId :: Lens.Lens' ReactiveInsight (Prelude.Maybe Prelude.Text)
+reactiveInsight_ssmOpsItemId = Lens.lens (\ReactiveInsight' {ssmOpsItemId} -> ssmOpsItemId) (\s@ReactiveInsight' {} a -> s {ssmOpsItemId = a} :: ReactiveInsight)
+
+-- | The status of a reactive insight.
+reactiveInsight_status :: Lens.Lens' ReactiveInsight (Prelude.Maybe InsightStatus)
+reactiveInsight_status = Lens.lens (\ReactiveInsight' {status} -> status) (\s@ReactiveInsight' {} a -> s {status = a} :: ReactiveInsight)
+
+instance Data.FromJSON ReactiveInsight where
+  parseJSON =
+    Data.withObject
+      "ReactiveInsight"
+      ( \x ->
+          ReactiveInsight'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InsightTimeRange")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "SsmOpsItemId")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ReactiveInsight where
+  hashWithSalt _salt ReactiveInsight' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` insightTimeRange
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` ssmOpsItemId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ReactiveInsight where
+  rnf ReactiveInsight' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf insightTimeRange
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf ssmOpsItemId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DevOpsGuru/Types/ReactiveInsightSummary.hs b/gen/Amazonka/DevOpsGuru/Types/ReactiveInsightSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ReactiveInsightSummary.hs
@@ -0,0 +1,173 @@
+{-# 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.DevOpsGuru.Types.ReactiveInsightSummary
+-- 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.DevOpsGuru.Types.ReactiveInsightSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a reactive insight. This object is returned by
+-- @DescribeInsight.@
+--
+-- /See:/ 'newReactiveInsightSummary' smart constructor.
+data ReactiveInsightSummary = ReactiveInsightSummary'
+  { -- | The Amazon Resource Names (ARNs) of the Amazon Web Services resources
+    -- that generated this insight.
+    associatedResourceArns :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of a reactive summary.
+    id :: Prelude.Maybe Prelude.Text,
+    insightTimeRange :: Prelude.Maybe InsightTimeRange,
+    -- | The name of a reactive insight.
+    name :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | A collection of the names of Amazon Web Services services.
+    serviceCollection :: Prelude.Maybe ServiceCollection,
+    -- | The severity of the insight. For more information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe InsightSeverity,
+    -- | The status of a reactive insight.
+    status :: Prelude.Maybe InsightStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReactiveInsightSummary' 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:
+--
+-- 'associatedResourceArns', 'reactiveInsightSummary_associatedResourceArns' - The Amazon Resource Names (ARNs) of the Amazon Web Services resources
+-- that generated this insight.
+--
+-- 'id', 'reactiveInsightSummary_id' - The ID of a reactive summary.
+--
+-- 'insightTimeRange', 'reactiveInsightSummary_insightTimeRange' - Undocumented member.
+--
+-- 'name', 'reactiveInsightSummary_name' - The name of a reactive insight.
+--
+-- 'resourceCollection', 'reactiveInsightSummary_resourceCollection' - Undocumented member.
+--
+-- 'serviceCollection', 'reactiveInsightSummary_serviceCollection' - A collection of the names of Amazon Web Services services.
+--
+-- 'severity', 'reactiveInsightSummary_severity' - The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'status', 'reactiveInsightSummary_status' - The status of a reactive insight.
+newReactiveInsightSummary ::
+  ReactiveInsightSummary
+newReactiveInsightSummary =
+  ReactiveInsightSummary'
+    { associatedResourceArns =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      insightTimeRange = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      serviceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Names (ARNs) of the Amazon Web Services resources
+-- that generated this insight.
+reactiveInsightSummary_associatedResourceArns :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe [Prelude.Text])
+reactiveInsightSummary_associatedResourceArns = Lens.lens (\ReactiveInsightSummary' {associatedResourceArns} -> associatedResourceArns) (\s@ReactiveInsightSummary' {} a -> s {associatedResourceArns = a} :: ReactiveInsightSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of a reactive summary.
+reactiveInsightSummary_id :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe Prelude.Text)
+reactiveInsightSummary_id = Lens.lens (\ReactiveInsightSummary' {id} -> id) (\s@ReactiveInsightSummary' {} a -> s {id = a} :: ReactiveInsightSummary)
+
+-- | Undocumented member.
+reactiveInsightSummary_insightTimeRange :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe InsightTimeRange)
+reactiveInsightSummary_insightTimeRange = Lens.lens (\ReactiveInsightSummary' {insightTimeRange} -> insightTimeRange) (\s@ReactiveInsightSummary' {} a -> s {insightTimeRange = a} :: ReactiveInsightSummary)
+
+-- | The name of a reactive insight.
+reactiveInsightSummary_name :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe Prelude.Text)
+reactiveInsightSummary_name = Lens.lens (\ReactiveInsightSummary' {name} -> name) (\s@ReactiveInsightSummary' {} a -> s {name = a} :: ReactiveInsightSummary)
+
+-- | Undocumented member.
+reactiveInsightSummary_resourceCollection :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe ResourceCollection)
+reactiveInsightSummary_resourceCollection = Lens.lens (\ReactiveInsightSummary' {resourceCollection} -> resourceCollection) (\s@ReactiveInsightSummary' {} a -> s {resourceCollection = a} :: ReactiveInsightSummary)
+
+-- | A collection of the names of Amazon Web Services services.
+reactiveInsightSummary_serviceCollection :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe ServiceCollection)
+reactiveInsightSummary_serviceCollection = Lens.lens (\ReactiveInsightSummary' {serviceCollection} -> serviceCollection) (\s@ReactiveInsightSummary' {} a -> s {serviceCollection = a} :: ReactiveInsightSummary)
+
+-- | The severity of the insight. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+reactiveInsightSummary_severity :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe InsightSeverity)
+reactiveInsightSummary_severity = Lens.lens (\ReactiveInsightSummary' {severity} -> severity) (\s@ReactiveInsightSummary' {} a -> s {severity = a} :: ReactiveInsightSummary)
+
+-- | The status of a reactive insight.
+reactiveInsightSummary_status :: Lens.Lens' ReactiveInsightSummary (Prelude.Maybe InsightStatus)
+reactiveInsightSummary_status = Lens.lens (\ReactiveInsightSummary' {status} -> status) (\s@ReactiveInsightSummary' {} a -> s {status = a} :: ReactiveInsightSummary)
+
+instance Data.FromJSON ReactiveInsightSummary where
+  parseJSON =
+    Data.withObject
+      "ReactiveInsightSummary"
+      ( \x ->
+          ReactiveInsightSummary'
+            Prelude.<$> ( x
+                            Data..:? "AssociatedResourceArns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InsightTimeRange")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "ServiceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ReactiveInsightSummary where
+  hashWithSalt _salt ReactiveInsightSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedResourceArns
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` insightTimeRange
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` serviceCollection
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ReactiveInsightSummary where
+  rnf ReactiveInsightSummary' {..} =
+    Prelude.rnf associatedResourceArns
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf insightTimeRange
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf serviceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DevOpsGuru/Types/ReactiveOrganizationInsightSummary.hs b/gen/Amazonka/DevOpsGuru/Types/ReactiveOrganizationInsightSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ReactiveOrganizationInsightSummary.hs
@@ -0,0 +1,192 @@
+{-# 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.DevOpsGuru.Types.ReactiveOrganizationInsightSummary
+-- 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.DevOpsGuru.Types.ReactiveOrganizationInsightSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.InsightTimeRange
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a reactive insight. This object is returned by
+-- @DescribeInsight@.
+--
+-- /See:/ 'newReactiveOrganizationInsightSummary' smart constructor.
+data ReactiveOrganizationInsightSummary = ReactiveOrganizationInsightSummary'
+  { -- | The ID of the Amazon Web Services account.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the insight summary.
+    id :: Prelude.Maybe Prelude.Text,
+    insightTimeRange :: Prelude.Maybe InsightTimeRange,
+    -- | The name of the insight summary.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the organizational unit.
+    organizationalUnitId :: Prelude.Maybe Prelude.Text,
+    resourceCollection :: Prelude.Maybe ResourceCollection,
+    serviceCollection :: Prelude.Maybe ServiceCollection,
+    -- | An array of severity values used to search for insights. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+    -- in the /Amazon DevOps Guru User Guide/.
+    severity :: Prelude.Maybe InsightSeverity,
+    -- | An array of status values used to search for insights.
+    status :: Prelude.Maybe InsightStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReactiveOrganizationInsightSummary' 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:
+--
+-- 'accountId', 'reactiveOrganizationInsightSummary_accountId' - The ID of the Amazon Web Services account.
+--
+-- 'id', 'reactiveOrganizationInsightSummary_id' - The ID of the insight summary.
+--
+-- 'insightTimeRange', 'reactiveOrganizationInsightSummary_insightTimeRange' - Undocumented member.
+--
+-- 'name', 'reactiveOrganizationInsightSummary_name' - The name of the insight summary.
+--
+-- 'organizationalUnitId', 'reactiveOrganizationInsightSummary_organizationalUnitId' - The ID of the organizational unit.
+--
+-- 'resourceCollection', 'reactiveOrganizationInsightSummary_resourceCollection' - Undocumented member.
+--
+-- 'serviceCollection', 'reactiveOrganizationInsightSummary_serviceCollection' - Undocumented member.
+--
+-- 'severity', 'reactiveOrganizationInsightSummary_severity' - An array of severity values used to search for insights. For more
+-- information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+--
+-- 'status', 'reactiveOrganizationInsightSummary_status' - An array of status values used to search for insights.
+newReactiveOrganizationInsightSummary ::
+  ReactiveOrganizationInsightSummary
+newReactiveOrganizationInsightSummary =
+  ReactiveOrganizationInsightSummary'
+    { accountId =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      insightTimeRange = Prelude.Nothing,
+      name = Prelude.Nothing,
+      organizationalUnitId = Prelude.Nothing,
+      resourceCollection = Prelude.Nothing,
+      serviceCollection = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The ID of the Amazon Web Services account.
+reactiveOrganizationInsightSummary_accountId :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+reactiveOrganizationInsightSummary_accountId = Lens.lens (\ReactiveOrganizationInsightSummary' {accountId} -> accountId) (\s@ReactiveOrganizationInsightSummary' {} a -> s {accountId = a} :: ReactiveOrganizationInsightSummary)
+
+-- | The ID of the insight summary.
+reactiveOrganizationInsightSummary_id :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+reactiveOrganizationInsightSummary_id = Lens.lens (\ReactiveOrganizationInsightSummary' {id} -> id) (\s@ReactiveOrganizationInsightSummary' {} a -> s {id = a} :: ReactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+reactiveOrganizationInsightSummary_insightTimeRange :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe InsightTimeRange)
+reactiveOrganizationInsightSummary_insightTimeRange = Lens.lens (\ReactiveOrganizationInsightSummary' {insightTimeRange} -> insightTimeRange) (\s@ReactiveOrganizationInsightSummary' {} a -> s {insightTimeRange = a} :: ReactiveOrganizationInsightSummary)
+
+-- | The name of the insight summary.
+reactiveOrganizationInsightSummary_name :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+reactiveOrganizationInsightSummary_name = Lens.lens (\ReactiveOrganizationInsightSummary' {name} -> name) (\s@ReactiveOrganizationInsightSummary' {} a -> s {name = a} :: ReactiveOrganizationInsightSummary)
+
+-- | The ID of the organizational unit.
+reactiveOrganizationInsightSummary_organizationalUnitId :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe Prelude.Text)
+reactiveOrganizationInsightSummary_organizationalUnitId = Lens.lens (\ReactiveOrganizationInsightSummary' {organizationalUnitId} -> organizationalUnitId) (\s@ReactiveOrganizationInsightSummary' {} a -> s {organizationalUnitId = a} :: ReactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+reactiveOrganizationInsightSummary_resourceCollection :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe ResourceCollection)
+reactiveOrganizationInsightSummary_resourceCollection = Lens.lens (\ReactiveOrganizationInsightSummary' {resourceCollection} -> resourceCollection) (\s@ReactiveOrganizationInsightSummary' {} a -> s {resourceCollection = a} :: ReactiveOrganizationInsightSummary)
+
+-- | Undocumented member.
+reactiveOrganizationInsightSummary_serviceCollection :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe ServiceCollection)
+reactiveOrganizationInsightSummary_serviceCollection = Lens.lens (\ReactiveOrganizationInsightSummary' {serviceCollection} -> serviceCollection) (\s@ReactiveOrganizationInsightSummary' {} a -> s {serviceCollection = a} :: ReactiveOrganizationInsightSummary)
+
+-- | An array of severity values used to search for insights. For more
+-- information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html#understanding-insights-severities Understanding insight severities>
+-- in the /Amazon DevOps Guru User Guide/.
+reactiveOrganizationInsightSummary_severity :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe InsightSeverity)
+reactiveOrganizationInsightSummary_severity = Lens.lens (\ReactiveOrganizationInsightSummary' {severity} -> severity) (\s@ReactiveOrganizationInsightSummary' {} a -> s {severity = a} :: ReactiveOrganizationInsightSummary)
+
+-- | An array of status values used to search for insights.
+reactiveOrganizationInsightSummary_status :: Lens.Lens' ReactiveOrganizationInsightSummary (Prelude.Maybe InsightStatus)
+reactiveOrganizationInsightSummary_status = Lens.lens (\ReactiveOrganizationInsightSummary' {status} -> status) (\s@ReactiveOrganizationInsightSummary' {} a -> s {status = a} :: ReactiveOrganizationInsightSummary)
+
+instance
+  Data.FromJSON
+    ReactiveOrganizationInsightSummary
+  where
+  parseJSON =
+    Data.withObject
+      "ReactiveOrganizationInsightSummary"
+      ( \x ->
+          ReactiveOrganizationInsightSummary'
+            Prelude.<$> (x Data..:? "AccountId")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InsightTimeRange")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "OrganizationalUnitId")
+            Prelude.<*> (x Data..:? "ResourceCollection")
+            Prelude.<*> (x Data..:? "ServiceCollection")
+            Prelude.<*> (x Data..:? "Severity")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance
+  Prelude.Hashable
+    ReactiveOrganizationInsightSummary
+  where
+  hashWithSalt
+    _salt
+    ReactiveOrganizationInsightSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` accountId
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` insightTimeRange
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` organizationalUnitId
+        `Prelude.hashWithSalt` resourceCollection
+        `Prelude.hashWithSalt` serviceCollection
+        `Prelude.hashWithSalt` severity
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    ReactiveOrganizationInsightSummary
+  where
+  rnf ReactiveOrganizationInsightSummary' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf insightTimeRange
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf organizationalUnitId
+      `Prelude.seq` Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf serviceCollection
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DevOpsGuru/Types/Recommendation.hs b/gen/Amazonka/DevOpsGuru/Types/Recommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/Recommendation.hs
@@ -0,0 +1,156 @@
+{-# 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.DevOpsGuru.Types.Recommendation
+-- 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.DevOpsGuru.Types.Recommendation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomaly
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedEvent
+import qualified Amazonka.Prelude as Prelude
+
+-- | Recommendation information to help you remediate detected anomalous
+-- behavior that generated an insight.
+--
+-- /See:/ 'newRecommendation' smart constructor.
+data Recommendation = Recommendation'
+  { -- | The category type of the recommendation.
+    category :: Prelude.Maybe Prelude.Text,
+    -- | A description of the problem.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A hyperlink to information to help you address the problem.
+    link :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recommendation.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The reason DevOps Guru flagged the anomalous behavior as a problem.
+    reason :: Prelude.Maybe Prelude.Text,
+    -- | Anomalies that are related to the problem. Use these Anomalies to learn
+    -- more about what\'s happening and to help address the issue.
+    relatedAnomalies :: Prelude.Maybe [RecommendationRelatedAnomaly],
+    -- | Events that are related to the problem. Use these events to learn more
+    -- about what\'s happening and to help address the issue.
+    relatedEvents :: Prelude.Maybe [RecommendationRelatedEvent]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Recommendation' 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:
+--
+-- 'category', 'recommendation_category' - The category type of the recommendation.
+--
+-- 'description', 'recommendation_description' - A description of the problem.
+--
+-- 'link', 'recommendation_link' - A hyperlink to information to help you address the problem.
+--
+-- 'name', 'recommendation_name' - The name of the recommendation.
+--
+-- 'reason', 'recommendation_reason' - The reason DevOps Guru flagged the anomalous behavior as a problem.
+--
+-- 'relatedAnomalies', 'recommendation_relatedAnomalies' - Anomalies that are related to the problem. Use these Anomalies to learn
+-- more about what\'s happening and to help address the issue.
+--
+-- 'relatedEvents', 'recommendation_relatedEvents' - Events that are related to the problem. Use these events to learn more
+-- about what\'s happening and to help address the issue.
+newRecommendation ::
+  Recommendation
+newRecommendation =
+  Recommendation'
+    { category = Prelude.Nothing,
+      description = Prelude.Nothing,
+      link = Prelude.Nothing,
+      name = Prelude.Nothing,
+      reason = Prelude.Nothing,
+      relatedAnomalies = Prelude.Nothing,
+      relatedEvents = Prelude.Nothing
+    }
+
+-- | The category type of the recommendation.
+recommendation_category :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_category = Lens.lens (\Recommendation' {category} -> category) (\s@Recommendation' {} a -> s {category = a} :: Recommendation)
+
+-- | A description of the problem.
+recommendation_description :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_description = Lens.lens (\Recommendation' {description} -> description) (\s@Recommendation' {} a -> s {description = a} :: Recommendation)
+
+-- | A hyperlink to information to help you address the problem.
+recommendation_link :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_link = Lens.lens (\Recommendation' {link} -> link) (\s@Recommendation' {} a -> s {link = a} :: Recommendation)
+
+-- | The name of the recommendation.
+recommendation_name :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_name = Lens.lens (\Recommendation' {name} -> name) (\s@Recommendation' {} a -> s {name = a} :: Recommendation)
+
+-- | The reason DevOps Guru flagged the anomalous behavior as a problem.
+recommendation_reason :: Lens.Lens' Recommendation (Prelude.Maybe Prelude.Text)
+recommendation_reason = Lens.lens (\Recommendation' {reason} -> reason) (\s@Recommendation' {} a -> s {reason = a} :: Recommendation)
+
+-- | Anomalies that are related to the problem. Use these Anomalies to learn
+-- more about what\'s happening and to help address the issue.
+recommendation_relatedAnomalies :: Lens.Lens' Recommendation (Prelude.Maybe [RecommendationRelatedAnomaly])
+recommendation_relatedAnomalies = Lens.lens (\Recommendation' {relatedAnomalies} -> relatedAnomalies) (\s@Recommendation' {} a -> s {relatedAnomalies = a} :: Recommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | Events that are related to the problem. Use these events to learn more
+-- about what\'s happening and to help address the issue.
+recommendation_relatedEvents :: Lens.Lens' Recommendation (Prelude.Maybe [RecommendationRelatedEvent])
+recommendation_relatedEvents = Lens.lens (\Recommendation' {relatedEvents} -> relatedEvents) (\s@Recommendation' {} a -> s {relatedEvents = a} :: Recommendation) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Recommendation where
+  parseJSON =
+    Data.withObject
+      "Recommendation"
+      ( \x ->
+          Recommendation'
+            Prelude.<$> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Link")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Reason")
+            Prelude.<*> ( x
+                            Data..:? "RelatedAnomalies"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "RelatedEvents" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Recommendation where
+  hashWithSalt _salt Recommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` link
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` relatedAnomalies
+      `Prelude.hashWithSalt` relatedEvents
+
+instance Prelude.NFData Recommendation where
+  rnf Recommendation' {..} =
+    Prelude.rnf category
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf link
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf relatedAnomalies
+      `Prelude.seq` Prelude.rnf relatedEvents
diff --git a/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomaly.hs b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomaly.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomaly.hs
@@ -0,0 +1,117 @@
+{-# 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.DevOpsGuru.Types.RecommendationRelatedAnomaly
+-- 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.DevOpsGuru.Types.RecommendationRelatedAnomaly where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalyResource
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedAnomalySourceDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an anomaly that is related to a recommendation.
+--
+-- /See:/ 'newRecommendationRelatedAnomaly' smart constructor.
+data RecommendationRelatedAnomaly = RecommendationRelatedAnomaly'
+  { -- | The ID of an anomaly that generated the insight with this
+    -- recommendation.
+    anomalyId :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that represent resources in which DevOps Guru
+    -- detected anomalous behavior. Each object contains the name and type of
+    -- the resource.
+    resources :: Prelude.Maybe [RecommendationRelatedAnomalyResource],
+    -- | Information about where the anomalous behavior related the
+    -- recommendation was found. For example, details in Amazon CloudWatch
+    -- metrics.
+    sourceDetails :: Prelude.Maybe [RecommendationRelatedAnomalySourceDetail]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationRelatedAnomaly' 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:
+--
+-- 'anomalyId', 'recommendationRelatedAnomaly_anomalyId' - The ID of an anomaly that generated the insight with this
+-- recommendation.
+--
+-- 'resources', 'recommendationRelatedAnomaly_resources' - An array of objects that represent resources in which DevOps Guru
+-- detected anomalous behavior. Each object contains the name and type of
+-- the resource.
+--
+-- 'sourceDetails', 'recommendationRelatedAnomaly_sourceDetails' - Information about where the anomalous behavior related the
+-- recommendation was found. For example, details in Amazon CloudWatch
+-- metrics.
+newRecommendationRelatedAnomaly ::
+  RecommendationRelatedAnomaly
+newRecommendationRelatedAnomaly =
+  RecommendationRelatedAnomaly'
+    { anomalyId =
+        Prelude.Nothing,
+      resources = Prelude.Nothing,
+      sourceDetails = Prelude.Nothing
+    }
+
+-- | The ID of an anomaly that generated the insight with this
+-- recommendation.
+recommendationRelatedAnomaly_anomalyId :: Lens.Lens' RecommendationRelatedAnomaly (Prelude.Maybe Prelude.Text)
+recommendationRelatedAnomaly_anomalyId = Lens.lens (\RecommendationRelatedAnomaly' {anomalyId} -> anomalyId) (\s@RecommendationRelatedAnomaly' {} a -> s {anomalyId = a} :: RecommendationRelatedAnomaly)
+
+-- | An array of objects that represent resources in which DevOps Guru
+-- detected anomalous behavior. Each object contains the name and type of
+-- the resource.
+recommendationRelatedAnomaly_resources :: Lens.Lens' RecommendationRelatedAnomaly (Prelude.Maybe [RecommendationRelatedAnomalyResource])
+recommendationRelatedAnomaly_resources = Lens.lens (\RecommendationRelatedAnomaly' {resources} -> resources) (\s@RecommendationRelatedAnomaly' {} a -> s {resources = a} :: RecommendationRelatedAnomaly) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about where the anomalous behavior related the
+-- recommendation was found. For example, details in Amazon CloudWatch
+-- metrics.
+recommendationRelatedAnomaly_sourceDetails :: Lens.Lens' RecommendationRelatedAnomaly (Prelude.Maybe [RecommendationRelatedAnomalySourceDetail])
+recommendationRelatedAnomaly_sourceDetails = Lens.lens (\RecommendationRelatedAnomaly' {sourceDetails} -> sourceDetails) (\s@RecommendationRelatedAnomaly' {} a -> s {sourceDetails = a} :: RecommendationRelatedAnomaly) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON RecommendationRelatedAnomaly where
+  parseJSON =
+    Data.withObject
+      "RecommendationRelatedAnomaly"
+      ( \x ->
+          RecommendationRelatedAnomaly'
+            Prelude.<$> (x Data..:? "AnomalyId")
+            Prelude.<*> (x Data..:? "Resources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "SourceDetails" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    RecommendationRelatedAnomaly
+  where
+  hashWithSalt _salt RecommendationRelatedAnomaly' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyId
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` sourceDetails
+
+instance Prelude.NFData RecommendationRelatedAnomaly where
+  rnf RecommendationRelatedAnomaly' {..} =
+    Prelude.rnf anomalyId
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf sourceDetails
diff --git a/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomalyResource.hs b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomalyResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomalyResource.hs
@@ -0,0 +1,111 @@
+{-# 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.DevOpsGuru.Types.RecommendationRelatedAnomalyResource
+-- 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.DevOpsGuru.Types.RecommendationRelatedAnomalyResource 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
+
+-- | Information about a resource in which DevOps Guru detected anomalous
+-- behavior.
+--
+-- /See:/ 'newRecommendationRelatedAnomalyResource' smart constructor.
+data RecommendationRelatedAnomalyResource = RecommendationRelatedAnomalyResource'
+  { -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of the resource. Resource types take the same form that is used
+    -- by Amazon Web Services CloudFormation resource type identifiers,
+    -- @service-provider::service-name::data-type-name@. For example,
+    -- @AWS::RDS::DBCluster@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html Amazon Web Services resource and property types reference>
+    -- in the /Amazon Web Services CloudFormation User Guide/.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationRelatedAnomalyResource' 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', 'recommendationRelatedAnomalyResource_name' - The name of the resource.
+--
+-- 'type'', 'recommendationRelatedAnomalyResource_type' - The type of the resource. Resource types take the same form that is used
+-- by Amazon Web Services CloudFormation resource type identifiers,
+-- @service-provider::service-name::data-type-name@. For example,
+-- @AWS::RDS::DBCluster@. For more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html Amazon Web Services resource and property types reference>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+newRecommendationRelatedAnomalyResource ::
+  RecommendationRelatedAnomalyResource
+newRecommendationRelatedAnomalyResource =
+  RecommendationRelatedAnomalyResource'
+    { name =
+        Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The name of the resource.
+recommendationRelatedAnomalyResource_name :: Lens.Lens' RecommendationRelatedAnomalyResource (Prelude.Maybe Prelude.Text)
+recommendationRelatedAnomalyResource_name = Lens.lens (\RecommendationRelatedAnomalyResource' {name} -> name) (\s@RecommendationRelatedAnomalyResource' {} a -> s {name = a} :: RecommendationRelatedAnomalyResource)
+
+-- | The type of the resource. Resource types take the same form that is used
+-- by Amazon Web Services CloudFormation resource type identifiers,
+-- @service-provider::service-name::data-type-name@. For example,
+-- @AWS::RDS::DBCluster@. For more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html Amazon Web Services resource and property types reference>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+recommendationRelatedAnomalyResource_type :: Lens.Lens' RecommendationRelatedAnomalyResource (Prelude.Maybe Prelude.Text)
+recommendationRelatedAnomalyResource_type = Lens.lens (\RecommendationRelatedAnomalyResource' {type'} -> type') (\s@RecommendationRelatedAnomalyResource' {} a -> s {type' = a} :: RecommendationRelatedAnomalyResource)
+
+instance
+  Data.FromJSON
+    RecommendationRelatedAnomalyResource
+  where
+  parseJSON =
+    Data.withObject
+      "RecommendationRelatedAnomalyResource"
+      ( \x ->
+          RecommendationRelatedAnomalyResource'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance
+  Prelude.Hashable
+    RecommendationRelatedAnomalyResource
+  where
+  hashWithSalt
+    _salt
+    RecommendationRelatedAnomalyResource' {..} =
+      _salt
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    RecommendationRelatedAnomalyResource
+  where
+  rnf RecommendationRelatedAnomalyResource' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomalySourceDetail.hs b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomalySourceDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedAnomalySourceDetail.hs
@@ -0,0 +1,92 @@
+{-# 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.DevOpsGuru.Types.RecommendationRelatedAnomalySourceDetail
+-- 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.DevOpsGuru.Types.RecommendationRelatedAnomalySourceDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedCloudWatchMetricsSourceDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains an array of
+-- @RecommendationRelatedCloudWatchMetricsSourceDetail@ objects that
+-- contain the name and namespace of an Amazon CloudWatch metric.
+--
+-- /See:/ 'newRecommendationRelatedAnomalySourceDetail' smart constructor.
+data RecommendationRelatedAnomalySourceDetail = RecommendationRelatedAnomalySourceDetail'
+  { -- | An array of @CloudWatchMetricsDetail@ objects that contains information
+    -- about the analyzed metrics that displayed anomalous behavior.
+    cloudWatchMetrics :: Prelude.Maybe [RecommendationRelatedCloudWatchMetricsSourceDetail]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationRelatedAnomalySourceDetail' 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:
+--
+-- 'cloudWatchMetrics', 'recommendationRelatedAnomalySourceDetail_cloudWatchMetrics' - An array of @CloudWatchMetricsDetail@ objects that contains information
+-- about the analyzed metrics that displayed anomalous behavior.
+newRecommendationRelatedAnomalySourceDetail ::
+  RecommendationRelatedAnomalySourceDetail
+newRecommendationRelatedAnomalySourceDetail =
+  RecommendationRelatedAnomalySourceDetail'
+    { cloudWatchMetrics =
+        Prelude.Nothing
+    }
+
+-- | An array of @CloudWatchMetricsDetail@ objects that contains information
+-- about the analyzed metrics that displayed anomalous behavior.
+recommendationRelatedAnomalySourceDetail_cloudWatchMetrics :: Lens.Lens' RecommendationRelatedAnomalySourceDetail (Prelude.Maybe [RecommendationRelatedCloudWatchMetricsSourceDetail])
+recommendationRelatedAnomalySourceDetail_cloudWatchMetrics = Lens.lens (\RecommendationRelatedAnomalySourceDetail' {cloudWatchMetrics} -> cloudWatchMetrics) (\s@RecommendationRelatedAnomalySourceDetail' {} a -> s {cloudWatchMetrics = a} :: RecommendationRelatedAnomalySourceDetail) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    RecommendationRelatedAnomalySourceDetail
+  where
+  parseJSON =
+    Data.withObject
+      "RecommendationRelatedAnomalySourceDetail"
+      ( \x ->
+          RecommendationRelatedAnomalySourceDetail'
+            Prelude.<$> ( x
+                            Data..:? "CloudWatchMetrics"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    RecommendationRelatedAnomalySourceDetail
+  where
+  hashWithSalt
+    _salt
+    RecommendationRelatedAnomalySourceDetail' {..} =
+      _salt `Prelude.hashWithSalt` cloudWatchMetrics
+
+instance
+  Prelude.NFData
+    RecommendationRelatedAnomalySourceDetail
+  where
+  rnf RecommendationRelatedAnomalySourceDetail' {..} =
+    Prelude.rnf cloudWatchMetrics
diff --git a/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedCloudWatchMetricsSourceDetail.hs b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedCloudWatchMetricsSourceDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedCloudWatchMetricsSourceDetail.hs
@@ -0,0 +1,103 @@
+{-# 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.DevOpsGuru.Types.RecommendationRelatedCloudWatchMetricsSourceDetail
+-- 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.DevOpsGuru.Types.RecommendationRelatedCloudWatchMetricsSourceDetail 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
+
+-- | Information about an Amazon CloudWatch metric that is analyzed by DevOps
+-- Guru. It is one of many analyzed metrics that are used to generate
+-- insights.
+--
+-- /See:/ 'newRecommendationRelatedCloudWatchMetricsSourceDetail' smart constructor.
+data RecommendationRelatedCloudWatchMetricsSourceDetail = RecommendationRelatedCloudWatchMetricsSourceDetail'
+  { -- | The name of the CloudWatch metric.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | The namespace of the CloudWatch metric. A namespace is a container for
+    -- CloudWatch metrics.
+    namespace :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationRelatedCloudWatchMetricsSourceDetail' 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:
+--
+-- 'metricName', 'recommendationRelatedCloudWatchMetricsSourceDetail_metricName' - The name of the CloudWatch metric.
+--
+-- 'namespace', 'recommendationRelatedCloudWatchMetricsSourceDetail_namespace' - The namespace of the CloudWatch metric. A namespace is a container for
+-- CloudWatch metrics.
+newRecommendationRelatedCloudWatchMetricsSourceDetail ::
+  RecommendationRelatedCloudWatchMetricsSourceDetail
+newRecommendationRelatedCloudWatchMetricsSourceDetail =
+  RecommendationRelatedCloudWatchMetricsSourceDetail'
+    { metricName =
+        Prelude.Nothing,
+      namespace =
+        Prelude.Nothing
+    }
+
+-- | The name of the CloudWatch metric.
+recommendationRelatedCloudWatchMetricsSourceDetail_metricName :: Lens.Lens' RecommendationRelatedCloudWatchMetricsSourceDetail (Prelude.Maybe Prelude.Text)
+recommendationRelatedCloudWatchMetricsSourceDetail_metricName = Lens.lens (\RecommendationRelatedCloudWatchMetricsSourceDetail' {metricName} -> metricName) (\s@RecommendationRelatedCloudWatchMetricsSourceDetail' {} a -> s {metricName = a} :: RecommendationRelatedCloudWatchMetricsSourceDetail)
+
+-- | The namespace of the CloudWatch metric. A namespace is a container for
+-- CloudWatch metrics.
+recommendationRelatedCloudWatchMetricsSourceDetail_namespace :: Lens.Lens' RecommendationRelatedCloudWatchMetricsSourceDetail (Prelude.Maybe Prelude.Text)
+recommendationRelatedCloudWatchMetricsSourceDetail_namespace = Lens.lens (\RecommendationRelatedCloudWatchMetricsSourceDetail' {namespace} -> namespace) (\s@RecommendationRelatedCloudWatchMetricsSourceDetail' {} a -> s {namespace = a} :: RecommendationRelatedCloudWatchMetricsSourceDetail)
+
+instance
+  Data.FromJSON
+    RecommendationRelatedCloudWatchMetricsSourceDetail
+  where
+  parseJSON =
+    Data.withObject
+      "RecommendationRelatedCloudWatchMetricsSourceDetail"
+      ( \x ->
+          RecommendationRelatedCloudWatchMetricsSourceDetail'
+            Prelude.<$> (x Data..:? "MetricName")
+            Prelude.<*> (x Data..:? "Namespace")
+      )
+
+instance
+  Prelude.Hashable
+    RecommendationRelatedCloudWatchMetricsSourceDetail
+  where
+  hashWithSalt
+    _salt
+    RecommendationRelatedCloudWatchMetricsSourceDetail' {..} =
+      _salt
+        `Prelude.hashWithSalt` metricName
+        `Prelude.hashWithSalt` namespace
+
+instance
+  Prelude.NFData
+    RecommendationRelatedCloudWatchMetricsSourceDetail
+  where
+  rnf
+    RecommendationRelatedCloudWatchMetricsSourceDetail' {..} =
+      Prelude.rnf metricName
+        `Prelude.seq` Prelude.rnf namespace
diff --git a/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedEvent.hs b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedEvent.hs
@@ -0,0 +1,94 @@
+{-# 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.DevOpsGuru.Types.RecommendationRelatedEvent
+-- 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.DevOpsGuru.Types.RecommendationRelatedEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.RecommendationRelatedEventResource
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an event that is related to a recommendation.
+--
+-- /See:/ 'newRecommendationRelatedEvent' smart constructor.
+data RecommendationRelatedEvent = RecommendationRelatedEvent'
+  { -- | The name of the event. This corresponds to the @Name@ field in an
+    -- @Event@ object.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A @ResourceCollection@ object that contains arrays of the names of
+    -- Amazon Web Services CloudFormation stacks. You can specify up to 500
+    -- Amazon Web Services CloudFormation stacks.
+    resources :: Prelude.Maybe [RecommendationRelatedEventResource]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationRelatedEvent' 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', 'recommendationRelatedEvent_name' - The name of the event. This corresponds to the @Name@ field in an
+-- @Event@ object.
+--
+-- 'resources', 'recommendationRelatedEvent_resources' - A @ResourceCollection@ object that contains arrays of the names of
+-- Amazon Web Services CloudFormation stacks. You can specify up to 500
+-- Amazon Web Services CloudFormation stacks.
+newRecommendationRelatedEvent ::
+  RecommendationRelatedEvent
+newRecommendationRelatedEvent =
+  RecommendationRelatedEvent'
+    { name = Prelude.Nothing,
+      resources = Prelude.Nothing
+    }
+
+-- | The name of the event. This corresponds to the @Name@ field in an
+-- @Event@ object.
+recommendationRelatedEvent_name :: Lens.Lens' RecommendationRelatedEvent (Prelude.Maybe Prelude.Text)
+recommendationRelatedEvent_name = Lens.lens (\RecommendationRelatedEvent' {name} -> name) (\s@RecommendationRelatedEvent' {} a -> s {name = a} :: RecommendationRelatedEvent)
+
+-- | A @ResourceCollection@ object that contains arrays of the names of
+-- Amazon Web Services CloudFormation stacks. You can specify up to 500
+-- Amazon Web Services CloudFormation stacks.
+recommendationRelatedEvent_resources :: Lens.Lens' RecommendationRelatedEvent (Prelude.Maybe [RecommendationRelatedEventResource])
+recommendationRelatedEvent_resources = Lens.lens (\RecommendationRelatedEvent' {resources} -> resources) (\s@RecommendationRelatedEvent' {} a -> s {resources = a} :: RecommendationRelatedEvent) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON RecommendationRelatedEvent where
+  parseJSON =
+    Data.withObject
+      "RecommendationRelatedEvent"
+      ( \x ->
+          RecommendationRelatedEvent'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Resources" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable RecommendationRelatedEvent where
+  hashWithSalt _salt RecommendationRelatedEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData RecommendationRelatedEvent where
+  rnf RecommendationRelatedEvent' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resources
diff --git a/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedEventResource.hs b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedEventResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/RecommendationRelatedEventResource.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.DevOpsGuru.Types.RecommendationRelatedEventResource
+-- 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.DevOpsGuru.Types.RecommendationRelatedEventResource 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
+
+-- | Information about an Amazon Web Services resource that emitted and event
+-- that is related to a recommendation in an insight.
+--
+-- /See:/ 'newRecommendationRelatedEventResource' smart constructor.
+data RecommendationRelatedEventResource = RecommendationRelatedEventResource'
+  { -- | The name of the resource that emitted the event. This corresponds to the
+    -- @Name@ field in an @EventResource@ object.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of the resource that emitted the event. This corresponds to the
+    -- @Type@ field in an @EventResource@ object.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationRelatedEventResource' 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', 'recommendationRelatedEventResource_name' - The name of the resource that emitted the event. This corresponds to the
+-- @Name@ field in an @EventResource@ object.
+--
+-- 'type'', 'recommendationRelatedEventResource_type' - The type of the resource that emitted the event. This corresponds to the
+-- @Type@ field in an @EventResource@ object.
+newRecommendationRelatedEventResource ::
+  RecommendationRelatedEventResource
+newRecommendationRelatedEventResource =
+  RecommendationRelatedEventResource'
+    { name =
+        Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The name of the resource that emitted the event. This corresponds to the
+-- @Name@ field in an @EventResource@ object.
+recommendationRelatedEventResource_name :: Lens.Lens' RecommendationRelatedEventResource (Prelude.Maybe Prelude.Text)
+recommendationRelatedEventResource_name = Lens.lens (\RecommendationRelatedEventResource' {name} -> name) (\s@RecommendationRelatedEventResource' {} a -> s {name = a} :: RecommendationRelatedEventResource)
+
+-- | The type of the resource that emitted the event. This corresponds to the
+-- @Type@ field in an @EventResource@ object.
+recommendationRelatedEventResource_type :: Lens.Lens' RecommendationRelatedEventResource (Prelude.Maybe Prelude.Text)
+recommendationRelatedEventResource_type = Lens.lens (\RecommendationRelatedEventResource' {type'} -> type') (\s@RecommendationRelatedEventResource' {} a -> s {type' = a} :: RecommendationRelatedEventResource)
+
+instance
+  Data.FromJSON
+    RecommendationRelatedEventResource
+  where
+  parseJSON =
+    Data.withObject
+      "RecommendationRelatedEventResource"
+      ( \x ->
+          RecommendationRelatedEventResource'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance
+  Prelude.Hashable
+    RecommendationRelatedEventResource
+  where
+  hashWithSalt
+    _salt
+    RecommendationRelatedEventResource' {..} =
+      _salt
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    RecommendationRelatedEventResource
+  where
+  rnf RecommendationRelatedEventResource' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DevOpsGuru/Types/ResourceCollection.hs b/gen/Amazonka/DevOpsGuru/Types/ResourceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ResourceCollection.hs
@@ -0,0 +1,208 @@
+{-# 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.DevOpsGuru.Types.ResourceCollection
+-- 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.DevOpsGuru.Types.ResourceCollection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CloudFormationCollection
+import Amazonka.DevOpsGuru.Types.TagCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | A collection of Amazon Web Services resources supported by DevOps Guru.
+-- The two types of Amazon Web Services resource collections supported are
+-- Amazon Web Services CloudFormation stacks and Amazon Web Services
+-- resources that contain the same Amazon Web Services tag. DevOps Guru can
+-- be configured to analyze the Amazon Web Services resources that are
+-- defined in the stacks or that are tagged using the same tag /key/. You
+-- can specify up to 500 Amazon Web Services CloudFormation stacks.
+--
+-- /See:/ 'newResourceCollection' smart constructor.
+data ResourceCollection = ResourceCollection'
+  { -- | An array of the names of Amazon Web Services CloudFormation stacks. The
+    -- stacks define Amazon Web Services resources that DevOps Guru analyzes.
+    -- You can specify up to 500 Amazon Web Services CloudFormation stacks.
+    cloudFormation :: Prelude.Maybe CloudFormationCollection,
+    -- | The Amazon Web Services tags that are used by resources in the resource
+    -- collection.
+    --
+    -- Tags help you identify and organize your Amazon Web Services resources.
+    -- Many Amazon Web Services services support tagging, so you can assign the
+    -- same tag to resources from different services to indicate that the
+    -- resources are related. For example, you can assign the same tag to an
+    -- Amazon DynamoDB table resource that you assign to an Lambda function.
+    -- For more information about using tags, see the
+    -- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+    -- whitepaper.
+    --
+    -- Each Amazon Web Services tag has two parts.
+    --
+    -- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+    --     @Secret@). Tag /keys/ are case-sensitive.
+    --
+    -- -   An optional field known as a tag /value/ (for example,
+    --     @111122223333@, @Production@, or a team name). Omitting the tag
+    --     /value/ is the same as using an empty string. Like tag /keys/, tag
+    --     /values/ are case-sensitive.
+    --
+    -- Together these are known as /key/-/value/ pairs.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    tags :: Prelude.Maybe [TagCollection]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceCollection' 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:
+--
+-- 'cloudFormation', 'resourceCollection_cloudFormation' - An array of the names of Amazon Web Services CloudFormation stacks. The
+-- stacks define Amazon Web Services resources that DevOps Guru analyzes.
+-- You can specify up to 500 Amazon Web Services CloudFormation stacks.
+--
+-- 'tags', 'resourceCollection_tags' - The Amazon Web Services tags that are used by resources in the resource
+-- collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+newResourceCollection ::
+  ResourceCollection
+newResourceCollection =
+  ResourceCollection'
+    { cloudFormation =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | An array of the names of Amazon Web Services CloudFormation stacks. The
+-- stacks define Amazon Web Services resources that DevOps Guru analyzes.
+-- You can specify up to 500 Amazon Web Services CloudFormation stacks.
+resourceCollection_cloudFormation :: Lens.Lens' ResourceCollection (Prelude.Maybe CloudFormationCollection)
+resourceCollection_cloudFormation = Lens.lens (\ResourceCollection' {cloudFormation} -> cloudFormation) (\s@ResourceCollection' {} a -> s {cloudFormation = a} :: ResourceCollection)
+
+-- | The Amazon Web Services tags that are used by resources in the resource
+-- collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+resourceCollection_tags :: Lens.Lens' ResourceCollection (Prelude.Maybe [TagCollection])
+resourceCollection_tags = Lens.lens (\ResourceCollection' {tags} -> tags) (\s@ResourceCollection' {} a -> s {tags = a} :: ResourceCollection) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ResourceCollection where
+  parseJSON =
+    Data.withObject
+      "ResourceCollection"
+      ( \x ->
+          ResourceCollection'
+            Prelude.<$> (x Data..:? "CloudFormation")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ResourceCollection where
+  hashWithSalt _salt ResourceCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudFormation
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ResourceCollection where
+  rnf ResourceCollection' {..} =
+    Prelude.rnf cloudFormation
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToJSON ResourceCollection where
+  toJSON ResourceCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CloudFormation" Data..=)
+              Prelude.<$> cloudFormation,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ResourceCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/ResourceCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ResourceCollectionFilter.hs
@@ -0,0 +1,199 @@
+{-# 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.DevOpsGuru.Types.ResourceCollectionFilter
+-- 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.DevOpsGuru.Types.ResourceCollectionFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CloudFormationCollectionFilter
+import Amazonka.DevOpsGuru.Types.TagCollectionFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a filter used to specify which Amazon Web Services
+-- resources are analyzed for anomalous behavior by DevOps Guru.
+--
+-- /See:/ 'newResourceCollectionFilter' smart constructor.
+data ResourceCollectionFilter = ResourceCollectionFilter'
+  { -- | Information about Amazon Web Services CloudFormation stacks. You can use
+    -- up to 500 stacks to specify which Amazon Web Services resources in your
+    -- account to analyze. For more information, see
+    -- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+    -- in the /Amazon Web Services CloudFormation User Guide/.
+    cloudFormation :: Prelude.Maybe CloudFormationCollectionFilter,
+    -- | The Amazon Web Services tags used to filter the resources in the
+    -- resource collection.
+    --
+    -- Tags help you identify and organize your Amazon Web Services resources.
+    -- Many Amazon Web Services services support tagging, so you can assign the
+    -- same tag to resources from different services to indicate that the
+    -- resources are related. For example, you can assign the same tag to an
+    -- Amazon DynamoDB table resource that you assign to an Lambda function.
+    -- For more information about using tags, see the
+    -- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+    -- whitepaper.
+    --
+    -- Each Amazon Web Services tag has two parts.
+    --
+    -- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+    --     @Secret@). Tag /keys/ are case-sensitive.
+    --
+    -- -   An optional field known as a tag /value/ (for example,
+    --     @111122223333@, @Production@, or a team name). Omitting the tag
+    --     /value/ is the same as using an empty string. Like tag /keys/, tag
+    --     /values/ are case-sensitive.
+    --
+    -- Together these are known as /key/-/value/ pairs.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    tags :: Prelude.Maybe [TagCollectionFilter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceCollectionFilter' 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:
+--
+-- 'cloudFormation', 'resourceCollectionFilter_cloudFormation' - Information about Amazon Web Services CloudFormation stacks. You can use
+-- up to 500 stacks to specify which Amazon Web Services resources in your
+-- account to analyze. For more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+--
+-- 'tags', 'resourceCollectionFilter_tags' - The Amazon Web Services tags used to filter the resources in the
+-- resource collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+newResourceCollectionFilter ::
+  ResourceCollectionFilter
+newResourceCollectionFilter =
+  ResourceCollectionFilter'
+    { cloudFormation =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Information about Amazon Web Services CloudFormation stacks. You can use
+-- up to 500 stacks to specify which Amazon Web Services resources in your
+-- account to analyze. For more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+resourceCollectionFilter_cloudFormation :: Lens.Lens' ResourceCollectionFilter (Prelude.Maybe CloudFormationCollectionFilter)
+resourceCollectionFilter_cloudFormation = Lens.lens (\ResourceCollectionFilter' {cloudFormation} -> cloudFormation) (\s@ResourceCollectionFilter' {} a -> s {cloudFormation = a} :: ResourceCollectionFilter)
+
+-- | The Amazon Web Services tags used to filter the resources in the
+-- resource collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+resourceCollectionFilter_tags :: Lens.Lens' ResourceCollectionFilter (Prelude.Maybe [TagCollectionFilter])
+resourceCollectionFilter_tags = Lens.lens (\ResourceCollectionFilter' {tags} -> tags) (\s@ResourceCollectionFilter' {} a -> s {tags = a} :: ResourceCollectionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ResourceCollectionFilter where
+  parseJSON =
+    Data.withObject
+      "ResourceCollectionFilter"
+      ( \x ->
+          ResourceCollectionFilter'
+            Prelude.<$> (x Data..:? "CloudFormation")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ResourceCollectionFilter where
+  hashWithSalt _salt ResourceCollectionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudFormation
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ResourceCollectionFilter where
+  rnf ResourceCollectionFilter' {..} =
+    Prelude.rnf cloudFormation
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/DevOpsGuru/Types/ResourceCollectionType.hs b/gen/Amazonka/DevOpsGuru/Types/ResourceCollectionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ResourceCollectionType.hs
@@ -0,0 +1,76 @@
+{-# 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.DevOpsGuru.Types.ResourceCollectionType
+-- 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.DevOpsGuru.Types.ResourceCollectionType
+  ( ResourceCollectionType
+      ( ..,
+        ResourceCollectionType_AWS_CLOUD_FORMATION,
+        ResourceCollectionType_AWS_SERVICE,
+        ResourceCollectionType_AWS_TAGS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceCollectionType = ResourceCollectionType'
+  { fromResourceCollectionType ::
+      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 ResourceCollectionType_AWS_CLOUD_FORMATION :: ResourceCollectionType
+pattern ResourceCollectionType_AWS_CLOUD_FORMATION = ResourceCollectionType' "AWS_CLOUD_FORMATION"
+
+pattern ResourceCollectionType_AWS_SERVICE :: ResourceCollectionType
+pattern ResourceCollectionType_AWS_SERVICE = ResourceCollectionType' "AWS_SERVICE"
+
+pattern ResourceCollectionType_AWS_TAGS :: ResourceCollectionType
+pattern ResourceCollectionType_AWS_TAGS = ResourceCollectionType' "AWS_TAGS"
+
+{-# COMPLETE
+  ResourceCollectionType_AWS_CLOUD_FORMATION,
+  ResourceCollectionType_AWS_SERVICE,
+  ResourceCollectionType_AWS_TAGS,
+  ResourceCollectionType'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/ResourcePermission.hs b/gen/Amazonka/DevOpsGuru/Types/ResourcePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ResourcePermission.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.ResourcePermission
+-- 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.DevOpsGuru.Types.ResourcePermission
+  ( ResourcePermission
+      ( ..,
+        ResourcePermission_FULL_PERMISSION,
+        ResourcePermission_MISSING_PERMISSION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourcePermission = ResourcePermission'
+  { fromResourcePermission ::
+      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 ResourcePermission_FULL_PERMISSION :: ResourcePermission
+pattern ResourcePermission_FULL_PERMISSION = ResourcePermission' "FULL_PERMISSION"
+
+pattern ResourcePermission_MISSING_PERMISSION :: ResourcePermission
+pattern ResourcePermission_MISSING_PERMISSION = ResourcePermission' "MISSING_PERMISSION"
+
+{-# COMPLETE
+  ResourcePermission_FULL_PERMISSION,
+  ResourcePermission_MISSING_PERMISSION,
+  ResourcePermission'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/ResourceTypeFilter.hs b/gen/Amazonka/DevOpsGuru/Types/ResourceTypeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ResourceTypeFilter.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.DevOpsGuru.Types.ResourceTypeFilter
+-- 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.DevOpsGuru.Types.ResourceTypeFilter
+  ( ResourceTypeFilter
+      ( ..,
+        ResourceTypeFilter_CLOUDFRONT_DISTRIBUTION,
+        ResourceTypeFilter_DYNAMODB_TABLE,
+        ResourceTypeFilter_EC2_NAT_GATEWAY,
+        ResourceTypeFilter_ECS_CLUSTER,
+        ResourceTypeFilter_ECS_SERVICE,
+        ResourceTypeFilter_EKS_CLUSTER,
+        ResourceTypeFilter_ELASTICACHE_CACHE_CLUSTER,
+        ResourceTypeFilter_ELASTICSEARCH_DOMAIN,
+        ResourceTypeFilter_ELASTIC_BEANSTALK_ENVIRONMENT,
+        ResourceTypeFilter_ELASTIC_LOAD_BALANCER_LOAD_BALANCER,
+        ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_LOAD_BALANCER,
+        ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_TARGET_GROUP,
+        ResourceTypeFilter_KINESIS_STREAM,
+        ResourceTypeFilter_LAMBDA_FUNCTION,
+        ResourceTypeFilter_LOG_GROUPS,
+        ResourceTypeFilter_OPEN_SEARCH_SERVICE_DOMAIN,
+        ResourceTypeFilter_RDS_DB_CLUSTER,
+        ResourceTypeFilter_RDS_DB_INSTANCE,
+        ResourceTypeFilter_REDSHIFT_CLUSTER,
+        ResourceTypeFilter_ROUTE53_HEALTH_CHECK,
+        ResourceTypeFilter_ROUTE53_HOSTED_ZONE,
+        ResourceTypeFilter_S3_BUCKET,
+        ResourceTypeFilter_SAGEMAKER_ENDPOINT,
+        ResourceTypeFilter_SNS_TOPIC,
+        ResourceTypeFilter_SQS_QUEUE,
+        ResourceTypeFilter_STEP_FUNCTIONS_ACTIVITY,
+        ResourceTypeFilter_STEP_FUNCTIONS_STATE_MACHINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceTypeFilter = ResourceTypeFilter'
+  { fromResourceTypeFilter ::
+      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 ResourceTypeFilter_CLOUDFRONT_DISTRIBUTION :: ResourceTypeFilter
+pattern ResourceTypeFilter_CLOUDFRONT_DISTRIBUTION = ResourceTypeFilter' "CLOUDFRONT_DISTRIBUTION"
+
+pattern ResourceTypeFilter_DYNAMODB_TABLE :: ResourceTypeFilter
+pattern ResourceTypeFilter_DYNAMODB_TABLE = ResourceTypeFilter' "DYNAMODB_TABLE"
+
+pattern ResourceTypeFilter_EC2_NAT_GATEWAY :: ResourceTypeFilter
+pattern ResourceTypeFilter_EC2_NAT_GATEWAY = ResourceTypeFilter' "EC2_NAT_GATEWAY"
+
+pattern ResourceTypeFilter_ECS_CLUSTER :: ResourceTypeFilter
+pattern ResourceTypeFilter_ECS_CLUSTER = ResourceTypeFilter' "ECS_CLUSTER"
+
+pattern ResourceTypeFilter_ECS_SERVICE :: ResourceTypeFilter
+pattern ResourceTypeFilter_ECS_SERVICE = ResourceTypeFilter' "ECS_SERVICE"
+
+pattern ResourceTypeFilter_EKS_CLUSTER :: ResourceTypeFilter
+pattern ResourceTypeFilter_EKS_CLUSTER = ResourceTypeFilter' "EKS_CLUSTER"
+
+pattern ResourceTypeFilter_ELASTICACHE_CACHE_CLUSTER :: ResourceTypeFilter
+pattern ResourceTypeFilter_ELASTICACHE_CACHE_CLUSTER = ResourceTypeFilter' "ELASTICACHE_CACHE_CLUSTER"
+
+pattern ResourceTypeFilter_ELASTICSEARCH_DOMAIN :: ResourceTypeFilter
+pattern ResourceTypeFilter_ELASTICSEARCH_DOMAIN = ResourceTypeFilter' "ELASTICSEARCH_DOMAIN"
+
+pattern ResourceTypeFilter_ELASTIC_BEANSTALK_ENVIRONMENT :: ResourceTypeFilter
+pattern ResourceTypeFilter_ELASTIC_BEANSTALK_ENVIRONMENT = ResourceTypeFilter' "ELASTIC_BEANSTALK_ENVIRONMENT"
+
+pattern ResourceTypeFilter_ELASTIC_LOAD_BALANCER_LOAD_BALANCER :: ResourceTypeFilter
+pattern ResourceTypeFilter_ELASTIC_LOAD_BALANCER_LOAD_BALANCER = ResourceTypeFilter' "ELASTIC_LOAD_BALANCER_LOAD_BALANCER"
+
+pattern ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_LOAD_BALANCER :: ResourceTypeFilter
+pattern ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_LOAD_BALANCER = ResourceTypeFilter' "ELASTIC_LOAD_BALANCING_V2_LOAD_BALANCER"
+
+pattern ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_TARGET_GROUP :: ResourceTypeFilter
+pattern ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_TARGET_GROUP = ResourceTypeFilter' "ELASTIC_LOAD_BALANCING_V2_TARGET_GROUP"
+
+pattern ResourceTypeFilter_KINESIS_STREAM :: ResourceTypeFilter
+pattern ResourceTypeFilter_KINESIS_STREAM = ResourceTypeFilter' "KINESIS_STREAM"
+
+pattern ResourceTypeFilter_LAMBDA_FUNCTION :: ResourceTypeFilter
+pattern ResourceTypeFilter_LAMBDA_FUNCTION = ResourceTypeFilter' "LAMBDA_FUNCTION"
+
+pattern ResourceTypeFilter_LOG_GROUPS :: ResourceTypeFilter
+pattern ResourceTypeFilter_LOG_GROUPS = ResourceTypeFilter' "LOG_GROUPS"
+
+pattern ResourceTypeFilter_OPEN_SEARCH_SERVICE_DOMAIN :: ResourceTypeFilter
+pattern ResourceTypeFilter_OPEN_SEARCH_SERVICE_DOMAIN = ResourceTypeFilter' "OPEN_SEARCH_SERVICE_DOMAIN"
+
+pattern ResourceTypeFilter_RDS_DB_CLUSTER :: ResourceTypeFilter
+pattern ResourceTypeFilter_RDS_DB_CLUSTER = ResourceTypeFilter' "RDS_DB_CLUSTER"
+
+pattern ResourceTypeFilter_RDS_DB_INSTANCE :: ResourceTypeFilter
+pattern ResourceTypeFilter_RDS_DB_INSTANCE = ResourceTypeFilter' "RDS_DB_INSTANCE"
+
+pattern ResourceTypeFilter_REDSHIFT_CLUSTER :: ResourceTypeFilter
+pattern ResourceTypeFilter_REDSHIFT_CLUSTER = ResourceTypeFilter' "REDSHIFT_CLUSTER"
+
+pattern ResourceTypeFilter_ROUTE53_HEALTH_CHECK :: ResourceTypeFilter
+pattern ResourceTypeFilter_ROUTE53_HEALTH_CHECK = ResourceTypeFilter' "ROUTE53_HEALTH_CHECK"
+
+pattern ResourceTypeFilter_ROUTE53_HOSTED_ZONE :: ResourceTypeFilter
+pattern ResourceTypeFilter_ROUTE53_HOSTED_ZONE = ResourceTypeFilter' "ROUTE53_HOSTED_ZONE"
+
+pattern ResourceTypeFilter_S3_BUCKET :: ResourceTypeFilter
+pattern ResourceTypeFilter_S3_BUCKET = ResourceTypeFilter' "S3_BUCKET"
+
+pattern ResourceTypeFilter_SAGEMAKER_ENDPOINT :: ResourceTypeFilter
+pattern ResourceTypeFilter_SAGEMAKER_ENDPOINT = ResourceTypeFilter' "SAGEMAKER_ENDPOINT"
+
+pattern ResourceTypeFilter_SNS_TOPIC :: ResourceTypeFilter
+pattern ResourceTypeFilter_SNS_TOPIC = ResourceTypeFilter' "SNS_TOPIC"
+
+pattern ResourceTypeFilter_SQS_QUEUE :: ResourceTypeFilter
+pattern ResourceTypeFilter_SQS_QUEUE = ResourceTypeFilter' "SQS_QUEUE"
+
+pattern ResourceTypeFilter_STEP_FUNCTIONS_ACTIVITY :: ResourceTypeFilter
+pattern ResourceTypeFilter_STEP_FUNCTIONS_ACTIVITY = ResourceTypeFilter' "STEP_FUNCTIONS_ACTIVITY"
+
+pattern ResourceTypeFilter_STEP_FUNCTIONS_STATE_MACHINE :: ResourceTypeFilter
+pattern ResourceTypeFilter_STEP_FUNCTIONS_STATE_MACHINE = ResourceTypeFilter' "STEP_FUNCTIONS_STATE_MACHINE"
+
+{-# COMPLETE
+  ResourceTypeFilter_CLOUDFRONT_DISTRIBUTION,
+  ResourceTypeFilter_DYNAMODB_TABLE,
+  ResourceTypeFilter_EC2_NAT_GATEWAY,
+  ResourceTypeFilter_ECS_CLUSTER,
+  ResourceTypeFilter_ECS_SERVICE,
+  ResourceTypeFilter_EKS_CLUSTER,
+  ResourceTypeFilter_ELASTICACHE_CACHE_CLUSTER,
+  ResourceTypeFilter_ELASTICSEARCH_DOMAIN,
+  ResourceTypeFilter_ELASTIC_BEANSTALK_ENVIRONMENT,
+  ResourceTypeFilter_ELASTIC_LOAD_BALANCER_LOAD_BALANCER,
+  ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_LOAD_BALANCER,
+  ResourceTypeFilter_ELASTIC_LOAD_BALANCING_V2_TARGET_GROUP,
+  ResourceTypeFilter_KINESIS_STREAM,
+  ResourceTypeFilter_LAMBDA_FUNCTION,
+  ResourceTypeFilter_LOG_GROUPS,
+  ResourceTypeFilter_OPEN_SEARCH_SERVICE_DOMAIN,
+  ResourceTypeFilter_RDS_DB_CLUSTER,
+  ResourceTypeFilter_RDS_DB_INSTANCE,
+  ResourceTypeFilter_REDSHIFT_CLUSTER,
+  ResourceTypeFilter_ROUTE53_HEALTH_CHECK,
+  ResourceTypeFilter_ROUTE53_HOSTED_ZONE,
+  ResourceTypeFilter_S3_BUCKET,
+  ResourceTypeFilter_SAGEMAKER_ENDPOINT,
+  ResourceTypeFilter_SNS_TOPIC,
+  ResourceTypeFilter_SQS_QUEUE,
+  ResourceTypeFilter_STEP_FUNCTIONS_ACTIVITY,
+  ResourceTypeFilter_STEP_FUNCTIONS_STATE_MACHINE,
+  ResourceTypeFilter'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/SearchInsightsFilters.hs b/gen/Amazonka/DevOpsGuru/Types/SearchInsightsFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/SearchInsightsFilters.hs
@@ -0,0 +1,114 @@
+{-# 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.DevOpsGuru.Types.SearchInsightsFilters
+-- 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.DevOpsGuru.Types.SearchInsightsFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies one or more severity values and one or more status values that
+-- are used to search for insights.
+--
+-- /See:/ 'newSearchInsightsFilters' smart constructor.
+data SearchInsightsFilters = SearchInsightsFilters'
+  { resourceCollection :: Prelude.Maybe ResourceCollection,
+    -- | A collection of the names of Amazon Web Services services.
+    serviceCollection :: Prelude.Maybe ServiceCollection,
+    -- | An array of severity values used to search for insights.
+    severities :: Prelude.Maybe [InsightSeverity],
+    -- | An array of status values used to search for insights.
+    statuses :: Prelude.Maybe [InsightStatus]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchInsightsFilters' 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:
+--
+-- 'resourceCollection', 'searchInsightsFilters_resourceCollection' - Undocumented member.
+--
+-- 'serviceCollection', 'searchInsightsFilters_serviceCollection' - A collection of the names of Amazon Web Services services.
+--
+-- 'severities', 'searchInsightsFilters_severities' - An array of severity values used to search for insights.
+--
+-- 'statuses', 'searchInsightsFilters_statuses' - An array of status values used to search for insights.
+newSearchInsightsFilters ::
+  SearchInsightsFilters
+newSearchInsightsFilters =
+  SearchInsightsFilters'
+    { resourceCollection =
+        Prelude.Nothing,
+      serviceCollection = Prelude.Nothing,
+      severities = Prelude.Nothing,
+      statuses = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+searchInsightsFilters_resourceCollection :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe ResourceCollection)
+searchInsightsFilters_resourceCollection = Lens.lens (\SearchInsightsFilters' {resourceCollection} -> resourceCollection) (\s@SearchInsightsFilters' {} a -> s {resourceCollection = a} :: SearchInsightsFilters)
+
+-- | A collection of the names of Amazon Web Services services.
+searchInsightsFilters_serviceCollection :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe ServiceCollection)
+searchInsightsFilters_serviceCollection = Lens.lens (\SearchInsightsFilters' {serviceCollection} -> serviceCollection) (\s@SearchInsightsFilters' {} a -> s {serviceCollection = a} :: SearchInsightsFilters)
+
+-- | An array of severity values used to search for insights.
+searchInsightsFilters_severities :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe [InsightSeverity])
+searchInsightsFilters_severities = Lens.lens (\SearchInsightsFilters' {severities} -> severities) (\s@SearchInsightsFilters' {} a -> s {severities = a} :: SearchInsightsFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of status values used to search for insights.
+searchInsightsFilters_statuses :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe [InsightStatus])
+searchInsightsFilters_statuses = Lens.lens (\SearchInsightsFilters' {statuses} -> statuses) (\s@SearchInsightsFilters' {} a -> s {statuses = a} :: SearchInsightsFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable SearchInsightsFilters where
+  hashWithSalt _salt SearchInsightsFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceCollection
+      `Prelude.hashWithSalt` serviceCollection
+      `Prelude.hashWithSalt` severities
+      `Prelude.hashWithSalt` statuses
+
+instance Prelude.NFData SearchInsightsFilters where
+  rnf SearchInsightsFilters' {..} =
+    Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf serviceCollection
+      `Prelude.seq` Prelude.rnf severities
+      `Prelude.seq` Prelude.rnf statuses
+
+instance Data.ToJSON SearchInsightsFilters where
+  toJSON SearchInsightsFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ResourceCollection" Data..=)
+              Prelude.<$> resourceCollection,
+            ("ServiceCollection" Data..=)
+              Prelude.<$> serviceCollection,
+            ("Severities" Data..=) Prelude.<$> severities,
+            ("Statuses" Data..=) Prelude.<$> statuses
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/SearchOrganizationInsightsFilters.hs b/gen/Amazonka/DevOpsGuru/Types/SearchOrganizationInsightsFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/SearchOrganizationInsightsFilters.hs
@@ -0,0 +1,124 @@
+{-# 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.DevOpsGuru.Types.SearchOrganizationInsightsFilters
+-- 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.DevOpsGuru.Types.SearchOrganizationInsightsFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightSeverity
+import Amazonka.DevOpsGuru.Types.InsightStatus
+import Amazonka.DevOpsGuru.Types.ResourceCollection
+import Amazonka.DevOpsGuru.Types.ServiceCollection
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters you can use to specify which events are returned when
+-- @ListEvents@ is called.
+--
+-- /See:/ 'newSearchOrganizationInsightsFilters' smart constructor.
+data SearchOrganizationInsightsFilters = SearchOrganizationInsightsFilters'
+  { resourceCollection :: Prelude.Maybe ResourceCollection,
+    serviceCollection :: Prelude.Maybe ServiceCollection,
+    -- | An array of severity values used to search for insights.
+    severities :: Prelude.Maybe [InsightSeverity],
+    -- | An array of status values used to search for insights.
+    statuses :: Prelude.Maybe [InsightStatus]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchOrganizationInsightsFilters' 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:
+--
+-- 'resourceCollection', 'searchOrganizationInsightsFilters_resourceCollection' - Undocumented member.
+--
+-- 'serviceCollection', 'searchOrganizationInsightsFilters_serviceCollection' - Undocumented member.
+--
+-- 'severities', 'searchOrganizationInsightsFilters_severities' - An array of severity values used to search for insights.
+--
+-- 'statuses', 'searchOrganizationInsightsFilters_statuses' - An array of status values used to search for insights.
+newSearchOrganizationInsightsFilters ::
+  SearchOrganizationInsightsFilters
+newSearchOrganizationInsightsFilters =
+  SearchOrganizationInsightsFilters'
+    { resourceCollection =
+        Prelude.Nothing,
+      serviceCollection = Prelude.Nothing,
+      severities = Prelude.Nothing,
+      statuses = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+searchOrganizationInsightsFilters_resourceCollection :: Lens.Lens' SearchOrganizationInsightsFilters (Prelude.Maybe ResourceCollection)
+searchOrganizationInsightsFilters_resourceCollection = Lens.lens (\SearchOrganizationInsightsFilters' {resourceCollection} -> resourceCollection) (\s@SearchOrganizationInsightsFilters' {} a -> s {resourceCollection = a} :: SearchOrganizationInsightsFilters)
+
+-- | Undocumented member.
+searchOrganizationInsightsFilters_serviceCollection :: Lens.Lens' SearchOrganizationInsightsFilters (Prelude.Maybe ServiceCollection)
+searchOrganizationInsightsFilters_serviceCollection = Lens.lens (\SearchOrganizationInsightsFilters' {serviceCollection} -> serviceCollection) (\s@SearchOrganizationInsightsFilters' {} a -> s {serviceCollection = a} :: SearchOrganizationInsightsFilters)
+
+-- | An array of severity values used to search for insights.
+searchOrganizationInsightsFilters_severities :: Lens.Lens' SearchOrganizationInsightsFilters (Prelude.Maybe [InsightSeverity])
+searchOrganizationInsightsFilters_severities = Lens.lens (\SearchOrganizationInsightsFilters' {severities} -> severities) (\s@SearchOrganizationInsightsFilters' {} a -> s {severities = a} :: SearchOrganizationInsightsFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of status values used to search for insights.
+searchOrganizationInsightsFilters_statuses :: Lens.Lens' SearchOrganizationInsightsFilters (Prelude.Maybe [InsightStatus])
+searchOrganizationInsightsFilters_statuses = Lens.lens (\SearchOrganizationInsightsFilters' {statuses} -> statuses) (\s@SearchOrganizationInsightsFilters' {} a -> s {statuses = a} :: SearchOrganizationInsightsFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    SearchOrganizationInsightsFilters
+  where
+  hashWithSalt
+    _salt
+    SearchOrganizationInsightsFilters' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceCollection
+        `Prelude.hashWithSalt` serviceCollection
+        `Prelude.hashWithSalt` severities
+        `Prelude.hashWithSalt` statuses
+
+instance
+  Prelude.NFData
+    SearchOrganizationInsightsFilters
+  where
+  rnf SearchOrganizationInsightsFilters' {..} =
+    Prelude.rnf resourceCollection
+      `Prelude.seq` Prelude.rnf serviceCollection
+      `Prelude.seq` Prelude.rnf severities
+      `Prelude.seq` Prelude.rnf statuses
+
+instance
+  Data.ToJSON
+    SearchOrganizationInsightsFilters
+  where
+  toJSON SearchOrganizationInsightsFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ResourceCollection" Data..=)
+              Prelude.<$> resourceCollection,
+            ("ServiceCollection" Data..=)
+              Prelude.<$> serviceCollection,
+            ("Severities" Data..=) Prelude.<$> severities,
+            ("Statuses" Data..=) Prelude.<$> statuses
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ServiceCollection.hs b/gen/Amazonka/DevOpsGuru/Types/ServiceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ServiceCollection.hs
@@ -0,0 +1,79 @@
+{-# 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.DevOpsGuru.Types.ServiceCollection
+-- 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.DevOpsGuru.Types.ServiceCollection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.ServiceName
+import qualified Amazonka.Prelude as Prelude
+
+-- | A collection of the names of Amazon Web Services services.
+--
+-- /See:/ 'newServiceCollection' smart constructor.
+data ServiceCollection = ServiceCollection'
+  { -- | An array of strings that each specifies the name of an Amazon Web
+    -- Services service.
+    serviceNames :: Prelude.Maybe [ServiceName]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceCollection' 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:
+--
+-- 'serviceNames', 'serviceCollection_serviceNames' - An array of strings that each specifies the name of an Amazon Web
+-- Services service.
+newServiceCollection ::
+  ServiceCollection
+newServiceCollection =
+  ServiceCollection' {serviceNames = Prelude.Nothing}
+
+-- | An array of strings that each specifies the name of an Amazon Web
+-- Services service.
+serviceCollection_serviceNames :: Lens.Lens' ServiceCollection (Prelude.Maybe [ServiceName])
+serviceCollection_serviceNames = Lens.lens (\ServiceCollection' {serviceNames} -> serviceNames) (\s@ServiceCollection' {} a -> s {serviceNames = a} :: ServiceCollection) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ServiceCollection where
+  parseJSON =
+    Data.withObject
+      "ServiceCollection"
+      ( \x ->
+          ServiceCollection'
+            Prelude.<$> (x Data..:? "ServiceNames" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ServiceCollection where
+  hashWithSalt _salt ServiceCollection' {..} =
+    _salt `Prelude.hashWithSalt` serviceNames
+
+instance Prelude.NFData ServiceCollection where
+  rnf ServiceCollection' {..} = Prelude.rnf serviceNames
+
+instance Data.ToJSON ServiceCollection where
+  toJSON ServiceCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("ServiceNames" Data..=) Prelude.<$> serviceNames]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/ServiceHealth.hs b/gen/Amazonka/DevOpsGuru/Types/ServiceHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ServiceHealth.hs
@@ -0,0 +1,108 @@
+{-# 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.DevOpsGuru.Types.ServiceHealth
+-- 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.DevOpsGuru.Types.ServiceHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.ServiceInsightHealth
+import Amazonka.DevOpsGuru.Types.ServiceName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the health of an Amazon Web Services service.
+--
+-- /See:/ 'newServiceHealth' smart constructor.
+data ServiceHealth = ServiceHealth'
+  { -- | Number of resources that DevOps Guru is monitoring in an analyzed Amazon
+    -- Web Services service.
+    analyzedResourceCount :: Prelude.Maybe Prelude.Integer,
+    -- | Represents the health of an Amazon Web Services service. This is a
+    -- @ServiceInsightHealth@ that contains the number of open proactive and
+    -- reactive insights for this service.
+    insight :: Prelude.Maybe ServiceInsightHealth,
+    -- | The name of the Amazon Web Services service.
+    serviceName :: Prelude.Maybe ServiceName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceHealth' 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:
+--
+-- 'analyzedResourceCount', 'serviceHealth_analyzedResourceCount' - Number of resources that DevOps Guru is monitoring in an analyzed Amazon
+-- Web Services service.
+--
+-- 'insight', 'serviceHealth_insight' - Represents the health of an Amazon Web Services service. This is a
+-- @ServiceInsightHealth@ that contains the number of open proactive and
+-- reactive insights for this service.
+--
+-- 'serviceName', 'serviceHealth_serviceName' - The name of the Amazon Web Services service.
+newServiceHealth ::
+  ServiceHealth
+newServiceHealth =
+  ServiceHealth'
+    { analyzedResourceCount =
+        Prelude.Nothing,
+      insight = Prelude.Nothing,
+      serviceName = Prelude.Nothing
+    }
+
+-- | Number of resources that DevOps Guru is monitoring in an analyzed Amazon
+-- Web Services service.
+serviceHealth_analyzedResourceCount :: Lens.Lens' ServiceHealth (Prelude.Maybe Prelude.Integer)
+serviceHealth_analyzedResourceCount = Lens.lens (\ServiceHealth' {analyzedResourceCount} -> analyzedResourceCount) (\s@ServiceHealth' {} a -> s {analyzedResourceCount = a} :: ServiceHealth)
+
+-- | Represents the health of an Amazon Web Services service. This is a
+-- @ServiceInsightHealth@ that contains the number of open proactive and
+-- reactive insights for this service.
+serviceHealth_insight :: Lens.Lens' ServiceHealth (Prelude.Maybe ServiceInsightHealth)
+serviceHealth_insight = Lens.lens (\ServiceHealth' {insight} -> insight) (\s@ServiceHealth' {} a -> s {insight = a} :: ServiceHealth)
+
+-- | The name of the Amazon Web Services service.
+serviceHealth_serviceName :: Lens.Lens' ServiceHealth (Prelude.Maybe ServiceName)
+serviceHealth_serviceName = Lens.lens (\ServiceHealth' {serviceName} -> serviceName) (\s@ServiceHealth' {} a -> s {serviceName = a} :: ServiceHealth)
+
+instance Data.FromJSON ServiceHealth where
+  parseJSON =
+    Data.withObject
+      "ServiceHealth"
+      ( \x ->
+          ServiceHealth'
+            Prelude.<$> (x Data..:? "AnalyzedResourceCount")
+            Prelude.<*> (x Data..:? "Insight")
+            Prelude.<*> (x Data..:? "ServiceName")
+      )
+
+instance Prelude.Hashable ServiceHealth where
+  hashWithSalt _salt ServiceHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` analyzedResourceCount
+      `Prelude.hashWithSalt` insight
+      `Prelude.hashWithSalt` serviceName
+
+instance Prelude.NFData ServiceHealth where
+  rnf ServiceHealth' {..} =
+    Prelude.rnf analyzedResourceCount
+      `Prelude.seq` Prelude.rnf insight
+      `Prelude.seq` Prelude.rnf serviceName
diff --git a/gen/Amazonka/DevOpsGuru/Types/ServiceInsightHealth.hs b/gen/Amazonka/DevOpsGuru/Types/ServiceInsightHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ServiceInsightHealth.hs
@@ -0,0 +1,86 @@
+{-# 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.DevOpsGuru.Types.ServiceInsightHealth
+-- 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.DevOpsGuru.Types.ServiceInsightHealth 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 open proactive and reactive insights in an
+-- analyzed Amazon Web Services service.
+--
+-- /See:/ 'newServiceInsightHealth' smart constructor.
+data ServiceInsightHealth = ServiceInsightHealth'
+  { -- | The number of open proactive insights in the Amazon Web Services service
+    openProactiveInsights :: Prelude.Maybe Prelude.Int,
+    -- | The number of open reactive insights in the Amazon Web Services service
+    openReactiveInsights :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceInsightHealth' 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:
+--
+-- 'openProactiveInsights', 'serviceInsightHealth_openProactiveInsights' - The number of open proactive insights in the Amazon Web Services service
+--
+-- 'openReactiveInsights', 'serviceInsightHealth_openReactiveInsights' - The number of open reactive insights in the Amazon Web Services service
+newServiceInsightHealth ::
+  ServiceInsightHealth
+newServiceInsightHealth =
+  ServiceInsightHealth'
+    { openProactiveInsights =
+        Prelude.Nothing,
+      openReactiveInsights = Prelude.Nothing
+    }
+
+-- | The number of open proactive insights in the Amazon Web Services service
+serviceInsightHealth_openProactiveInsights :: Lens.Lens' ServiceInsightHealth (Prelude.Maybe Prelude.Int)
+serviceInsightHealth_openProactiveInsights = Lens.lens (\ServiceInsightHealth' {openProactiveInsights} -> openProactiveInsights) (\s@ServiceInsightHealth' {} a -> s {openProactiveInsights = a} :: ServiceInsightHealth)
+
+-- | The number of open reactive insights in the Amazon Web Services service
+serviceInsightHealth_openReactiveInsights :: Lens.Lens' ServiceInsightHealth (Prelude.Maybe Prelude.Int)
+serviceInsightHealth_openReactiveInsights = Lens.lens (\ServiceInsightHealth' {openReactiveInsights} -> openReactiveInsights) (\s@ServiceInsightHealth' {} a -> s {openReactiveInsights = a} :: ServiceInsightHealth)
+
+instance Data.FromJSON ServiceInsightHealth where
+  parseJSON =
+    Data.withObject
+      "ServiceInsightHealth"
+      ( \x ->
+          ServiceInsightHealth'
+            Prelude.<$> (x Data..:? "OpenProactiveInsights")
+            Prelude.<*> (x Data..:? "OpenReactiveInsights")
+      )
+
+instance Prelude.Hashable ServiceInsightHealth where
+  hashWithSalt _salt ServiceInsightHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` openProactiveInsights
+      `Prelude.hashWithSalt` openReactiveInsights
+
+instance Prelude.NFData ServiceInsightHealth where
+  rnf ServiceInsightHealth' {..} =
+    Prelude.rnf openProactiveInsights
+      `Prelude.seq` Prelude.rnf openReactiveInsights
diff --git a/gen/Amazonka/DevOpsGuru/Types/ServiceIntegrationConfig.hs b/gen/Amazonka/DevOpsGuru/Types/ServiceIntegrationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ServiceIntegrationConfig.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.DevOpsGuru.Types.ServiceIntegrationConfig
+-- 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.DevOpsGuru.Types.ServiceIntegrationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegration
+import Amazonka.DevOpsGuru.Types.OpsCenterIntegration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the integration of DevOps Guru with another Amazon Web
+-- Services service, such as Amazon Web Services Systems Manager.
+--
+-- /See:/ 'newServiceIntegrationConfig' smart constructor.
+data ServiceIntegrationConfig = ServiceIntegrationConfig'
+  { -- | Information about whether DevOps Guru is configured to perform log
+    -- anomaly detection on Amazon CloudWatch log groups.
+    logsAnomalyDetection :: Prelude.Maybe LogsAnomalyDetectionIntegration,
+    -- | Information about whether DevOps Guru is configured to create an OpsItem
+    -- in Amazon Web Services Systems Manager OpsCenter for each created
+    -- insight.
+    opsCenter :: Prelude.Maybe OpsCenterIntegration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceIntegrationConfig' 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:
+--
+-- 'logsAnomalyDetection', 'serviceIntegrationConfig_logsAnomalyDetection' - Information about whether DevOps Guru is configured to perform log
+-- anomaly detection on Amazon CloudWatch log groups.
+--
+-- 'opsCenter', 'serviceIntegrationConfig_opsCenter' - Information about whether DevOps Guru is configured to create an OpsItem
+-- in Amazon Web Services Systems Manager OpsCenter for each created
+-- insight.
+newServiceIntegrationConfig ::
+  ServiceIntegrationConfig
+newServiceIntegrationConfig =
+  ServiceIntegrationConfig'
+    { logsAnomalyDetection =
+        Prelude.Nothing,
+      opsCenter = Prelude.Nothing
+    }
+
+-- | Information about whether DevOps Guru is configured to perform log
+-- anomaly detection on Amazon CloudWatch log groups.
+serviceIntegrationConfig_logsAnomalyDetection :: Lens.Lens' ServiceIntegrationConfig (Prelude.Maybe LogsAnomalyDetectionIntegration)
+serviceIntegrationConfig_logsAnomalyDetection = Lens.lens (\ServiceIntegrationConfig' {logsAnomalyDetection} -> logsAnomalyDetection) (\s@ServiceIntegrationConfig' {} a -> s {logsAnomalyDetection = a} :: ServiceIntegrationConfig)
+
+-- | Information about whether DevOps Guru is configured to create an OpsItem
+-- in Amazon Web Services Systems Manager OpsCenter for each created
+-- insight.
+serviceIntegrationConfig_opsCenter :: Lens.Lens' ServiceIntegrationConfig (Prelude.Maybe OpsCenterIntegration)
+serviceIntegrationConfig_opsCenter = Lens.lens (\ServiceIntegrationConfig' {opsCenter} -> opsCenter) (\s@ServiceIntegrationConfig' {} a -> s {opsCenter = a} :: ServiceIntegrationConfig)
+
+instance Data.FromJSON ServiceIntegrationConfig where
+  parseJSON =
+    Data.withObject
+      "ServiceIntegrationConfig"
+      ( \x ->
+          ServiceIntegrationConfig'
+            Prelude.<$> (x Data..:? "LogsAnomalyDetection")
+            Prelude.<*> (x Data..:? "OpsCenter")
+      )
+
+instance Prelude.Hashable ServiceIntegrationConfig where
+  hashWithSalt _salt ServiceIntegrationConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` logsAnomalyDetection
+      `Prelude.hashWithSalt` opsCenter
+
+instance Prelude.NFData ServiceIntegrationConfig where
+  rnf ServiceIntegrationConfig' {..} =
+    Prelude.rnf logsAnomalyDetection
+      `Prelude.seq` Prelude.rnf opsCenter
diff --git a/gen/Amazonka/DevOpsGuru/Types/ServiceName.hs b/gen/Amazonka/DevOpsGuru/Types/ServiceName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ServiceName.hs
@@ -0,0 +1,186 @@
+{-# 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.DevOpsGuru.Types.ServiceName
+-- 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.DevOpsGuru.Types.ServiceName
+  ( ServiceName
+      ( ..,
+        ServiceName_API_GATEWAY,
+        ServiceName_APPLICATION_ELB,
+        ServiceName_AUTO_SCALING_GROUP,
+        ServiceName_CLOUD_FRONT,
+        ServiceName_DYNAMO_DB,
+        ServiceName_EC2,
+        ServiceName_ECS,
+        ServiceName_EKS,
+        ServiceName_ELASTIC_BEANSTALK,
+        ServiceName_ELASTI_CACHE,
+        ServiceName_ELB,
+        ServiceName_ES,
+        ServiceName_KINESIS,
+        ServiceName_LAMBDA,
+        ServiceName_NAT_GATEWAY,
+        ServiceName_NETWORK_ELB,
+        ServiceName_RDS,
+        ServiceName_REDSHIFT,
+        ServiceName_ROUTE_53,
+        ServiceName_S3,
+        ServiceName_SAGE_MAKER,
+        ServiceName_SNS,
+        ServiceName_SQS,
+        ServiceName_STEP_FUNCTIONS,
+        ServiceName_SWF
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceName = ServiceName'
+  { fromServiceName ::
+      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 ServiceName_API_GATEWAY :: ServiceName
+pattern ServiceName_API_GATEWAY = ServiceName' "API_GATEWAY"
+
+pattern ServiceName_APPLICATION_ELB :: ServiceName
+pattern ServiceName_APPLICATION_ELB = ServiceName' "APPLICATION_ELB"
+
+pattern ServiceName_AUTO_SCALING_GROUP :: ServiceName
+pattern ServiceName_AUTO_SCALING_GROUP = ServiceName' "AUTO_SCALING_GROUP"
+
+pattern ServiceName_CLOUD_FRONT :: ServiceName
+pattern ServiceName_CLOUD_FRONT = ServiceName' "CLOUD_FRONT"
+
+pattern ServiceName_DYNAMO_DB :: ServiceName
+pattern ServiceName_DYNAMO_DB = ServiceName' "DYNAMO_DB"
+
+pattern ServiceName_EC2 :: ServiceName
+pattern ServiceName_EC2 = ServiceName' "EC2"
+
+pattern ServiceName_ECS :: ServiceName
+pattern ServiceName_ECS = ServiceName' "ECS"
+
+pattern ServiceName_EKS :: ServiceName
+pattern ServiceName_EKS = ServiceName' "EKS"
+
+pattern ServiceName_ELASTIC_BEANSTALK :: ServiceName
+pattern ServiceName_ELASTIC_BEANSTALK = ServiceName' "ELASTIC_BEANSTALK"
+
+pattern ServiceName_ELASTI_CACHE :: ServiceName
+pattern ServiceName_ELASTI_CACHE = ServiceName' "ELASTI_CACHE"
+
+pattern ServiceName_ELB :: ServiceName
+pattern ServiceName_ELB = ServiceName' "ELB"
+
+pattern ServiceName_ES :: ServiceName
+pattern ServiceName_ES = ServiceName' "ES"
+
+pattern ServiceName_KINESIS :: ServiceName
+pattern ServiceName_KINESIS = ServiceName' "KINESIS"
+
+pattern ServiceName_LAMBDA :: ServiceName
+pattern ServiceName_LAMBDA = ServiceName' "LAMBDA"
+
+pattern ServiceName_NAT_GATEWAY :: ServiceName
+pattern ServiceName_NAT_GATEWAY = ServiceName' "NAT_GATEWAY"
+
+pattern ServiceName_NETWORK_ELB :: ServiceName
+pattern ServiceName_NETWORK_ELB = ServiceName' "NETWORK_ELB"
+
+pattern ServiceName_RDS :: ServiceName
+pattern ServiceName_RDS = ServiceName' "RDS"
+
+pattern ServiceName_REDSHIFT :: ServiceName
+pattern ServiceName_REDSHIFT = ServiceName' "REDSHIFT"
+
+pattern ServiceName_ROUTE_53 :: ServiceName
+pattern ServiceName_ROUTE_53 = ServiceName' "ROUTE_53"
+
+pattern ServiceName_S3 :: ServiceName
+pattern ServiceName_S3 = ServiceName' "S3"
+
+pattern ServiceName_SAGE_MAKER :: ServiceName
+pattern ServiceName_SAGE_MAKER = ServiceName' "SAGE_MAKER"
+
+pattern ServiceName_SNS :: ServiceName
+pattern ServiceName_SNS = ServiceName' "SNS"
+
+pattern ServiceName_SQS :: ServiceName
+pattern ServiceName_SQS = ServiceName' "SQS"
+
+pattern ServiceName_STEP_FUNCTIONS :: ServiceName
+pattern ServiceName_STEP_FUNCTIONS = ServiceName' "STEP_FUNCTIONS"
+
+pattern ServiceName_SWF :: ServiceName
+pattern ServiceName_SWF = ServiceName' "SWF"
+
+{-# COMPLETE
+  ServiceName_API_GATEWAY,
+  ServiceName_APPLICATION_ELB,
+  ServiceName_AUTO_SCALING_GROUP,
+  ServiceName_CLOUD_FRONT,
+  ServiceName_DYNAMO_DB,
+  ServiceName_EC2,
+  ServiceName_ECS,
+  ServiceName_EKS,
+  ServiceName_ELASTIC_BEANSTALK,
+  ServiceName_ELASTI_CACHE,
+  ServiceName_ELB,
+  ServiceName_ES,
+  ServiceName_KINESIS,
+  ServiceName_LAMBDA,
+  ServiceName_NAT_GATEWAY,
+  ServiceName_NETWORK_ELB,
+  ServiceName_RDS,
+  ServiceName_REDSHIFT,
+  ServiceName_ROUTE_53,
+  ServiceName_S3,
+  ServiceName_SAGE_MAKER,
+  ServiceName_SNS,
+  ServiceName_SQS,
+  ServiceName_STEP_FUNCTIONS,
+  ServiceName_SWF,
+  ServiceName'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/ServiceResourceCost.hs b/gen/Amazonka/DevOpsGuru/Types/ServiceResourceCost.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/ServiceResourceCost.hs
@@ -0,0 +1,152 @@
+{-# 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.DevOpsGuru.Types.ServiceResourceCost
+-- 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.DevOpsGuru.Types.ServiceResourceCost where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.CostEstimationServiceResourceState
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains information about the estimated monthly cost to
+-- analyze an Amazon Web Services resource. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/cost-estimate.html Estimate your Amazon DevOps Guru costs>
+-- and
+-- <http://aws.amazon.com/devops-guru/pricing/ Amazon DevOps Guru pricing>.
+--
+-- /See:/ 'newServiceResourceCost' smart constructor.
+data ServiceResourceCost = ServiceResourceCost'
+  { -- | The total estimated monthly cost to analyze the active resources for
+    -- this resource.
+    cost :: Prelude.Maybe Prelude.Double,
+    -- | The number of active resources analyzed for this service to create a
+    -- monthly cost estimate.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The state of the resource. The resource is @ACTIVE@ if it produces
+    -- metrics, events, or logs within an hour, otherwise it is @INACTIVE@. You
+    -- pay for the number of active Amazon Web Services resource hours analyzed
+    -- for each resource. Inactive resources are not charged.
+    state :: Prelude.Maybe CostEstimationServiceResourceState,
+    -- | The type of the Amazon Web Services resource.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The price per hour to analyze the resources in the service. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/devops-guru/latest/userguide/cost-estimate.html Estimate your Amazon DevOps Guru costs>
+    -- and
+    -- <http://aws.amazon.com/devops-guru/pricing/ Amazon DevOps Guru pricing>.
+    unitCost :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceResourceCost' 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:
+--
+-- 'cost', 'serviceResourceCost_cost' - The total estimated monthly cost to analyze the active resources for
+-- this resource.
+--
+-- 'count', 'serviceResourceCost_count' - The number of active resources analyzed for this service to create a
+-- monthly cost estimate.
+--
+-- 'state', 'serviceResourceCost_state' - The state of the resource. The resource is @ACTIVE@ if it produces
+-- metrics, events, or logs within an hour, otherwise it is @INACTIVE@. You
+-- pay for the number of active Amazon Web Services resource hours analyzed
+-- for each resource. Inactive resources are not charged.
+--
+-- 'type'', 'serviceResourceCost_type' - The type of the Amazon Web Services resource.
+--
+-- 'unitCost', 'serviceResourceCost_unitCost' - The price per hour to analyze the resources in the service. For more
+-- information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/cost-estimate.html Estimate your Amazon DevOps Guru costs>
+-- and
+-- <http://aws.amazon.com/devops-guru/pricing/ Amazon DevOps Guru pricing>.
+newServiceResourceCost ::
+  ServiceResourceCost
+newServiceResourceCost =
+  ServiceResourceCost'
+    { cost = Prelude.Nothing,
+      count = Prelude.Nothing,
+      state = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      unitCost = Prelude.Nothing
+    }
+
+-- | The total estimated monthly cost to analyze the active resources for
+-- this resource.
+serviceResourceCost_cost :: Lens.Lens' ServiceResourceCost (Prelude.Maybe Prelude.Double)
+serviceResourceCost_cost = Lens.lens (\ServiceResourceCost' {cost} -> cost) (\s@ServiceResourceCost' {} a -> s {cost = a} :: ServiceResourceCost)
+
+-- | The number of active resources analyzed for this service to create a
+-- monthly cost estimate.
+serviceResourceCost_count :: Lens.Lens' ServiceResourceCost (Prelude.Maybe Prelude.Int)
+serviceResourceCost_count = Lens.lens (\ServiceResourceCost' {count} -> count) (\s@ServiceResourceCost' {} a -> s {count = a} :: ServiceResourceCost)
+
+-- | The state of the resource. The resource is @ACTIVE@ if it produces
+-- metrics, events, or logs within an hour, otherwise it is @INACTIVE@. You
+-- pay for the number of active Amazon Web Services resource hours analyzed
+-- for each resource. Inactive resources are not charged.
+serviceResourceCost_state :: Lens.Lens' ServiceResourceCost (Prelude.Maybe CostEstimationServiceResourceState)
+serviceResourceCost_state = Lens.lens (\ServiceResourceCost' {state} -> state) (\s@ServiceResourceCost' {} a -> s {state = a} :: ServiceResourceCost)
+
+-- | The type of the Amazon Web Services resource.
+serviceResourceCost_type :: Lens.Lens' ServiceResourceCost (Prelude.Maybe Prelude.Text)
+serviceResourceCost_type = Lens.lens (\ServiceResourceCost' {type'} -> type') (\s@ServiceResourceCost' {} a -> s {type' = a} :: ServiceResourceCost)
+
+-- | The price per hour to analyze the resources in the service. For more
+-- information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/cost-estimate.html Estimate your Amazon DevOps Guru costs>
+-- and
+-- <http://aws.amazon.com/devops-guru/pricing/ Amazon DevOps Guru pricing>.
+serviceResourceCost_unitCost :: Lens.Lens' ServiceResourceCost (Prelude.Maybe Prelude.Double)
+serviceResourceCost_unitCost = Lens.lens (\ServiceResourceCost' {unitCost} -> unitCost) (\s@ServiceResourceCost' {} a -> s {unitCost = a} :: ServiceResourceCost)
+
+instance Data.FromJSON ServiceResourceCost where
+  parseJSON =
+    Data.withObject
+      "ServiceResourceCost"
+      ( \x ->
+          ServiceResourceCost'
+            Prelude.<$> (x Data..:? "Cost")
+            Prelude.<*> (x Data..:? "Count")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "UnitCost")
+      )
+
+instance Prelude.Hashable ServiceResourceCost where
+  hashWithSalt _salt ServiceResourceCost' {..} =
+    _salt
+      `Prelude.hashWithSalt` cost
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` unitCost
+
+instance Prelude.NFData ServiceResourceCost where
+  rnf ServiceResourceCost' {..} =
+    Prelude.rnf cost
+      `Prelude.seq` Prelude.rnf count
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf unitCost
diff --git a/gen/Amazonka/DevOpsGuru/Types/SnsChannelConfig.hs b/gen/Amazonka/DevOpsGuru/Types/SnsChannelConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/SnsChannelConfig.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.DevOpsGuru.Types.SnsChannelConfig
+-- 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.DevOpsGuru.Types.SnsChannelConfig 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 Amazon Resource Name (ARN) of an Amazon Simple Notification
+-- Service topic.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. DevOps Guru only
+-- supports standard SNS topics. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-required-permissions.html Permissions for cross account Amazon SNS topics>.
+--
+-- If you use an Amazon SNS topic in another account, you must attach a
+-- policy to it that grants DevOps Guru permission to it notifications.
+-- DevOps Guru adds the required policy on your behalf to send
+-- notifications using Amazon SNS in your account. For more information,
+-- see Permissions for cross account Amazon SNS topics.
+--
+-- If you use an Amazon SNS topic that is encrypted by an Amazon Web
+-- Services Key Management Service customer-managed key (CMK), then you
+-- must add permissions to the CMK. For more information, see
+-- <https://docs.aws.amazon.com/devops-guru/latest/userguide/sns-kms-permissions.html Permissions for Amazon Web Services KMS–encrypted Amazon SNS topics>.
+--
+-- /See:/ 'newSnsChannelConfig' smart constructor.
+data SnsChannelConfig = SnsChannelConfig'
+  { -- | The Amazon Resource Name (ARN) of an Amazon Simple Notification Service
+    -- topic.
+    topicArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnsChannelConfig' 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:
+--
+-- 'topicArn', 'snsChannelConfig_topicArn' - The Amazon Resource Name (ARN) of an Amazon Simple Notification Service
+-- topic.
+newSnsChannelConfig ::
+  SnsChannelConfig
+newSnsChannelConfig =
+  SnsChannelConfig' {topicArn = Prelude.Nothing}
+
+-- | The Amazon Resource Name (ARN) of an Amazon Simple Notification Service
+-- topic.
+snsChannelConfig_topicArn :: Lens.Lens' SnsChannelConfig (Prelude.Maybe Prelude.Text)
+snsChannelConfig_topicArn = Lens.lens (\SnsChannelConfig' {topicArn} -> topicArn) (\s@SnsChannelConfig' {} a -> s {topicArn = a} :: SnsChannelConfig)
+
+instance Data.FromJSON SnsChannelConfig where
+  parseJSON =
+    Data.withObject
+      "SnsChannelConfig"
+      ( \x ->
+          SnsChannelConfig'
+            Prelude.<$> (x Data..:? "TopicArn")
+      )
+
+instance Prelude.Hashable SnsChannelConfig where
+  hashWithSalt _salt SnsChannelConfig' {..} =
+    _salt `Prelude.hashWithSalt` topicArn
+
+instance Prelude.NFData SnsChannelConfig where
+  rnf SnsChannelConfig' {..} = Prelude.rnf topicArn
+
+instance Data.ToJSON SnsChannelConfig where
+  toJSON SnsChannelConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("TopicArn" Data..=) Prelude.<$> topicArn]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/StartTimeRange.hs b/gen/Amazonka/DevOpsGuru/Types/StartTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/StartTimeRange.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.DevOpsGuru.Types.StartTimeRange
+-- 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.DevOpsGuru.Types.StartTimeRange 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 time range used to specify when the behavior of an insight or anomaly
+-- started.
+--
+-- /See:/ 'newStartTimeRange' smart constructor.
+data StartTimeRange = StartTimeRange'
+  { -- | The start time of the time range.
+    fromTime :: Prelude.Maybe Data.POSIX,
+    -- | The end time of the time range.
+    toTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartTimeRange' 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:
+--
+-- 'fromTime', 'startTimeRange_fromTime' - The start time of the time range.
+--
+-- 'toTime', 'startTimeRange_toTime' - The end time of the time range.
+newStartTimeRange ::
+  StartTimeRange
+newStartTimeRange =
+  StartTimeRange'
+    { fromTime = Prelude.Nothing,
+      toTime = Prelude.Nothing
+    }
+
+-- | The start time of the time range.
+startTimeRange_fromTime :: Lens.Lens' StartTimeRange (Prelude.Maybe Prelude.UTCTime)
+startTimeRange_fromTime = Lens.lens (\StartTimeRange' {fromTime} -> fromTime) (\s@StartTimeRange' {} a -> s {fromTime = a} :: StartTimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The end time of the time range.
+startTimeRange_toTime :: Lens.Lens' StartTimeRange (Prelude.Maybe Prelude.UTCTime)
+startTimeRange_toTime = Lens.lens (\StartTimeRange' {toTime} -> toTime) (\s@StartTimeRange' {} a -> s {toTime = a} :: StartTimeRange) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable StartTimeRange where
+  hashWithSalt _salt StartTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromTime
+      `Prelude.hashWithSalt` toTime
+
+instance Prelude.NFData StartTimeRange where
+  rnf StartTimeRange' {..} =
+    Prelude.rnf fromTime
+      `Prelude.seq` Prelude.rnf toTime
+
+instance Data.ToJSON StartTimeRange where
+  toJSON StartTimeRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FromTime" Data..=) Prelude.<$> fromTime,
+            ("ToTime" Data..=) Prelude.<$> toTime
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/TagCollection.hs b/gen/Amazonka/DevOpsGuru/Types/TagCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/TagCollection.hs
@@ -0,0 +1,191 @@
+{-# 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.DevOpsGuru.Types.TagCollection
+-- 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.DevOpsGuru.Types.TagCollection 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 collection of Amazon Web Services tags.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- /See:/ 'newTagCollection' smart constructor.
+data TagCollection = TagCollection'
+  { -- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+    -- Services resources that DevOps Guru analyzes. All Amazon Web Services
+    -- resources in your account and Region tagged with this /key/ make up your
+    -- DevOps Guru application and analysis boundary.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    appBoundaryKey :: Prelude.Text,
+    -- | The values in an Amazon Web Services tag collection.
+    --
+    -- The tag\'s /value/ is an optional field used to associate a string with
+    -- the tag /key/ (for example, @111122223333@, @Production@, or a team
+    -- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+    -- /value/ is the same as using an empty string. Like tag /keys/, tag
+    -- /values/ are case-sensitive. You can specify a maximum of 256 characters
+    -- for a tag value.
+    tagValues :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagCollection' 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:
+--
+-- 'appBoundaryKey', 'tagCollection_appBoundaryKey' - An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'tagValues', 'tagCollection_tagValues' - The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+newTagCollection ::
+  -- | 'appBoundaryKey'
+  Prelude.Text ->
+  TagCollection
+newTagCollection pAppBoundaryKey_ =
+  TagCollection'
+    { appBoundaryKey = pAppBoundaryKey_,
+      tagValues = Prelude.mempty
+    }
+
+-- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+tagCollection_appBoundaryKey :: Lens.Lens' TagCollection Prelude.Text
+tagCollection_appBoundaryKey = Lens.lens (\TagCollection' {appBoundaryKey} -> appBoundaryKey) (\s@TagCollection' {} a -> s {appBoundaryKey = a} :: TagCollection)
+
+-- | The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+tagCollection_tagValues :: Lens.Lens' TagCollection [Prelude.Text]
+tagCollection_tagValues = Lens.lens (\TagCollection' {tagValues} -> tagValues) (\s@TagCollection' {} a -> s {tagValues = a} :: TagCollection) Prelude.. Lens.coerced
+
+instance Data.FromJSON TagCollection where
+  parseJSON =
+    Data.withObject
+      "TagCollection"
+      ( \x ->
+          TagCollection'
+            Prelude.<$> (x Data..: "AppBoundaryKey")
+            Prelude.<*> (x Data..:? "TagValues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable TagCollection where
+  hashWithSalt _salt TagCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` appBoundaryKey
+      `Prelude.hashWithSalt` tagValues
+
+instance Prelude.NFData TagCollection where
+  rnf TagCollection' {..} =
+    Prelude.rnf appBoundaryKey
+      `Prelude.seq` Prelude.rnf tagValues
+
+instance Data.ToJSON TagCollection where
+  toJSON TagCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AppBoundaryKey" Data..= appBoundaryKey),
+            Prelude.Just ("TagValues" Data..= tagValues)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/TagCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/TagCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/TagCollectionFilter.hs
@@ -0,0 +1,152 @@
+{-# 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.DevOpsGuru.Types.TagCollectionFilter
+-- 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.DevOpsGuru.Types.TagCollectionFilter 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 collection of Amazon Web Services tags used to filter insights. This
+-- is used to return insights generated from only resources that contain
+-- the tags in the tag collection.
+--
+-- /See:/ 'newTagCollectionFilter' smart constructor.
+data TagCollectionFilter = TagCollectionFilter'
+  { -- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+    -- Services resources that DevOps Guru analyzes. All Amazon Web Services
+    -- resources in your account and Region tagged with this /key/ make up your
+    -- DevOps Guru application and analysis boundary.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    appBoundaryKey :: Prelude.Text,
+    -- | The values in an Amazon Web Services tag collection.
+    --
+    -- The tag\'s /value/ is an optional field used to associate a string with
+    -- the tag /key/ (for example, @111122223333@, @Production@, or a team
+    -- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+    -- /value/ is the same as using an empty string. Like tag /keys/, tag
+    -- /values/ are case-sensitive. You can specify a maximum of 256 characters
+    -- for a tag value.
+    tagValues :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagCollectionFilter' 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:
+--
+-- 'appBoundaryKey', 'tagCollectionFilter_appBoundaryKey' - An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'tagValues', 'tagCollectionFilter_tagValues' - The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+newTagCollectionFilter ::
+  -- | 'appBoundaryKey'
+  Prelude.Text ->
+  TagCollectionFilter
+newTagCollectionFilter pAppBoundaryKey_ =
+  TagCollectionFilter'
+    { appBoundaryKey =
+        pAppBoundaryKey_,
+      tagValues = Prelude.mempty
+    }
+
+-- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+tagCollectionFilter_appBoundaryKey :: Lens.Lens' TagCollectionFilter Prelude.Text
+tagCollectionFilter_appBoundaryKey = Lens.lens (\TagCollectionFilter' {appBoundaryKey} -> appBoundaryKey) (\s@TagCollectionFilter' {} a -> s {appBoundaryKey = a} :: TagCollectionFilter)
+
+-- | The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+tagCollectionFilter_tagValues :: Lens.Lens' TagCollectionFilter [Prelude.Text]
+tagCollectionFilter_tagValues = Lens.lens (\TagCollectionFilter' {tagValues} -> tagValues) (\s@TagCollectionFilter' {} a -> s {tagValues = a} :: TagCollectionFilter) Prelude.. Lens.coerced
+
+instance Data.FromJSON TagCollectionFilter where
+  parseJSON =
+    Data.withObject
+      "TagCollectionFilter"
+      ( \x ->
+          TagCollectionFilter'
+            Prelude.<$> (x Data..: "AppBoundaryKey")
+            Prelude.<*> (x Data..:? "TagValues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable TagCollectionFilter where
+  hashWithSalt _salt TagCollectionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` appBoundaryKey
+      `Prelude.hashWithSalt` tagValues
+
+instance Prelude.NFData TagCollectionFilter where
+  rnf TagCollectionFilter' {..} =
+    Prelude.rnf appBoundaryKey
+      `Prelude.seq` Prelude.rnf tagValues
diff --git a/gen/Amazonka/DevOpsGuru/Types/TagCostEstimationResourceCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/TagCostEstimationResourceCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/TagCostEstimationResourceCollectionFilter.hs
@@ -0,0 +1,188 @@
+{-# 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.DevOpsGuru.Types.TagCostEstimationResourceCollectionFilter
+-- 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.DevOpsGuru.Types.TagCostEstimationResourceCollectionFilter 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
+
+-- | Information about a collection of Amazon Web Services resources that are
+-- identified by an Amazon Web Services tag. This collection of resources
+-- is used to create a monthly cost estimate for DevOps Guru to analyze
+-- Amazon Web Services resources. The maximum number of tags you can
+-- specify for a cost estimate is one. The estimate created is for the cost
+-- to analyze the Amazon Web Services resources defined by the tag. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html Stacks>
+-- in the /Amazon Web Services CloudFormation User Guide/.
+--
+-- /See:/ 'newTagCostEstimationResourceCollectionFilter' smart constructor.
+data TagCostEstimationResourceCollectionFilter = TagCostEstimationResourceCollectionFilter'
+  { -- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+    -- Services resources that DevOps Guru analyzes. All Amazon Web Services
+    -- resources in your account and Region tagged with this /key/ make up your
+    -- DevOps Guru application and analysis boundary.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    appBoundaryKey :: Prelude.Text,
+    -- | The values in an Amazon Web Services tag collection.
+    --
+    -- The tag\'s /value/ is an optional field used to associate a string with
+    -- the tag /key/ (for example, @111122223333@, @Production@, or a team
+    -- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+    -- /value/ is the same as using an empty string. Like tag /keys/, tag
+    -- /values/ are case-sensitive. You can specify a maximum of 256 characters
+    -- for a tag value.
+    tagValues :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagCostEstimationResourceCollectionFilter' 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:
+--
+-- 'appBoundaryKey', 'tagCostEstimationResourceCollectionFilter_appBoundaryKey' - An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'tagValues', 'tagCostEstimationResourceCollectionFilter_tagValues' - The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+newTagCostEstimationResourceCollectionFilter ::
+  -- | 'appBoundaryKey'
+  Prelude.Text ->
+  -- | 'tagValues'
+  Prelude.NonEmpty Prelude.Text ->
+  TagCostEstimationResourceCollectionFilter
+newTagCostEstimationResourceCollectionFilter
+  pAppBoundaryKey_
+  pTagValues_ =
+    TagCostEstimationResourceCollectionFilter'
+      { appBoundaryKey =
+          pAppBoundaryKey_,
+        tagValues =
+          Lens.coerced
+            Lens.# pTagValues_
+      }
+
+-- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+tagCostEstimationResourceCollectionFilter_appBoundaryKey :: Lens.Lens' TagCostEstimationResourceCollectionFilter Prelude.Text
+tagCostEstimationResourceCollectionFilter_appBoundaryKey = Lens.lens (\TagCostEstimationResourceCollectionFilter' {appBoundaryKey} -> appBoundaryKey) (\s@TagCostEstimationResourceCollectionFilter' {} a -> s {appBoundaryKey = a} :: TagCostEstimationResourceCollectionFilter)
+
+-- | The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+tagCostEstimationResourceCollectionFilter_tagValues :: Lens.Lens' TagCostEstimationResourceCollectionFilter (Prelude.NonEmpty Prelude.Text)
+tagCostEstimationResourceCollectionFilter_tagValues = Lens.lens (\TagCostEstimationResourceCollectionFilter' {tagValues} -> tagValues) (\s@TagCostEstimationResourceCollectionFilter' {} a -> s {tagValues = a} :: TagCostEstimationResourceCollectionFilter) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    TagCostEstimationResourceCollectionFilter
+  where
+  parseJSON =
+    Data.withObject
+      "TagCostEstimationResourceCollectionFilter"
+      ( \x ->
+          TagCostEstimationResourceCollectionFilter'
+            Prelude.<$> (x Data..: "AppBoundaryKey")
+            Prelude.<*> (x Data..: "TagValues")
+      )
+
+instance
+  Prelude.Hashable
+    TagCostEstimationResourceCollectionFilter
+  where
+  hashWithSalt
+    _salt
+    TagCostEstimationResourceCollectionFilter' {..} =
+      _salt
+        `Prelude.hashWithSalt` appBoundaryKey
+        `Prelude.hashWithSalt` tagValues
+
+instance
+  Prelude.NFData
+    TagCostEstimationResourceCollectionFilter
+  where
+  rnf TagCostEstimationResourceCollectionFilter' {..} =
+    Prelude.rnf appBoundaryKey
+      `Prelude.seq` Prelude.rnf tagValues
+
+instance
+  Data.ToJSON
+    TagCostEstimationResourceCollectionFilter
+  where
+  toJSON TagCostEstimationResourceCollectionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AppBoundaryKey" Data..= appBoundaryKey),
+            Prelude.Just ("TagValues" Data..= tagValues)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/TagHealth.hs b/gen/Amazonka/DevOpsGuru/Types/TagHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/TagHealth.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.DevOpsGuru.Types.TagHealth
+-- 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.DevOpsGuru.Types.TagHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.InsightHealth
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the health of Amazon Web Services resources in your
+-- account that are specified by an Amazon Web Services tag /key/.
+--
+-- /See:/ 'newTagHealth' smart constructor.
+data TagHealth = TagHealth'
+  { -- | Number of resources that DevOps Guru is monitoring in your account that
+    -- are specified by an Amazon Web Services tag.
+    analyzedResourceCount :: Prelude.Maybe Prelude.Integer,
+    -- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+    -- Services resources that DevOps Guru analyzes. All Amazon Web Services
+    -- resources in your account and Region tagged with this /key/ make up your
+    -- DevOps Guru application and analysis boundary.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    appBoundaryKey :: Prelude.Maybe Prelude.Text,
+    -- | Information about the health of the Amazon Web Services resources in
+    -- your account that are specified by an Amazon Web Services tag, including
+    -- the number of open proactive, open reactive insights, and the Mean Time
+    -- to Recover (MTTR) of closed insights.
+    insight :: Prelude.Maybe InsightHealth,
+    -- | The value in an Amazon Web Services tag.
+    --
+    -- The tag\'s /value/ is an optional field used to associate a string with
+    -- the tag /key/ (for example, @111122223333@, @Production@, or a team
+    -- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+    -- /value/ is the same as using an empty string. Like tag /keys/, tag
+    -- /values/ are case-sensitive. You can specify a maximum of 256 characters
+    -- for a tag value.
+    tagValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagHealth' 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:
+--
+-- 'analyzedResourceCount', 'tagHealth_analyzedResourceCount' - Number of resources that DevOps Guru is monitoring in your account that
+-- are specified by an Amazon Web Services tag.
+--
+-- 'appBoundaryKey', 'tagHealth_appBoundaryKey' - An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'insight', 'tagHealth_insight' - Information about the health of the Amazon Web Services resources in
+-- your account that are specified by an Amazon Web Services tag, including
+-- the number of open proactive, open reactive insights, and the Mean Time
+-- to Recover (MTTR) of closed insights.
+--
+-- 'tagValue', 'tagHealth_tagValue' - The value in an Amazon Web Services tag.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+newTagHealth ::
+  TagHealth
+newTagHealth =
+  TagHealth'
+    { analyzedResourceCount = Prelude.Nothing,
+      appBoundaryKey = Prelude.Nothing,
+      insight = Prelude.Nothing,
+      tagValue = Prelude.Nothing
+    }
+
+-- | Number of resources that DevOps Guru is monitoring in your account that
+-- are specified by an Amazon Web Services tag.
+tagHealth_analyzedResourceCount :: Lens.Lens' TagHealth (Prelude.Maybe Prelude.Integer)
+tagHealth_analyzedResourceCount = Lens.lens (\TagHealth' {analyzedResourceCount} -> analyzedResourceCount) (\s@TagHealth' {} a -> s {analyzedResourceCount = a} :: TagHealth)
+
+-- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+tagHealth_appBoundaryKey :: Lens.Lens' TagHealth (Prelude.Maybe Prelude.Text)
+tagHealth_appBoundaryKey = Lens.lens (\TagHealth' {appBoundaryKey} -> appBoundaryKey) (\s@TagHealth' {} a -> s {appBoundaryKey = a} :: TagHealth)
+
+-- | Information about the health of the Amazon Web Services resources in
+-- your account that are specified by an Amazon Web Services tag, including
+-- the number of open proactive, open reactive insights, and the Mean Time
+-- to Recover (MTTR) of closed insights.
+tagHealth_insight :: Lens.Lens' TagHealth (Prelude.Maybe InsightHealth)
+tagHealth_insight = Lens.lens (\TagHealth' {insight} -> insight) (\s@TagHealth' {} a -> s {insight = a} :: TagHealth)
+
+-- | The value in an Amazon Web Services tag.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+tagHealth_tagValue :: Lens.Lens' TagHealth (Prelude.Maybe Prelude.Text)
+tagHealth_tagValue = Lens.lens (\TagHealth' {tagValue} -> tagValue) (\s@TagHealth' {} a -> s {tagValue = a} :: TagHealth)
+
+instance Data.FromJSON TagHealth where
+  parseJSON =
+    Data.withObject
+      "TagHealth"
+      ( \x ->
+          TagHealth'
+            Prelude.<$> (x Data..:? "AnalyzedResourceCount")
+            Prelude.<*> (x Data..:? "AppBoundaryKey")
+            Prelude.<*> (x Data..:? "Insight")
+            Prelude.<*> (x Data..:? "TagValue")
+      )
+
+instance Prelude.Hashable TagHealth where
+  hashWithSalt _salt TagHealth' {..} =
+    _salt
+      `Prelude.hashWithSalt` analyzedResourceCount
+      `Prelude.hashWithSalt` appBoundaryKey
+      `Prelude.hashWithSalt` insight
+      `Prelude.hashWithSalt` tagValue
+
+instance Prelude.NFData TagHealth where
+  rnf TagHealth' {..} =
+    Prelude.rnf analyzedResourceCount
+      `Prelude.seq` Prelude.rnf appBoundaryKey
+      `Prelude.seq` Prelude.rnf insight
+      `Prelude.seq` Prelude.rnf tagValue
diff --git a/gen/Amazonka/DevOpsGuru/Types/TimestampMetricValuePair.hs b/gen/Amazonka/DevOpsGuru/Types/TimestampMetricValuePair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/TimestampMetricValuePair.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.DevOpsGuru.Types.TimestampMetricValuePair
+-- 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.DevOpsGuru.Types.TimestampMetricValuePair 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 pair that contains metric values at the respective timestamp.
+--
+-- /See:/ 'newTimestampMetricValuePair' smart constructor.
+data TimestampMetricValuePair = TimestampMetricValuePair'
+  { -- | Value of the anomalous metric data point at respective Timestamp.
+    metricValue :: Prelude.Maybe Prelude.Double,
+    -- | A @Timestamp@ that specifies the time the event occurred.
+    timestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimestampMetricValuePair' 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:
+--
+-- 'metricValue', 'timestampMetricValuePair_metricValue' - Value of the anomalous metric data point at respective Timestamp.
+--
+-- 'timestamp', 'timestampMetricValuePair_timestamp' - A @Timestamp@ that specifies the time the event occurred.
+newTimestampMetricValuePair ::
+  TimestampMetricValuePair
+newTimestampMetricValuePair =
+  TimestampMetricValuePair'
+    { metricValue =
+        Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | Value of the anomalous metric data point at respective Timestamp.
+timestampMetricValuePair_metricValue :: Lens.Lens' TimestampMetricValuePair (Prelude.Maybe Prelude.Double)
+timestampMetricValuePair_metricValue = Lens.lens (\TimestampMetricValuePair' {metricValue} -> metricValue) (\s@TimestampMetricValuePair' {} a -> s {metricValue = a} :: TimestampMetricValuePair)
+
+-- | A @Timestamp@ that specifies the time the event occurred.
+timestampMetricValuePair_timestamp :: Lens.Lens' TimestampMetricValuePair (Prelude.Maybe Prelude.UTCTime)
+timestampMetricValuePair_timestamp = Lens.lens (\TimestampMetricValuePair' {timestamp} -> timestamp) (\s@TimestampMetricValuePair' {} a -> s {timestamp = a} :: TimestampMetricValuePair) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON TimestampMetricValuePair where
+  parseJSON =
+    Data.withObject
+      "TimestampMetricValuePair"
+      ( \x ->
+          TimestampMetricValuePair'
+            Prelude.<$> (x Data..:? "MetricValue")
+            Prelude.<*> (x Data..:? "Timestamp")
+      )
+
+instance Prelude.Hashable TimestampMetricValuePair where
+  hashWithSalt _salt TimestampMetricValuePair' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricValue
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData TimestampMetricValuePair where
+  rnf TimestampMetricValuePair' {..} =
+    Prelude.rnf metricValue
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/DevOpsGuru/Types/UpdateCloudFormationCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/UpdateCloudFormationCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/UpdateCloudFormationCollectionFilter.hs
@@ -0,0 +1,89 @@
+{-# 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.DevOpsGuru.Types.UpdateCloudFormationCollectionFilter
+-- 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.DevOpsGuru.Types.UpdateCloudFormationCollectionFilter 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 names of Amazon Web Services CloudFormation stacks used to
+-- update a collection of stacks. You can specify up to 500 Amazon Web
+-- Services CloudFormation stacks.
+--
+-- /See:/ 'newUpdateCloudFormationCollectionFilter' smart constructor.
+data UpdateCloudFormationCollectionFilter = UpdateCloudFormationCollectionFilter'
+  { -- | An array of the names of the Amazon Web Services CloudFormation stacks
+    -- to update. You can specify up to 500 Amazon Web Services CloudFormation
+    -- stacks.
+    stackNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCloudFormationCollectionFilter' 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:
+--
+-- 'stackNames', 'updateCloudFormationCollectionFilter_stackNames' - An array of the names of the Amazon Web Services CloudFormation stacks
+-- to update. You can specify up to 500 Amazon Web Services CloudFormation
+-- stacks.
+newUpdateCloudFormationCollectionFilter ::
+  UpdateCloudFormationCollectionFilter
+newUpdateCloudFormationCollectionFilter =
+  UpdateCloudFormationCollectionFilter'
+    { stackNames =
+        Prelude.Nothing
+    }
+
+-- | An array of the names of the Amazon Web Services CloudFormation stacks
+-- to update. You can specify up to 500 Amazon Web Services CloudFormation
+-- stacks.
+updateCloudFormationCollectionFilter_stackNames :: Lens.Lens' UpdateCloudFormationCollectionFilter (Prelude.Maybe [Prelude.Text])
+updateCloudFormationCollectionFilter_stackNames = Lens.lens (\UpdateCloudFormationCollectionFilter' {stackNames} -> stackNames) (\s@UpdateCloudFormationCollectionFilter' {} a -> s {stackNames = a} :: UpdateCloudFormationCollectionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    UpdateCloudFormationCollectionFilter
+  where
+  hashWithSalt
+    _salt
+    UpdateCloudFormationCollectionFilter' {..} =
+      _salt `Prelude.hashWithSalt` stackNames
+
+instance
+  Prelude.NFData
+    UpdateCloudFormationCollectionFilter
+  where
+  rnf UpdateCloudFormationCollectionFilter' {..} =
+    Prelude.rnf stackNames
+
+instance
+  Data.ToJSON
+    UpdateCloudFormationCollectionFilter
+  where
+  toJSON UpdateCloudFormationCollectionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("StackNames" Data..=) Prelude.<$> stackNames]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/UpdateResourceCollectionAction.hs b/gen/Amazonka/DevOpsGuru/Types/UpdateResourceCollectionAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/UpdateResourceCollectionAction.hs
@@ -0,0 +1,71 @@
+{-# 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.DevOpsGuru.Types.UpdateResourceCollectionAction
+-- 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.DevOpsGuru.Types.UpdateResourceCollectionAction
+  ( UpdateResourceCollectionAction
+      ( ..,
+        UpdateResourceCollectionAction_ADD,
+        UpdateResourceCollectionAction_REMOVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UpdateResourceCollectionAction = UpdateResourceCollectionAction'
+  { fromUpdateResourceCollectionAction ::
+      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 UpdateResourceCollectionAction_ADD :: UpdateResourceCollectionAction
+pattern UpdateResourceCollectionAction_ADD = UpdateResourceCollectionAction' "ADD"
+
+pattern UpdateResourceCollectionAction_REMOVE :: UpdateResourceCollectionAction
+pattern UpdateResourceCollectionAction_REMOVE = UpdateResourceCollectionAction' "REMOVE"
+
+{-# COMPLETE
+  UpdateResourceCollectionAction_ADD,
+  UpdateResourceCollectionAction_REMOVE,
+  UpdateResourceCollectionAction'
+  #-}
diff --git a/gen/Amazonka/DevOpsGuru/Types/UpdateResourceCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/UpdateResourceCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/UpdateResourceCollectionFilter.hs
@@ -0,0 +1,198 @@
+{-# 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.DevOpsGuru.Types.UpdateResourceCollectionFilter
+-- 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.DevOpsGuru.Types.UpdateResourceCollectionFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.UpdateCloudFormationCollectionFilter
+import Amazonka.DevOpsGuru.Types.UpdateTagCollectionFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information used to update a collection of Amazon Web Services
+-- resources.
+--
+-- /See:/ 'newUpdateResourceCollectionFilter' smart constructor.
+data UpdateResourceCollectionFilter = UpdateResourceCollectionFilter'
+  { -- | A collection of Amazon Web Services CloudFormation stacks. You can
+    -- specify up to 500 Amazon Web Services CloudFormation stacks.
+    cloudFormation :: Prelude.Maybe UpdateCloudFormationCollectionFilter,
+    -- | The updated Amazon Web Services tags used to filter the resources in the
+    -- resource collection.
+    --
+    -- Tags help you identify and organize your Amazon Web Services resources.
+    -- Many Amazon Web Services services support tagging, so you can assign the
+    -- same tag to resources from different services to indicate that the
+    -- resources are related. For example, you can assign the same tag to an
+    -- Amazon DynamoDB table resource that you assign to an Lambda function.
+    -- For more information about using tags, see the
+    -- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+    -- whitepaper.
+    --
+    -- Each Amazon Web Services tag has two parts.
+    --
+    -- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+    --     @Secret@). Tag /keys/ are case-sensitive.
+    --
+    -- -   An optional field known as a tag /value/ (for example,
+    --     @111122223333@, @Production@, or a team name). Omitting the tag
+    --     /value/ is the same as using an empty string. Like tag /keys/, tag
+    --     /values/ are case-sensitive.
+    --
+    -- Together these are known as /key/-/value/ pairs.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    tags :: Prelude.Maybe [UpdateTagCollectionFilter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceCollectionFilter' 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:
+--
+-- 'cloudFormation', 'updateResourceCollectionFilter_cloudFormation' - A collection of Amazon Web Services CloudFormation stacks. You can
+-- specify up to 500 Amazon Web Services CloudFormation stacks.
+--
+-- 'tags', 'updateResourceCollectionFilter_tags' - The updated Amazon Web Services tags used to filter the resources in the
+-- resource collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+newUpdateResourceCollectionFilter ::
+  UpdateResourceCollectionFilter
+newUpdateResourceCollectionFilter =
+  UpdateResourceCollectionFilter'
+    { cloudFormation =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | A collection of Amazon Web Services CloudFormation stacks. You can
+-- specify up to 500 Amazon Web Services CloudFormation stacks.
+updateResourceCollectionFilter_cloudFormation :: Lens.Lens' UpdateResourceCollectionFilter (Prelude.Maybe UpdateCloudFormationCollectionFilter)
+updateResourceCollectionFilter_cloudFormation = Lens.lens (\UpdateResourceCollectionFilter' {cloudFormation} -> cloudFormation) (\s@UpdateResourceCollectionFilter' {} a -> s {cloudFormation = a} :: UpdateResourceCollectionFilter)
+
+-- | The updated Amazon Web Services tags used to filter the resources in the
+-- resource collection.
+--
+-- Tags help you identify and organize your Amazon Web Services resources.
+-- Many Amazon Web Services services support tagging, so you can assign the
+-- same tag to resources from different services to indicate that the
+-- resources are related. For example, you can assign the same tag to an
+-- Amazon DynamoDB table resource that you assign to an Lambda function.
+-- For more information about using tags, see the
+-- <https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf Tagging best practices>
+-- whitepaper.
+--
+-- Each Amazon Web Services tag has two parts.
+--
+-- -   A tag /key/ (for example, @CostCenter@, @Environment@, @Project@, or
+--     @Secret@). Tag /keys/ are case-sensitive.
+--
+-- -   An optional field known as a tag /value/ (for example,
+--     @111122223333@, @Production@, or a team name). Omitting the tag
+--     /value/ is the same as using an empty string. Like tag /keys/, tag
+--     /values/ are case-sensitive.
+--
+-- Together these are known as /key/-/value/ pairs.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+updateResourceCollectionFilter_tags :: Lens.Lens' UpdateResourceCollectionFilter (Prelude.Maybe [UpdateTagCollectionFilter])
+updateResourceCollectionFilter_tags = Lens.lens (\UpdateResourceCollectionFilter' {tags} -> tags) (\s@UpdateResourceCollectionFilter' {} a -> s {tags = a} :: UpdateResourceCollectionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    UpdateResourceCollectionFilter
+  where
+  hashWithSalt
+    _salt
+    UpdateResourceCollectionFilter' {..} =
+      _salt
+        `Prelude.hashWithSalt` cloudFormation
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    UpdateResourceCollectionFilter
+  where
+  rnf UpdateResourceCollectionFilter' {..} =
+    Prelude.rnf cloudFormation
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToJSON UpdateResourceCollectionFilter where
+  toJSON UpdateResourceCollectionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CloudFormation" Data..=)
+              Prelude.<$> cloudFormation,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/UpdateServiceIntegrationConfig.hs b/gen/Amazonka/DevOpsGuru/Types/UpdateServiceIntegrationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/UpdateServiceIntegrationConfig.hs
@@ -0,0 +1,99 @@
+{-# 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.DevOpsGuru.Types.UpdateServiceIntegrationConfig
+-- 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.DevOpsGuru.Types.UpdateServiceIntegrationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types.LogsAnomalyDetectionIntegrationConfig
+import Amazonka.DevOpsGuru.Types.OpsCenterIntegrationConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about updating the integration status of an Amazon Web
+-- Services service, such as Amazon Web Services Systems Manager, with
+-- DevOps Guru.
+--
+-- /See:/ 'newUpdateServiceIntegrationConfig' smart constructor.
+data UpdateServiceIntegrationConfig = UpdateServiceIntegrationConfig'
+  { -- | Information about whether DevOps Guru is configured to perform log
+    -- anomaly detection on Amazon CloudWatch log groups.
+    logsAnomalyDetection :: Prelude.Maybe LogsAnomalyDetectionIntegrationConfig,
+    opsCenter :: Prelude.Maybe OpsCenterIntegrationConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateServiceIntegrationConfig' 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:
+--
+-- 'logsAnomalyDetection', 'updateServiceIntegrationConfig_logsAnomalyDetection' - Information about whether DevOps Guru is configured to perform log
+-- anomaly detection on Amazon CloudWatch log groups.
+--
+-- 'opsCenter', 'updateServiceIntegrationConfig_opsCenter' - Undocumented member.
+newUpdateServiceIntegrationConfig ::
+  UpdateServiceIntegrationConfig
+newUpdateServiceIntegrationConfig =
+  UpdateServiceIntegrationConfig'
+    { logsAnomalyDetection =
+        Prelude.Nothing,
+      opsCenter = Prelude.Nothing
+    }
+
+-- | Information about whether DevOps Guru is configured to perform log
+-- anomaly detection on Amazon CloudWatch log groups.
+updateServiceIntegrationConfig_logsAnomalyDetection :: Lens.Lens' UpdateServiceIntegrationConfig (Prelude.Maybe LogsAnomalyDetectionIntegrationConfig)
+updateServiceIntegrationConfig_logsAnomalyDetection = Lens.lens (\UpdateServiceIntegrationConfig' {logsAnomalyDetection} -> logsAnomalyDetection) (\s@UpdateServiceIntegrationConfig' {} a -> s {logsAnomalyDetection = a} :: UpdateServiceIntegrationConfig)
+
+-- | Undocumented member.
+updateServiceIntegrationConfig_opsCenter :: Lens.Lens' UpdateServiceIntegrationConfig (Prelude.Maybe OpsCenterIntegrationConfig)
+updateServiceIntegrationConfig_opsCenter = Lens.lens (\UpdateServiceIntegrationConfig' {opsCenter} -> opsCenter) (\s@UpdateServiceIntegrationConfig' {} a -> s {opsCenter = a} :: UpdateServiceIntegrationConfig)
+
+instance
+  Prelude.Hashable
+    UpdateServiceIntegrationConfig
+  where
+  hashWithSalt
+    _salt
+    UpdateServiceIntegrationConfig' {..} =
+      _salt
+        `Prelude.hashWithSalt` logsAnomalyDetection
+        `Prelude.hashWithSalt` opsCenter
+
+instance
+  Prelude.NFData
+    UpdateServiceIntegrationConfig
+  where
+  rnf UpdateServiceIntegrationConfig' {..} =
+    Prelude.rnf logsAnomalyDetection
+      `Prelude.seq` Prelude.rnf opsCenter
+
+instance Data.ToJSON UpdateServiceIntegrationConfig where
+  toJSON UpdateServiceIntegrationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LogsAnomalyDetection" Data..=)
+              Prelude.<$> logsAnomalyDetection,
+            ("OpsCenter" Data..=) Prelude.<$> opsCenter
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/Types/UpdateTagCollectionFilter.hs b/gen/Amazonka/DevOpsGuru/Types/UpdateTagCollectionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/Types/UpdateTagCollectionFilter.hs
@@ -0,0 +1,151 @@
+{-# 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.DevOpsGuru.Types.UpdateTagCollectionFilter
+-- 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.DevOpsGuru.Types.UpdateTagCollectionFilter 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 new collection of Amazon Web Services resources that are defined by an
+-- Amazon Web Services tag or tag /key/\//value/ pair.
+--
+-- /See:/ 'newUpdateTagCollectionFilter' smart constructor.
+data UpdateTagCollectionFilter = UpdateTagCollectionFilter'
+  { -- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+    -- Services resources that DevOps Guru analyzes. All Amazon Web Services
+    -- resources in your account and Region tagged with this /key/ make up your
+    -- DevOps Guru application and analysis boundary.
+    --
+    -- The string used for a /key/ in a tag that you use to define your
+    -- resource coverage must begin with the prefix @Devops-guru-@. The tag
+    -- /key/ might be @DevOps-Guru-deployment-application@ or
+    -- @devops-guru-rds-application@. When you create a /key/, the case of
+    -- characters in the /key/ can be whatever you choose. After you create a
+    -- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+    -- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+    -- act as two different /keys/. Possible /key/\//value/ pairs in your
+    -- application might be @Devops-Guru-production-application\/RDS@ or
+    -- @Devops-Guru-production-application\/containers@.
+    appBoundaryKey :: Prelude.Text,
+    -- | The values in an Amazon Web Services tag collection.
+    --
+    -- The tag\'s /value/ is an optional field used to associate a string with
+    -- the tag /key/ (for example, @111122223333@, @Production@, or a team
+    -- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+    -- /value/ is the same as using an empty string. Like tag /keys/, tag
+    -- /values/ are case-sensitive. You can specify a maximum of 256 characters
+    -- for a tag value.
+    tagValues :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTagCollectionFilter' 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:
+--
+-- 'appBoundaryKey', 'updateTagCollectionFilter_appBoundaryKey' - An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+--
+-- 'tagValues', 'updateTagCollectionFilter_tagValues' - The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+newUpdateTagCollectionFilter ::
+  -- | 'appBoundaryKey'
+  Prelude.Text ->
+  UpdateTagCollectionFilter
+newUpdateTagCollectionFilter pAppBoundaryKey_ =
+  UpdateTagCollectionFilter'
+    { appBoundaryKey =
+        pAppBoundaryKey_,
+      tagValues = Prelude.mempty
+    }
+
+-- | An Amazon Web Services tag /key/ that is used to identify the Amazon Web
+-- Services resources that DevOps Guru analyzes. All Amazon Web Services
+-- resources in your account and Region tagged with this /key/ make up your
+-- DevOps Guru application and analysis boundary.
+--
+-- The string used for a /key/ in a tag that you use to define your
+-- resource coverage must begin with the prefix @Devops-guru-@. The tag
+-- /key/ might be @DevOps-Guru-deployment-application@ or
+-- @devops-guru-rds-application@. When you create a /key/, the case of
+-- characters in the /key/ can be whatever you choose. After you create a
+-- /key/, it is case-sensitive. For example, DevOps Guru works with a /key/
+-- named @devops-guru-rds@ and a /key/ named @DevOps-Guru-RDS@, and these
+-- act as two different /keys/. Possible /key/\//value/ pairs in your
+-- application might be @Devops-Guru-production-application\/RDS@ or
+-- @Devops-Guru-production-application\/containers@.
+updateTagCollectionFilter_appBoundaryKey :: Lens.Lens' UpdateTagCollectionFilter Prelude.Text
+updateTagCollectionFilter_appBoundaryKey = Lens.lens (\UpdateTagCollectionFilter' {appBoundaryKey} -> appBoundaryKey) (\s@UpdateTagCollectionFilter' {} a -> s {appBoundaryKey = a} :: UpdateTagCollectionFilter)
+
+-- | The values in an Amazon Web Services tag collection.
+--
+-- The tag\'s /value/ is an optional field used to associate a string with
+-- the tag /key/ (for example, @111122223333@, @Production@, or a team
+-- name). The /key/ and /value/ are the tag\'s /key/ pair. Omitting the tag
+-- /value/ is the same as using an empty string. Like tag /keys/, tag
+-- /values/ are case-sensitive. You can specify a maximum of 256 characters
+-- for a tag value.
+updateTagCollectionFilter_tagValues :: Lens.Lens' UpdateTagCollectionFilter [Prelude.Text]
+updateTagCollectionFilter_tagValues = Lens.lens (\UpdateTagCollectionFilter' {tagValues} -> tagValues) (\s@UpdateTagCollectionFilter' {} a -> s {tagValues = a} :: UpdateTagCollectionFilter) Prelude.. Lens.coerced
+
+instance Prelude.Hashable UpdateTagCollectionFilter where
+  hashWithSalt _salt UpdateTagCollectionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` appBoundaryKey
+      `Prelude.hashWithSalt` tagValues
+
+instance Prelude.NFData UpdateTagCollectionFilter where
+  rnf UpdateTagCollectionFilter' {..} =
+    Prelude.rnf appBoundaryKey
+      `Prelude.seq` Prelude.rnf tagValues
+
+instance Data.ToJSON UpdateTagCollectionFilter where
+  toJSON UpdateTagCollectionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AppBoundaryKey" Data..= appBoundaryKey),
+            Prelude.Just ("TagValues" Data..= tagValues)
+          ]
+      )
diff --git a/gen/Amazonka/DevOpsGuru/UpdateEventSourcesConfig.hs b/gen/Amazonka/DevOpsGuru/UpdateEventSourcesConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/UpdateEventSourcesConfig.hs
@@ -0,0 +1,163 @@
+{-# 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.DevOpsGuru.UpdateEventSourcesConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables or disables integration with a service that can be integrated
+-- with DevOps Guru. The one service that can be integrated with DevOps
+-- Guru is Amazon CodeGuru Profiler, which can produce proactive
+-- recommendations which can be stored and viewed in DevOps Guru.
+module Amazonka.DevOpsGuru.UpdateEventSourcesConfig
+  ( -- * Creating a Request
+    UpdateEventSourcesConfig (..),
+    newUpdateEventSourcesConfig,
+
+    -- * Request Lenses
+    updateEventSourcesConfig_eventSources,
+
+    -- * Destructuring the Response
+    UpdateEventSourcesConfigResponse (..),
+    newUpdateEventSourcesConfigResponse,
+
+    -- * Response Lenses
+    updateEventSourcesConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEventSourcesConfig' smart constructor.
+data UpdateEventSourcesConfig = UpdateEventSourcesConfig'
+  { -- | Configuration information about the integration of DevOps Guru as the
+    -- Consumer via EventBridge with another AWS Service.
+    eventSources :: Prelude.Maybe EventSourcesConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventSourcesConfig' 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:
+--
+-- 'eventSources', 'updateEventSourcesConfig_eventSources' - Configuration information about the integration of DevOps Guru as the
+-- Consumer via EventBridge with another AWS Service.
+newUpdateEventSourcesConfig ::
+  UpdateEventSourcesConfig
+newUpdateEventSourcesConfig =
+  UpdateEventSourcesConfig'
+    { eventSources =
+        Prelude.Nothing
+    }
+
+-- | Configuration information about the integration of DevOps Guru as the
+-- Consumer via EventBridge with another AWS Service.
+updateEventSourcesConfig_eventSources :: Lens.Lens' UpdateEventSourcesConfig (Prelude.Maybe EventSourcesConfig)
+updateEventSourcesConfig_eventSources = Lens.lens (\UpdateEventSourcesConfig' {eventSources} -> eventSources) (\s@UpdateEventSourcesConfig' {} a -> s {eventSources = a} :: UpdateEventSourcesConfig)
+
+instance Core.AWSRequest UpdateEventSourcesConfig where
+  type
+    AWSResponse UpdateEventSourcesConfig =
+      UpdateEventSourcesConfigResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEventSourcesConfigResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEventSourcesConfig where
+  hashWithSalt _salt UpdateEventSourcesConfig' {..} =
+    _salt `Prelude.hashWithSalt` eventSources
+
+instance Prelude.NFData UpdateEventSourcesConfig where
+  rnf UpdateEventSourcesConfig' {..} =
+    Prelude.rnf eventSources
+
+instance Data.ToHeaders UpdateEventSourcesConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEventSourcesConfig where
+  toJSON UpdateEventSourcesConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("EventSources" Data..=) Prelude.<$> eventSources]
+      )
+
+instance Data.ToPath UpdateEventSourcesConfig where
+  toPath = Prelude.const "/event-sources"
+
+instance Data.ToQuery UpdateEventSourcesConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEventSourcesConfigResponse' smart constructor.
+data UpdateEventSourcesConfigResponse = UpdateEventSourcesConfigResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventSourcesConfigResponse' 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:
+--
+-- 'httpStatus', 'updateEventSourcesConfigResponse_httpStatus' - The response's http status code.
+newUpdateEventSourcesConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEventSourcesConfigResponse
+newUpdateEventSourcesConfigResponse pHttpStatus_ =
+  UpdateEventSourcesConfigResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateEventSourcesConfigResponse_httpStatus :: Lens.Lens' UpdateEventSourcesConfigResponse Prelude.Int
+updateEventSourcesConfigResponse_httpStatus = Lens.lens (\UpdateEventSourcesConfigResponse' {httpStatus} -> httpStatus) (\s@UpdateEventSourcesConfigResponse' {} a -> s {httpStatus = a} :: UpdateEventSourcesConfigResponse)
+
+instance
+  Prelude.NFData
+    UpdateEventSourcesConfigResponse
+  where
+  rnf UpdateEventSourcesConfigResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/UpdateResourceCollection.hs b/gen/Amazonka/DevOpsGuru/UpdateResourceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/UpdateResourceCollection.hs
@@ -0,0 +1,187 @@
+{-# 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.DevOpsGuru.UpdateResourceCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the collection of resources that DevOps Guru analyzes. The two
+-- types of Amazon Web Services resource collections supported are Amazon
+-- Web Services CloudFormation stacks and Amazon Web Services resources
+-- that contain the same Amazon Web Services tag. DevOps Guru can be
+-- configured to analyze the Amazon Web Services resources that are defined
+-- in the stacks or that are tagged using the same tag /key/. You can
+-- specify up to 500 Amazon Web Services CloudFormation stacks. This method
+-- also creates the IAM role required for you to use DevOps Guru.
+module Amazonka.DevOpsGuru.UpdateResourceCollection
+  ( -- * Creating a Request
+    UpdateResourceCollection (..),
+    newUpdateResourceCollection,
+
+    -- * Request Lenses
+    updateResourceCollection_action,
+    updateResourceCollection_resourceCollection,
+
+    -- * Destructuring the Response
+    UpdateResourceCollectionResponse (..),
+    newUpdateResourceCollectionResponse,
+
+    -- * Response Lenses
+    updateResourceCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResourceCollection' smart constructor.
+data UpdateResourceCollection = UpdateResourceCollection'
+  { -- | Specifies if the resource collection in the request is added or deleted
+    -- to the resource collection.
+    action :: UpdateResourceCollectionAction,
+    resourceCollection :: UpdateResourceCollectionFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceCollection' 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:
+--
+-- 'action', 'updateResourceCollection_action' - Specifies if the resource collection in the request is added or deleted
+-- to the resource collection.
+--
+-- 'resourceCollection', 'updateResourceCollection_resourceCollection' - Undocumented member.
+newUpdateResourceCollection ::
+  -- | 'action'
+  UpdateResourceCollectionAction ->
+  -- | 'resourceCollection'
+  UpdateResourceCollectionFilter ->
+  UpdateResourceCollection
+newUpdateResourceCollection
+  pAction_
+  pResourceCollection_ =
+    UpdateResourceCollection'
+      { action = pAction_,
+        resourceCollection = pResourceCollection_
+      }
+
+-- | Specifies if the resource collection in the request is added or deleted
+-- to the resource collection.
+updateResourceCollection_action :: Lens.Lens' UpdateResourceCollection UpdateResourceCollectionAction
+updateResourceCollection_action = Lens.lens (\UpdateResourceCollection' {action} -> action) (\s@UpdateResourceCollection' {} a -> s {action = a} :: UpdateResourceCollection)
+
+-- | Undocumented member.
+updateResourceCollection_resourceCollection :: Lens.Lens' UpdateResourceCollection UpdateResourceCollectionFilter
+updateResourceCollection_resourceCollection = Lens.lens (\UpdateResourceCollection' {resourceCollection} -> resourceCollection) (\s@UpdateResourceCollection' {} a -> s {resourceCollection = a} :: UpdateResourceCollection)
+
+instance Core.AWSRequest UpdateResourceCollection where
+  type
+    AWSResponse UpdateResourceCollection =
+      UpdateResourceCollectionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateResourceCollectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateResourceCollection where
+  hashWithSalt _salt UpdateResourceCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` resourceCollection
+
+instance Prelude.NFData UpdateResourceCollection where
+  rnf UpdateResourceCollection' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf resourceCollection
+
+instance Data.ToHeaders UpdateResourceCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateResourceCollection where
+  toJSON UpdateResourceCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Action" Data..= action),
+            Prelude.Just
+              ("ResourceCollection" Data..= resourceCollection)
+          ]
+      )
+
+instance Data.ToPath UpdateResourceCollection where
+  toPath = Prelude.const "/resource-collections"
+
+instance Data.ToQuery UpdateResourceCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateResourceCollectionResponse' smart constructor.
+data UpdateResourceCollectionResponse = UpdateResourceCollectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceCollectionResponse' 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:
+--
+-- 'httpStatus', 'updateResourceCollectionResponse_httpStatus' - The response's http status code.
+newUpdateResourceCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourceCollectionResponse
+newUpdateResourceCollectionResponse pHttpStatus_ =
+  UpdateResourceCollectionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateResourceCollectionResponse_httpStatus :: Lens.Lens' UpdateResourceCollectionResponse Prelude.Int
+updateResourceCollectionResponse_httpStatus = Lens.lens (\UpdateResourceCollectionResponse' {httpStatus} -> httpStatus) (\s@UpdateResourceCollectionResponse' {} a -> s {httpStatus = a} :: UpdateResourceCollectionResponse)
+
+instance
+  Prelude.NFData
+    UpdateResourceCollectionResponse
+  where
+  rnf UpdateResourceCollectionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/UpdateServiceIntegration.hs b/gen/Amazonka/DevOpsGuru/UpdateServiceIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/UpdateServiceIntegration.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.DevOpsGuru.UpdateServiceIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables or disables integration with a service that can be integrated
+-- with DevOps Guru. The one service that can be integrated with DevOps
+-- Guru is Amazon Web Services Systems Manager, which can be used to create
+-- an OpsItem for each generated insight.
+module Amazonka.DevOpsGuru.UpdateServiceIntegration
+  ( -- * Creating a Request
+    UpdateServiceIntegration (..),
+    newUpdateServiceIntegration,
+
+    -- * Request Lenses
+    updateServiceIntegration_serviceIntegration,
+
+    -- * Destructuring the Response
+    UpdateServiceIntegrationResponse (..),
+    newUpdateServiceIntegrationResponse,
+
+    -- * Response Lenses
+    updateServiceIntegrationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateServiceIntegration' smart constructor.
+data UpdateServiceIntegration = UpdateServiceIntegration'
+  { -- | An @IntegratedServiceConfig@ object used to specify the integrated
+    -- service you want to update, and whether you want to update it to enabled
+    -- or disabled.
+    serviceIntegration :: UpdateServiceIntegrationConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateServiceIntegration' 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:
+--
+-- 'serviceIntegration', 'updateServiceIntegration_serviceIntegration' - An @IntegratedServiceConfig@ object used to specify the integrated
+-- service you want to update, and whether you want to update it to enabled
+-- or disabled.
+newUpdateServiceIntegration ::
+  -- | 'serviceIntegration'
+  UpdateServiceIntegrationConfig ->
+  UpdateServiceIntegration
+newUpdateServiceIntegration pServiceIntegration_ =
+  UpdateServiceIntegration'
+    { serviceIntegration =
+        pServiceIntegration_
+    }
+
+-- | An @IntegratedServiceConfig@ object used to specify the integrated
+-- service you want to update, and whether you want to update it to enabled
+-- or disabled.
+updateServiceIntegration_serviceIntegration :: Lens.Lens' UpdateServiceIntegration UpdateServiceIntegrationConfig
+updateServiceIntegration_serviceIntegration = Lens.lens (\UpdateServiceIntegration' {serviceIntegration} -> serviceIntegration) (\s@UpdateServiceIntegration' {} a -> s {serviceIntegration = a} :: UpdateServiceIntegration)
+
+instance Core.AWSRequest UpdateServiceIntegration where
+  type
+    AWSResponse UpdateServiceIntegration =
+      UpdateServiceIntegrationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateServiceIntegrationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateServiceIntegration where
+  hashWithSalt _salt UpdateServiceIntegration' {..} =
+    _salt `Prelude.hashWithSalt` serviceIntegration
+
+instance Prelude.NFData UpdateServiceIntegration where
+  rnf UpdateServiceIntegration' {..} =
+    Prelude.rnf serviceIntegration
+
+instance Data.ToHeaders UpdateServiceIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateServiceIntegration where
+  toJSON UpdateServiceIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ServiceIntegration" Data..= serviceIntegration)
+          ]
+      )
+
+instance Data.ToPath UpdateServiceIntegration where
+  toPath = Prelude.const "/service-integrations"
+
+instance Data.ToQuery UpdateServiceIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateServiceIntegrationResponse' smart constructor.
+data UpdateServiceIntegrationResponse = UpdateServiceIntegrationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateServiceIntegrationResponse' 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:
+--
+-- 'httpStatus', 'updateServiceIntegrationResponse_httpStatus' - The response's http status code.
+newUpdateServiceIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateServiceIntegrationResponse
+newUpdateServiceIntegrationResponse pHttpStatus_ =
+  UpdateServiceIntegrationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateServiceIntegrationResponse_httpStatus :: Lens.Lens' UpdateServiceIntegrationResponse Prelude.Int
+updateServiceIntegrationResponse_httpStatus = Lens.lens (\UpdateServiceIntegrationResponse' {httpStatus} -> httpStatus) (\s@UpdateServiceIntegrationResponse' {} a -> s {httpStatus = a} :: UpdateServiceIntegrationResponse)
+
+instance
+  Prelude.NFData
+    UpdateServiceIntegrationResponse
+  where
+  rnf UpdateServiceIntegrationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DevOpsGuru/Waiters.hs b/gen/Amazonka/DevOpsGuru/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DevOpsGuru/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.DevOpsGuru.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.DevOpsGuru.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DevOpsGuru.Lens
+import Amazonka.DevOpsGuru.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- 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 Main (main) where
+
+import Test.Amazonka.DevOpsGuru
+import Test.Amazonka.DevOpsGuru.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "DevOpsGuru"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/DevOpsGuru.hs b/test/Test/Amazonka/DevOpsGuru.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DevOpsGuru.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.DevOpsGuru
+-- 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.DevOpsGuru
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/DevOpsGuru/Internal.hs b/test/Test/Amazonka/DevOpsGuru/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DevOpsGuru/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.DevOpsGuru.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.DevOpsGuru.Internal where
diff --git a/test/Test/Amazonka/Gen/DevOpsGuru.hs b/test/Test/Amazonka/Gen/DevOpsGuru.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/DevOpsGuru.hs
@@ -0,0 +1,658 @@
+{-# 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.DevOpsGuru
+-- 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.DevOpsGuru where
+
+import Amazonka.DevOpsGuru
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.DevOpsGuru.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"
+--         [ requestAddNotificationChannel $
+--             newAddNotificationChannel
+--
+--         , requestDeleteInsight $
+--             newDeleteInsight
+--
+--         , requestDescribeAccountHealth $
+--             newDescribeAccountHealth
+--
+--         , requestDescribeAccountOverview $
+--             newDescribeAccountOverview
+--
+--         , requestDescribeAnomaly $
+--             newDescribeAnomaly
+--
+--         , requestDescribeEventSourcesConfig $
+--             newDescribeEventSourcesConfig
+--
+--         , requestDescribeFeedback $
+--             newDescribeFeedback
+--
+--         , requestDescribeInsight $
+--             newDescribeInsight
+--
+--         , requestDescribeOrganizationHealth $
+--             newDescribeOrganizationHealth
+--
+--         , requestDescribeOrganizationOverview $
+--             newDescribeOrganizationOverview
+--
+--         , requestDescribeOrganizationResourceCollectionHealth $
+--             newDescribeOrganizationResourceCollectionHealth
+--
+--         , requestDescribeResourceCollectionHealth $
+--             newDescribeResourceCollectionHealth
+--
+--         , requestDescribeServiceIntegration $
+--             newDescribeServiceIntegration
+--
+--         , requestGetCostEstimation $
+--             newGetCostEstimation
+--
+--         , requestGetResourceCollection $
+--             newGetResourceCollection
+--
+--         , requestListAnomaliesForInsight $
+--             newListAnomaliesForInsight
+--
+--         , requestListAnomalousLogGroups $
+--             newListAnomalousLogGroups
+--
+--         , requestListEvents $
+--             newListEvents
+--
+--         , requestListInsights $
+--             newListInsights
+--
+--         , requestListMonitoredResources $
+--             newListMonitoredResources
+--
+--         , requestListNotificationChannels $
+--             newListNotificationChannels
+--
+--         , requestListOrganizationInsights $
+--             newListOrganizationInsights
+--
+--         , requestListRecommendations $
+--             newListRecommendations
+--
+--         , requestPutFeedback $
+--             newPutFeedback
+--
+--         , requestRemoveNotificationChannel $
+--             newRemoveNotificationChannel
+--
+--         , requestSearchInsights $
+--             newSearchInsights
+--
+--         , requestSearchOrganizationInsights $
+--             newSearchOrganizationInsights
+--
+--         , requestStartCostEstimation $
+--             newStartCostEstimation
+--
+--         , requestUpdateEventSourcesConfig $
+--             newUpdateEventSourcesConfig
+--
+--         , requestUpdateResourceCollection $
+--             newUpdateResourceCollection
+--
+--         , requestUpdateServiceIntegration $
+--             newUpdateServiceIntegration
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAddNotificationChannel $
+--             newAddNotificationChannelResponse
+--
+--         , responseDeleteInsight $
+--             newDeleteInsightResponse
+--
+--         , responseDescribeAccountHealth $
+--             newDescribeAccountHealthResponse
+--
+--         , responseDescribeAccountOverview $
+--             newDescribeAccountOverviewResponse
+--
+--         , responseDescribeAnomaly $
+--             newDescribeAnomalyResponse
+--
+--         , responseDescribeEventSourcesConfig $
+--             newDescribeEventSourcesConfigResponse
+--
+--         , responseDescribeFeedback $
+--             newDescribeFeedbackResponse
+--
+--         , responseDescribeInsight $
+--             newDescribeInsightResponse
+--
+--         , responseDescribeOrganizationHealth $
+--             newDescribeOrganizationHealthResponse
+--
+--         , responseDescribeOrganizationOverview $
+--             newDescribeOrganizationOverviewResponse
+--
+--         , responseDescribeOrganizationResourceCollectionHealth $
+--             newDescribeOrganizationResourceCollectionHealthResponse
+--
+--         , responseDescribeResourceCollectionHealth $
+--             newDescribeResourceCollectionHealthResponse
+--
+--         , responseDescribeServiceIntegration $
+--             newDescribeServiceIntegrationResponse
+--
+--         , responseGetCostEstimation $
+--             newGetCostEstimationResponse
+--
+--         , responseGetResourceCollection $
+--             newGetResourceCollectionResponse
+--
+--         , responseListAnomaliesForInsight $
+--             newListAnomaliesForInsightResponse
+--
+--         , responseListAnomalousLogGroups $
+--             newListAnomalousLogGroupsResponse
+--
+--         , responseListEvents $
+--             newListEventsResponse
+--
+--         , responseListInsights $
+--             newListInsightsResponse
+--
+--         , responseListMonitoredResources $
+--             newListMonitoredResourcesResponse
+--
+--         , responseListNotificationChannels $
+--             newListNotificationChannelsResponse
+--
+--         , responseListOrganizationInsights $
+--             newListOrganizationInsightsResponse
+--
+--         , responseListRecommendations $
+--             newListRecommendationsResponse
+--
+--         , responsePutFeedback $
+--             newPutFeedbackResponse
+--
+--         , responseRemoveNotificationChannel $
+--             newRemoveNotificationChannelResponse
+--
+--         , responseSearchInsights $
+--             newSearchInsightsResponse
+--
+--         , responseSearchOrganizationInsights $
+--             newSearchOrganizationInsightsResponse
+--
+--         , responseStartCostEstimation $
+--             newStartCostEstimationResponse
+--
+--         , responseUpdateEventSourcesConfig $
+--             newUpdateEventSourcesConfigResponse
+--
+--         , responseUpdateResourceCollection $
+--             newUpdateResourceCollectionResponse
+--
+--         , responseUpdateServiceIntegration $
+--             newUpdateServiceIntegrationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAddNotificationChannel :: AddNotificationChannel -> TestTree
+requestAddNotificationChannel =
+  req
+    "AddNotificationChannel"
+    "fixture/AddNotificationChannel.yaml"
+
+requestDeleteInsight :: DeleteInsight -> TestTree
+requestDeleteInsight =
+  req
+    "DeleteInsight"
+    "fixture/DeleteInsight.yaml"
+
+requestDescribeAccountHealth :: DescribeAccountHealth -> TestTree
+requestDescribeAccountHealth =
+  req
+    "DescribeAccountHealth"
+    "fixture/DescribeAccountHealth.yaml"
+
+requestDescribeAccountOverview :: DescribeAccountOverview -> TestTree
+requestDescribeAccountOverview =
+  req
+    "DescribeAccountOverview"
+    "fixture/DescribeAccountOverview.yaml"
+
+requestDescribeAnomaly :: DescribeAnomaly -> TestTree
+requestDescribeAnomaly =
+  req
+    "DescribeAnomaly"
+    "fixture/DescribeAnomaly.yaml"
+
+requestDescribeEventSourcesConfig :: DescribeEventSourcesConfig -> TestTree
+requestDescribeEventSourcesConfig =
+  req
+    "DescribeEventSourcesConfig"
+    "fixture/DescribeEventSourcesConfig.yaml"
+
+requestDescribeFeedback :: DescribeFeedback -> TestTree
+requestDescribeFeedback =
+  req
+    "DescribeFeedback"
+    "fixture/DescribeFeedback.yaml"
+
+requestDescribeInsight :: DescribeInsight -> TestTree
+requestDescribeInsight =
+  req
+    "DescribeInsight"
+    "fixture/DescribeInsight.yaml"
+
+requestDescribeOrganizationHealth :: DescribeOrganizationHealth -> TestTree
+requestDescribeOrganizationHealth =
+  req
+    "DescribeOrganizationHealth"
+    "fixture/DescribeOrganizationHealth.yaml"
+
+requestDescribeOrganizationOverview :: DescribeOrganizationOverview -> TestTree
+requestDescribeOrganizationOverview =
+  req
+    "DescribeOrganizationOverview"
+    "fixture/DescribeOrganizationOverview.yaml"
+
+requestDescribeOrganizationResourceCollectionHealth :: DescribeOrganizationResourceCollectionHealth -> TestTree
+requestDescribeOrganizationResourceCollectionHealth =
+  req
+    "DescribeOrganizationResourceCollectionHealth"
+    "fixture/DescribeOrganizationResourceCollectionHealth.yaml"
+
+requestDescribeResourceCollectionHealth :: DescribeResourceCollectionHealth -> TestTree
+requestDescribeResourceCollectionHealth =
+  req
+    "DescribeResourceCollectionHealth"
+    "fixture/DescribeResourceCollectionHealth.yaml"
+
+requestDescribeServiceIntegration :: DescribeServiceIntegration -> TestTree
+requestDescribeServiceIntegration =
+  req
+    "DescribeServiceIntegration"
+    "fixture/DescribeServiceIntegration.yaml"
+
+requestGetCostEstimation :: GetCostEstimation -> TestTree
+requestGetCostEstimation =
+  req
+    "GetCostEstimation"
+    "fixture/GetCostEstimation.yaml"
+
+requestGetResourceCollection :: GetResourceCollection -> TestTree
+requestGetResourceCollection =
+  req
+    "GetResourceCollection"
+    "fixture/GetResourceCollection.yaml"
+
+requestListAnomaliesForInsight :: ListAnomaliesForInsight -> TestTree
+requestListAnomaliesForInsight =
+  req
+    "ListAnomaliesForInsight"
+    "fixture/ListAnomaliesForInsight.yaml"
+
+requestListAnomalousLogGroups :: ListAnomalousLogGroups -> TestTree
+requestListAnomalousLogGroups =
+  req
+    "ListAnomalousLogGroups"
+    "fixture/ListAnomalousLogGroups.yaml"
+
+requestListEvents :: ListEvents -> TestTree
+requestListEvents =
+  req
+    "ListEvents"
+    "fixture/ListEvents.yaml"
+
+requestListInsights :: ListInsights -> TestTree
+requestListInsights =
+  req
+    "ListInsights"
+    "fixture/ListInsights.yaml"
+
+requestListMonitoredResources :: ListMonitoredResources -> TestTree
+requestListMonitoredResources =
+  req
+    "ListMonitoredResources"
+    "fixture/ListMonitoredResources.yaml"
+
+requestListNotificationChannels :: ListNotificationChannels -> TestTree
+requestListNotificationChannels =
+  req
+    "ListNotificationChannels"
+    "fixture/ListNotificationChannels.yaml"
+
+requestListOrganizationInsights :: ListOrganizationInsights -> TestTree
+requestListOrganizationInsights =
+  req
+    "ListOrganizationInsights"
+    "fixture/ListOrganizationInsights.yaml"
+
+requestListRecommendations :: ListRecommendations -> TestTree
+requestListRecommendations =
+  req
+    "ListRecommendations"
+    "fixture/ListRecommendations.yaml"
+
+requestPutFeedback :: PutFeedback -> TestTree
+requestPutFeedback =
+  req
+    "PutFeedback"
+    "fixture/PutFeedback.yaml"
+
+requestRemoveNotificationChannel :: RemoveNotificationChannel -> TestTree
+requestRemoveNotificationChannel =
+  req
+    "RemoveNotificationChannel"
+    "fixture/RemoveNotificationChannel.yaml"
+
+requestSearchInsights :: SearchInsights -> TestTree
+requestSearchInsights =
+  req
+    "SearchInsights"
+    "fixture/SearchInsights.yaml"
+
+requestSearchOrganizationInsights :: SearchOrganizationInsights -> TestTree
+requestSearchOrganizationInsights =
+  req
+    "SearchOrganizationInsights"
+    "fixture/SearchOrganizationInsights.yaml"
+
+requestStartCostEstimation :: StartCostEstimation -> TestTree
+requestStartCostEstimation =
+  req
+    "StartCostEstimation"
+    "fixture/StartCostEstimation.yaml"
+
+requestUpdateEventSourcesConfig :: UpdateEventSourcesConfig -> TestTree
+requestUpdateEventSourcesConfig =
+  req
+    "UpdateEventSourcesConfig"
+    "fixture/UpdateEventSourcesConfig.yaml"
+
+requestUpdateResourceCollection :: UpdateResourceCollection -> TestTree
+requestUpdateResourceCollection =
+  req
+    "UpdateResourceCollection"
+    "fixture/UpdateResourceCollection.yaml"
+
+requestUpdateServiceIntegration :: UpdateServiceIntegration -> TestTree
+requestUpdateServiceIntegration =
+  req
+    "UpdateServiceIntegration"
+    "fixture/UpdateServiceIntegration.yaml"
+
+-- Responses
+
+responseAddNotificationChannel :: AddNotificationChannelResponse -> TestTree
+responseAddNotificationChannel =
+  res
+    "AddNotificationChannelResponse"
+    "fixture/AddNotificationChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddNotificationChannel)
+
+responseDeleteInsight :: DeleteInsightResponse -> TestTree
+responseDeleteInsight =
+  res
+    "DeleteInsightResponse"
+    "fixture/DeleteInsightResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInsight)
+
+responseDescribeAccountHealth :: DescribeAccountHealthResponse -> TestTree
+responseDescribeAccountHealth =
+  res
+    "DescribeAccountHealthResponse"
+    "fixture/DescribeAccountHealthResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccountHealth)
+
+responseDescribeAccountOverview :: DescribeAccountOverviewResponse -> TestTree
+responseDescribeAccountOverview =
+  res
+    "DescribeAccountOverviewResponse"
+    "fixture/DescribeAccountOverviewResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccountOverview)
+
+responseDescribeAnomaly :: DescribeAnomalyResponse -> TestTree
+responseDescribeAnomaly =
+  res
+    "DescribeAnomalyResponse"
+    "fixture/DescribeAnomalyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAnomaly)
+
+responseDescribeEventSourcesConfig :: DescribeEventSourcesConfigResponse -> TestTree
+responseDescribeEventSourcesConfig =
+  res
+    "DescribeEventSourcesConfigResponse"
+    "fixture/DescribeEventSourcesConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEventSourcesConfig)
+
+responseDescribeFeedback :: DescribeFeedbackResponse -> TestTree
+responseDescribeFeedback =
+  res
+    "DescribeFeedbackResponse"
+    "fixture/DescribeFeedbackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFeedback)
+
+responseDescribeInsight :: DescribeInsightResponse -> TestTree
+responseDescribeInsight =
+  res
+    "DescribeInsightResponse"
+    "fixture/DescribeInsightResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInsight)
+
+responseDescribeOrganizationHealth :: DescribeOrganizationHealthResponse -> TestTree
+responseDescribeOrganizationHealth =
+  res
+    "DescribeOrganizationHealthResponse"
+    "fixture/DescribeOrganizationHealthResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeOrganizationHealth)
+
+responseDescribeOrganizationOverview :: DescribeOrganizationOverviewResponse -> TestTree
+responseDescribeOrganizationOverview =
+  res
+    "DescribeOrganizationOverviewResponse"
+    "fixture/DescribeOrganizationOverviewResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeOrganizationOverview)
+
+responseDescribeOrganizationResourceCollectionHealth :: DescribeOrganizationResourceCollectionHealthResponse -> TestTree
+responseDescribeOrganizationResourceCollectionHealth =
+  res
+    "DescribeOrganizationResourceCollectionHealthResponse"
+    "fixture/DescribeOrganizationResourceCollectionHealthResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeOrganizationResourceCollectionHealth)
+
+responseDescribeResourceCollectionHealth :: DescribeResourceCollectionHealthResponse -> TestTree
+responseDescribeResourceCollectionHealth =
+  res
+    "DescribeResourceCollectionHealthResponse"
+    "fixture/DescribeResourceCollectionHealthResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeResourceCollectionHealth)
+
+responseDescribeServiceIntegration :: DescribeServiceIntegrationResponse -> TestTree
+responseDescribeServiceIntegration =
+  res
+    "DescribeServiceIntegrationResponse"
+    "fixture/DescribeServiceIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeServiceIntegration)
+
+responseGetCostEstimation :: GetCostEstimationResponse -> TestTree
+responseGetCostEstimation =
+  res
+    "GetCostEstimationResponse"
+    "fixture/GetCostEstimationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCostEstimation)
+
+responseGetResourceCollection :: GetResourceCollectionResponse -> TestTree
+responseGetResourceCollection =
+  res
+    "GetResourceCollectionResponse"
+    "fixture/GetResourceCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResourceCollection)
+
+responseListAnomaliesForInsight :: ListAnomaliesForInsightResponse -> TestTree
+responseListAnomaliesForInsight =
+  res
+    "ListAnomaliesForInsightResponse"
+    "fixture/ListAnomaliesForInsightResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAnomaliesForInsight)
+
+responseListAnomalousLogGroups :: ListAnomalousLogGroupsResponse -> TestTree
+responseListAnomalousLogGroups =
+  res
+    "ListAnomalousLogGroupsResponse"
+    "fixture/ListAnomalousLogGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAnomalousLogGroups)
+
+responseListEvents :: ListEventsResponse -> TestTree
+responseListEvents =
+  res
+    "ListEventsResponse"
+    "fixture/ListEventsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEvents)
+
+responseListInsights :: ListInsightsResponse -> TestTree
+responseListInsights =
+  res
+    "ListInsightsResponse"
+    "fixture/ListInsightsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListInsights)
+
+responseListMonitoredResources :: ListMonitoredResourcesResponse -> TestTree
+responseListMonitoredResources =
+  res
+    "ListMonitoredResourcesResponse"
+    "fixture/ListMonitoredResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMonitoredResources)
+
+responseListNotificationChannels :: ListNotificationChannelsResponse -> TestTree
+responseListNotificationChannels =
+  res
+    "ListNotificationChannelsResponse"
+    "fixture/ListNotificationChannelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListNotificationChannels)
+
+responseListOrganizationInsights :: ListOrganizationInsightsResponse -> TestTree
+responseListOrganizationInsights =
+  res
+    "ListOrganizationInsightsResponse"
+    "fixture/ListOrganizationInsightsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListOrganizationInsights)
+
+responseListRecommendations :: ListRecommendationsResponse -> TestTree
+responseListRecommendations =
+  res
+    "ListRecommendationsResponse"
+    "fixture/ListRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecommendations)
+
+responsePutFeedback :: PutFeedbackResponse -> TestTree
+responsePutFeedback =
+  res
+    "PutFeedbackResponse"
+    "fixture/PutFeedbackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutFeedback)
+
+responseRemoveNotificationChannel :: RemoveNotificationChannelResponse -> TestTree
+responseRemoveNotificationChannel =
+  res
+    "RemoveNotificationChannelResponse"
+    "fixture/RemoveNotificationChannelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveNotificationChannel)
+
+responseSearchInsights :: SearchInsightsResponse -> TestTree
+responseSearchInsights =
+  res
+    "SearchInsightsResponse"
+    "fixture/SearchInsightsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchInsights)
+
+responseSearchOrganizationInsights :: SearchOrganizationInsightsResponse -> TestTree
+responseSearchOrganizationInsights =
+  res
+    "SearchOrganizationInsightsResponse"
+    "fixture/SearchOrganizationInsightsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchOrganizationInsights)
+
+responseStartCostEstimation :: StartCostEstimationResponse -> TestTree
+responseStartCostEstimation =
+  res
+    "StartCostEstimationResponse"
+    "fixture/StartCostEstimationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartCostEstimation)
+
+responseUpdateEventSourcesConfig :: UpdateEventSourcesConfigResponse -> TestTree
+responseUpdateEventSourcesConfig =
+  res
+    "UpdateEventSourcesConfigResponse"
+    "fixture/UpdateEventSourcesConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEventSourcesConfig)
+
+responseUpdateResourceCollection :: UpdateResourceCollectionResponse -> TestTree
+responseUpdateResourceCollection =
+  res
+    "UpdateResourceCollectionResponse"
+    "fixture/UpdateResourceCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourceCollection)
+
+responseUpdateServiceIntegration :: UpdateServiceIntegrationResponse -> TestTree
+responseUpdateServiceIntegration =
+  res
+    "UpdateServiceIntegrationResponse"
+    "fixture/UpdateServiceIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateServiceIntegration)
