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 Resilience Hub SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-04-30@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-resiliencehub)
+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.ResilienceHub](http://hackage.haskell.org/package/amazonka-resiliencehub/docs/Amazonka-ResilienceHub.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-resiliencehub` 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-resiliencehub.cabal b/amazonka-resiliencehub.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-resiliencehub.cabal
@@ -0,0 +1,176 @@
+cabal-version:      2.2
+name:               amazonka-resiliencehub
+version:            2.0
+synopsis:           Amazon Resilience Hub 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-04-30@ 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.ResilienceHub.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.ResilienceHub" 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-resiliencehub
+
+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.ResilienceHub
+    Amazonka.ResilienceHub.AddDraftAppVersionResourceMappings
+    Amazonka.ResilienceHub.CreateApp
+    Amazonka.ResilienceHub.CreateRecommendationTemplate
+    Amazonka.ResilienceHub.CreateResiliencyPolicy
+    Amazonka.ResilienceHub.DeleteApp
+    Amazonka.ResilienceHub.DeleteAppAssessment
+    Amazonka.ResilienceHub.DeleteRecommendationTemplate
+    Amazonka.ResilienceHub.DeleteResiliencyPolicy
+    Amazonka.ResilienceHub.DescribeApp
+    Amazonka.ResilienceHub.DescribeAppAssessment
+    Amazonka.ResilienceHub.DescribeAppVersionResourcesResolutionStatus
+    Amazonka.ResilienceHub.DescribeAppVersionTemplate
+    Amazonka.ResilienceHub.DescribeDraftAppVersionResourcesImportStatus
+    Amazonka.ResilienceHub.DescribeResiliencyPolicy
+    Amazonka.ResilienceHub.ImportResourcesToDraftAppVersion
+    Amazonka.ResilienceHub.Lens
+    Amazonka.ResilienceHub.ListAlarmRecommendations
+    Amazonka.ResilienceHub.ListAppAssessments
+    Amazonka.ResilienceHub.ListAppComponentCompliances
+    Amazonka.ResilienceHub.ListAppComponentRecommendations
+    Amazonka.ResilienceHub.ListApps
+    Amazonka.ResilienceHub.ListAppVersionResourceMappings
+    Amazonka.ResilienceHub.ListAppVersionResources
+    Amazonka.ResilienceHub.ListAppVersions
+    Amazonka.ResilienceHub.ListRecommendationTemplates
+    Amazonka.ResilienceHub.ListResiliencyPolicies
+    Amazonka.ResilienceHub.ListSopRecommendations
+    Amazonka.ResilienceHub.ListSuggestedResiliencyPolicies
+    Amazonka.ResilienceHub.ListTagsForResource
+    Amazonka.ResilienceHub.ListTestRecommendations
+    Amazonka.ResilienceHub.ListUnsupportedAppVersionResources
+    Amazonka.ResilienceHub.PublishAppVersion
+    Amazonka.ResilienceHub.PutDraftAppVersionTemplate
+    Amazonka.ResilienceHub.RemoveDraftAppVersionResourceMappings
+    Amazonka.ResilienceHub.ResolveAppVersionResources
+    Amazonka.ResilienceHub.StartAppAssessment
+    Amazonka.ResilienceHub.TagResource
+    Amazonka.ResilienceHub.Types
+    Amazonka.ResilienceHub.Types.AlarmRecommendation
+    Amazonka.ResilienceHub.Types.AlarmType
+    Amazonka.ResilienceHub.Types.App
+    Amazonka.ResilienceHub.Types.AppAssessment
+    Amazonka.ResilienceHub.Types.AppAssessmentScheduleType
+    Amazonka.ResilienceHub.Types.AppAssessmentSummary
+    Amazonka.ResilienceHub.Types.AppComplianceStatusType
+    Amazonka.ResilienceHub.Types.AppComponent
+    Amazonka.ResilienceHub.Types.AppComponentCompliance
+    Amazonka.ResilienceHub.Types.AppStatusType
+    Amazonka.ResilienceHub.Types.AppSummary
+    Amazonka.ResilienceHub.Types.AppVersionSummary
+    Amazonka.ResilienceHub.Types.AssessmentInvoker
+    Amazonka.ResilienceHub.Types.AssessmentStatus
+    Amazonka.ResilienceHub.Types.ComplianceStatus
+    Amazonka.ResilienceHub.Types.ComponentRecommendation
+    Amazonka.ResilienceHub.Types.ConfigRecommendation
+    Amazonka.ResilienceHub.Types.ConfigRecommendationOptimizationType
+    Amazonka.ResilienceHub.Types.Cost
+    Amazonka.ResilienceHub.Types.CostFrequency
+    Amazonka.ResilienceHub.Types.DataLocationConstraint
+    Amazonka.ResilienceHub.Types.DisruptionCompliance
+    Amazonka.ResilienceHub.Types.DisruptionType
+    Amazonka.ResilienceHub.Types.EstimatedCostTier
+    Amazonka.ResilienceHub.Types.FailurePolicy
+    Amazonka.ResilienceHub.Types.HaArchitecture
+    Amazonka.ResilienceHub.Types.LogicalResourceId
+    Amazonka.ResilienceHub.Types.PhysicalIdentifierType
+    Amazonka.ResilienceHub.Types.PhysicalResource
+    Amazonka.ResilienceHub.Types.PhysicalResourceId
+    Amazonka.ResilienceHub.Types.RecommendationComplianceStatus
+    Amazonka.ResilienceHub.Types.RecommendationDisruptionCompliance
+    Amazonka.ResilienceHub.Types.RecommendationItem
+    Amazonka.ResilienceHub.Types.RecommendationTemplate
+    Amazonka.ResilienceHub.Types.RecommendationTemplateStatus
+    Amazonka.ResilienceHub.Types.RenderRecommendationType
+    Amazonka.ResilienceHub.Types.ResiliencyPolicy
+    Amazonka.ResilienceHub.Types.ResiliencyPolicyTier
+    Amazonka.ResilienceHub.Types.ResiliencyScore
+    Amazonka.ResilienceHub.Types.ResourceError
+    Amazonka.ResilienceHub.Types.ResourceErrorsDetails
+    Amazonka.ResilienceHub.Types.ResourceImportStatusType
+    Amazonka.ResilienceHub.Types.ResourceMapping
+    Amazonka.ResilienceHub.Types.ResourceMappingType
+    Amazonka.ResilienceHub.Types.ResourceResolutionStatusType
+    Amazonka.ResilienceHub.Types.S3Location
+    Amazonka.ResilienceHub.Types.SopRecommendation
+    Amazonka.ResilienceHub.Types.SopServiceType
+    Amazonka.ResilienceHub.Types.TemplateFormat
+    Amazonka.ResilienceHub.Types.TerraformSource
+    Amazonka.ResilienceHub.Types.TestRecommendation
+    Amazonka.ResilienceHub.Types.TestRisk
+    Amazonka.ResilienceHub.Types.TestType
+    Amazonka.ResilienceHub.Types.UnsupportedResource
+    Amazonka.ResilienceHub.UntagResource
+    Amazonka.ResilienceHub.UpdateApp
+    Amazonka.ResilienceHub.UpdateResiliencyPolicy
+    Amazonka.ResilienceHub.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-resiliencehub-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.Gen.ResilienceHub
+    Test.Amazonka.ResilienceHub
+    Test.Amazonka.ResilienceHub.Internal
+
+  build-depends:
+    , amazonka-core           >=2.0 && <2.1
+    , amazonka-resiliencehub
+    , amazonka-test           >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AddDraftAppVersionResourceMappings.yaml b/fixture/AddDraftAppVersionResourceMappings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddDraftAppVersionResourceMappings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/AddDraftAppVersionResourceMappingsResponse.proto b/fixture/AddDraftAppVersionResourceMappingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddDraftAppVersionResourceMappingsResponse.proto
diff --git a/fixture/CreateApp.yaml b/fixture/CreateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/CreateAppResponse.proto b/fixture/CreateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppResponse.proto
diff --git a/fixture/CreateRecommendationTemplate.yaml b/fixture/CreateRecommendationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecommendationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/CreateRecommendationTemplateResponse.proto b/fixture/CreateRecommendationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecommendationTemplateResponse.proto
diff --git a/fixture/CreateResiliencyPolicy.yaml b/fixture/CreateResiliencyPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResiliencyPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/CreateResiliencyPolicyResponse.proto b/fixture/CreateResiliencyPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResiliencyPolicyResponse.proto
diff --git a/fixture/DeleteApp.yaml b/fixture/DeleteApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DeleteAppAssessment.yaml b/fixture/DeleteAppAssessment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppAssessment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DeleteAppAssessmentResponse.proto b/fixture/DeleteAppAssessmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppAssessmentResponse.proto
diff --git a/fixture/DeleteAppResponse.proto b/fixture/DeleteAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppResponse.proto
diff --git a/fixture/DeleteRecommendationTemplate.yaml b/fixture/DeleteRecommendationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecommendationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DeleteRecommendationTemplateResponse.proto b/fixture/DeleteRecommendationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecommendationTemplateResponse.proto
diff --git a/fixture/DeleteResiliencyPolicy.yaml b/fixture/DeleteResiliencyPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResiliencyPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DeleteResiliencyPolicyResponse.proto b/fixture/DeleteResiliencyPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResiliencyPolicyResponse.proto
diff --git a/fixture/DescribeApp.yaml b/fixture/DescribeApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DescribeAppAssessment.yaml b/fixture/DescribeAppAssessment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppAssessment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DescribeAppAssessmentResponse.proto b/fixture/DescribeAppAssessmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppAssessmentResponse.proto
diff --git a/fixture/DescribeAppResponse.proto b/fixture/DescribeAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppResponse.proto
diff --git a/fixture/DescribeAppVersionResourcesResolutionStatus.yaml b/fixture/DescribeAppVersionResourcesResolutionStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppVersionResourcesResolutionStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DescribeAppVersionResourcesResolutionStatusResponse.proto b/fixture/DescribeAppVersionResourcesResolutionStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppVersionResourcesResolutionStatusResponse.proto
diff --git a/fixture/DescribeAppVersionTemplate.yaml b/fixture/DescribeAppVersionTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppVersionTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DescribeAppVersionTemplateResponse.proto b/fixture/DescribeAppVersionTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppVersionTemplateResponse.proto
diff --git a/fixture/DescribeDraftAppVersionResourcesImportStatus.yaml b/fixture/DescribeDraftAppVersionResourcesImportStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDraftAppVersionResourcesImportStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DescribeDraftAppVersionResourcesImportStatusResponse.proto b/fixture/DescribeDraftAppVersionResourcesImportStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDraftAppVersionResourcesImportStatusResponse.proto
diff --git a/fixture/DescribeResiliencyPolicy.yaml b/fixture/DescribeResiliencyPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResiliencyPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/DescribeResiliencyPolicyResponse.proto b/fixture/DescribeResiliencyPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResiliencyPolicyResponse.proto
diff --git a/fixture/ImportResourcesToDraftAppVersion.yaml b/fixture/ImportResourcesToDraftAppVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportResourcesToDraftAppVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ImportResourcesToDraftAppVersionResponse.proto b/fixture/ImportResourcesToDraftAppVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportResourcesToDraftAppVersionResponse.proto
diff --git a/fixture/ListAlarmRecommendations.yaml b/fixture/ListAlarmRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlarmRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAlarmRecommendationsResponse.proto b/fixture/ListAlarmRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlarmRecommendationsResponse.proto
diff --git a/fixture/ListAppAssessments.yaml b/fixture/ListAppAssessments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppAssessments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppAssessmentsResponse.proto b/fixture/ListAppAssessmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppAssessmentsResponse.proto
diff --git a/fixture/ListAppComponentCompliances.yaml b/fixture/ListAppComponentCompliances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppComponentCompliances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppComponentCompliancesResponse.proto b/fixture/ListAppComponentCompliancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppComponentCompliancesResponse.proto
diff --git a/fixture/ListAppComponentRecommendations.yaml b/fixture/ListAppComponentRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppComponentRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppComponentRecommendationsResponse.proto b/fixture/ListAppComponentRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppComponentRecommendationsResponse.proto
diff --git a/fixture/ListAppVersionResourceMappings.yaml b/fixture/ListAppVersionResourceMappings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppVersionResourceMappings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppVersionResourceMappingsResponse.proto b/fixture/ListAppVersionResourceMappingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppVersionResourceMappingsResponse.proto
diff --git a/fixture/ListAppVersionResources.yaml b/fixture/ListAppVersionResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppVersionResources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppVersionResourcesResponse.proto b/fixture/ListAppVersionResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppVersionResourcesResponse.proto
diff --git a/fixture/ListAppVersions.yaml b/fixture/ListAppVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppVersionsResponse.proto b/fixture/ListAppVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppVersionsResponse.proto
diff --git a/fixture/ListApps.yaml b/fixture/ListApps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApps.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListAppsResponse.proto b/fixture/ListAppsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppsResponse.proto
diff --git a/fixture/ListRecommendationTemplates.yaml b/fixture/ListRecommendationTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendationTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListRecommendationTemplatesResponse.proto b/fixture/ListRecommendationTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendationTemplatesResponse.proto
diff --git a/fixture/ListResiliencyPolicies.yaml b/fixture/ListResiliencyPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListResiliencyPolicies.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListResiliencyPoliciesResponse.proto b/fixture/ListResiliencyPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListResiliencyPoliciesResponse.proto
diff --git a/fixture/ListSopRecommendations.yaml b/fixture/ListSopRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSopRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListSopRecommendationsResponse.proto b/fixture/ListSopRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSopRecommendationsResponse.proto
diff --git a/fixture/ListSuggestedResiliencyPolicies.yaml b/fixture/ListSuggestedResiliencyPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSuggestedResiliencyPolicies.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListSuggestedResiliencyPoliciesResponse.proto b/fixture/ListSuggestedResiliencyPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSuggestedResiliencyPoliciesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/ListTestRecommendations.yaml b/fixture/ListTestRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTestRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListTestRecommendationsResponse.proto b/fixture/ListTestRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTestRecommendationsResponse.proto
diff --git a/fixture/ListUnsupportedAppVersionResources.yaml b/fixture/ListUnsupportedAppVersionResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListUnsupportedAppVersionResources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ListUnsupportedAppVersionResourcesResponse.proto b/fixture/ListUnsupportedAppVersionResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListUnsupportedAppVersionResourcesResponse.proto
diff --git a/fixture/PublishAppVersion.yaml b/fixture/PublishAppVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PublishAppVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/PublishAppVersionResponse.proto b/fixture/PublishAppVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PublishAppVersionResponse.proto
diff --git a/fixture/PutDraftAppVersionTemplate.yaml b/fixture/PutDraftAppVersionTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDraftAppVersionTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/PutDraftAppVersionTemplateResponse.proto b/fixture/PutDraftAppVersionTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDraftAppVersionTemplateResponse.proto
diff --git a/fixture/RemoveDraftAppVersionResourceMappings.yaml b/fixture/RemoveDraftAppVersionResourceMappings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveDraftAppVersionResourceMappings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/RemoveDraftAppVersionResourceMappingsResponse.proto b/fixture/RemoveDraftAppVersionResourceMappingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveDraftAppVersionResourceMappingsResponse.proto
diff --git a/fixture/ResolveAppVersionResources.yaml b/fixture/ResolveAppVersionResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResolveAppVersionResources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/ResolveAppVersionResourcesResponse.proto b/fixture/ResolveAppVersionResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResolveAppVersionResourcesResponse.proto
diff --git a/fixture/StartAppAssessment.yaml b/fixture/StartAppAssessment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartAppAssessment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/StartAppAssessmentResponse.proto b/fixture/StartAppAssessmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartAppAssessmentResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateApp.yaml b/fixture/UpdateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/UpdateAppResponse.proto b/fixture/UpdateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppResponse.proto
diff --git a/fixture/UpdateResiliencyPolicy.yaml b/fixture/UpdateResiliencyPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResiliencyPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/resiliencehub/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  resiliencehub.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/UpdateResiliencyPolicyResponse.proto b/fixture/UpdateResiliencyPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResiliencyPolicyResponse.proto
diff --git a/gen/Amazonka/ResilienceHub.hs b/gen/Amazonka/ResilienceHub.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub.hs
@@ -0,0 +1,552 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ResilienceHub
+-- 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-04-30@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Resilience Hub helps you proactively prepare and protect your Amazon
+-- Web Services applications from disruptions. Resilience Hub offers
+-- continuous resiliency assessment and validation that integrates into
+-- your software development lifecycle. This enables you to uncover
+-- resiliency weaknesses, ensure recovery time objective (RTO) and recovery
+-- point objective (RPO) targets for your applications are met, and resolve
+-- issues before they are released into production.
+module Amazonka.ResilienceHub
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AddDraftAppVersionResourceMappings
+    AddDraftAppVersionResourceMappings (AddDraftAppVersionResourceMappings'),
+    newAddDraftAppVersionResourceMappings,
+    AddDraftAppVersionResourceMappingsResponse (AddDraftAppVersionResourceMappingsResponse'),
+    newAddDraftAppVersionResourceMappingsResponse,
+
+    -- ** CreateApp
+    CreateApp (CreateApp'),
+    newCreateApp,
+    CreateAppResponse (CreateAppResponse'),
+    newCreateAppResponse,
+
+    -- ** CreateRecommendationTemplate
+    CreateRecommendationTemplate (CreateRecommendationTemplate'),
+    newCreateRecommendationTemplate,
+    CreateRecommendationTemplateResponse (CreateRecommendationTemplateResponse'),
+    newCreateRecommendationTemplateResponse,
+
+    -- ** CreateResiliencyPolicy
+    CreateResiliencyPolicy (CreateResiliencyPolicy'),
+    newCreateResiliencyPolicy,
+    CreateResiliencyPolicyResponse (CreateResiliencyPolicyResponse'),
+    newCreateResiliencyPolicyResponse,
+
+    -- ** DeleteApp
+    DeleteApp (DeleteApp'),
+    newDeleteApp,
+    DeleteAppResponse (DeleteAppResponse'),
+    newDeleteAppResponse,
+
+    -- ** DeleteAppAssessment
+    DeleteAppAssessment (DeleteAppAssessment'),
+    newDeleteAppAssessment,
+    DeleteAppAssessmentResponse (DeleteAppAssessmentResponse'),
+    newDeleteAppAssessmentResponse,
+
+    -- ** DeleteRecommendationTemplate
+    DeleteRecommendationTemplate (DeleteRecommendationTemplate'),
+    newDeleteRecommendationTemplate,
+    DeleteRecommendationTemplateResponse (DeleteRecommendationTemplateResponse'),
+    newDeleteRecommendationTemplateResponse,
+
+    -- ** DeleteResiliencyPolicy
+    DeleteResiliencyPolicy (DeleteResiliencyPolicy'),
+    newDeleteResiliencyPolicy,
+    DeleteResiliencyPolicyResponse (DeleteResiliencyPolicyResponse'),
+    newDeleteResiliencyPolicyResponse,
+
+    -- ** DescribeApp
+    DescribeApp (DescribeApp'),
+    newDescribeApp,
+    DescribeAppResponse (DescribeAppResponse'),
+    newDescribeAppResponse,
+
+    -- ** DescribeAppAssessment
+    DescribeAppAssessment (DescribeAppAssessment'),
+    newDescribeAppAssessment,
+    DescribeAppAssessmentResponse (DescribeAppAssessmentResponse'),
+    newDescribeAppAssessmentResponse,
+
+    -- ** DescribeAppVersionResourcesResolutionStatus
+    DescribeAppVersionResourcesResolutionStatus (DescribeAppVersionResourcesResolutionStatus'),
+    newDescribeAppVersionResourcesResolutionStatus,
+    DescribeAppVersionResourcesResolutionStatusResponse (DescribeAppVersionResourcesResolutionStatusResponse'),
+    newDescribeAppVersionResourcesResolutionStatusResponse,
+
+    -- ** DescribeAppVersionTemplate
+    DescribeAppVersionTemplate (DescribeAppVersionTemplate'),
+    newDescribeAppVersionTemplate,
+    DescribeAppVersionTemplateResponse (DescribeAppVersionTemplateResponse'),
+    newDescribeAppVersionTemplateResponse,
+
+    -- ** DescribeDraftAppVersionResourcesImportStatus
+    DescribeDraftAppVersionResourcesImportStatus (DescribeDraftAppVersionResourcesImportStatus'),
+    newDescribeDraftAppVersionResourcesImportStatus,
+    DescribeDraftAppVersionResourcesImportStatusResponse (DescribeDraftAppVersionResourcesImportStatusResponse'),
+    newDescribeDraftAppVersionResourcesImportStatusResponse,
+
+    -- ** DescribeResiliencyPolicy
+    DescribeResiliencyPolicy (DescribeResiliencyPolicy'),
+    newDescribeResiliencyPolicy,
+    DescribeResiliencyPolicyResponse (DescribeResiliencyPolicyResponse'),
+    newDescribeResiliencyPolicyResponse,
+
+    -- ** ImportResourcesToDraftAppVersion
+    ImportResourcesToDraftAppVersion (ImportResourcesToDraftAppVersion'),
+    newImportResourcesToDraftAppVersion,
+    ImportResourcesToDraftAppVersionResponse (ImportResourcesToDraftAppVersionResponse'),
+    newImportResourcesToDraftAppVersionResponse,
+
+    -- ** ListAlarmRecommendations
+    ListAlarmRecommendations (ListAlarmRecommendations'),
+    newListAlarmRecommendations,
+    ListAlarmRecommendationsResponse (ListAlarmRecommendationsResponse'),
+    newListAlarmRecommendationsResponse,
+
+    -- ** ListAppAssessments
+    ListAppAssessments (ListAppAssessments'),
+    newListAppAssessments,
+    ListAppAssessmentsResponse (ListAppAssessmentsResponse'),
+    newListAppAssessmentsResponse,
+
+    -- ** ListAppComponentCompliances
+    ListAppComponentCompliances (ListAppComponentCompliances'),
+    newListAppComponentCompliances,
+    ListAppComponentCompliancesResponse (ListAppComponentCompliancesResponse'),
+    newListAppComponentCompliancesResponse,
+
+    -- ** ListAppComponentRecommendations
+    ListAppComponentRecommendations (ListAppComponentRecommendations'),
+    newListAppComponentRecommendations,
+    ListAppComponentRecommendationsResponse (ListAppComponentRecommendationsResponse'),
+    newListAppComponentRecommendationsResponse,
+
+    -- ** ListAppVersionResourceMappings
+    ListAppVersionResourceMappings (ListAppVersionResourceMappings'),
+    newListAppVersionResourceMappings,
+    ListAppVersionResourceMappingsResponse (ListAppVersionResourceMappingsResponse'),
+    newListAppVersionResourceMappingsResponse,
+
+    -- ** ListAppVersionResources
+    ListAppVersionResources (ListAppVersionResources'),
+    newListAppVersionResources,
+    ListAppVersionResourcesResponse (ListAppVersionResourcesResponse'),
+    newListAppVersionResourcesResponse,
+
+    -- ** ListAppVersions
+    ListAppVersions (ListAppVersions'),
+    newListAppVersions,
+    ListAppVersionsResponse (ListAppVersionsResponse'),
+    newListAppVersionsResponse,
+
+    -- ** ListApps
+    ListApps (ListApps'),
+    newListApps,
+    ListAppsResponse (ListAppsResponse'),
+    newListAppsResponse,
+
+    -- ** ListRecommendationTemplates
+    ListRecommendationTemplates (ListRecommendationTemplates'),
+    newListRecommendationTemplates,
+    ListRecommendationTemplatesResponse (ListRecommendationTemplatesResponse'),
+    newListRecommendationTemplatesResponse,
+
+    -- ** ListResiliencyPolicies
+    ListResiliencyPolicies (ListResiliencyPolicies'),
+    newListResiliencyPolicies,
+    ListResiliencyPoliciesResponse (ListResiliencyPoliciesResponse'),
+    newListResiliencyPoliciesResponse,
+
+    -- ** ListSopRecommendations
+    ListSopRecommendations (ListSopRecommendations'),
+    newListSopRecommendations,
+    ListSopRecommendationsResponse (ListSopRecommendationsResponse'),
+    newListSopRecommendationsResponse,
+
+    -- ** ListSuggestedResiliencyPolicies
+    ListSuggestedResiliencyPolicies (ListSuggestedResiliencyPolicies'),
+    newListSuggestedResiliencyPolicies,
+    ListSuggestedResiliencyPoliciesResponse (ListSuggestedResiliencyPoliciesResponse'),
+    newListSuggestedResiliencyPoliciesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListTestRecommendations
+    ListTestRecommendations (ListTestRecommendations'),
+    newListTestRecommendations,
+    ListTestRecommendationsResponse (ListTestRecommendationsResponse'),
+    newListTestRecommendationsResponse,
+
+    -- ** ListUnsupportedAppVersionResources
+    ListUnsupportedAppVersionResources (ListUnsupportedAppVersionResources'),
+    newListUnsupportedAppVersionResources,
+    ListUnsupportedAppVersionResourcesResponse (ListUnsupportedAppVersionResourcesResponse'),
+    newListUnsupportedAppVersionResourcesResponse,
+
+    -- ** PublishAppVersion
+    PublishAppVersion (PublishAppVersion'),
+    newPublishAppVersion,
+    PublishAppVersionResponse (PublishAppVersionResponse'),
+    newPublishAppVersionResponse,
+
+    -- ** PutDraftAppVersionTemplate
+    PutDraftAppVersionTemplate (PutDraftAppVersionTemplate'),
+    newPutDraftAppVersionTemplate,
+    PutDraftAppVersionTemplateResponse (PutDraftAppVersionTemplateResponse'),
+    newPutDraftAppVersionTemplateResponse,
+
+    -- ** RemoveDraftAppVersionResourceMappings
+    RemoveDraftAppVersionResourceMappings (RemoveDraftAppVersionResourceMappings'),
+    newRemoveDraftAppVersionResourceMappings,
+    RemoveDraftAppVersionResourceMappingsResponse (RemoveDraftAppVersionResourceMappingsResponse'),
+    newRemoveDraftAppVersionResourceMappingsResponse,
+
+    -- ** ResolveAppVersionResources
+    ResolveAppVersionResources (ResolveAppVersionResources'),
+    newResolveAppVersionResources,
+    ResolveAppVersionResourcesResponse (ResolveAppVersionResourcesResponse'),
+    newResolveAppVersionResourcesResponse,
+
+    -- ** StartAppAssessment
+    StartAppAssessment (StartAppAssessment'),
+    newStartAppAssessment,
+    StartAppAssessmentResponse (StartAppAssessmentResponse'),
+    newStartAppAssessmentResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApp
+    UpdateApp (UpdateApp'),
+    newUpdateApp,
+    UpdateAppResponse (UpdateAppResponse'),
+    newUpdateAppResponse,
+
+    -- ** UpdateResiliencyPolicy
+    UpdateResiliencyPolicy (UpdateResiliencyPolicy'),
+    newUpdateResiliencyPolicy,
+    UpdateResiliencyPolicyResponse (UpdateResiliencyPolicyResponse'),
+    newUpdateResiliencyPolicyResponse,
+
+    -- * Types
+
+    -- ** AlarmType
+    AlarmType (..),
+
+    -- ** AppAssessmentScheduleType
+    AppAssessmentScheduleType (..),
+
+    -- ** AppComplianceStatusType
+    AppComplianceStatusType (..),
+
+    -- ** AppStatusType
+    AppStatusType (..),
+
+    -- ** AssessmentInvoker
+    AssessmentInvoker (..),
+
+    -- ** AssessmentStatus
+    AssessmentStatus (..),
+
+    -- ** ComplianceStatus
+    ComplianceStatus (..),
+
+    -- ** ConfigRecommendationOptimizationType
+    ConfigRecommendationOptimizationType (..),
+
+    -- ** CostFrequency
+    CostFrequency (..),
+
+    -- ** DataLocationConstraint
+    DataLocationConstraint (..),
+
+    -- ** DisruptionType
+    DisruptionType (..),
+
+    -- ** EstimatedCostTier
+    EstimatedCostTier (..),
+
+    -- ** HaArchitecture
+    HaArchitecture (..),
+
+    -- ** PhysicalIdentifierType
+    PhysicalIdentifierType (..),
+
+    -- ** RecommendationComplianceStatus
+    RecommendationComplianceStatus (..),
+
+    -- ** RecommendationTemplateStatus
+    RecommendationTemplateStatus (..),
+
+    -- ** RenderRecommendationType
+    RenderRecommendationType (..),
+
+    -- ** ResiliencyPolicyTier
+    ResiliencyPolicyTier (..),
+
+    -- ** ResourceImportStatusType
+    ResourceImportStatusType (..),
+
+    -- ** ResourceMappingType
+    ResourceMappingType (..),
+
+    -- ** ResourceResolutionStatusType
+    ResourceResolutionStatusType (..),
+
+    -- ** SopServiceType
+    SopServiceType (..),
+
+    -- ** TemplateFormat
+    TemplateFormat (..),
+
+    -- ** TestRisk
+    TestRisk (..),
+
+    -- ** TestType
+    TestType (..),
+
+    -- ** AlarmRecommendation
+    AlarmRecommendation (AlarmRecommendation'),
+    newAlarmRecommendation,
+
+    -- ** App
+    App (App'),
+    newApp,
+
+    -- ** AppAssessment
+    AppAssessment (AppAssessment'),
+    newAppAssessment,
+
+    -- ** AppAssessmentSummary
+    AppAssessmentSummary (AppAssessmentSummary'),
+    newAppAssessmentSummary,
+
+    -- ** AppComponent
+    AppComponent (AppComponent'),
+    newAppComponent,
+
+    -- ** AppComponentCompliance
+    AppComponentCompliance (AppComponentCompliance'),
+    newAppComponentCompliance,
+
+    -- ** AppSummary
+    AppSummary (AppSummary'),
+    newAppSummary,
+
+    -- ** AppVersionSummary
+    AppVersionSummary (AppVersionSummary'),
+    newAppVersionSummary,
+
+    -- ** ComponentRecommendation
+    ComponentRecommendation (ComponentRecommendation'),
+    newComponentRecommendation,
+
+    -- ** ConfigRecommendation
+    ConfigRecommendation (ConfigRecommendation'),
+    newConfigRecommendation,
+
+    -- ** Cost
+    Cost (Cost'),
+    newCost,
+
+    -- ** DisruptionCompliance
+    DisruptionCompliance (DisruptionCompliance'),
+    newDisruptionCompliance,
+
+    -- ** FailurePolicy
+    FailurePolicy (FailurePolicy'),
+    newFailurePolicy,
+
+    -- ** LogicalResourceId
+    LogicalResourceId (LogicalResourceId'),
+    newLogicalResourceId,
+
+    -- ** PhysicalResource
+    PhysicalResource (PhysicalResource'),
+    newPhysicalResource,
+
+    -- ** PhysicalResourceId
+    PhysicalResourceId (PhysicalResourceId'),
+    newPhysicalResourceId,
+
+    -- ** RecommendationDisruptionCompliance
+    RecommendationDisruptionCompliance (RecommendationDisruptionCompliance'),
+    newRecommendationDisruptionCompliance,
+
+    -- ** RecommendationItem
+    RecommendationItem (RecommendationItem'),
+    newRecommendationItem,
+
+    -- ** RecommendationTemplate
+    RecommendationTemplate (RecommendationTemplate'),
+    newRecommendationTemplate,
+
+    -- ** ResiliencyPolicy
+    ResiliencyPolicy (ResiliencyPolicy'),
+    newResiliencyPolicy,
+
+    -- ** ResiliencyScore
+    ResiliencyScore (ResiliencyScore'),
+    newResiliencyScore,
+
+    -- ** ResourceError
+    ResourceError (ResourceError'),
+    newResourceError,
+
+    -- ** ResourceErrorsDetails
+    ResourceErrorsDetails (ResourceErrorsDetails'),
+    newResourceErrorsDetails,
+
+    -- ** ResourceMapping
+    ResourceMapping (ResourceMapping'),
+    newResourceMapping,
+
+    -- ** S3Location
+    S3Location (S3Location'),
+    newS3Location,
+
+    -- ** SopRecommendation
+    SopRecommendation (SopRecommendation'),
+    newSopRecommendation,
+
+    -- ** TerraformSource
+    TerraformSource (TerraformSource'),
+    newTerraformSource,
+
+    -- ** TestRecommendation
+    TestRecommendation (TestRecommendation'),
+    newTestRecommendation,
+
+    -- ** UnsupportedResource
+    UnsupportedResource (UnsupportedResource'),
+    newUnsupportedResource,
+  )
+where
+
+import Amazonka.ResilienceHub.AddDraftAppVersionResourceMappings
+import Amazonka.ResilienceHub.CreateApp
+import Amazonka.ResilienceHub.CreateRecommendationTemplate
+import Amazonka.ResilienceHub.CreateResiliencyPolicy
+import Amazonka.ResilienceHub.DeleteApp
+import Amazonka.ResilienceHub.DeleteAppAssessment
+import Amazonka.ResilienceHub.DeleteRecommendationTemplate
+import Amazonka.ResilienceHub.DeleteResiliencyPolicy
+import Amazonka.ResilienceHub.DescribeApp
+import Amazonka.ResilienceHub.DescribeAppAssessment
+import Amazonka.ResilienceHub.DescribeAppVersionResourcesResolutionStatus
+import Amazonka.ResilienceHub.DescribeAppVersionTemplate
+import Amazonka.ResilienceHub.DescribeDraftAppVersionResourcesImportStatus
+import Amazonka.ResilienceHub.DescribeResiliencyPolicy
+import Amazonka.ResilienceHub.ImportResourcesToDraftAppVersion
+import Amazonka.ResilienceHub.Lens
+import Amazonka.ResilienceHub.ListAlarmRecommendations
+import Amazonka.ResilienceHub.ListAppAssessments
+import Amazonka.ResilienceHub.ListAppComponentCompliances
+import Amazonka.ResilienceHub.ListAppComponentRecommendations
+import Amazonka.ResilienceHub.ListAppVersionResourceMappings
+import Amazonka.ResilienceHub.ListAppVersionResources
+import Amazonka.ResilienceHub.ListAppVersions
+import Amazonka.ResilienceHub.ListApps
+import Amazonka.ResilienceHub.ListRecommendationTemplates
+import Amazonka.ResilienceHub.ListResiliencyPolicies
+import Amazonka.ResilienceHub.ListSopRecommendations
+import Amazonka.ResilienceHub.ListSuggestedResiliencyPolicies
+import Amazonka.ResilienceHub.ListTagsForResource
+import Amazonka.ResilienceHub.ListTestRecommendations
+import Amazonka.ResilienceHub.ListUnsupportedAppVersionResources
+import Amazonka.ResilienceHub.PublishAppVersion
+import Amazonka.ResilienceHub.PutDraftAppVersionTemplate
+import Amazonka.ResilienceHub.RemoveDraftAppVersionResourceMappings
+import Amazonka.ResilienceHub.ResolveAppVersionResources
+import Amazonka.ResilienceHub.StartAppAssessment
+import Amazonka.ResilienceHub.TagResource
+import Amazonka.ResilienceHub.Types
+import Amazonka.ResilienceHub.UntagResource
+import Amazonka.ResilienceHub.UpdateApp
+import Amazonka.ResilienceHub.UpdateResiliencyPolicy
+import Amazonka.ResilienceHub.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 'ResilienceHub'.
+
+-- $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/ResilienceHub/AddDraftAppVersionResourceMappings.hs b/gen/Amazonka/ResilienceHub/AddDraftAppVersionResourceMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/AddDraftAppVersionResourceMappings.hs
@@ -0,0 +1,295 @@
+{-# 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.ResilienceHub.AddDraftAppVersionResourceMappings
+-- 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 the resource mapping for the draft application version.
+module Amazonka.ResilienceHub.AddDraftAppVersionResourceMappings
+  ( -- * Creating a Request
+    AddDraftAppVersionResourceMappings (..),
+    newAddDraftAppVersionResourceMappings,
+
+    -- * Request Lenses
+    addDraftAppVersionResourceMappings_appArn,
+    addDraftAppVersionResourceMappings_resourceMappings,
+
+    -- * Destructuring the Response
+    AddDraftAppVersionResourceMappingsResponse (..),
+    newAddDraftAppVersionResourceMappingsResponse,
+
+    -- * Response Lenses
+    addDraftAppVersionResourceMappingsResponse_httpStatus,
+    addDraftAppVersionResourceMappingsResponse_appArn,
+    addDraftAppVersionResourceMappingsResponse_appVersion,
+    addDraftAppVersionResourceMappingsResponse_resourceMappings,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAddDraftAppVersionResourceMappings' smart constructor.
+data AddDraftAppVersionResourceMappings = AddDraftAppVersionResourceMappings'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | Mappings used to map logical resources from the template to physical
+    -- resources. You can use the mapping type @CFN_STACK@ if the application
+    -- template uses a logical stack name. Or you can map individual resources
+    -- by using the mapping type @RESOURCE@. We recommend using the mapping
+    -- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+    resourceMappings :: [ResourceMapping]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddDraftAppVersionResourceMappings' with all optional fields 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:
+--
+-- 'appArn', 'addDraftAppVersionResourceMappings_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'resourceMappings', 'addDraftAppVersionResourceMappings_resourceMappings' - Mappings used to map logical resources from the template to physical
+-- resources. You can use the mapping type @CFN_STACK@ if the application
+-- template uses a logical stack name. Or you can map individual resources
+-- by using the mapping type @RESOURCE@. We recommend using the mapping
+-- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+newAddDraftAppVersionResourceMappings ::
+  -- | 'appArn'
+  Prelude.Text ->
+  AddDraftAppVersionResourceMappings
+newAddDraftAppVersionResourceMappings pAppArn_ =
+  AddDraftAppVersionResourceMappings'
+    { appArn =
+        pAppArn_,
+      resourceMappings = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+addDraftAppVersionResourceMappings_appArn :: Lens.Lens' AddDraftAppVersionResourceMappings Prelude.Text
+addDraftAppVersionResourceMappings_appArn = Lens.lens (\AddDraftAppVersionResourceMappings' {appArn} -> appArn) (\s@AddDraftAppVersionResourceMappings' {} a -> s {appArn = a} :: AddDraftAppVersionResourceMappings)
+
+-- | Mappings used to map logical resources from the template to physical
+-- resources. You can use the mapping type @CFN_STACK@ if the application
+-- template uses a logical stack name. Or you can map individual resources
+-- by using the mapping type @RESOURCE@. We recommend using the mapping
+-- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+addDraftAppVersionResourceMappings_resourceMappings :: Lens.Lens' AddDraftAppVersionResourceMappings [ResourceMapping]
+addDraftAppVersionResourceMappings_resourceMappings = Lens.lens (\AddDraftAppVersionResourceMappings' {resourceMappings} -> resourceMappings) (\s@AddDraftAppVersionResourceMappings' {} a -> s {resourceMappings = a} :: AddDraftAppVersionResourceMappings) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    AddDraftAppVersionResourceMappings
+  where
+  type
+    AWSResponse AddDraftAppVersionResourceMappings =
+      AddDraftAppVersionResourceMappingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddDraftAppVersionResourceMappingsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+            Prelude.<*> (x Data..:> "appVersion")
+            Prelude.<*> ( x
+                            Data..?> "resourceMappings"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    AddDraftAppVersionResourceMappings
+  where
+  hashWithSalt
+    _salt
+    AddDraftAppVersionResourceMappings' {..} =
+      _salt
+        `Prelude.hashWithSalt` appArn
+        `Prelude.hashWithSalt` resourceMappings
+
+instance
+  Prelude.NFData
+    AddDraftAppVersionResourceMappings
+  where
+  rnf AddDraftAppVersionResourceMappings' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf resourceMappings
+
+instance
+  Data.ToHeaders
+    AddDraftAppVersionResourceMappings
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    AddDraftAppVersionResourceMappings
+  where
+  toJSON AddDraftAppVersionResourceMappings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just
+              ("resourceMappings" Data..= resourceMappings)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AddDraftAppVersionResourceMappings
+  where
+  toPath =
+    Prelude.const
+      "/add-draft-app-version-resource-mappings"
+
+instance
+  Data.ToQuery
+    AddDraftAppVersionResourceMappings
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddDraftAppVersionResourceMappingsResponse' smart constructor.
+data AddDraftAppVersionResourceMappingsResponse = AddDraftAppVersionResourceMappingsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text,
+    -- | Mappings used to map logical resources from the template to physical
+    -- resources. You can use the mapping type @CFN_STACK@ if the application
+    -- template uses a logical stack name. Or you can map individual resources
+    -- by using the mapping type @RESOURCE@. We recommend using the mapping
+    -- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+    resourceMappings :: [ResourceMapping]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddDraftAppVersionResourceMappingsResponse' with all optional fields 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', 'addDraftAppVersionResourceMappingsResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'addDraftAppVersionResourceMappingsResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'addDraftAppVersionResourceMappingsResponse_appVersion' - The version of the application.
+--
+-- 'resourceMappings', 'addDraftAppVersionResourceMappingsResponse_resourceMappings' - Mappings used to map logical resources from the template to physical
+-- resources. You can use the mapping type @CFN_STACK@ if the application
+-- template uses a logical stack name. Or you can map individual resources
+-- by using the mapping type @RESOURCE@. We recommend using the mapping
+-- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+newAddDraftAppVersionResourceMappingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  AddDraftAppVersionResourceMappingsResponse
+newAddDraftAppVersionResourceMappingsResponse
+  pHttpStatus_
+  pAppArn_
+  pAppVersion_ =
+    AddDraftAppVersionResourceMappingsResponse'
+      { httpStatus =
+          pHttpStatus_,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_,
+        resourceMappings =
+          Prelude.mempty
+      }
+
+-- | The response's http status code.
+addDraftAppVersionResourceMappingsResponse_httpStatus :: Lens.Lens' AddDraftAppVersionResourceMappingsResponse Prelude.Int
+addDraftAppVersionResourceMappingsResponse_httpStatus = Lens.lens (\AddDraftAppVersionResourceMappingsResponse' {httpStatus} -> httpStatus) (\s@AddDraftAppVersionResourceMappingsResponse' {} a -> s {httpStatus = a} :: AddDraftAppVersionResourceMappingsResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+addDraftAppVersionResourceMappingsResponse_appArn :: Lens.Lens' AddDraftAppVersionResourceMappingsResponse Prelude.Text
+addDraftAppVersionResourceMappingsResponse_appArn = Lens.lens (\AddDraftAppVersionResourceMappingsResponse' {appArn} -> appArn) (\s@AddDraftAppVersionResourceMappingsResponse' {} a -> s {appArn = a} :: AddDraftAppVersionResourceMappingsResponse)
+
+-- | The version of the application.
+addDraftAppVersionResourceMappingsResponse_appVersion :: Lens.Lens' AddDraftAppVersionResourceMappingsResponse Prelude.Text
+addDraftAppVersionResourceMappingsResponse_appVersion = Lens.lens (\AddDraftAppVersionResourceMappingsResponse' {appVersion} -> appVersion) (\s@AddDraftAppVersionResourceMappingsResponse' {} a -> s {appVersion = a} :: AddDraftAppVersionResourceMappingsResponse)
+
+-- | Mappings used to map logical resources from the template to physical
+-- resources. You can use the mapping type @CFN_STACK@ if the application
+-- template uses a logical stack name. Or you can map individual resources
+-- by using the mapping type @RESOURCE@. We recommend using the mapping
+-- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+addDraftAppVersionResourceMappingsResponse_resourceMappings :: Lens.Lens' AddDraftAppVersionResourceMappingsResponse [ResourceMapping]
+addDraftAppVersionResourceMappingsResponse_resourceMappings = Lens.lens (\AddDraftAppVersionResourceMappingsResponse' {resourceMappings} -> resourceMappings) (\s@AddDraftAppVersionResourceMappingsResponse' {} a -> s {resourceMappings = a} :: AddDraftAppVersionResourceMappingsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    AddDraftAppVersionResourceMappingsResponse
+  where
+  rnf AddDraftAppVersionResourceMappingsResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf resourceMappings
diff --git a/gen/Amazonka/ResilienceHub/CreateApp.hs b/gen/Amazonka/ResilienceHub/CreateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/CreateApp.hs
@@ -0,0 +1,276 @@
+{-# 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.ResilienceHub.CreateApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Resilience Hub application. A Resilience Hub application is a
+-- collection of Amazon Web Services resources structured to prevent and
+-- recover Amazon Web Services application disruptions. To describe a
+-- Resilience Hub application, you provide an application name, resources
+-- from one or more–up to five–CloudFormation stacks, and an appropriate
+-- resiliency policy.
+--
+-- After you create a Resilience Hub application, you publish it so that
+-- you can run a resiliency assessment on it. You can then use
+-- recommendations from the assessment to improve resiliency by running
+-- another assessment, comparing results, and then iterating the process
+-- until you achieve your goals for recovery time objective (RTO) and
+-- recovery point objective (RPO).
+module Amazonka.ResilienceHub.CreateApp
+  ( -- * Creating a Request
+    CreateApp (..),
+    newCreateApp,
+
+    -- * Request Lenses
+    createApp_assessmentSchedule,
+    createApp_clientToken,
+    createApp_description,
+    createApp_policyArn,
+    createApp_tags,
+    createApp_name,
+
+    -- * Destructuring the Response
+    CreateAppResponse (..),
+    newCreateAppResponse,
+
+    -- * Response Lenses
+    createAppResponse_httpStatus,
+    createAppResponse_app,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateApp' smart constructor.
+data CreateApp = CreateApp'
+  { -- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+    assessmentSchedule :: Prelude.Maybe AppAssessmentScheduleType,
+    -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The optional description for an app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The name for the application.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApp' with all optional fields 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:
+--
+-- 'assessmentSchedule', 'createApp_assessmentSchedule' - Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+--
+-- 'clientToken', 'createApp_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'description', 'createApp_description' - The optional description for an app.
+--
+-- 'policyArn', 'createApp_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'tags', 'createApp_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'name', 'createApp_name' - The name for the application.
+newCreateApp ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateApp
+newCreateApp pName_ =
+  CreateApp'
+    { assessmentSchedule = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      policyArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+createApp_assessmentSchedule :: Lens.Lens' CreateApp (Prelude.Maybe AppAssessmentScheduleType)
+createApp_assessmentSchedule = Lens.lens (\CreateApp' {assessmentSchedule} -> assessmentSchedule) (\s@CreateApp' {} a -> s {assessmentSchedule = a} :: CreateApp)
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+createApp_clientToken :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_clientToken = Lens.lens (\CreateApp' {clientToken} -> clientToken) (\s@CreateApp' {} a -> s {clientToken = a} :: CreateApp)
+
+-- | The optional description for an app.
+createApp_description :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_description = Lens.lens (\CreateApp' {description} -> description) (\s@CreateApp' {} a -> s {description = a} :: CreateApp)
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+createApp_policyArn :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_policyArn = Lens.lens (\CreateApp' {policyArn} -> policyArn) (\s@CreateApp' {} a -> s {policyArn = a} :: CreateApp)
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+createApp_tags :: Lens.Lens' CreateApp (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApp_tags = Lens.lens (\CreateApp' {tags} -> tags) (\s@CreateApp' {} a -> s {tags = a} :: CreateApp) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The name for the application.
+createApp_name :: Lens.Lens' CreateApp Prelude.Text
+createApp_name = Lens.lens (\CreateApp' {name} -> name) (\s@CreateApp' {} a -> s {name = a} :: CreateApp)
+
+instance Core.AWSRequest CreateApp where
+  type AWSResponse CreateApp = CreateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable CreateApp where
+  hashWithSalt _salt CreateApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` assessmentSchedule
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` policyArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateApp where
+  rnf CreateApp' {..} =
+    Prelude.rnf assessmentSchedule
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf policyArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApp where
+  toJSON CreateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("assessmentSchedule" Data..=)
+              Prelude.<$> assessmentSchedule,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("policyArn" Data..=) Prelude.<$> policyArn,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateApp where
+  toPath = Prelude.const "/create-app"
+
+instance Data.ToQuery CreateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppResponse' smart constructor.
+data CreateAppResponse = CreateAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The created application returned as an object with details including
+    -- compliance status, creation time, description, resiliency score, and
+    -- more.
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppResponse' with all optional fields 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', 'createAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'createAppResponse_app' - The created application returned as an object with details including
+-- compliance status, creation time, description, resiliency score, and
+-- more.
+newCreateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  CreateAppResponse
+newCreateAppResponse pHttpStatus_ pApp_ =
+  CreateAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+createAppResponse_httpStatus :: Lens.Lens' CreateAppResponse Prelude.Int
+createAppResponse_httpStatus = Lens.lens (\CreateAppResponse' {httpStatus} -> httpStatus) (\s@CreateAppResponse' {} a -> s {httpStatus = a} :: CreateAppResponse)
+
+-- | The created application returned as an object with details including
+-- compliance status, creation time, description, resiliency score, and
+-- more.
+createAppResponse_app :: Lens.Lens' CreateAppResponse App
+createAppResponse_app = Lens.lens (\CreateAppResponse' {app} -> app) (\s@CreateAppResponse' {} a -> s {app = a} :: CreateAppResponse)
+
+instance Prelude.NFData CreateAppResponse where
+  rnf CreateAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/ResilienceHub/CreateRecommendationTemplate.hs b/gen/Amazonka/ResilienceHub/CreateRecommendationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/CreateRecommendationTemplate.hs
@@ -0,0 +1,358 @@
+{-# 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.ResilienceHub.CreateRecommendationTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new recommendation template.
+module Amazonka.ResilienceHub.CreateRecommendationTemplate
+  ( -- * Creating a Request
+    CreateRecommendationTemplate (..),
+    newCreateRecommendationTemplate,
+
+    -- * Request Lenses
+    createRecommendationTemplate_bucketName,
+    createRecommendationTemplate_clientToken,
+    createRecommendationTemplate_format,
+    createRecommendationTemplate_recommendationIds,
+    createRecommendationTemplate_recommendationTypes,
+    createRecommendationTemplate_tags,
+    createRecommendationTemplate_assessmentArn,
+    createRecommendationTemplate_name,
+
+    -- * Destructuring the Response
+    CreateRecommendationTemplateResponse (..),
+    newCreateRecommendationTemplateResponse,
+
+    -- * Response Lenses
+    createRecommendationTemplateResponse_recommendationTemplate,
+    createRecommendationTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRecommendationTemplate' smart constructor.
+data CreateRecommendationTemplate = CreateRecommendationTemplate'
+  { -- | The name of the Amazon S3 bucket that will contain the recommendation
+    -- template.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The format for the recommendation template.
+    --
+    -- [CfnJson]
+    --     The template is CloudFormation JSON.
+    --
+    -- [CfnYaml]
+    --     The template is CloudFormation YAML.
+    format :: Prelude.Maybe TemplateFormat,
+    -- | Identifiers for the recommendations used to create a recommendation
+    -- template.
+    recommendationIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | An array of strings that specify the recommendation template type or
+    -- types.
+    --
+    -- [Alarm]
+    --     The template is an AlarmRecommendation template.
+    --
+    -- [Sop]
+    --     The template is a SopRecommendation template.
+    --
+    -- [Test]
+    --     The template is a TestRecommendation template.
+    recommendationTypes :: Prelude.Maybe (Prelude.NonEmpty RenderRecommendationType),
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text,
+    -- | The name for the recommendation template.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecommendationTemplate' with all optional fields 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:
+--
+-- 'bucketName', 'createRecommendationTemplate_bucketName' - The name of the Amazon S3 bucket that will contain the recommendation
+-- template.
+--
+-- 'clientToken', 'createRecommendationTemplate_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'format', 'createRecommendationTemplate_format' - The format for the recommendation template.
+--
+-- [CfnJson]
+--     The template is CloudFormation JSON.
+--
+-- [CfnYaml]
+--     The template is CloudFormation YAML.
+--
+-- 'recommendationIds', 'createRecommendationTemplate_recommendationIds' - Identifiers for the recommendations used to create a recommendation
+-- template.
+--
+-- 'recommendationTypes', 'createRecommendationTemplate_recommendationTypes' - An array of strings that specify the recommendation template type or
+-- types.
+--
+-- [Alarm]
+--     The template is an AlarmRecommendation template.
+--
+-- [Sop]
+--     The template is a SopRecommendation template.
+--
+-- [Test]
+--     The template is a TestRecommendation template.
+--
+-- 'tags', 'createRecommendationTemplate_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'assessmentArn', 'createRecommendationTemplate_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'name', 'createRecommendationTemplate_name' - The name for the recommendation template.
+newCreateRecommendationTemplate ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateRecommendationTemplate
+newCreateRecommendationTemplate
+  pAssessmentArn_
+  pName_ =
+    CreateRecommendationTemplate'
+      { bucketName =
+          Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        format = Prelude.Nothing,
+        recommendationIds = Prelude.Nothing,
+        recommendationTypes = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        assessmentArn = pAssessmentArn_,
+        name = pName_
+      }
+
+-- | The name of the Amazon S3 bucket that will contain the recommendation
+-- template.
+createRecommendationTemplate_bucketName :: Lens.Lens' CreateRecommendationTemplate (Prelude.Maybe Prelude.Text)
+createRecommendationTemplate_bucketName = Lens.lens (\CreateRecommendationTemplate' {bucketName} -> bucketName) (\s@CreateRecommendationTemplate' {} a -> s {bucketName = a} :: CreateRecommendationTemplate)
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+createRecommendationTemplate_clientToken :: Lens.Lens' CreateRecommendationTemplate (Prelude.Maybe Prelude.Text)
+createRecommendationTemplate_clientToken = Lens.lens (\CreateRecommendationTemplate' {clientToken} -> clientToken) (\s@CreateRecommendationTemplate' {} a -> s {clientToken = a} :: CreateRecommendationTemplate)
+
+-- | The format for the recommendation template.
+--
+-- [CfnJson]
+--     The template is CloudFormation JSON.
+--
+-- [CfnYaml]
+--     The template is CloudFormation YAML.
+createRecommendationTemplate_format :: Lens.Lens' CreateRecommendationTemplate (Prelude.Maybe TemplateFormat)
+createRecommendationTemplate_format = Lens.lens (\CreateRecommendationTemplate' {format} -> format) (\s@CreateRecommendationTemplate' {} a -> s {format = a} :: CreateRecommendationTemplate)
+
+-- | Identifiers for the recommendations used to create a recommendation
+-- template.
+createRecommendationTemplate_recommendationIds :: Lens.Lens' CreateRecommendationTemplate (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createRecommendationTemplate_recommendationIds = Lens.lens (\CreateRecommendationTemplate' {recommendationIds} -> recommendationIds) (\s@CreateRecommendationTemplate' {} a -> s {recommendationIds = a} :: CreateRecommendationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of strings that specify the recommendation template type or
+-- types.
+--
+-- [Alarm]
+--     The template is an AlarmRecommendation template.
+--
+-- [Sop]
+--     The template is a SopRecommendation template.
+--
+-- [Test]
+--     The template is a TestRecommendation template.
+createRecommendationTemplate_recommendationTypes :: Lens.Lens' CreateRecommendationTemplate (Prelude.Maybe (Prelude.NonEmpty RenderRecommendationType))
+createRecommendationTemplate_recommendationTypes = Lens.lens (\CreateRecommendationTemplate' {recommendationTypes} -> recommendationTypes) (\s@CreateRecommendationTemplate' {} a -> s {recommendationTypes = a} :: CreateRecommendationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+createRecommendationTemplate_tags :: Lens.Lens' CreateRecommendationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRecommendationTemplate_tags = Lens.lens (\CreateRecommendationTemplate' {tags} -> tags) (\s@CreateRecommendationTemplate' {} a -> s {tags = a} :: CreateRecommendationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+createRecommendationTemplate_assessmentArn :: Lens.Lens' CreateRecommendationTemplate Prelude.Text
+createRecommendationTemplate_assessmentArn = Lens.lens (\CreateRecommendationTemplate' {assessmentArn} -> assessmentArn) (\s@CreateRecommendationTemplate' {} a -> s {assessmentArn = a} :: CreateRecommendationTemplate)
+
+-- | The name for the recommendation template.
+createRecommendationTemplate_name :: Lens.Lens' CreateRecommendationTemplate Prelude.Text
+createRecommendationTemplate_name = Lens.lens (\CreateRecommendationTemplate' {name} -> name) (\s@CreateRecommendationTemplate' {} a -> s {name = a} :: CreateRecommendationTemplate)
+
+instance Core.AWSRequest CreateRecommendationTemplate where
+  type
+    AWSResponse CreateRecommendationTemplate =
+      CreateRecommendationTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRecommendationTemplateResponse'
+            Prelude.<$> (x Data..?> "recommendationTemplate")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateRecommendationTemplate
+  where
+  hashWithSalt _salt CreateRecommendationTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` recommendationIds
+      `Prelude.hashWithSalt` recommendationTypes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assessmentArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateRecommendationTemplate where
+  rnf CreateRecommendationTemplate' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf recommendationIds
+      `Prelude.seq` Prelude.rnf recommendationTypes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assessmentArn
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateRecommendationTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRecommendationTemplate where
+  toJSON CreateRecommendationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucketName" Data..=) Prelude.<$> bucketName,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("format" Data..=) Prelude.<$> format,
+            ("recommendationIds" Data..=)
+              Prelude.<$> recommendationIds,
+            ("recommendationTypes" Data..=)
+              Prelude.<$> recommendationTypes,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("assessmentArn" Data..= assessmentArn),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateRecommendationTemplate where
+  toPath =
+    Prelude.const "/create-recommendation-template"
+
+instance Data.ToQuery CreateRecommendationTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRecommendationTemplateResponse' smart constructor.
+data CreateRecommendationTemplateResponse = CreateRecommendationTemplateResponse'
+  { -- | The newly created recommendation template, returned as an object. This
+    -- object includes the template\'s name, format, status, tags, Amazon S3
+    -- bucket location, and more.
+    recommendationTemplate :: Prelude.Maybe RecommendationTemplate,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecommendationTemplateResponse' with all optional fields 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:
+--
+-- 'recommendationTemplate', 'createRecommendationTemplateResponse_recommendationTemplate' - The newly created recommendation template, returned as an object. This
+-- object includes the template\'s name, format, status, tags, Amazon S3
+-- bucket location, and more.
+--
+-- 'httpStatus', 'createRecommendationTemplateResponse_httpStatus' - The response's http status code.
+newCreateRecommendationTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRecommendationTemplateResponse
+newCreateRecommendationTemplateResponse pHttpStatus_ =
+  CreateRecommendationTemplateResponse'
+    { recommendationTemplate =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The newly created recommendation template, returned as an object. This
+-- object includes the template\'s name, format, status, tags, Amazon S3
+-- bucket location, and more.
+createRecommendationTemplateResponse_recommendationTemplate :: Lens.Lens' CreateRecommendationTemplateResponse (Prelude.Maybe RecommendationTemplate)
+createRecommendationTemplateResponse_recommendationTemplate = Lens.lens (\CreateRecommendationTemplateResponse' {recommendationTemplate} -> recommendationTemplate) (\s@CreateRecommendationTemplateResponse' {} a -> s {recommendationTemplate = a} :: CreateRecommendationTemplateResponse)
+
+-- | The response's http status code.
+createRecommendationTemplateResponse_httpStatus :: Lens.Lens' CreateRecommendationTemplateResponse Prelude.Int
+createRecommendationTemplateResponse_httpStatus = Lens.lens (\CreateRecommendationTemplateResponse' {httpStatus} -> httpStatus) (\s@CreateRecommendationTemplateResponse' {} a -> s {httpStatus = a} :: CreateRecommendationTemplateResponse)
+
+instance
+  Prelude.NFData
+    CreateRecommendationTemplateResponse
+  where
+  rnf CreateRecommendationTemplateResponse' {..} =
+    Prelude.rnf recommendationTemplate
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/CreateResiliencyPolicy.hs b/gen/Amazonka/ResilienceHub/CreateResiliencyPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/CreateResiliencyPolicy.hs
@@ -0,0 +1,280 @@
+{-# 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.ResilienceHub.CreateResiliencyPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a resiliency policy for an application.
+module Amazonka.ResilienceHub.CreateResiliencyPolicy
+  ( -- * Creating a Request
+    CreateResiliencyPolicy (..),
+    newCreateResiliencyPolicy,
+
+    -- * Request Lenses
+    createResiliencyPolicy_clientToken,
+    createResiliencyPolicy_dataLocationConstraint,
+    createResiliencyPolicy_policyDescription,
+    createResiliencyPolicy_tags,
+    createResiliencyPolicy_policy,
+    createResiliencyPolicy_policyName,
+    createResiliencyPolicy_tier,
+
+    -- * Destructuring the Response
+    CreateResiliencyPolicyResponse (..),
+    newCreateResiliencyPolicyResponse,
+
+    -- * Response Lenses
+    createResiliencyPolicyResponse_httpStatus,
+    createResiliencyPolicyResponse_policy,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateResiliencyPolicy' smart constructor.
+data CreateResiliencyPolicy = CreateResiliencyPolicy'
+  { -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a high-level geographical location constraint for where your
+    -- resilience policy data can be stored.
+    dataLocationConstraint :: Prelude.Maybe DataLocationConstraint,
+    -- | The description for the policy.
+    policyDescription :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The type of resiliency policy to be created, including the recovery time
+    -- objective (RTO) and recovery point objective (RPO) in seconds.
+    policy :: Prelude.HashMap DisruptionType FailurePolicy,
+    -- | The name of the policy
+    policyName :: Prelude.Text,
+    -- | The tier for this resiliency policy, ranging from the highest severity
+    -- (@MissionCritical@) to lowest (@NonCritical@).
+    tier :: ResiliencyPolicyTier
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResiliencyPolicy' with all optional fields 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', 'createResiliencyPolicy_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'dataLocationConstraint', 'createResiliencyPolicy_dataLocationConstraint' - Specifies a high-level geographical location constraint for where your
+-- resilience policy data can be stored.
+--
+-- 'policyDescription', 'createResiliencyPolicy_policyDescription' - The description for the policy.
+--
+-- 'tags', 'createResiliencyPolicy_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'policy', 'createResiliencyPolicy_policy' - The type of resiliency policy to be created, including the recovery time
+-- objective (RTO) and recovery point objective (RPO) in seconds.
+--
+-- 'policyName', 'createResiliencyPolicy_policyName' - The name of the policy
+--
+-- 'tier', 'createResiliencyPolicy_tier' - The tier for this resiliency policy, ranging from the highest severity
+-- (@MissionCritical@) to lowest (@NonCritical@).
+newCreateResiliencyPolicy ::
+  -- | 'policyName'
+  Prelude.Text ->
+  -- | 'tier'
+  ResiliencyPolicyTier ->
+  CreateResiliencyPolicy
+newCreateResiliencyPolicy pPolicyName_ pTier_ =
+  CreateResiliencyPolicy'
+    { clientToken =
+        Prelude.Nothing,
+      dataLocationConstraint = Prelude.Nothing,
+      policyDescription = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      policy = Prelude.mempty,
+      policyName = pPolicyName_,
+      tier = pTier_
+    }
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+createResiliencyPolicy_clientToken :: Lens.Lens' CreateResiliencyPolicy (Prelude.Maybe Prelude.Text)
+createResiliencyPolicy_clientToken = Lens.lens (\CreateResiliencyPolicy' {clientToken} -> clientToken) (\s@CreateResiliencyPolicy' {} a -> s {clientToken = a} :: CreateResiliencyPolicy)
+
+-- | Specifies a high-level geographical location constraint for where your
+-- resilience policy data can be stored.
+createResiliencyPolicy_dataLocationConstraint :: Lens.Lens' CreateResiliencyPolicy (Prelude.Maybe DataLocationConstraint)
+createResiliencyPolicy_dataLocationConstraint = Lens.lens (\CreateResiliencyPolicy' {dataLocationConstraint} -> dataLocationConstraint) (\s@CreateResiliencyPolicy' {} a -> s {dataLocationConstraint = a} :: CreateResiliencyPolicy)
+
+-- | The description for the policy.
+createResiliencyPolicy_policyDescription :: Lens.Lens' CreateResiliencyPolicy (Prelude.Maybe Prelude.Text)
+createResiliencyPolicy_policyDescription = Lens.lens (\CreateResiliencyPolicy' {policyDescription} -> policyDescription) (\s@CreateResiliencyPolicy' {} a -> s {policyDescription = a} :: CreateResiliencyPolicy)
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+createResiliencyPolicy_tags :: Lens.Lens' CreateResiliencyPolicy (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createResiliencyPolicy_tags = Lens.lens (\CreateResiliencyPolicy' {tags} -> tags) (\s@CreateResiliencyPolicy' {} a -> s {tags = a} :: CreateResiliencyPolicy) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The type of resiliency policy to be created, including the recovery time
+-- objective (RTO) and recovery point objective (RPO) in seconds.
+createResiliencyPolicy_policy :: Lens.Lens' CreateResiliencyPolicy (Prelude.HashMap DisruptionType FailurePolicy)
+createResiliencyPolicy_policy = Lens.lens (\CreateResiliencyPolicy' {policy} -> policy) (\s@CreateResiliencyPolicy' {} a -> s {policy = a} :: CreateResiliencyPolicy) Prelude.. Lens.coerced
+
+-- | The name of the policy
+createResiliencyPolicy_policyName :: Lens.Lens' CreateResiliencyPolicy Prelude.Text
+createResiliencyPolicy_policyName = Lens.lens (\CreateResiliencyPolicy' {policyName} -> policyName) (\s@CreateResiliencyPolicy' {} a -> s {policyName = a} :: CreateResiliencyPolicy)
+
+-- | The tier for this resiliency policy, ranging from the highest severity
+-- (@MissionCritical@) to lowest (@NonCritical@).
+createResiliencyPolicy_tier :: Lens.Lens' CreateResiliencyPolicy ResiliencyPolicyTier
+createResiliencyPolicy_tier = Lens.lens (\CreateResiliencyPolicy' {tier} -> tier) (\s@CreateResiliencyPolicy' {} a -> s {tier = a} :: CreateResiliencyPolicy)
+
+instance Core.AWSRequest CreateResiliencyPolicy where
+  type
+    AWSResponse CreateResiliencyPolicy =
+      CreateResiliencyPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateResiliencyPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "policy")
+      )
+
+instance Prelude.Hashable CreateResiliencyPolicy where
+  hashWithSalt _salt CreateResiliencyPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dataLocationConstraint
+      `Prelude.hashWithSalt` policyDescription
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` policyName
+      `Prelude.hashWithSalt` tier
+
+instance Prelude.NFData CreateResiliencyPolicy where
+  rnf CreateResiliencyPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dataLocationConstraint
+      `Prelude.seq` Prelude.rnf policyDescription
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf policyName
+      `Prelude.seq` Prelude.rnf tier
+
+instance Data.ToHeaders CreateResiliencyPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateResiliencyPolicy where
+  toJSON CreateResiliencyPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("dataLocationConstraint" Data..=)
+              Prelude.<$> dataLocationConstraint,
+            ("policyDescription" Data..=)
+              Prelude.<$> policyDescription,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("policy" Data..= policy),
+            Prelude.Just ("policyName" Data..= policyName),
+            Prelude.Just ("tier" Data..= tier)
+          ]
+      )
+
+instance Data.ToPath CreateResiliencyPolicy where
+  toPath = Prelude.const "/create-resiliency-policy"
+
+instance Data.ToQuery CreateResiliencyPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateResiliencyPolicyResponse' smart constructor.
+data CreateResiliencyPolicyResponse = CreateResiliencyPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The type of resiliency policy that was created, including the recovery
+    -- time objective (RTO) and recovery point objective (RPO) in seconds.
+    policy :: ResiliencyPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResiliencyPolicyResponse' with all optional fields 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', 'createResiliencyPolicyResponse_httpStatus' - The response's http status code.
+--
+-- 'policy', 'createResiliencyPolicyResponse_policy' - The type of resiliency policy that was created, including the recovery
+-- time objective (RTO) and recovery point objective (RPO) in seconds.
+newCreateResiliencyPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'policy'
+  ResiliencyPolicy ->
+  CreateResiliencyPolicyResponse
+newCreateResiliencyPolicyResponse
+  pHttpStatus_
+  pPolicy_ =
+    CreateResiliencyPolicyResponse'
+      { httpStatus =
+          pHttpStatus_,
+        policy = pPolicy_
+      }
+
+-- | The response's http status code.
+createResiliencyPolicyResponse_httpStatus :: Lens.Lens' CreateResiliencyPolicyResponse Prelude.Int
+createResiliencyPolicyResponse_httpStatus = Lens.lens (\CreateResiliencyPolicyResponse' {httpStatus} -> httpStatus) (\s@CreateResiliencyPolicyResponse' {} a -> s {httpStatus = a} :: CreateResiliencyPolicyResponse)
+
+-- | The type of resiliency policy that was created, including the recovery
+-- time objective (RTO) and recovery point objective (RPO) in seconds.
+createResiliencyPolicyResponse_policy :: Lens.Lens' CreateResiliencyPolicyResponse ResiliencyPolicy
+createResiliencyPolicyResponse_policy = Lens.lens (\CreateResiliencyPolicyResponse' {policy} -> policy) (\s@CreateResiliencyPolicyResponse' {} a -> s {policy = a} :: CreateResiliencyPolicyResponse)
+
+instance
+  Prelude.NFData
+    CreateResiliencyPolicyResponse
+  where
+  rnf CreateResiliencyPolicyResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf policy
diff --git a/gen/Amazonka/ResilienceHub/DeleteApp.hs b/gen/Amazonka/ResilienceHub/DeleteApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DeleteApp.hs
@@ -0,0 +1,225 @@
+{-# 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.ResilienceHub.DeleteApp
+-- 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 an AWS Resilience Hub application. This is a destructive action
+-- that can\'t be undone.
+module Amazonka.ResilienceHub.DeleteApp
+  ( -- * Creating a Request
+    DeleteApp (..),
+    newDeleteApp,
+
+    -- * Request Lenses
+    deleteApp_clientToken,
+    deleteApp_forceDelete,
+    deleteApp_appArn,
+
+    -- * Destructuring the Response
+    DeleteAppResponse (..),
+    newDeleteAppResponse,
+
+    -- * Response Lenses
+    deleteAppResponse_httpStatus,
+    deleteAppResponse_appArn,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApp' smart constructor.
+data DeleteApp = DeleteApp'
+  { -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A boolean option to force the deletion of a Resilience Hub application.
+    forceDelete :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApp' with all optional fields 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', 'deleteApp_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'forceDelete', 'deleteApp_forceDelete' - A boolean option to force the deletion of a Resilience Hub application.
+--
+-- 'appArn', 'deleteApp_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDeleteApp ::
+  -- | 'appArn'
+  Prelude.Text ->
+  DeleteApp
+newDeleteApp pAppArn_ =
+  DeleteApp'
+    { clientToken = Prelude.Nothing,
+      forceDelete = Prelude.Nothing,
+      appArn = pAppArn_
+    }
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+deleteApp_clientToken :: Lens.Lens' DeleteApp (Prelude.Maybe Prelude.Text)
+deleteApp_clientToken = Lens.lens (\DeleteApp' {clientToken} -> clientToken) (\s@DeleteApp' {} a -> s {clientToken = a} :: DeleteApp)
+
+-- | A boolean option to force the deletion of a Resilience Hub application.
+deleteApp_forceDelete :: Lens.Lens' DeleteApp (Prelude.Maybe Prelude.Bool)
+deleteApp_forceDelete = Lens.lens (\DeleteApp' {forceDelete} -> forceDelete) (\s@DeleteApp' {} a -> s {forceDelete = a} :: DeleteApp)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+deleteApp_appArn :: Lens.Lens' DeleteApp Prelude.Text
+deleteApp_appArn = Lens.lens (\DeleteApp' {appArn} -> appArn) (\s@DeleteApp' {} a -> s {appArn = a} :: DeleteApp)
+
+instance Core.AWSRequest DeleteApp where
+  type AWSResponse DeleteApp = DeleteAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+      )
+
+instance Prelude.Hashable DeleteApp where
+  hashWithSalt _salt DeleteApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` forceDelete
+      `Prelude.hashWithSalt` appArn
+
+instance Prelude.NFData DeleteApp where
+  rnf DeleteApp' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf forceDelete
+      `Prelude.seq` Prelude.rnf appArn
+
+instance Data.ToHeaders DeleteApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteApp where
+  toJSON DeleteApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("forceDelete" Data..=) Prelude.<$> forceDelete,
+            Prelude.Just ("appArn" Data..= appArn)
+          ]
+      )
+
+instance Data.ToPath DeleteApp where
+  toPath = Prelude.const "/delete-app"
+
+instance Data.ToQuery DeleteApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppResponse' smart constructor.
+data DeleteAppResponse = DeleteAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppResponse' with all optional fields 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', 'deleteAppResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'deleteAppResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDeleteAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  DeleteAppResponse
+newDeleteAppResponse pHttpStatus_ pAppArn_ =
+  DeleteAppResponse'
+    { httpStatus = pHttpStatus_,
+      appArn = pAppArn_
+    }
+
+-- | The response's http status code.
+deleteAppResponse_httpStatus :: Lens.Lens' DeleteAppResponse Prelude.Int
+deleteAppResponse_httpStatus = Lens.lens (\DeleteAppResponse' {httpStatus} -> httpStatus) (\s@DeleteAppResponse' {} a -> s {httpStatus = a} :: DeleteAppResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+deleteAppResponse_appArn :: Lens.Lens' DeleteAppResponse Prelude.Text
+deleteAppResponse_appArn = Lens.lens (\DeleteAppResponse' {appArn} -> appArn) (\s@DeleteAppResponse' {} a -> s {appArn = a} :: DeleteAppResponse)
+
+instance Prelude.NFData DeleteAppResponse where
+  rnf DeleteAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appArn
diff --git a/gen/Amazonka/ResilienceHub/DeleteAppAssessment.hs b/gen/Amazonka/ResilienceHub/DeleteAppAssessment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DeleteAppAssessment.hs
@@ -0,0 +1,239 @@
+{-# 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.ResilienceHub.DeleteAppAssessment
+-- 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 an AWS Resilience Hub application assessment. This is a
+-- destructive action that can\'t be undone.
+module Amazonka.ResilienceHub.DeleteAppAssessment
+  ( -- * Creating a Request
+    DeleteAppAssessment (..),
+    newDeleteAppAssessment,
+
+    -- * Request Lenses
+    deleteAppAssessment_clientToken,
+    deleteAppAssessment_assessmentArn,
+
+    -- * Destructuring the Response
+    DeleteAppAssessmentResponse (..),
+    newDeleteAppAssessmentResponse,
+
+    -- * Response Lenses
+    deleteAppAssessmentResponse_httpStatus,
+    deleteAppAssessmentResponse_assessmentArn,
+    deleteAppAssessmentResponse_assessmentStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAppAssessment' smart constructor.
+data DeleteAppAssessment = DeleteAppAssessment'
+  { -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppAssessment' with all optional fields 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', 'deleteAppAssessment_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'assessmentArn', 'deleteAppAssessment_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDeleteAppAssessment ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  DeleteAppAssessment
+newDeleteAppAssessment pAssessmentArn_ =
+  DeleteAppAssessment'
+    { clientToken = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+deleteAppAssessment_clientToken :: Lens.Lens' DeleteAppAssessment (Prelude.Maybe Prelude.Text)
+deleteAppAssessment_clientToken = Lens.lens (\DeleteAppAssessment' {clientToken} -> clientToken) (\s@DeleteAppAssessment' {} a -> s {clientToken = a} :: DeleteAppAssessment)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+deleteAppAssessment_assessmentArn :: Lens.Lens' DeleteAppAssessment Prelude.Text
+deleteAppAssessment_assessmentArn = Lens.lens (\DeleteAppAssessment' {assessmentArn} -> assessmentArn) (\s@DeleteAppAssessment' {} a -> s {assessmentArn = a} :: DeleteAppAssessment)
+
+instance Core.AWSRequest DeleteAppAssessment where
+  type
+    AWSResponse DeleteAppAssessment =
+      DeleteAppAssessmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteAppAssessmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "assessmentArn")
+            Prelude.<*> (x Data..:> "assessmentStatus")
+      )
+
+instance Prelude.Hashable DeleteAppAssessment where
+  hashWithSalt _salt DeleteAppAssessment' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData DeleteAppAssessment where
+  rnf DeleteAppAssessment' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance Data.ToHeaders DeleteAppAssessment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAppAssessment where
+  toJSON DeleteAppAssessment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath DeleteAppAssessment where
+  toPath = Prelude.const "/delete-app-assessment"
+
+instance Data.ToQuery DeleteAppAssessment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppAssessmentResponse' smart constructor.
+data DeleteAppAssessmentResponse = DeleteAppAssessmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text,
+    -- | The current status of the assessment for the resiliency policy.
+    assessmentStatus :: AssessmentStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppAssessmentResponse' with all optional fields 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', 'deleteAppAssessmentResponse_httpStatus' - The response's http status code.
+--
+-- 'assessmentArn', 'deleteAppAssessmentResponse_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'assessmentStatus', 'deleteAppAssessmentResponse_assessmentStatus' - The current status of the assessment for the resiliency policy.
+newDeleteAppAssessmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  -- | 'assessmentStatus'
+  AssessmentStatus ->
+  DeleteAppAssessmentResponse
+newDeleteAppAssessmentResponse
+  pHttpStatus_
+  pAssessmentArn_
+  pAssessmentStatus_ =
+    DeleteAppAssessmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        assessmentArn = pAssessmentArn_,
+        assessmentStatus = pAssessmentStatus_
+      }
+
+-- | The response's http status code.
+deleteAppAssessmentResponse_httpStatus :: Lens.Lens' DeleteAppAssessmentResponse Prelude.Int
+deleteAppAssessmentResponse_httpStatus = Lens.lens (\DeleteAppAssessmentResponse' {httpStatus} -> httpStatus) (\s@DeleteAppAssessmentResponse' {} a -> s {httpStatus = a} :: DeleteAppAssessmentResponse)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+deleteAppAssessmentResponse_assessmentArn :: Lens.Lens' DeleteAppAssessmentResponse Prelude.Text
+deleteAppAssessmentResponse_assessmentArn = Lens.lens (\DeleteAppAssessmentResponse' {assessmentArn} -> assessmentArn) (\s@DeleteAppAssessmentResponse' {} a -> s {assessmentArn = a} :: DeleteAppAssessmentResponse)
+
+-- | The current status of the assessment for the resiliency policy.
+deleteAppAssessmentResponse_assessmentStatus :: Lens.Lens' DeleteAppAssessmentResponse AssessmentStatus
+deleteAppAssessmentResponse_assessmentStatus = Lens.lens (\DeleteAppAssessmentResponse' {assessmentStatus} -> assessmentStatus) (\s@DeleteAppAssessmentResponse' {} a -> s {assessmentStatus = a} :: DeleteAppAssessmentResponse)
+
+instance Prelude.NFData DeleteAppAssessmentResponse where
+  rnf DeleteAppAssessmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf assessmentArn
+      `Prelude.seq` Prelude.rnf assessmentStatus
diff --git a/gen/Amazonka/ResilienceHub/DeleteRecommendationTemplate.hs b/gen/Amazonka/ResilienceHub/DeleteRecommendationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DeleteRecommendationTemplate.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.ResilienceHub.DeleteRecommendationTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a recommendation template. This is a destructive action that
+-- can\'t be undone.
+module Amazonka.ResilienceHub.DeleteRecommendationTemplate
+  ( -- * Creating a Request
+    DeleteRecommendationTemplate (..),
+    newDeleteRecommendationTemplate,
+
+    -- * Request Lenses
+    deleteRecommendationTemplate_clientToken,
+    deleteRecommendationTemplate_recommendationTemplateArn,
+
+    -- * Destructuring the Response
+    DeleteRecommendationTemplateResponse (..),
+    newDeleteRecommendationTemplateResponse,
+
+    -- * Response Lenses
+    deleteRecommendationTemplateResponse_httpStatus,
+    deleteRecommendationTemplateResponse_recommendationTemplateArn,
+    deleteRecommendationTemplateResponse_status,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRecommendationTemplate' smart constructor.
+data DeleteRecommendationTemplate = DeleteRecommendationTemplate'
+  { -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for a recommendation template.
+    recommendationTemplateArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecommendationTemplate' with all optional fields 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', 'deleteRecommendationTemplate_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'recommendationTemplateArn', 'deleteRecommendationTemplate_recommendationTemplateArn' - The Amazon Resource Name (ARN) for a recommendation template.
+newDeleteRecommendationTemplate ::
+  -- | 'recommendationTemplateArn'
+  Prelude.Text ->
+  DeleteRecommendationTemplate
+newDeleteRecommendationTemplate
+  pRecommendationTemplateArn_ =
+    DeleteRecommendationTemplate'
+      { clientToken =
+          Prelude.Nothing,
+        recommendationTemplateArn =
+          pRecommendationTemplateArn_
+      }
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+deleteRecommendationTemplate_clientToken :: Lens.Lens' DeleteRecommendationTemplate (Prelude.Maybe Prelude.Text)
+deleteRecommendationTemplate_clientToken = Lens.lens (\DeleteRecommendationTemplate' {clientToken} -> clientToken) (\s@DeleteRecommendationTemplate' {} a -> s {clientToken = a} :: DeleteRecommendationTemplate)
+
+-- | The Amazon Resource Name (ARN) for a recommendation template.
+deleteRecommendationTemplate_recommendationTemplateArn :: Lens.Lens' DeleteRecommendationTemplate Prelude.Text
+deleteRecommendationTemplate_recommendationTemplateArn = Lens.lens (\DeleteRecommendationTemplate' {recommendationTemplateArn} -> recommendationTemplateArn) (\s@DeleteRecommendationTemplate' {} a -> s {recommendationTemplateArn = a} :: DeleteRecommendationTemplate)
+
+instance Core.AWSRequest DeleteRecommendationTemplate where
+  type
+    AWSResponse DeleteRecommendationTemplate =
+      DeleteRecommendationTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteRecommendationTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "recommendationTemplateArn")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance
+  Prelude.Hashable
+    DeleteRecommendationTemplate
+  where
+  hashWithSalt _salt DeleteRecommendationTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` recommendationTemplateArn
+
+instance Prelude.NFData DeleteRecommendationTemplate where
+  rnf DeleteRecommendationTemplate' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf recommendationTemplateArn
+
+instance Data.ToHeaders DeleteRecommendationTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRecommendationTemplate where
+  toJSON DeleteRecommendationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just
+              ( "recommendationTemplateArn"
+                  Data..= recommendationTemplateArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteRecommendationTemplate where
+  toPath =
+    Prelude.const "/delete-recommendation-template"
+
+instance Data.ToQuery DeleteRecommendationTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRecommendationTemplateResponse' smart constructor.
+data DeleteRecommendationTemplateResponse = DeleteRecommendationTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) for a recommendation template.
+    recommendationTemplateArn :: Prelude.Text,
+    -- | The status of the action.
+    status :: RecommendationTemplateStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecommendationTemplateResponse' with all optional fields 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', 'deleteRecommendationTemplateResponse_httpStatus' - The response's http status code.
+--
+-- 'recommendationTemplateArn', 'deleteRecommendationTemplateResponse_recommendationTemplateArn' - The Amazon Resource Name (ARN) for a recommendation template.
+--
+-- 'status', 'deleteRecommendationTemplateResponse_status' - The status of the action.
+newDeleteRecommendationTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'recommendationTemplateArn'
+  Prelude.Text ->
+  -- | 'status'
+  RecommendationTemplateStatus ->
+  DeleteRecommendationTemplateResponse
+newDeleteRecommendationTemplateResponse
+  pHttpStatus_
+  pRecommendationTemplateArn_
+  pStatus_ =
+    DeleteRecommendationTemplateResponse'
+      { httpStatus =
+          pHttpStatus_,
+        recommendationTemplateArn =
+          pRecommendationTemplateArn_,
+        status = pStatus_
+      }
+
+-- | The response's http status code.
+deleteRecommendationTemplateResponse_httpStatus :: Lens.Lens' DeleteRecommendationTemplateResponse Prelude.Int
+deleteRecommendationTemplateResponse_httpStatus = Lens.lens (\DeleteRecommendationTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteRecommendationTemplateResponse' {} a -> s {httpStatus = a} :: DeleteRecommendationTemplateResponse)
+
+-- | The Amazon Resource Name (ARN) for a recommendation template.
+deleteRecommendationTemplateResponse_recommendationTemplateArn :: Lens.Lens' DeleteRecommendationTemplateResponse Prelude.Text
+deleteRecommendationTemplateResponse_recommendationTemplateArn = Lens.lens (\DeleteRecommendationTemplateResponse' {recommendationTemplateArn} -> recommendationTemplateArn) (\s@DeleteRecommendationTemplateResponse' {} a -> s {recommendationTemplateArn = a} :: DeleteRecommendationTemplateResponse)
+
+-- | The status of the action.
+deleteRecommendationTemplateResponse_status :: Lens.Lens' DeleteRecommendationTemplateResponse RecommendationTemplateStatus
+deleteRecommendationTemplateResponse_status = Lens.lens (\DeleteRecommendationTemplateResponse' {status} -> status) (\s@DeleteRecommendationTemplateResponse' {} a -> s {status = a} :: DeleteRecommendationTemplateResponse)
+
+instance
+  Prelude.NFData
+    DeleteRecommendationTemplateResponse
+  where
+  rnf DeleteRecommendationTemplateResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf recommendationTemplateArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ResilienceHub/DeleteResiliencyPolicy.hs b/gen/Amazonka/ResilienceHub/DeleteResiliencyPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DeleteResiliencyPolicy.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.DeleteResiliencyPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a resiliency policy. This is a destructive action that can\'t be
+-- undone.
+module Amazonka.ResilienceHub.DeleteResiliencyPolicy
+  ( -- * Creating a Request
+    DeleteResiliencyPolicy (..),
+    newDeleteResiliencyPolicy,
+
+    -- * Request Lenses
+    deleteResiliencyPolicy_clientToken,
+    deleteResiliencyPolicy_policyArn,
+
+    -- * Destructuring the Response
+    DeleteResiliencyPolicyResponse (..),
+    newDeleteResiliencyPolicyResponse,
+
+    -- * Response Lenses
+    deleteResiliencyPolicyResponse_httpStatus,
+    deleteResiliencyPolicyResponse_policyArn,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteResiliencyPolicy' smart constructor.
+data DeleteResiliencyPolicy = DeleteResiliencyPolicy'
+  { -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResiliencyPolicy' with all optional fields 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', 'deleteResiliencyPolicy_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'policyArn', 'deleteResiliencyPolicy_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDeleteResiliencyPolicy ::
+  -- | 'policyArn'
+  Prelude.Text ->
+  DeleteResiliencyPolicy
+newDeleteResiliencyPolicy pPolicyArn_ =
+  DeleteResiliencyPolicy'
+    { clientToken =
+        Prelude.Nothing,
+      policyArn = pPolicyArn_
+    }
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+deleteResiliencyPolicy_clientToken :: Lens.Lens' DeleteResiliencyPolicy (Prelude.Maybe Prelude.Text)
+deleteResiliencyPolicy_clientToken = Lens.lens (\DeleteResiliencyPolicy' {clientToken} -> clientToken) (\s@DeleteResiliencyPolicy' {} a -> s {clientToken = a} :: DeleteResiliencyPolicy)
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+deleteResiliencyPolicy_policyArn :: Lens.Lens' DeleteResiliencyPolicy Prelude.Text
+deleteResiliencyPolicy_policyArn = Lens.lens (\DeleteResiliencyPolicy' {policyArn} -> policyArn) (\s@DeleteResiliencyPolicy' {} a -> s {policyArn = a} :: DeleteResiliencyPolicy)
+
+instance Core.AWSRequest DeleteResiliencyPolicy where
+  type
+    AWSResponse DeleteResiliencyPolicy =
+      DeleteResiliencyPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteResiliencyPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "policyArn")
+      )
+
+instance Prelude.Hashable DeleteResiliencyPolicy where
+  hashWithSalt _salt DeleteResiliencyPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` policyArn
+
+instance Prelude.NFData DeleteResiliencyPolicy where
+  rnf DeleteResiliencyPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf policyArn
+
+instance Data.ToHeaders DeleteResiliencyPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteResiliencyPolicy where
+  toJSON DeleteResiliencyPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("policyArn" Data..= policyArn)
+          ]
+      )
+
+instance Data.ToPath DeleteResiliencyPolicy where
+  toPath = Prelude.const "/delete-resiliency-policy"
+
+instance Data.ToQuery DeleteResiliencyPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteResiliencyPolicyResponse' smart constructor.
+data DeleteResiliencyPolicyResponse = DeleteResiliencyPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResiliencyPolicyResponse' with all optional fields 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', 'deleteResiliencyPolicyResponse_httpStatus' - The response's http status code.
+--
+-- 'policyArn', 'deleteResiliencyPolicyResponse_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDeleteResiliencyPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'policyArn'
+  Prelude.Text ->
+  DeleteResiliencyPolicyResponse
+newDeleteResiliencyPolicyResponse
+  pHttpStatus_
+  pPolicyArn_ =
+    DeleteResiliencyPolicyResponse'
+      { httpStatus =
+          pHttpStatus_,
+        policyArn = pPolicyArn_
+      }
+
+-- | The response's http status code.
+deleteResiliencyPolicyResponse_httpStatus :: Lens.Lens' DeleteResiliencyPolicyResponse Prelude.Int
+deleteResiliencyPolicyResponse_httpStatus = Lens.lens (\DeleteResiliencyPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteResiliencyPolicyResponse' {} a -> s {httpStatus = a} :: DeleteResiliencyPolicyResponse)
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+deleteResiliencyPolicyResponse_policyArn :: Lens.Lens' DeleteResiliencyPolicyResponse Prelude.Text
+deleteResiliencyPolicyResponse_policyArn = Lens.lens (\DeleteResiliencyPolicyResponse' {policyArn} -> policyArn) (\s@DeleteResiliencyPolicyResponse' {} a -> s {policyArn = a} :: DeleteResiliencyPolicyResponse)
+
+instance
+  Prelude.NFData
+    DeleteResiliencyPolicyResponse
+  where
+  rnf DeleteResiliencyPolicyResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf policyArn
diff --git a/gen/Amazonka/ResilienceHub/DescribeApp.hs b/gen/Amazonka/ResilienceHub/DescribeApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DescribeApp.hs
@@ -0,0 +1,181 @@
+{-# 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.ResilienceHub.DescribeApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an AWS Resilience Hub application.
+module Amazonka.ResilienceHub.DescribeApp
+  ( -- * Creating a Request
+    DescribeApp (..),
+    newDescribeApp,
+
+    -- * Request Lenses
+    describeApp_appArn,
+
+    -- * Destructuring the Response
+    DescribeAppResponse (..),
+    newDescribeAppResponse,
+
+    -- * Response Lenses
+    describeAppResponse_httpStatus,
+    describeAppResponse_app,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeApp' smart constructor.
+data DescribeApp = DescribeApp'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeApp' with all optional fields 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:
+--
+-- 'appArn', 'describeApp_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDescribeApp ::
+  -- | 'appArn'
+  Prelude.Text ->
+  DescribeApp
+newDescribeApp pAppArn_ =
+  DescribeApp' {appArn = pAppArn_}
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeApp_appArn :: Lens.Lens' DescribeApp Prelude.Text
+describeApp_appArn = Lens.lens (\DescribeApp' {appArn} -> appArn) (\s@DescribeApp' {} a -> s {appArn = a} :: DescribeApp)
+
+instance Core.AWSRequest DescribeApp where
+  type AWSResponse DescribeApp = DescribeAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable DescribeApp where
+  hashWithSalt _salt DescribeApp' {..} =
+    _salt `Prelude.hashWithSalt` appArn
+
+instance Prelude.NFData DescribeApp where
+  rnf DescribeApp' {..} = Prelude.rnf appArn
+
+instance Data.ToHeaders DescribeApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeApp where
+  toJSON DescribeApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("appArn" Data..= appArn)]
+      )
+
+instance Data.ToPath DescribeApp where
+  toPath = Prelude.const "/describe-app"
+
+instance Data.ToQuery DescribeApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppResponse' smart constructor.
+data DescribeAppResponse = DescribeAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The specified application, returned as an object with details including
+    -- compliance status, creation time, description, resiliency score, and
+    -- more.
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppResponse' with all optional fields 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', 'describeAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'describeAppResponse_app' - The specified application, returned as an object with details including
+-- compliance status, creation time, description, resiliency score, and
+-- more.
+newDescribeAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  DescribeAppResponse
+newDescribeAppResponse pHttpStatus_ pApp_ =
+  DescribeAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+describeAppResponse_httpStatus :: Lens.Lens' DescribeAppResponse Prelude.Int
+describeAppResponse_httpStatus = Lens.lens (\DescribeAppResponse' {httpStatus} -> httpStatus) (\s@DescribeAppResponse' {} a -> s {httpStatus = a} :: DescribeAppResponse)
+
+-- | The specified application, returned as an object with details including
+-- compliance status, creation time, description, resiliency score, and
+-- more.
+describeAppResponse_app :: Lens.Lens' DescribeAppResponse App
+describeAppResponse_app = Lens.lens (\DescribeAppResponse' {app} -> app) (\s@DescribeAppResponse' {} a -> s {app = a} :: DescribeAppResponse)
+
+instance Prelude.NFData DescribeAppResponse where
+  rnf DescribeAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/ResilienceHub/DescribeAppAssessment.hs b/gen/Amazonka/ResilienceHub/DescribeAppAssessment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DescribeAppAssessment.hs
@@ -0,0 +1,198 @@
+{-# 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.ResilienceHub.DescribeAppAssessment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an assessment for an AWS Resilience Hub application.
+module Amazonka.ResilienceHub.DescribeAppAssessment
+  ( -- * Creating a Request
+    DescribeAppAssessment (..),
+    newDescribeAppAssessment,
+
+    -- * Request Lenses
+    describeAppAssessment_assessmentArn,
+
+    -- * Destructuring the Response
+    DescribeAppAssessmentResponse (..),
+    newDescribeAppAssessmentResponse,
+
+    -- * Response Lenses
+    describeAppAssessmentResponse_httpStatus,
+    describeAppAssessmentResponse_assessment,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAppAssessment' smart constructor.
+data DescribeAppAssessment = DescribeAppAssessment'
+  { -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppAssessment' with all optional fields 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:
+--
+-- 'assessmentArn', 'describeAppAssessment_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDescribeAppAssessment ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  DescribeAppAssessment
+newDescribeAppAssessment pAssessmentArn_ =
+  DescribeAppAssessment'
+    { assessmentArn =
+        pAssessmentArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAppAssessment_assessmentArn :: Lens.Lens' DescribeAppAssessment Prelude.Text
+describeAppAssessment_assessmentArn = Lens.lens (\DescribeAppAssessment' {assessmentArn} -> assessmentArn) (\s@DescribeAppAssessment' {} a -> s {assessmentArn = a} :: DescribeAppAssessment)
+
+instance Core.AWSRequest DescribeAppAssessment where
+  type
+    AWSResponse DescribeAppAssessment =
+      DescribeAppAssessmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppAssessmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "assessment")
+      )
+
+instance Prelude.Hashable DescribeAppAssessment where
+  hashWithSalt _salt DescribeAppAssessment' {..} =
+    _salt `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData DescribeAppAssessment where
+  rnf DescribeAppAssessment' {..} =
+    Prelude.rnf assessmentArn
+
+instance Data.ToHeaders DescribeAppAssessment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAppAssessment where
+  toJSON DescribeAppAssessment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath DescribeAppAssessment where
+  toPath = Prelude.const "/describe-app-assessment"
+
+instance Data.ToQuery DescribeAppAssessment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppAssessmentResponse' smart constructor.
+data DescribeAppAssessmentResponse = DescribeAppAssessmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The assessment for an AWS Resilience Hub application, returned as an
+    -- object. This object includes Amazon Resource Names (ARNs), compliance
+    -- information, compliance status, cost, messages, resiliency scores, and
+    -- more.
+    assessment :: AppAssessment
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppAssessmentResponse' with all optional fields 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', 'describeAppAssessmentResponse_httpStatus' - The response's http status code.
+--
+-- 'assessment', 'describeAppAssessmentResponse_assessment' - The assessment for an AWS Resilience Hub application, returned as an
+-- object. This object includes Amazon Resource Names (ARNs), compliance
+-- information, compliance status, cost, messages, resiliency scores, and
+-- more.
+newDescribeAppAssessmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'assessment'
+  AppAssessment ->
+  DescribeAppAssessmentResponse
+newDescribeAppAssessmentResponse
+  pHttpStatus_
+  pAssessment_ =
+    DescribeAppAssessmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        assessment = pAssessment_
+      }
+
+-- | The response's http status code.
+describeAppAssessmentResponse_httpStatus :: Lens.Lens' DescribeAppAssessmentResponse Prelude.Int
+describeAppAssessmentResponse_httpStatus = Lens.lens (\DescribeAppAssessmentResponse' {httpStatus} -> httpStatus) (\s@DescribeAppAssessmentResponse' {} a -> s {httpStatus = a} :: DescribeAppAssessmentResponse)
+
+-- | The assessment for an AWS Resilience Hub application, returned as an
+-- object. This object includes Amazon Resource Names (ARNs), compliance
+-- information, compliance status, cost, messages, resiliency scores, and
+-- more.
+describeAppAssessmentResponse_assessment :: Lens.Lens' DescribeAppAssessmentResponse AppAssessment
+describeAppAssessmentResponse_assessment = Lens.lens (\DescribeAppAssessmentResponse' {assessment} -> assessment) (\s@DescribeAppAssessmentResponse' {} a -> s {assessment = a} :: DescribeAppAssessmentResponse)
+
+instance Prelude.NFData DescribeAppAssessmentResponse where
+  rnf DescribeAppAssessmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf assessment
diff --git a/gen/Amazonka/ResilienceHub/DescribeAppVersionResourcesResolutionStatus.hs b/gen/Amazonka/ResilienceHub/DescribeAppVersionResourcesResolutionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DescribeAppVersionResourcesResolutionStatus.hs
@@ -0,0 +1,321 @@
+{-# 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.ResilienceHub.DescribeAppVersionResourcesResolutionStatus
+-- 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 resolution status for the specified resolution identifier
+-- for an application version. If @resolutionId@ is not specified, the
+-- current resolution status is returned.
+module Amazonka.ResilienceHub.DescribeAppVersionResourcesResolutionStatus
+  ( -- * Creating a Request
+    DescribeAppVersionResourcesResolutionStatus (..),
+    newDescribeAppVersionResourcesResolutionStatus,
+
+    -- * Request Lenses
+    describeAppVersionResourcesResolutionStatus_resolutionId,
+    describeAppVersionResourcesResolutionStatus_appArn,
+    describeAppVersionResourcesResolutionStatus_appVersion,
+
+    -- * Destructuring the Response
+    DescribeAppVersionResourcesResolutionStatusResponse (..),
+    newDescribeAppVersionResourcesResolutionStatusResponse,
+
+    -- * Response Lenses
+    describeAppVersionResourcesResolutionStatusResponse_errorMessage,
+    describeAppVersionResourcesResolutionStatusResponse_httpStatus,
+    describeAppVersionResourcesResolutionStatusResponse_appArn,
+    describeAppVersionResourcesResolutionStatusResponse_appVersion,
+    describeAppVersionResourcesResolutionStatusResponse_resolutionId,
+    describeAppVersionResourcesResolutionStatusResponse_status,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAppVersionResourcesResolutionStatus' smart constructor.
+data DescribeAppVersionResourcesResolutionStatus = DescribeAppVersionResourcesResolutionStatus'
+  { -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppVersionResourcesResolutionStatus' with all optional fields 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:
+--
+-- 'resolutionId', 'describeAppVersionResourcesResolutionStatus_resolutionId' - The identifier for a specific resolution.
+--
+-- 'appArn', 'describeAppVersionResourcesResolutionStatus_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'describeAppVersionResourcesResolutionStatus_appVersion' - The version of the application.
+newDescribeAppVersionResourcesResolutionStatus ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  DescribeAppVersionResourcesResolutionStatus
+newDescribeAppVersionResourcesResolutionStatus
+  pAppArn_
+  pAppVersion_ =
+    DescribeAppVersionResourcesResolutionStatus'
+      { resolutionId =
+          Prelude.Nothing,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_
+      }
+
+-- | The identifier for a specific resolution.
+describeAppVersionResourcesResolutionStatus_resolutionId :: Lens.Lens' DescribeAppVersionResourcesResolutionStatus (Prelude.Maybe Prelude.Text)
+describeAppVersionResourcesResolutionStatus_resolutionId = Lens.lens (\DescribeAppVersionResourcesResolutionStatus' {resolutionId} -> resolutionId) (\s@DescribeAppVersionResourcesResolutionStatus' {} a -> s {resolutionId = a} :: DescribeAppVersionResourcesResolutionStatus)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAppVersionResourcesResolutionStatus_appArn :: Lens.Lens' DescribeAppVersionResourcesResolutionStatus Prelude.Text
+describeAppVersionResourcesResolutionStatus_appArn = Lens.lens (\DescribeAppVersionResourcesResolutionStatus' {appArn} -> appArn) (\s@DescribeAppVersionResourcesResolutionStatus' {} a -> s {appArn = a} :: DescribeAppVersionResourcesResolutionStatus)
+
+-- | The version of the application.
+describeAppVersionResourcesResolutionStatus_appVersion :: Lens.Lens' DescribeAppVersionResourcesResolutionStatus Prelude.Text
+describeAppVersionResourcesResolutionStatus_appVersion = Lens.lens (\DescribeAppVersionResourcesResolutionStatus' {appVersion} -> appVersion) (\s@DescribeAppVersionResourcesResolutionStatus' {} a -> s {appVersion = a} :: DescribeAppVersionResourcesResolutionStatus)
+
+instance
+  Core.AWSRequest
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  type
+    AWSResponse
+      DescribeAppVersionResourcesResolutionStatus =
+      DescribeAppVersionResourcesResolutionStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppVersionResourcesResolutionStatusResponse'
+            Prelude.<$> (x Data..?> "errorMessage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+            Prelude.<*> (x Data..:> "appVersion")
+            Prelude.<*> (x Data..:> "resolutionId")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  hashWithSalt
+    _salt
+    DescribeAppVersionResourcesResolutionStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` resolutionId
+        `Prelude.hashWithSalt` appArn
+        `Prelude.hashWithSalt` appVersion
+
+instance
+  Prelude.NFData
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  rnf DescribeAppVersionResourcesResolutionStatus' {..} =
+    Prelude.rnf resolutionId
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+
+instance
+  Data.ToHeaders
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  toJSON
+    DescribeAppVersionResourcesResolutionStatus' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("resolutionId" Data..=) Prelude.<$> resolutionId,
+              Prelude.Just ("appArn" Data..= appArn),
+              Prelude.Just ("appVersion" Data..= appVersion)
+            ]
+        )
+
+instance
+  Data.ToPath
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  toPath =
+    Prelude.const
+      "/describe-app-version-resources-resolution-status"
+
+instance
+  Data.ToQuery
+    DescribeAppVersionResourcesResolutionStatus
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppVersionResourcesResolutionStatusResponse' smart constructor.
+data DescribeAppVersionResourcesResolutionStatusResponse = DescribeAppVersionResourcesResolutionStatusResponse'
+  { -- | The returned error message for the request.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text,
+    -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Text,
+    -- | The status of the action.
+    status :: ResourceResolutionStatusType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppVersionResourcesResolutionStatusResponse' with all optional fields 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:
+--
+-- 'errorMessage', 'describeAppVersionResourcesResolutionStatusResponse_errorMessage' - The returned error message for the request.
+--
+-- 'httpStatus', 'describeAppVersionResourcesResolutionStatusResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'describeAppVersionResourcesResolutionStatusResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'describeAppVersionResourcesResolutionStatusResponse_appVersion' - The version of the application.
+--
+-- 'resolutionId', 'describeAppVersionResourcesResolutionStatusResponse_resolutionId' - The identifier for a specific resolution.
+--
+-- 'status', 'describeAppVersionResourcesResolutionStatusResponse_status' - The status of the action.
+newDescribeAppVersionResourcesResolutionStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  -- | 'resolutionId'
+  Prelude.Text ->
+  -- | 'status'
+  ResourceResolutionStatusType ->
+  DescribeAppVersionResourcesResolutionStatusResponse
+newDescribeAppVersionResourcesResolutionStatusResponse
+  pHttpStatus_
+  pAppArn_
+  pAppVersion_
+  pResolutionId_
+  pStatus_ =
+    DescribeAppVersionResourcesResolutionStatusResponse'
+      { errorMessage =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_,
+        appArn = pAppArn_,
+        appVersion =
+          pAppVersion_,
+        resolutionId =
+          pResolutionId_,
+        status = pStatus_
+      }
+
+-- | The returned error message for the request.
+describeAppVersionResourcesResolutionStatusResponse_errorMessage :: Lens.Lens' DescribeAppVersionResourcesResolutionStatusResponse (Prelude.Maybe Prelude.Text)
+describeAppVersionResourcesResolutionStatusResponse_errorMessage = Lens.lens (\DescribeAppVersionResourcesResolutionStatusResponse' {errorMessage} -> errorMessage) (\s@DescribeAppVersionResourcesResolutionStatusResponse' {} a -> s {errorMessage = a} :: DescribeAppVersionResourcesResolutionStatusResponse)
+
+-- | The response's http status code.
+describeAppVersionResourcesResolutionStatusResponse_httpStatus :: Lens.Lens' DescribeAppVersionResourcesResolutionStatusResponse Prelude.Int
+describeAppVersionResourcesResolutionStatusResponse_httpStatus = Lens.lens (\DescribeAppVersionResourcesResolutionStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeAppVersionResourcesResolutionStatusResponse' {} a -> s {httpStatus = a} :: DescribeAppVersionResourcesResolutionStatusResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAppVersionResourcesResolutionStatusResponse_appArn :: Lens.Lens' DescribeAppVersionResourcesResolutionStatusResponse Prelude.Text
+describeAppVersionResourcesResolutionStatusResponse_appArn = Lens.lens (\DescribeAppVersionResourcesResolutionStatusResponse' {appArn} -> appArn) (\s@DescribeAppVersionResourcesResolutionStatusResponse' {} a -> s {appArn = a} :: DescribeAppVersionResourcesResolutionStatusResponse)
+
+-- | The version of the application.
+describeAppVersionResourcesResolutionStatusResponse_appVersion :: Lens.Lens' DescribeAppVersionResourcesResolutionStatusResponse Prelude.Text
+describeAppVersionResourcesResolutionStatusResponse_appVersion = Lens.lens (\DescribeAppVersionResourcesResolutionStatusResponse' {appVersion} -> appVersion) (\s@DescribeAppVersionResourcesResolutionStatusResponse' {} a -> s {appVersion = a} :: DescribeAppVersionResourcesResolutionStatusResponse)
+
+-- | The identifier for a specific resolution.
+describeAppVersionResourcesResolutionStatusResponse_resolutionId :: Lens.Lens' DescribeAppVersionResourcesResolutionStatusResponse Prelude.Text
+describeAppVersionResourcesResolutionStatusResponse_resolutionId = Lens.lens (\DescribeAppVersionResourcesResolutionStatusResponse' {resolutionId} -> resolutionId) (\s@DescribeAppVersionResourcesResolutionStatusResponse' {} a -> s {resolutionId = a} :: DescribeAppVersionResourcesResolutionStatusResponse)
+
+-- | The status of the action.
+describeAppVersionResourcesResolutionStatusResponse_status :: Lens.Lens' DescribeAppVersionResourcesResolutionStatusResponse ResourceResolutionStatusType
+describeAppVersionResourcesResolutionStatusResponse_status = Lens.lens (\DescribeAppVersionResourcesResolutionStatusResponse' {status} -> status) (\s@DescribeAppVersionResourcesResolutionStatusResponse' {} a -> s {status = a} :: DescribeAppVersionResourcesResolutionStatusResponse)
+
+instance
+  Prelude.NFData
+    DescribeAppVersionResourcesResolutionStatusResponse
+  where
+  rnf
+    DescribeAppVersionResourcesResolutionStatusResponse' {..} =
+      Prelude.rnf errorMessage
+        `Prelude.seq` Prelude.rnf httpStatus
+        `Prelude.seq` Prelude.rnf appArn
+        `Prelude.seq` Prelude.rnf appVersion
+        `Prelude.seq` Prelude.rnf resolutionId
+        `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ResilienceHub/DescribeAppVersionTemplate.hs b/gen/Amazonka/ResilienceHub/DescribeAppVersionTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DescribeAppVersionTemplate.hs
@@ -0,0 +1,246 @@
+{-# 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.ResilienceHub.DescribeAppVersionTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes details about an AWS Resilience Hub
+module Amazonka.ResilienceHub.DescribeAppVersionTemplate
+  ( -- * Creating a Request
+    DescribeAppVersionTemplate (..),
+    newDescribeAppVersionTemplate,
+
+    -- * Request Lenses
+    describeAppVersionTemplate_appArn,
+    describeAppVersionTemplate_appVersion,
+
+    -- * Destructuring the Response
+    DescribeAppVersionTemplateResponse (..),
+    newDescribeAppVersionTemplateResponse,
+
+    -- * Response Lenses
+    describeAppVersionTemplateResponse_httpStatus,
+    describeAppVersionTemplateResponse_appArn,
+    describeAppVersionTemplateResponse_appTemplateBody,
+    describeAppVersionTemplateResponse_appVersion,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAppVersionTemplate' smart constructor.
+data DescribeAppVersionTemplate = DescribeAppVersionTemplate'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppVersionTemplate' with all optional fields 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:
+--
+-- 'appArn', 'describeAppVersionTemplate_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'describeAppVersionTemplate_appVersion' - The version of the application.
+newDescribeAppVersionTemplate ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  DescribeAppVersionTemplate
+newDescribeAppVersionTemplate pAppArn_ pAppVersion_ =
+  DescribeAppVersionTemplate'
+    { appArn = pAppArn_,
+      appVersion = pAppVersion_
+    }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAppVersionTemplate_appArn :: Lens.Lens' DescribeAppVersionTemplate Prelude.Text
+describeAppVersionTemplate_appArn = Lens.lens (\DescribeAppVersionTemplate' {appArn} -> appArn) (\s@DescribeAppVersionTemplate' {} a -> s {appArn = a} :: DescribeAppVersionTemplate)
+
+-- | The version of the application.
+describeAppVersionTemplate_appVersion :: Lens.Lens' DescribeAppVersionTemplate Prelude.Text
+describeAppVersionTemplate_appVersion = Lens.lens (\DescribeAppVersionTemplate' {appVersion} -> appVersion) (\s@DescribeAppVersionTemplate' {} a -> s {appVersion = a} :: DescribeAppVersionTemplate)
+
+instance Core.AWSRequest DescribeAppVersionTemplate where
+  type
+    AWSResponse DescribeAppVersionTemplate =
+      DescribeAppVersionTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppVersionTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+            Prelude.<*> (x Data..:> "appTemplateBody")
+            Prelude.<*> (x Data..:> "appVersion")
+      )
+
+instance Prelude.Hashable DescribeAppVersionTemplate where
+  hashWithSalt _salt DescribeAppVersionTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appVersion
+
+instance Prelude.NFData DescribeAppVersionTemplate where
+  rnf DescribeAppVersionTemplate' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+
+instance Data.ToHeaders DescribeAppVersionTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAppVersionTemplate where
+  toJSON DescribeAppVersionTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just ("appVersion" Data..= appVersion)
+          ]
+      )
+
+instance Data.ToPath DescribeAppVersionTemplate where
+  toPath =
+    Prelude.const "/describe-app-version-template"
+
+instance Data.ToQuery DescribeAppVersionTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppVersionTemplateResponse' smart constructor.
+data DescribeAppVersionTemplateResponse = DescribeAppVersionTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The body of the template.
+    appTemplateBody :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppVersionTemplateResponse' with all optional fields 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', 'describeAppVersionTemplateResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'describeAppVersionTemplateResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appTemplateBody', 'describeAppVersionTemplateResponse_appTemplateBody' - The body of the template.
+--
+-- 'appVersion', 'describeAppVersionTemplateResponse_appVersion' - The version of the application.
+newDescribeAppVersionTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appTemplateBody'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  DescribeAppVersionTemplateResponse
+newDescribeAppVersionTemplateResponse
+  pHttpStatus_
+  pAppArn_
+  pAppTemplateBody_
+  pAppVersion_ =
+    DescribeAppVersionTemplateResponse'
+      { httpStatus =
+          pHttpStatus_,
+        appArn = pAppArn_,
+        appTemplateBody = pAppTemplateBody_,
+        appVersion = pAppVersion_
+      }
+
+-- | The response's http status code.
+describeAppVersionTemplateResponse_httpStatus :: Lens.Lens' DescribeAppVersionTemplateResponse Prelude.Int
+describeAppVersionTemplateResponse_httpStatus = Lens.lens (\DescribeAppVersionTemplateResponse' {httpStatus} -> httpStatus) (\s@DescribeAppVersionTemplateResponse' {} a -> s {httpStatus = a} :: DescribeAppVersionTemplateResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAppVersionTemplateResponse_appArn :: Lens.Lens' DescribeAppVersionTemplateResponse Prelude.Text
+describeAppVersionTemplateResponse_appArn = Lens.lens (\DescribeAppVersionTemplateResponse' {appArn} -> appArn) (\s@DescribeAppVersionTemplateResponse' {} a -> s {appArn = a} :: DescribeAppVersionTemplateResponse)
+
+-- | The body of the template.
+describeAppVersionTemplateResponse_appTemplateBody :: Lens.Lens' DescribeAppVersionTemplateResponse Prelude.Text
+describeAppVersionTemplateResponse_appTemplateBody = Lens.lens (\DescribeAppVersionTemplateResponse' {appTemplateBody} -> appTemplateBody) (\s@DescribeAppVersionTemplateResponse' {} a -> s {appTemplateBody = a} :: DescribeAppVersionTemplateResponse)
+
+-- | The version of the application.
+describeAppVersionTemplateResponse_appVersion :: Lens.Lens' DescribeAppVersionTemplateResponse Prelude.Text
+describeAppVersionTemplateResponse_appVersion = Lens.lens (\DescribeAppVersionTemplateResponse' {appVersion} -> appVersion) (\s@DescribeAppVersionTemplateResponse' {} a -> s {appVersion = a} :: DescribeAppVersionTemplateResponse)
+
+instance
+  Prelude.NFData
+    DescribeAppVersionTemplateResponse
+  where
+  rnf DescribeAppVersionTemplateResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appTemplateBody
+      `Prelude.seq` Prelude.rnf appVersion
diff --git a/gen/Amazonka/ResilienceHub/DescribeDraftAppVersionResourcesImportStatus.hs b/gen/Amazonka/ResilienceHub/DescribeDraftAppVersionResourcesImportStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DescribeDraftAppVersionResourcesImportStatus.hs
@@ -0,0 +1,289 @@
+{-# 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.ResilienceHub.DescribeDraftAppVersionResourcesImportStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the status of importing resources to an application version.
+module Amazonka.ResilienceHub.DescribeDraftAppVersionResourcesImportStatus
+  ( -- * Creating a Request
+    DescribeDraftAppVersionResourcesImportStatus (..),
+    newDescribeDraftAppVersionResourcesImportStatus,
+
+    -- * Request Lenses
+    describeDraftAppVersionResourcesImportStatus_appArn,
+
+    -- * Destructuring the Response
+    DescribeDraftAppVersionResourcesImportStatusResponse (..),
+    newDescribeDraftAppVersionResourcesImportStatusResponse,
+
+    -- * Response Lenses
+    describeDraftAppVersionResourcesImportStatusResponse_errorMessage,
+    describeDraftAppVersionResourcesImportStatusResponse_httpStatus,
+    describeDraftAppVersionResourcesImportStatusResponse_appArn,
+    describeDraftAppVersionResourcesImportStatusResponse_appVersion,
+    describeDraftAppVersionResourcesImportStatusResponse_status,
+    describeDraftAppVersionResourcesImportStatusResponse_statusChangeTime,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDraftAppVersionResourcesImportStatus' smart constructor.
+data DescribeDraftAppVersionResourcesImportStatus = DescribeDraftAppVersionResourcesImportStatus'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDraftAppVersionResourcesImportStatus' with all optional fields 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:
+--
+-- 'appArn', 'describeDraftAppVersionResourcesImportStatus_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDescribeDraftAppVersionResourcesImportStatus ::
+  -- | 'appArn'
+  Prelude.Text ->
+  DescribeDraftAppVersionResourcesImportStatus
+newDescribeDraftAppVersionResourcesImportStatus
+  pAppArn_ =
+    DescribeDraftAppVersionResourcesImportStatus'
+      { appArn =
+          pAppArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeDraftAppVersionResourcesImportStatus_appArn :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatus Prelude.Text
+describeDraftAppVersionResourcesImportStatus_appArn = Lens.lens (\DescribeDraftAppVersionResourcesImportStatus' {appArn} -> appArn) (\s@DescribeDraftAppVersionResourcesImportStatus' {} a -> s {appArn = a} :: DescribeDraftAppVersionResourcesImportStatus)
+
+instance
+  Core.AWSRequest
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  type
+    AWSResponse
+      DescribeDraftAppVersionResourcesImportStatus =
+      DescribeDraftAppVersionResourcesImportStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDraftAppVersionResourcesImportStatusResponse'
+            Prelude.<$> (x Data..?> "errorMessage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+            Prelude.<*> (x Data..:> "appVersion")
+            Prelude.<*> (x Data..:> "status")
+            Prelude.<*> (x Data..:> "statusChangeTime")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  hashWithSalt
+    _salt
+    DescribeDraftAppVersionResourcesImportStatus' {..} =
+      _salt `Prelude.hashWithSalt` appArn
+
+instance
+  Prelude.NFData
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  rnf DescribeDraftAppVersionResourcesImportStatus' {..} =
+    Prelude.rnf appArn
+
+instance
+  Data.ToHeaders
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  toJSON
+    DescribeDraftAppVersionResourcesImportStatus' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [Prelude.Just ("appArn" Data..= appArn)]
+        )
+
+instance
+  Data.ToPath
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  toPath =
+    Prelude.const
+      "/describe-draft-app-version-resources-import-status"
+
+instance
+  Data.ToQuery
+    DescribeDraftAppVersionResourcesImportStatus
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDraftAppVersionResourcesImportStatusResponse' smart constructor.
+data DescribeDraftAppVersionResourcesImportStatusResponse = DescribeDraftAppVersionResourcesImportStatusResponse'
+  { -- | The returned error message for the request.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text,
+    -- | The status of the action.
+    status :: ResourceImportStatusType,
+    -- | The timestamp for when the status last changed.
+    statusChangeTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDraftAppVersionResourcesImportStatusResponse' with all optional fields 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:
+--
+-- 'errorMessage', 'describeDraftAppVersionResourcesImportStatusResponse_errorMessage' - The returned error message for the request.
+--
+-- 'httpStatus', 'describeDraftAppVersionResourcesImportStatusResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'describeDraftAppVersionResourcesImportStatusResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'describeDraftAppVersionResourcesImportStatusResponse_appVersion' - The version of the application.
+--
+-- 'status', 'describeDraftAppVersionResourcesImportStatusResponse_status' - The status of the action.
+--
+-- 'statusChangeTime', 'describeDraftAppVersionResourcesImportStatusResponse_statusChangeTime' - The timestamp for when the status last changed.
+newDescribeDraftAppVersionResourcesImportStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  -- | 'status'
+  ResourceImportStatusType ->
+  -- | 'statusChangeTime'
+  Prelude.UTCTime ->
+  DescribeDraftAppVersionResourcesImportStatusResponse
+newDescribeDraftAppVersionResourcesImportStatusResponse
+  pHttpStatus_
+  pAppArn_
+  pAppVersion_
+  pStatus_
+  pStatusChangeTime_ =
+    DescribeDraftAppVersionResourcesImportStatusResponse'
+      { errorMessage =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_,
+        appArn = pAppArn_,
+        appVersion =
+          pAppVersion_,
+        status = pStatus_,
+        statusChangeTime =
+          Data._Time
+            Lens.# pStatusChangeTime_
+      }
+
+-- | The returned error message for the request.
+describeDraftAppVersionResourcesImportStatusResponse_errorMessage :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatusResponse (Prelude.Maybe Prelude.Text)
+describeDraftAppVersionResourcesImportStatusResponse_errorMessage = Lens.lens (\DescribeDraftAppVersionResourcesImportStatusResponse' {errorMessage} -> errorMessage) (\s@DescribeDraftAppVersionResourcesImportStatusResponse' {} a -> s {errorMessage = a} :: DescribeDraftAppVersionResourcesImportStatusResponse)
+
+-- | The response's http status code.
+describeDraftAppVersionResourcesImportStatusResponse_httpStatus :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatusResponse Prelude.Int
+describeDraftAppVersionResourcesImportStatusResponse_httpStatus = Lens.lens (\DescribeDraftAppVersionResourcesImportStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeDraftAppVersionResourcesImportStatusResponse' {} a -> s {httpStatus = a} :: DescribeDraftAppVersionResourcesImportStatusResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeDraftAppVersionResourcesImportStatusResponse_appArn :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatusResponse Prelude.Text
+describeDraftAppVersionResourcesImportStatusResponse_appArn = Lens.lens (\DescribeDraftAppVersionResourcesImportStatusResponse' {appArn} -> appArn) (\s@DescribeDraftAppVersionResourcesImportStatusResponse' {} a -> s {appArn = a} :: DescribeDraftAppVersionResourcesImportStatusResponse)
+
+-- | The version of the application.
+describeDraftAppVersionResourcesImportStatusResponse_appVersion :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatusResponse Prelude.Text
+describeDraftAppVersionResourcesImportStatusResponse_appVersion = Lens.lens (\DescribeDraftAppVersionResourcesImportStatusResponse' {appVersion} -> appVersion) (\s@DescribeDraftAppVersionResourcesImportStatusResponse' {} a -> s {appVersion = a} :: DescribeDraftAppVersionResourcesImportStatusResponse)
+
+-- | The status of the action.
+describeDraftAppVersionResourcesImportStatusResponse_status :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatusResponse ResourceImportStatusType
+describeDraftAppVersionResourcesImportStatusResponse_status = Lens.lens (\DescribeDraftAppVersionResourcesImportStatusResponse' {status} -> status) (\s@DescribeDraftAppVersionResourcesImportStatusResponse' {} a -> s {status = a} :: DescribeDraftAppVersionResourcesImportStatusResponse)
+
+-- | The timestamp for when the status last changed.
+describeDraftAppVersionResourcesImportStatusResponse_statusChangeTime :: Lens.Lens' DescribeDraftAppVersionResourcesImportStatusResponse Prelude.UTCTime
+describeDraftAppVersionResourcesImportStatusResponse_statusChangeTime = Lens.lens (\DescribeDraftAppVersionResourcesImportStatusResponse' {statusChangeTime} -> statusChangeTime) (\s@DescribeDraftAppVersionResourcesImportStatusResponse' {} a -> s {statusChangeTime = a} :: DescribeDraftAppVersionResourcesImportStatusResponse) Prelude.. Data._Time
+
+instance
+  Prelude.NFData
+    DescribeDraftAppVersionResourcesImportStatusResponse
+  where
+  rnf
+    DescribeDraftAppVersionResourcesImportStatusResponse' {..} =
+      Prelude.rnf errorMessage
+        `Prelude.seq` Prelude.rnf httpStatus
+        `Prelude.seq` Prelude.rnf appArn
+        `Prelude.seq` Prelude.rnf appVersion
+        `Prelude.seq` Prelude.rnf status
+        `Prelude.seq` Prelude.rnf statusChangeTime
diff --git a/gen/Amazonka/ResilienceHub/DescribeResiliencyPolicy.hs b/gen/Amazonka/ResilienceHub/DescribeResiliencyPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/DescribeResiliencyPolicy.hs
@@ -0,0 +1,199 @@
+{-# 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.ResilienceHub.DescribeResiliencyPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a specified resiliency policy for an AWS Resilience Hub
+-- application. The returned policy object includes creation time, data
+-- location constraints, the Amazon Resource Name (ARN) for the policy,
+-- tags, tier, and more.
+module Amazonka.ResilienceHub.DescribeResiliencyPolicy
+  ( -- * Creating a Request
+    DescribeResiliencyPolicy (..),
+    newDescribeResiliencyPolicy,
+
+    -- * Request Lenses
+    describeResiliencyPolicy_policyArn,
+
+    -- * Destructuring the Response
+    DescribeResiliencyPolicyResponse (..),
+    newDescribeResiliencyPolicyResponse,
+
+    -- * Response Lenses
+    describeResiliencyPolicyResponse_httpStatus,
+    describeResiliencyPolicyResponse_policy,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeResiliencyPolicy' smart constructor.
+data DescribeResiliencyPolicy = DescribeResiliencyPolicy'
+  { -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResiliencyPolicy' with all optional fields 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:
+--
+-- 'policyArn', 'describeResiliencyPolicy_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newDescribeResiliencyPolicy ::
+  -- | 'policyArn'
+  Prelude.Text ->
+  DescribeResiliencyPolicy
+newDescribeResiliencyPolicy pPolicyArn_ =
+  DescribeResiliencyPolicy' {policyArn = pPolicyArn_}
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeResiliencyPolicy_policyArn :: Lens.Lens' DescribeResiliencyPolicy Prelude.Text
+describeResiliencyPolicy_policyArn = Lens.lens (\DescribeResiliencyPolicy' {policyArn} -> policyArn) (\s@DescribeResiliencyPolicy' {} a -> s {policyArn = a} :: DescribeResiliencyPolicy)
+
+instance Core.AWSRequest DescribeResiliencyPolicy where
+  type
+    AWSResponse DescribeResiliencyPolicy =
+      DescribeResiliencyPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeResiliencyPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "policy")
+      )
+
+instance Prelude.Hashable DescribeResiliencyPolicy where
+  hashWithSalt _salt DescribeResiliencyPolicy' {..} =
+    _salt `Prelude.hashWithSalt` policyArn
+
+instance Prelude.NFData DescribeResiliencyPolicy where
+  rnf DescribeResiliencyPolicy' {..} =
+    Prelude.rnf policyArn
+
+instance Data.ToHeaders DescribeResiliencyPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeResiliencyPolicy where
+  toJSON DescribeResiliencyPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("policyArn" Data..= policyArn)]
+      )
+
+instance Data.ToPath DescribeResiliencyPolicy where
+  toPath = Prelude.const "/describe-resiliency-policy"
+
+instance Data.ToQuery DescribeResiliencyPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeResiliencyPolicyResponse' smart constructor.
+data DescribeResiliencyPolicyResponse = DescribeResiliencyPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about the specific resiliency policy, returned as an object.
+    -- This object includes creation time, data location constraints, its name,
+    -- description, tags, the recovery time objective (RTO) and recovery point
+    -- objective (RPO) in seconds, and more.
+    policy :: ResiliencyPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResiliencyPolicyResponse' with all optional fields 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', 'describeResiliencyPolicyResponse_httpStatus' - The response's http status code.
+--
+-- 'policy', 'describeResiliencyPolicyResponse_policy' - Information about the specific resiliency policy, returned as an object.
+-- This object includes creation time, data location constraints, its name,
+-- description, tags, the recovery time objective (RTO) and recovery point
+-- objective (RPO) in seconds, and more.
+newDescribeResiliencyPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'policy'
+  ResiliencyPolicy ->
+  DescribeResiliencyPolicyResponse
+newDescribeResiliencyPolicyResponse
+  pHttpStatus_
+  pPolicy_ =
+    DescribeResiliencyPolicyResponse'
+      { httpStatus =
+          pHttpStatus_,
+        policy = pPolicy_
+      }
+
+-- | The response's http status code.
+describeResiliencyPolicyResponse_httpStatus :: Lens.Lens' DescribeResiliencyPolicyResponse Prelude.Int
+describeResiliencyPolicyResponse_httpStatus = Lens.lens (\DescribeResiliencyPolicyResponse' {httpStatus} -> httpStatus) (\s@DescribeResiliencyPolicyResponse' {} a -> s {httpStatus = a} :: DescribeResiliencyPolicyResponse)
+
+-- | Information about the specific resiliency policy, returned as an object.
+-- This object includes creation time, data location constraints, its name,
+-- description, tags, the recovery time objective (RTO) and recovery point
+-- objective (RPO) in seconds, and more.
+describeResiliencyPolicyResponse_policy :: Lens.Lens' DescribeResiliencyPolicyResponse ResiliencyPolicy
+describeResiliencyPolicyResponse_policy = Lens.lens (\DescribeResiliencyPolicyResponse' {policy} -> policy) (\s@DescribeResiliencyPolicyResponse' {} a -> s {policy = a} :: DescribeResiliencyPolicyResponse)
+
+instance
+  Prelude.NFData
+    DescribeResiliencyPolicyResponse
+  where
+  rnf DescribeResiliencyPolicyResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf policy
diff --git a/gen/Amazonka/ResilienceHub/ImportResourcesToDraftAppVersion.hs b/gen/Amazonka/ResilienceHub/ImportResourcesToDraftAppVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ImportResourcesToDraftAppVersion.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.ImportResourcesToDraftAppVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports resources from sources such as a CloudFormation stack,
+-- resource-groups, or application registry app to a draft application
+-- version.
+module Amazonka.ResilienceHub.ImportResourcesToDraftAppVersion
+  ( -- * Creating a Request
+    ImportResourcesToDraftAppVersion (..),
+    newImportResourcesToDraftAppVersion,
+
+    -- * Request Lenses
+    importResourcesToDraftAppVersion_sourceArns,
+    importResourcesToDraftAppVersion_terraformSources,
+    importResourcesToDraftAppVersion_appArn,
+
+    -- * Destructuring the Response
+    ImportResourcesToDraftAppVersionResponse (..),
+    newImportResourcesToDraftAppVersionResponse,
+
+    -- * Response Lenses
+    importResourcesToDraftAppVersionResponse_sourceArns,
+    importResourcesToDraftAppVersionResponse_terraformSources,
+    importResourcesToDraftAppVersionResponse_httpStatus,
+    importResourcesToDraftAppVersionResponse_appArn,
+    importResourcesToDraftAppVersionResponse_appVersion,
+    importResourcesToDraftAppVersionResponse_status,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportResourcesToDraftAppVersion' smart constructor.
+data ImportResourcesToDraftAppVersion = ImportResourcesToDraftAppVersion'
+  { -- | The Amazon Resource Names (ARNs) for the resources that you want to
+    -- import.
+    sourceArns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of terraform file s3 URLs you need to import.
+    terraformSources :: Prelude.Maybe [TerraformSource],
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportResourcesToDraftAppVersion' with all optional fields 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:
+--
+-- 'sourceArns', 'importResourcesToDraftAppVersion_sourceArns' - The Amazon Resource Names (ARNs) for the resources that you want to
+-- import.
+--
+-- 'terraformSources', 'importResourcesToDraftAppVersion_terraformSources' - A list of terraform file s3 URLs you need to import.
+--
+-- 'appArn', 'importResourcesToDraftAppVersion_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newImportResourcesToDraftAppVersion ::
+  -- | 'appArn'
+  Prelude.Text ->
+  ImportResourcesToDraftAppVersion
+newImportResourcesToDraftAppVersion pAppArn_ =
+  ImportResourcesToDraftAppVersion'
+    { sourceArns =
+        Prelude.Nothing,
+      terraformSources = Prelude.Nothing,
+      appArn = pAppArn_
+    }
+
+-- | The Amazon Resource Names (ARNs) for the resources that you want to
+-- import.
+importResourcesToDraftAppVersion_sourceArns :: Lens.Lens' ImportResourcesToDraftAppVersion (Prelude.Maybe [Prelude.Text])
+importResourcesToDraftAppVersion_sourceArns = Lens.lens (\ImportResourcesToDraftAppVersion' {sourceArns} -> sourceArns) (\s@ImportResourcesToDraftAppVersion' {} a -> s {sourceArns = a} :: ImportResourcesToDraftAppVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of terraform file s3 URLs you need to import.
+importResourcesToDraftAppVersion_terraformSources :: Lens.Lens' ImportResourcesToDraftAppVersion (Prelude.Maybe [TerraformSource])
+importResourcesToDraftAppVersion_terraformSources = Lens.lens (\ImportResourcesToDraftAppVersion' {terraformSources} -> terraformSources) (\s@ImportResourcesToDraftAppVersion' {} a -> s {terraformSources = a} :: ImportResourcesToDraftAppVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+importResourcesToDraftAppVersion_appArn :: Lens.Lens' ImportResourcesToDraftAppVersion Prelude.Text
+importResourcesToDraftAppVersion_appArn = Lens.lens (\ImportResourcesToDraftAppVersion' {appArn} -> appArn) (\s@ImportResourcesToDraftAppVersion' {} a -> s {appArn = a} :: ImportResourcesToDraftAppVersion)
+
+instance
+  Core.AWSRequest
+    ImportResourcesToDraftAppVersion
+  where
+  type
+    AWSResponse ImportResourcesToDraftAppVersion =
+      ImportResourcesToDraftAppVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportResourcesToDraftAppVersionResponse'
+            Prelude.<$> (x Data..?> "sourceArns" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "terraformSources"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+            Prelude.<*> (x Data..:> "appVersion")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance
+  Prelude.Hashable
+    ImportResourcesToDraftAppVersion
+  where
+  hashWithSalt
+    _salt
+    ImportResourcesToDraftAppVersion' {..} =
+      _salt
+        `Prelude.hashWithSalt` sourceArns
+        `Prelude.hashWithSalt` terraformSources
+        `Prelude.hashWithSalt` appArn
+
+instance
+  Prelude.NFData
+    ImportResourcesToDraftAppVersion
+  where
+  rnf ImportResourcesToDraftAppVersion' {..} =
+    Prelude.rnf sourceArns
+      `Prelude.seq` Prelude.rnf terraformSources
+      `Prelude.seq` Prelude.rnf appArn
+
+instance
+  Data.ToHeaders
+    ImportResourcesToDraftAppVersion
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportResourcesToDraftAppVersion where
+  toJSON ImportResourcesToDraftAppVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("sourceArns" Data..=) Prelude.<$> sourceArns,
+            ("terraformSources" Data..=)
+              Prelude.<$> terraformSources,
+            Prelude.Just ("appArn" Data..= appArn)
+          ]
+      )
+
+instance Data.ToPath ImportResourcesToDraftAppVersion where
+  toPath =
+    Prelude.const
+      "/import-resources-to-draft-app-version"
+
+instance
+  Data.ToQuery
+    ImportResourcesToDraftAppVersion
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportResourcesToDraftAppVersionResponse' smart constructor.
+data ImportResourcesToDraftAppVersionResponse = ImportResourcesToDraftAppVersionResponse'
+  { -- | The Amazon Resource Names (ARNs) for the resources that you imported.
+    sourceArns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of terraform file s3 URLs you need to import.
+    terraformSources :: Prelude.Maybe [TerraformSource],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text,
+    -- | The status of the action.
+    status :: ResourceImportStatusType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportResourcesToDraftAppVersionResponse' with all optional fields 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:
+--
+-- 'sourceArns', 'importResourcesToDraftAppVersionResponse_sourceArns' - The Amazon Resource Names (ARNs) for the resources that you imported.
+--
+-- 'terraformSources', 'importResourcesToDraftAppVersionResponse_terraformSources' - A list of terraform file s3 URLs you need to import.
+--
+-- 'httpStatus', 'importResourcesToDraftAppVersionResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'importResourcesToDraftAppVersionResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'importResourcesToDraftAppVersionResponse_appVersion' - The version of the application.
+--
+-- 'status', 'importResourcesToDraftAppVersionResponse_status' - The status of the action.
+newImportResourcesToDraftAppVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  -- | 'status'
+  ResourceImportStatusType ->
+  ImportResourcesToDraftAppVersionResponse
+newImportResourcesToDraftAppVersionResponse
+  pHttpStatus_
+  pAppArn_
+  pAppVersion_
+  pStatus_ =
+    ImportResourcesToDraftAppVersionResponse'
+      { sourceArns =
+          Prelude.Nothing,
+        terraformSources =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_,
+        status = pStatus_
+      }
+
+-- | The Amazon Resource Names (ARNs) for the resources that you imported.
+importResourcesToDraftAppVersionResponse_sourceArns :: Lens.Lens' ImportResourcesToDraftAppVersionResponse (Prelude.Maybe [Prelude.Text])
+importResourcesToDraftAppVersionResponse_sourceArns = Lens.lens (\ImportResourcesToDraftAppVersionResponse' {sourceArns} -> sourceArns) (\s@ImportResourcesToDraftAppVersionResponse' {} a -> s {sourceArns = a} :: ImportResourcesToDraftAppVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of terraform file s3 URLs you need to import.
+importResourcesToDraftAppVersionResponse_terraformSources :: Lens.Lens' ImportResourcesToDraftAppVersionResponse (Prelude.Maybe [TerraformSource])
+importResourcesToDraftAppVersionResponse_terraformSources = Lens.lens (\ImportResourcesToDraftAppVersionResponse' {terraformSources} -> terraformSources) (\s@ImportResourcesToDraftAppVersionResponse' {} a -> s {terraformSources = a} :: ImportResourcesToDraftAppVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+importResourcesToDraftAppVersionResponse_httpStatus :: Lens.Lens' ImportResourcesToDraftAppVersionResponse Prelude.Int
+importResourcesToDraftAppVersionResponse_httpStatus = Lens.lens (\ImportResourcesToDraftAppVersionResponse' {httpStatus} -> httpStatus) (\s@ImportResourcesToDraftAppVersionResponse' {} a -> s {httpStatus = a} :: ImportResourcesToDraftAppVersionResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+importResourcesToDraftAppVersionResponse_appArn :: Lens.Lens' ImportResourcesToDraftAppVersionResponse Prelude.Text
+importResourcesToDraftAppVersionResponse_appArn = Lens.lens (\ImportResourcesToDraftAppVersionResponse' {appArn} -> appArn) (\s@ImportResourcesToDraftAppVersionResponse' {} a -> s {appArn = a} :: ImportResourcesToDraftAppVersionResponse)
+
+-- | The version of the application.
+importResourcesToDraftAppVersionResponse_appVersion :: Lens.Lens' ImportResourcesToDraftAppVersionResponse Prelude.Text
+importResourcesToDraftAppVersionResponse_appVersion = Lens.lens (\ImportResourcesToDraftAppVersionResponse' {appVersion} -> appVersion) (\s@ImportResourcesToDraftAppVersionResponse' {} a -> s {appVersion = a} :: ImportResourcesToDraftAppVersionResponse)
+
+-- | The status of the action.
+importResourcesToDraftAppVersionResponse_status :: Lens.Lens' ImportResourcesToDraftAppVersionResponse ResourceImportStatusType
+importResourcesToDraftAppVersionResponse_status = Lens.lens (\ImportResourcesToDraftAppVersionResponse' {status} -> status) (\s@ImportResourcesToDraftAppVersionResponse' {} a -> s {status = a} :: ImportResourcesToDraftAppVersionResponse)
+
+instance
+  Prelude.NFData
+    ImportResourcesToDraftAppVersionResponse
+  where
+  rnf ImportResourcesToDraftAppVersionResponse' {..} =
+    Prelude.rnf sourceArns
+      `Prelude.seq` Prelude.rnf terraformSources
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ResilienceHub/Lens.hs b/gen/Amazonka/ResilienceHub/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Lens.hs
@@ -0,0 +1,649 @@
+{-# 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.ResilienceHub.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.ResilienceHub.Lens
+  ( -- * Operations
+
+    -- ** AddDraftAppVersionResourceMappings
+    addDraftAppVersionResourceMappings_appArn,
+    addDraftAppVersionResourceMappings_resourceMappings,
+    addDraftAppVersionResourceMappingsResponse_httpStatus,
+    addDraftAppVersionResourceMappingsResponse_appArn,
+    addDraftAppVersionResourceMappingsResponse_appVersion,
+    addDraftAppVersionResourceMappingsResponse_resourceMappings,
+
+    -- ** CreateApp
+    createApp_assessmentSchedule,
+    createApp_clientToken,
+    createApp_description,
+    createApp_policyArn,
+    createApp_tags,
+    createApp_name,
+    createAppResponse_httpStatus,
+    createAppResponse_app,
+
+    -- ** CreateRecommendationTemplate
+    createRecommendationTemplate_bucketName,
+    createRecommendationTemplate_clientToken,
+    createRecommendationTemplate_format,
+    createRecommendationTemplate_recommendationIds,
+    createRecommendationTemplate_recommendationTypes,
+    createRecommendationTemplate_tags,
+    createRecommendationTemplate_assessmentArn,
+    createRecommendationTemplate_name,
+    createRecommendationTemplateResponse_recommendationTemplate,
+    createRecommendationTemplateResponse_httpStatus,
+
+    -- ** CreateResiliencyPolicy
+    createResiliencyPolicy_clientToken,
+    createResiliencyPolicy_dataLocationConstraint,
+    createResiliencyPolicy_policyDescription,
+    createResiliencyPolicy_tags,
+    createResiliencyPolicy_policy,
+    createResiliencyPolicy_policyName,
+    createResiliencyPolicy_tier,
+    createResiliencyPolicyResponse_httpStatus,
+    createResiliencyPolicyResponse_policy,
+
+    -- ** DeleteApp
+    deleteApp_clientToken,
+    deleteApp_forceDelete,
+    deleteApp_appArn,
+    deleteAppResponse_httpStatus,
+    deleteAppResponse_appArn,
+
+    -- ** DeleteAppAssessment
+    deleteAppAssessment_clientToken,
+    deleteAppAssessment_assessmentArn,
+    deleteAppAssessmentResponse_httpStatus,
+    deleteAppAssessmentResponse_assessmentArn,
+    deleteAppAssessmentResponse_assessmentStatus,
+
+    -- ** DeleteRecommendationTemplate
+    deleteRecommendationTemplate_clientToken,
+    deleteRecommendationTemplate_recommendationTemplateArn,
+    deleteRecommendationTemplateResponse_httpStatus,
+    deleteRecommendationTemplateResponse_recommendationTemplateArn,
+    deleteRecommendationTemplateResponse_status,
+
+    -- ** DeleteResiliencyPolicy
+    deleteResiliencyPolicy_clientToken,
+    deleteResiliencyPolicy_policyArn,
+    deleteResiliencyPolicyResponse_httpStatus,
+    deleteResiliencyPolicyResponse_policyArn,
+
+    -- ** DescribeApp
+    describeApp_appArn,
+    describeAppResponse_httpStatus,
+    describeAppResponse_app,
+
+    -- ** DescribeAppAssessment
+    describeAppAssessment_assessmentArn,
+    describeAppAssessmentResponse_httpStatus,
+    describeAppAssessmentResponse_assessment,
+
+    -- ** DescribeAppVersionResourcesResolutionStatus
+    describeAppVersionResourcesResolutionStatus_resolutionId,
+    describeAppVersionResourcesResolutionStatus_appArn,
+    describeAppVersionResourcesResolutionStatus_appVersion,
+    describeAppVersionResourcesResolutionStatusResponse_errorMessage,
+    describeAppVersionResourcesResolutionStatusResponse_httpStatus,
+    describeAppVersionResourcesResolutionStatusResponse_appArn,
+    describeAppVersionResourcesResolutionStatusResponse_appVersion,
+    describeAppVersionResourcesResolutionStatusResponse_resolutionId,
+    describeAppVersionResourcesResolutionStatusResponse_status,
+
+    -- ** DescribeAppVersionTemplate
+    describeAppVersionTemplate_appArn,
+    describeAppVersionTemplate_appVersion,
+    describeAppVersionTemplateResponse_httpStatus,
+    describeAppVersionTemplateResponse_appArn,
+    describeAppVersionTemplateResponse_appTemplateBody,
+    describeAppVersionTemplateResponse_appVersion,
+
+    -- ** DescribeDraftAppVersionResourcesImportStatus
+    describeDraftAppVersionResourcesImportStatus_appArn,
+    describeDraftAppVersionResourcesImportStatusResponse_errorMessage,
+    describeDraftAppVersionResourcesImportStatusResponse_httpStatus,
+    describeDraftAppVersionResourcesImportStatusResponse_appArn,
+    describeDraftAppVersionResourcesImportStatusResponse_appVersion,
+    describeDraftAppVersionResourcesImportStatusResponse_status,
+    describeDraftAppVersionResourcesImportStatusResponse_statusChangeTime,
+
+    -- ** DescribeResiliencyPolicy
+    describeResiliencyPolicy_policyArn,
+    describeResiliencyPolicyResponse_httpStatus,
+    describeResiliencyPolicyResponse_policy,
+
+    -- ** ImportResourcesToDraftAppVersion
+    importResourcesToDraftAppVersion_sourceArns,
+    importResourcesToDraftAppVersion_terraformSources,
+    importResourcesToDraftAppVersion_appArn,
+    importResourcesToDraftAppVersionResponse_sourceArns,
+    importResourcesToDraftAppVersionResponse_terraformSources,
+    importResourcesToDraftAppVersionResponse_httpStatus,
+    importResourcesToDraftAppVersionResponse_appArn,
+    importResourcesToDraftAppVersionResponse_appVersion,
+    importResourcesToDraftAppVersionResponse_status,
+
+    -- ** ListAlarmRecommendations
+    listAlarmRecommendations_maxResults,
+    listAlarmRecommendations_nextToken,
+    listAlarmRecommendations_assessmentArn,
+    listAlarmRecommendationsResponse_nextToken,
+    listAlarmRecommendationsResponse_httpStatus,
+    listAlarmRecommendationsResponse_alarmRecommendations,
+
+    -- ** ListAppAssessments
+    listAppAssessments_appArn,
+    listAppAssessments_assessmentName,
+    listAppAssessments_assessmentStatus,
+    listAppAssessments_complianceStatus,
+    listAppAssessments_invoker,
+    listAppAssessments_maxResults,
+    listAppAssessments_nextToken,
+    listAppAssessments_reverseOrder,
+    listAppAssessmentsResponse_nextToken,
+    listAppAssessmentsResponse_httpStatus,
+    listAppAssessmentsResponse_assessmentSummaries,
+
+    -- ** ListAppComponentCompliances
+    listAppComponentCompliances_maxResults,
+    listAppComponentCompliances_nextToken,
+    listAppComponentCompliances_assessmentArn,
+    listAppComponentCompliancesResponse_nextToken,
+    listAppComponentCompliancesResponse_httpStatus,
+    listAppComponentCompliancesResponse_componentCompliances,
+
+    -- ** ListAppComponentRecommendations
+    listAppComponentRecommendations_maxResults,
+    listAppComponentRecommendations_nextToken,
+    listAppComponentRecommendations_assessmentArn,
+    listAppComponentRecommendationsResponse_nextToken,
+    listAppComponentRecommendationsResponse_httpStatus,
+    listAppComponentRecommendationsResponse_componentRecommendations,
+
+    -- ** ListAppVersionResourceMappings
+    listAppVersionResourceMappings_maxResults,
+    listAppVersionResourceMappings_nextToken,
+    listAppVersionResourceMappings_appArn,
+    listAppVersionResourceMappings_appVersion,
+    listAppVersionResourceMappingsResponse_nextToken,
+    listAppVersionResourceMappingsResponse_httpStatus,
+    listAppVersionResourceMappingsResponse_resourceMappings,
+
+    -- ** ListAppVersionResources
+    listAppVersionResources_maxResults,
+    listAppVersionResources_nextToken,
+    listAppVersionResources_resolutionId,
+    listAppVersionResources_appArn,
+    listAppVersionResources_appVersion,
+    listAppVersionResourcesResponse_nextToken,
+    listAppVersionResourcesResponse_httpStatus,
+    listAppVersionResourcesResponse_physicalResources,
+    listAppVersionResourcesResponse_resolutionId,
+
+    -- ** ListAppVersions
+    listAppVersions_maxResults,
+    listAppVersions_nextToken,
+    listAppVersions_appArn,
+    listAppVersionsResponse_nextToken,
+    listAppVersionsResponse_httpStatus,
+    listAppVersionsResponse_appVersions,
+
+    -- ** ListApps
+    listApps_appArn,
+    listApps_maxResults,
+    listApps_name,
+    listApps_nextToken,
+    listAppsResponse_nextToken,
+    listAppsResponse_httpStatus,
+    listAppsResponse_appSummaries,
+
+    -- ** ListRecommendationTemplates
+    listRecommendationTemplates_maxResults,
+    listRecommendationTemplates_name,
+    listRecommendationTemplates_nextToken,
+    listRecommendationTemplates_recommendationTemplateArn,
+    listRecommendationTemplates_reverseOrder,
+    listRecommendationTemplates_status,
+    listRecommendationTemplates_assessmentArn,
+    listRecommendationTemplatesResponse_nextToken,
+    listRecommendationTemplatesResponse_recommendationTemplates,
+    listRecommendationTemplatesResponse_httpStatus,
+
+    -- ** ListResiliencyPolicies
+    listResiliencyPolicies_maxResults,
+    listResiliencyPolicies_nextToken,
+    listResiliencyPolicies_policyName,
+    listResiliencyPoliciesResponse_nextToken,
+    listResiliencyPoliciesResponse_httpStatus,
+    listResiliencyPoliciesResponse_resiliencyPolicies,
+
+    -- ** ListSopRecommendations
+    listSopRecommendations_maxResults,
+    listSopRecommendations_nextToken,
+    listSopRecommendations_assessmentArn,
+    listSopRecommendationsResponse_nextToken,
+    listSopRecommendationsResponse_httpStatus,
+    listSopRecommendationsResponse_sopRecommendations,
+
+    -- ** ListSuggestedResiliencyPolicies
+    listSuggestedResiliencyPolicies_maxResults,
+    listSuggestedResiliencyPolicies_nextToken,
+    listSuggestedResiliencyPoliciesResponse_nextToken,
+    listSuggestedResiliencyPoliciesResponse_httpStatus,
+    listSuggestedResiliencyPoliciesResponse_resiliencyPolicies,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListTestRecommendations
+    listTestRecommendations_maxResults,
+    listTestRecommendations_nextToken,
+    listTestRecommendations_assessmentArn,
+    listTestRecommendationsResponse_nextToken,
+    listTestRecommendationsResponse_httpStatus,
+    listTestRecommendationsResponse_testRecommendations,
+
+    -- ** ListUnsupportedAppVersionResources
+    listUnsupportedAppVersionResources_maxResults,
+    listUnsupportedAppVersionResources_nextToken,
+    listUnsupportedAppVersionResources_resolutionId,
+    listUnsupportedAppVersionResources_appArn,
+    listUnsupportedAppVersionResources_appVersion,
+    listUnsupportedAppVersionResourcesResponse_nextToken,
+    listUnsupportedAppVersionResourcesResponse_httpStatus,
+    listUnsupportedAppVersionResourcesResponse_resolutionId,
+    listUnsupportedAppVersionResourcesResponse_unsupportedResources,
+
+    -- ** PublishAppVersion
+    publishAppVersion_appArn,
+    publishAppVersionResponse_appVersion,
+    publishAppVersionResponse_httpStatus,
+    publishAppVersionResponse_appArn,
+
+    -- ** PutDraftAppVersionTemplate
+    putDraftAppVersionTemplate_appArn,
+    putDraftAppVersionTemplate_appTemplateBody,
+    putDraftAppVersionTemplateResponse_appArn,
+    putDraftAppVersionTemplateResponse_appVersion,
+    putDraftAppVersionTemplateResponse_httpStatus,
+
+    -- ** RemoveDraftAppVersionResourceMappings
+    removeDraftAppVersionResourceMappings_appRegistryAppNames,
+    removeDraftAppVersionResourceMappings_logicalStackNames,
+    removeDraftAppVersionResourceMappings_resourceGroupNames,
+    removeDraftAppVersionResourceMappings_resourceNames,
+    removeDraftAppVersionResourceMappings_terraformSourceNames,
+    removeDraftAppVersionResourceMappings_appArn,
+    removeDraftAppVersionResourceMappingsResponse_appArn,
+    removeDraftAppVersionResourceMappingsResponse_appVersion,
+    removeDraftAppVersionResourceMappingsResponse_httpStatus,
+
+    -- ** ResolveAppVersionResources
+    resolveAppVersionResources_appArn,
+    resolveAppVersionResources_appVersion,
+    resolveAppVersionResourcesResponse_httpStatus,
+    resolveAppVersionResourcesResponse_appArn,
+    resolveAppVersionResourcesResponse_appVersion,
+    resolveAppVersionResourcesResponse_resolutionId,
+    resolveAppVersionResourcesResponse_status,
+
+    -- ** StartAppAssessment
+    startAppAssessment_clientToken,
+    startAppAssessment_tags,
+    startAppAssessment_appArn,
+    startAppAssessment_appVersion,
+    startAppAssessment_assessmentName,
+    startAppAssessmentResponse_httpStatus,
+    startAppAssessmentResponse_assessment,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateApp
+    updateApp_assessmentSchedule,
+    updateApp_clearResiliencyPolicyArn,
+    updateApp_description,
+    updateApp_policyArn,
+    updateApp_appArn,
+    updateAppResponse_httpStatus,
+    updateAppResponse_app,
+
+    -- ** UpdateResiliencyPolicy
+    updateResiliencyPolicy_dataLocationConstraint,
+    updateResiliencyPolicy_policy,
+    updateResiliencyPolicy_policyDescription,
+    updateResiliencyPolicy_policyName,
+    updateResiliencyPolicy_tier,
+    updateResiliencyPolicy_policyArn,
+    updateResiliencyPolicyResponse_httpStatus,
+    updateResiliencyPolicyResponse_policy,
+
+    -- * Types
+
+    -- ** AlarmRecommendation
+    alarmRecommendation_appComponentName,
+    alarmRecommendation_description,
+    alarmRecommendation_items,
+    alarmRecommendation_prerequisite,
+    alarmRecommendation_name,
+    alarmRecommendation_recommendationId,
+    alarmRecommendation_referenceId,
+    alarmRecommendation_type,
+
+    -- ** App
+    app_assessmentSchedule,
+    app_complianceStatus,
+    app_description,
+    app_lastAppComplianceEvaluationTime,
+    app_lastResiliencyScoreEvaluationTime,
+    app_policyArn,
+    app_resiliencyScore,
+    app_status,
+    app_tags,
+    app_appArn,
+    app_creationTime,
+    app_name,
+
+    -- ** AppAssessment
+    appAssessment_appArn,
+    appAssessment_appVersion,
+    appAssessment_assessmentName,
+    appAssessment_compliance,
+    appAssessment_complianceStatus,
+    appAssessment_cost,
+    appAssessment_endTime,
+    appAssessment_message,
+    appAssessment_policy,
+    appAssessment_resiliencyScore,
+    appAssessment_resourceErrorsDetails,
+    appAssessment_startTime,
+    appAssessment_tags,
+    appAssessment_assessmentArn,
+    appAssessment_assessmentStatus,
+    appAssessment_invoker,
+
+    -- ** AppAssessmentSummary
+    appAssessmentSummary_appArn,
+    appAssessmentSummary_appVersion,
+    appAssessmentSummary_assessmentName,
+    appAssessmentSummary_complianceStatus,
+    appAssessmentSummary_cost,
+    appAssessmentSummary_endTime,
+    appAssessmentSummary_invoker,
+    appAssessmentSummary_message,
+    appAssessmentSummary_resiliencyScore,
+    appAssessmentSummary_startTime,
+    appAssessmentSummary_assessmentArn,
+    appAssessmentSummary_assessmentStatus,
+
+    -- ** AppComponent
+    appComponent_name,
+    appComponent_type,
+
+    -- ** AppComponentCompliance
+    appComponentCompliance_appComponentName,
+    appComponentCompliance_compliance,
+    appComponentCompliance_cost,
+    appComponentCompliance_message,
+    appComponentCompliance_resiliencyScore,
+    appComponentCompliance_status,
+
+    -- ** AppSummary
+    appSummary_assessmentSchedule,
+    appSummary_complianceStatus,
+    appSummary_description,
+    appSummary_resiliencyScore,
+    appSummary_status,
+    appSummary_appArn,
+    appSummary_creationTime,
+    appSummary_name,
+
+    -- ** AppVersionSummary
+    appVersionSummary_appVersion,
+
+    -- ** ComponentRecommendation
+    componentRecommendation_appComponentName,
+    componentRecommendation_configRecommendations,
+    componentRecommendation_recommendationStatus,
+
+    -- ** ConfigRecommendation
+    configRecommendation_appComponentName,
+    configRecommendation_compliance,
+    configRecommendation_cost,
+    configRecommendation_description,
+    configRecommendation_haArchitecture,
+    configRecommendation_recommendationCompliance,
+    configRecommendation_suggestedChanges,
+    configRecommendation_name,
+    configRecommendation_optimizationType,
+    configRecommendation_referenceId,
+
+    -- ** Cost
+    cost_amount,
+    cost_currency,
+    cost_frequency,
+
+    -- ** DisruptionCompliance
+    disruptionCompliance_achievableRpoInSecs,
+    disruptionCompliance_achievableRtoInSecs,
+    disruptionCompliance_currentRpoInSecs,
+    disruptionCompliance_currentRtoInSecs,
+    disruptionCompliance_message,
+    disruptionCompliance_rpoDescription,
+    disruptionCompliance_rpoReferenceId,
+    disruptionCompliance_rtoDescription,
+    disruptionCompliance_rtoReferenceId,
+    disruptionCompliance_complianceStatus,
+
+    -- ** FailurePolicy
+    failurePolicy_rpoInSecs,
+    failurePolicy_rtoInSecs,
+
+    -- ** LogicalResourceId
+    logicalResourceId_logicalStackName,
+    logicalResourceId_resourceGroupName,
+    logicalResourceId_terraformSourceName,
+    logicalResourceId_identifier,
+
+    -- ** PhysicalResource
+    physicalResource_appComponents,
+    physicalResource_resourceName,
+    physicalResource_logicalResourceId,
+    physicalResource_physicalResourceId,
+    physicalResource_resourceType,
+
+    -- ** PhysicalResourceId
+    physicalResourceId_awsAccountId,
+    physicalResourceId_awsRegion,
+    physicalResourceId_identifier,
+    physicalResourceId_type,
+
+    -- ** RecommendationDisruptionCompliance
+    recommendationDisruptionCompliance_expectedRpoDescription,
+    recommendationDisruptionCompliance_expectedRpoInSecs,
+    recommendationDisruptionCompliance_expectedRtoDescription,
+    recommendationDisruptionCompliance_expectedRtoInSecs,
+    recommendationDisruptionCompliance_expectedComplianceStatus,
+
+    -- ** RecommendationItem
+    recommendationItem_alreadyImplemented,
+    recommendationItem_resourceId,
+    recommendationItem_targetAccountId,
+    recommendationItem_targetRegion,
+
+    -- ** RecommendationTemplate
+    recommendationTemplate_appArn,
+    recommendationTemplate_endTime,
+    recommendationTemplate_message,
+    recommendationTemplate_needsReplacements,
+    recommendationTemplate_recommendationIds,
+    recommendationTemplate_startTime,
+    recommendationTemplate_tags,
+    recommendationTemplate_templatesLocation,
+    recommendationTemplate_assessmentArn,
+    recommendationTemplate_format,
+    recommendationTemplate_name,
+    recommendationTemplate_recommendationTemplateArn,
+    recommendationTemplate_recommendationTypes,
+    recommendationTemplate_status,
+
+    -- ** ResiliencyPolicy
+    resiliencyPolicy_creationTime,
+    resiliencyPolicy_dataLocationConstraint,
+    resiliencyPolicy_estimatedCostTier,
+    resiliencyPolicy_policy,
+    resiliencyPolicy_policyArn,
+    resiliencyPolicy_policyDescription,
+    resiliencyPolicy_policyName,
+    resiliencyPolicy_tags,
+    resiliencyPolicy_tier,
+
+    -- ** ResiliencyScore
+    resiliencyScore_disruptionScore,
+    resiliencyScore_score,
+
+    -- ** ResourceError
+    resourceError_logicalResourceId,
+    resourceError_physicalResourceId,
+    resourceError_reason,
+
+    -- ** ResourceErrorsDetails
+    resourceErrorsDetails_hasMoreErrors,
+    resourceErrorsDetails_resourceErrors,
+
+    -- ** ResourceMapping
+    resourceMapping_appRegistryAppName,
+    resourceMapping_logicalStackName,
+    resourceMapping_resourceGroupName,
+    resourceMapping_resourceName,
+    resourceMapping_terraformSourceName,
+    resourceMapping_mappingType,
+    resourceMapping_physicalResourceId,
+
+    -- ** S3Location
+    s3Location_bucket,
+    s3Location_prefix,
+
+    -- ** SopRecommendation
+    sopRecommendation_appComponentName,
+    sopRecommendation_description,
+    sopRecommendation_items,
+    sopRecommendation_name,
+    sopRecommendation_prerequisite,
+    sopRecommendation_recommendationId,
+    sopRecommendation_referenceId,
+    sopRecommendation_serviceType,
+
+    -- ** TerraformSource
+    terraformSource_s3StateFileUrl,
+
+    -- ** TestRecommendation
+    testRecommendation_appComponentName,
+    testRecommendation_dependsOnAlarms,
+    testRecommendation_description,
+    testRecommendation_intent,
+    testRecommendation_items,
+    testRecommendation_name,
+    testRecommendation_prerequisite,
+    testRecommendation_recommendationId,
+    testRecommendation_risk,
+    testRecommendation_type,
+    testRecommendation_referenceId,
+
+    -- ** UnsupportedResource
+    unsupportedResource_logicalResourceId,
+    unsupportedResource_physicalResourceId,
+    unsupportedResource_resourceType,
+  )
+where
+
+import Amazonka.ResilienceHub.AddDraftAppVersionResourceMappings
+import Amazonka.ResilienceHub.CreateApp
+import Amazonka.ResilienceHub.CreateRecommendationTemplate
+import Amazonka.ResilienceHub.CreateResiliencyPolicy
+import Amazonka.ResilienceHub.DeleteApp
+import Amazonka.ResilienceHub.DeleteAppAssessment
+import Amazonka.ResilienceHub.DeleteRecommendationTemplate
+import Amazonka.ResilienceHub.DeleteResiliencyPolicy
+import Amazonka.ResilienceHub.DescribeApp
+import Amazonka.ResilienceHub.DescribeAppAssessment
+import Amazonka.ResilienceHub.DescribeAppVersionResourcesResolutionStatus
+import Amazonka.ResilienceHub.DescribeAppVersionTemplate
+import Amazonka.ResilienceHub.DescribeDraftAppVersionResourcesImportStatus
+import Amazonka.ResilienceHub.DescribeResiliencyPolicy
+import Amazonka.ResilienceHub.ImportResourcesToDraftAppVersion
+import Amazonka.ResilienceHub.ListAlarmRecommendations
+import Amazonka.ResilienceHub.ListAppAssessments
+import Amazonka.ResilienceHub.ListAppComponentCompliances
+import Amazonka.ResilienceHub.ListAppComponentRecommendations
+import Amazonka.ResilienceHub.ListAppVersionResourceMappings
+import Amazonka.ResilienceHub.ListAppVersionResources
+import Amazonka.ResilienceHub.ListAppVersions
+import Amazonka.ResilienceHub.ListApps
+import Amazonka.ResilienceHub.ListRecommendationTemplates
+import Amazonka.ResilienceHub.ListResiliencyPolicies
+import Amazonka.ResilienceHub.ListSopRecommendations
+import Amazonka.ResilienceHub.ListSuggestedResiliencyPolicies
+import Amazonka.ResilienceHub.ListTagsForResource
+import Amazonka.ResilienceHub.ListTestRecommendations
+import Amazonka.ResilienceHub.ListUnsupportedAppVersionResources
+import Amazonka.ResilienceHub.PublishAppVersion
+import Amazonka.ResilienceHub.PutDraftAppVersionTemplate
+import Amazonka.ResilienceHub.RemoveDraftAppVersionResourceMappings
+import Amazonka.ResilienceHub.ResolveAppVersionResources
+import Amazonka.ResilienceHub.StartAppAssessment
+import Amazonka.ResilienceHub.TagResource
+import Amazonka.ResilienceHub.Types.AlarmRecommendation
+import Amazonka.ResilienceHub.Types.App
+import Amazonka.ResilienceHub.Types.AppAssessment
+import Amazonka.ResilienceHub.Types.AppAssessmentSummary
+import Amazonka.ResilienceHub.Types.AppComponent
+import Amazonka.ResilienceHub.Types.AppComponentCompliance
+import Amazonka.ResilienceHub.Types.AppSummary
+import Amazonka.ResilienceHub.Types.AppVersionSummary
+import Amazonka.ResilienceHub.Types.ComponentRecommendation
+import Amazonka.ResilienceHub.Types.ConfigRecommendation
+import Amazonka.ResilienceHub.Types.Cost
+import Amazonka.ResilienceHub.Types.DisruptionCompliance
+import Amazonka.ResilienceHub.Types.FailurePolicy
+import Amazonka.ResilienceHub.Types.LogicalResourceId
+import Amazonka.ResilienceHub.Types.PhysicalResource
+import Amazonka.ResilienceHub.Types.PhysicalResourceId
+import Amazonka.ResilienceHub.Types.RecommendationDisruptionCompliance
+import Amazonka.ResilienceHub.Types.RecommendationItem
+import Amazonka.ResilienceHub.Types.RecommendationTemplate
+import Amazonka.ResilienceHub.Types.ResiliencyPolicy
+import Amazonka.ResilienceHub.Types.ResiliencyScore
+import Amazonka.ResilienceHub.Types.ResourceError
+import Amazonka.ResilienceHub.Types.ResourceErrorsDetails
+import Amazonka.ResilienceHub.Types.ResourceMapping
+import Amazonka.ResilienceHub.Types.S3Location
+import Amazonka.ResilienceHub.Types.SopRecommendation
+import Amazonka.ResilienceHub.Types.TerraformSource
+import Amazonka.ResilienceHub.Types.TestRecommendation
+import Amazonka.ResilienceHub.Types.UnsupportedResource
+import Amazonka.ResilienceHub.UntagResource
+import Amazonka.ResilienceHub.UpdateApp
+import Amazonka.ResilienceHub.UpdateResiliencyPolicy
diff --git a/gen/Amazonka/ResilienceHub/ListAlarmRecommendations.hs b/gen/Amazonka/ResilienceHub/ListAlarmRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAlarmRecommendations.hs
@@ -0,0 +1,248 @@
+{-# 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.ResilienceHub.ListAlarmRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the alarm recommendations for a AWS Resilience Hub application.
+module Amazonka.ResilienceHub.ListAlarmRecommendations
+  ( -- * Creating a Request
+    ListAlarmRecommendations (..),
+    newListAlarmRecommendations,
+
+    -- * Request Lenses
+    listAlarmRecommendations_maxResults,
+    listAlarmRecommendations_nextToken,
+    listAlarmRecommendations_assessmentArn,
+
+    -- * Destructuring the Response
+    ListAlarmRecommendationsResponse (..),
+    newListAlarmRecommendationsResponse,
+
+    -- * Response Lenses
+    listAlarmRecommendationsResponse_nextToken,
+    listAlarmRecommendationsResponse_httpStatus,
+    listAlarmRecommendationsResponse_alarmRecommendations,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAlarmRecommendations' smart constructor.
+data ListAlarmRecommendations = ListAlarmRecommendations'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAlarmRecommendations' with all optional fields 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', 'listAlarmRecommendations_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAlarmRecommendations_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'assessmentArn', 'listAlarmRecommendations_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListAlarmRecommendations ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  ListAlarmRecommendations
+newListAlarmRecommendations pAssessmentArn_ =
+  ListAlarmRecommendations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAlarmRecommendations_maxResults :: Lens.Lens' ListAlarmRecommendations (Prelude.Maybe Prelude.Natural)
+listAlarmRecommendations_maxResults = Lens.lens (\ListAlarmRecommendations' {maxResults} -> maxResults) (\s@ListAlarmRecommendations' {} a -> s {maxResults = a} :: ListAlarmRecommendations)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAlarmRecommendations_nextToken :: Lens.Lens' ListAlarmRecommendations (Prelude.Maybe Prelude.Text)
+listAlarmRecommendations_nextToken = Lens.lens (\ListAlarmRecommendations' {nextToken} -> nextToken) (\s@ListAlarmRecommendations' {} a -> s {nextToken = a} :: ListAlarmRecommendations)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAlarmRecommendations_assessmentArn :: Lens.Lens' ListAlarmRecommendations Prelude.Text
+listAlarmRecommendations_assessmentArn = Lens.lens (\ListAlarmRecommendations' {assessmentArn} -> assessmentArn) (\s@ListAlarmRecommendations' {} a -> s {assessmentArn = a} :: ListAlarmRecommendations)
+
+instance Core.AWSRequest ListAlarmRecommendations where
+  type
+    AWSResponse ListAlarmRecommendations =
+      ListAlarmRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAlarmRecommendationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "alarmRecommendations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListAlarmRecommendations where
+  hashWithSalt _salt ListAlarmRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData ListAlarmRecommendations where
+  rnf ListAlarmRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance Data.ToHeaders ListAlarmRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAlarmRecommendations where
+  toJSON ListAlarmRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath ListAlarmRecommendations where
+  toPath = Prelude.const "/list-alarm-recommendations"
+
+instance Data.ToQuery ListAlarmRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAlarmRecommendationsResponse' smart constructor.
+data ListAlarmRecommendationsResponse = ListAlarmRecommendationsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The alarm recommendations for an AWS Resilience Hub application,
+    -- returned as an object. This object includes application component names,
+    -- descriptions, information about whether a recommendation has already
+    -- been implemented or not, prerequisites, and more.
+    alarmRecommendations :: [AlarmRecommendation]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAlarmRecommendationsResponse' with all optional fields 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', 'listAlarmRecommendationsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAlarmRecommendationsResponse_httpStatus' - The response's http status code.
+--
+-- 'alarmRecommendations', 'listAlarmRecommendationsResponse_alarmRecommendations' - The alarm recommendations for an AWS Resilience Hub application,
+-- returned as an object. This object includes application component names,
+-- descriptions, information about whether a recommendation has already
+-- been implemented or not, prerequisites, and more.
+newListAlarmRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAlarmRecommendationsResponse
+newListAlarmRecommendationsResponse pHttpStatus_ =
+  ListAlarmRecommendationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      alarmRecommendations = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAlarmRecommendationsResponse_nextToken :: Lens.Lens' ListAlarmRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listAlarmRecommendationsResponse_nextToken = Lens.lens (\ListAlarmRecommendationsResponse' {nextToken} -> nextToken) (\s@ListAlarmRecommendationsResponse' {} a -> s {nextToken = a} :: ListAlarmRecommendationsResponse)
+
+-- | The response's http status code.
+listAlarmRecommendationsResponse_httpStatus :: Lens.Lens' ListAlarmRecommendationsResponse Prelude.Int
+listAlarmRecommendationsResponse_httpStatus = Lens.lens (\ListAlarmRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListAlarmRecommendationsResponse' {} a -> s {httpStatus = a} :: ListAlarmRecommendationsResponse)
+
+-- | The alarm recommendations for an AWS Resilience Hub application,
+-- returned as an object. This object includes application component names,
+-- descriptions, information about whether a recommendation has already
+-- been implemented or not, prerequisites, and more.
+listAlarmRecommendationsResponse_alarmRecommendations :: Lens.Lens' ListAlarmRecommendationsResponse [AlarmRecommendation]
+listAlarmRecommendationsResponse_alarmRecommendations = Lens.lens (\ListAlarmRecommendationsResponse' {alarmRecommendations} -> alarmRecommendations) (\s@ListAlarmRecommendationsResponse' {} a -> s {alarmRecommendations = a} :: ListAlarmRecommendationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAlarmRecommendationsResponse
+  where
+  rnf ListAlarmRecommendationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf alarmRecommendations
diff --git a/gen/Amazonka/ResilienceHub/ListAppAssessments.hs b/gen/Amazonka/ResilienceHub/ListAppAssessments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAppAssessments.hs
@@ -0,0 +1,306 @@
+{-# 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.ResilienceHub.ListAppAssessments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the assessments for an AWS Resilience Hub application. You can use
+-- request parameters to refine the results for the response object.
+module Amazonka.ResilienceHub.ListAppAssessments
+  ( -- * Creating a Request
+    ListAppAssessments (..),
+    newListAppAssessments,
+
+    -- * Request Lenses
+    listAppAssessments_appArn,
+    listAppAssessments_assessmentName,
+    listAppAssessments_assessmentStatus,
+    listAppAssessments_complianceStatus,
+    listAppAssessments_invoker,
+    listAppAssessments_maxResults,
+    listAppAssessments_nextToken,
+    listAppAssessments_reverseOrder,
+
+    -- * Destructuring the Response
+    ListAppAssessmentsResponse (..),
+    newListAppAssessmentsResponse,
+
+    -- * Response Lenses
+    listAppAssessmentsResponse_nextToken,
+    listAppAssessmentsResponse_httpStatus,
+    listAppAssessmentsResponse_assessmentSummaries,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAppAssessments' smart constructor.
+data ListAppAssessments = ListAppAssessments'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The name for the assessment.
+    assessmentName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the assessment for the resiliency policy.
+    assessmentStatus :: Prelude.Maybe (Prelude.NonEmpty AssessmentStatus),
+    -- | The current status of compliance for the resiliency policy.
+    complianceStatus :: Prelude.Maybe ComplianceStatus,
+    -- | Specifies the entity that invoked a specific assessment, either a @User@
+    -- or the @System@.
+    invoker :: Prelude.Maybe AssessmentInvoker,
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The default is to sort by ascending __startTime__. To sort by descending
+    -- __startTime__, set reverseOrder to @true@.
+    reverseOrder :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppAssessments' with all optional fields 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:
+--
+-- 'appArn', 'listAppAssessments_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'assessmentName', 'listAppAssessments_assessmentName' - The name for the assessment.
+--
+-- 'assessmentStatus', 'listAppAssessments_assessmentStatus' - The current status of the assessment for the resiliency policy.
+--
+-- 'complianceStatus', 'listAppAssessments_complianceStatus' - The current status of compliance for the resiliency policy.
+--
+-- 'invoker', 'listAppAssessments_invoker' - Specifies the entity that invoked a specific assessment, either a @User@
+-- or the @System@.
+--
+-- 'maxResults', 'listAppAssessments_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAppAssessments_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'reverseOrder', 'listAppAssessments_reverseOrder' - The default is to sort by ascending __startTime__. To sort by descending
+-- __startTime__, set reverseOrder to @true@.
+newListAppAssessments ::
+  ListAppAssessments
+newListAppAssessments =
+  ListAppAssessments'
+    { appArn = Prelude.Nothing,
+      assessmentName = Prelude.Nothing,
+      assessmentStatus = Prelude.Nothing,
+      complianceStatus = Prelude.Nothing,
+      invoker = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      reverseOrder = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAppAssessments_appArn :: Lens.Lens' ListAppAssessments (Prelude.Maybe Prelude.Text)
+listAppAssessments_appArn = Lens.lens (\ListAppAssessments' {appArn} -> appArn) (\s@ListAppAssessments' {} a -> s {appArn = a} :: ListAppAssessments)
+
+-- | The name for the assessment.
+listAppAssessments_assessmentName :: Lens.Lens' ListAppAssessments (Prelude.Maybe Prelude.Text)
+listAppAssessments_assessmentName = Lens.lens (\ListAppAssessments' {assessmentName} -> assessmentName) (\s@ListAppAssessments' {} a -> s {assessmentName = a} :: ListAppAssessments)
+
+-- | The current status of the assessment for the resiliency policy.
+listAppAssessments_assessmentStatus :: Lens.Lens' ListAppAssessments (Prelude.Maybe (Prelude.NonEmpty AssessmentStatus))
+listAppAssessments_assessmentStatus = Lens.lens (\ListAppAssessments' {assessmentStatus} -> assessmentStatus) (\s@ListAppAssessments' {} a -> s {assessmentStatus = a} :: ListAppAssessments) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of compliance for the resiliency policy.
+listAppAssessments_complianceStatus :: Lens.Lens' ListAppAssessments (Prelude.Maybe ComplianceStatus)
+listAppAssessments_complianceStatus = Lens.lens (\ListAppAssessments' {complianceStatus} -> complianceStatus) (\s@ListAppAssessments' {} a -> s {complianceStatus = a} :: ListAppAssessments)
+
+-- | Specifies the entity that invoked a specific assessment, either a @User@
+-- or the @System@.
+listAppAssessments_invoker :: Lens.Lens' ListAppAssessments (Prelude.Maybe AssessmentInvoker)
+listAppAssessments_invoker = Lens.lens (\ListAppAssessments' {invoker} -> invoker) (\s@ListAppAssessments' {} a -> s {invoker = a} :: ListAppAssessments)
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAppAssessments_maxResults :: Lens.Lens' ListAppAssessments (Prelude.Maybe Prelude.Natural)
+listAppAssessments_maxResults = Lens.lens (\ListAppAssessments' {maxResults} -> maxResults) (\s@ListAppAssessments' {} a -> s {maxResults = a} :: ListAppAssessments)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAppAssessments_nextToken :: Lens.Lens' ListAppAssessments (Prelude.Maybe Prelude.Text)
+listAppAssessments_nextToken = Lens.lens (\ListAppAssessments' {nextToken} -> nextToken) (\s@ListAppAssessments' {} a -> s {nextToken = a} :: ListAppAssessments)
+
+-- | The default is to sort by ascending __startTime__. To sort by descending
+-- __startTime__, set reverseOrder to @true@.
+listAppAssessments_reverseOrder :: Lens.Lens' ListAppAssessments (Prelude.Maybe Prelude.Bool)
+listAppAssessments_reverseOrder = Lens.lens (\ListAppAssessments' {reverseOrder} -> reverseOrder) (\s@ListAppAssessments' {} a -> s {reverseOrder = a} :: ListAppAssessments)
+
+instance Core.AWSRequest ListAppAssessments where
+  type
+    AWSResponse ListAppAssessments =
+      ListAppAssessmentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppAssessmentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "assessmentSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListAppAssessments where
+  hashWithSalt _salt ListAppAssessments' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` assessmentName
+      `Prelude.hashWithSalt` assessmentStatus
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` invoker
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` reverseOrder
+
+instance Prelude.NFData ListAppAssessments where
+  rnf ListAppAssessments' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf assessmentName
+      `Prelude.seq` Prelude.rnf assessmentStatus
+      `Prelude.seq` Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf invoker
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf reverseOrder
+
+instance Data.ToHeaders ListAppAssessments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAppAssessments where
+  toPath = Prelude.const "/list-app-assessments"
+
+instance Data.ToQuery ListAppAssessments where
+  toQuery ListAppAssessments' {..} =
+    Prelude.mconcat
+      [ "appArn" Data.=: appArn,
+        "assessmentName" Data.=: assessmentName,
+        "assessmentStatus"
+          Data.=: Data.toQuery
+            ( Data.toQueryList "member"
+                Prelude.<$> assessmentStatus
+            ),
+        "complianceStatus" Data.=: complianceStatus,
+        "invoker" Data.=: invoker,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "reverseOrder" Data.=: reverseOrder
+      ]
+
+-- | /See:/ 'newListAppAssessmentsResponse' smart constructor.
+data ListAppAssessmentsResponse = ListAppAssessmentsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The summaries for the specified assessments, returned as an object. This
+    -- object includes application versions, associated Amazon Resource Numbers
+    -- (ARNs), cost, messages, resiliency scores, and more.
+    assessmentSummaries :: [AppAssessmentSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppAssessmentsResponse' with all optional fields 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', 'listAppAssessmentsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppAssessmentsResponse_httpStatus' - The response's http status code.
+--
+-- 'assessmentSummaries', 'listAppAssessmentsResponse_assessmentSummaries' - The summaries for the specified assessments, returned as an object. This
+-- object includes application versions, associated Amazon Resource Numbers
+-- (ARNs), cost, messages, resiliency scores, and more.
+newListAppAssessmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppAssessmentsResponse
+newListAppAssessmentsResponse pHttpStatus_ =
+  ListAppAssessmentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      assessmentSummaries = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppAssessmentsResponse_nextToken :: Lens.Lens' ListAppAssessmentsResponse (Prelude.Maybe Prelude.Text)
+listAppAssessmentsResponse_nextToken = Lens.lens (\ListAppAssessmentsResponse' {nextToken} -> nextToken) (\s@ListAppAssessmentsResponse' {} a -> s {nextToken = a} :: ListAppAssessmentsResponse)
+
+-- | The response's http status code.
+listAppAssessmentsResponse_httpStatus :: Lens.Lens' ListAppAssessmentsResponse Prelude.Int
+listAppAssessmentsResponse_httpStatus = Lens.lens (\ListAppAssessmentsResponse' {httpStatus} -> httpStatus) (\s@ListAppAssessmentsResponse' {} a -> s {httpStatus = a} :: ListAppAssessmentsResponse)
+
+-- | The summaries for the specified assessments, returned as an object. This
+-- object includes application versions, associated Amazon Resource Numbers
+-- (ARNs), cost, messages, resiliency scores, and more.
+listAppAssessmentsResponse_assessmentSummaries :: Lens.Lens' ListAppAssessmentsResponse [AppAssessmentSummary]
+listAppAssessmentsResponse_assessmentSummaries = Lens.lens (\ListAppAssessmentsResponse' {assessmentSummaries} -> assessmentSummaries) (\s@ListAppAssessmentsResponse' {} a -> s {assessmentSummaries = a} :: ListAppAssessmentsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListAppAssessmentsResponse where
+  rnf ListAppAssessmentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf assessmentSummaries
diff --git a/gen/Amazonka/ResilienceHub/ListAppComponentCompliances.hs b/gen/Amazonka/ResilienceHub/ListAppComponentCompliances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAppComponentCompliances.hs
@@ -0,0 +1,246 @@
+{-# 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.ResilienceHub.ListAppComponentCompliances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the compliances for an AWS Resilience Hub component.
+module Amazonka.ResilienceHub.ListAppComponentCompliances
+  ( -- * Creating a Request
+    ListAppComponentCompliances (..),
+    newListAppComponentCompliances,
+
+    -- * Request Lenses
+    listAppComponentCompliances_maxResults,
+    listAppComponentCompliances_nextToken,
+    listAppComponentCompliances_assessmentArn,
+
+    -- * Destructuring the Response
+    ListAppComponentCompliancesResponse (..),
+    newListAppComponentCompliancesResponse,
+
+    -- * Response Lenses
+    listAppComponentCompliancesResponse_nextToken,
+    listAppComponentCompliancesResponse_httpStatus,
+    listAppComponentCompliancesResponse_componentCompliances,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAppComponentCompliances' smart constructor.
+data ListAppComponentCompliances = ListAppComponentCompliances'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppComponentCompliances' with all optional fields 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', 'listAppComponentCompliances_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAppComponentCompliances_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'assessmentArn', 'listAppComponentCompliances_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListAppComponentCompliances ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  ListAppComponentCompliances
+newListAppComponentCompliances pAssessmentArn_ =
+  ListAppComponentCompliances'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAppComponentCompliances_maxResults :: Lens.Lens' ListAppComponentCompliances (Prelude.Maybe Prelude.Natural)
+listAppComponentCompliances_maxResults = Lens.lens (\ListAppComponentCompliances' {maxResults} -> maxResults) (\s@ListAppComponentCompliances' {} a -> s {maxResults = a} :: ListAppComponentCompliances)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAppComponentCompliances_nextToken :: Lens.Lens' ListAppComponentCompliances (Prelude.Maybe Prelude.Text)
+listAppComponentCompliances_nextToken = Lens.lens (\ListAppComponentCompliances' {nextToken} -> nextToken) (\s@ListAppComponentCompliances' {} a -> s {nextToken = a} :: ListAppComponentCompliances)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAppComponentCompliances_assessmentArn :: Lens.Lens' ListAppComponentCompliances Prelude.Text
+listAppComponentCompliances_assessmentArn = Lens.lens (\ListAppComponentCompliances' {assessmentArn} -> assessmentArn) (\s@ListAppComponentCompliances' {} a -> s {assessmentArn = a} :: ListAppComponentCompliances)
+
+instance Core.AWSRequest ListAppComponentCompliances where
+  type
+    AWSResponse ListAppComponentCompliances =
+      ListAppComponentCompliancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppComponentCompliancesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "componentCompliances"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListAppComponentCompliances where
+  hashWithSalt _salt ListAppComponentCompliances' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData ListAppComponentCompliances where
+  rnf ListAppComponentCompliances' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance Data.ToHeaders ListAppComponentCompliances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAppComponentCompliances where
+  toJSON ListAppComponentCompliances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath ListAppComponentCompliances where
+  toPath =
+    Prelude.const "/list-app-component-compliances"
+
+instance Data.ToQuery ListAppComponentCompliances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAppComponentCompliancesResponse' smart constructor.
+data ListAppComponentCompliancesResponse = ListAppComponentCompliancesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The compliances for an AWS Resilience Hub application component,
+    -- returned as an object. This object contains component names,
+    -- compliances, costs, resiliency scores, outage scores, and more.
+    componentCompliances :: [AppComponentCompliance]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppComponentCompliancesResponse' with all optional fields 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', 'listAppComponentCompliancesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppComponentCompliancesResponse_httpStatus' - The response's http status code.
+--
+-- 'componentCompliances', 'listAppComponentCompliancesResponse_componentCompliances' - The compliances for an AWS Resilience Hub application component,
+-- returned as an object. This object contains component names,
+-- compliances, costs, resiliency scores, outage scores, and more.
+newListAppComponentCompliancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppComponentCompliancesResponse
+newListAppComponentCompliancesResponse pHttpStatus_ =
+  ListAppComponentCompliancesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      componentCompliances = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppComponentCompliancesResponse_nextToken :: Lens.Lens' ListAppComponentCompliancesResponse (Prelude.Maybe Prelude.Text)
+listAppComponentCompliancesResponse_nextToken = Lens.lens (\ListAppComponentCompliancesResponse' {nextToken} -> nextToken) (\s@ListAppComponentCompliancesResponse' {} a -> s {nextToken = a} :: ListAppComponentCompliancesResponse)
+
+-- | The response's http status code.
+listAppComponentCompliancesResponse_httpStatus :: Lens.Lens' ListAppComponentCompliancesResponse Prelude.Int
+listAppComponentCompliancesResponse_httpStatus = Lens.lens (\ListAppComponentCompliancesResponse' {httpStatus} -> httpStatus) (\s@ListAppComponentCompliancesResponse' {} a -> s {httpStatus = a} :: ListAppComponentCompliancesResponse)
+
+-- | The compliances for an AWS Resilience Hub application component,
+-- returned as an object. This object contains component names,
+-- compliances, costs, resiliency scores, outage scores, and more.
+listAppComponentCompliancesResponse_componentCompliances :: Lens.Lens' ListAppComponentCompliancesResponse [AppComponentCompliance]
+listAppComponentCompliancesResponse_componentCompliances = Lens.lens (\ListAppComponentCompliancesResponse' {componentCompliances} -> componentCompliances) (\s@ListAppComponentCompliancesResponse' {} a -> s {componentCompliances = a} :: ListAppComponentCompliancesResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAppComponentCompliancesResponse
+  where
+  rnf ListAppComponentCompliancesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf componentCompliances
diff --git a/gen/Amazonka/ResilienceHub/ListAppComponentRecommendations.hs b/gen/Amazonka/ResilienceHub/ListAppComponentRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAppComponentRecommendations.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.ListAppComponentRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the recommendations for an AWS Resilience Hub component.
+module Amazonka.ResilienceHub.ListAppComponentRecommendations
+  ( -- * Creating a Request
+    ListAppComponentRecommendations (..),
+    newListAppComponentRecommendations,
+
+    -- * Request Lenses
+    listAppComponentRecommendations_maxResults,
+    listAppComponentRecommendations_nextToken,
+    listAppComponentRecommendations_assessmentArn,
+
+    -- * Destructuring the Response
+    ListAppComponentRecommendationsResponse (..),
+    newListAppComponentRecommendationsResponse,
+
+    -- * Response Lenses
+    listAppComponentRecommendationsResponse_nextToken,
+    listAppComponentRecommendationsResponse_httpStatus,
+    listAppComponentRecommendationsResponse_componentRecommendations,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAppComponentRecommendations' smart constructor.
+data ListAppComponentRecommendations = ListAppComponentRecommendations'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppComponentRecommendations' with all optional fields 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', 'listAppComponentRecommendations_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAppComponentRecommendations_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'assessmentArn', 'listAppComponentRecommendations_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListAppComponentRecommendations ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  ListAppComponentRecommendations
+newListAppComponentRecommendations pAssessmentArn_ =
+  ListAppComponentRecommendations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAppComponentRecommendations_maxResults :: Lens.Lens' ListAppComponentRecommendations (Prelude.Maybe Prelude.Natural)
+listAppComponentRecommendations_maxResults = Lens.lens (\ListAppComponentRecommendations' {maxResults} -> maxResults) (\s@ListAppComponentRecommendations' {} a -> s {maxResults = a} :: ListAppComponentRecommendations)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAppComponentRecommendations_nextToken :: Lens.Lens' ListAppComponentRecommendations (Prelude.Maybe Prelude.Text)
+listAppComponentRecommendations_nextToken = Lens.lens (\ListAppComponentRecommendations' {nextToken} -> nextToken) (\s@ListAppComponentRecommendations' {} a -> s {nextToken = a} :: ListAppComponentRecommendations)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAppComponentRecommendations_assessmentArn :: Lens.Lens' ListAppComponentRecommendations Prelude.Text
+listAppComponentRecommendations_assessmentArn = Lens.lens (\ListAppComponentRecommendations' {assessmentArn} -> assessmentArn) (\s@ListAppComponentRecommendations' {} a -> s {assessmentArn = a} :: ListAppComponentRecommendations)
+
+instance
+  Core.AWSRequest
+    ListAppComponentRecommendations
+  where
+  type
+    AWSResponse ListAppComponentRecommendations =
+      ListAppComponentRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppComponentRecommendationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "componentRecommendations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListAppComponentRecommendations
+  where
+  hashWithSalt
+    _salt
+    ListAppComponentRecommendations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` assessmentArn
+
+instance
+  Prelude.NFData
+    ListAppComponentRecommendations
+  where
+  rnf ListAppComponentRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance
+  Data.ToHeaders
+    ListAppComponentRecommendations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAppComponentRecommendations where
+  toJSON ListAppComponentRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath ListAppComponentRecommendations where
+  toPath =
+    Prelude.const "/list-app-component-recommendations"
+
+instance Data.ToQuery ListAppComponentRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAppComponentRecommendationsResponse' smart constructor.
+data ListAppComponentRecommendationsResponse = ListAppComponentRecommendationsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The recommendations for an Resilience Hub application component,
+    -- returned as an object. This object contains component names,
+    -- configuration recommendations, and recommendation statuses.
+    componentRecommendations :: [ComponentRecommendation]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppComponentRecommendationsResponse' with all optional fields 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', 'listAppComponentRecommendationsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppComponentRecommendationsResponse_httpStatus' - The response's http status code.
+--
+-- 'componentRecommendations', 'listAppComponentRecommendationsResponse_componentRecommendations' - The recommendations for an Resilience Hub application component,
+-- returned as an object. This object contains component names,
+-- configuration recommendations, and recommendation statuses.
+newListAppComponentRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppComponentRecommendationsResponse
+newListAppComponentRecommendationsResponse
+  pHttpStatus_ =
+    ListAppComponentRecommendationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        componentRecommendations =
+          Prelude.mempty
+      }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppComponentRecommendationsResponse_nextToken :: Lens.Lens' ListAppComponentRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listAppComponentRecommendationsResponse_nextToken = Lens.lens (\ListAppComponentRecommendationsResponse' {nextToken} -> nextToken) (\s@ListAppComponentRecommendationsResponse' {} a -> s {nextToken = a} :: ListAppComponentRecommendationsResponse)
+
+-- | The response's http status code.
+listAppComponentRecommendationsResponse_httpStatus :: Lens.Lens' ListAppComponentRecommendationsResponse Prelude.Int
+listAppComponentRecommendationsResponse_httpStatus = Lens.lens (\ListAppComponentRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListAppComponentRecommendationsResponse' {} a -> s {httpStatus = a} :: ListAppComponentRecommendationsResponse)
+
+-- | The recommendations for an Resilience Hub application component,
+-- returned as an object. This object contains component names,
+-- configuration recommendations, and recommendation statuses.
+listAppComponentRecommendationsResponse_componentRecommendations :: Lens.Lens' ListAppComponentRecommendationsResponse [ComponentRecommendation]
+listAppComponentRecommendationsResponse_componentRecommendations = Lens.lens (\ListAppComponentRecommendationsResponse' {componentRecommendations} -> componentRecommendations) (\s@ListAppComponentRecommendationsResponse' {} a -> s {componentRecommendations = a} :: ListAppComponentRecommendationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAppComponentRecommendationsResponse
+  where
+  rnf ListAppComponentRecommendationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf componentRecommendations
diff --git a/gen/Amazonka/ResilienceHub/ListAppVersionResourceMappings.hs b/gen/Amazonka/ResilienceHub/ListAppVersionResourceMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAppVersionResourceMappings.hs
@@ -0,0 +1,282 @@
+{-# 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.ResilienceHub.ListAppVersionResourceMappings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists how the resources in an application version are mapped\/sourced
+-- from. Mappings can be physical resource identifiers, CloudFormation
+-- stacks, resource-groups, or an application registry app.
+module Amazonka.ResilienceHub.ListAppVersionResourceMappings
+  ( -- * Creating a Request
+    ListAppVersionResourceMappings (..),
+    newListAppVersionResourceMappings,
+
+    -- * Request Lenses
+    listAppVersionResourceMappings_maxResults,
+    listAppVersionResourceMappings_nextToken,
+    listAppVersionResourceMappings_appArn,
+    listAppVersionResourceMappings_appVersion,
+
+    -- * Destructuring the Response
+    ListAppVersionResourceMappingsResponse (..),
+    newListAppVersionResourceMappingsResponse,
+
+    -- * Response Lenses
+    listAppVersionResourceMappingsResponse_nextToken,
+    listAppVersionResourceMappingsResponse_httpStatus,
+    listAppVersionResourceMappingsResponse_resourceMappings,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAppVersionResourceMappings' smart constructor.
+data ListAppVersionResourceMappings = ListAppVersionResourceMappings'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppVersionResourceMappings' with all optional fields 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', 'listAppVersionResourceMappings_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAppVersionResourceMappings_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'appArn', 'listAppVersionResourceMappings_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'listAppVersionResourceMappings_appVersion' - The version of the application.
+newListAppVersionResourceMappings ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  ListAppVersionResourceMappings
+newListAppVersionResourceMappings
+  pAppArn_
+  pAppVersion_ =
+    ListAppVersionResourceMappings'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_
+      }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAppVersionResourceMappings_maxResults :: Lens.Lens' ListAppVersionResourceMappings (Prelude.Maybe Prelude.Natural)
+listAppVersionResourceMappings_maxResults = Lens.lens (\ListAppVersionResourceMappings' {maxResults} -> maxResults) (\s@ListAppVersionResourceMappings' {} a -> s {maxResults = a} :: ListAppVersionResourceMappings)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAppVersionResourceMappings_nextToken :: Lens.Lens' ListAppVersionResourceMappings (Prelude.Maybe Prelude.Text)
+listAppVersionResourceMappings_nextToken = Lens.lens (\ListAppVersionResourceMappings' {nextToken} -> nextToken) (\s@ListAppVersionResourceMappings' {} a -> s {nextToken = a} :: ListAppVersionResourceMappings)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAppVersionResourceMappings_appArn :: Lens.Lens' ListAppVersionResourceMappings Prelude.Text
+listAppVersionResourceMappings_appArn = Lens.lens (\ListAppVersionResourceMappings' {appArn} -> appArn) (\s@ListAppVersionResourceMappings' {} a -> s {appArn = a} :: ListAppVersionResourceMappings)
+
+-- | The version of the application.
+listAppVersionResourceMappings_appVersion :: Lens.Lens' ListAppVersionResourceMappings Prelude.Text
+listAppVersionResourceMappings_appVersion = Lens.lens (\ListAppVersionResourceMappings' {appVersion} -> appVersion) (\s@ListAppVersionResourceMappings' {} a -> s {appVersion = a} :: ListAppVersionResourceMappings)
+
+instance
+  Core.AWSRequest
+    ListAppVersionResourceMappings
+  where
+  type
+    AWSResponse ListAppVersionResourceMappings =
+      ListAppVersionResourceMappingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppVersionResourceMappingsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "resourceMappings"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListAppVersionResourceMappings
+  where
+  hashWithSalt
+    _salt
+    ListAppVersionResourceMappings' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` appArn
+        `Prelude.hashWithSalt` appVersion
+
+instance
+  Prelude.NFData
+    ListAppVersionResourceMappings
+  where
+  rnf ListAppVersionResourceMappings' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+
+instance
+  Data.ToHeaders
+    ListAppVersionResourceMappings
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAppVersionResourceMappings where
+  toJSON ListAppVersionResourceMappings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just ("appVersion" Data..= appVersion)
+          ]
+      )
+
+instance Data.ToPath ListAppVersionResourceMappings where
+  toPath =
+    Prelude.const "/list-app-version-resource-mappings"
+
+instance Data.ToQuery ListAppVersionResourceMappings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAppVersionResourceMappingsResponse' smart constructor.
+data ListAppVersionResourceMappingsResponse = ListAppVersionResourceMappingsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Mappings used to map logical resources from the template to physical
+    -- resources. You can use the mapping type @CFN_STACK@ if the application
+    -- template uses a logical stack name. Or you can map individual resources
+    -- by using the mapping type @RESOURCE@. We recommend using the mapping
+    -- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+    resourceMappings :: [ResourceMapping]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppVersionResourceMappingsResponse' with all optional fields 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', 'listAppVersionResourceMappingsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppVersionResourceMappingsResponse_httpStatus' - The response's http status code.
+--
+-- 'resourceMappings', 'listAppVersionResourceMappingsResponse_resourceMappings' - Mappings used to map logical resources from the template to physical
+-- resources. You can use the mapping type @CFN_STACK@ if the application
+-- template uses a logical stack name. Or you can map individual resources
+-- by using the mapping type @RESOURCE@. We recommend using the mapping
+-- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+newListAppVersionResourceMappingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppVersionResourceMappingsResponse
+newListAppVersionResourceMappingsResponse
+  pHttpStatus_ =
+    ListAppVersionResourceMappingsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        resourceMappings = Prelude.mempty
+      }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppVersionResourceMappingsResponse_nextToken :: Lens.Lens' ListAppVersionResourceMappingsResponse (Prelude.Maybe Prelude.Text)
+listAppVersionResourceMappingsResponse_nextToken = Lens.lens (\ListAppVersionResourceMappingsResponse' {nextToken} -> nextToken) (\s@ListAppVersionResourceMappingsResponse' {} a -> s {nextToken = a} :: ListAppVersionResourceMappingsResponse)
+
+-- | The response's http status code.
+listAppVersionResourceMappingsResponse_httpStatus :: Lens.Lens' ListAppVersionResourceMappingsResponse Prelude.Int
+listAppVersionResourceMappingsResponse_httpStatus = Lens.lens (\ListAppVersionResourceMappingsResponse' {httpStatus} -> httpStatus) (\s@ListAppVersionResourceMappingsResponse' {} a -> s {httpStatus = a} :: ListAppVersionResourceMappingsResponse)
+
+-- | Mappings used to map logical resources from the template to physical
+-- resources. You can use the mapping type @CFN_STACK@ if the application
+-- template uses a logical stack name. Or you can map individual resources
+-- by using the mapping type @RESOURCE@. We recommend using the mapping
+-- type @CFN_STACK@ if the application is backed by a CloudFormation stack.
+listAppVersionResourceMappingsResponse_resourceMappings :: Lens.Lens' ListAppVersionResourceMappingsResponse [ResourceMapping]
+listAppVersionResourceMappingsResponse_resourceMappings = Lens.lens (\ListAppVersionResourceMappingsResponse' {resourceMappings} -> resourceMappings) (\s@ListAppVersionResourceMappingsResponse' {} a -> s {resourceMappings = a} :: ListAppVersionResourceMappingsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAppVersionResourceMappingsResponse
+  where
+  rnf ListAppVersionResourceMappingsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf resourceMappings
diff --git a/gen/Amazonka/ResilienceHub/ListAppVersionResources.hs b/gen/Amazonka/ResilienceHub/ListAppVersionResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAppVersionResources.hs
@@ -0,0 +1,279 @@
+{-# 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.ResilienceHub.ListAppVersionResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the resources in an application version.
+module Amazonka.ResilienceHub.ListAppVersionResources
+  ( -- * Creating a Request
+    ListAppVersionResources (..),
+    newListAppVersionResources,
+
+    -- * Request Lenses
+    listAppVersionResources_maxResults,
+    listAppVersionResources_nextToken,
+    listAppVersionResources_resolutionId,
+    listAppVersionResources_appArn,
+    listAppVersionResources_appVersion,
+
+    -- * Destructuring the Response
+    ListAppVersionResourcesResponse (..),
+    newListAppVersionResourcesResponse,
+
+    -- * Response Lenses
+    listAppVersionResourcesResponse_nextToken,
+    listAppVersionResourcesResponse_httpStatus,
+    listAppVersionResourcesResponse_physicalResources,
+    listAppVersionResourcesResponse_resolutionId,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAppVersionResources' smart constructor.
+data ListAppVersionResources = ListAppVersionResources'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppVersionResources' with all optional fields 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', 'listAppVersionResources_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAppVersionResources_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'resolutionId', 'listAppVersionResources_resolutionId' - The identifier for a specific resolution.
+--
+-- 'appArn', 'listAppVersionResources_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'listAppVersionResources_appVersion' - The version of the application.
+newListAppVersionResources ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  ListAppVersionResources
+newListAppVersionResources pAppArn_ pAppVersion_ =
+  ListAppVersionResources'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resolutionId = Prelude.Nothing,
+      appArn = pAppArn_,
+      appVersion = pAppVersion_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAppVersionResources_maxResults :: Lens.Lens' ListAppVersionResources (Prelude.Maybe Prelude.Natural)
+listAppVersionResources_maxResults = Lens.lens (\ListAppVersionResources' {maxResults} -> maxResults) (\s@ListAppVersionResources' {} a -> s {maxResults = a} :: ListAppVersionResources)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAppVersionResources_nextToken :: Lens.Lens' ListAppVersionResources (Prelude.Maybe Prelude.Text)
+listAppVersionResources_nextToken = Lens.lens (\ListAppVersionResources' {nextToken} -> nextToken) (\s@ListAppVersionResources' {} a -> s {nextToken = a} :: ListAppVersionResources)
+
+-- | The identifier for a specific resolution.
+listAppVersionResources_resolutionId :: Lens.Lens' ListAppVersionResources (Prelude.Maybe Prelude.Text)
+listAppVersionResources_resolutionId = Lens.lens (\ListAppVersionResources' {resolutionId} -> resolutionId) (\s@ListAppVersionResources' {} a -> s {resolutionId = a} :: ListAppVersionResources)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAppVersionResources_appArn :: Lens.Lens' ListAppVersionResources Prelude.Text
+listAppVersionResources_appArn = Lens.lens (\ListAppVersionResources' {appArn} -> appArn) (\s@ListAppVersionResources' {} a -> s {appArn = a} :: ListAppVersionResources)
+
+-- | The version of the application.
+listAppVersionResources_appVersion :: Lens.Lens' ListAppVersionResources Prelude.Text
+listAppVersionResources_appVersion = Lens.lens (\ListAppVersionResources' {appVersion} -> appVersion) (\s@ListAppVersionResources' {} a -> s {appVersion = a} :: ListAppVersionResources)
+
+instance Core.AWSRequest ListAppVersionResources where
+  type
+    AWSResponse ListAppVersionResources =
+      ListAppVersionResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppVersionResourcesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "physicalResources"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:> "resolutionId")
+      )
+
+instance Prelude.Hashable ListAppVersionResources where
+  hashWithSalt _salt ListAppVersionResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resolutionId
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appVersion
+
+instance Prelude.NFData ListAppVersionResources where
+  rnf ListAppVersionResources' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resolutionId
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+
+instance Data.ToHeaders ListAppVersionResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAppVersionResources where
+  toJSON ListAppVersionResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("resolutionId" Data..=) Prelude.<$> resolutionId,
+            Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just ("appVersion" Data..= appVersion)
+          ]
+      )
+
+instance Data.ToPath ListAppVersionResources where
+  toPath = Prelude.const "/list-app-version-resources"
+
+instance Data.ToQuery ListAppVersionResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAppVersionResourcesResponse' smart constructor.
+data ListAppVersionResourcesResponse = ListAppVersionResourcesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The physical resources in the application version.
+    physicalResources :: [PhysicalResource],
+    -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppVersionResourcesResponse' with all optional fields 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', 'listAppVersionResourcesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppVersionResourcesResponse_httpStatus' - The response's http status code.
+--
+-- 'physicalResources', 'listAppVersionResourcesResponse_physicalResources' - The physical resources in the application version.
+--
+-- 'resolutionId', 'listAppVersionResourcesResponse_resolutionId' - The identifier for a specific resolution.
+newListAppVersionResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'resolutionId'
+  Prelude.Text ->
+  ListAppVersionResourcesResponse
+newListAppVersionResourcesResponse
+  pHttpStatus_
+  pResolutionId_ =
+    ListAppVersionResourcesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        physicalResources = Prelude.mempty,
+        resolutionId = pResolutionId_
+      }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppVersionResourcesResponse_nextToken :: Lens.Lens' ListAppVersionResourcesResponse (Prelude.Maybe Prelude.Text)
+listAppVersionResourcesResponse_nextToken = Lens.lens (\ListAppVersionResourcesResponse' {nextToken} -> nextToken) (\s@ListAppVersionResourcesResponse' {} a -> s {nextToken = a} :: ListAppVersionResourcesResponse)
+
+-- | The response's http status code.
+listAppVersionResourcesResponse_httpStatus :: Lens.Lens' ListAppVersionResourcesResponse Prelude.Int
+listAppVersionResourcesResponse_httpStatus = Lens.lens (\ListAppVersionResourcesResponse' {httpStatus} -> httpStatus) (\s@ListAppVersionResourcesResponse' {} a -> s {httpStatus = a} :: ListAppVersionResourcesResponse)
+
+-- | The physical resources in the application version.
+listAppVersionResourcesResponse_physicalResources :: Lens.Lens' ListAppVersionResourcesResponse [PhysicalResource]
+listAppVersionResourcesResponse_physicalResources = Lens.lens (\ListAppVersionResourcesResponse' {physicalResources} -> physicalResources) (\s@ListAppVersionResourcesResponse' {} a -> s {physicalResources = a} :: ListAppVersionResourcesResponse) Prelude.. Lens.coerced
+
+-- | The identifier for a specific resolution.
+listAppVersionResourcesResponse_resolutionId :: Lens.Lens' ListAppVersionResourcesResponse Prelude.Text
+listAppVersionResourcesResponse_resolutionId = Lens.lens (\ListAppVersionResourcesResponse' {resolutionId} -> resolutionId) (\s@ListAppVersionResourcesResponse' {} a -> s {resolutionId = a} :: ListAppVersionResourcesResponse)
+
+instance
+  Prelude.NFData
+    ListAppVersionResourcesResponse
+  where
+  rnf ListAppVersionResourcesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf physicalResources
+      `Prelude.seq` Prelude.rnf resolutionId
diff --git a/gen/Amazonka/ResilienceHub/ListAppVersions.hs b/gen/Amazonka/ResilienceHub/ListAppVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListAppVersions.hs
@@ -0,0 +1,228 @@
+{-# 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.ResilienceHub.ListAppVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the different versions for the Resilience Hub applications.
+module Amazonka.ResilienceHub.ListAppVersions
+  ( -- * Creating a Request
+    ListAppVersions (..),
+    newListAppVersions,
+
+    -- * Request Lenses
+    listAppVersions_maxResults,
+    listAppVersions_nextToken,
+    listAppVersions_appArn,
+
+    -- * Destructuring the Response
+    ListAppVersionsResponse (..),
+    newListAppVersionsResponse,
+
+    -- * Response Lenses
+    listAppVersionsResponse_nextToken,
+    listAppVersionsResponse_httpStatus,
+    listAppVersionsResponse_appVersions,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAppVersions' smart constructor.
+data ListAppVersions = ListAppVersions'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppVersions' with all optional fields 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', 'listAppVersions_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listAppVersions_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'appArn', 'listAppVersions_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListAppVersions ::
+  -- | 'appArn'
+  Prelude.Text ->
+  ListAppVersions
+newListAppVersions pAppArn_ =
+  ListAppVersions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appArn = pAppArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listAppVersions_maxResults :: Lens.Lens' ListAppVersions (Prelude.Maybe Prelude.Natural)
+listAppVersions_maxResults = Lens.lens (\ListAppVersions' {maxResults} -> maxResults) (\s@ListAppVersions' {} a -> s {maxResults = a} :: ListAppVersions)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listAppVersions_nextToken :: Lens.Lens' ListAppVersions (Prelude.Maybe Prelude.Text)
+listAppVersions_nextToken = Lens.lens (\ListAppVersions' {nextToken} -> nextToken) (\s@ListAppVersions' {} a -> s {nextToken = a} :: ListAppVersions)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listAppVersions_appArn :: Lens.Lens' ListAppVersions Prelude.Text
+listAppVersions_appArn = Lens.lens (\ListAppVersions' {appArn} -> appArn) (\s@ListAppVersions' {} a -> s {appArn = a} :: ListAppVersions)
+
+instance Core.AWSRequest ListAppVersions where
+  type
+    AWSResponse ListAppVersions =
+      ListAppVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppVersionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "appVersions" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListAppVersions where
+  hashWithSalt _salt ListAppVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appArn
+
+instance Prelude.NFData ListAppVersions where
+  rnf ListAppVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appArn
+
+instance Data.ToHeaders ListAppVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAppVersions where
+  toJSON ListAppVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("appArn" Data..= appArn)
+          ]
+      )
+
+instance Data.ToPath ListAppVersions where
+  toPath = Prelude.const "/list-app-versions"
+
+instance Data.ToQuery ListAppVersions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAppVersionsResponse' smart constructor.
+data ListAppVersionsResponse = ListAppVersionsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The version of the application.
+    appVersions :: [AppVersionSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppVersionsResponse' with all optional fields 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', 'listAppVersionsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppVersionsResponse_httpStatus' - The response's http status code.
+--
+-- 'appVersions', 'listAppVersionsResponse_appVersions' - The version of the application.
+newListAppVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppVersionsResponse
+newListAppVersionsResponse pHttpStatus_ =
+  ListAppVersionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      appVersions = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppVersionsResponse_nextToken :: Lens.Lens' ListAppVersionsResponse (Prelude.Maybe Prelude.Text)
+listAppVersionsResponse_nextToken = Lens.lens (\ListAppVersionsResponse' {nextToken} -> nextToken) (\s@ListAppVersionsResponse' {} a -> s {nextToken = a} :: ListAppVersionsResponse)
+
+-- | The response's http status code.
+listAppVersionsResponse_httpStatus :: Lens.Lens' ListAppVersionsResponse Prelude.Int
+listAppVersionsResponse_httpStatus = Lens.lens (\ListAppVersionsResponse' {httpStatus} -> httpStatus) (\s@ListAppVersionsResponse' {} a -> s {httpStatus = a} :: ListAppVersionsResponse)
+
+-- | The version of the application.
+listAppVersionsResponse_appVersions :: Lens.Lens' ListAppVersionsResponse [AppVersionSummary]
+listAppVersionsResponse_appVersions = Lens.lens (\ListAppVersionsResponse' {appVersions} -> appVersions) (\s@ListAppVersionsResponse' {} a -> s {appVersions = a} :: ListAppVersionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListAppVersionsResponse where
+  rnf ListAppVersionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appVersions
diff --git a/gen/Amazonka/ResilienceHub/ListApps.hs b/gen/Amazonka/ResilienceHub/ListApps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListApps.hs
@@ -0,0 +1,231 @@
+{-# 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.ResilienceHub.ListApps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists your Resilience Hub applications.
+module Amazonka.ResilienceHub.ListApps
+  ( -- * Creating a Request
+    ListApps (..),
+    newListApps,
+
+    -- * Request Lenses
+    listApps_appArn,
+    listApps_maxResults,
+    listApps_name,
+    listApps_nextToken,
+
+    -- * Destructuring the Response
+    ListAppsResponse (..),
+    newListAppsResponse,
+
+    -- * Response Lenses
+    listAppsResponse_nextToken,
+    listAppsResponse_httpStatus,
+    listAppsResponse_appSummaries,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListApps' smart constructor.
+data ListApps = ListApps'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name for the one of the listed applications.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApps' with all optional fields 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:
+--
+-- 'appArn', 'listApps_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'maxResults', 'listApps_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'name', 'listApps_name' - The name for the one of the listed applications.
+--
+-- 'nextToken', 'listApps_nextToken' - Null, or the token from a previous call to get the next set of results.
+newListApps ::
+  ListApps
+newListApps =
+  ListApps'
+    { appArn = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listApps_appArn :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Text)
+listApps_appArn = Lens.lens (\ListApps' {appArn} -> appArn) (\s@ListApps' {} a -> s {appArn = a} :: ListApps)
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listApps_maxResults :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Natural)
+listApps_maxResults = Lens.lens (\ListApps' {maxResults} -> maxResults) (\s@ListApps' {} a -> s {maxResults = a} :: ListApps)
+
+-- | The name for the one of the listed applications.
+listApps_name :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Text)
+listApps_name = Lens.lens (\ListApps' {name} -> name) (\s@ListApps' {} a -> s {name = a} :: ListApps)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listApps_nextToken :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Text)
+listApps_nextToken = Lens.lens (\ListApps' {nextToken} -> nextToken) (\s@ListApps' {} a -> s {nextToken = a} :: ListApps)
+
+instance Core.AWSRequest ListApps where
+  type AWSResponse ListApps = ListAppsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "appSummaries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListApps where
+  hashWithSalt _salt ListApps' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApps where
+  rnf ListApps' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListApps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListApps where
+  toPath = Prelude.const "/list-apps"
+
+instance Data.ToQuery ListApps where
+  toQuery ListApps' {..} =
+    Prelude.mconcat
+      [ "appArn" Data.=: appArn,
+        "maxResults" Data.=: maxResults,
+        "name" Data.=: name,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAppsResponse' smart constructor.
+data ListAppsResponse = ListAppsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Summaries for the Resilience Hub application.
+    appSummaries :: [AppSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppsResponse' with all optional fields 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', 'listAppsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listAppsResponse_httpStatus' - The response's http status code.
+--
+-- 'appSummaries', 'listAppsResponse_appSummaries' - Summaries for the Resilience Hub application.
+newListAppsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppsResponse
+newListAppsResponse pHttpStatus_ =
+  ListAppsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      appSummaries = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listAppsResponse_nextToken :: Lens.Lens' ListAppsResponse (Prelude.Maybe Prelude.Text)
+listAppsResponse_nextToken = Lens.lens (\ListAppsResponse' {nextToken} -> nextToken) (\s@ListAppsResponse' {} a -> s {nextToken = a} :: ListAppsResponse)
+
+-- | The response's http status code.
+listAppsResponse_httpStatus :: Lens.Lens' ListAppsResponse Prelude.Int
+listAppsResponse_httpStatus = Lens.lens (\ListAppsResponse' {httpStatus} -> httpStatus) (\s@ListAppsResponse' {} a -> s {httpStatus = a} :: ListAppsResponse)
+
+-- | Summaries for the Resilience Hub application.
+listAppsResponse_appSummaries :: Lens.Lens' ListAppsResponse [AppSummary]
+listAppsResponse_appSummaries = Lens.lens (\ListAppsResponse' {appSummaries} -> appSummaries) (\s@ListAppsResponse' {} a -> s {appSummaries = a} :: ListAppsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListAppsResponse where
+  rnf ListAppsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appSummaries
diff --git a/gen/Amazonka/ResilienceHub/ListRecommendationTemplates.hs b/gen/Amazonka/ResilienceHub/ListRecommendationTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListRecommendationTemplates.hs
@@ -0,0 +1,293 @@
+{-# 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.ResilienceHub.ListRecommendationTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the recommendation templates for the Resilience Hub applications.
+module Amazonka.ResilienceHub.ListRecommendationTemplates
+  ( -- * Creating a Request
+    ListRecommendationTemplates (..),
+    newListRecommendationTemplates,
+
+    -- * Request Lenses
+    listRecommendationTemplates_maxResults,
+    listRecommendationTemplates_name,
+    listRecommendationTemplates_nextToken,
+    listRecommendationTemplates_recommendationTemplateArn,
+    listRecommendationTemplates_reverseOrder,
+    listRecommendationTemplates_status,
+    listRecommendationTemplates_assessmentArn,
+
+    -- * Destructuring the Response
+    ListRecommendationTemplatesResponse (..),
+    newListRecommendationTemplatesResponse,
+
+    -- * Response Lenses
+    listRecommendationTemplatesResponse_nextToken,
+    listRecommendationTemplatesResponse_recommendationTemplates,
+    listRecommendationTemplatesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRecommendationTemplates' smart constructor.
+data ListRecommendationTemplates = ListRecommendationTemplates'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name for one of the listed recommendation templates.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for a recommendation template.
+    recommendationTemplateArn :: Prelude.Maybe Prelude.Text,
+    -- | The default is to sort by ascending __startTime__. To sort by descending
+    -- __startTime__, set reverseOrder to @true@.
+    reverseOrder :: Prelude.Maybe Prelude.Bool,
+    -- | The status of the action.
+    status :: Prelude.Maybe (Prelude.NonEmpty RecommendationTemplateStatus),
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendationTemplates' with all optional fields 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', 'listRecommendationTemplates_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'name', 'listRecommendationTemplates_name' - The name for one of the listed recommendation templates.
+--
+-- 'nextToken', 'listRecommendationTemplates_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'recommendationTemplateArn', 'listRecommendationTemplates_recommendationTemplateArn' - The Amazon Resource Name (ARN) for a recommendation template.
+--
+-- 'reverseOrder', 'listRecommendationTemplates_reverseOrder' - The default is to sort by ascending __startTime__. To sort by descending
+-- __startTime__, set reverseOrder to @true@.
+--
+-- 'status', 'listRecommendationTemplates_status' - The status of the action.
+--
+-- 'assessmentArn', 'listRecommendationTemplates_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListRecommendationTemplates ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  ListRecommendationTemplates
+newListRecommendationTemplates pAssessmentArn_ =
+  ListRecommendationTemplates'
+    { maxResults =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      recommendationTemplateArn = Prelude.Nothing,
+      reverseOrder = Prelude.Nothing,
+      status = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listRecommendationTemplates_maxResults :: Lens.Lens' ListRecommendationTemplates (Prelude.Maybe Prelude.Natural)
+listRecommendationTemplates_maxResults = Lens.lens (\ListRecommendationTemplates' {maxResults} -> maxResults) (\s@ListRecommendationTemplates' {} a -> s {maxResults = a} :: ListRecommendationTemplates)
+
+-- | The name for one of the listed recommendation templates.
+listRecommendationTemplates_name :: Lens.Lens' ListRecommendationTemplates (Prelude.Maybe Prelude.Text)
+listRecommendationTemplates_name = Lens.lens (\ListRecommendationTemplates' {name} -> name) (\s@ListRecommendationTemplates' {} a -> s {name = a} :: ListRecommendationTemplates)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listRecommendationTemplates_nextToken :: Lens.Lens' ListRecommendationTemplates (Prelude.Maybe Prelude.Text)
+listRecommendationTemplates_nextToken = Lens.lens (\ListRecommendationTemplates' {nextToken} -> nextToken) (\s@ListRecommendationTemplates' {} a -> s {nextToken = a} :: ListRecommendationTemplates)
+
+-- | The Amazon Resource Name (ARN) for a recommendation template.
+listRecommendationTemplates_recommendationTemplateArn :: Lens.Lens' ListRecommendationTemplates (Prelude.Maybe Prelude.Text)
+listRecommendationTemplates_recommendationTemplateArn = Lens.lens (\ListRecommendationTemplates' {recommendationTemplateArn} -> recommendationTemplateArn) (\s@ListRecommendationTemplates' {} a -> s {recommendationTemplateArn = a} :: ListRecommendationTemplates)
+
+-- | The default is to sort by ascending __startTime__. To sort by descending
+-- __startTime__, set reverseOrder to @true@.
+listRecommendationTemplates_reverseOrder :: Lens.Lens' ListRecommendationTemplates (Prelude.Maybe Prelude.Bool)
+listRecommendationTemplates_reverseOrder = Lens.lens (\ListRecommendationTemplates' {reverseOrder} -> reverseOrder) (\s@ListRecommendationTemplates' {} a -> s {reverseOrder = a} :: ListRecommendationTemplates)
+
+-- | The status of the action.
+listRecommendationTemplates_status :: Lens.Lens' ListRecommendationTemplates (Prelude.Maybe (Prelude.NonEmpty RecommendationTemplateStatus))
+listRecommendationTemplates_status = Lens.lens (\ListRecommendationTemplates' {status} -> status) (\s@ListRecommendationTemplates' {} a -> s {status = a} :: ListRecommendationTemplates) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listRecommendationTemplates_assessmentArn :: Lens.Lens' ListRecommendationTemplates Prelude.Text
+listRecommendationTemplates_assessmentArn = Lens.lens (\ListRecommendationTemplates' {assessmentArn} -> assessmentArn) (\s@ListRecommendationTemplates' {} a -> s {assessmentArn = a} :: ListRecommendationTemplates)
+
+instance Core.AWSRequest ListRecommendationTemplates where
+  type
+    AWSResponse ListRecommendationTemplates =
+      ListRecommendationTemplatesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecommendationTemplatesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "recommendationTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRecommendationTemplates where
+  hashWithSalt _salt ListRecommendationTemplates' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` recommendationTemplateArn
+      `Prelude.hashWithSalt` reverseOrder
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData ListRecommendationTemplates where
+  rnf ListRecommendationTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recommendationTemplateArn
+      `Prelude.seq` Prelude.rnf reverseOrder
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance Data.ToHeaders ListRecommendationTemplates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRecommendationTemplates where
+  toPath =
+    Prelude.const "/list-recommendation-templates"
+
+instance Data.ToQuery ListRecommendationTemplates where
+  toQuery ListRecommendationTemplates' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "name" Data.=: name,
+        "nextToken" Data.=: nextToken,
+        "recommendationTemplateArn"
+          Data.=: recommendationTemplateArn,
+        "reverseOrder" Data.=: reverseOrder,
+        "status"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> status),
+        "assessmentArn" Data.=: assessmentArn
+      ]
+
+-- | /See:/ 'newListRecommendationTemplatesResponse' smart constructor.
+data ListRecommendationTemplatesResponse = ListRecommendationTemplatesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The recommendation templates for the Resilience Hub applications.
+    recommendationTemplates :: Prelude.Maybe [RecommendationTemplate],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendationTemplatesResponse' with all optional fields 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', 'listRecommendationTemplatesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'recommendationTemplates', 'listRecommendationTemplatesResponse_recommendationTemplates' - The recommendation templates for the Resilience Hub applications.
+--
+-- 'httpStatus', 'listRecommendationTemplatesResponse_httpStatus' - The response's http status code.
+newListRecommendationTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecommendationTemplatesResponse
+newListRecommendationTemplatesResponse pHttpStatus_ =
+  ListRecommendationTemplatesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      recommendationTemplates =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listRecommendationTemplatesResponse_nextToken :: Lens.Lens' ListRecommendationTemplatesResponse (Prelude.Maybe Prelude.Text)
+listRecommendationTemplatesResponse_nextToken = Lens.lens (\ListRecommendationTemplatesResponse' {nextToken} -> nextToken) (\s@ListRecommendationTemplatesResponse' {} a -> s {nextToken = a} :: ListRecommendationTemplatesResponse)
+
+-- | The recommendation templates for the Resilience Hub applications.
+listRecommendationTemplatesResponse_recommendationTemplates :: Lens.Lens' ListRecommendationTemplatesResponse (Prelude.Maybe [RecommendationTemplate])
+listRecommendationTemplatesResponse_recommendationTemplates = Lens.lens (\ListRecommendationTemplatesResponse' {recommendationTemplates} -> recommendationTemplates) (\s@ListRecommendationTemplatesResponse' {} a -> s {recommendationTemplates = a} :: ListRecommendationTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRecommendationTemplatesResponse_httpStatus :: Lens.Lens' ListRecommendationTemplatesResponse Prelude.Int
+listRecommendationTemplatesResponse_httpStatus = Lens.lens (\ListRecommendationTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListRecommendationTemplatesResponse' {} a -> s {httpStatus = a} :: ListRecommendationTemplatesResponse)
+
+instance
+  Prelude.NFData
+    ListRecommendationTemplatesResponse
+  where
+  rnf ListRecommendationTemplatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recommendationTemplates
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/ListResiliencyPolicies.hs b/gen/Amazonka/ResilienceHub/ListResiliencyPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListResiliencyPolicies.hs
@@ -0,0 +1,216 @@
+{-# 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.ResilienceHub.ListResiliencyPolicies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the resiliency policies for the Resilience Hub applications.
+module Amazonka.ResilienceHub.ListResiliencyPolicies
+  ( -- * Creating a Request
+    ListResiliencyPolicies (..),
+    newListResiliencyPolicies,
+
+    -- * Request Lenses
+    listResiliencyPolicies_maxResults,
+    listResiliencyPolicies_nextToken,
+    listResiliencyPolicies_policyName,
+
+    -- * Destructuring the Response
+    ListResiliencyPoliciesResponse (..),
+    newListResiliencyPoliciesResponse,
+
+    -- * Response Lenses
+    listResiliencyPoliciesResponse_nextToken,
+    listResiliencyPoliciesResponse_httpStatus,
+    listResiliencyPoliciesResponse_resiliencyPolicies,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListResiliencyPolicies' smart constructor.
+data ListResiliencyPolicies = ListResiliencyPolicies'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy
+    policyName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListResiliencyPolicies' with all optional fields 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', 'listResiliencyPolicies_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listResiliencyPolicies_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'policyName', 'listResiliencyPolicies_policyName' - The name of the policy
+newListResiliencyPolicies ::
+  ListResiliencyPolicies
+newListResiliencyPolicies =
+  ListResiliencyPolicies'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      policyName = Prelude.Nothing
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listResiliencyPolicies_maxResults :: Lens.Lens' ListResiliencyPolicies (Prelude.Maybe Prelude.Natural)
+listResiliencyPolicies_maxResults = Lens.lens (\ListResiliencyPolicies' {maxResults} -> maxResults) (\s@ListResiliencyPolicies' {} a -> s {maxResults = a} :: ListResiliencyPolicies)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listResiliencyPolicies_nextToken :: Lens.Lens' ListResiliencyPolicies (Prelude.Maybe Prelude.Text)
+listResiliencyPolicies_nextToken = Lens.lens (\ListResiliencyPolicies' {nextToken} -> nextToken) (\s@ListResiliencyPolicies' {} a -> s {nextToken = a} :: ListResiliencyPolicies)
+
+-- | The name of the policy
+listResiliencyPolicies_policyName :: Lens.Lens' ListResiliencyPolicies (Prelude.Maybe Prelude.Text)
+listResiliencyPolicies_policyName = Lens.lens (\ListResiliencyPolicies' {policyName} -> policyName) (\s@ListResiliencyPolicies' {} a -> s {policyName = a} :: ListResiliencyPolicies)
+
+instance Core.AWSRequest ListResiliencyPolicies where
+  type
+    AWSResponse ListResiliencyPolicies =
+      ListResiliencyPoliciesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListResiliencyPoliciesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "resiliencyPolicies"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListResiliencyPolicies where
+  hashWithSalt _salt ListResiliencyPolicies' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` policyName
+
+instance Prelude.NFData ListResiliencyPolicies where
+  rnf ListResiliencyPolicies' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf policyName
+
+instance Data.ToHeaders ListResiliencyPolicies where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListResiliencyPolicies where
+  toPath = Prelude.const "/list-resiliency-policies"
+
+instance Data.ToQuery ListResiliencyPolicies where
+  toQuery ListResiliencyPolicies' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "policyName" Data.=: policyName
+      ]
+
+-- | /See:/ 'newListResiliencyPoliciesResponse' smart constructor.
+data ListResiliencyPoliciesResponse = ListResiliencyPoliciesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The resiliency policies for the Resilience Hub applications.
+    resiliencyPolicies :: [ResiliencyPolicy]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListResiliencyPoliciesResponse' with all optional fields 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', 'listResiliencyPoliciesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listResiliencyPoliciesResponse_httpStatus' - The response's http status code.
+--
+-- 'resiliencyPolicies', 'listResiliencyPoliciesResponse_resiliencyPolicies' - The resiliency policies for the Resilience Hub applications.
+newListResiliencyPoliciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListResiliencyPoliciesResponse
+newListResiliencyPoliciesResponse pHttpStatus_ =
+  ListResiliencyPoliciesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      resiliencyPolicies = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listResiliencyPoliciesResponse_nextToken :: Lens.Lens' ListResiliencyPoliciesResponse (Prelude.Maybe Prelude.Text)
+listResiliencyPoliciesResponse_nextToken = Lens.lens (\ListResiliencyPoliciesResponse' {nextToken} -> nextToken) (\s@ListResiliencyPoliciesResponse' {} a -> s {nextToken = a} :: ListResiliencyPoliciesResponse)
+
+-- | The response's http status code.
+listResiliencyPoliciesResponse_httpStatus :: Lens.Lens' ListResiliencyPoliciesResponse Prelude.Int
+listResiliencyPoliciesResponse_httpStatus = Lens.lens (\ListResiliencyPoliciesResponse' {httpStatus} -> httpStatus) (\s@ListResiliencyPoliciesResponse' {} a -> s {httpStatus = a} :: ListResiliencyPoliciesResponse)
+
+-- | The resiliency policies for the Resilience Hub applications.
+listResiliencyPoliciesResponse_resiliencyPolicies :: Lens.Lens' ListResiliencyPoliciesResponse [ResiliencyPolicy]
+listResiliencyPoliciesResponse_resiliencyPolicies = Lens.lens (\ListResiliencyPoliciesResponse' {resiliencyPolicies} -> resiliencyPolicies) (\s@ListResiliencyPoliciesResponse' {} a -> s {resiliencyPolicies = a} :: ListResiliencyPoliciesResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListResiliencyPoliciesResponse
+  where
+  rnf ListResiliencyPoliciesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf resiliencyPolicies
diff --git a/gen/Amazonka/ResilienceHub/ListSopRecommendations.hs b/gen/Amazonka/ResilienceHub/ListSopRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListSopRecommendations.hs
@@ -0,0 +1,243 @@
+{-# 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.ResilienceHub.ListSopRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the standard operating procedure (SOP) recommendations for the
+-- Resilience Hub applications.
+module Amazonka.ResilienceHub.ListSopRecommendations
+  ( -- * Creating a Request
+    ListSopRecommendations (..),
+    newListSopRecommendations,
+
+    -- * Request Lenses
+    listSopRecommendations_maxResults,
+    listSopRecommendations_nextToken,
+    listSopRecommendations_assessmentArn,
+
+    -- * Destructuring the Response
+    ListSopRecommendationsResponse (..),
+    newListSopRecommendationsResponse,
+
+    -- * Response Lenses
+    listSopRecommendationsResponse_nextToken,
+    listSopRecommendationsResponse_httpStatus,
+    listSopRecommendationsResponse_sopRecommendations,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSopRecommendations' smart constructor.
+data ListSopRecommendations = ListSopRecommendations'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSopRecommendations' with all optional fields 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', 'listSopRecommendations_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listSopRecommendations_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'assessmentArn', 'listSopRecommendations_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListSopRecommendations ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  ListSopRecommendations
+newListSopRecommendations pAssessmentArn_ =
+  ListSopRecommendations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listSopRecommendations_maxResults :: Lens.Lens' ListSopRecommendations (Prelude.Maybe Prelude.Natural)
+listSopRecommendations_maxResults = Lens.lens (\ListSopRecommendations' {maxResults} -> maxResults) (\s@ListSopRecommendations' {} a -> s {maxResults = a} :: ListSopRecommendations)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listSopRecommendations_nextToken :: Lens.Lens' ListSopRecommendations (Prelude.Maybe Prelude.Text)
+listSopRecommendations_nextToken = Lens.lens (\ListSopRecommendations' {nextToken} -> nextToken) (\s@ListSopRecommendations' {} a -> s {nextToken = a} :: ListSopRecommendations)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listSopRecommendations_assessmentArn :: Lens.Lens' ListSopRecommendations Prelude.Text
+listSopRecommendations_assessmentArn = Lens.lens (\ListSopRecommendations' {assessmentArn} -> assessmentArn) (\s@ListSopRecommendations' {} a -> s {assessmentArn = a} :: ListSopRecommendations)
+
+instance Core.AWSRequest ListSopRecommendations where
+  type
+    AWSResponse ListSopRecommendations =
+      ListSopRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSopRecommendationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "sopRecommendations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListSopRecommendations where
+  hashWithSalt _salt ListSopRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData ListSopRecommendations where
+  rnf ListSopRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance Data.ToHeaders ListSopRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSopRecommendations where
+  toJSON ListSopRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath ListSopRecommendations where
+  toPath = Prelude.const "/list-sop-recommendations"
+
+instance Data.ToQuery ListSopRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSopRecommendationsResponse' smart constructor.
+data ListSopRecommendationsResponse = ListSopRecommendationsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The standard operating procedure (SOP) recommendations for the
+    -- Resilience Hub applications.
+    sopRecommendations :: [SopRecommendation]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSopRecommendationsResponse' with all optional fields 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', 'listSopRecommendationsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listSopRecommendationsResponse_httpStatus' - The response's http status code.
+--
+-- 'sopRecommendations', 'listSopRecommendationsResponse_sopRecommendations' - The standard operating procedure (SOP) recommendations for the
+-- Resilience Hub applications.
+newListSopRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSopRecommendationsResponse
+newListSopRecommendationsResponse pHttpStatus_ =
+  ListSopRecommendationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      sopRecommendations = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listSopRecommendationsResponse_nextToken :: Lens.Lens' ListSopRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listSopRecommendationsResponse_nextToken = Lens.lens (\ListSopRecommendationsResponse' {nextToken} -> nextToken) (\s@ListSopRecommendationsResponse' {} a -> s {nextToken = a} :: ListSopRecommendationsResponse)
+
+-- | The response's http status code.
+listSopRecommendationsResponse_httpStatus :: Lens.Lens' ListSopRecommendationsResponse Prelude.Int
+listSopRecommendationsResponse_httpStatus = Lens.lens (\ListSopRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListSopRecommendationsResponse' {} a -> s {httpStatus = a} :: ListSopRecommendationsResponse)
+
+-- | The standard operating procedure (SOP) recommendations for the
+-- Resilience Hub applications.
+listSopRecommendationsResponse_sopRecommendations :: Lens.Lens' ListSopRecommendationsResponse [SopRecommendation]
+listSopRecommendationsResponse_sopRecommendations = Lens.lens (\ListSopRecommendationsResponse' {sopRecommendations} -> sopRecommendations) (\s@ListSopRecommendationsResponse' {} a -> s {sopRecommendations = a} :: ListSopRecommendationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListSopRecommendationsResponse
+  where
+  rnf ListSopRecommendationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf sopRecommendations
diff --git a/gen/Amazonka/ResilienceHub/ListSuggestedResiliencyPolicies.hs b/gen/Amazonka/ResilienceHub/ListSuggestedResiliencyPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListSuggestedResiliencyPolicies.hs
@@ -0,0 +1,221 @@
+{-# 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.ResilienceHub.ListSuggestedResiliencyPolicies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the suggested resiliency policies for the Resilience Hub
+-- applications.
+module Amazonka.ResilienceHub.ListSuggestedResiliencyPolicies
+  ( -- * Creating a Request
+    ListSuggestedResiliencyPolicies (..),
+    newListSuggestedResiliencyPolicies,
+
+    -- * Request Lenses
+    listSuggestedResiliencyPolicies_maxResults,
+    listSuggestedResiliencyPolicies_nextToken,
+
+    -- * Destructuring the Response
+    ListSuggestedResiliencyPoliciesResponse (..),
+    newListSuggestedResiliencyPoliciesResponse,
+
+    -- * Response Lenses
+    listSuggestedResiliencyPoliciesResponse_nextToken,
+    listSuggestedResiliencyPoliciesResponse_httpStatus,
+    listSuggestedResiliencyPoliciesResponse_resiliencyPolicies,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSuggestedResiliencyPolicies' smart constructor.
+data ListSuggestedResiliencyPolicies = ListSuggestedResiliencyPolicies'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSuggestedResiliencyPolicies' with all optional fields 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', 'listSuggestedResiliencyPolicies_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listSuggestedResiliencyPolicies_nextToken' - Null, or the token from a previous call to get the next set of results.
+newListSuggestedResiliencyPolicies ::
+  ListSuggestedResiliencyPolicies
+newListSuggestedResiliencyPolicies =
+  ListSuggestedResiliencyPolicies'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listSuggestedResiliencyPolicies_maxResults :: Lens.Lens' ListSuggestedResiliencyPolicies (Prelude.Maybe Prelude.Natural)
+listSuggestedResiliencyPolicies_maxResults = Lens.lens (\ListSuggestedResiliencyPolicies' {maxResults} -> maxResults) (\s@ListSuggestedResiliencyPolicies' {} a -> s {maxResults = a} :: ListSuggestedResiliencyPolicies)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listSuggestedResiliencyPolicies_nextToken :: Lens.Lens' ListSuggestedResiliencyPolicies (Prelude.Maybe Prelude.Text)
+listSuggestedResiliencyPolicies_nextToken = Lens.lens (\ListSuggestedResiliencyPolicies' {nextToken} -> nextToken) (\s@ListSuggestedResiliencyPolicies' {} a -> s {nextToken = a} :: ListSuggestedResiliencyPolicies)
+
+instance
+  Core.AWSRequest
+    ListSuggestedResiliencyPolicies
+  where
+  type
+    AWSResponse ListSuggestedResiliencyPolicies =
+      ListSuggestedResiliencyPoliciesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSuggestedResiliencyPoliciesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "resiliencyPolicies"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListSuggestedResiliencyPolicies
+  where
+  hashWithSalt
+    _salt
+    ListSuggestedResiliencyPolicies' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListSuggestedResiliencyPolicies
+  where
+  rnf ListSuggestedResiliencyPolicies' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListSuggestedResiliencyPolicies
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSuggestedResiliencyPolicies where
+  toPath =
+    Prelude.const "/list-suggested-resiliency-policies"
+
+instance Data.ToQuery ListSuggestedResiliencyPolicies where
+  toQuery ListSuggestedResiliencyPolicies' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListSuggestedResiliencyPoliciesResponse' smart constructor.
+data ListSuggestedResiliencyPoliciesResponse = ListSuggestedResiliencyPoliciesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The suggested resiliency policies for the Resilience Hub applications.
+    resiliencyPolicies :: [ResiliencyPolicy]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSuggestedResiliencyPoliciesResponse' with all optional fields 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', 'listSuggestedResiliencyPoliciesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listSuggestedResiliencyPoliciesResponse_httpStatus' - The response's http status code.
+--
+-- 'resiliencyPolicies', 'listSuggestedResiliencyPoliciesResponse_resiliencyPolicies' - The suggested resiliency policies for the Resilience Hub applications.
+newListSuggestedResiliencyPoliciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSuggestedResiliencyPoliciesResponse
+newListSuggestedResiliencyPoliciesResponse
+  pHttpStatus_ =
+    ListSuggestedResiliencyPoliciesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        resiliencyPolicies =
+          Prelude.mempty
+      }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listSuggestedResiliencyPoliciesResponse_nextToken :: Lens.Lens' ListSuggestedResiliencyPoliciesResponse (Prelude.Maybe Prelude.Text)
+listSuggestedResiliencyPoliciesResponse_nextToken = Lens.lens (\ListSuggestedResiliencyPoliciesResponse' {nextToken} -> nextToken) (\s@ListSuggestedResiliencyPoliciesResponse' {} a -> s {nextToken = a} :: ListSuggestedResiliencyPoliciesResponse)
+
+-- | The response's http status code.
+listSuggestedResiliencyPoliciesResponse_httpStatus :: Lens.Lens' ListSuggestedResiliencyPoliciesResponse Prelude.Int
+listSuggestedResiliencyPoliciesResponse_httpStatus = Lens.lens (\ListSuggestedResiliencyPoliciesResponse' {httpStatus} -> httpStatus) (\s@ListSuggestedResiliencyPoliciesResponse' {} a -> s {httpStatus = a} :: ListSuggestedResiliencyPoliciesResponse)
+
+-- | The suggested resiliency policies for the Resilience Hub applications.
+listSuggestedResiliencyPoliciesResponse_resiliencyPolicies :: Lens.Lens' ListSuggestedResiliencyPoliciesResponse [ResiliencyPolicy]
+listSuggestedResiliencyPoliciesResponse_resiliencyPolicies = Lens.lens (\ListSuggestedResiliencyPoliciesResponse' {resiliencyPolicies} -> resiliencyPolicies) (\s@ListSuggestedResiliencyPoliciesResponse' {} a -> s {resiliencyPolicies = a} :: ListSuggestedResiliencyPoliciesResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListSuggestedResiliencyPoliciesResponse
+  where
+  rnf ListSuggestedResiliencyPoliciesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf resiliencyPolicies
diff --git a/gen/Amazonka/ResilienceHub/ListTagsForResource.hs b/gen/Amazonka/ResilienceHub/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListTagsForResource.hs
@@ -0,0 +1,165 @@
+{-# 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.ResilienceHub.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for your resources in your Resilience Hub applications.
+module Amazonka.ResilienceHub.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) for a specific resource in your
+    -- Resilience Hub application.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) for a specific resource in your
+-- Resilience Hub application.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) for a specific resource in your
+-- Resilience Hub application.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/ListTestRecommendations.hs b/gen/Amazonka/ResilienceHub/ListTestRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListTestRecommendations.hs
@@ -0,0 +1,239 @@
+{-# 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.ResilienceHub.ListTestRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the test recommendations for the Resilience Hub application.
+module Amazonka.ResilienceHub.ListTestRecommendations
+  ( -- * Creating a Request
+    ListTestRecommendations (..),
+    newListTestRecommendations,
+
+    -- * Request Lenses
+    listTestRecommendations_maxResults,
+    listTestRecommendations_nextToken,
+    listTestRecommendations_assessmentArn,
+
+    -- * Destructuring the Response
+    ListTestRecommendationsResponse (..),
+    newListTestRecommendationsResponse,
+
+    -- * Response Lenses
+    listTestRecommendationsResponse_nextToken,
+    listTestRecommendationsResponse_httpStatus,
+    listTestRecommendationsResponse_testRecommendations,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTestRecommendations' smart constructor.
+data ListTestRecommendations = ListTestRecommendations'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTestRecommendations' with all optional fields 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', 'listTestRecommendations_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listTestRecommendations_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'assessmentArn', 'listTestRecommendations_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newListTestRecommendations ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  ListTestRecommendations
+newListTestRecommendations pAssessmentArn_ =
+  ListTestRecommendations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assessmentArn = pAssessmentArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listTestRecommendations_maxResults :: Lens.Lens' ListTestRecommendations (Prelude.Maybe Prelude.Natural)
+listTestRecommendations_maxResults = Lens.lens (\ListTestRecommendations' {maxResults} -> maxResults) (\s@ListTestRecommendations' {} a -> s {maxResults = a} :: ListTestRecommendations)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listTestRecommendations_nextToken :: Lens.Lens' ListTestRecommendations (Prelude.Maybe Prelude.Text)
+listTestRecommendations_nextToken = Lens.lens (\ListTestRecommendations' {nextToken} -> nextToken) (\s@ListTestRecommendations' {} a -> s {nextToken = a} :: ListTestRecommendations)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listTestRecommendations_assessmentArn :: Lens.Lens' ListTestRecommendations Prelude.Text
+listTestRecommendations_assessmentArn = Lens.lens (\ListTestRecommendations' {assessmentArn} -> assessmentArn) (\s@ListTestRecommendations' {} a -> s {assessmentArn = a} :: ListTestRecommendations)
+
+instance Core.AWSRequest ListTestRecommendations where
+  type
+    AWSResponse ListTestRecommendations =
+      ListTestRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTestRecommendationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "testRecommendations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListTestRecommendations where
+  hashWithSalt _salt ListTestRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assessmentArn
+
+instance Prelude.NFData ListTestRecommendations where
+  rnf ListTestRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assessmentArn
+
+instance Data.ToHeaders ListTestRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTestRecommendations where
+  toJSON ListTestRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("assessmentArn" Data..= assessmentArn)
+          ]
+      )
+
+instance Data.ToPath ListTestRecommendations where
+  toPath = Prelude.const "/list-test-recommendations"
+
+instance Data.ToQuery ListTestRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTestRecommendationsResponse' smart constructor.
+data ListTestRecommendationsResponse = ListTestRecommendationsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The test recommendations for the Resilience Hub application.
+    testRecommendations :: [TestRecommendation]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTestRecommendationsResponse' with all optional fields 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', 'listTestRecommendationsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listTestRecommendationsResponse_httpStatus' - The response's http status code.
+--
+-- 'testRecommendations', 'listTestRecommendationsResponse_testRecommendations' - The test recommendations for the Resilience Hub application.
+newListTestRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTestRecommendationsResponse
+newListTestRecommendationsResponse pHttpStatus_ =
+  ListTestRecommendationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      testRecommendations = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listTestRecommendationsResponse_nextToken :: Lens.Lens' ListTestRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listTestRecommendationsResponse_nextToken = Lens.lens (\ListTestRecommendationsResponse' {nextToken} -> nextToken) (\s@ListTestRecommendationsResponse' {} a -> s {nextToken = a} :: ListTestRecommendationsResponse)
+
+-- | The response's http status code.
+listTestRecommendationsResponse_httpStatus :: Lens.Lens' ListTestRecommendationsResponse Prelude.Int
+listTestRecommendationsResponse_httpStatus = Lens.lens (\ListTestRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListTestRecommendationsResponse' {} a -> s {httpStatus = a} :: ListTestRecommendationsResponse)
+
+-- | The test recommendations for the Resilience Hub application.
+listTestRecommendationsResponse_testRecommendations :: Lens.Lens' ListTestRecommendationsResponse [TestRecommendation]
+listTestRecommendationsResponse_testRecommendations = Lens.lens (\ListTestRecommendationsResponse' {testRecommendations} -> testRecommendations) (\s@ListTestRecommendationsResponse' {} a -> s {testRecommendations = a} :: ListTestRecommendationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListTestRecommendationsResponse
+  where
+  rnf ListTestRecommendationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf testRecommendations
diff --git a/gen/Amazonka/ResilienceHub/ListUnsupportedAppVersionResources.hs b/gen/Amazonka/ResilienceHub/ListUnsupportedAppVersionResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ListUnsupportedAppVersionResources.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.ResilienceHub.ListUnsupportedAppVersionResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the resources that are not currently supported in AWS Resilience
+-- Hub. An unsupported resource is a resource that exists in the object
+-- that was used to create an app, but is not supported by Resilience Hub.
+module Amazonka.ResilienceHub.ListUnsupportedAppVersionResources
+  ( -- * Creating a Request
+    ListUnsupportedAppVersionResources (..),
+    newListUnsupportedAppVersionResources,
+
+    -- * Request Lenses
+    listUnsupportedAppVersionResources_maxResults,
+    listUnsupportedAppVersionResources_nextToken,
+    listUnsupportedAppVersionResources_resolutionId,
+    listUnsupportedAppVersionResources_appArn,
+    listUnsupportedAppVersionResources_appVersion,
+
+    -- * Destructuring the Response
+    ListUnsupportedAppVersionResourcesResponse (..),
+    newListUnsupportedAppVersionResourcesResponse,
+
+    -- * Response Lenses
+    listUnsupportedAppVersionResourcesResponse_nextToken,
+    listUnsupportedAppVersionResourcesResponse_httpStatus,
+    listUnsupportedAppVersionResourcesResponse_resolutionId,
+    listUnsupportedAppVersionResourcesResponse_unsupportedResources,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListUnsupportedAppVersionResources' smart constructor.
+data ListUnsupportedAppVersionResources = ListUnsupportedAppVersionResources'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Null, or the token from a previous call to get the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListUnsupportedAppVersionResources' with all optional fields 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', 'listUnsupportedAppVersionResources_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listUnsupportedAppVersionResources_nextToken' - Null, or the token from a previous call to get the next set of results.
+--
+-- 'resolutionId', 'listUnsupportedAppVersionResources_resolutionId' - The identifier for a specific resolution.
+--
+-- 'appArn', 'listUnsupportedAppVersionResources_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'listUnsupportedAppVersionResources_appVersion' - The version of the application.
+newListUnsupportedAppVersionResources ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  ListUnsupportedAppVersionResources
+newListUnsupportedAppVersionResources
+  pAppArn_
+  pAppVersion_ =
+    ListUnsupportedAppVersionResources'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        resolutionId = Prelude.Nothing,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_
+      }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listUnsupportedAppVersionResources_maxResults :: Lens.Lens' ListUnsupportedAppVersionResources (Prelude.Maybe Prelude.Natural)
+listUnsupportedAppVersionResources_maxResults = Lens.lens (\ListUnsupportedAppVersionResources' {maxResults} -> maxResults) (\s@ListUnsupportedAppVersionResources' {} a -> s {maxResults = a} :: ListUnsupportedAppVersionResources)
+
+-- | Null, or the token from a previous call to get the next set of results.
+listUnsupportedAppVersionResources_nextToken :: Lens.Lens' ListUnsupportedAppVersionResources (Prelude.Maybe Prelude.Text)
+listUnsupportedAppVersionResources_nextToken = Lens.lens (\ListUnsupportedAppVersionResources' {nextToken} -> nextToken) (\s@ListUnsupportedAppVersionResources' {} a -> s {nextToken = a} :: ListUnsupportedAppVersionResources)
+
+-- | The identifier for a specific resolution.
+listUnsupportedAppVersionResources_resolutionId :: Lens.Lens' ListUnsupportedAppVersionResources (Prelude.Maybe Prelude.Text)
+listUnsupportedAppVersionResources_resolutionId = Lens.lens (\ListUnsupportedAppVersionResources' {resolutionId} -> resolutionId) (\s@ListUnsupportedAppVersionResources' {} a -> s {resolutionId = a} :: ListUnsupportedAppVersionResources)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+listUnsupportedAppVersionResources_appArn :: Lens.Lens' ListUnsupportedAppVersionResources Prelude.Text
+listUnsupportedAppVersionResources_appArn = Lens.lens (\ListUnsupportedAppVersionResources' {appArn} -> appArn) (\s@ListUnsupportedAppVersionResources' {} a -> s {appArn = a} :: ListUnsupportedAppVersionResources)
+
+-- | The version of the application.
+listUnsupportedAppVersionResources_appVersion :: Lens.Lens' ListUnsupportedAppVersionResources Prelude.Text
+listUnsupportedAppVersionResources_appVersion = Lens.lens (\ListUnsupportedAppVersionResources' {appVersion} -> appVersion) (\s@ListUnsupportedAppVersionResources' {} a -> s {appVersion = a} :: ListUnsupportedAppVersionResources)
+
+instance
+  Core.AWSRequest
+    ListUnsupportedAppVersionResources
+  where
+  type
+    AWSResponse ListUnsupportedAppVersionResources =
+      ListUnsupportedAppVersionResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListUnsupportedAppVersionResourcesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "resolutionId")
+            Prelude.<*> ( x
+                            Data..?> "unsupportedResources"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListUnsupportedAppVersionResources
+  where
+  hashWithSalt
+    _salt
+    ListUnsupportedAppVersionResources' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` resolutionId
+        `Prelude.hashWithSalt` appArn
+        `Prelude.hashWithSalt` appVersion
+
+instance
+  Prelude.NFData
+    ListUnsupportedAppVersionResources
+  where
+  rnf ListUnsupportedAppVersionResources' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resolutionId
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+
+instance
+  Data.ToHeaders
+    ListUnsupportedAppVersionResources
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ListUnsupportedAppVersionResources
+  where
+  toJSON ListUnsupportedAppVersionResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("resolutionId" Data..=) Prelude.<$> resolutionId,
+            Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just ("appVersion" Data..= appVersion)
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListUnsupportedAppVersionResources
+  where
+  toPath =
+    Prelude.const
+      "/list-unsupported-app-version-resources"
+
+instance
+  Data.ToQuery
+    ListUnsupportedAppVersionResources
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListUnsupportedAppVersionResourcesResponse' smart constructor.
+data ListUnsupportedAppVersionResourcesResponse = ListUnsupportedAppVersionResourcesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Text,
+    -- | The unsupported resources for the application.
+    unsupportedResources :: [UnsupportedResource]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListUnsupportedAppVersionResourcesResponse' with all optional fields 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', 'listUnsupportedAppVersionResourcesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listUnsupportedAppVersionResourcesResponse_httpStatus' - The response's http status code.
+--
+-- 'resolutionId', 'listUnsupportedAppVersionResourcesResponse_resolutionId' - The identifier for a specific resolution.
+--
+-- 'unsupportedResources', 'listUnsupportedAppVersionResourcesResponse_unsupportedResources' - The unsupported resources for the application.
+newListUnsupportedAppVersionResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'resolutionId'
+  Prelude.Text ->
+  ListUnsupportedAppVersionResourcesResponse
+newListUnsupportedAppVersionResourcesResponse
+  pHttpStatus_
+  pResolutionId_ =
+    ListUnsupportedAppVersionResourcesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        resolutionId = pResolutionId_,
+        unsupportedResources =
+          Prelude.mempty
+      }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listUnsupportedAppVersionResourcesResponse_nextToken :: Lens.Lens' ListUnsupportedAppVersionResourcesResponse (Prelude.Maybe Prelude.Text)
+listUnsupportedAppVersionResourcesResponse_nextToken = Lens.lens (\ListUnsupportedAppVersionResourcesResponse' {nextToken} -> nextToken) (\s@ListUnsupportedAppVersionResourcesResponse' {} a -> s {nextToken = a} :: ListUnsupportedAppVersionResourcesResponse)
+
+-- | The response's http status code.
+listUnsupportedAppVersionResourcesResponse_httpStatus :: Lens.Lens' ListUnsupportedAppVersionResourcesResponse Prelude.Int
+listUnsupportedAppVersionResourcesResponse_httpStatus = Lens.lens (\ListUnsupportedAppVersionResourcesResponse' {httpStatus} -> httpStatus) (\s@ListUnsupportedAppVersionResourcesResponse' {} a -> s {httpStatus = a} :: ListUnsupportedAppVersionResourcesResponse)
+
+-- | The identifier for a specific resolution.
+listUnsupportedAppVersionResourcesResponse_resolutionId :: Lens.Lens' ListUnsupportedAppVersionResourcesResponse Prelude.Text
+listUnsupportedAppVersionResourcesResponse_resolutionId = Lens.lens (\ListUnsupportedAppVersionResourcesResponse' {resolutionId} -> resolutionId) (\s@ListUnsupportedAppVersionResourcesResponse' {} a -> s {resolutionId = a} :: ListUnsupportedAppVersionResourcesResponse)
+
+-- | The unsupported resources for the application.
+listUnsupportedAppVersionResourcesResponse_unsupportedResources :: Lens.Lens' ListUnsupportedAppVersionResourcesResponse [UnsupportedResource]
+listUnsupportedAppVersionResourcesResponse_unsupportedResources = Lens.lens (\ListUnsupportedAppVersionResourcesResponse' {unsupportedResources} -> unsupportedResources) (\s@ListUnsupportedAppVersionResourcesResponse' {} a -> s {unsupportedResources = a} :: ListUnsupportedAppVersionResourcesResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListUnsupportedAppVersionResourcesResponse
+  where
+  rnf ListUnsupportedAppVersionResourcesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf resolutionId
+      `Prelude.seq` Prelude.rnf unsupportedResources
diff --git a/gen/Amazonka/ResilienceHub/PublishAppVersion.hs b/gen/Amazonka/ResilienceHub/PublishAppVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/PublishAppVersion.hs
@@ -0,0 +1,202 @@
+{-# 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.ResilienceHub.PublishAppVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Publishes a new version of a specific Resilience Hub application.
+module Amazonka.ResilienceHub.PublishAppVersion
+  ( -- * Creating a Request
+    PublishAppVersion (..),
+    newPublishAppVersion,
+
+    -- * Request Lenses
+    publishAppVersion_appArn,
+
+    -- * Destructuring the Response
+    PublishAppVersionResponse (..),
+    newPublishAppVersionResponse,
+
+    -- * Response Lenses
+    publishAppVersionResponse_appVersion,
+    publishAppVersionResponse_httpStatus,
+    publishAppVersionResponse_appArn,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPublishAppVersion' smart constructor.
+data PublishAppVersion = PublishAppVersion'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PublishAppVersion' with all optional fields 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:
+--
+-- 'appArn', 'publishAppVersion_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newPublishAppVersion ::
+  -- | 'appArn'
+  Prelude.Text ->
+  PublishAppVersion
+newPublishAppVersion pAppArn_ =
+  PublishAppVersion' {appArn = pAppArn_}
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+publishAppVersion_appArn :: Lens.Lens' PublishAppVersion Prelude.Text
+publishAppVersion_appArn = Lens.lens (\PublishAppVersion' {appArn} -> appArn) (\s@PublishAppVersion' {} a -> s {appArn = a} :: PublishAppVersion)
+
+instance Core.AWSRequest PublishAppVersion where
+  type
+    AWSResponse PublishAppVersion =
+      PublishAppVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PublishAppVersionResponse'
+            Prelude.<$> (x Data..?> "appVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+      )
+
+instance Prelude.Hashable PublishAppVersion where
+  hashWithSalt _salt PublishAppVersion' {..} =
+    _salt `Prelude.hashWithSalt` appArn
+
+instance Prelude.NFData PublishAppVersion where
+  rnf PublishAppVersion' {..} = Prelude.rnf appArn
+
+instance Data.ToHeaders PublishAppVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PublishAppVersion where
+  toJSON PublishAppVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("appArn" Data..= appArn)]
+      )
+
+instance Data.ToPath PublishAppVersion where
+  toPath = Prelude.const "/publish-app-version"
+
+instance Data.ToQuery PublishAppVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPublishAppVersionResponse' smart constructor.
+data PublishAppVersionResponse = PublishAppVersionResponse'
+  { -- | The version of the application.
+    appVersion :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PublishAppVersionResponse' with all optional fields 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:
+--
+-- 'appVersion', 'publishAppVersionResponse_appVersion' - The version of the application.
+--
+-- 'httpStatus', 'publishAppVersionResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'publishAppVersionResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newPublishAppVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  PublishAppVersionResponse
+newPublishAppVersionResponse pHttpStatus_ pAppArn_ =
+  PublishAppVersionResponse'
+    { appVersion =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      appArn = pAppArn_
+    }
+
+-- | The version of the application.
+publishAppVersionResponse_appVersion :: Lens.Lens' PublishAppVersionResponse (Prelude.Maybe Prelude.Text)
+publishAppVersionResponse_appVersion = Lens.lens (\PublishAppVersionResponse' {appVersion} -> appVersion) (\s@PublishAppVersionResponse' {} a -> s {appVersion = a} :: PublishAppVersionResponse)
+
+-- | The response's http status code.
+publishAppVersionResponse_httpStatus :: Lens.Lens' PublishAppVersionResponse Prelude.Int
+publishAppVersionResponse_httpStatus = Lens.lens (\PublishAppVersionResponse' {httpStatus} -> httpStatus) (\s@PublishAppVersionResponse' {} a -> s {httpStatus = a} :: PublishAppVersionResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+publishAppVersionResponse_appArn :: Lens.Lens' PublishAppVersionResponse Prelude.Text
+publishAppVersionResponse_appArn = Lens.lens (\PublishAppVersionResponse' {appArn} -> appArn) (\s@PublishAppVersionResponse' {} a -> s {appArn = a} :: PublishAppVersionResponse)
+
+instance Prelude.NFData PublishAppVersionResponse where
+  rnf PublishAppVersionResponse' {..} =
+    Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appArn
diff --git a/gen/Amazonka/ResilienceHub/PutDraftAppVersionTemplate.hs b/gen/Amazonka/ResilienceHub/PutDraftAppVersionTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/PutDraftAppVersionTemplate.hs
@@ -0,0 +1,228 @@
+{-# 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.ResilienceHub.PutDraftAppVersionTemplate
+-- 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 or updates the app template for a draft version of a Resilience Hub
+-- app.
+module Amazonka.ResilienceHub.PutDraftAppVersionTemplate
+  ( -- * Creating a Request
+    PutDraftAppVersionTemplate (..),
+    newPutDraftAppVersionTemplate,
+
+    -- * Request Lenses
+    putDraftAppVersionTemplate_appArn,
+    putDraftAppVersionTemplate_appTemplateBody,
+
+    -- * Destructuring the Response
+    PutDraftAppVersionTemplateResponse (..),
+    newPutDraftAppVersionTemplateResponse,
+
+    -- * Response Lenses
+    putDraftAppVersionTemplateResponse_appArn,
+    putDraftAppVersionTemplateResponse_appVersion,
+    putDraftAppVersionTemplateResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutDraftAppVersionTemplate' smart constructor.
+data PutDraftAppVersionTemplate = PutDraftAppVersionTemplate'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | A JSON string that contains the body of the app template.
+    appTemplateBody :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDraftAppVersionTemplate' with all optional fields 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:
+--
+-- 'appArn', 'putDraftAppVersionTemplate_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appTemplateBody', 'putDraftAppVersionTemplate_appTemplateBody' - A JSON string that contains the body of the app template.
+newPutDraftAppVersionTemplate ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appTemplateBody'
+  Prelude.Text ->
+  PutDraftAppVersionTemplate
+newPutDraftAppVersionTemplate
+  pAppArn_
+  pAppTemplateBody_ =
+    PutDraftAppVersionTemplate'
+      { appArn = pAppArn_,
+        appTemplateBody = pAppTemplateBody_
+      }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+putDraftAppVersionTemplate_appArn :: Lens.Lens' PutDraftAppVersionTemplate Prelude.Text
+putDraftAppVersionTemplate_appArn = Lens.lens (\PutDraftAppVersionTemplate' {appArn} -> appArn) (\s@PutDraftAppVersionTemplate' {} a -> s {appArn = a} :: PutDraftAppVersionTemplate)
+
+-- | A JSON string that contains the body of the app template.
+putDraftAppVersionTemplate_appTemplateBody :: Lens.Lens' PutDraftAppVersionTemplate Prelude.Text
+putDraftAppVersionTemplate_appTemplateBody = Lens.lens (\PutDraftAppVersionTemplate' {appTemplateBody} -> appTemplateBody) (\s@PutDraftAppVersionTemplate' {} a -> s {appTemplateBody = a} :: PutDraftAppVersionTemplate)
+
+instance Core.AWSRequest PutDraftAppVersionTemplate where
+  type
+    AWSResponse PutDraftAppVersionTemplate =
+      PutDraftAppVersionTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutDraftAppVersionTemplateResponse'
+            Prelude.<$> (x Data..?> "appArn")
+            Prelude.<*> (x Data..?> "appVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDraftAppVersionTemplate where
+  hashWithSalt _salt PutDraftAppVersionTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appTemplateBody
+
+instance Prelude.NFData PutDraftAppVersionTemplate where
+  rnf PutDraftAppVersionTemplate' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appTemplateBody
+
+instance Data.ToHeaders PutDraftAppVersionTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDraftAppVersionTemplate where
+  toJSON PutDraftAppVersionTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just
+              ("appTemplateBody" Data..= appTemplateBody)
+          ]
+      )
+
+instance Data.ToPath PutDraftAppVersionTemplate where
+  toPath =
+    Prelude.const "/put-draft-app-version-template"
+
+instance Data.ToQuery PutDraftAppVersionTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutDraftAppVersionTemplateResponse' smart constructor.
+data PutDraftAppVersionTemplateResponse = PutDraftAppVersionTemplateResponse'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the application.
+    appVersion :: 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 'PutDraftAppVersionTemplateResponse' with all optional fields 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:
+--
+-- 'appArn', 'putDraftAppVersionTemplateResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'putDraftAppVersionTemplateResponse_appVersion' - The version of the application.
+--
+-- 'httpStatus', 'putDraftAppVersionTemplateResponse_httpStatus' - The response's http status code.
+newPutDraftAppVersionTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDraftAppVersionTemplateResponse
+newPutDraftAppVersionTemplateResponse pHttpStatus_ =
+  PutDraftAppVersionTemplateResponse'
+    { appArn =
+        Prelude.Nothing,
+      appVersion = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+putDraftAppVersionTemplateResponse_appArn :: Lens.Lens' PutDraftAppVersionTemplateResponse (Prelude.Maybe Prelude.Text)
+putDraftAppVersionTemplateResponse_appArn = Lens.lens (\PutDraftAppVersionTemplateResponse' {appArn} -> appArn) (\s@PutDraftAppVersionTemplateResponse' {} a -> s {appArn = a} :: PutDraftAppVersionTemplateResponse)
+
+-- | The version of the application.
+putDraftAppVersionTemplateResponse_appVersion :: Lens.Lens' PutDraftAppVersionTemplateResponse (Prelude.Maybe Prelude.Text)
+putDraftAppVersionTemplateResponse_appVersion = Lens.lens (\PutDraftAppVersionTemplateResponse' {appVersion} -> appVersion) (\s@PutDraftAppVersionTemplateResponse' {} a -> s {appVersion = a} :: PutDraftAppVersionTemplateResponse)
+
+-- | The response's http status code.
+putDraftAppVersionTemplateResponse_httpStatus :: Lens.Lens' PutDraftAppVersionTemplateResponse Prelude.Int
+putDraftAppVersionTemplateResponse_httpStatus = Lens.lens (\PutDraftAppVersionTemplateResponse' {httpStatus} -> httpStatus) (\s@PutDraftAppVersionTemplateResponse' {} a -> s {httpStatus = a} :: PutDraftAppVersionTemplateResponse)
+
+instance
+  Prelude.NFData
+    PutDraftAppVersionTemplateResponse
+  where
+  rnf PutDraftAppVersionTemplateResponse' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/RemoveDraftAppVersionResourceMappings.hs b/gen/Amazonka/ResilienceHub/RemoveDraftAppVersionResourceMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/RemoveDraftAppVersionResourceMappings.hs
@@ -0,0 +1,313 @@
+{-# 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.ResilienceHub.RemoveDraftAppVersionResourceMappings
+-- 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 resource mappings from a draft application version.
+module Amazonka.ResilienceHub.RemoveDraftAppVersionResourceMappings
+  ( -- * Creating a Request
+    RemoveDraftAppVersionResourceMappings (..),
+    newRemoveDraftAppVersionResourceMappings,
+
+    -- * Request Lenses
+    removeDraftAppVersionResourceMappings_appRegistryAppNames,
+    removeDraftAppVersionResourceMappings_logicalStackNames,
+    removeDraftAppVersionResourceMappings_resourceGroupNames,
+    removeDraftAppVersionResourceMappings_resourceNames,
+    removeDraftAppVersionResourceMappings_terraformSourceNames,
+    removeDraftAppVersionResourceMappings_appArn,
+
+    -- * Destructuring the Response
+    RemoveDraftAppVersionResourceMappingsResponse (..),
+    newRemoveDraftAppVersionResourceMappingsResponse,
+
+    -- * Response Lenses
+    removeDraftAppVersionResourceMappingsResponse_appArn,
+    removeDraftAppVersionResourceMappingsResponse_appVersion,
+    removeDraftAppVersionResourceMappingsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveDraftAppVersionResourceMappings' smart constructor.
+data RemoveDraftAppVersionResourceMappings = RemoveDraftAppVersionResourceMappings'
+  { -- | The names of the registered applications to remove from the resource
+    -- mappings.
+    appRegistryAppNames :: Prelude.Maybe [Prelude.Text],
+    -- | The names of the CloudFormation stacks to remove from the resource
+    -- mappings.
+    logicalStackNames :: Prelude.Maybe [Prelude.Text],
+    -- | The names of the resource groups to remove from the resource mappings.
+    resourceGroupNames :: Prelude.Maybe [Prelude.Text],
+    -- | The names of the resources to remove from the resource mappings.
+    resourceNames :: Prelude.Maybe [Prelude.Text],
+    -- | > </p>
+    terraformSourceNames :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveDraftAppVersionResourceMappings' with all optional fields 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:
+--
+-- 'appRegistryAppNames', 'removeDraftAppVersionResourceMappings_appRegistryAppNames' - The names of the registered applications to remove from the resource
+-- mappings.
+--
+-- 'logicalStackNames', 'removeDraftAppVersionResourceMappings_logicalStackNames' - The names of the CloudFormation stacks to remove from the resource
+-- mappings.
+--
+-- 'resourceGroupNames', 'removeDraftAppVersionResourceMappings_resourceGroupNames' - The names of the resource groups to remove from the resource mappings.
+--
+-- 'resourceNames', 'removeDraftAppVersionResourceMappings_resourceNames' - The names of the resources to remove from the resource mappings.
+--
+-- 'terraformSourceNames', 'removeDraftAppVersionResourceMappings_terraformSourceNames' - > </p>
+--
+-- 'appArn', 'removeDraftAppVersionResourceMappings_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newRemoveDraftAppVersionResourceMappings ::
+  -- | 'appArn'
+  Prelude.Text ->
+  RemoveDraftAppVersionResourceMappings
+newRemoveDraftAppVersionResourceMappings pAppArn_ =
+  RemoveDraftAppVersionResourceMappings'
+    { appRegistryAppNames =
+        Prelude.Nothing,
+      logicalStackNames = Prelude.Nothing,
+      resourceGroupNames = Prelude.Nothing,
+      resourceNames = Prelude.Nothing,
+      terraformSourceNames =
+        Prelude.Nothing,
+      appArn = pAppArn_
+    }
+
+-- | The names of the registered applications to remove from the resource
+-- mappings.
+removeDraftAppVersionResourceMappings_appRegistryAppNames :: Lens.Lens' RemoveDraftAppVersionResourceMappings (Prelude.Maybe [Prelude.Text])
+removeDraftAppVersionResourceMappings_appRegistryAppNames = Lens.lens (\RemoveDraftAppVersionResourceMappings' {appRegistryAppNames} -> appRegistryAppNames) (\s@RemoveDraftAppVersionResourceMappings' {} a -> s {appRegistryAppNames = a} :: RemoveDraftAppVersionResourceMappings) Prelude.. Lens.mapping Lens.coerced
+
+-- | The names of the CloudFormation stacks to remove from the resource
+-- mappings.
+removeDraftAppVersionResourceMappings_logicalStackNames :: Lens.Lens' RemoveDraftAppVersionResourceMappings (Prelude.Maybe [Prelude.Text])
+removeDraftAppVersionResourceMappings_logicalStackNames = Lens.lens (\RemoveDraftAppVersionResourceMappings' {logicalStackNames} -> logicalStackNames) (\s@RemoveDraftAppVersionResourceMappings' {} a -> s {logicalStackNames = a} :: RemoveDraftAppVersionResourceMappings) Prelude.. Lens.mapping Lens.coerced
+
+-- | The names of the resource groups to remove from the resource mappings.
+removeDraftAppVersionResourceMappings_resourceGroupNames :: Lens.Lens' RemoveDraftAppVersionResourceMappings (Prelude.Maybe [Prelude.Text])
+removeDraftAppVersionResourceMappings_resourceGroupNames = Lens.lens (\RemoveDraftAppVersionResourceMappings' {resourceGroupNames} -> resourceGroupNames) (\s@RemoveDraftAppVersionResourceMappings' {} a -> s {resourceGroupNames = a} :: RemoveDraftAppVersionResourceMappings) Prelude.. Lens.mapping Lens.coerced
+
+-- | The names of the resources to remove from the resource mappings.
+removeDraftAppVersionResourceMappings_resourceNames :: Lens.Lens' RemoveDraftAppVersionResourceMappings (Prelude.Maybe [Prelude.Text])
+removeDraftAppVersionResourceMappings_resourceNames = Lens.lens (\RemoveDraftAppVersionResourceMappings' {resourceNames} -> resourceNames) (\s@RemoveDraftAppVersionResourceMappings' {} a -> s {resourceNames = a} :: RemoveDraftAppVersionResourceMappings) Prelude.. Lens.mapping Lens.coerced
+
+-- | > </p>
+removeDraftAppVersionResourceMappings_terraformSourceNames :: Lens.Lens' RemoveDraftAppVersionResourceMappings (Prelude.Maybe [Prelude.Text])
+removeDraftAppVersionResourceMappings_terraformSourceNames = Lens.lens (\RemoveDraftAppVersionResourceMappings' {terraformSourceNames} -> terraformSourceNames) (\s@RemoveDraftAppVersionResourceMappings' {} a -> s {terraformSourceNames = a} :: RemoveDraftAppVersionResourceMappings) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+removeDraftAppVersionResourceMappings_appArn :: Lens.Lens' RemoveDraftAppVersionResourceMappings Prelude.Text
+removeDraftAppVersionResourceMappings_appArn = Lens.lens (\RemoveDraftAppVersionResourceMappings' {appArn} -> appArn) (\s@RemoveDraftAppVersionResourceMappings' {} a -> s {appArn = a} :: RemoveDraftAppVersionResourceMappings)
+
+instance
+  Core.AWSRequest
+    RemoveDraftAppVersionResourceMappings
+  where
+  type
+    AWSResponse
+      RemoveDraftAppVersionResourceMappings =
+      RemoveDraftAppVersionResourceMappingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RemoveDraftAppVersionResourceMappingsResponse'
+            Prelude.<$> (x Data..?> "appArn")
+            Prelude.<*> (x Data..?> "appVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RemoveDraftAppVersionResourceMappings
+  where
+  hashWithSalt
+    _salt
+    RemoveDraftAppVersionResourceMappings' {..} =
+      _salt
+        `Prelude.hashWithSalt` appRegistryAppNames
+        `Prelude.hashWithSalt` logicalStackNames
+        `Prelude.hashWithSalt` resourceGroupNames
+        `Prelude.hashWithSalt` resourceNames
+        `Prelude.hashWithSalt` terraformSourceNames
+        `Prelude.hashWithSalt` appArn
+
+instance
+  Prelude.NFData
+    RemoveDraftAppVersionResourceMappings
+  where
+  rnf RemoveDraftAppVersionResourceMappings' {..} =
+    Prelude.rnf appRegistryAppNames
+      `Prelude.seq` Prelude.rnf logicalStackNames
+      `Prelude.seq` Prelude.rnf resourceGroupNames
+      `Prelude.seq` Prelude.rnf resourceNames
+      `Prelude.seq` Prelude.rnf terraformSourceNames
+      `Prelude.seq` Prelude.rnf appArn
+
+instance
+  Data.ToHeaders
+    RemoveDraftAppVersionResourceMappings
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    RemoveDraftAppVersionResourceMappings
+  where
+  toJSON RemoveDraftAppVersionResourceMappings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appRegistryAppNames" Data..=)
+              Prelude.<$> appRegistryAppNames,
+            ("logicalStackNames" Data..=)
+              Prelude.<$> logicalStackNames,
+            ("resourceGroupNames" Data..=)
+              Prelude.<$> resourceGroupNames,
+            ("resourceNames" Data..=) Prelude.<$> resourceNames,
+            ("terraformSourceNames" Data..=)
+              Prelude.<$> terraformSourceNames,
+            Prelude.Just ("appArn" Data..= appArn)
+          ]
+      )
+
+instance
+  Data.ToPath
+    RemoveDraftAppVersionResourceMappings
+  where
+  toPath =
+    Prelude.const
+      "/remove-draft-app-version-resource-mappings"
+
+instance
+  Data.ToQuery
+    RemoveDraftAppVersionResourceMappings
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveDraftAppVersionResourceMappingsResponse' smart constructor.
+data RemoveDraftAppVersionResourceMappingsResponse = RemoveDraftAppVersionResourceMappingsResponse'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the application.
+    appVersion :: 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 'RemoveDraftAppVersionResourceMappingsResponse' with all optional fields 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:
+--
+-- 'appArn', 'removeDraftAppVersionResourceMappingsResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'removeDraftAppVersionResourceMappingsResponse_appVersion' - The version of the application.
+--
+-- 'httpStatus', 'removeDraftAppVersionResourceMappingsResponse_httpStatus' - The response's http status code.
+newRemoveDraftAppVersionResourceMappingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveDraftAppVersionResourceMappingsResponse
+newRemoveDraftAppVersionResourceMappingsResponse
+  pHttpStatus_ =
+    RemoveDraftAppVersionResourceMappingsResponse'
+      { appArn =
+          Prelude.Nothing,
+        appVersion = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+removeDraftAppVersionResourceMappingsResponse_appArn :: Lens.Lens' RemoveDraftAppVersionResourceMappingsResponse (Prelude.Maybe Prelude.Text)
+removeDraftAppVersionResourceMappingsResponse_appArn = Lens.lens (\RemoveDraftAppVersionResourceMappingsResponse' {appArn} -> appArn) (\s@RemoveDraftAppVersionResourceMappingsResponse' {} a -> s {appArn = a} :: RemoveDraftAppVersionResourceMappingsResponse)
+
+-- | The version of the application.
+removeDraftAppVersionResourceMappingsResponse_appVersion :: Lens.Lens' RemoveDraftAppVersionResourceMappingsResponse (Prelude.Maybe Prelude.Text)
+removeDraftAppVersionResourceMappingsResponse_appVersion = Lens.lens (\RemoveDraftAppVersionResourceMappingsResponse' {appVersion} -> appVersion) (\s@RemoveDraftAppVersionResourceMappingsResponse' {} a -> s {appVersion = a} :: RemoveDraftAppVersionResourceMappingsResponse)
+
+-- | The response's http status code.
+removeDraftAppVersionResourceMappingsResponse_httpStatus :: Lens.Lens' RemoveDraftAppVersionResourceMappingsResponse Prelude.Int
+removeDraftAppVersionResourceMappingsResponse_httpStatus = Lens.lens (\RemoveDraftAppVersionResourceMappingsResponse' {httpStatus} -> httpStatus) (\s@RemoveDraftAppVersionResourceMappingsResponse' {} a -> s {httpStatus = a} :: RemoveDraftAppVersionResourceMappingsResponse)
+
+instance
+  Prelude.NFData
+    RemoveDraftAppVersionResourceMappingsResponse
+  where
+  rnf
+    RemoveDraftAppVersionResourceMappingsResponse' {..} =
+      Prelude.rnf appArn
+        `Prelude.seq` Prelude.rnf appVersion
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/ResolveAppVersionResources.hs b/gen/Amazonka/ResilienceHub/ResolveAppVersionResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/ResolveAppVersionResources.hs
@@ -0,0 +1,261 @@
+{-# 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.ResilienceHub.ResolveAppVersionResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resolves the resources for an application version.
+module Amazonka.ResilienceHub.ResolveAppVersionResources
+  ( -- * Creating a Request
+    ResolveAppVersionResources (..),
+    newResolveAppVersionResources,
+
+    -- * Request Lenses
+    resolveAppVersionResources_appArn,
+    resolveAppVersionResources_appVersion,
+
+    -- * Destructuring the Response
+    ResolveAppVersionResourcesResponse (..),
+    newResolveAppVersionResourcesResponse,
+
+    -- * Response Lenses
+    resolveAppVersionResourcesResponse_httpStatus,
+    resolveAppVersionResourcesResponse_appArn,
+    resolveAppVersionResourcesResponse_appVersion,
+    resolveAppVersionResourcesResponse_resolutionId,
+    resolveAppVersionResourcesResponse_status,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResolveAppVersionResources' smart constructor.
+data ResolveAppVersionResources = ResolveAppVersionResources'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResolveAppVersionResources' with all optional fields 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:
+--
+-- 'appArn', 'resolveAppVersionResources_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'resolveAppVersionResources_appVersion' - The version of the application.
+newResolveAppVersionResources ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  ResolveAppVersionResources
+newResolveAppVersionResources pAppArn_ pAppVersion_ =
+  ResolveAppVersionResources'
+    { appArn = pAppArn_,
+      appVersion = pAppVersion_
+    }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+resolveAppVersionResources_appArn :: Lens.Lens' ResolveAppVersionResources Prelude.Text
+resolveAppVersionResources_appArn = Lens.lens (\ResolveAppVersionResources' {appArn} -> appArn) (\s@ResolveAppVersionResources' {} a -> s {appArn = a} :: ResolveAppVersionResources)
+
+-- | The version of the application.
+resolveAppVersionResources_appVersion :: Lens.Lens' ResolveAppVersionResources Prelude.Text
+resolveAppVersionResources_appVersion = Lens.lens (\ResolveAppVersionResources' {appVersion} -> appVersion) (\s@ResolveAppVersionResources' {} a -> s {appVersion = a} :: ResolveAppVersionResources)
+
+instance Core.AWSRequest ResolveAppVersionResources where
+  type
+    AWSResponse ResolveAppVersionResources =
+      ResolveAppVersionResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ResolveAppVersionResourcesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "appArn")
+            Prelude.<*> (x Data..:> "appVersion")
+            Prelude.<*> (x Data..:> "resolutionId")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance Prelude.Hashable ResolveAppVersionResources where
+  hashWithSalt _salt ResolveAppVersionResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appVersion
+
+instance Prelude.NFData ResolveAppVersionResources where
+  rnf ResolveAppVersionResources' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+
+instance Data.ToHeaders ResolveAppVersionResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ResolveAppVersionResources where
+  toJSON ResolveAppVersionResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just ("appVersion" Data..= appVersion)
+          ]
+      )
+
+instance Data.ToPath ResolveAppVersionResources where
+  toPath =
+    Prelude.const "/resolve-app-version-resources"
+
+instance Data.ToQuery ResolveAppVersionResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResolveAppVersionResourcesResponse' smart constructor.
+data ResolveAppVersionResourcesResponse = ResolveAppVersionResourcesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text,
+    -- | The identifier for a specific resolution.
+    resolutionId :: Prelude.Text,
+    -- | The status of the action.
+    status :: ResourceResolutionStatusType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResolveAppVersionResourcesResponse' with all optional fields 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', 'resolveAppVersionResourcesResponse_httpStatus' - The response's http status code.
+--
+-- 'appArn', 'resolveAppVersionResourcesResponse_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'resolveAppVersionResourcesResponse_appVersion' - The version of the application.
+--
+-- 'resolutionId', 'resolveAppVersionResourcesResponse_resolutionId' - The identifier for a specific resolution.
+--
+-- 'status', 'resolveAppVersionResourcesResponse_status' - The status of the action.
+newResolveAppVersionResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  -- | 'resolutionId'
+  Prelude.Text ->
+  -- | 'status'
+  ResourceResolutionStatusType ->
+  ResolveAppVersionResourcesResponse
+newResolveAppVersionResourcesResponse
+  pHttpStatus_
+  pAppArn_
+  pAppVersion_
+  pResolutionId_
+  pStatus_ =
+    ResolveAppVersionResourcesResponse'
+      { httpStatus =
+          pHttpStatus_,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_,
+        resolutionId = pResolutionId_,
+        status = pStatus_
+      }
+
+-- | The response's http status code.
+resolveAppVersionResourcesResponse_httpStatus :: Lens.Lens' ResolveAppVersionResourcesResponse Prelude.Int
+resolveAppVersionResourcesResponse_httpStatus = Lens.lens (\ResolveAppVersionResourcesResponse' {httpStatus} -> httpStatus) (\s@ResolveAppVersionResourcesResponse' {} a -> s {httpStatus = a} :: ResolveAppVersionResourcesResponse)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+resolveAppVersionResourcesResponse_appArn :: Lens.Lens' ResolveAppVersionResourcesResponse Prelude.Text
+resolveAppVersionResourcesResponse_appArn = Lens.lens (\ResolveAppVersionResourcesResponse' {appArn} -> appArn) (\s@ResolveAppVersionResourcesResponse' {} a -> s {appArn = a} :: ResolveAppVersionResourcesResponse)
+
+-- | The version of the application.
+resolveAppVersionResourcesResponse_appVersion :: Lens.Lens' ResolveAppVersionResourcesResponse Prelude.Text
+resolveAppVersionResourcesResponse_appVersion = Lens.lens (\ResolveAppVersionResourcesResponse' {appVersion} -> appVersion) (\s@ResolveAppVersionResourcesResponse' {} a -> s {appVersion = a} :: ResolveAppVersionResourcesResponse)
+
+-- | The identifier for a specific resolution.
+resolveAppVersionResourcesResponse_resolutionId :: Lens.Lens' ResolveAppVersionResourcesResponse Prelude.Text
+resolveAppVersionResourcesResponse_resolutionId = Lens.lens (\ResolveAppVersionResourcesResponse' {resolutionId} -> resolutionId) (\s@ResolveAppVersionResourcesResponse' {} a -> s {resolutionId = a} :: ResolveAppVersionResourcesResponse)
+
+-- | The status of the action.
+resolveAppVersionResourcesResponse_status :: Lens.Lens' ResolveAppVersionResourcesResponse ResourceResolutionStatusType
+resolveAppVersionResourcesResponse_status = Lens.lens (\ResolveAppVersionResourcesResponse' {status} -> status) (\s@ResolveAppVersionResourcesResponse' {} a -> s {status = a} :: ResolveAppVersionResourcesResponse)
+
+instance
+  Prelude.NFData
+    ResolveAppVersionResourcesResponse
+  where
+  rnf ResolveAppVersionResourcesResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf resolutionId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ResilienceHub/StartAppAssessment.hs b/gen/Amazonka/ResilienceHub/StartAppAssessment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/StartAppAssessment.hs
@@ -0,0 +1,254 @@
+{-# 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.ResilienceHub.StartAppAssessment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new application assessment for an application.
+module Amazonka.ResilienceHub.StartAppAssessment
+  ( -- * Creating a Request
+    StartAppAssessment (..),
+    newStartAppAssessment,
+
+    -- * Request Lenses
+    startAppAssessment_clientToken,
+    startAppAssessment_tags,
+    startAppAssessment_appArn,
+    startAppAssessment_appVersion,
+    startAppAssessment_assessmentName,
+
+    -- * Destructuring the Response
+    StartAppAssessmentResponse (..),
+    newStartAppAssessmentResponse,
+
+    -- * Response Lenses
+    startAppAssessmentResponse_httpStatus,
+    startAppAssessmentResponse_assessment,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartAppAssessment' smart constructor.
+data StartAppAssessment = StartAppAssessment'
+  { -- | Used for an idempotency token. A client token is a unique,
+    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
+    -- the same client token for other API requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Text,
+    -- | The name for the assessment.
+    assessmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartAppAssessment' with all optional fields 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', 'startAppAssessment_clientToken' - Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+--
+-- 'tags', 'startAppAssessment_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'appArn', 'startAppAssessment_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'startAppAssessment_appVersion' - The version of the application.
+--
+-- 'assessmentName', 'startAppAssessment_assessmentName' - The name for the assessment.
+newStartAppAssessment ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'appVersion'
+  Prelude.Text ->
+  -- | 'assessmentName'
+  Prelude.Text ->
+  StartAppAssessment
+newStartAppAssessment
+  pAppArn_
+  pAppVersion_
+  pAssessmentName_ =
+    StartAppAssessment'
+      { clientToken = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        appArn = pAppArn_,
+        appVersion = pAppVersion_,
+        assessmentName = pAssessmentName_
+      }
+
+-- | Used for an idempotency token. A client token is a unique,
+-- case-sensitive string of up to 64 ASCII characters. You should not reuse
+-- the same client token for other API requests.
+startAppAssessment_clientToken :: Lens.Lens' StartAppAssessment (Prelude.Maybe Prelude.Text)
+startAppAssessment_clientToken = Lens.lens (\StartAppAssessment' {clientToken} -> clientToken) (\s@StartAppAssessment' {} a -> s {clientToken = a} :: StartAppAssessment)
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+startAppAssessment_tags :: Lens.Lens' StartAppAssessment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startAppAssessment_tags = Lens.lens (\StartAppAssessment' {tags} -> tags) (\s@StartAppAssessment' {} a -> s {tags = a} :: StartAppAssessment) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+startAppAssessment_appArn :: Lens.Lens' StartAppAssessment Prelude.Text
+startAppAssessment_appArn = Lens.lens (\StartAppAssessment' {appArn} -> appArn) (\s@StartAppAssessment' {} a -> s {appArn = a} :: StartAppAssessment)
+
+-- | The version of the application.
+startAppAssessment_appVersion :: Lens.Lens' StartAppAssessment Prelude.Text
+startAppAssessment_appVersion = Lens.lens (\StartAppAssessment' {appVersion} -> appVersion) (\s@StartAppAssessment' {} a -> s {appVersion = a} :: StartAppAssessment)
+
+-- | The name for the assessment.
+startAppAssessment_assessmentName :: Lens.Lens' StartAppAssessment Prelude.Text
+startAppAssessment_assessmentName = Lens.lens (\StartAppAssessment' {assessmentName} -> assessmentName) (\s@StartAppAssessment' {} a -> s {assessmentName = a} :: StartAppAssessment)
+
+instance Core.AWSRequest StartAppAssessment where
+  type
+    AWSResponse StartAppAssessment =
+      StartAppAssessmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartAppAssessmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "assessment")
+      )
+
+instance Prelude.Hashable StartAppAssessment where
+  hashWithSalt _salt StartAppAssessment' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appVersion
+      `Prelude.hashWithSalt` assessmentName
+
+instance Prelude.NFData StartAppAssessment where
+  rnf StartAppAssessment' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf assessmentName
+
+instance Data.ToHeaders StartAppAssessment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartAppAssessment where
+  toJSON StartAppAssessment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("appArn" Data..= appArn),
+            Prelude.Just ("appVersion" Data..= appVersion),
+            Prelude.Just
+              ("assessmentName" Data..= assessmentName)
+          ]
+      )
+
+instance Data.ToPath StartAppAssessment where
+  toPath = Prelude.const "/start-app-assessment"
+
+instance Data.ToQuery StartAppAssessment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartAppAssessmentResponse' smart constructor.
+data StartAppAssessmentResponse = StartAppAssessmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The assessment created.
+    assessment :: AppAssessment
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartAppAssessmentResponse' with all optional fields 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', 'startAppAssessmentResponse_httpStatus' - The response's http status code.
+--
+-- 'assessment', 'startAppAssessmentResponse_assessment' - The assessment created.
+newStartAppAssessmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'assessment'
+  AppAssessment ->
+  StartAppAssessmentResponse
+newStartAppAssessmentResponse
+  pHttpStatus_
+  pAssessment_ =
+    StartAppAssessmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        assessment = pAssessment_
+      }
+
+-- | The response's http status code.
+startAppAssessmentResponse_httpStatus :: Lens.Lens' StartAppAssessmentResponse Prelude.Int
+startAppAssessmentResponse_httpStatus = Lens.lens (\StartAppAssessmentResponse' {httpStatus} -> httpStatus) (\s@StartAppAssessmentResponse' {} a -> s {httpStatus = a} :: StartAppAssessmentResponse)
+
+-- | The assessment created.
+startAppAssessmentResponse_assessment :: Lens.Lens' StartAppAssessmentResponse AppAssessment
+startAppAssessmentResponse_assessment = Lens.lens (\StartAppAssessmentResponse' {assessment} -> assessment) (\s@StartAppAssessmentResponse' {} a -> s {assessment = a} :: StartAppAssessmentResponse)
+
+instance Prelude.NFData StartAppAssessmentResponse where
+  rnf StartAppAssessmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf assessment
diff --git a/gen/Amazonka/ResilienceHub/TagResource.hs b/gen/Amazonka/ResilienceHub/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/TagResource.hs
@@ -0,0 +1,166 @@
+{-# 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.ResilienceHub.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies one or more tags to a resource.
+module Amazonka.ResilienceHub.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags to assign to the resource. Each tag consists of a key\/value
+    -- pair.
+    tags :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tags', 'tagResource_tags' - The tags to assign to the resource. Each tag consists of a key\/value
+-- pair.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to assign to the resource. Each tag consists of a key\/value
+-- pair.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/Types.hs b/gen/Amazonka/ResilienceHub/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types.hs
@@ -0,0 +1,591 @@
+{-# 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.ResilienceHub.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.ResilienceHub.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AlarmType
+    AlarmType (..),
+
+    -- * AppAssessmentScheduleType
+    AppAssessmentScheduleType (..),
+
+    -- * AppComplianceStatusType
+    AppComplianceStatusType (..),
+
+    -- * AppStatusType
+    AppStatusType (..),
+
+    -- * AssessmentInvoker
+    AssessmentInvoker (..),
+
+    -- * AssessmentStatus
+    AssessmentStatus (..),
+
+    -- * ComplianceStatus
+    ComplianceStatus (..),
+
+    -- * ConfigRecommendationOptimizationType
+    ConfigRecommendationOptimizationType (..),
+
+    -- * CostFrequency
+    CostFrequency (..),
+
+    -- * DataLocationConstraint
+    DataLocationConstraint (..),
+
+    -- * DisruptionType
+    DisruptionType (..),
+
+    -- * EstimatedCostTier
+    EstimatedCostTier (..),
+
+    -- * HaArchitecture
+    HaArchitecture (..),
+
+    -- * PhysicalIdentifierType
+    PhysicalIdentifierType (..),
+
+    -- * RecommendationComplianceStatus
+    RecommendationComplianceStatus (..),
+
+    -- * RecommendationTemplateStatus
+    RecommendationTemplateStatus (..),
+
+    -- * RenderRecommendationType
+    RenderRecommendationType (..),
+
+    -- * ResiliencyPolicyTier
+    ResiliencyPolicyTier (..),
+
+    -- * ResourceImportStatusType
+    ResourceImportStatusType (..),
+
+    -- * ResourceMappingType
+    ResourceMappingType (..),
+
+    -- * ResourceResolutionStatusType
+    ResourceResolutionStatusType (..),
+
+    -- * SopServiceType
+    SopServiceType (..),
+
+    -- * TemplateFormat
+    TemplateFormat (..),
+
+    -- * TestRisk
+    TestRisk (..),
+
+    -- * TestType
+    TestType (..),
+
+    -- * AlarmRecommendation
+    AlarmRecommendation (..),
+    newAlarmRecommendation,
+    alarmRecommendation_appComponentName,
+    alarmRecommendation_description,
+    alarmRecommendation_items,
+    alarmRecommendation_prerequisite,
+    alarmRecommendation_name,
+    alarmRecommendation_recommendationId,
+    alarmRecommendation_referenceId,
+    alarmRecommendation_type,
+
+    -- * App
+    App (..),
+    newApp,
+    app_assessmentSchedule,
+    app_complianceStatus,
+    app_description,
+    app_lastAppComplianceEvaluationTime,
+    app_lastResiliencyScoreEvaluationTime,
+    app_policyArn,
+    app_resiliencyScore,
+    app_status,
+    app_tags,
+    app_appArn,
+    app_creationTime,
+    app_name,
+
+    -- * AppAssessment
+    AppAssessment (..),
+    newAppAssessment,
+    appAssessment_appArn,
+    appAssessment_appVersion,
+    appAssessment_assessmentName,
+    appAssessment_compliance,
+    appAssessment_complianceStatus,
+    appAssessment_cost,
+    appAssessment_endTime,
+    appAssessment_message,
+    appAssessment_policy,
+    appAssessment_resiliencyScore,
+    appAssessment_resourceErrorsDetails,
+    appAssessment_startTime,
+    appAssessment_tags,
+    appAssessment_assessmentArn,
+    appAssessment_assessmentStatus,
+    appAssessment_invoker,
+
+    -- * AppAssessmentSummary
+    AppAssessmentSummary (..),
+    newAppAssessmentSummary,
+    appAssessmentSummary_appArn,
+    appAssessmentSummary_appVersion,
+    appAssessmentSummary_assessmentName,
+    appAssessmentSummary_complianceStatus,
+    appAssessmentSummary_cost,
+    appAssessmentSummary_endTime,
+    appAssessmentSummary_invoker,
+    appAssessmentSummary_message,
+    appAssessmentSummary_resiliencyScore,
+    appAssessmentSummary_startTime,
+    appAssessmentSummary_assessmentArn,
+    appAssessmentSummary_assessmentStatus,
+
+    -- * AppComponent
+    AppComponent (..),
+    newAppComponent,
+    appComponent_name,
+    appComponent_type,
+
+    -- * AppComponentCompliance
+    AppComponentCompliance (..),
+    newAppComponentCompliance,
+    appComponentCompliance_appComponentName,
+    appComponentCompliance_compliance,
+    appComponentCompliance_cost,
+    appComponentCompliance_message,
+    appComponentCompliance_resiliencyScore,
+    appComponentCompliance_status,
+
+    -- * AppSummary
+    AppSummary (..),
+    newAppSummary,
+    appSummary_assessmentSchedule,
+    appSummary_complianceStatus,
+    appSummary_description,
+    appSummary_resiliencyScore,
+    appSummary_status,
+    appSummary_appArn,
+    appSummary_creationTime,
+    appSummary_name,
+
+    -- * AppVersionSummary
+    AppVersionSummary (..),
+    newAppVersionSummary,
+    appVersionSummary_appVersion,
+
+    -- * ComponentRecommendation
+    ComponentRecommendation (..),
+    newComponentRecommendation,
+    componentRecommendation_appComponentName,
+    componentRecommendation_configRecommendations,
+    componentRecommendation_recommendationStatus,
+
+    -- * ConfigRecommendation
+    ConfigRecommendation (..),
+    newConfigRecommendation,
+    configRecommendation_appComponentName,
+    configRecommendation_compliance,
+    configRecommendation_cost,
+    configRecommendation_description,
+    configRecommendation_haArchitecture,
+    configRecommendation_recommendationCompliance,
+    configRecommendation_suggestedChanges,
+    configRecommendation_name,
+    configRecommendation_optimizationType,
+    configRecommendation_referenceId,
+
+    -- * Cost
+    Cost (..),
+    newCost,
+    cost_amount,
+    cost_currency,
+    cost_frequency,
+
+    -- * DisruptionCompliance
+    DisruptionCompliance (..),
+    newDisruptionCompliance,
+    disruptionCompliance_achievableRpoInSecs,
+    disruptionCompliance_achievableRtoInSecs,
+    disruptionCompliance_currentRpoInSecs,
+    disruptionCompliance_currentRtoInSecs,
+    disruptionCompliance_message,
+    disruptionCompliance_rpoDescription,
+    disruptionCompliance_rpoReferenceId,
+    disruptionCompliance_rtoDescription,
+    disruptionCompliance_rtoReferenceId,
+    disruptionCompliance_complianceStatus,
+
+    -- * FailurePolicy
+    FailurePolicy (..),
+    newFailurePolicy,
+    failurePolicy_rpoInSecs,
+    failurePolicy_rtoInSecs,
+
+    -- * LogicalResourceId
+    LogicalResourceId (..),
+    newLogicalResourceId,
+    logicalResourceId_logicalStackName,
+    logicalResourceId_resourceGroupName,
+    logicalResourceId_terraformSourceName,
+    logicalResourceId_identifier,
+
+    -- * PhysicalResource
+    PhysicalResource (..),
+    newPhysicalResource,
+    physicalResource_appComponents,
+    physicalResource_resourceName,
+    physicalResource_logicalResourceId,
+    physicalResource_physicalResourceId,
+    physicalResource_resourceType,
+
+    -- * PhysicalResourceId
+    PhysicalResourceId (..),
+    newPhysicalResourceId,
+    physicalResourceId_awsAccountId,
+    physicalResourceId_awsRegion,
+    physicalResourceId_identifier,
+    physicalResourceId_type,
+
+    -- * RecommendationDisruptionCompliance
+    RecommendationDisruptionCompliance (..),
+    newRecommendationDisruptionCompliance,
+    recommendationDisruptionCompliance_expectedRpoDescription,
+    recommendationDisruptionCompliance_expectedRpoInSecs,
+    recommendationDisruptionCompliance_expectedRtoDescription,
+    recommendationDisruptionCompliance_expectedRtoInSecs,
+    recommendationDisruptionCompliance_expectedComplianceStatus,
+
+    -- * RecommendationItem
+    RecommendationItem (..),
+    newRecommendationItem,
+    recommendationItem_alreadyImplemented,
+    recommendationItem_resourceId,
+    recommendationItem_targetAccountId,
+    recommendationItem_targetRegion,
+
+    -- * RecommendationTemplate
+    RecommendationTemplate (..),
+    newRecommendationTemplate,
+    recommendationTemplate_appArn,
+    recommendationTemplate_endTime,
+    recommendationTemplate_message,
+    recommendationTemplate_needsReplacements,
+    recommendationTemplate_recommendationIds,
+    recommendationTemplate_startTime,
+    recommendationTemplate_tags,
+    recommendationTemplate_templatesLocation,
+    recommendationTemplate_assessmentArn,
+    recommendationTemplate_format,
+    recommendationTemplate_name,
+    recommendationTemplate_recommendationTemplateArn,
+    recommendationTemplate_recommendationTypes,
+    recommendationTemplate_status,
+
+    -- * ResiliencyPolicy
+    ResiliencyPolicy (..),
+    newResiliencyPolicy,
+    resiliencyPolicy_creationTime,
+    resiliencyPolicy_dataLocationConstraint,
+    resiliencyPolicy_estimatedCostTier,
+    resiliencyPolicy_policy,
+    resiliencyPolicy_policyArn,
+    resiliencyPolicy_policyDescription,
+    resiliencyPolicy_policyName,
+    resiliencyPolicy_tags,
+    resiliencyPolicy_tier,
+
+    -- * ResiliencyScore
+    ResiliencyScore (..),
+    newResiliencyScore,
+    resiliencyScore_disruptionScore,
+    resiliencyScore_score,
+
+    -- * ResourceError
+    ResourceError (..),
+    newResourceError,
+    resourceError_logicalResourceId,
+    resourceError_physicalResourceId,
+    resourceError_reason,
+
+    -- * ResourceErrorsDetails
+    ResourceErrorsDetails (..),
+    newResourceErrorsDetails,
+    resourceErrorsDetails_hasMoreErrors,
+    resourceErrorsDetails_resourceErrors,
+
+    -- * ResourceMapping
+    ResourceMapping (..),
+    newResourceMapping,
+    resourceMapping_appRegistryAppName,
+    resourceMapping_logicalStackName,
+    resourceMapping_resourceGroupName,
+    resourceMapping_resourceName,
+    resourceMapping_terraformSourceName,
+    resourceMapping_mappingType,
+    resourceMapping_physicalResourceId,
+
+    -- * S3Location
+    S3Location (..),
+    newS3Location,
+    s3Location_bucket,
+    s3Location_prefix,
+
+    -- * SopRecommendation
+    SopRecommendation (..),
+    newSopRecommendation,
+    sopRecommendation_appComponentName,
+    sopRecommendation_description,
+    sopRecommendation_items,
+    sopRecommendation_name,
+    sopRecommendation_prerequisite,
+    sopRecommendation_recommendationId,
+    sopRecommendation_referenceId,
+    sopRecommendation_serviceType,
+
+    -- * TerraformSource
+    TerraformSource (..),
+    newTerraformSource,
+    terraformSource_s3StateFileUrl,
+
+    -- * TestRecommendation
+    TestRecommendation (..),
+    newTestRecommendation,
+    testRecommendation_appComponentName,
+    testRecommendation_dependsOnAlarms,
+    testRecommendation_description,
+    testRecommendation_intent,
+    testRecommendation_items,
+    testRecommendation_name,
+    testRecommendation_prerequisite,
+    testRecommendation_recommendationId,
+    testRecommendation_risk,
+    testRecommendation_type,
+    testRecommendation_referenceId,
+
+    -- * UnsupportedResource
+    UnsupportedResource (..),
+    newUnsupportedResource,
+    unsupportedResource_logicalResourceId,
+    unsupportedResource_physicalResourceId,
+    unsupportedResource_resourceType,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ResilienceHub.Types.AlarmRecommendation
+import Amazonka.ResilienceHub.Types.AlarmType
+import Amazonka.ResilienceHub.Types.App
+import Amazonka.ResilienceHub.Types.AppAssessment
+import Amazonka.ResilienceHub.Types.AppAssessmentScheduleType
+import Amazonka.ResilienceHub.Types.AppAssessmentSummary
+import Amazonka.ResilienceHub.Types.AppComplianceStatusType
+import Amazonka.ResilienceHub.Types.AppComponent
+import Amazonka.ResilienceHub.Types.AppComponentCompliance
+import Amazonka.ResilienceHub.Types.AppStatusType
+import Amazonka.ResilienceHub.Types.AppSummary
+import Amazonka.ResilienceHub.Types.AppVersionSummary
+import Amazonka.ResilienceHub.Types.AssessmentInvoker
+import Amazonka.ResilienceHub.Types.AssessmentStatus
+import Amazonka.ResilienceHub.Types.ComplianceStatus
+import Amazonka.ResilienceHub.Types.ComponentRecommendation
+import Amazonka.ResilienceHub.Types.ConfigRecommendation
+import Amazonka.ResilienceHub.Types.ConfigRecommendationOptimizationType
+import Amazonka.ResilienceHub.Types.Cost
+import Amazonka.ResilienceHub.Types.CostFrequency
+import Amazonka.ResilienceHub.Types.DataLocationConstraint
+import Amazonka.ResilienceHub.Types.DisruptionCompliance
+import Amazonka.ResilienceHub.Types.DisruptionType
+import Amazonka.ResilienceHub.Types.EstimatedCostTier
+import Amazonka.ResilienceHub.Types.FailurePolicy
+import Amazonka.ResilienceHub.Types.HaArchitecture
+import Amazonka.ResilienceHub.Types.LogicalResourceId
+import Amazonka.ResilienceHub.Types.PhysicalIdentifierType
+import Amazonka.ResilienceHub.Types.PhysicalResource
+import Amazonka.ResilienceHub.Types.PhysicalResourceId
+import Amazonka.ResilienceHub.Types.RecommendationComplianceStatus
+import Amazonka.ResilienceHub.Types.RecommendationDisruptionCompliance
+import Amazonka.ResilienceHub.Types.RecommendationItem
+import Amazonka.ResilienceHub.Types.RecommendationTemplate
+import Amazonka.ResilienceHub.Types.RecommendationTemplateStatus
+import Amazonka.ResilienceHub.Types.RenderRecommendationType
+import Amazonka.ResilienceHub.Types.ResiliencyPolicy
+import Amazonka.ResilienceHub.Types.ResiliencyPolicyTier
+import Amazonka.ResilienceHub.Types.ResiliencyScore
+import Amazonka.ResilienceHub.Types.ResourceError
+import Amazonka.ResilienceHub.Types.ResourceErrorsDetails
+import Amazonka.ResilienceHub.Types.ResourceImportStatusType
+import Amazonka.ResilienceHub.Types.ResourceMapping
+import Amazonka.ResilienceHub.Types.ResourceMappingType
+import Amazonka.ResilienceHub.Types.ResourceResolutionStatusType
+import Amazonka.ResilienceHub.Types.S3Location
+import Amazonka.ResilienceHub.Types.SopRecommendation
+import Amazonka.ResilienceHub.Types.SopServiceType
+import Amazonka.ResilienceHub.Types.TemplateFormat
+import Amazonka.ResilienceHub.Types.TerraformSource
+import Amazonka.ResilienceHub.Types.TestRecommendation
+import Amazonka.ResilienceHub.Types.TestRisk
+import Amazonka.ResilienceHub.Types.TestType
+import Amazonka.ResilienceHub.Types.UnsupportedResource
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-04-30@ of the Amazon Resilience Hub SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ResilienceHub",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "resiliencehub",
+      Core.signingName = "resiliencehub",
+      Core.version = "2020-04-30",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ResilienceHub",
+      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.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Occurs when a conflict with a previous successful write is detected.
+-- This generally occurs when the previous write did not have time to
+-- propagate to the host serving the current request. A retry (with
+-- appropriate backoff logic) is the recommended response to this
+-- exception.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | This exception occurs when there is an internal failure in the AWS
+-- Resilience Hub service.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The specified resource could not be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | You have exceeded your service quota. To perform the requested action,
+-- remove some of the relevant resources, or use Service Quotas to request
+-- a service quota increase.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The limit on the number of requests per second was exceeded.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | Indicates that a request was 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/ResilienceHub/Types/AlarmRecommendation.hs b/gen/Amazonka/ResilienceHub/Types/AlarmRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AlarmRecommendation.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.ResilienceHub.Types.AlarmRecommendation
+-- 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.ResilienceHub.Types.AlarmRecommendation 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
+import Amazonka.ResilienceHub.Types.AlarmType
+import Amazonka.ResilienceHub.Types.RecommendationItem
+
+-- | Defines a recommendation for a CloudWatch alarm.
+--
+-- /See:/ 'newAlarmRecommendation' smart constructor.
+data AlarmRecommendation = AlarmRecommendation'
+  { -- | The application component for the CloudWatch alarm recommendation.
+    appComponentName :: Prelude.Maybe Prelude.Text,
+    -- | The description of the recommendation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The list of CloudWatch alarm recommendations.
+    items :: Prelude.Maybe [RecommendationItem],
+    -- | The prerequisite for the alarm recommendation.
+    prerequisite :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alarm recommendation.
+    name :: Prelude.Text,
+    -- | The identifier of the alarm recommendation.
+    recommendationId :: Prelude.Text,
+    -- | The reference identifier of the alarm recommendation.
+    referenceId :: Prelude.Text,
+    -- | The type of alarm recommendation.
+    type' :: AlarmType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmRecommendation' with all optional fields 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:
+--
+-- 'appComponentName', 'alarmRecommendation_appComponentName' - The application component for the CloudWatch alarm recommendation.
+--
+-- 'description', 'alarmRecommendation_description' - The description of the recommendation.
+--
+-- 'items', 'alarmRecommendation_items' - The list of CloudWatch alarm recommendations.
+--
+-- 'prerequisite', 'alarmRecommendation_prerequisite' - The prerequisite for the alarm recommendation.
+--
+-- 'name', 'alarmRecommendation_name' - The name of the alarm recommendation.
+--
+-- 'recommendationId', 'alarmRecommendation_recommendationId' - The identifier of the alarm recommendation.
+--
+-- 'referenceId', 'alarmRecommendation_referenceId' - The reference identifier of the alarm recommendation.
+--
+-- 'type'', 'alarmRecommendation_type' - The type of alarm recommendation.
+newAlarmRecommendation ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recommendationId'
+  Prelude.Text ->
+  -- | 'referenceId'
+  Prelude.Text ->
+  -- | 'type''
+  AlarmType ->
+  AlarmRecommendation
+newAlarmRecommendation
+  pName_
+  pRecommendationId_
+  pReferenceId_
+  pType_ =
+    AlarmRecommendation'
+      { appComponentName =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        items = Prelude.Nothing,
+        prerequisite = Prelude.Nothing,
+        name = pName_,
+        recommendationId = pRecommendationId_,
+        referenceId = pReferenceId_,
+        type' = pType_
+      }
+
+-- | The application component for the CloudWatch alarm recommendation.
+alarmRecommendation_appComponentName :: Lens.Lens' AlarmRecommendation (Prelude.Maybe Prelude.Text)
+alarmRecommendation_appComponentName = Lens.lens (\AlarmRecommendation' {appComponentName} -> appComponentName) (\s@AlarmRecommendation' {} a -> s {appComponentName = a} :: AlarmRecommendation)
+
+-- | The description of the recommendation.
+alarmRecommendation_description :: Lens.Lens' AlarmRecommendation (Prelude.Maybe Prelude.Text)
+alarmRecommendation_description = Lens.lens (\AlarmRecommendation' {description} -> description) (\s@AlarmRecommendation' {} a -> s {description = a} :: AlarmRecommendation)
+
+-- | The list of CloudWatch alarm recommendations.
+alarmRecommendation_items :: Lens.Lens' AlarmRecommendation (Prelude.Maybe [RecommendationItem])
+alarmRecommendation_items = Lens.lens (\AlarmRecommendation' {items} -> items) (\s@AlarmRecommendation' {} a -> s {items = a} :: AlarmRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The prerequisite for the alarm recommendation.
+alarmRecommendation_prerequisite :: Lens.Lens' AlarmRecommendation (Prelude.Maybe Prelude.Text)
+alarmRecommendation_prerequisite = Lens.lens (\AlarmRecommendation' {prerequisite} -> prerequisite) (\s@AlarmRecommendation' {} a -> s {prerequisite = a} :: AlarmRecommendation)
+
+-- | The name of the alarm recommendation.
+alarmRecommendation_name :: Lens.Lens' AlarmRecommendation Prelude.Text
+alarmRecommendation_name = Lens.lens (\AlarmRecommendation' {name} -> name) (\s@AlarmRecommendation' {} a -> s {name = a} :: AlarmRecommendation)
+
+-- | The identifier of the alarm recommendation.
+alarmRecommendation_recommendationId :: Lens.Lens' AlarmRecommendation Prelude.Text
+alarmRecommendation_recommendationId = Lens.lens (\AlarmRecommendation' {recommendationId} -> recommendationId) (\s@AlarmRecommendation' {} a -> s {recommendationId = a} :: AlarmRecommendation)
+
+-- | The reference identifier of the alarm recommendation.
+alarmRecommendation_referenceId :: Lens.Lens' AlarmRecommendation Prelude.Text
+alarmRecommendation_referenceId = Lens.lens (\AlarmRecommendation' {referenceId} -> referenceId) (\s@AlarmRecommendation' {} a -> s {referenceId = a} :: AlarmRecommendation)
+
+-- | The type of alarm recommendation.
+alarmRecommendation_type :: Lens.Lens' AlarmRecommendation AlarmType
+alarmRecommendation_type = Lens.lens (\AlarmRecommendation' {type'} -> type') (\s@AlarmRecommendation' {} a -> s {type' = a} :: AlarmRecommendation)
+
+instance Data.FromJSON AlarmRecommendation where
+  parseJSON =
+    Data.withObject
+      "AlarmRecommendation"
+      ( \x ->
+          AlarmRecommendation'
+            Prelude.<$> (x Data..:? "appComponentName")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "items" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "prerequisite")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "recommendationId")
+            Prelude.<*> (x Data..: "referenceId")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable AlarmRecommendation where
+  hashWithSalt _salt AlarmRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponentName
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` items
+      `Prelude.hashWithSalt` prerequisite
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recommendationId
+      `Prelude.hashWithSalt` referenceId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AlarmRecommendation where
+  rnf AlarmRecommendation' {..} =
+    Prelude.rnf appComponentName
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf items
+      `Prelude.seq` Prelude.rnf prerequisite
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recommendationId
+      `Prelude.seq` Prelude.rnf referenceId
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ResilienceHub/Types/AlarmType.hs b/gen/Amazonka/ResilienceHub/Types/AlarmType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AlarmType.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.ResilienceHub.Types.AlarmType
+-- 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.ResilienceHub.Types.AlarmType
+  ( AlarmType
+      ( ..,
+        AlarmType_Canary,
+        AlarmType_Composite,
+        AlarmType_Event,
+        AlarmType_Logs,
+        AlarmType_Metric
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AlarmType = AlarmType'
+  { fromAlarmType ::
+      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 AlarmType_Canary :: AlarmType
+pattern AlarmType_Canary = AlarmType' "Canary"
+
+pattern AlarmType_Composite :: AlarmType
+pattern AlarmType_Composite = AlarmType' "Composite"
+
+pattern AlarmType_Event :: AlarmType
+pattern AlarmType_Event = AlarmType' "Event"
+
+pattern AlarmType_Logs :: AlarmType
+pattern AlarmType_Logs = AlarmType' "Logs"
+
+pattern AlarmType_Metric :: AlarmType
+pattern AlarmType_Metric = AlarmType' "Metric"
+
+{-# COMPLETE
+  AlarmType_Canary,
+  AlarmType_Composite,
+  AlarmType_Event,
+  AlarmType_Logs,
+  AlarmType_Metric,
+  AlarmType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/App.hs b/gen/Amazonka/ResilienceHub/Types/App.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/App.hs
@@ -0,0 +1,243 @@
+{-# 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.ResilienceHub.Types.App
+-- 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.ResilienceHub.Types.App 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
+import Amazonka.ResilienceHub.Types.AppAssessmentScheduleType
+import Amazonka.ResilienceHub.Types.AppComplianceStatusType
+import Amazonka.ResilienceHub.Types.AppStatusType
+
+-- | Defines a Resilience Hub application.
+--
+-- /See:/ 'newApp' smart constructor.
+data App = App'
+  { -- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+    assessmentSchedule :: Prelude.Maybe AppAssessmentScheduleType,
+    -- | The current status of compliance for the resiliency policy.
+    complianceStatus :: Prelude.Maybe AppComplianceStatusType,
+    -- | The optional description for an app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp for the most recent compliance evaluation.
+    lastAppComplianceEvaluationTime :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp for the most recent resiliency score evaluation.
+    lastResiliencyScoreEvaluationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Maybe Prelude.Text,
+    -- | The current resiliency score for the application.
+    resiliencyScore :: Prelude.Maybe Prelude.Double,
+    -- | The status of the application.
+    status :: Prelude.Maybe AppStatusType,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The timestamp for when the app was created.
+    creationTime :: Data.POSIX,
+    -- | The name for the application.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'App' with all optional fields 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:
+--
+-- 'assessmentSchedule', 'app_assessmentSchedule' - Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+--
+-- 'complianceStatus', 'app_complianceStatus' - The current status of compliance for the resiliency policy.
+--
+-- 'description', 'app_description' - The optional description for an app.
+--
+-- 'lastAppComplianceEvaluationTime', 'app_lastAppComplianceEvaluationTime' - The timestamp for the most recent compliance evaluation.
+--
+-- 'lastResiliencyScoreEvaluationTime', 'app_lastResiliencyScoreEvaluationTime' - The timestamp for the most recent resiliency score evaluation.
+--
+-- 'policyArn', 'app_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'resiliencyScore', 'app_resiliencyScore' - The current resiliency score for the application.
+--
+-- 'status', 'app_status' - The status of the application.
+--
+-- 'tags', 'app_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'appArn', 'app_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'creationTime', 'app_creationTime' - The timestamp for when the app was created.
+--
+-- 'name', 'app_name' - The name for the application.
+newApp ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'name'
+  Prelude.Text ->
+  App
+newApp pAppArn_ pCreationTime_ pName_ =
+  App'
+    { assessmentSchedule = Prelude.Nothing,
+      complianceStatus = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastAppComplianceEvaluationTime = Prelude.Nothing,
+      lastResiliencyScoreEvaluationTime = Prelude.Nothing,
+      policyArn = Prelude.Nothing,
+      resiliencyScore = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      appArn = pAppArn_,
+      creationTime = Data._Time Lens.# pCreationTime_,
+      name = pName_
+    }
+
+-- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+app_assessmentSchedule :: Lens.Lens' App (Prelude.Maybe AppAssessmentScheduleType)
+app_assessmentSchedule = Lens.lens (\App' {assessmentSchedule} -> assessmentSchedule) (\s@App' {} a -> s {assessmentSchedule = a} :: App)
+
+-- | The current status of compliance for the resiliency policy.
+app_complianceStatus :: Lens.Lens' App (Prelude.Maybe AppComplianceStatusType)
+app_complianceStatus = Lens.lens (\App' {complianceStatus} -> complianceStatus) (\s@App' {} a -> s {complianceStatus = a} :: App)
+
+-- | The optional description for an app.
+app_description :: Lens.Lens' App (Prelude.Maybe Prelude.Text)
+app_description = Lens.lens (\App' {description} -> description) (\s@App' {} a -> s {description = a} :: App)
+
+-- | The timestamp for the most recent compliance evaluation.
+app_lastAppComplianceEvaluationTime :: Lens.Lens' App (Prelude.Maybe Prelude.UTCTime)
+app_lastAppComplianceEvaluationTime = Lens.lens (\App' {lastAppComplianceEvaluationTime} -> lastAppComplianceEvaluationTime) (\s@App' {} a -> s {lastAppComplianceEvaluationTime = a} :: App) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp for the most recent resiliency score evaluation.
+app_lastResiliencyScoreEvaluationTime :: Lens.Lens' App (Prelude.Maybe Prelude.UTCTime)
+app_lastResiliencyScoreEvaluationTime = Lens.lens (\App' {lastResiliencyScoreEvaluationTime} -> lastResiliencyScoreEvaluationTime) (\s@App' {} a -> s {lastResiliencyScoreEvaluationTime = a} :: App) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+app_policyArn :: Lens.Lens' App (Prelude.Maybe Prelude.Text)
+app_policyArn = Lens.lens (\App' {policyArn} -> policyArn) (\s@App' {} a -> s {policyArn = a} :: App)
+
+-- | The current resiliency score for the application.
+app_resiliencyScore :: Lens.Lens' App (Prelude.Maybe Prelude.Double)
+app_resiliencyScore = Lens.lens (\App' {resiliencyScore} -> resiliencyScore) (\s@App' {} a -> s {resiliencyScore = a} :: App)
+
+-- | The status of the application.
+app_status :: Lens.Lens' App (Prelude.Maybe AppStatusType)
+app_status = Lens.lens (\App' {status} -> status) (\s@App' {} a -> s {status = a} :: App)
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+app_tags :: Lens.Lens' App (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+app_tags = Lens.lens (\App' {tags} -> tags) (\s@App' {} a -> s {tags = a} :: App) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+app_appArn :: Lens.Lens' App Prelude.Text
+app_appArn = Lens.lens (\App' {appArn} -> appArn) (\s@App' {} a -> s {appArn = a} :: App)
+
+-- | The timestamp for when the app was created.
+app_creationTime :: Lens.Lens' App Prelude.UTCTime
+app_creationTime = Lens.lens (\App' {creationTime} -> creationTime) (\s@App' {} a -> s {creationTime = a} :: App) Prelude.. Data._Time
+
+-- | The name for the application.
+app_name :: Lens.Lens' App Prelude.Text
+app_name = Lens.lens (\App' {name} -> name) (\s@App' {} a -> s {name = a} :: App)
+
+instance Data.FromJSON App where
+  parseJSON =
+    Data.withObject
+      "App"
+      ( \x ->
+          App'
+            Prelude.<$> (x Data..:? "assessmentSchedule")
+            Prelude.<*> (x Data..:? "complianceStatus")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastAppComplianceEvaluationTime")
+            Prelude.<*> (x Data..:? "lastResiliencyScoreEvaluationTime")
+            Prelude.<*> (x Data..:? "policyArn")
+            Prelude.<*> (x Data..:? "resiliencyScore")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "appArn")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable App where
+  hashWithSalt _salt App' {..} =
+    _salt
+      `Prelude.hashWithSalt` assessmentSchedule
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastAppComplianceEvaluationTime
+      `Prelude.hashWithSalt` lastResiliencyScoreEvaluationTime
+      `Prelude.hashWithSalt` policyArn
+      `Prelude.hashWithSalt` resiliencyScore
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData App where
+  rnf App' {..} =
+    Prelude.rnf assessmentSchedule
+      `Prelude.seq` Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastAppComplianceEvaluationTime
+      `Prelude.seq` Prelude.rnf lastResiliencyScoreEvaluationTime
+      `Prelude.seq` Prelude.rnf policyArn
+      `Prelude.seq` Prelude.rnf resiliencyScore
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ResilienceHub/Types/AppAssessment.hs b/gen/Amazonka/ResilienceHub/Types/AppAssessment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppAssessment.hs
@@ -0,0 +1,303 @@
+{-# 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.ResilienceHub.Types.AppAssessment
+-- 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.ResilienceHub.Types.AppAssessment 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
+import Amazonka.ResilienceHub.Types.AssessmentInvoker
+import Amazonka.ResilienceHub.Types.AssessmentStatus
+import Amazonka.ResilienceHub.Types.ComplianceStatus
+import Amazonka.ResilienceHub.Types.Cost
+import Amazonka.ResilienceHub.Types.DisruptionCompliance
+import Amazonka.ResilienceHub.Types.DisruptionType
+import Amazonka.ResilienceHub.Types.ResiliencyPolicy
+import Amazonka.ResilienceHub.Types.ResiliencyScore
+import Amazonka.ResilienceHub.Types.ResourceErrorsDetails
+
+-- | Defines an application assessment.
+--
+-- /See:/ 'newAppAssessment' smart constructor.
+data AppAssessment = AppAssessment'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the assessment.
+    assessmentName :: Prelude.Maybe Prelude.Text,
+    -- | The application compliance against the resiliency policy.
+    compliance :: Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance),
+    -- | The current status of the compliance for the resiliency policy.
+    complianceStatus :: Prelude.Maybe ComplianceStatus,
+    -- | The cost for the application.
+    cost :: Prelude.Maybe Cost,
+    -- | The end time for the action.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | Error or warning message from the assessment execution
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The resiliency policy.
+    policy :: Prelude.Maybe ResiliencyPolicy,
+    -- | The current resiliency score for the application.
+    resiliencyScore :: Prelude.Maybe ResiliencyScore,
+    -- | A resource error object containing a list of errors retrieving an
+    -- application\'s resources.
+    resourceErrorsDetails :: Prelude.Maybe ResourceErrorsDetails,
+    -- | The starting time for the action.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text,
+    -- | The current status of the assessment for the resiliency policy.
+    assessmentStatus :: AssessmentStatus,
+    -- | The entity that invoked the assessment.
+    invoker :: AssessmentInvoker
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppAssessment' with all optional fields 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:
+--
+-- 'appArn', 'appAssessment_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'appAssessment_appVersion' - The version of the application.
+--
+-- 'assessmentName', 'appAssessment_assessmentName' - The name of the assessment.
+--
+-- 'compliance', 'appAssessment_compliance' - The application compliance against the resiliency policy.
+--
+-- 'complianceStatus', 'appAssessment_complianceStatus' - The current status of the compliance for the resiliency policy.
+--
+-- 'cost', 'appAssessment_cost' - The cost for the application.
+--
+-- 'endTime', 'appAssessment_endTime' - The end time for the action.
+--
+-- 'message', 'appAssessment_message' - Error or warning message from the assessment execution
+--
+-- 'policy', 'appAssessment_policy' - The resiliency policy.
+--
+-- 'resiliencyScore', 'appAssessment_resiliencyScore' - The current resiliency score for the application.
+--
+-- 'resourceErrorsDetails', 'appAssessment_resourceErrorsDetails' - A resource error object containing a list of errors retrieving an
+-- application\'s resources.
+--
+-- 'startTime', 'appAssessment_startTime' - The starting time for the action.
+--
+-- 'tags', 'appAssessment_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'assessmentArn', 'appAssessment_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'assessmentStatus', 'appAssessment_assessmentStatus' - The current status of the assessment for the resiliency policy.
+--
+-- 'invoker', 'appAssessment_invoker' - The entity that invoked the assessment.
+newAppAssessment ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  -- | 'assessmentStatus'
+  AssessmentStatus ->
+  -- | 'invoker'
+  AssessmentInvoker ->
+  AppAssessment
+newAppAssessment
+  pAssessmentArn_
+  pAssessmentStatus_
+  pInvoker_ =
+    AppAssessment'
+      { appArn = Prelude.Nothing,
+        appVersion = Prelude.Nothing,
+        assessmentName = Prelude.Nothing,
+        compliance = Prelude.Nothing,
+        complianceStatus = Prelude.Nothing,
+        cost = Prelude.Nothing,
+        endTime = Prelude.Nothing,
+        message = Prelude.Nothing,
+        policy = Prelude.Nothing,
+        resiliencyScore = Prelude.Nothing,
+        resourceErrorsDetails = Prelude.Nothing,
+        startTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        assessmentArn = pAssessmentArn_,
+        assessmentStatus = pAssessmentStatus_,
+        invoker = pInvoker_
+      }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+appAssessment_appArn :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
+appAssessment_appArn = Lens.lens (\AppAssessment' {appArn} -> appArn) (\s@AppAssessment' {} a -> s {appArn = a} :: AppAssessment)
+
+-- | The version of the application.
+appAssessment_appVersion :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
+appAssessment_appVersion = Lens.lens (\AppAssessment' {appVersion} -> appVersion) (\s@AppAssessment' {} a -> s {appVersion = a} :: AppAssessment)
+
+-- | The name of the assessment.
+appAssessment_assessmentName :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
+appAssessment_assessmentName = Lens.lens (\AppAssessment' {assessmentName} -> assessmentName) (\s@AppAssessment' {} a -> s {assessmentName = a} :: AppAssessment)
+
+-- | The application compliance against the resiliency policy.
+appAssessment_compliance :: Lens.Lens' AppAssessment (Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance))
+appAssessment_compliance = Lens.lens (\AppAssessment' {compliance} -> compliance) (\s@AppAssessment' {} a -> s {compliance = a} :: AppAssessment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of the compliance for the resiliency policy.
+appAssessment_complianceStatus :: Lens.Lens' AppAssessment (Prelude.Maybe ComplianceStatus)
+appAssessment_complianceStatus = Lens.lens (\AppAssessment' {complianceStatus} -> complianceStatus) (\s@AppAssessment' {} a -> s {complianceStatus = a} :: AppAssessment)
+
+-- | The cost for the application.
+appAssessment_cost :: Lens.Lens' AppAssessment (Prelude.Maybe Cost)
+appAssessment_cost = Lens.lens (\AppAssessment' {cost} -> cost) (\s@AppAssessment' {} a -> s {cost = a} :: AppAssessment)
+
+-- | The end time for the action.
+appAssessment_endTime :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.UTCTime)
+appAssessment_endTime = Lens.lens (\AppAssessment' {endTime} -> endTime) (\s@AppAssessment' {} a -> s {endTime = a} :: AppAssessment) Prelude.. Lens.mapping Data._Time
+
+-- | Error or warning message from the assessment execution
+appAssessment_message :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
+appAssessment_message = Lens.lens (\AppAssessment' {message} -> message) (\s@AppAssessment' {} a -> s {message = a} :: AppAssessment)
+
+-- | The resiliency policy.
+appAssessment_policy :: Lens.Lens' AppAssessment (Prelude.Maybe ResiliencyPolicy)
+appAssessment_policy = Lens.lens (\AppAssessment' {policy} -> policy) (\s@AppAssessment' {} a -> s {policy = a} :: AppAssessment)
+
+-- | The current resiliency score for the application.
+appAssessment_resiliencyScore :: Lens.Lens' AppAssessment (Prelude.Maybe ResiliencyScore)
+appAssessment_resiliencyScore = Lens.lens (\AppAssessment' {resiliencyScore} -> resiliencyScore) (\s@AppAssessment' {} a -> s {resiliencyScore = a} :: AppAssessment)
+
+-- | A resource error object containing a list of errors retrieving an
+-- application\'s resources.
+appAssessment_resourceErrorsDetails :: Lens.Lens' AppAssessment (Prelude.Maybe ResourceErrorsDetails)
+appAssessment_resourceErrorsDetails = Lens.lens (\AppAssessment' {resourceErrorsDetails} -> resourceErrorsDetails) (\s@AppAssessment' {} a -> s {resourceErrorsDetails = a} :: AppAssessment)
+
+-- | The starting time for the action.
+appAssessment_startTime :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.UTCTime)
+appAssessment_startTime = Lens.lens (\AppAssessment' {startTime} -> startTime) (\s@AppAssessment' {} a -> s {startTime = a} :: AppAssessment) Prelude.. Lens.mapping Data._Time
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+appAssessment_tags :: Lens.Lens' AppAssessment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+appAssessment_tags = Lens.lens (\AppAssessment' {tags} -> tags) (\s@AppAssessment' {} a -> s {tags = a} :: AppAssessment) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+appAssessment_assessmentArn :: Lens.Lens' AppAssessment Prelude.Text
+appAssessment_assessmentArn = Lens.lens (\AppAssessment' {assessmentArn} -> assessmentArn) (\s@AppAssessment' {} a -> s {assessmentArn = a} :: AppAssessment)
+
+-- | The current status of the assessment for the resiliency policy.
+appAssessment_assessmentStatus :: Lens.Lens' AppAssessment AssessmentStatus
+appAssessment_assessmentStatus = Lens.lens (\AppAssessment' {assessmentStatus} -> assessmentStatus) (\s@AppAssessment' {} a -> s {assessmentStatus = a} :: AppAssessment)
+
+-- | The entity that invoked the assessment.
+appAssessment_invoker :: Lens.Lens' AppAssessment AssessmentInvoker
+appAssessment_invoker = Lens.lens (\AppAssessment' {invoker} -> invoker) (\s@AppAssessment' {} a -> s {invoker = a} :: AppAssessment)
+
+instance Data.FromJSON AppAssessment where
+  parseJSON =
+    Data.withObject
+      "AppAssessment"
+      ( \x ->
+          AppAssessment'
+            Prelude.<$> (x Data..:? "appArn")
+            Prelude.<*> (x Data..:? "appVersion")
+            Prelude.<*> (x Data..:? "assessmentName")
+            Prelude.<*> (x Data..:? "compliance" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "complianceStatus")
+            Prelude.<*> (x Data..:? "cost")
+            Prelude.<*> (x Data..:? "endTime")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "policy")
+            Prelude.<*> (x Data..:? "resiliencyScore")
+            Prelude.<*> (x Data..:? "resourceErrorsDetails")
+            Prelude.<*> (x Data..:? "startTime")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "assessmentArn")
+            Prelude.<*> (x Data..: "assessmentStatus")
+            Prelude.<*> (x Data..: "invoker")
+      )
+
+instance Prelude.Hashable AppAssessment where
+  hashWithSalt _salt AppAssessment' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appVersion
+      `Prelude.hashWithSalt` assessmentName
+      `Prelude.hashWithSalt` compliance
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` cost
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` resiliencyScore
+      `Prelude.hashWithSalt` resourceErrorsDetails
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assessmentArn
+      `Prelude.hashWithSalt` assessmentStatus
+      `Prelude.hashWithSalt` invoker
+
+instance Prelude.NFData AppAssessment where
+  rnf AppAssessment' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf assessmentName
+      `Prelude.seq` Prelude.rnf compliance
+      `Prelude.seq` Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf cost
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf resiliencyScore
+      `Prelude.seq` Prelude.rnf resourceErrorsDetails
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assessmentArn
+      `Prelude.seq` Prelude.rnf assessmentStatus
+      `Prelude.seq` Prelude.rnf invoker
diff --git a/gen/Amazonka/ResilienceHub/Types/AppAssessmentScheduleType.hs b/gen/Amazonka/ResilienceHub/Types/AppAssessmentScheduleType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppAssessmentScheduleType.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.ResilienceHub.Types.AppAssessmentScheduleType
+-- 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.ResilienceHub.Types.AppAssessmentScheduleType
+  ( AppAssessmentScheduleType
+      ( ..,
+        AppAssessmentScheduleType_Daily,
+        AppAssessmentScheduleType_Disabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppAssessmentScheduleType = AppAssessmentScheduleType'
+  { fromAppAssessmentScheduleType ::
+      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 AppAssessmentScheduleType_Daily :: AppAssessmentScheduleType
+pattern AppAssessmentScheduleType_Daily = AppAssessmentScheduleType' "Daily"
+
+pattern AppAssessmentScheduleType_Disabled :: AppAssessmentScheduleType
+pattern AppAssessmentScheduleType_Disabled = AppAssessmentScheduleType' "Disabled"
+
+{-# COMPLETE
+  AppAssessmentScheduleType_Daily,
+  AppAssessmentScheduleType_Disabled,
+  AppAssessmentScheduleType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/AppAssessmentSummary.hs b/gen/Amazonka/ResilienceHub/Types/AppAssessmentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppAssessmentSummary.hs
@@ -0,0 +1,241 @@
+{-# 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.ResilienceHub.Types.AppAssessmentSummary
+-- 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.ResilienceHub.Types.AppAssessmentSummary 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
+import Amazonka.ResilienceHub.Types.AssessmentInvoker
+import Amazonka.ResilienceHub.Types.AssessmentStatus
+import Amazonka.ResilienceHub.Types.ComplianceStatus
+import Amazonka.ResilienceHub.Types.Cost
+
+-- | Defines an application assessment summary.
+--
+-- /See:/ 'newAppAssessmentSummary' smart constructor.
+data AppAssessmentSummary = AppAssessmentSummary'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the application.
+    appVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the assessment.
+    assessmentName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of compliance for the resiliency policy.
+    complianceStatus :: Prelude.Maybe ComplianceStatus,
+    -- | The cost for the application.
+    cost :: Prelude.Maybe Cost,
+    -- | The end time for the action.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The entity that invoked the assessment.
+    invoker :: Prelude.Maybe AssessmentInvoker,
+    -- | The message from the assessment run.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The current resiliency score for the application.
+    resiliencyScore :: Prelude.Maybe Prelude.Double,
+    -- | The starting time for the action.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text,
+    -- | The current status of the assessment for the resiliency policy.
+    assessmentStatus :: AssessmentStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppAssessmentSummary' with all optional fields 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:
+--
+-- 'appArn', 'appAssessmentSummary_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appVersion', 'appAssessmentSummary_appVersion' - The version of the application.
+--
+-- 'assessmentName', 'appAssessmentSummary_assessmentName' - The name of the assessment.
+--
+-- 'complianceStatus', 'appAssessmentSummary_complianceStatus' - The current status of compliance for the resiliency policy.
+--
+-- 'cost', 'appAssessmentSummary_cost' - The cost for the application.
+--
+-- 'endTime', 'appAssessmentSummary_endTime' - The end time for the action.
+--
+-- 'invoker', 'appAssessmentSummary_invoker' - The entity that invoked the assessment.
+--
+-- 'message', 'appAssessmentSummary_message' - The message from the assessment run.
+--
+-- 'resiliencyScore', 'appAssessmentSummary_resiliencyScore' - The current resiliency score for the application.
+--
+-- 'startTime', 'appAssessmentSummary_startTime' - The starting time for the action.
+--
+-- 'assessmentArn', 'appAssessmentSummary_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'assessmentStatus', 'appAssessmentSummary_assessmentStatus' - The current status of the assessment for the resiliency policy.
+newAppAssessmentSummary ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  -- | 'assessmentStatus'
+  AssessmentStatus ->
+  AppAssessmentSummary
+newAppAssessmentSummary
+  pAssessmentArn_
+  pAssessmentStatus_ =
+    AppAssessmentSummary'
+      { appArn = Prelude.Nothing,
+        appVersion = Prelude.Nothing,
+        assessmentName = Prelude.Nothing,
+        complianceStatus = Prelude.Nothing,
+        cost = Prelude.Nothing,
+        endTime = Prelude.Nothing,
+        invoker = Prelude.Nothing,
+        message = Prelude.Nothing,
+        resiliencyScore = Prelude.Nothing,
+        startTime = Prelude.Nothing,
+        assessmentArn = pAssessmentArn_,
+        assessmentStatus = pAssessmentStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+appAssessmentSummary_appArn :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.Text)
+appAssessmentSummary_appArn = Lens.lens (\AppAssessmentSummary' {appArn} -> appArn) (\s@AppAssessmentSummary' {} a -> s {appArn = a} :: AppAssessmentSummary)
+
+-- | The version of the application.
+appAssessmentSummary_appVersion :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.Text)
+appAssessmentSummary_appVersion = Lens.lens (\AppAssessmentSummary' {appVersion} -> appVersion) (\s@AppAssessmentSummary' {} a -> s {appVersion = a} :: AppAssessmentSummary)
+
+-- | The name of the assessment.
+appAssessmentSummary_assessmentName :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.Text)
+appAssessmentSummary_assessmentName = Lens.lens (\AppAssessmentSummary' {assessmentName} -> assessmentName) (\s@AppAssessmentSummary' {} a -> s {assessmentName = a} :: AppAssessmentSummary)
+
+-- | The current status of compliance for the resiliency policy.
+appAssessmentSummary_complianceStatus :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe ComplianceStatus)
+appAssessmentSummary_complianceStatus = Lens.lens (\AppAssessmentSummary' {complianceStatus} -> complianceStatus) (\s@AppAssessmentSummary' {} a -> s {complianceStatus = a} :: AppAssessmentSummary)
+
+-- | The cost for the application.
+appAssessmentSummary_cost :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Cost)
+appAssessmentSummary_cost = Lens.lens (\AppAssessmentSummary' {cost} -> cost) (\s@AppAssessmentSummary' {} a -> s {cost = a} :: AppAssessmentSummary)
+
+-- | The end time for the action.
+appAssessmentSummary_endTime :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.UTCTime)
+appAssessmentSummary_endTime = Lens.lens (\AppAssessmentSummary' {endTime} -> endTime) (\s@AppAssessmentSummary' {} a -> s {endTime = a} :: AppAssessmentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The entity that invoked the assessment.
+appAssessmentSummary_invoker :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe AssessmentInvoker)
+appAssessmentSummary_invoker = Lens.lens (\AppAssessmentSummary' {invoker} -> invoker) (\s@AppAssessmentSummary' {} a -> s {invoker = a} :: AppAssessmentSummary)
+
+-- | The message from the assessment run.
+appAssessmentSummary_message :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.Text)
+appAssessmentSummary_message = Lens.lens (\AppAssessmentSummary' {message} -> message) (\s@AppAssessmentSummary' {} a -> s {message = a} :: AppAssessmentSummary)
+
+-- | The current resiliency score for the application.
+appAssessmentSummary_resiliencyScore :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.Double)
+appAssessmentSummary_resiliencyScore = Lens.lens (\AppAssessmentSummary' {resiliencyScore} -> resiliencyScore) (\s@AppAssessmentSummary' {} a -> s {resiliencyScore = a} :: AppAssessmentSummary)
+
+-- | The starting time for the action.
+appAssessmentSummary_startTime :: Lens.Lens' AppAssessmentSummary (Prelude.Maybe Prelude.UTCTime)
+appAssessmentSummary_startTime = Lens.lens (\AppAssessmentSummary' {startTime} -> startTime) (\s@AppAssessmentSummary' {} a -> s {startTime = a} :: AppAssessmentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+appAssessmentSummary_assessmentArn :: Lens.Lens' AppAssessmentSummary Prelude.Text
+appAssessmentSummary_assessmentArn = Lens.lens (\AppAssessmentSummary' {assessmentArn} -> assessmentArn) (\s@AppAssessmentSummary' {} a -> s {assessmentArn = a} :: AppAssessmentSummary)
+
+-- | The current status of the assessment for the resiliency policy.
+appAssessmentSummary_assessmentStatus :: Lens.Lens' AppAssessmentSummary AssessmentStatus
+appAssessmentSummary_assessmentStatus = Lens.lens (\AppAssessmentSummary' {assessmentStatus} -> assessmentStatus) (\s@AppAssessmentSummary' {} a -> s {assessmentStatus = a} :: AppAssessmentSummary)
+
+instance Data.FromJSON AppAssessmentSummary where
+  parseJSON =
+    Data.withObject
+      "AppAssessmentSummary"
+      ( \x ->
+          AppAssessmentSummary'
+            Prelude.<$> (x Data..:? "appArn")
+            Prelude.<*> (x Data..:? "appVersion")
+            Prelude.<*> (x Data..:? "assessmentName")
+            Prelude.<*> (x Data..:? "complianceStatus")
+            Prelude.<*> (x Data..:? "cost")
+            Prelude.<*> (x Data..:? "endTime")
+            Prelude.<*> (x Data..:? "invoker")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "resiliencyScore")
+            Prelude.<*> (x Data..:? "startTime")
+            Prelude.<*> (x Data..: "assessmentArn")
+            Prelude.<*> (x Data..: "assessmentStatus")
+      )
+
+instance Prelude.Hashable AppAssessmentSummary where
+  hashWithSalt _salt AppAssessmentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` appVersion
+      `Prelude.hashWithSalt` assessmentName
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` cost
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` invoker
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resiliencyScore
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` assessmentArn
+      `Prelude.hashWithSalt` assessmentStatus
+
+instance Prelude.NFData AppAssessmentSummary where
+  rnf AppAssessmentSummary' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf appVersion
+      `Prelude.seq` Prelude.rnf assessmentName
+      `Prelude.seq` Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf cost
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf invoker
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resiliencyScore
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf assessmentArn
+      `Prelude.seq` Prelude.rnf assessmentStatus
diff --git a/gen/Amazonka/ResilienceHub/Types/AppComplianceStatusType.hs b/gen/Amazonka/ResilienceHub/Types/AppComplianceStatusType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppComplianceStatusType.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.ResilienceHub.Types.AppComplianceStatusType
+-- 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.ResilienceHub.Types.AppComplianceStatusType
+  ( AppComplianceStatusType
+      ( ..,
+        AppComplianceStatusType_ChangesDetected,
+        AppComplianceStatusType_NotAssessed,
+        AppComplianceStatusType_PolicyBreached,
+        AppComplianceStatusType_PolicyMet
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppComplianceStatusType = AppComplianceStatusType'
+  { fromAppComplianceStatusType ::
+      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 AppComplianceStatusType_ChangesDetected :: AppComplianceStatusType
+pattern AppComplianceStatusType_ChangesDetected = AppComplianceStatusType' "ChangesDetected"
+
+pattern AppComplianceStatusType_NotAssessed :: AppComplianceStatusType
+pattern AppComplianceStatusType_NotAssessed = AppComplianceStatusType' "NotAssessed"
+
+pattern AppComplianceStatusType_PolicyBreached :: AppComplianceStatusType
+pattern AppComplianceStatusType_PolicyBreached = AppComplianceStatusType' "PolicyBreached"
+
+pattern AppComplianceStatusType_PolicyMet :: AppComplianceStatusType
+pattern AppComplianceStatusType_PolicyMet = AppComplianceStatusType' "PolicyMet"
+
+{-# COMPLETE
+  AppComplianceStatusType_ChangesDetected,
+  AppComplianceStatusType_NotAssessed,
+  AppComplianceStatusType_PolicyBreached,
+  AppComplianceStatusType_PolicyMet,
+  AppComplianceStatusType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/AppComponent.hs b/gen/Amazonka/ResilienceHub/Types/AppComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppComponent.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.ResilienceHub.Types.AppComponent
+-- 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.ResilienceHub.Types.AppComponent 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
+
+-- | Defines an application component.
+--
+-- /See:/ 'newAppComponent' smart constructor.
+data AppComponent = AppComponent'
+  { -- | The name of the application component.
+    name :: Prelude.Text,
+    -- | The type of application component.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppComponent' with all optional fields 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', 'appComponent_name' - The name of the application component.
+--
+-- 'type'', 'appComponent_type' - The type of application component.
+newAppComponent ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  AppComponent
+newAppComponent pName_ pType_ =
+  AppComponent' {name = pName_, type' = pType_}
+
+-- | The name of the application component.
+appComponent_name :: Lens.Lens' AppComponent Prelude.Text
+appComponent_name = Lens.lens (\AppComponent' {name} -> name) (\s@AppComponent' {} a -> s {name = a} :: AppComponent)
+
+-- | The type of application component.
+appComponent_type :: Lens.Lens' AppComponent Prelude.Text
+appComponent_type = Lens.lens (\AppComponent' {type'} -> type') (\s@AppComponent' {} a -> s {type' = a} :: AppComponent)
+
+instance Data.FromJSON AppComponent where
+  parseJSON =
+    Data.withObject
+      "AppComponent"
+      ( \x ->
+          AppComponent'
+            Prelude.<$> (x Data..: "name")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable AppComponent where
+  hashWithSalt _salt AppComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AppComponent where
+  rnf AppComponent' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ResilienceHub/Types/AppComponentCompliance.hs b/gen/Amazonka/ResilienceHub/Types/AppComponentCompliance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppComponentCompliance.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.Types.AppComponentCompliance
+-- 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.ResilienceHub.Types.AppComponentCompliance 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
+import Amazonka.ResilienceHub.Types.ComplianceStatus
+import Amazonka.ResilienceHub.Types.Cost
+import Amazonka.ResilienceHub.Types.DisruptionCompliance
+import Amazonka.ResilienceHub.Types.DisruptionType
+import Amazonka.ResilienceHub.Types.ResiliencyScore
+
+-- | Defines the compliance of an application component against the
+-- resiliency policy.
+--
+-- /See:/ 'newAppComponentCompliance' smart constructor.
+data AppComponentCompliance = AppComponentCompliance'
+  { -- | The name of the application component.
+    appComponentName :: Prelude.Maybe Prelude.Text,
+    -- | The compliance of the application component against the resiliency
+    -- policy.
+    compliance :: Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance),
+    -- | The cost for the application.
+    cost :: Prelude.Maybe Cost,
+    -- | The compliance message.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The current resiliency score for the application.
+    resiliencyScore :: Prelude.Maybe ResiliencyScore,
+    -- | The status of the action.
+    status :: Prelude.Maybe ComplianceStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppComponentCompliance' with all optional fields 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:
+--
+-- 'appComponentName', 'appComponentCompliance_appComponentName' - The name of the application component.
+--
+-- 'compliance', 'appComponentCompliance_compliance' - The compliance of the application component against the resiliency
+-- policy.
+--
+-- 'cost', 'appComponentCompliance_cost' - The cost for the application.
+--
+-- 'message', 'appComponentCompliance_message' - The compliance message.
+--
+-- 'resiliencyScore', 'appComponentCompliance_resiliencyScore' - The current resiliency score for the application.
+--
+-- 'status', 'appComponentCompliance_status' - The status of the action.
+newAppComponentCompliance ::
+  AppComponentCompliance
+newAppComponentCompliance =
+  AppComponentCompliance'
+    { appComponentName =
+        Prelude.Nothing,
+      compliance = Prelude.Nothing,
+      cost = Prelude.Nothing,
+      message = Prelude.Nothing,
+      resiliencyScore = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The name of the application component.
+appComponentCompliance_appComponentName :: Lens.Lens' AppComponentCompliance (Prelude.Maybe Prelude.Text)
+appComponentCompliance_appComponentName = Lens.lens (\AppComponentCompliance' {appComponentName} -> appComponentName) (\s@AppComponentCompliance' {} a -> s {appComponentName = a} :: AppComponentCompliance)
+
+-- | The compliance of the application component against the resiliency
+-- policy.
+appComponentCompliance_compliance :: Lens.Lens' AppComponentCompliance (Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance))
+appComponentCompliance_compliance = Lens.lens (\AppComponentCompliance' {compliance} -> compliance) (\s@AppComponentCompliance' {} a -> s {compliance = a} :: AppComponentCompliance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The cost for the application.
+appComponentCompliance_cost :: Lens.Lens' AppComponentCompliance (Prelude.Maybe Cost)
+appComponentCompliance_cost = Lens.lens (\AppComponentCompliance' {cost} -> cost) (\s@AppComponentCompliance' {} a -> s {cost = a} :: AppComponentCompliance)
+
+-- | The compliance message.
+appComponentCompliance_message :: Lens.Lens' AppComponentCompliance (Prelude.Maybe Prelude.Text)
+appComponentCompliance_message = Lens.lens (\AppComponentCompliance' {message} -> message) (\s@AppComponentCompliance' {} a -> s {message = a} :: AppComponentCompliance)
+
+-- | The current resiliency score for the application.
+appComponentCompliance_resiliencyScore :: Lens.Lens' AppComponentCompliance (Prelude.Maybe ResiliencyScore)
+appComponentCompliance_resiliencyScore = Lens.lens (\AppComponentCompliance' {resiliencyScore} -> resiliencyScore) (\s@AppComponentCompliance' {} a -> s {resiliencyScore = a} :: AppComponentCompliance)
+
+-- | The status of the action.
+appComponentCompliance_status :: Lens.Lens' AppComponentCompliance (Prelude.Maybe ComplianceStatus)
+appComponentCompliance_status = Lens.lens (\AppComponentCompliance' {status} -> status) (\s@AppComponentCompliance' {} a -> s {status = a} :: AppComponentCompliance)
+
+instance Data.FromJSON AppComponentCompliance where
+  parseJSON =
+    Data.withObject
+      "AppComponentCompliance"
+      ( \x ->
+          AppComponentCompliance'
+            Prelude.<$> (x Data..:? "appComponentName")
+            Prelude.<*> (x Data..:? "compliance" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "cost")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "resiliencyScore")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable AppComponentCompliance where
+  hashWithSalt _salt AppComponentCompliance' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponentName
+      `Prelude.hashWithSalt` compliance
+      `Prelude.hashWithSalt` cost
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resiliencyScore
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData AppComponentCompliance where
+  rnf AppComponentCompliance' {..} =
+    Prelude.rnf appComponentName
+      `Prelude.seq` Prelude.rnf compliance
+      `Prelude.seq` Prelude.rnf cost
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resiliencyScore
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ResilienceHub/Types/AppStatusType.hs b/gen/Amazonka/ResilienceHub/Types/AppStatusType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppStatusType.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.ResilienceHub.Types.AppStatusType
+-- 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.ResilienceHub.Types.AppStatusType
+  ( AppStatusType
+      ( ..,
+        AppStatusType_Active,
+        AppStatusType_Deleting
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppStatusType = AppStatusType'
+  { fromAppStatusType ::
+      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 AppStatusType_Active :: AppStatusType
+pattern AppStatusType_Active = AppStatusType' "Active"
+
+pattern AppStatusType_Deleting :: AppStatusType
+pattern AppStatusType_Deleting = AppStatusType' "Deleting"
+
+{-# COMPLETE
+  AppStatusType_Active,
+  AppStatusType_Deleting,
+  AppStatusType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/AppSummary.hs b/gen/Amazonka/ResilienceHub/Types/AppSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppSummary.hs
@@ -0,0 +1,177 @@
+{-# 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.ResilienceHub.Types.AppSummary
+-- 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.ResilienceHub.Types.AppSummary 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
+import Amazonka.ResilienceHub.Types.AppAssessmentScheduleType
+import Amazonka.ResilienceHub.Types.AppComplianceStatusType
+import Amazonka.ResilienceHub.Types.AppStatusType
+
+-- | Defines an application summary.
+--
+-- /See:/ 'newAppSummary' smart constructor.
+data AppSummary = AppSummary'
+  { -- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+    assessmentSchedule :: Prelude.Maybe AppAssessmentScheduleType,
+    -- | The current status of compliance for the resiliency policy.
+    complianceStatus :: Prelude.Maybe AppComplianceStatusType,
+    -- | The optional description for an app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The current resiliency score for the application.
+    resiliencyScore :: Prelude.Maybe Prelude.Double,
+    -- | The status of the application.
+    status :: Prelude.Maybe AppStatusType,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text,
+    -- | The timestamp for when the app was created.
+    creationTime :: Data.POSIX,
+    -- | The name of the application.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppSummary' with all optional fields 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:
+--
+-- 'assessmentSchedule', 'appSummary_assessmentSchedule' - Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+--
+-- 'complianceStatus', 'appSummary_complianceStatus' - The current status of compliance for the resiliency policy.
+--
+-- 'description', 'appSummary_description' - The optional description for an app.
+--
+-- 'resiliencyScore', 'appSummary_resiliencyScore' - The current resiliency score for the application.
+--
+-- 'status', 'appSummary_status' - The status of the application.
+--
+-- 'appArn', 'appSummary_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'creationTime', 'appSummary_creationTime' - The timestamp for when the app was created.
+--
+-- 'name', 'appSummary_name' - The name of the application.
+newAppSummary ::
+  -- | 'appArn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'name'
+  Prelude.Text ->
+  AppSummary
+newAppSummary pAppArn_ pCreationTime_ pName_ =
+  AppSummary'
+    { assessmentSchedule = Prelude.Nothing,
+      complianceStatus = Prelude.Nothing,
+      description = Prelude.Nothing,
+      resiliencyScore = Prelude.Nothing,
+      status = Prelude.Nothing,
+      appArn = pAppArn_,
+      creationTime = Data._Time Lens.# pCreationTime_,
+      name = pName_
+    }
+
+-- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+appSummary_assessmentSchedule :: Lens.Lens' AppSummary (Prelude.Maybe AppAssessmentScheduleType)
+appSummary_assessmentSchedule = Lens.lens (\AppSummary' {assessmentSchedule} -> assessmentSchedule) (\s@AppSummary' {} a -> s {assessmentSchedule = a} :: AppSummary)
+
+-- | The current status of compliance for the resiliency policy.
+appSummary_complianceStatus :: Lens.Lens' AppSummary (Prelude.Maybe AppComplianceStatusType)
+appSummary_complianceStatus = Lens.lens (\AppSummary' {complianceStatus} -> complianceStatus) (\s@AppSummary' {} a -> s {complianceStatus = a} :: AppSummary)
+
+-- | The optional description for an app.
+appSummary_description :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_description = Lens.lens (\AppSummary' {description} -> description) (\s@AppSummary' {} a -> s {description = a} :: AppSummary)
+
+-- | The current resiliency score for the application.
+appSummary_resiliencyScore :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Double)
+appSummary_resiliencyScore = Lens.lens (\AppSummary' {resiliencyScore} -> resiliencyScore) (\s@AppSummary' {} a -> s {resiliencyScore = a} :: AppSummary)
+
+-- | The status of the application.
+appSummary_status :: Lens.Lens' AppSummary (Prelude.Maybe AppStatusType)
+appSummary_status = Lens.lens (\AppSummary' {status} -> status) (\s@AppSummary' {} a -> s {status = a} :: AppSummary)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+appSummary_appArn :: Lens.Lens' AppSummary Prelude.Text
+appSummary_appArn = Lens.lens (\AppSummary' {appArn} -> appArn) (\s@AppSummary' {} a -> s {appArn = a} :: AppSummary)
+
+-- | The timestamp for when the app was created.
+appSummary_creationTime :: Lens.Lens' AppSummary Prelude.UTCTime
+appSummary_creationTime = Lens.lens (\AppSummary' {creationTime} -> creationTime) (\s@AppSummary' {} a -> s {creationTime = a} :: AppSummary) Prelude.. Data._Time
+
+-- | The name of the application.
+appSummary_name :: Lens.Lens' AppSummary Prelude.Text
+appSummary_name = Lens.lens (\AppSummary' {name} -> name) (\s@AppSummary' {} a -> s {name = a} :: AppSummary)
+
+instance Data.FromJSON AppSummary where
+  parseJSON =
+    Data.withObject
+      "AppSummary"
+      ( \x ->
+          AppSummary'
+            Prelude.<$> (x Data..:? "assessmentSchedule")
+            Prelude.<*> (x Data..:? "complianceStatus")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "resiliencyScore")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..: "appArn")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable AppSummary where
+  hashWithSalt _salt AppSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` assessmentSchedule
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` resiliencyScore
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AppSummary where
+  rnf AppSummary' {..} =
+    Prelude.rnf assessmentSchedule
+      `Prelude.seq` Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf resiliencyScore
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ResilienceHub/Types/AppVersionSummary.hs b/gen/Amazonka/ResilienceHub/Types/AppVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AppVersionSummary.hs
@@ -0,0 +1,70 @@
+{-# 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.ResilienceHub.Types.AppVersionSummary
+-- 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.ResilienceHub.Types.AppVersionSummary 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 version of the application.
+--
+-- /See:/ 'newAppVersionSummary' smart constructor.
+data AppVersionSummary = AppVersionSummary'
+  { -- | The version of the application.
+    appVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppVersionSummary' with all optional fields 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:
+--
+-- 'appVersion', 'appVersionSummary_appVersion' - The version of the application.
+newAppVersionSummary ::
+  -- | 'appVersion'
+  Prelude.Text ->
+  AppVersionSummary
+newAppVersionSummary pAppVersion_ =
+  AppVersionSummary' {appVersion = pAppVersion_}
+
+-- | The version of the application.
+appVersionSummary_appVersion :: Lens.Lens' AppVersionSummary Prelude.Text
+appVersionSummary_appVersion = Lens.lens (\AppVersionSummary' {appVersion} -> appVersion) (\s@AppVersionSummary' {} a -> s {appVersion = a} :: AppVersionSummary)
+
+instance Data.FromJSON AppVersionSummary where
+  parseJSON =
+    Data.withObject
+      "AppVersionSummary"
+      ( \x ->
+          AppVersionSummary'
+            Prelude.<$> (x Data..: "appVersion")
+      )
+
+instance Prelude.Hashable AppVersionSummary where
+  hashWithSalt _salt AppVersionSummary' {..} =
+    _salt `Prelude.hashWithSalt` appVersion
+
+instance Prelude.NFData AppVersionSummary where
+  rnf AppVersionSummary' {..} = Prelude.rnf appVersion
diff --git a/gen/Amazonka/ResilienceHub/Types/AssessmentInvoker.hs b/gen/Amazonka/ResilienceHub/Types/AssessmentInvoker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AssessmentInvoker.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.ResilienceHub.Types.AssessmentInvoker
+-- 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.ResilienceHub.Types.AssessmentInvoker
+  ( AssessmentInvoker
+      ( ..,
+        AssessmentInvoker_System,
+        AssessmentInvoker_User
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssessmentInvoker = AssessmentInvoker'
+  { fromAssessmentInvoker ::
+      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 AssessmentInvoker_System :: AssessmentInvoker
+pattern AssessmentInvoker_System = AssessmentInvoker' "System"
+
+pattern AssessmentInvoker_User :: AssessmentInvoker
+pattern AssessmentInvoker_User = AssessmentInvoker' "User"
+
+{-# COMPLETE
+  AssessmentInvoker_System,
+  AssessmentInvoker_User,
+  AssessmentInvoker'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/AssessmentStatus.hs b/gen/Amazonka/ResilienceHub/Types/AssessmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/AssessmentStatus.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.ResilienceHub.Types.AssessmentStatus
+-- 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.ResilienceHub.Types.AssessmentStatus
+  ( AssessmentStatus
+      ( ..,
+        AssessmentStatus_Failed,
+        AssessmentStatus_InProgress,
+        AssessmentStatus_Pending,
+        AssessmentStatus_Success
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssessmentStatus = AssessmentStatus'
+  { fromAssessmentStatus ::
+      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 AssessmentStatus_Failed :: AssessmentStatus
+pattern AssessmentStatus_Failed = AssessmentStatus' "Failed"
+
+pattern AssessmentStatus_InProgress :: AssessmentStatus
+pattern AssessmentStatus_InProgress = AssessmentStatus' "InProgress"
+
+pattern AssessmentStatus_Pending :: AssessmentStatus
+pattern AssessmentStatus_Pending = AssessmentStatus' "Pending"
+
+pattern AssessmentStatus_Success :: AssessmentStatus
+pattern AssessmentStatus_Success = AssessmentStatus' "Success"
+
+{-# COMPLETE
+  AssessmentStatus_Failed,
+  AssessmentStatus_InProgress,
+  AssessmentStatus_Pending,
+  AssessmentStatus_Success,
+  AssessmentStatus'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/ComplianceStatus.hs b/gen/Amazonka/ResilienceHub/Types/ComplianceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ComplianceStatus.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.ResilienceHub.Types.ComplianceStatus
+-- 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.ResilienceHub.Types.ComplianceStatus
+  ( ComplianceStatus
+      ( ..,
+        ComplianceStatus_PolicyBreached,
+        ComplianceStatus_PolicyMet
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ComplianceStatus = ComplianceStatus'
+  { fromComplianceStatus ::
+      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 ComplianceStatus_PolicyBreached :: ComplianceStatus
+pattern ComplianceStatus_PolicyBreached = ComplianceStatus' "PolicyBreached"
+
+pattern ComplianceStatus_PolicyMet :: ComplianceStatus
+pattern ComplianceStatus_PolicyMet = ComplianceStatus' "PolicyMet"
+
+{-# COMPLETE
+  ComplianceStatus_PolicyBreached,
+  ComplianceStatus_PolicyMet,
+  ComplianceStatus'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/ComponentRecommendation.hs b/gen/Amazonka/ResilienceHub/Types/ComponentRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ComponentRecommendation.hs
@@ -0,0 +1,110 @@
+{-# 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.ResilienceHub.Types.ComponentRecommendation
+-- 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.ResilienceHub.Types.ComponentRecommendation 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
+import Amazonka.ResilienceHub.Types.ConfigRecommendation
+import Amazonka.ResilienceHub.Types.RecommendationComplianceStatus
+
+-- | Defines recommendations for a Resilience Hub application component,
+-- returned as an object. This object contains component names,
+-- configuration recommendations, and recommendation statuses.
+--
+-- /See:/ 'newComponentRecommendation' smart constructor.
+data ComponentRecommendation = ComponentRecommendation'
+  { -- | The name of the application component.
+    appComponentName :: Prelude.Text,
+    -- | The list of recommendations.
+    configRecommendations :: [ConfigRecommendation],
+    -- | The recommendation status.
+    recommendationStatus :: RecommendationComplianceStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentRecommendation' with all optional fields 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:
+--
+-- 'appComponentName', 'componentRecommendation_appComponentName' - The name of the application component.
+--
+-- 'configRecommendations', 'componentRecommendation_configRecommendations' - The list of recommendations.
+--
+-- 'recommendationStatus', 'componentRecommendation_recommendationStatus' - The recommendation status.
+newComponentRecommendation ::
+  -- | 'appComponentName'
+  Prelude.Text ->
+  -- | 'recommendationStatus'
+  RecommendationComplianceStatus ->
+  ComponentRecommendation
+newComponentRecommendation
+  pAppComponentName_
+  pRecommendationStatus_ =
+    ComponentRecommendation'
+      { appComponentName =
+          pAppComponentName_,
+        configRecommendations = Prelude.mempty,
+        recommendationStatus = pRecommendationStatus_
+      }
+
+-- | The name of the application component.
+componentRecommendation_appComponentName :: Lens.Lens' ComponentRecommendation Prelude.Text
+componentRecommendation_appComponentName = Lens.lens (\ComponentRecommendation' {appComponentName} -> appComponentName) (\s@ComponentRecommendation' {} a -> s {appComponentName = a} :: ComponentRecommendation)
+
+-- | The list of recommendations.
+componentRecommendation_configRecommendations :: Lens.Lens' ComponentRecommendation [ConfigRecommendation]
+componentRecommendation_configRecommendations = Lens.lens (\ComponentRecommendation' {configRecommendations} -> configRecommendations) (\s@ComponentRecommendation' {} a -> s {configRecommendations = a} :: ComponentRecommendation) Prelude.. Lens.coerced
+
+-- | The recommendation status.
+componentRecommendation_recommendationStatus :: Lens.Lens' ComponentRecommendation RecommendationComplianceStatus
+componentRecommendation_recommendationStatus = Lens.lens (\ComponentRecommendation' {recommendationStatus} -> recommendationStatus) (\s@ComponentRecommendation' {} a -> s {recommendationStatus = a} :: ComponentRecommendation)
+
+instance Data.FromJSON ComponentRecommendation where
+  parseJSON =
+    Data.withObject
+      "ComponentRecommendation"
+      ( \x ->
+          ComponentRecommendation'
+            Prelude.<$> (x Data..: "appComponentName")
+            Prelude.<*> ( x
+                            Data..:? "configRecommendations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "recommendationStatus")
+      )
+
+instance Prelude.Hashable ComponentRecommendation where
+  hashWithSalt _salt ComponentRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponentName
+      `Prelude.hashWithSalt` configRecommendations
+      `Prelude.hashWithSalt` recommendationStatus
+
+instance Prelude.NFData ComponentRecommendation where
+  rnf ComponentRecommendation' {..} =
+    Prelude.rnf appComponentName
+      `Prelude.seq` Prelude.rnf configRecommendations
+      `Prelude.seq` Prelude.rnf recommendationStatus
diff --git a/gen/Amazonka/ResilienceHub/Types/ConfigRecommendation.hs b/gen/Amazonka/ResilienceHub/Types/ConfigRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ConfigRecommendation.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.ResilienceHub.Types.ConfigRecommendation
+-- 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.ResilienceHub.Types.ConfigRecommendation 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
+import Amazonka.ResilienceHub.Types.ConfigRecommendationOptimizationType
+import Amazonka.ResilienceHub.Types.Cost
+import Amazonka.ResilienceHub.Types.DisruptionCompliance
+import Amazonka.ResilienceHub.Types.DisruptionType
+import Amazonka.ResilienceHub.Types.HaArchitecture
+import Amazonka.ResilienceHub.Types.RecommendationDisruptionCompliance
+
+-- | Defines a configuration recommendation.
+--
+-- /See:/ 'newConfigRecommendation' smart constructor.
+data ConfigRecommendation = ConfigRecommendation'
+  { -- | The application component name.
+    appComponentName :: Prelude.Maybe Prelude.Text,
+    -- | The current compliance against the resiliency policy before applying the
+    -- configuration change.
+    compliance :: Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance),
+    -- | The cost for the application.
+    cost :: Prelude.Maybe Cost,
+    -- | The optional description for an app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The architecture type.
+    haArchitecture :: Prelude.Maybe HaArchitecture,
+    -- | The expected compliance against the resiliency policy after applying the
+    -- configuration change.
+    recommendationCompliance :: Prelude.Maybe (Prelude.HashMap DisruptionType RecommendationDisruptionCompliance),
+    -- | List of the suggested configuration changes.
+    suggestedChanges :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the recommendation configuration.
+    name :: Prelude.Text,
+    -- | The type of optimization.
+    optimizationType :: ConfigRecommendationOptimizationType,
+    -- | The reference identifier for the recommendation configuration.
+    referenceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigRecommendation' with all optional fields 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:
+--
+-- 'appComponentName', 'configRecommendation_appComponentName' - The application component name.
+--
+-- 'compliance', 'configRecommendation_compliance' - The current compliance against the resiliency policy before applying the
+-- configuration change.
+--
+-- 'cost', 'configRecommendation_cost' - The cost for the application.
+--
+-- 'description', 'configRecommendation_description' - The optional description for an app.
+--
+-- 'haArchitecture', 'configRecommendation_haArchitecture' - The architecture type.
+--
+-- 'recommendationCompliance', 'configRecommendation_recommendationCompliance' - The expected compliance against the resiliency policy after applying the
+-- configuration change.
+--
+-- 'suggestedChanges', 'configRecommendation_suggestedChanges' - List of the suggested configuration changes.
+--
+-- 'name', 'configRecommendation_name' - The name of the recommendation configuration.
+--
+-- 'optimizationType', 'configRecommendation_optimizationType' - The type of optimization.
+--
+-- 'referenceId', 'configRecommendation_referenceId' - The reference identifier for the recommendation configuration.
+newConfigRecommendation ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'optimizationType'
+  ConfigRecommendationOptimizationType ->
+  -- | 'referenceId'
+  Prelude.Text ->
+  ConfigRecommendation
+newConfigRecommendation
+  pName_
+  pOptimizationType_
+  pReferenceId_ =
+    ConfigRecommendation'
+      { appComponentName =
+          Prelude.Nothing,
+        compliance = Prelude.Nothing,
+        cost = Prelude.Nothing,
+        description = Prelude.Nothing,
+        haArchitecture = Prelude.Nothing,
+        recommendationCompliance = Prelude.Nothing,
+        suggestedChanges = Prelude.Nothing,
+        name = pName_,
+        optimizationType = pOptimizationType_,
+        referenceId = pReferenceId_
+      }
+
+-- | The application component name.
+configRecommendation_appComponentName :: Lens.Lens' ConfigRecommendation (Prelude.Maybe Prelude.Text)
+configRecommendation_appComponentName = Lens.lens (\ConfigRecommendation' {appComponentName} -> appComponentName) (\s@ConfigRecommendation' {} a -> s {appComponentName = a} :: ConfigRecommendation)
+
+-- | The current compliance against the resiliency policy before applying the
+-- configuration change.
+configRecommendation_compliance :: Lens.Lens' ConfigRecommendation (Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance))
+configRecommendation_compliance = Lens.lens (\ConfigRecommendation' {compliance} -> compliance) (\s@ConfigRecommendation' {} a -> s {compliance = a} :: ConfigRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The cost for the application.
+configRecommendation_cost :: Lens.Lens' ConfigRecommendation (Prelude.Maybe Cost)
+configRecommendation_cost = Lens.lens (\ConfigRecommendation' {cost} -> cost) (\s@ConfigRecommendation' {} a -> s {cost = a} :: ConfigRecommendation)
+
+-- | The optional description for an app.
+configRecommendation_description :: Lens.Lens' ConfigRecommendation (Prelude.Maybe Prelude.Text)
+configRecommendation_description = Lens.lens (\ConfigRecommendation' {description} -> description) (\s@ConfigRecommendation' {} a -> s {description = a} :: ConfigRecommendation)
+
+-- | The architecture type.
+configRecommendation_haArchitecture :: Lens.Lens' ConfigRecommendation (Prelude.Maybe HaArchitecture)
+configRecommendation_haArchitecture = Lens.lens (\ConfigRecommendation' {haArchitecture} -> haArchitecture) (\s@ConfigRecommendation' {} a -> s {haArchitecture = a} :: ConfigRecommendation)
+
+-- | The expected compliance against the resiliency policy after applying the
+-- configuration change.
+configRecommendation_recommendationCompliance :: Lens.Lens' ConfigRecommendation (Prelude.Maybe (Prelude.HashMap DisruptionType RecommendationDisruptionCompliance))
+configRecommendation_recommendationCompliance = Lens.lens (\ConfigRecommendation' {recommendationCompliance} -> recommendationCompliance) (\s@ConfigRecommendation' {} a -> s {recommendationCompliance = a} :: ConfigRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | List of the suggested configuration changes.
+configRecommendation_suggestedChanges :: Lens.Lens' ConfigRecommendation (Prelude.Maybe [Prelude.Text])
+configRecommendation_suggestedChanges = Lens.lens (\ConfigRecommendation' {suggestedChanges} -> suggestedChanges) (\s@ConfigRecommendation' {} a -> s {suggestedChanges = a} :: ConfigRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the recommendation configuration.
+configRecommendation_name :: Lens.Lens' ConfigRecommendation Prelude.Text
+configRecommendation_name = Lens.lens (\ConfigRecommendation' {name} -> name) (\s@ConfigRecommendation' {} a -> s {name = a} :: ConfigRecommendation)
+
+-- | The type of optimization.
+configRecommendation_optimizationType :: Lens.Lens' ConfigRecommendation ConfigRecommendationOptimizationType
+configRecommendation_optimizationType = Lens.lens (\ConfigRecommendation' {optimizationType} -> optimizationType) (\s@ConfigRecommendation' {} a -> s {optimizationType = a} :: ConfigRecommendation)
+
+-- | The reference identifier for the recommendation configuration.
+configRecommendation_referenceId :: Lens.Lens' ConfigRecommendation Prelude.Text
+configRecommendation_referenceId = Lens.lens (\ConfigRecommendation' {referenceId} -> referenceId) (\s@ConfigRecommendation' {} a -> s {referenceId = a} :: ConfigRecommendation)
+
+instance Data.FromJSON ConfigRecommendation where
+  parseJSON =
+    Data.withObject
+      "ConfigRecommendation"
+      ( \x ->
+          ConfigRecommendation'
+            Prelude.<$> (x Data..:? "appComponentName")
+            Prelude.<*> (x Data..:? "compliance" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "cost")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "haArchitecture")
+            Prelude.<*> ( x
+                            Data..:? "recommendationCompliance"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "suggestedChanges"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "optimizationType")
+            Prelude.<*> (x Data..: "referenceId")
+      )
+
+instance Prelude.Hashable ConfigRecommendation where
+  hashWithSalt _salt ConfigRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponentName
+      `Prelude.hashWithSalt` compliance
+      `Prelude.hashWithSalt` cost
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` haArchitecture
+      `Prelude.hashWithSalt` recommendationCompliance
+      `Prelude.hashWithSalt` suggestedChanges
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` optimizationType
+      `Prelude.hashWithSalt` referenceId
+
+instance Prelude.NFData ConfigRecommendation where
+  rnf ConfigRecommendation' {..} =
+    Prelude.rnf appComponentName
+      `Prelude.seq` Prelude.rnf compliance
+      `Prelude.seq` Prelude.rnf cost
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf haArchitecture
+      `Prelude.seq` Prelude.rnf recommendationCompliance
+      `Prelude.seq` Prelude.rnf suggestedChanges
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf optimizationType
+      `Prelude.seq` Prelude.rnf referenceId
diff --git a/gen/Amazonka/ResilienceHub/Types/ConfigRecommendationOptimizationType.hs b/gen/Amazonka/ResilienceHub/Types/ConfigRecommendationOptimizationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ConfigRecommendationOptimizationType.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.Types.ConfigRecommendationOptimizationType
+-- 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.ResilienceHub.Types.ConfigRecommendationOptimizationType
+  ( ConfigRecommendationOptimizationType
+      ( ..,
+        ConfigRecommendationOptimizationType_BestAZRecovery,
+        ConfigRecommendationOptimizationType_BestAttainable,
+        ConfigRecommendationOptimizationType_BestRegionRecovery,
+        ConfigRecommendationOptimizationType_LeastChange,
+        ConfigRecommendationOptimizationType_LeastCost,
+        ConfigRecommendationOptimizationType_LeastErrors
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfigRecommendationOptimizationType = ConfigRecommendationOptimizationType'
+  { fromConfigRecommendationOptimizationType ::
+      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 ConfigRecommendationOptimizationType_BestAZRecovery :: ConfigRecommendationOptimizationType
+pattern ConfigRecommendationOptimizationType_BestAZRecovery = ConfigRecommendationOptimizationType' "BestAZRecovery"
+
+pattern ConfigRecommendationOptimizationType_BestAttainable :: ConfigRecommendationOptimizationType
+pattern ConfigRecommendationOptimizationType_BestAttainable = ConfigRecommendationOptimizationType' "BestAttainable"
+
+pattern ConfigRecommendationOptimizationType_BestRegionRecovery :: ConfigRecommendationOptimizationType
+pattern ConfigRecommendationOptimizationType_BestRegionRecovery = ConfigRecommendationOptimizationType' "BestRegionRecovery"
+
+pattern ConfigRecommendationOptimizationType_LeastChange :: ConfigRecommendationOptimizationType
+pattern ConfigRecommendationOptimizationType_LeastChange = ConfigRecommendationOptimizationType' "LeastChange"
+
+pattern ConfigRecommendationOptimizationType_LeastCost :: ConfigRecommendationOptimizationType
+pattern ConfigRecommendationOptimizationType_LeastCost = ConfigRecommendationOptimizationType' "LeastCost"
+
+pattern ConfigRecommendationOptimizationType_LeastErrors :: ConfigRecommendationOptimizationType
+pattern ConfigRecommendationOptimizationType_LeastErrors = ConfigRecommendationOptimizationType' "LeastErrors"
+
+{-# COMPLETE
+  ConfigRecommendationOptimizationType_BestAZRecovery,
+  ConfigRecommendationOptimizationType_BestAttainable,
+  ConfigRecommendationOptimizationType_BestRegionRecovery,
+  ConfigRecommendationOptimizationType_LeastChange,
+  ConfigRecommendationOptimizationType_LeastCost,
+  ConfigRecommendationOptimizationType_LeastErrors,
+  ConfigRecommendationOptimizationType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/Cost.hs b/gen/Amazonka/ResilienceHub/Types/Cost.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/Cost.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.ResilienceHub.Types.Cost
+-- 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.ResilienceHub.Types.Cost 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
+import Amazonka.ResilienceHub.Types.CostFrequency
+
+-- | Defines a cost object.
+--
+-- /See:/ 'newCost' smart constructor.
+data Cost = Cost'
+  { -- | The cost amount.
+    amount :: Prelude.Double,
+    -- | The cost currency, for example @USD@.
+    currency :: Prelude.Text,
+    -- | The cost frequency.
+    frequency :: CostFrequency
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Cost' with all optional fields 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:
+--
+-- 'amount', 'cost_amount' - The cost amount.
+--
+-- 'currency', 'cost_currency' - The cost currency, for example @USD@.
+--
+-- 'frequency', 'cost_frequency' - The cost frequency.
+newCost ::
+  -- | 'amount'
+  Prelude.Double ->
+  -- | 'currency'
+  Prelude.Text ->
+  -- | 'frequency'
+  CostFrequency ->
+  Cost
+newCost pAmount_ pCurrency_ pFrequency_ =
+  Cost'
+    { amount = pAmount_,
+      currency = pCurrency_,
+      frequency = pFrequency_
+    }
+
+-- | The cost amount.
+cost_amount :: Lens.Lens' Cost Prelude.Double
+cost_amount = Lens.lens (\Cost' {amount} -> amount) (\s@Cost' {} a -> s {amount = a} :: Cost)
+
+-- | The cost currency, for example @USD@.
+cost_currency :: Lens.Lens' Cost Prelude.Text
+cost_currency = Lens.lens (\Cost' {currency} -> currency) (\s@Cost' {} a -> s {currency = a} :: Cost)
+
+-- | The cost frequency.
+cost_frequency :: Lens.Lens' Cost CostFrequency
+cost_frequency = Lens.lens (\Cost' {frequency} -> frequency) (\s@Cost' {} a -> s {frequency = a} :: Cost)
+
+instance Data.FromJSON Cost where
+  parseJSON =
+    Data.withObject
+      "Cost"
+      ( \x ->
+          Cost'
+            Prelude.<$> (x Data..: "amount")
+            Prelude.<*> (x Data..: "currency")
+            Prelude.<*> (x Data..: "frequency")
+      )
+
+instance Prelude.Hashable Cost where
+  hashWithSalt _salt Cost' {..} =
+    _salt
+      `Prelude.hashWithSalt` amount
+      `Prelude.hashWithSalt` currency
+      `Prelude.hashWithSalt` frequency
+
+instance Prelude.NFData Cost where
+  rnf Cost' {..} =
+    Prelude.rnf amount
+      `Prelude.seq` Prelude.rnf currency
+      `Prelude.seq` Prelude.rnf frequency
diff --git a/gen/Amazonka/ResilienceHub/Types/CostFrequency.hs b/gen/Amazonka/ResilienceHub/Types/CostFrequency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/CostFrequency.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.ResilienceHub.Types.CostFrequency
+-- 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.ResilienceHub.Types.CostFrequency
+  ( CostFrequency
+      ( ..,
+        CostFrequency_Daily,
+        CostFrequency_Hourly,
+        CostFrequency_Monthly,
+        CostFrequency_Yearly
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CostFrequency = CostFrequency'
+  { fromCostFrequency ::
+      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 CostFrequency_Daily :: CostFrequency
+pattern CostFrequency_Daily = CostFrequency' "Daily"
+
+pattern CostFrequency_Hourly :: CostFrequency
+pattern CostFrequency_Hourly = CostFrequency' "Hourly"
+
+pattern CostFrequency_Monthly :: CostFrequency
+pattern CostFrequency_Monthly = CostFrequency' "Monthly"
+
+pattern CostFrequency_Yearly :: CostFrequency
+pattern CostFrequency_Yearly = CostFrequency' "Yearly"
+
+{-# COMPLETE
+  CostFrequency_Daily,
+  CostFrequency_Hourly,
+  CostFrequency_Monthly,
+  CostFrequency_Yearly,
+  CostFrequency'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/DataLocationConstraint.hs b/gen/Amazonka/ResilienceHub/Types/DataLocationConstraint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/DataLocationConstraint.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.ResilienceHub.Types.DataLocationConstraint
+-- 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.ResilienceHub.Types.DataLocationConstraint
+  ( DataLocationConstraint
+      ( ..,
+        DataLocationConstraint_AnyLocation,
+        DataLocationConstraint_SameContinent,
+        DataLocationConstraint_SameCountry
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataLocationConstraint = DataLocationConstraint'
+  { fromDataLocationConstraint ::
+      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 DataLocationConstraint_AnyLocation :: DataLocationConstraint
+pattern DataLocationConstraint_AnyLocation = DataLocationConstraint' "AnyLocation"
+
+pattern DataLocationConstraint_SameContinent :: DataLocationConstraint
+pattern DataLocationConstraint_SameContinent = DataLocationConstraint' "SameContinent"
+
+pattern DataLocationConstraint_SameCountry :: DataLocationConstraint
+pattern DataLocationConstraint_SameCountry = DataLocationConstraint' "SameCountry"
+
+{-# COMPLETE
+  DataLocationConstraint_AnyLocation,
+  DataLocationConstraint_SameContinent,
+  DataLocationConstraint_SameCountry,
+  DataLocationConstraint'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/DisruptionCompliance.hs b/gen/Amazonka/ResilienceHub/Types/DisruptionCompliance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/DisruptionCompliance.hs
@@ -0,0 +1,184 @@
+{-# 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.ResilienceHub.Types.DisruptionCompliance
+-- 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.ResilienceHub.Types.DisruptionCompliance 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
+import Amazonka.ResilienceHub.Types.ComplianceStatus
+
+-- | Defines the compliance against the resiliency policy for a disruption.
+--
+-- /See:/ 'newDisruptionCompliance' smart constructor.
+data DisruptionCompliance = DisruptionCompliance'
+  { -- | The Recovery Point Objective (RPO) that is achievable, in seconds.
+    achievableRpoInSecs :: Prelude.Maybe Prelude.Natural,
+    -- | The Recovery Time Objective (RTO) that is achievable, in seconds
+    achievableRtoInSecs :: Prelude.Maybe Prelude.Natural,
+    -- | The current RPO, in seconds.
+    currentRpoInSecs :: Prelude.Maybe Prelude.Natural,
+    -- | The current RTO, in seconds.
+    currentRtoInSecs :: Prelude.Maybe Prelude.Natural,
+    -- | The disruption compliance message.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The RPO description.
+    rpoDescription :: Prelude.Maybe Prelude.Text,
+    -- | The RPO reference identifier.
+    rpoReferenceId :: Prelude.Maybe Prelude.Text,
+    -- | The RTO description.
+    rtoDescription :: Prelude.Maybe Prelude.Text,
+    -- | The RTO reference identifier.
+    rtoReferenceId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of compliance for the resiliency policy.
+    complianceStatus :: ComplianceStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisruptionCompliance' with all optional fields 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:
+--
+-- 'achievableRpoInSecs', 'disruptionCompliance_achievableRpoInSecs' - The Recovery Point Objective (RPO) that is achievable, in seconds.
+--
+-- 'achievableRtoInSecs', 'disruptionCompliance_achievableRtoInSecs' - The Recovery Time Objective (RTO) that is achievable, in seconds
+--
+-- 'currentRpoInSecs', 'disruptionCompliance_currentRpoInSecs' - The current RPO, in seconds.
+--
+-- 'currentRtoInSecs', 'disruptionCompliance_currentRtoInSecs' - The current RTO, in seconds.
+--
+-- 'message', 'disruptionCompliance_message' - The disruption compliance message.
+--
+-- 'rpoDescription', 'disruptionCompliance_rpoDescription' - The RPO description.
+--
+-- 'rpoReferenceId', 'disruptionCompliance_rpoReferenceId' - The RPO reference identifier.
+--
+-- 'rtoDescription', 'disruptionCompliance_rtoDescription' - The RTO description.
+--
+-- 'rtoReferenceId', 'disruptionCompliance_rtoReferenceId' - The RTO reference identifier.
+--
+-- 'complianceStatus', 'disruptionCompliance_complianceStatus' - The current status of compliance for the resiliency policy.
+newDisruptionCompliance ::
+  -- | 'complianceStatus'
+  ComplianceStatus ->
+  DisruptionCompliance
+newDisruptionCompliance pComplianceStatus_ =
+  DisruptionCompliance'
+    { achievableRpoInSecs =
+        Prelude.Nothing,
+      achievableRtoInSecs = Prelude.Nothing,
+      currentRpoInSecs = Prelude.Nothing,
+      currentRtoInSecs = Prelude.Nothing,
+      message = Prelude.Nothing,
+      rpoDescription = Prelude.Nothing,
+      rpoReferenceId = Prelude.Nothing,
+      rtoDescription = Prelude.Nothing,
+      rtoReferenceId = Prelude.Nothing,
+      complianceStatus = pComplianceStatus_
+    }
+
+-- | The Recovery Point Objective (RPO) that is achievable, in seconds.
+disruptionCompliance_achievableRpoInSecs :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Natural)
+disruptionCompliance_achievableRpoInSecs = Lens.lens (\DisruptionCompliance' {achievableRpoInSecs} -> achievableRpoInSecs) (\s@DisruptionCompliance' {} a -> s {achievableRpoInSecs = a} :: DisruptionCompliance)
+
+-- | The Recovery Time Objective (RTO) that is achievable, in seconds
+disruptionCompliance_achievableRtoInSecs :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Natural)
+disruptionCompliance_achievableRtoInSecs = Lens.lens (\DisruptionCompliance' {achievableRtoInSecs} -> achievableRtoInSecs) (\s@DisruptionCompliance' {} a -> s {achievableRtoInSecs = a} :: DisruptionCompliance)
+
+-- | The current RPO, in seconds.
+disruptionCompliance_currentRpoInSecs :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Natural)
+disruptionCompliance_currentRpoInSecs = Lens.lens (\DisruptionCompliance' {currentRpoInSecs} -> currentRpoInSecs) (\s@DisruptionCompliance' {} a -> s {currentRpoInSecs = a} :: DisruptionCompliance)
+
+-- | The current RTO, in seconds.
+disruptionCompliance_currentRtoInSecs :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Natural)
+disruptionCompliance_currentRtoInSecs = Lens.lens (\DisruptionCompliance' {currentRtoInSecs} -> currentRtoInSecs) (\s@DisruptionCompliance' {} a -> s {currentRtoInSecs = a} :: DisruptionCompliance)
+
+-- | The disruption compliance message.
+disruptionCompliance_message :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Text)
+disruptionCompliance_message = Lens.lens (\DisruptionCompliance' {message} -> message) (\s@DisruptionCompliance' {} a -> s {message = a} :: DisruptionCompliance)
+
+-- | The RPO description.
+disruptionCompliance_rpoDescription :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Text)
+disruptionCompliance_rpoDescription = Lens.lens (\DisruptionCompliance' {rpoDescription} -> rpoDescription) (\s@DisruptionCompliance' {} a -> s {rpoDescription = a} :: DisruptionCompliance)
+
+-- | The RPO reference identifier.
+disruptionCompliance_rpoReferenceId :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Text)
+disruptionCompliance_rpoReferenceId = Lens.lens (\DisruptionCompliance' {rpoReferenceId} -> rpoReferenceId) (\s@DisruptionCompliance' {} a -> s {rpoReferenceId = a} :: DisruptionCompliance)
+
+-- | The RTO description.
+disruptionCompliance_rtoDescription :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Text)
+disruptionCompliance_rtoDescription = Lens.lens (\DisruptionCompliance' {rtoDescription} -> rtoDescription) (\s@DisruptionCompliance' {} a -> s {rtoDescription = a} :: DisruptionCompliance)
+
+-- | The RTO reference identifier.
+disruptionCompliance_rtoReferenceId :: Lens.Lens' DisruptionCompliance (Prelude.Maybe Prelude.Text)
+disruptionCompliance_rtoReferenceId = Lens.lens (\DisruptionCompliance' {rtoReferenceId} -> rtoReferenceId) (\s@DisruptionCompliance' {} a -> s {rtoReferenceId = a} :: DisruptionCompliance)
+
+-- | The current status of compliance for the resiliency policy.
+disruptionCompliance_complianceStatus :: Lens.Lens' DisruptionCompliance ComplianceStatus
+disruptionCompliance_complianceStatus = Lens.lens (\DisruptionCompliance' {complianceStatus} -> complianceStatus) (\s@DisruptionCompliance' {} a -> s {complianceStatus = a} :: DisruptionCompliance)
+
+instance Data.FromJSON DisruptionCompliance where
+  parseJSON =
+    Data.withObject
+      "DisruptionCompliance"
+      ( \x ->
+          DisruptionCompliance'
+            Prelude.<$> (x Data..:? "achievableRpoInSecs")
+            Prelude.<*> (x Data..:? "achievableRtoInSecs")
+            Prelude.<*> (x Data..:? "currentRpoInSecs")
+            Prelude.<*> (x Data..:? "currentRtoInSecs")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "rpoDescription")
+            Prelude.<*> (x Data..:? "rpoReferenceId")
+            Prelude.<*> (x Data..:? "rtoDescription")
+            Prelude.<*> (x Data..:? "rtoReferenceId")
+            Prelude.<*> (x Data..: "complianceStatus")
+      )
+
+instance Prelude.Hashable DisruptionCompliance where
+  hashWithSalt _salt DisruptionCompliance' {..} =
+    _salt
+      `Prelude.hashWithSalt` achievableRpoInSecs
+      `Prelude.hashWithSalt` achievableRtoInSecs
+      `Prelude.hashWithSalt` currentRpoInSecs
+      `Prelude.hashWithSalt` currentRtoInSecs
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` rpoDescription
+      `Prelude.hashWithSalt` rpoReferenceId
+      `Prelude.hashWithSalt` rtoDescription
+      `Prelude.hashWithSalt` rtoReferenceId
+      `Prelude.hashWithSalt` complianceStatus
+
+instance Prelude.NFData DisruptionCompliance where
+  rnf DisruptionCompliance' {..} =
+    Prelude.rnf achievableRpoInSecs
+      `Prelude.seq` Prelude.rnf achievableRtoInSecs
+      `Prelude.seq` Prelude.rnf currentRpoInSecs
+      `Prelude.seq` Prelude.rnf currentRtoInSecs
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf rpoDescription
+      `Prelude.seq` Prelude.rnf rpoReferenceId
+      `Prelude.seq` Prelude.rnf rtoDescription
+      `Prelude.seq` Prelude.rnf rtoReferenceId
+      `Prelude.seq` Prelude.rnf complianceStatus
diff --git a/gen/Amazonka/ResilienceHub/Types/DisruptionType.hs b/gen/Amazonka/ResilienceHub/Types/DisruptionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/DisruptionType.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.ResilienceHub.Types.DisruptionType
+-- 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.ResilienceHub.Types.DisruptionType
+  ( DisruptionType
+      ( ..,
+        DisruptionType_AZ,
+        DisruptionType_Hardware,
+        DisruptionType_Region,
+        DisruptionType_Software
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DisruptionType = DisruptionType'
+  { fromDisruptionType ::
+      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 DisruptionType_AZ :: DisruptionType
+pattern DisruptionType_AZ = DisruptionType' "AZ"
+
+pattern DisruptionType_Hardware :: DisruptionType
+pattern DisruptionType_Hardware = DisruptionType' "Hardware"
+
+pattern DisruptionType_Region :: DisruptionType
+pattern DisruptionType_Region = DisruptionType' "Region"
+
+pattern DisruptionType_Software :: DisruptionType
+pattern DisruptionType_Software = DisruptionType' "Software"
+
+{-# COMPLETE
+  DisruptionType_AZ,
+  DisruptionType_Hardware,
+  DisruptionType_Region,
+  DisruptionType_Software,
+  DisruptionType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/EstimatedCostTier.hs b/gen/Amazonka/ResilienceHub/Types/EstimatedCostTier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/EstimatedCostTier.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.ResilienceHub.Types.EstimatedCostTier
+-- 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.ResilienceHub.Types.EstimatedCostTier
+  ( EstimatedCostTier
+      ( ..,
+        EstimatedCostTier_L1,
+        EstimatedCostTier_L2,
+        EstimatedCostTier_L3,
+        EstimatedCostTier_L4
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EstimatedCostTier = EstimatedCostTier'
+  { fromEstimatedCostTier ::
+      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 EstimatedCostTier_L1 :: EstimatedCostTier
+pattern EstimatedCostTier_L1 = EstimatedCostTier' "L1"
+
+pattern EstimatedCostTier_L2 :: EstimatedCostTier
+pattern EstimatedCostTier_L2 = EstimatedCostTier' "L2"
+
+pattern EstimatedCostTier_L3 :: EstimatedCostTier
+pattern EstimatedCostTier_L3 = EstimatedCostTier' "L3"
+
+pattern EstimatedCostTier_L4 :: EstimatedCostTier
+pattern EstimatedCostTier_L4 = EstimatedCostTier' "L4"
+
+{-# COMPLETE
+  EstimatedCostTier_L1,
+  EstimatedCostTier_L2,
+  EstimatedCostTier_L3,
+  EstimatedCostTier_L4,
+  EstimatedCostTier'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/FailurePolicy.hs b/gen/Amazonka/ResilienceHub/Types/FailurePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/FailurePolicy.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.ResilienceHub.Types.FailurePolicy
+-- 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.ResilienceHub.Types.FailurePolicy 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
+
+-- | Defines a failure policy.
+--
+-- /See:/ 'newFailurePolicy' smart constructor.
+data FailurePolicy = FailurePolicy'
+  { -- | The Recovery Point Objective (RPO), in seconds.
+    rpoInSecs :: Prelude.Natural,
+    -- | The Recovery Time Objective (RTO), in seconds.
+    rtoInSecs :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailurePolicy' with all optional fields 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:
+--
+-- 'rpoInSecs', 'failurePolicy_rpoInSecs' - The Recovery Point Objective (RPO), in seconds.
+--
+-- 'rtoInSecs', 'failurePolicy_rtoInSecs' - The Recovery Time Objective (RTO), in seconds.
+newFailurePolicy ::
+  -- | 'rpoInSecs'
+  Prelude.Natural ->
+  -- | 'rtoInSecs'
+  Prelude.Natural ->
+  FailurePolicy
+newFailurePolicy pRpoInSecs_ pRtoInSecs_ =
+  FailurePolicy'
+    { rpoInSecs = pRpoInSecs_,
+      rtoInSecs = pRtoInSecs_
+    }
+
+-- | The Recovery Point Objective (RPO), in seconds.
+failurePolicy_rpoInSecs :: Lens.Lens' FailurePolicy Prelude.Natural
+failurePolicy_rpoInSecs = Lens.lens (\FailurePolicy' {rpoInSecs} -> rpoInSecs) (\s@FailurePolicy' {} a -> s {rpoInSecs = a} :: FailurePolicy)
+
+-- | The Recovery Time Objective (RTO), in seconds.
+failurePolicy_rtoInSecs :: Lens.Lens' FailurePolicy Prelude.Natural
+failurePolicy_rtoInSecs = Lens.lens (\FailurePolicy' {rtoInSecs} -> rtoInSecs) (\s@FailurePolicy' {} a -> s {rtoInSecs = a} :: FailurePolicy)
+
+instance Data.FromJSON FailurePolicy where
+  parseJSON =
+    Data.withObject
+      "FailurePolicy"
+      ( \x ->
+          FailurePolicy'
+            Prelude.<$> (x Data..: "rpoInSecs")
+            Prelude.<*> (x Data..: "rtoInSecs")
+      )
+
+instance Prelude.Hashable FailurePolicy where
+  hashWithSalt _salt FailurePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` rpoInSecs
+      `Prelude.hashWithSalt` rtoInSecs
+
+instance Prelude.NFData FailurePolicy where
+  rnf FailurePolicy' {..} =
+    Prelude.rnf rpoInSecs
+      `Prelude.seq` Prelude.rnf rtoInSecs
+
+instance Data.ToJSON FailurePolicy where
+  toJSON FailurePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("rpoInSecs" Data..= rpoInSecs),
+            Prelude.Just ("rtoInSecs" Data..= rtoInSecs)
+          ]
+      )
diff --git a/gen/Amazonka/ResilienceHub/Types/HaArchitecture.hs b/gen/Amazonka/ResilienceHub/Types/HaArchitecture.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/HaArchitecture.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.ResilienceHub.Types.HaArchitecture
+-- 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.ResilienceHub.Types.HaArchitecture
+  ( HaArchitecture
+      ( ..,
+        HaArchitecture_BackupAndRestore,
+        HaArchitecture_MultiSite,
+        HaArchitecture_NoRecoveryPlan,
+        HaArchitecture_PilotLight,
+        HaArchitecture_WarmStandby
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HaArchitecture = HaArchitecture'
+  { fromHaArchitecture ::
+      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 HaArchitecture_BackupAndRestore :: HaArchitecture
+pattern HaArchitecture_BackupAndRestore = HaArchitecture' "BackupAndRestore"
+
+pattern HaArchitecture_MultiSite :: HaArchitecture
+pattern HaArchitecture_MultiSite = HaArchitecture' "MultiSite"
+
+pattern HaArchitecture_NoRecoveryPlan :: HaArchitecture
+pattern HaArchitecture_NoRecoveryPlan = HaArchitecture' "NoRecoveryPlan"
+
+pattern HaArchitecture_PilotLight :: HaArchitecture
+pattern HaArchitecture_PilotLight = HaArchitecture' "PilotLight"
+
+pattern HaArchitecture_WarmStandby :: HaArchitecture
+pattern HaArchitecture_WarmStandby = HaArchitecture' "WarmStandby"
+
+{-# COMPLETE
+  HaArchitecture_BackupAndRestore,
+  HaArchitecture_MultiSite,
+  HaArchitecture_NoRecoveryPlan,
+  HaArchitecture_PilotLight,
+  HaArchitecture_WarmStandby,
+  HaArchitecture'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/LogicalResourceId.hs b/gen/Amazonka/ResilienceHub/Types/LogicalResourceId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/LogicalResourceId.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.ResilienceHub.Types.LogicalResourceId
+-- 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.ResilienceHub.Types.LogicalResourceId 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
+
+-- | Defines a logical resource identifier.
+--
+-- /See:/ 'newLogicalResourceId' smart constructor.
+data LogicalResourceId = LogicalResourceId'
+  { -- | The name of the CloudFormation stack this resource belongs to.
+    logicalStackName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource group that this resource belongs to.
+    resourceGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Terraform S3 state file this resource belongs to.
+    terraformSourceName :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the resource.
+    identifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogicalResourceId' with all optional fields 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:
+--
+-- 'logicalStackName', 'logicalResourceId_logicalStackName' - The name of the CloudFormation stack this resource belongs to.
+--
+-- 'resourceGroupName', 'logicalResourceId_resourceGroupName' - The name of the resource group that this resource belongs to.
+--
+-- 'terraformSourceName', 'logicalResourceId_terraformSourceName' - The name of the Terraform S3 state file this resource belongs to.
+--
+-- 'identifier', 'logicalResourceId_identifier' - The identifier of the resource.
+newLogicalResourceId ::
+  -- | 'identifier'
+  Prelude.Text ->
+  LogicalResourceId
+newLogicalResourceId pIdentifier_ =
+  LogicalResourceId'
+    { logicalStackName =
+        Prelude.Nothing,
+      resourceGroupName = Prelude.Nothing,
+      terraformSourceName = Prelude.Nothing,
+      identifier = pIdentifier_
+    }
+
+-- | The name of the CloudFormation stack this resource belongs to.
+logicalResourceId_logicalStackName :: Lens.Lens' LogicalResourceId (Prelude.Maybe Prelude.Text)
+logicalResourceId_logicalStackName = Lens.lens (\LogicalResourceId' {logicalStackName} -> logicalStackName) (\s@LogicalResourceId' {} a -> s {logicalStackName = a} :: LogicalResourceId)
+
+-- | The name of the resource group that this resource belongs to.
+logicalResourceId_resourceGroupName :: Lens.Lens' LogicalResourceId (Prelude.Maybe Prelude.Text)
+logicalResourceId_resourceGroupName = Lens.lens (\LogicalResourceId' {resourceGroupName} -> resourceGroupName) (\s@LogicalResourceId' {} a -> s {resourceGroupName = a} :: LogicalResourceId)
+
+-- | The name of the Terraform S3 state file this resource belongs to.
+logicalResourceId_terraformSourceName :: Lens.Lens' LogicalResourceId (Prelude.Maybe Prelude.Text)
+logicalResourceId_terraformSourceName = Lens.lens (\LogicalResourceId' {terraformSourceName} -> terraformSourceName) (\s@LogicalResourceId' {} a -> s {terraformSourceName = a} :: LogicalResourceId)
+
+-- | The identifier of the resource.
+logicalResourceId_identifier :: Lens.Lens' LogicalResourceId Prelude.Text
+logicalResourceId_identifier = Lens.lens (\LogicalResourceId' {identifier} -> identifier) (\s@LogicalResourceId' {} a -> s {identifier = a} :: LogicalResourceId)
+
+instance Data.FromJSON LogicalResourceId where
+  parseJSON =
+    Data.withObject
+      "LogicalResourceId"
+      ( \x ->
+          LogicalResourceId'
+            Prelude.<$> (x Data..:? "logicalStackName")
+            Prelude.<*> (x Data..:? "resourceGroupName")
+            Prelude.<*> (x Data..:? "terraformSourceName")
+            Prelude.<*> (x Data..: "identifier")
+      )
+
+instance Prelude.Hashable LogicalResourceId where
+  hashWithSalt _salt LogicalResourceId' {..} =
+    _salt
+      `Prelude.hashWithSalt` logicalStackName
+      `Prelude.hashWithSalt` resourceGroupName
+      `Prelude.hashWithSalt` terraformSourceName
+      `Prelude.hashWithSalt` identifier
+
+instance Prelude.NFData LogicalResourceId where
+  rnf LogicalResourceId' {..} =
+    Prelude.rnf logicalStackName
+      `Prelude.seq` Prelude.rnf resourceGroupName
+      `Prelude.seq` Prelude.rnf terraformSourceName
+      `Prelude.seq` Prelude.rnf identifier
diff --git a/gen/Amazonka/ResilienceHub/Types/PhysicalIdentifierType.hs b/gen/Amazonka/ResilienceHub/Types/PhysicalIdentifierType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/PhysicalIdentifierType.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.ResilienceHub.Types.PhysicalIdentifierType
+-- 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.ResilienceHub.Types.PhysicalIdentifierType
+  ( PhysicalIdentifierType
+      ( ..,
+        PhysicalIdentifierType_Arn,
+        PhysicalIdentifierType_Native
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PhysicalIdentifierType = PhysicalIdentifierType'
+  { fromPhysicalIdentifierType ::
+      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 PhysicalIdentifierType_Arn :: PhysicalIdentifierType
+pattern PhysicalIdentifierType_Arn = PhysicalIdentifierType' "Arn"
+
+pattern PhysicalIdentifierType_Native :: PhysicalIdentifierType
+pattern PhysicalIdentifierType_Native = PhysicalIdentifierType' "Native"
+
+{-# COMPLETE
+  PhysicalIdentifierType_Arn,
+  PhysicalIdentifierType_Native,
+  PhysicalIdentifierType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/PhysicalResource.hs b/gen/Amazonka/ResilienceHub/Types/PhysicalResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/PhysicalResource.hs
@@ -0,0 +1,134 @@
+{-# 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.ResilienceHub.Types.PhysicalResource
+-- 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.ResilienceHub.Types.PhysicalResource 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
+import Amazonka.ResilienceHub.Types.AppComponent
+import Amazonka.ResilienceHub.Types.LogicalResourceId
+import Amazonka.ResilienceHub.Types.PhysicalResourceId
+
+-- | Defines a physical resource. A physical resource is a resource that
+-- exists in your account. It can be identified using an Amazon Resource
+-- Name (ARN) or a Resilience Hub-native identifier.
+--
+-- /See:/ 'newPhysicalResource' smart constructor.
+data PhysicalResource = PhysicalResource'
+  { -- | The application components that belong to this resource.
+    appComponents :: Prelude.Maybe [AppComponent],
+    -- | The name of the resource.
+    resourceName :: Prelude.Maybe Prelude.Text,
+    -- | The logical identifier of the resource.
+    logicalResourceId :: LogicalResourceId,
+    -- | The physical identifier of the resource.
+    physicalResourceId :: PhysicalResourceId,
+    -- | The type of resource.
+    resourceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PhysicalResource' with all optional fields 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:
+--
+-- 'appComponents', 'physicalResource_appComponents' - The application components that belong to this resource.
+--
+-- 'resourceName', 'physicalResource_resourceName' - The name of the resource.
+--
+-- 'logicalResourceId', 'physicalResource_logicalResourceId' - The logical identifier of the resource.
+--
+-- 'physicalResourceId', 'physicalResource_physicalResourceId' - The physical identifier of the resource.
+--
+-- 'resourceType', 'physicalResource_resourceType' - The type of resource.
+newPhysicalResource ::
+  -- | 'logicalResourceId'
+  LogicalResourceId ->
+  -- | 'physicalResourceId'
+  PhysicalResourceId ->
+  -- | 'resourceType'
+  Prelude.Text ->
+  PhysicalResource
+newPhysicalResource
+  pLogicalResourceId_
+  pPhysicalResourceId_
+  pResourceType_ =
+    PhysicalResource'
+      { appComponents = Prelude.Nothing,
+        resourceName = Prelude.Nothing,
+        logicalResourceId = pLogicalResourceId_,
+        physicalResourceId = pPhysicalResourceId_,
+        resourceType = pResourceType_
+      }
+
+-- | The application components that belong to this resource.
+physicalResource_appComponents :: Lens.Lens' PhysicalResource (Prelude.Maybe [AppComponent])
+physicalResource_appComponents = Lens.lens (\PhysicalResource' {appComponents} -> appComponents) (\s@PhysicalResource' {} a -> s {appComponents = a} :: PhysicalResource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the resource.
+physicalResource_resourceName :: Lens.Lens' PhysicalResource (Prelude.Maybe Prelude.Text)
+physicalResource_resourceName = Lens.lens (\PhysicalResource' {resourceName} -> resourceName) (\s@PhysicalResource' {} a -> s {resourceName = a} :: PhysicalResource)
+
+-- | The logical identifier of the resource.
+physicalResource_logicalResourceId :: Lens.Lens' PhysicalResource LogicalResourceId
+physicalResource_logicalResourceId = Lens.lens (\PhysicalResource' {logicalResourceId} -> logicalResourceId) (\s@PhysicalResource' {} a -> s {logicalResourceId = a} :: PhysicalResource)
+
+-- | The physical identifier of the resource.
+physicalResource_physicalResourceId :: Lens.Lens' PhysicalResource PhysicalResourceId
+physicalResource_physicalResourceId = Lens.lens (\PhysicalResource' {physicalResourceId} -> physicalResourceId) (\s@PhysicalResource' {} a -> s {physicalResourceId = a} :: PhysicalResource)
+
+-- | The type of resource.
+physicalResource_resourceType :: Lens.Lens' PhysicalResource Prelude.Text
+physicalResource_resourceType = Lens.lens (\PhysicalResource' {resourceType} -> resourceType) (\s@PhysicalResource' {} a -> s {resourceType = a} :: PhysicalResource)
+
+instance Data.FromJSON PhysicalResource where
+  parseJSON =
+    Data.withObject
+      "PhysicalResource"
+      ( \x ->
+          PhysicalResource'
+            Prelude.<$> (x Data..:? "appComponents" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "resourceName")
+            Prelude.<*> (x Data..: "logicalResourceId")
+            Prelude.<*> (x Data..: "physicalResourceId")
+            Prelude.<*> (x Data..: "resourceType")
+      )
+
+instance Prelude.Hashable PhysicalResource where
+  hashWithSalt _salt PhysicalResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponents
+      `Prelude.hashWithSalt` resourceName
+      `Prelude.hashWithSalt` logicalResourceId
+      `Prelude.hashWithSalt` physicalResourceId
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData PhysicalResource where
+  rnf PhysicalResource' {..} =
+    Prelude.rnf appComponents
+      `Prelude.seq` Prelude.rnf resourceName
+      `Prelude.seq` Prelude.rnf logicalResourceId
+      `Prelude.seq` Prelude.rnf physicalResourceId
+      `Prelude.seq` Prelude.rnf resourceType
diff --git a/gen/Amazonka/ResilienceHub/Types/PhysicalResourceId.hs b/gen/Amazonka/ResilienceHub/Types/PhysicalResourceId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/PhysicalResourceId.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.Types.PhysicalResourceId
+-- 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.ResilienceHub.Types.PhysicalResourceId 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
+import Amazonka.ResilienceHub.Types.PhysicalIdentifierType
+
+-- | Defines a physical resource identifier.
+--
+-- /See:/ 'newPhysicalResourceId' smart constructor.
+data PhysicalResourceId = PhysicalResourceId'
+  { -- | The Amazon Web Services account that owns the physical resource.
+    awsAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region that the physical resource is located in.
+    awsRegion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the physical resource.
+    identifier :: Prelude.Text,
+    -- | Specifies the type of physical resource identifier.
+    --
+    -- [Arn]
+    --     The resource identifier is an Amazon Resource Name (ARN) .
+    --
+    -- [Native]
+    --     The resource identifier is a Resilience Hub-native identifier.
+    type' :: PhysicalIdentifierType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PhysicalResourceId' with all optional fields 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:
+--
+-- 'awsAccountId', 'physicalResourceId_awsAccountId' - The Amazon Web Services account that owns the physical resource.
+--
+-- 'awsRegion', 'physicalResourceId_awsRegion' - The Amazon Web Services Region that the physical resource is located in.
+--
+-- 'identifier', 'physicalResourceId_identifier' - The identifier of the physical resource.
+--
+-- 'type'', 'physicalResourceId_type' - Specifies the type of physical resource identifier.
+--
+-- [Arn]
+--     The resource identifier is an Amazon Resource Name (ARN) .
+--
+-- [Native]
+--     The resource identifier is a Resilience Hub-native identifier.
+newPhysicalResourceId ::
+  -- | 'identifier'
+  Prelude.Text ->
+  -- | 'type''
+  PhysicalIdentifierType ->
+  PhysicalResourceId
+newPhysicalResourceId pIdentifier_ pType_ =
+  PhysicalResourceId'
+    { awsAccountId = Prelude.Nothing,
+      awsRegion = Prelude.Nothing,
+      identifier = pIdentifier_,
+      type' = pType_
+    }
+
+-- | The Amazon Web Services account that owns the physical resource.
+physicalResourceId_awsAccountId :: Lens.Lens' PhysicalResourceId (Prelude.Maybe Prelude.Text)
+physicalResourceId_awsAccountId = Lens.lens (\PhysicalResourceId' {awsAccountId} -> awsAccountId) (\s@PhysicalResourceId' {} a -> s {awsAccountId = a} :: PhysicalResourceId)
+
+-- | The Amazon Web Services Region that the physical resource is located in.
+physicalResourceId_awsRegion :: Lens.Lens' PhysicalResourceId (Prelude.Maybe Prelude.Text)
+physicalResourceId_awsRegion = Lens.lens (\PhysicalResourceId' {awsRegion} -> awsRegion) (\s@PhysicalResourceId' {} a -> s {awsRegion = a} :: PhysicalResourceId)
+
+-- | The identifier of the physical resource.
+physicalResourceId_identifier :: Lens.Lens' PhysicalResourceId Prelude.Text
+physicalResourceId_identifier = Lens.lens (\PhysicalResourceId' {identifier} -> identifier) (\s@PhysicalResourceId' {} a -> s {identifier = a} :: PhysicalResourceId)
+
+-- | Specifies the type of physical resource identifier.
+--
+-- [Arn]
+--     The resource identifier is an Amazon Resource Name (ARN) .
+--
+-- [Native]
+--     The resource identifier is a Resilience Hub-native identifier.
+physicalResourceId_type :: Lens.Lens' PhysicalResourceId PhysicalIdentifierType
+physicalResourceId_type = Lens.lens (\PhysicalResourceId' {type'} -> type') (\s@PhysicalResourceId' {} a -> s {type' = a} :: PhysicalResourceId)
+
+instance Data.FromJSON PhysicalResourceId where
+  parseJSON =
+    Data.withObject
+      "PhysicalResourceId"
+      ( \x ->
+          PhysicalResourceId'
+            Prelude.<$> (x Data..:? "awsAccountId")
+            Prelude.<*> (x Data..:? "awsRegion")
+            Prelude.<*> (x Data..: "identifier")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable PhysicalResourceId where
+  hashWithSalt _salt PhysicalResourceId' {..} =
+    _salt
+      `Prelude.hashWithSalt` awsAccountId
+      `Prelude.hashWithSalt` awsRegion
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData PhysicalResourceId where
+  rnf PhysicalResourceId' {..} =
+    Prelude.rnf awsAccountId
+      `Prelude.seq` Prelude.rnf awsRegion
+      `Prelude.seq` Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON PhysicalResourceId where
+  toJSON PhysicalResourceId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("awsAccountId" Data..=) Prelude.<$> awsAccountId,
+            ("awsRegion" Data..=) Prelude.<$> awsRegion,
+            Prelude.Just ("identifier" Data..= identifier),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/ResilienceHub/Types/RecommendationComplianceStatus.hs b/gen/Amazonka/ResilienceHub/Types/RecommendationComplianceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/RecommendationComplianceStatus.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.ResilienceHub.Types.RecommendationComplianceStatus
+-- 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.ResilienceHub.Types.RecommendationComplianceStatus
+  ( RecommendationComplianceStatus
+      ( ..,
+        RecommendationComplianceStatus_BreachedCanMeet,
+        RecommendationComplianceStatus_BreachedUnattainable,
+        RecommendationComplianceStatus_MetCanImprove
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationComplianceStatus = RecommendationComplianceStatus'
+  { fromRecommendationComplianceStatus ::
+      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 RecommendationComplianceStatus_BreachedCanMeet :: RecommendationComplianceStatus
+pattern RecommendationComplianceStatus_BreachedCanMeet = RecommendationComplianceStatus' "BreachedCanMeet"
+
+pattern RecommendationComplianceStatus_BreachedUnattainable :: RecommendationComplianceStatus
+pattern RecommendationComplianceStatus_BreachedUnattainable = RecommendationComplianceStatus' "BreachedUnattainable"
+
+pattern RecommendationComplianceStatus_MetCanImprove :: RecommendationComplianceStatus
+pattern RecommendationComplianceStatus_MetCanImprove = RecommendationComplianceStatus' "MetCanImprove"
+
+{-# COMPLETE
+  RecommendationComplianceStatus_BreachedCanMeet,
+  RecommendationComplianceStatus_BreachedUnattainable,
+  RecommendationComplianceStatus_MetCanImprove,
+  RecommendationComplianceStatus'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/RecommendationDisruptionCompliance.hs b/gen/Amazonka/ResilienceHub/Types/RecommendationDisruptionCompliance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/RecommendationDisruptionCompliance.hs
@@ -0,0 +1,147 @@
+{-# 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.ResilienceHub.Types.RecommendationDisruptionCompliance
+-- 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.ResilienceHub.Types.RecommendationDisruptionCompliance 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
+import Amazonka.ResilienceHub.Types.ComplianceStatus
+
+-- | Defines a disruption compliance recommendation.
+--
+-- /See:/ 'newRecommendationDisruptionCompliance' smart constructor.
+data RecommendationDisruptionCompliance = RecommendationDisruptionCompliance'
+  { -- | The expected Recovery Point Objective (RPO) description after applying
+    -- the recommended configuration change.
+    expectedRpoDescription :: Prelude.Maybe Prelude.Text,
+    -- | The expected RPO after applying the recommended configuration change.
+    expectedRpoInSecs :: Prelude.Maybe Prelude.Natural,
+    -- | The expected Recovery Time Objective (RTO) description after applying
+    -- the recommended configuration change.
+    expectedRtoDescription :: Prelude.Maybe Prelude.Text,
+    -- | The expected RTO after applying the recommended configuration change.
+    expectedRtoInSecs :: Prelude.Maybe Prelude.Natural,
+    -- | The expected compliance status after applying the recommended
+    -- configuration change.
+    expectedComplianceStatus :: ComplianceStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationDisruptionCompliance' with all optional fields 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:
+--
+-- 'expectedRpoDescription', 'recommendationDisruptionCompliance_expectedRpoDescription' - The expected Recovery Point Objective (RPO) description after applying
+-- the recommended configuration change.
+--
+-- 'expectedRpoInSecs', 'recommendationDisruptionCompliance_expectedRpoInSecs' - The expected RPO after applying the recommended configuration change.
+--
+-- 'expectedRtoDescription', 'recommendationDisruptionCompliance_expectedRtoDescription' - The expected Recovery Time Objective (RTO) description after applying
+-- the recommended configuration change.
+--
+-- 'expectedRtoInSecs', 'recommendationDisruptionCompliance_expectedRtoInSecs' - The expected RTO after applying the recommended configuration change.
+--
+-- 'expectedComplianceStatus', 'recommendationDisruptionCompliance_expectedComplianceStatus' - The expected compliance status after applying the recommended
+-- configuration change.
+newRecommendationDisruptionCompliance ::
+  -- | 'expectedComplianceStatus'
+  ComplianceStatus ->
+  RecommendationDisruptionCompliance
+newRecommendationDisruptionCompliance
+  pExpectedComplianceStatus_ =
+    RecommendationDisruptionCompliance'
+      { expectedRpoDescription =
+          Prelude.Nothing,
+        expectedRpoInSecs = Prelude.Nothing,
+        expectedRtoDescription =
+          Prelude.Nothing,
+        expectedRtoInSecs = Prelude.Nothing,
+        expectedComplianceStatus =
+          pExpectedComplianceStatus_
+      }
+
+-- | The expected Recovery Point Objective (RPO) description after applying
+-- the recommended configuration change.
+recommendationDisruptionCompliance_expectedRpoDescription :: Lens.Lens' RecommendationDisruptionCompliance (Prelude.Maybe Prelude.Text)
+recommendationDisruptionCompliance_expectedRpoDescription = Lens.lens (\RecommendationDisruptionCompliance' {expectedRpoDescription} -> expectedRpoDescription) (\s@RecommendationDisruptionCompliance' {} a -> s {expectedRpoDescription = a} :: RecommendationDisruptionCompliance)
+
+-- | The expected RPO after applying the recommended configuration change.
+recommendationDisruptionCompliance_expectedRpoInSecs :: Lens.Lens' RecommendationDisruptionCompliance (Prelude.Maybe Prelude.Natural)
+recommendationDisruptionCompliance_expectedRpoInSecs = Lens.lens (\RecommendationDisruptionCompliance' {expectedRpoInSecs} -> expectedRpoInSecs) (\s@RecommendationDisruptionCompliance' {} a -> s {expectedRpoInSecs = a} :: RecommendationDisruptionCompliance)
+
+-- | The expected Recovery Time Objective (RTO) description after applying
+-- the recommended configuration change.
+recommendationDisruptionCompliance_expectedRtoDescription :: Lens.Lens' RecommendationDisruptionCompliance (Prelude.Maybe Prelude.Text)
+recommendationDisruptionCompliance_expectedRtoDescription = Lens.lens (\RecommendationDisruptionCompliance' {expectedRtoDescription} -> expectedRtoDescription) (\s@RecommendationDisruptionCompliance' {} a -> s {expectedRtoDescription = a} :: RecommendationDisruptionCompliance)
+
+-- | The expected RTO after applying the recommended configuration change.
+recommendationDisruptionCompliance_expectedRtoInSecs :: Lens.Lens' RecommendationDisruptionCompliance (Prelude.Maybe Prelude.Natural)
+recommendationDisruptionCompliance_expectedRtoInSecs = Lens.lens (\RecommendationDisruptionCompliance' {expectedRtoInSecs} -> expectedRtoInSecs) (\s@RecommendationDisruptionCompliance' {} a -> s {expectedRtoInSecs = a} :: RecommendationDisruptionCompliance)
+
+-- | The expected compliance status after applying the recommended
+-- configuration change.
+recommendationDisruptionCompliance_expectedComplianceStatus :: Lens.Lens' RecommendationDisruptionCompliance ComplianceStatus
+recommendationDisruptionCompliance_expectedComplianceStatus = Lens.lens (\RecommendationDisruptionCompliance' {expectedComplianceStatus} -> expectedComplianceStatus) (\s@RecommendationDisruptionCompliance' {} a -> s {expectedComplianceStatus = a} :: RecommendationDisruptionCompliance)
+
+instance
+  Data.FromJSON
+    RecommendationDisruptionCompliance
+  where
+  parseJSON =
+    Data.withObject
+      "RecommendationDisruptionCompliance"
+      ( \x ->
+          RecommendationDisruptionCompliance'
+            Prelude.<$> (x Data..:? "expectedRpoDescription")
+            Prelude.<*> (x Data..:? "expectedRpoInSecs")
+            Prelude.<*> (x Data..:? "expectedRtoDescription")
+            Prelude.<*> (x Data..:? "expectedRtoInSecs")
+            Prelude.<*> (x Data..: "expectedComplianceStatus")
+      )
+
+instance
+  Prelude.Hashable
+    RecommendationDisruptionCompliance
+  where
+  hashWithSalt
+    _salt
+    RecommendationDisruptionCompliance' {..} =
+      _salt
+        `Prelude.hashWithSalt` expectedRpoDescription
+        `Prelude.hashWithSalt` expectedRpoInSecs
+        `Prelude.hashWithSalt` expectedRtoDescription
+        `Prelude.hashWithSalt` expectedRtoInSecs
+        `Prelude.hashWithSalt` expectedComplianceStatus
+
+instance
+  Prelude.NFData
+    RecommendationDisruptionCompliance
+  where
+  rnf RecommendationDisruptionCompliance' {..} =
+    Prelude.rnf expectedRpoDescription
+      `Prelude.seq` Prelude.rnf expectedRpoInSecs
+      `Prelude.seq` Prelude.rnf expectedRtoDescription
+      `Prelude.seq` Prelude.rnf expectedRtoInSecs
+      `Prelude.seq` Prelude.rnf expectedComplianceStatus
diff --git a/gen/Amazonka/ResilienceHub/Types/RecommendationItem.hs b/gen/Amazonka/ResilienceHub/Types/RecommendationItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/RecommendationItem.hs
@@ -0,0 +1,109 @@
+{-# 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.ResilienceHub.Types.RecommendationItem
+-- 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.ResilienceHub.Types.RecommendationItem 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
+
+-- | Defines a recommendation.
+--
+-- /See:/ 'newRecommendationItem' smart constructor.
+data RecommendationItem = RecommendationItem'
+  { -- | Specifies if the recommendation has already been implemented.
+    alreadyImplemented :: Prelude.Maybe Prelude.Bool,
+    -- | The resource identifier.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The target account identifier.
+    targetAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The target region.
+    targetRegion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationItem' with all optional fields 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:
+--
+-- 'alreadyImplemented', 'recommendationItem_alreadyImplemented' - Specifies if the recommendation has already been implemented.
+--
+-- 'resourceId', 'recommendationItem_resourceId' - The resource identifier.
+--
+-- 'targetAccountId', 'recommendationItem_targetAccountId' - The target account identifier.
+--
+-- 'targetRegion', 'recommendationItem_targetRegion' - The target region.
+newRecommendationItem ::
+  RecommendationItem
+newRecommendationItem =
+  RecommendationItem'
+    { alreadyImplemented =
+        Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      targetAccountId = Prelude.Nothing,
+      targetRegion = Prelude.Nothing
+    }
+
+-- | Specifies if the recommendation has already been implemented.
+recommendationItem_alreadyImplemented :: Lens.Lens' RecommendationItem (Prelude.Maybe Prelude.Bool)
+recommendationItem_alreadyImplemented = Lens.lens (\RecommendationItem' {alreadyImplemented} -> alreadyImplemented) (\s@RecommendationItem' {} a -> s {alreadyImplemented = a} :: RecommendationItem)
+
+-- | The resource identifier.
+recommendationItem_resourceId :: Lens.Lens' RecommendationItem (Prelude.Maybe Prelude.Text)
+recommendationItem_resourceId = Lens.lens (\RecommendationItem' {resourceId} -> resourceId) (\s@RecommendationItem' {} a -> s {resourceId = a} :: RecommendationItem)
+
+-- | The target account identifier.
+recommendationItem_targetAccountId :: Lens.Lens' RecommendationItem (Prelude.Maybe Prelude.Text)
+recommendationItem_targetAccountId = Lens.lens (\RecommendationItem' {targetAccountId} -> targetAccountId) (\s@RecommendationItem' {} a -> s {targetAccountId = a} :: RecommendationItem)
+
+-- | The target region.
+recommendationItem_targetRegion :: Lens.Lens' RecommendationItem (Prelude.Maybe Prelude.Text)
+recommendationItem_targetRegion = Lens.lens (\RecommendationItem' {targetRegion} -> targetRegion) (\s@RecommendationItem' {} a -> s {targetRegion = a} :: RecommendationItem)
+
+instance Data.FromJSON RecommendationItem where
+  parseJSON =
+    Data.withObject
+      "RecommendationItem"
+      ( \x ->
+          RecommendationItem'
+            Prelude.<$> (x Data..:? "alreadyImplemented")
+            Prelude.<*> (x Data..:? "resourceId")
+            Prelude.<*> (x Data..:? "targetAccountId")
+            Prelude.<*> (x Data..:? "targetRegion")
+      )
+
+instance Prelude.Hashable RecommendationItem where
+  hashWithSalt _salt RecommendationItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` alreadyImplemented
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` targetAccountId
+      `Prelude.hashWithSalt` targetRegion
+
+instance Prelude.NFData RecommendationItem where
+  rnf RecommendationItem' {..} =
+    Prelude.rnf alreadyImplemented
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf targetAccountId
+      `Prelude.seq` Prelude.rnf targetRegion
diff --git a/gen/Amazonka/ResilienceHub/Types/RecommendationTemplate.hs b/gen/Amazonka/ResilienceHub/Types/RecommendationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/RecommendationTemplate.hs
@@ -0,0 +1,331 @@
+{-# 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.ResilienceHub.Types.RecommendationTemplate
+-- 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.ResilienceHub.Types.RecommendationTemplate 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
+import Amazonka.ResilienceHub.Types.RecommendationTemplateStatus
+import Amazonka.ResilienceHub.Types.RenderRecommendationType
+import Amazonka.ResilienceHub.Types.S3Location
+import Amazonka.ResilienceHub.Types.TemplateFormat
+
+-- | Defines a recommendation template created with the
+-- CreateRecommendationTemplate action.
+--
+-- /See:/ 'newRecommendationTemplate' smart constructor.
+data RecommendationTemplate = RecommendationTemplate'
+  { -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Maybe Prelude.Text,
+    -- | The end time for the action.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The message for the recommendation template.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | Indicates if replacements are needed.
+    needsReplacements :: Prelude.Maybe Prelude.Bool,
+    -- | Identifiers for the recommendations used in the recommendation template.
+    recommendationIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The start time for the action.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The file location of the template.
+    templatesLocation :: Prelude.Maybe S3Location,
+    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
+    -- ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    assessmentArn :: Prelude.Text,
+    -- | The format of the recommendation template.
+    --
+    -- [CfnJson]
+    --     The template is CloudFormation JSON.
+    --
+    -- [CfnYaml]
+    --     The template is CloudFormation YAML.
+    format :: TemplateFormat,
+    -- | The name for the recommendation template.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the recommendation template.
+    recommendationTemplateArn :: Prelude.Text,
+    -- | An array of strings that specify the recommendation template type or
+    -- types.
+    --
+    -- [Alarm]
+    --     The template is an AlarmRecommendation template.
+    --
+    -- [Sop]
+    --     The template is a SopRecommendation template.
+    --
+    -- [Test]
+    --     The template is a TestRecommendation template.
+    recommendationTypes :: Prelude.NonEmpty RenderRecommendationType,
+    -- | The status of the action.
+    status :: RecommendationTemplateStatus
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationTemplate' with all optional fields 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:
+--
+-- 'appArn', 'recommendationTemplate_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'endTime', 'recommendationTemplate_endTime' - The end time for the action.
+--
+-- 'message', 'recommendationTemplate_message' - The message for the recommendation template.
+--
+-- 'needsReplacements', 'recommendationTemplate_needsReplacements' - Indicates if replacements are needed.
+--
+-- 'recommendationIds', 'recommendationTemplate_recommendationIds' - Identifiers for the recommendations used in the recommendation template.
+--
+-- 'startTime', 'recommendationTemplate_startTime' - The start time for the action.
+--
+-- 'tags', 'recommendationTemplate_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'templatesLocation', 'recommendationTemplate_templatesLocation' - The file location of the template.
+--
+-- 'assessmentArn', 'recommendationTemplate_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'format', 'recommendationTemplate_format' - The format of the recommendation template.
+--
+-- [CfnJson]
+--     The template is CloudFormation JSON.
+--
+-- [CfnYaml]
+--     The template is CloudFormation YAML.
+--
+-- 'name', 'recommendationTemplate_name' - The name for the recommendation template.
+--
+-- 'recommendationTemplateArn', 'recommendationTemplate_recommendationTemplateArn' - The Amazon Resource Name (ARN) for the recommendation template.
+--
+-- 'recommendationTypes', 'recommendationTemplate_recommendationTypes' - An array of strings that specify the recommendation template type or
+-- types.
+--
+-- [Alarm]
+--     The template is an AlarmRecommendation template.
+--
+-- [Sop]
+--     The template is a SopRecommendation template.
+--
+-- [Test]
+--     The template is a TestRecommendation template.
+--
+-- 'status', 'recommendationTemplate_status' - The status of the action.
+newRecommendationTemplate ::
+  -- | 'assessmentArn'
+  Prelude.Text ->
+  -- | 'format'
+  TemplateFormat ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'recommendationTemplateArn'
+  Prelude.Text ->
+  -- | 'recommendationTypes'
+  Prelude.NonEmpty RenderRecommendationType ->
+  -- | 'status'
+  RecommendationTemplateStatus ->
+  RecommendationTemplate
+newRecommendationTemplate
+  pAssessmentArn_
+  pFormat_
+  pName_
+  pRecommendationTemplateArn_
+  pRecommendationTypes_
+  pStatus_ =
+    RecommendationTemplate'
+      { appArn = Prelude.Nothing,
+        endTime = Prelude.Nothing,
+        message = Prelude.Nothing,
+        needsReplacements = Prelude.Nothing,
+        recommendationIds = Prelude.Nothing,
+        startTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        templatesLocation = Prelude.Nothing,
+        assessmentArn = pAssessmentArn_,
+        format = pFormat_,
+        name = pName_,
+        recommendationTemplateArn =
+          pRecommendationTemplateArn_,
+        recommendationTypes =
+          Lens.coerced Lens.# pRecommendationTypes_,
+        status = pStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+recommendationTemplate_appArn :: Lens.Lens' RecommendationTemplate (Prelude.Maybe Prelude.Text)
+recommendationTemplate_appArn = Lens.lens (\RecommendationTemplate' {appArn} -> appArn) (\s@RecommendationTemplate' {} a -> s {appArn = a} :: RecommendationTemplate)
+
+-- | The end time for the action.
+recommendationTemplate_endTime :: Lens.Lens' RecommendationTemplate (Prelude.Maybe Prelude.UTCTime)
+recommendationTemplate_endTime = Lens.lens (\RecommendationTemplate' {endTime} -> endTime) (\s@RecommendationTemplate' {} a -> s {endTime = a} :: RecommendationTemplate) Prelude.. Lens.mapping Data._Time
+
+-- | The message for the recommendation template.
+recommendationTemplate_message :: Lens.Lens' RecommendationTemplate (Prelude.Maybe Prelude.Text)
+recommendationTemplate_message = Lens.lens (\RecommendationTemplate' {message} -> message) (\s@RecommendationTemplate' {} a -> s {message = a} :: RecommendationTemplate)
+
+-- | Indicates if replacements are needed.
+recommendationTemplate_needsReplacements :: Lens.Lens' RecommendationTemplate (Prelude.Maybe Prelude.Bool)
+recommendationTemplate_needsReplacements = Lens.lens (\RecommendationTemplate' {needsReplacements} -> needsReplacements) (\s@RecommendationTemplate' {} a -> s {needsReplacements = a} :: RecommendationTemplate)
+
+-- | Identifiers for the recommendations used in the recommendation template.
+recommendationTemplate_recommendationIds :: Lens.Lens' RecommendationTemplate (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+recommendationTemplate_recommendationIds = Lens.lens (\RecommendationTemplate' {recommendationIds} -> recommendationIds) (\s@RecommendationTemplate' {} a -> s {recommendationIds = a} :: RecommendationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The start time for the action.
+recommendationTemplate_startTime :: Lens.Lens' RecommendationTemplate (Prelude.Maybe Prelude.UTCTime)
+recommendationTemplate_startTime = Lens.lens (\RecommendationTemplate' {startTime} -> startTime) (\s@RecommendationTemplate' {} a -> s {startTime = a} :: RecommendationTemplate) Prelude.. Lens.mapping Data._Time
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+recommendationTemplate_tags :: Lens.Lens' RecommendationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+recommendationTemplate_tags = Lens.lens (\RecommendationTemplate' {tags} -> tags) (\s@RecommendationTemplate' {} a -> s {tags = a} :: RecommendationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The file location of the template.
+recommendationTemplate_templatesLocation :: Lens.Lens' RecommendationTemplate (Prelude.Maybe S3Location)
+recommendationTemplate_templatesLocation = Lens.lens (\RecommendationTemplate' {templatesLocation} -> templatesLocation) (\s@RecommendationTemplate' {} a -> s {templatesLocation = a} :: RecommendationTemplate)
+
+-- | The Amazon Resource Name (ARN) of the assessment. The format for this
+-- ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+recommendationTemplate_assessmentArn :: Lens.Lens' RecommendationTemplate Prelude.Text
+recommendationTemplate_assessmentArn = Lens.lens (\RecommendationTemplate' {assessmentArn} -> assessmentArn) (\s@RecommendationTemplate' {} a -> s {assessmentArn = a} :: RecommendationTemplate)
+
+-- | The format of the recommendation template.
+--
+-- [CfnJson]
+--     The template is CloudFormation JSON.
+--
+-- [CfnYaml]
+--     The template is CloudFormation YAML.
+recommendationTemplate_format :: Lens.Lens' RecommendationTemplate TemplateFormat
+recommendationTemplate_format = Lens.lens (\RecommendationTemplate' {format} -> format) (\s@RecommendationTemplate' {} a -> s {format = a} :: RecommendationTemplate)
+
+-- | The name for the recommendation template.
+recommendationTemplate_name :: Lens.Lens' RecommendationTemplate Prelude.Text
+recommendationTemplate_name = Lens.lens (\RecommendationTemplate' {name} -> name) (\s@RecommendationTemplate' {} a -> s {name = a} :: RecommendationTemplate)
+
+-- | The Amazon Resource Name (ARN) for the recommendation template.
+recommendationTemplate_recommendationTemplateArn :: Lens.Lens' RecommendationTemplate Prelude.Text
+recommendationTemplate_recommendationTemplateArn = Lens.lens (\RecommendationTemplate' {recommendationTemplateArn} -> recommendationTemplateArn) (\s@RecommendationTemplate' {} a -> s {recommendationTemplateArn = a} :: RecommendationTemplate)
+
+-- | An array of strings that specify the recommendation template type or
+-- types.
+--
+-- [Alarm]
+--     The template is an AlarmRecommendation template.
+--
+-- [Sop]
+--     The template is a SopRecommendation template.
+--
+-- [Test]
+--     The template is a TestRecommendation template.
+recommendationTemplate_recommendationTypes :: Lens.Lens' RecommendationTemplate (Prelude.NonEmpty RenderRecommendationType)
+recommendationTemplate_recommendationTypes = Lens.lens (\RecommendationTemplate' {recommendationTypes} -> recommendationTypes) (\s@RecommendationTemplate' {} a -> s {recommendationTypes = a} :: RecommendationTemplate) Prelude.. Lens.coerced
+
+-- | The status of the action.
+recommendationTemplate_status :: Lens.Lens' RecommendationTemplate RecommendationTemplateStatus
+recommendationTemplate_status = Lens.lens (\RecommendationTemplate' {status} -> status) (\s@RecommendationTemplate' {} a -> s {status = a} :: RecommendationTemplate)
+
+instance Data.FromJSON RecommendationTemplate where
+  parseJSON =
+    Data.withObject
+      "RecommendationTemplate"
+      ( \x ->
+          RecommendationTemplate'
+            Prelude.<$> (x Data..:? "appArn")
+            Prelude.<*> (x Data..:? "endTime")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "needsReplacements")
+            Prelude.<*> (x Data..:? "recommendationIds")
+            Prelude.<*> (x Data..:? "startTime")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "templatesLocation")
+            Prelude.<*> (x Data..: "assessmentArn")
+            Prelude.<*> (x Data..: "format")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "recommendationTemplateArn")
+            Prelude.<*> (x Data..: "recommendationTypes")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable RecommendationTemplate where
+  hashWithSalt _salt RecommendationTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` appArn
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` needsReplacements
+      `Prelude.hashWithSalt` recommendationIds
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` templatesLocation
+      `Prelude.hashWithSalt` assessmentArn
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recommendationTemplateArn
+      `Prelude.hashWithSalt` recommendationTypes
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData RecommendationTemplate where
+  rnf RecommendationTemplate' {..} =
+    Prelude.rnf appArn
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf needsReplacements
+      `Prelude.seq` Prelude.rnf recommendationIds
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templatesLocation
+      `Prelude.seq` Prelude.rnf assessmentArn
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recommendationTemplateArn
+      `Prelude.seq` Prelude.rnf recommendationTypes
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ResilienceHub/Types/RecommendationTemplateStatus.hs b/gen/Amazonka/ResilienceHub/Types/RecommendationTemplateStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/RecommendationTemplateStatus.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.ResilienceHub.Types.RecommendationTemplateStatus
+-- 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.ResilienceHub.Types.RecommendationTemplateStatus
+  ( RecommendationTemplateStatus
+      ( ..,
+        RecommendationTemplateStatus_Failed,
+        RecommendationTemplateStatus_InProgress,
+        RecommendationTemplateStatus_Pending,
+        RecommendationTemplateStatus_Success
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationTemplateStatus = RecommendationTemplateStatus'
+  { fromRecommendationTemplateStatus ::
+      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 RecommendationTemplateStatus_Failed :: RecommendationTemplateStatus
+pattern RecommendationTemplateStatus_Failed = RecommendationTemplateStatus' "Failed"
+
+pattern RecommendationTemplateStatus_InProgress :: RecommendationTemplateStatus
+pattern RecommendationTemplateStatus_InProgress = RecommendationTemplateStatus' "InProgress"
+
+pattern RecommendationTemplateStatus_Pending :: RecommendationTemplateStatus
+pattern RecommendationTemplateStatus_Pending = RecommendationTemplateStatus' "Pending"
+
+pattern RecommendationTemplateStatus_Success :: RecommendationTemplateStatus
+pattern RecommendationTemplateStatus_Success = RecommendationTemplateStatus' "Success"
+
+{-# COMPLETE
+  RecommendationTemplateStatus_Failed,
+  RecommendationTemplateStatus_InProgress,
+  RecommendationTemplateStatus_Pending,
+  RecommendationTemplateStatus_Success,
+  RecommendationTemplateStatus'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/RenderRecommendationType.hs b/gen/Amazonka/ResilienceHub/Types/RenderRecommendationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/RenderRecommendationType.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.ResilienceHub.Types.RenderRecommendationType
+-- 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.ResilienceHub.Types.RenderRecommendationType
+  ( RenderRecommendationType
+      ( ..,
+        RenderRecommendationType_Alarm,
+        RenderRecommendationType_Sop,
+        RenderRecommendationType_Test
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RenderRecommendationType = RenderRecommendationType'
+  { fromRenderRecommendationType ::
+      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 RenderRecommendationType_Alarm :: RenderRecommendationType
+pattern RenderRecommendationType_Alarm = RenderRecommendationType' "Alarm"
+
+pattern RenderRecommendationType_Sop :: RenderRecommendationType
+pattern RenderRecommendationType_Sop = RenderRecommendationType' "Sop"
+
+pattern RenderRecommendationType_Test :: RenderRecommendationType
+pattern RenderRecommendationType_Test = RenderRecommendationType' "Test"
+
+{-# COMPLETE
+  RenderRecommendationType_Alarm,
+  RenderRecommendationType_Sop,
+  RenderRecommendationType_Test,
+  RenderRecommendationType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/ResiliencyPolicy.hs b/gen/Amazonka/ResilienceHub/Types/ResiliencyPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResiliencyPolicy.hs
@@ -0,0 +1,197 @@
+{-# 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.ResilienceHub.Types.ResiliencyPolicy
+-- 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.ResilienceHub.Types.ResiliencyPolicy 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
+import Amazonka.ResilienceHub.Types.DataLocationConstraint
+import Amazonka.ResilienceHub.Types.DisruptionType
+import Amazonka.ResilienceHub.Types.EstimatedCostTier
+import Amazonka.ResilienceHub.Types.FailurePolicy
+import Amazonka.ResilienceHub.Types.ResiliencyPolicyTier
+
+-- | Defines a resiliency policy.
+--
+-- /See:/ 'newResiliencyPolicy' smart constructor.
+data ResiliencyPolicy = ResiliencyPolicy'
+  { -- | The timestamp for when the resiliency policy was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | Specifies a high-level geographical location constraint for where your
+    -- resilience policy data can be stored.
+    dataLocationConstraint :: Prelude.Maybe DataLocationConstraint,
+    -- | Specifies the estimated cost tier of the resiliency policy.
+    estimatedCostTier :: Prelude.Maybe EstimatedCostTier,
+    -- | The resiliency policy.
+    policy :: Prelude.Maybe (Prelude.HashMap DisruptionType FailurePolicy),
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Maybe Prelude.Text,
+    -- | The description for the policy.
+    policyDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy
+    policyName :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the resource. A tag is a label that you assign to
+    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The tier for this resiliency policy, ranging from the highest severity
+    -- (@MissionCritical@) to lowest (@NonCritical@).
+    tier :: Prelude.Maybe ResiliencyPolicyTier
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResiliencyPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'resiliencyPolicy_creationTime' - The timestamp for when the resiliency policy was created.
+--
+-- 'dataLocationConstraint', 'resiliencyPolicy_dataLocationConstraint' - Specifies a high-level geographical location constraint for where your
+-- resilience policy data can be stored.
+--
+-- 'estimatedCostTier', 'resiliencyPolicy_estimatedCostTier' - Specifies the estimated cost tier of the resiliency policy.
+--
+-- 'policy', 'resiliencyPolicy_policy' - The resiliency policy.
+--
+-- 'policyArn', 'resiliencyPolicy_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'policyDescription', 'resiliencyPolicy_policyDescription' - The description for the policy.
+--
+-- 'policyName', 'resiliencyPolicy_policyName' - The name of the policy
+--
+-- 'tags', 'resiliencyPolicy_tags' - The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+--
+-- 'tier', 'resiliencyPolicy_tier' - The tier for this resiliency policy, ranging from the highest severity
+-- (@MissionCritical@) to lowest (@NonCritical@).
+newResiliencyPolicy ::
+  ResiliencyPolicy
+newResiliencyPolicy =
+  ResiliencyPolicy'
+    { creationTime = Prelude.Nothing,
+      dataLocationConstraint = Prelude.Nothing,
+      estimatedCostTier = Prelude.Nothing,
+      policy = Prelude.Nothing,
+      policyArn = Prelude.Nothing,
+      policyDescription = Prelude.Nothing,
+      policyName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tier = Prelude.Nothing
+    }
+
+-- | The timestamp for when the resiliency policy was created.
+resiliencyPolicy_creationTime :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe Prelude.UTCTime)
+resiliencyPolicy_creationTime = Lens.lens (\ResiliencyPolicy' {creationTime} -> creationTime) (\s@ResiliencyPolicy' {} a -> s {creationTime = a} :: ResiliencyPolicy) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies a high-level geographical location constraint for where your
+-- resilience policy data can be stored.
+resiliencyPolicy_dataLocationConstraint :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe DataLocationConstraint)
+resiliencyPolicy_dataLocationConstraint = Lens.lens (\ResiliencyPolicy' {dataLocationConstraint} -> dataLocationConstraint) (\s@ResiliencyPolicy' {} a -> s {dataLocationConstraint = a} :: ResiliencyPolicy)
+
+-- | Specifies the estimated cost tier of the resiliency policy.
+resiliencyPolicy_estimatedCostTier :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe EstimatedCostTier)
+resiliencyPolicy_estimatedCostTier = Lens.lens (\ResiliencyPolicy' {estimatedCostTier} -> estimatedCostTier) (\s@ResiliencyPolicy' {} a -> s {estimatedCostTier = a} :: ResiliencyPolicy)
+
+-- | The resiliency policy.
+resiliencyPolicy_policy :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe (Prelude.HashMap DisruptionType FailurePolicy))
+resiliencyPolicy_policy = Lens.lens (\ResiliencyPolicy' {policy} -> policy) (\s@ResiliencyPolicy' {} a -> s {policy = a} :: ResiliencyPolicy) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+resiliencyPolicy_policyArn :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe Prelude.Text)
+resiliencyPolicy_policyArn = Lens.lens (\ResiliencyPolicy' {policyArn} -> policyArn) (\s@ResiliencyPolicy' {} a -> s {policyArn = a} :: ResiliencyPolicy)
+
+-- | The description for the policy.
+resiliencyPolicy_policyDescription :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe Prelude.Text)
+resiliencyPolicy_policyDescription = Lens.lens (\ResiliencyPolicy' {policyDescription} -> policyDescription) (\s@ResiliencyPolicy' {} a -> s {policyDescription = a} :: ResiliencyPolicy)
+
+-- | The name of the policy
+resiliencyPolicy_policyName :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe Prelude.Text)
+resiliencyPolicy_policyName = Lens.lens (\ResiliencyPolicy' {policyName} -> policyName) (\s@ResiliencyPolicy' {} a -> s {policyName = a} :: ResiliencyPolicy)
+
+-- | The tags assigned to the resource. A tag is a label that you assign to
+-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
+resiliencyPolicy_tags :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+resiliencyPolicy_tags = Lens.lens (\ResiliencyPolicy' {tags} -> tags) (\s@ResiliencyPolicy' {} a -> s {tags = a} :: ResiliencyPolicy) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The tier for this resiliency policy, ranging from the highest severity
+-- (@MissionCritical@) to lowest (@NonCritical@).
+resiliencyPolicy_tier :: Lens.Lens' ResiliencyPolicy (Prelude.Maybe ResiliencyPolicyTier)
+resiliencyPolicy_tier = Lens.lens (\ResiliencyPolicy' {tier} -> tier) (\s@ResiliencyPolicy' {} a -> s {tier = a} :: ResiliencyPolicy)
+
+instance Data.FromJSON ResiliencyPolicy where
+  parseJSON =
+    Data.withObject
+      "ResiliencyPolicy"
+      ( \x ->
+          ResiliencyPolicy'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "dataLocationConstraint")
+            Prelude.<*> (x Data..:? "estimatedCostTier")
+            Prelude.<*> (x Data..:? "policy" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "policyArn")
+            Prelude.<*> (x Data..:? "policyDescription")
+            Prelude.<*> (x Data..:? "policyName")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tier")
+      )
+
+instance Prelude.Hashable ResiliencyPolicy where
+  hashWithSalt _salt ResiliencyPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` dataLocationConstraint
+      `Prelude.hashWithSalt` estimatedCostTier
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` policyArn
+      `Prelude.hashWithSalt` policyDescription
+      `Prelude.hashWithSalt` policyName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tier
+
+instance Prelude.NFData ResiliencyPolicy where
+  rnf ResiliencyPolicy' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataLocationConstraint
+      `Prelude.seq` Prelude.rnf estimatedCostTier
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf policyArn
+      `Prelude.seq` Prelude.rnf policyDescription
+      `Prelude.seq` Prelude.rnf policyName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tier
diff --git a/gen/Amazonka/ResilienceHub/Types/ResiliencyPolicyTier.hs b/gen/Amazonka/ResilienceHub/Types/ResiliencyPolicyTier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResiliencyPolicyTier.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.ResilienceHub.Types.ResiliencyPolicyTier
+-- 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.ResilienceHub.Types.ResiliencyPolicyTier
+  ( ResiliencyPolicyTier
+      ( ..,
+        ResiliencyPolicyTier_CoreServices,
+        ResiliencyPolicyTier_Critical,
+        ResiliencyPolicyTier_Important,
+        ResiliencyPolicyTier_MissionCritical,
+        ResiliencyPolicyTier_NonCritical
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResiliencyPolicyTier = ResiliencyPolicyTier'
+  { fromResiliencyPolicyTier ::
+      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 ResiliencyPolicyTier_CoreServices :: ResiliencyPolicyTier
+pattern ResiliencyPolicyTier_CoreServices = ResiliencyPolicyTier' "CoreServices"
+
+pattern ResiliencyPolicyTier_Critical :: ResiliencyPolicyTier
+pattern ResiliencyPolicyTier_Critical = ResiliencyPolicyTier' "Critical"
+
+pattern ResiliencyPolicyTier_Important :: ResiliencyPolicyTier
+pattern ResiliencyPolicyTier_Important = ResiliencyPolicyTier' "Important"
+
+pattern ResiliencyPolicyTier_MissionCritical :: ResiliencyPolicyTier
+pattern ResiliencyPolicyTier_MissionCritical = ResiliencyPolicyTier' "MissionCritical"
+
+pattern ResiliencyPolicyTier_NonCritical :: ResiliencyPolicyTier
+pattern ResiliencyPolicyTier_NonCritical = ResiliencyPolicyTier' "NonCritical"
+
+{-# COMPLETE
+  ResiliencyPolicyTier_CoreServices,
+  ResiliencyPolicyTier_Critical,
+  ResiliencyPolicyTier_Important,
+  ResiliencyPolicyTier_MissionCritical,
+  ResiliencyPolicyTier_NonCritical,
+  ResiliencyPolicyTier'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/ResiliencyScore.hs b/gen/Amazonka/ResilienceHub/Types/ResiliencyScore.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResiliencyScore.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.ResilienceHub.Types.ResiliencyScore
+-- 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.ResilienceHub.Types.ResiliencyScore 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
+import Amazonka.ResilienceHub.Types.DisruptionType
+
+-- | The overall resiliency score, returned as an object that includes the
+-- disruption score and outage score.
+--
+-- /See:/ 'newResiliencyScore' smart constructor.
+data ResiliencyScore = ResiliencyScore'
+  { -- | The disruption score for a valid key.
+    disruptionScore :: Prelude.HashMap DisruptionType Prelude.Double,
+    -- | The outage score for a valid key.
+    score :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResiliencyScore' with all optional fields 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:
+--
+-- 'disruptionScore', 'resiliencyScore_disruptionScore' - The disruption score for a valid key.
+--
+-- 'score', 'resiliencyScore_score' - The outage score for a valid key.
+newResiliencyScore ::
+  -- | 'score'
+  Prelude.Double ->
+  ResiliencyScore
+newResiliencyScore pScore_ =
+  ResiliencyScore'
+    { disruptionScore = Prelude.mempty,
+      score = pScore_
+    }
+
+-- | The disruption score for a valid key.
+resiliencyScore_disruptionScore :: Lens.Lens' ResiliencyScore (Prelude.HashMap DisruptionType Prelude.Double)
+resiliencyScore_disruptionScore = Lens.lens (\ResiliencyScore' {disruptionScore} -> disruptionScore) (\s@ResiliencyScore' {} a -> s {disruptionScore = a} :: ResiliencyScore) Prelude.. Lens.coerced
+
+-- | The outage score for a valid key.
+resiliencyScore_score :: Lens.Lens' ResiliencyScore Prelude.Double
+resiliencyScore_score = Lens.lens (\ResiliencyScore' {score} -> score) (\s@ResiliencyScore' {} a -> s {score = a} :: ResiliencyScore)
+
+instance Data.FromJSON ResiliencyScore where
+  parseJSON =
+    Data.withObject
+      "ResiliencyScore"
+      ( \x ->
+          ResiliencyScore'
+            Prelude.<$> ( x
+                            Data..:? "disruptionScore"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "score")
+      )
+
+instance Prelude.Hashable ResiliencyScore where
+  hashWithSalt _salt ResiliencyScore' {..} =
+    _salt
+      `Prelude.hashWithSalt` disruptionScore
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData ResiliencyScore where
+  rnf ResiliencyScore' {..} =
+    Prelude.rnf disruptionScore
+      `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ResilienceHub/Types/ResourceError.hs b/gen/Amazonka/ResilienceHub/Types/ResourceError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResourceError.hs
@@ -0,0 +1,96 @@
+{-# 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.ResilienceHub.Types.ResourceError
+-- 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.ResilienceHub.Types.ResourceError 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
+
+-- | Defines application resource errors.
+--
+-- /See:/ 'newResourceError' smart constructor.
+data ResourceError = ResourceError'
+  { -- | This is the identifier of the resource.
+    logicalResourceId :: Prelude.Maybe Prelude.Text,
+    -- | This is the identifier of the physical resource.
+    physicalResourceId :: Prelude.Maybe Prelude.Text,
+    -- | This is the error message.
+    reason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceError' with all optional fields 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:
+--
+-- 'logicalResourceId', 'resourceError_logicalResourceId' - This is the identifier of the resource.
+--
+-- 'physicalResourceId', 'resourceError_physicalResourceId' - This is the identifier of the physical resource.
+--
+-- 'reason', 'resourceError_reason' - This is the error message.
+newResourceError ::
+  ResourceError
+newResourceError =
+  ResourceError'
+    { logicalResourceId = Prelude.Nothing,
+      physicalResourceId = Prelude.Nothing,
+      reason = Prelude.Nothing
+    }
+
+-- | This is the identifier of the resource.
+resourceError_logicalResourceId :: Lens.Lens' ResourceError (Prelude.Maybe Prelude.Text)
+resourceError_logicalResourceId = Lens.lens (\ResourceError' {logicalResourceId} -> logicalResourceId) (\s@ResourceError' {} a -> s {logicalResourceId = a} :: ResourceError)
+
+-- | This is the identifier of the physical resource.
+resourceError_physicalResourceId :: Lens.Lens' ResourceError (Prelude.Maybe Prelude.Text)
+resourceError_physicalResourceId = Lens.lens (\ResourceError' {physicalResourceId} -> physicalResourceId) (\s@ResourceError' {} a -> s {physicalResourceId = a} :: ResourceError)
+
+-- | This is the error message.
+resourceError_reason :: Lens.Lens' ResourceError (Prelude.Maybe Prelude.Text)
+resourceError_reason = Lens.lens (\ResourceError' {reason} -> reason) (\s@ResourceError' {} a -> s {reason = a} :: ResourceError)
+
+instance Data.FromJSON ResourceError where
+  parseJSON =
+    Data.withObject
+      "ResourceError"
+      ( \x ->
+          ResourceError'
+            Prelude.<$> (x Data..:? "logicalResourceId")
+            Prelude.<*> (x Data..:? "physicalResourceId")
+            Prelude.<*> (x Data..:? "reason")
+      )
+
+instance Prelude.Hashable ResourceError where
+  hashWithSalt _salt ResourceError' {..} =
+    _salt
+      `Prelude.hashWithSalt` logicalResourceId
+      `Prelude.hashWithSalt` physicalResourceId
+      `Prelude.hashWithSalt` reason
+
+instance Prelude.NFData ResourceError where
+  rnf ResourceError' {..} =
+    Prelude.rnf logicalResourceId
+      `Prelude.seq` Prelude.rnf physicalResourceId
+      `Prelude.seq` Prelude.rnf reason
diff --git a/gen/Amazonka/ResilienceHub/Types/ResourceErrorsDetails.hs b/gen/Amazonka/ResilienceHub/Types/ResourceErrorsDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResourceErrorsDetails.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.ResilienceHub.Types.ResourceErrorsDetails
+-- 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.ResilienceHub.Types.ResourceErrorsDetails 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
+import Amazonka.ResilienceHub.Types.ResourceError
+
+-- | A list of errors retrieving an application\'s resources.
+--
+-- /See:/ 'newResourceErrorsDetails' smart constructor.
+data ResourceErrorsDetails = ResourceErrorsDetails'
+  { -- | This indicates if there are more errors not listed in the resourceErrors
+    -- list.
+    hasMoreErrors :: Prelude.Maybe Prelude.Bool,
+    -- | A list of errors retrieving an application\'s resources.
+    resourceErrors :: Prelude.Maybe [ResourceError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceErrorsDetails' with all optional fields 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:
+--
+-- 'hasMoreErrors', 'resourceErrorsDetails_hasMoreErrors' - This indicates if there are more errors not listed in the resourceErrors
+-- list.
+--
+-- 'resourceErrors', 'resourceErrorsDetails_resourceErrors' - A list of errors retrieving an application\'s resources.
+newResourceErrorsDetails ::
+  ResourceErrorsDetails
+newResourceErrorsDetails =
+  ResourceErrorsDetails'
+    { hasMoreErrors =
+        Prelude.Nothing,
+      resourceErrors = Prelude.Nothing
+    }
+
+-- | This indicates if there are more errors not listed in the resourceErrors
+-- list.
+resourceErrorsDetails_hasMoreErrors :: Lens.Lens' ResourceErrorsDetails (Prelude.Maybe Prelude.Bool)
+resourceErrorsDetails_hasMoreErrors = Lens.lens (\ResourceErrorsDetails' {hasMoreErrors} -> hasMoreErrors) (\s@ResourceErrorsDetails' {} a -> s {hasMoreErrors = a} :: ResourceErrorsDetails)
+
+-- | A list of errors retrieving an application\'s resources.
+resourceErrorsDetails_resourceErrors :: Lens.Lens' ResourceErrorsDetails (Prelude.Maybe [ResourceError])
+resourceErrorsDetails_resourceErrors = Lens.lens (\ResourceErrorsDetails' {resourceErrors} -> resourceErrors) (\s@ResourceErrorsDetails' {} a -> s {resourceErrors = a} :: ResourceErrorsDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ResourceErrorsDetails where
+  parseJSON =
+    Data.withObject
+      "ResourceErrorsDetails"
+      ( \x ->
+          ResourceErrorsDetails'
+            Prelude.<$> (x Data..:? "hasMoreErrors")
+            Prelude.<*> ( x
+                            Data..:? "resourceErrors"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ResourceErrorsDetails where
+  hashWithSalt _salt ResourceErrorsDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` hasMoreErrors
+      `Prelude.hashWithSalt` resourceErrors
+
+instance Prelude.NFData ResourceErrorsDetails where
+  rnf ResourceErrorsDetails' {..} =
+    Prelude.rnf hasMoreErrors
+      `Prelude.seq` Prelude.rnf resourceErrors
diff --git a/gen/Amazonka/ResilienceHub/Types/ResourceImportStatusType.hs b/gen/Amazonka/ResilienceHub/Types/ResourceImportStatusType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResourceImportStatusType.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.ResilienceHub.Types.ResourceImportStatusType
+-- 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.ResilienceHub.Types.ResourceImportStatusType
+  ( ResourceImportStatusType
+      ( ..,
+        ResourceImportStatusType_Failed,
+        ResourceImportStatusType_InProgress,
+        ResourceImportStatusType_Pending,
+        ResourceImportStatusType_Success
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceImportStatusType = ResourceImportStatusType'
+  { fromResourceImportStatusType ::
+      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 ResourceImportStatusType_Failed :: ResourceImportStatusType
+pattern ResourceImportStatusType_Failed = ResourceImportStatusType' "Failed"
+
+pattern ResourceImportStatusType_InProgress :: ResourceImportStatusType
+pattern ResourceImportStatusType_InProgress = ResourceImportStatusType' "InProgress"
+
+pattern ResourceImportStatusType_Pending :: ResourceImportStatusType
+pattern ResourceImportStatusType_Pending = ResourceImportStatusType' "Pending"
+
+pattern ResourceImportStatusType_Success :: ResourceImportStatusType
+pattern ResourceImportStatusType_Success = ResourceImportStatusType' "Success"
+
+{-# COMPLETE
+  ResourceImportStatusType_Failed,
+  ResourceImportStatusType_InProgress,
+  ResourceImportStatusType_Pending,
+  ResourceImportStatusType_Success,
+  ResourceImportStatusType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/ResourceMapping.hs b/gen/Amazonka/ResilienceHub/Types/ResourceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResourceMapping.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.ResilienceHub.Types.ResourceMapping
+-- 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.ResilienceHub.Types.ResourceMapping 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
+import Amazonka.ResilienceHub.Types.PhysicalResourceId
+import Amazonka.ResilienceHub.Types.ResourceMappingType
+
+-- | Defines a resource mapping.
+--
+-- /See:/ 'newResourceMapping' smart constructor.
+data ResourceMapping = ResourceMapping'
+  { -- | The name of the application this resource is mapped to.
+    appRegistryAppName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the CloudFormation stack this resource is mapped to.
+    logicalStackName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource group this resource is mapped to.
+    resourceGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource this resource is mapped to.
+    resourceName :: Prelude.Maybe Prelude.Text,
+    -- | The short name of the Terraform source.
+    terraformSourceName :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the type of resource mapping.
+    --
+    -- [AppRegistryApp]
+    --     The resource is mapped to another application. The name of the
+    --     application is contained in the @appRegistryAppName@ property.
+    --
+    -- [CfnStack]
+    --     The resource is mapped to a CloudFormation stack. The name of the
+    --     CloudFormation stack is contained in the @logicalStackName@
+    --     property.
+    --
+    -- [Resource]
+    --     The resource is mapped to another resource. The name of the resource
+    --     is contained in the @resourceName@ property.
+    --
+    -- [ResourceGroup]
+    --     The resource is mapped to a resource group. The name of the resource
+    --     group is contained in the @resourceGroupName@ property.
+    mappingType :: ResourceMappingType,
+    -- | The identifier of this resource.
+    physicalResourceId :: PhysicalResourceId
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceMapping' with all optional fields 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:
+--
+-- 'appRegistryAppName', 'resourceMapping_appRegistryAppName' - The name of the application this resource is mapped to.
+--
+-- 'logicalStackName', 'resourceMapping_logicalStackName' - The name of the CloudFormation stack this resource is mapped to.
+--
+-- 'resourceGroupName', 'resourceMapping_resourceGroupName' - The name of the resource group this resource is mapped to.
+--
+-- 'resourceName', 'resourceMapping_resourceName' - The name of the resource this resource is mapped to.
+--
+-- 'terraformSourceName', 'resourceMapping_terraformSourceName' - The short name of the Terraform source.
+--
+-- 'mappingType', 'resourceMapping_mappingType' - Specifies the type of resource mapping.
+--
+-- [AppRegistryApp]
+--     The resource is mapped to another application. The name of the
+--     application is contained in the @appRegistryAppName@ property.
+--
+-- [CfnStack]
+--     The resource is mapped to a CloudFormation stack. The name of the
+--     CloudFormation stack is contained in the @logicalStackName@
+--     property.
+--
+-- [Resource]
+--     The resource is mapped to another resource. The name of the resource
+--     is contained in the @resourceName@ property.
+--
+-- [ResourceGroup]
+--     The resource is mapped to a resource group. The name of the resource
+--     group is contained in the @resourceGroupName@ property.
+--
+-- 'physicalResourceId', 'resourceMapping_physicalResourceId' - The identifier of this resource.
+newResourceMapping ::
+  -- | 'mappingType'
+  ResourceMappingType ->
+  -- | 'physicalResourceId'
+  PhysicalResourceId ->
+  ResourceMapping
+newResourceMapping pMappingType_ pPhysicalResourceId_ =
+  ResourceMapping'
+    { appRegistryAppName =
+        Prelude.Nothing,
+      logicalStackName = Prelude.Nothing,
+      resourceGroupName = Prelude.Nothing,
+      resourceName = Prelude.Nothing,
+      terraformSourceName = Prelude.Nothing,
+      mappingType = pMappingType_,
+      physicalResourceId = pPhysicalResourceId_
+    }
+
+-- | The name of the application this resource is mapped to.
+resourceMapping_appRegistryAppName :: Lens.Lens' ResourceMapping (Prelude.Maybe Prelude.Text)
+resourceMapping_appRegistryAppName = Lens.lens (\ResourceMapping' {appRegistryAppName} -> appRegistryAppName) (\s@ResourceMapping' {} a -> s {appRegistryAppName = a} :: ResourceMapping)
+
+-- | The name of the CloudFormation stack this resource is mapped to.
+resourceMapping_logicalStackName :: Lens.Lens' ResourceMapping (Prelude.Maybe Prelude.Text)
+resourceMapping_logicalStackName = Lens.lens (\ResourceMapping' {logicalStackName} -> logicalStackName) (\s@ResourceMapping' {} a -> s {logicalStackName = a} :: ResourceMapping)
+
+-- | The name of the resource group this resource is mapped to.
+resourceMapping_resourceGroupName :: Lens.Lens' ResourceMapping (Prelude.Maybe Prelude.Text)
+resourceMapping_resourceGroupName = Lens.lens (\ResourceMapping' {resourceGroupName} -> resourceGroupName) (\s@ResourceMapping' {} a -> s {resourceGroupName = a} :: ResourceMapping)
+
+-- | The name of the resource this resource is mapped to.
+resourceMapping_resourceName :: Lens.Lens' ResourceMapping (Prelude.Maybe Prelude.Text)
+resourceMapping_resourceName = Lens.lens (\ResourceMapping' {resourceName} -> resourceName) (\s@ResourceMapping' {} a -> s {resourceName = a} :: ResourceMapping)
+
+-- | The short name of the Terraform source.
+resourceMapping_terraformSourceName :: Lens.Lens' ResourceMapping (Prelude.Maybe Prelude.Text)
+resourceMapping_terraformSourceName = Lens.lens (\ResourceMapping' {terraformSourceName} -> terraformSourceName) (\s@ResourceMapping' {} a -> s {terraformSourceName = a} :: ResourceMapping)
+
+-- | Specifies the type of resource mapping.
+--
+-- [AppRegistryApp]
+--     The resource is mapped to another application. The name of the
+--     application is contained in the @appRegistryAppName@ property.
+--
+-- [CfnStack]
+--     The resource is mapped to a CloudFormation stack. The name of the
+--     CloudFormation stack is contained in the @logicalStackName@
+--     property.
+--
+-- [Resource]
+--     The resource is mapped to another resource. The name of the resource
+--     is contained in the @resourceName@ property.
+--
+-- [ResourceGroup]
+--     The resource is mapped to a resource group. The name of the resource
+--     group is contained in the @resourceGroupName@ property.
+resourceMapping_mappingType :: Lens.Lens' ResourceMapping ResourceMappingType
+resourceMapping_mappingType = Lens.lens (\ResourceMapping' {mappingType} -> mappingType) (\s@ResourceMapping' {} a -> s {mappingType = a} :: ResourceMapping)
+
+-- | The identifier of this resource.
+resourceMapping_physicalResourceId :: Lens.Lens' ResourceMapping PhysicalResourceId
+resourceMapping_physicalResourceId = Lens.lens (\ResourceMapping' {physicalResourceId} -> physicalResourceId) (\s@ResourceMapping' {} a -> s {physicalResourceId = a} :: ResourceMapping)
+
+instance Data.FromJSON ResourceMapping where
+  parseJSON =
+    Data.withObject
+      "ResourceMapping"
+      ( \x ->
+          ResourceMapping'
+            Prelude.<$> (x Data..:? "appRegistryAppName")
+            Prelude.<*> (x Data..:? "logicalStackName")
+            Prelude.<*> (x Data..:? "resourceGroupName")
+            Prelude.<*> (x Data..:? "resourceName")
+            Prelude.<*> (x Data..:? "terraformSourceName")
+            Prelude.<*> (x Data..: "mappingType")
+            Prelude.<*> (x Data..: "physicalResourceId")
+      )
+
+instance Prelude.Hashable ResourceMapping where
+  hashWithSalt _salt ResourceMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` appRegistryAppName
+      `Prelude.hashWithSalt` logicalStackName
+      `Prelude.hashWithSalt` resourceGroupName
+      `Prelude.hashWithSalt` resourceName
+      `Prelude.hashWithSalt` terraformSourceName
+      `Prelude.hashWithSalt` mappingType
+      `Prelude.hashWithSalt` physicalResourceId
+
+instance Prelude.NFData ResourceMapping where
+  rnf ResourceMapping' {..} =
+    Prelude.rnf appRegistryAppName
+      `Prelude.seq` Prelude.rnf logicalStackName
+      `Prelude.seq` Prelude.rnf resourceGroupName
+      `Prelude.seq` Prelude.rnf resourceName
+      `Prelude.seq` Prelude.rnf terraformSourceName
+      `Prelude.seq` Prelude.rnf mappingType
+      `Prelude.seq` Prelude.rnf physicalResourceId
+
+instance Data.ToJSON ResourceMapping where
+  toJSON ResourceMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appRegistryAppName" Data..=)
+              Prelude.<$> appRegistryAppName,
+            ("logicalStackName" Data..=)
+              Prelude.<$> logicalStackName,
+            ("resourceGroupName" Data..=)
+              Prelude.<$> resourceGroupName,
+            ("resourceName" Data..=) Prelude.<$> resourceName,
+            ("terraformSourceName" Data..=)
+              Prelude.<$> terraformSourceName,
+            Prelude.Just ("mappingType" Data..= mappingType),
+            Prelude.Just
+              ("physicalResourceId" Data..= physicalResourceId)
+          ]
+      )
diff --git a/gen/Amazonka/ResilienceHub/Types/ResourceMappingType.hs b/gen/Amazonka/ResilienceHub/Types/ResourceMappingType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResourceMappingType.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.ResilienceHub.Types.ResourceMappingType
+-- 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.ResilienceHub.Types.ResourceMappingType
+  ( ResourceMappingType
+      ( ..,
+        ResourceMappingType_AppRegistryApp,
+        ResourceMappingType_CfnStack,
+        ResourceMappingType_Resource,
+        ResourceMappingType_ResourceGroup,
+        ResourceMappingType_Terraform
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceMappingType = ResourceMappingType'
+  { fromResourceMappingType ::
+      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 ResourceMappingType_AppRegistryApp :: ResourceMappingType
+pattern ResourceMappingType_AppRegistryApp = ResourceMappingType' "AppRegistryApp"
+
+pattern ResourceMappingType_CfnStack :: ResourceMappingType
+pattern ResourceMappingType_CfnStack = ResourceMappingType' "CfnStack"
+
+pattern ResourceMappingType_Resource :: ResourceMappingType
+pattern ResourceMappingType_Resource = ResourceMappingType' "Resource"
+
+pattern ResourceMappingType_ResourceGroup :: ResourceMappingType
+pattern ResourceMappingType_ResourceGroup = ResourceMappingType' "ResourceGroup"
+
+pattern ResourceMappingType_Terraform :: ResourceMappingType
+pattern ResourceMappingType_Terraform = ResourceMappingType' "Terraform"
+
+{-# COMPLETE
+  ResourceMappingType_AppRegistryApp,
+  ResourceMappingType_CfnStack,
+  ResourceMappingType_Resource,
+  ResourceMappingType_ResourceGroup,
+  ResourceMappingType_Terraform,
+  ResourceMappingType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/ResourceResolutionStatusType.hs b/gen/Amazonka/ResilienceHub/Types/ResourceResolutionStatusType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/ResourceResolutionStatusType.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.ResilienceHub.Types.ResourceResolutionStatusType
+-- 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.ResilienceHub.Types.ResourceResolutionStatusType
+  ( ResourceResolutionStatusType
+      ( ..,
+        ResourceResolutionStatusType_Failed,
+        ResourceResolutionStatusType_InProgress,
+        ResourceResolutionStatusType_Pending,
+        ResourceResolutionStatusType_Success
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceResolutionStatusType = ResourceResolutionStatusType'
+  { fromResourceResolutionStatusType ::
+      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 ResourceResolutionStatusType_Failed :: ResourceResolutionStatusType
+pattern ResourceResolutionStatusType_Failed = ResourceResolutionStatusType' "Failed"
+
+pattern ResourceResolutionStatusType_InProgress :: ResourceResolutionStatusType
+pattern ResourceResolutionStatusType_InProgress = ResourceResolutionStatusType' "InProgress"
+
+pattern ResourceResolutionStatusType_Pending :: ResourceResolutionStatusType
+pattern ResourceResolutionStatusType_Pending = ResourceResolutionStatusType' "Pending"
+
+pattern ResourceResolutionStatusType_Success :: ResourceResolutionStatusType
+pattern ResourceResolutionStatusType_Success = ResourceResolutionStatusType' "Success"
+
+{-# COMPLETE
+  ResourceResolutionStatusType_Failed,
+  ResourceResolutionStatusType_InProgress,
+  ResourceResolutionStatusType_Pending,
+  ResourceResolutionStatusType_Success,
+  ResourceResolutionStatusType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/S3Location.hs b/gen/Amazonka/ResilienceHub/Types/S3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/S3Location.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.ResilienceHub.Types.S3Location
+-- 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.ResilienceHub.Types.S3Location 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 location of the Amazon S3 bucket.
+--
+-- /See:/ 'newS3Location' smart constructor.
+data S3Location = S3Location'
+  { -- | The name of the Amazon S3 bucket.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The prefix for the Amazon S3 bucket.
+    prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Location' with all optional fields 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:
+--
+-- 'bucket', 's3Location_bucket' - The name of the Amazon S3 bucket.
+--
+-- 'prefix', 's3Location_prefix' - The prefix for the Amazon S3 bucket.
+newS3Location ::
+  S3Location
+newS3Location =
+  S3Location'
+    { bucket = Prelude.Nothing,
+      prefix = Prelude.Nothing
+    }
+
+-- | The name of the Amazon S3 bucket.
+s3Location_bucket :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_bucket = Lens.lens (\S3Location' {bucket} -> bucket) (\s@S3Location' {} a -> s {bucket = a} :: S3Location)
+
+-- | The prefix for the Amazon S3 bucket.
+s3Location_prefix :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_prefix = Lens.lens (\S3Location' {prefix} -> prefix) (\s@S3Location' {} a -> s {prefix = a} :: S3Location)
+
+instance Data.FromJSON S3Location where
+  parseJSON =
+    Data.withObject
+      "S3Location"
+      ( \x ->
+          S3Location'
+            Prelude.<$> (x Data..:? "bucket")
+            Prelude.<*> (x Data..:? "prefix")
+      )
+
+instance Prelude.Hashable S3Location where
+  hashWithSalt _salt S3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` prefix
+
+instance Prelude.NFData S3Location where
+  rnf S3Location' {..} =
+    Prelude.rnf bucket `Prelude.seq` Prelude.rnf prefix
diff --git a/gen/Amazonka/ResilienceHub/Types/SopRecommendation.hs b/gen/Amazonka/ResilienceHub/Types/SopRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/SopRecommendation.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResilienceHub.Types.SopRecommendation
+-- 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.ResilienceHub.Types.SopRecommendation 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
+import Amazonka.ResilienceHub.Types.RecommendationItem
+import Amazonka.ResilienceHub.Types.SopServiceType
+
+-- | Defines a standard operating procedure (SOP) recommendation.
+--
+-- /See:/ 'newSopRecommendation' smart constructor.
+data SopRecommendation = SopRecommendation'
+  { -- | The application component name.
+    appComponentName :: Prelude.Maybe Prelude.Text,
+    -- | The description of the SOP recommendation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The recommendation items.
+    items :: Prelude.Maybe [RecommendationItem],
+    -- | The name of the SOP recommendation.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The prerequisite for the SOP recommendation.
+    prerequisite :: Prelude.Maybe Prelude.Text,
+    -- | Identifier for the SOP recommendation.
+    recommendationId :: Prelude.Text,
+    -- | The reference identifier for the SOP recommendation.
+    referenceId :: Prelude.Text,
+    -- | The service type.
+    serviceType :: SopServiceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SopRecommendation' with all optional fields 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:
+--
+-- 'appComponentName', 'sopRecommendation_appComponentName' - The application component name.
+--
+-- 'description', 'sopRecommendation_description' - The description of the SOP recommendation.
+--
+-- 'items', 'sopRecommendation_items' - The recommendation items.
+--
+-- 'name', 'sopRecommendation_name' - The name of the SOP recommendation.
+--
+-- 'prerequisite', 'sopRecommendation_prerequisite' - The prerequisite for the SOP recommendation.
+--
+-- 'recommendationId', 'sopRecommendation_recommendationId' - Identifier for the SOP recommendation.
+--
+-- 'referenceId', 'sopRecommendation_referenceId' - The reference identifier for the SOP recommendation.
+--
+-- 'serviceType', 'sopRecommendation_serviceType' - The service type.
+newSopRecommendation ::
+  -- | 'recommendationId'
+  Prelude.Text ->
+  -- | 'referenceId'
+  Prelude.Text ->
+  -- | 'serviceType'
+  SopServiceType ->
+  SopRecommendation
+newSopRecommendation
+  pRecommendationId_
+  pReferenceId_
+  pServiceType_ =
+    SopRecommendation'
+      { appComponentName =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        items = Prelude.Nothing,
+        name = Prelude.Nothing,
+        prerequisite = Prelude.Nothing,
+        recommendationId = pRecommendationId_,
+        referenceId = pReferenceId_,
+        serviceType = pServiceType_
+      }
+
+-- | The application component name.
+sopRecommendation_appComponentName :: Lens.Lens' SopRecommendation (Prelude.Maybe Prelude.Text)
+sopRecommendation_appComponentName = Lens.lens (\SopRecommendation' {appComponentName} -> appComponentName) (\s@SopRecommendation' {} a -> s {appComponentName = a} :: SopRecommendation)
+
+-- | The description of the SOP recommendation.
+sopRecommendation_description :: Lens.Lens' SopRecommendation (Prelude.Maybe Prelude.Text)
+sopRecommendation_description = Lens.lens (\SopRecommendation' {description} -> description) (\s@SopRecommendation' {} a -> s {description = a} :: SopRecommendation)
+
+-- | The recommendation items.
+sopRecommendation_items :: Lens.Lens' SopRecommendation (Prelude.Maybe [RecommendationItem])
+sopRecommendation_items = Lens.lens (\SopRecommendation' {items} -> items) (\s@SopRecommendation' {} a -> s {items = a} :: SopRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the SOP recommendation.
+sopRecommendation_name :: Lens.Lens' SopRecommendation (Prelude.Maybe Prelude.Text)
+sopRecommendation_name = Lens.lens (\SopRecommendation' {name} -> name) (\s@SopRecommendation' {} a -> s {name = a} :: SopRecommendation)
+
+-- | The prerequisite for the SOP recommendation.
+sopRecommendation_prerequisite :: Lens.Lens' SopRecommendation (Prelude.Maybe Prelude.Text)
+sopRecommendation_prerequisite = Lens.lens (\SopRecommendation' {prerequisite} -> prerequisite) (\s@SopRecommendation' {} a -> s {prerequisite = a} :: SopRecommendation)
+
+-- | Identifier for the SOP recommendation.
+sopRecommendation_recommendationId :: Lens.Lens' SopRecommendation Prelude.Text
+sopRecommendation_recommendationId = Lens.lens (\SopRecommendation' {recommendationId} -> recommendationId) (\s@SopRecommendation' {} a -> s {recommendationId = a} :: SopRecommendation)
+
+-- | The reference identifier for the SOP recommendation.
+sopRecommendation_referenceId :: Lens.Lens' SopRecommendation Prelude.Text
+sopRecommendation_referenceId = Lens.lens (\SopRecommendation' {referenceId} -> referenceId) (\s@SopRecommendation' {} a -> s {referenceId = a} :: SopRecommendation)
+
+-- | The service type.
+sopRecommendation_serviceType :: Lens.Lens' SopRecommendation SopServiceType
+sopRecommendation_serviceType = Lens.lens (\SopRecommendation' {serviceType} -> serviceType) (\s@SopRecommendation' {} a -> s {serviceType = a} :: SopRecommendation)
+
+instance Data.FromJSON SopRecommendation where
+  parseJSON =
+    Data.withObject
+      "SopRecommendation"
+      ( \x ->
+          SopRecommendation'
+            Prelude.<$> (x Data..:? "appComponentName")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "items" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "prerequisite")
+            Prelude.<*> (x Data..: "recommendationId")
+            Prelude.<*> (x Data..: "referenceId")
+            Prelude.<*> (x Data..: "serviceType")
+      )
+
+instance Prelude.Hashable SopRecommendation where
+  hashWithSalt _salt SopRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponentName
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` items
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` prerequisite
+      `Prelude.hashWithSalt` recommendationId
+      `Prelude.hashWithSalt` referenceId
+      `Prelude.hashWithSalt` serviceType
+
+instance Prelude.NFData SopRecommendation where
+  rnf SopRecommendation' {..} =
+    Prelude.rnf appComponentName
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf items
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf prerequisite
+      `Prelude.seq` Prelude.rnf recommendationId
+      `Prelude.seq` Prelude.rnf referenceId
+      `Prelude.seq` Prelude.rnf serviceType
diff --git a/gen/Amazonka/ResilienceHub/Types/SopServiceType.hs b/gen/Amazonka/ResilienceHub/Types/SopServiceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/SopServiceType.hs
@@ -0,0 +1,66 @@
+{-# 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.ResilienceHub.Types.SopServiceType
+-- 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.ResilienceHub.Types.SopServiceType
+  ( SopServiceType
+      ( ..,
+        SopServiceType_SSM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SopServiceType = SopServiceType'
+  { fromSopServiceType ::
+      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 SopServiceType_SSM :: SopServiceType
+pattern SopServiceType_SSM = SopServiceType' "SSM"
+
+{-# COMPLETE
+  SopServiceType_SSM,
+  SopServiceType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/TemplateFormat.hs b/gen/Amazonka/ResilienceHub/Types/TemplateFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/TemplateFormat.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.ResilienceHub.Types.TemplateFormat
+-- 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.ResilienceHub.Types.TemplateFormat
+  ( TemplateFormat
+      ( ..,
+        TemplateFormat_CfnJson,
+        TemplateFormat_CfnYaml
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TemplateFormat = TemplateFormat'
+  { fromTemplateFormat ::
+      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 TemplateFormat_CfnJson :: TemplateFormat
+pattern TemplateFormat_CfnJson = TemplateFormat' "CfnJson"
+
+pattern TemplateFormat_CfnYaml :: TemplateFormat
+pattern TemplateFormat_CfnYaml = TemplateFormat' "CfnYaml"
+
+{-# COMPLETE
+  TemplateFormat_CfnJson,
+  TemplateFormat_CfnYaml,
+  TemplateFormat'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/TerraformSource.hs b/gen/Amazonka/ResilienceHub/Types/TerraformSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/TerraformSource.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.ResilienceHub.Types.TerraformSource
+-- 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.ResilienceHub.Types.TerraformSource 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 Terraform s3 state file you need to import.
+--
+-- /See:/ 'newTerraformSource' smart constructor.
+data TerraformSource = TerraformSource'
+  { -- | The Terraform s3 state file you need to import.
+    s3StateFileUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerraformSource' with all optional fields 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:
+--
+-- 's3StateFileUrl', 'terraformSource_s3StateFileUrl' - The Terraform s3 state file you need to import.
+newTerraformSource ::
+  -- | 's3StateFileUrl'
+  Prelude.Text ->
+  TerraformSource
+newTerraformSource pS3StateFileUrl_ =
+  TerraformSource' {s3StateFileUrl = pS3StateFileUrl_}
+
+-- | The Terraform s3 state file you need to import.
+terraformSource_s3StateFileUrl :: Lens.Lens' TerraformSource Prelude.Text
+terraformSource_s3StateFileUrl = Lens.lens (\TerraformSource' {s3StateFileUrl} -> s3StateFileUrl) (\s@TerraformSource' {} a -> s {s3StateFileUrl = a} :: TerraformSource)
+
+instance Data.FromJSON TerraformSource where
+  parseJSON =
+    Data.withObject
+      "TerraformSource"
+      ( \x ->
+          TerraformSource'
+            Prelude.<$> (x Data..: "s3StateFileUrl")
+      )
+
+instance Prelude.Hashable TerraformSource where
+  hashWithSalt _salt TerraformSource' {..} =
+    _salt `Prelude.hashWithSalt` s3StateFileUrl
+
+instance Prelude.NFData TerraformSource where
+  rnf TerraformSource' {..} = Prelude.rnf s3StateFileUrl
+
+instance Data.ToJSON TerraformSource where
+  toJSON TerraformSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("s3StateFileUrl" Data..= s3StateFileUrl)
+          ]
+      )
diff --git a/gen/Amazonka/ResilienceHub/Types/TestRecommendation.hs b/gen/Amazonka/ResilienceHub/Types/TestRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/TestRecommendation.hs
@@ -0,0 +1,201 @@
+{-# 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.ResilienceHub.Types.TestRecommendation
+-- 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.ResilienceHub.Types.TestRecommendation 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
+import Amazonka.ResilienceHub.Types.RecommendationItem
+import Amazonka.ResilienceHub.Types.TestRisk
+import Amazonka.ResilienceHub.Types.TestType
+
+-- | Defines a test recommendation.
+--
+-- /See:/ 'newTestRecommendation' smart constructor.
+data TestRecommendation = TestRecommendation'
+  { -- | The name of the application component.
+    appComponentName :: Prelude.Maybe Prelude.Text,
+    -- | A list of recommended alarms that are used in the test and must be
+    -- exported before or with the test.
+    dependsOnAlarms :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The description for the test recommendation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The intent of the test recommendation.
+    intent :: Prelude.Maybe Prelude.Text,
+    -- | The test recommendation items.
+    items :: Prelude.Maybe [RecommendationItem],
+    -- | The name of the test recommendation.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The prerequisite of the test recommendation.
+    prerequisite :: Prelude.Maybe Prelude.Text,
+    -- | Identifier for the test recommendation.
+    recommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The level of risk for this test recommendation.
+    risk :: Prelude.Maybe TestRisk,
+    -- | The type of test recommendation.
+    type' :: Prelude.Maybe TestType,
+    -- | The reference identifier for the test recommendation.
+    referenceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestRecommendation' with all optional fields 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:
+--
+-- 'appComponentName', 'testRecommendation_appComponentName' - The name of the application component.
+--
+-- 'dependsOnAlarms', 'testRecommendation_dependsOnAlarms' - A list of recommended alarms that are used in the test and must be
+-- exported before or with the test.
+--
+-- 'description', 'testRecommendation_description' - The description for the test recommendation.
+--
+-- 'intent', 'testRecommendation_intent' - The intent of the test recommendation.
+--
+-- 'items', 'testRecommendation_items' - The test recommendation items.
+--
+-- 'name', 'testRecommendation_name' - The name of the test recommendation.
+--
+-- 'prerequisite', 'testRecommendation_prerequisite' - The prerequisite of the test recommendation.
+--
+-- 'recommendationId', 'testRecommendation_recommendationId' - Identifier for the test recommendation.
+--
+-- 'risk', 'testRecommendation_risk' - The level of risk for this test recommendation.
+--
+-- 'type'', 'testRecommendation_type' - The type of test recommendation.
+--
+-- 'referenceId', 'testRecommendation_referenceId' - The reference identifier for the test recommendation.
+newTestRecommendation ::
+  -- | 'referenceId'
+  Prelude.Text ->
+  TestRecommendation
+newTestRecommendation pReferenceId_ =
+  TestRecommendation'
+    { appComponentName =
+        Prelude.Nothing,
+      dependsOnAlarms = Prelude.Nothing,
+      description = Prelude.Nothing,
+      intent = Prelude.Nothing,
+      items = Prelude.Nothing,
+      name = Prelude.Nothing,
+      prerequisite = Prelude.Nothing,
+      recommendationId = Prelude.Nothing,
+      risk = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      referenceId = pReferenceId_
+    }
+
+-- | The name of the application component.
+testRecommendation_appComponentName :: Lens.Lens' TestRecommendation (Prelude.Maybe Prelude.Text)
+testRecommendation_appComponentName = Lens.lens (\TestRecommendation' {appComponentName} -> appComponentName) (\s@TestRecommendation' {} a -> s {appComponentName = a} :: TestRecommendation)
+
+-- | A list of recommended alarms that are used in the test and must be
+-- exported before or with the test.
+testRecommendation_dependsOnAlarms :: Lens.Lens' TestRecommendation (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+testRecommendation_dependsOnAlarms = Lens.lens (\TestRecommendation' {dependsOnAlarms} -> dependsOnAlarms) (\s@TestRecommendation' {} a -> s {dependsOnAlarms = a} :: TestRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description for the test recommendation.
+testRecommendation_description :: Lens.Lens' TestRecommendation (Prelude.Maybe Prelude.Text)
+testRecommendation_description = Lens.lens (\TestRecommendation' {description} -> description) (\s@TestRecommendation' {} a -> s {description = a} :: TestRecommendation)
+
+-- | The intent of the test recommendation.
+testRecommendation_intent :: Lens.Lens' TestRecommendation (Prelude.Maybe Prelude.Text)
+testRecommendation_intent = Lens.lens (\TestRecommendation' {intent} -> intent) (\s@TestRecommendation' {} a -> s {intent = a} :: TestRecommendation)
+
+-- | The test recommendation items.
+testRecommendation_items :: Lens.Lens' TestRecommendation (Prelude.Maybe [RecommendationItem])
+testRecommendation_items = Lens.lens (\TestRecommendation' {items} -> items) (\s@TestRecommendation' {} a -> s {items = a} :: TestRecommendation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the test recommendation.
+testRecommendation_name :: Lens.Lens' TestRecommendation (Prelude.Maybe Prelude.Text)
+testRecommendation_name = Lens.lens (\TestRecommendation' {name} -> name) (\s@TestRecommendation' {} a -> s {name = a} :: TestRecommendation)
+
+-- | The prerequisite of the test recommendation.
+testRecommendation_prerequisite :: Lens.Lens' TestRecommendation (Prelude.Maybe Prelude.Text)
+testRecommendation_prerequisite = Lens.lens (\TestRecommendation' {prerequisite} -> prerequisite) (\s@TestRecommendation' {} a -> s {prerequisite = a} :: TestRecommendation)
+
+-- | Identifier for the test recommendation.
+testRecommendation_recommendationId :: Lens.Lens' TestRecommendation (Prelude.Maybe Prelude.Text)
+testRecommendation_recommendationId = Lens.lens (\TestRecommendation' {recommendationId} -> recommendationId) (\s@TestRecommendation' {} a -> s {recommendationId = a} :: TestRecommendation)
+
+-- | The level of risk for this test recommendation.
+testRecommendation_risk :: Lens.Lens' TestRecommendation (Prelude.Maybe TestRisk)
+testRecommendation_risk = Lens.lens (\TestRecommendation' {risk} -> risk) (\s@TestRecommendation' {} a -> s {risk = a} :: TestRecommendation)
+
+-- | The type of test recommendation.
+testRecommendation_type :: Lens.Lens' TestRecommendation (Prelude.Maybe TestType)
+testRecommendation_type = Lens.lens (\TestRecommendation' {type'} -> type') (\s@TestRecommendation' {} a -> s {type' = a} :: TestRecommendation)
+
+-- | The reference identifier for the test recommendation.
+testRecommendation_referenceId :: Lens.Lens' TestRecommendation Prelude.Text
+testRecommendation_referenceId = Lens.lens (\TestRecommendation' {referenceId} -> referenceId) (\s@TestRecommendation' {} a -> s {referenceId = a} :: TestRecommendation)
+
+instance Data.FromJSON TestRecommendation where
+  parseJSON =
+    Data.withObject
+      "TestRecommendation"
+      ( \x ->
+          TestRecommendation'
+            Prelude.<$> (x Data..:? "appComponentName")
+            Prelude.<*> (x Data..:? "dependsOnAlarms")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "intent")
+            Prelude.<*> (x Data..:? "items" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "prerequisite")
+            Prelude.<*> (x Data..:? "recommendationId")
+            Prelude.<*> (x Data..:? "risk")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..: "referenceId")
+      )
+
+instance Prelude.Hashable TestRecommendation where
+  hashWithSalt _salt TestRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` appComponentName
+      `Prelude.hashWithSalt` dependsOnAlarms
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` intent
+      `Prelude.hashWithSalt` items
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` prerequisite
+      `Prelude.hashWithSalt` recommendationId
+      `Prelude.hashWithSalt` risk
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` referenceId
+
+instance Prelude.NFData TestRecommendation where
+  rnf TestRecommendation' {..} =
+    Prelude.rnf appComponentName
+      `Prelude.seq` Prelude.rnf dependsOnAlarms
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf intent
+      `Prelude.seq` Prelude.rnf items
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf prerequisite
+      `Prelude.seq` Prelude.rnf recommendationId
+      `Prelude.seq` Prelude.rnf risk
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf referenceId
diff --git a/gen/Amazonka/ResilienceHub/Types/TestRisk.hs b/gen/Amazonka/ResilienceHub/Types/TestRisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/TestRisk.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.ResilienceHub.Types.TestRisk
+-- 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.ResilienceHub.Types.TestRisk
+  ( TestRisk
+      ( ..,
+        TestRisk_High,
+        TestRisk_Medium,
+        TestRisk_Small
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TestRisk = TestRisk'
+  { fromTestRisk ::
+      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 TestRisk_High :: TestRisk
+pattern TestRisk_High = TestRisk' "High"
+
+pattern TestRisk_Medium :: TestRisk
+pattern TestRisk_Medium = TestRisk' "Medium"
+
+pattern TestRisk_Small :: TestRisk
+pattern TestRisk_Small = TestRisk' "Small"
+
+{-# COMPLETE
+  TestRisk_High,
+  TestRisk_Medium,
+  TestRisk_Small,
+  TestRisk'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/TestType.hs b/gen/Amazonka/ResilienceHub/Types/TestType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/TestType.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.ResilienceHub.Types.TestType
+-- 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.ResilienceHub.Types.TestType
+  ( TestType
+      ( ..,
+        TestType_AZ,
+        TestType_Hardware,
+        TestType_Region,
+        TestType_Software
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TestType = TestType'
+  { fromTestType ::
+      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 TestType_AZ :: TestType
+pattern TestType_AZ = TestType' "AZ"
+
+pattern TestType_Hardware :: TestType
+pattern TestType_Hardware = TestType' "Hardware"
+
+pattern TestType_Region :: TestType
+pattern TestType_Region = TestType' "Region"
+
+pattern TestType_Software :: TestType
+pattern TestType_Software = TestType' "Software"
+
+{-# COMPLETE
+  TestType_AZ,
+  TestType_Hardware,
+  TestType_Region,
+  TestType_Software,
+  TestType'
+  #-}
diff --git a/gen/Amazonka/ResilienceHub/Types/UnsupportedResource.hs b/gen/Amazonka/ResilienceHub/Types/UnsupportedResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/Types/UnsupportedResource.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.ResilienceHub.Types.UnsupportedResource
+-- 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.ResilienceHub.Types.UnsupportedResource 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
+import Amazonka.ResilienceHub.Types.LogicalResourceId
+import Amazonka.ResilienceHub.Types.PhysicalResourceId
+
+-- | Defines a resource that is not supported by Resilience Hub.
+--
+-- /See:/ 'newUnsupportedResource' smart constructor.
+data UnsupportedResource = UnsupportedResource'
+  { -- | The logical resource identifier for the unsupported resource.
+    logicalResourceId :: LogicalResourceId,
+    -- | The physical resource identifier for the unsupported resource.
+    physicalResourceId :: PhysicalResourceId,
+    -- | The type of resource.
+    resourceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnsupportedResource' with all optional fields 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:
+--
+-- 'logicalResourceId', 'unsupportedResource_logicalResourceId' - The logical resource identifier for the unsupported resource.
+--
+-- 'physicalResourceId', 'unsupportedResource_physicalResourceId' - The physical resource identifier for the unsupported resource.
+--
+-- 'resourceType', 'unsupportedResource_resourceType' - The type of resource.
+newUnsupportedResource ::
+  -- | 'logicalResourceId'
+  LogicalResourceId ->
+  -- | 'physicalResourceId'
+  PhysicalResourceId ->
+  -- | 'resourceType'
+  Prelude.Text ->
+  UnsupportedResource
+newUnsupportedResource
+  pLogicalResourceId_
+  pPhysicalResourceId_
+  pResourceType_ =
+    UnsupportedResource'
+      { logicalResourceId =
+          pLogicalResourceId_,
+        physicalResourceId = pPhysicalResourceId_,
+        resourceType = pResourceType_
+      }
+
+-- | The logical resource identifier for the unsupported resource.
+unsupportedResource_logicalResourceId :: Lens.Lens' UnsupportedResource LogicalResourceId
+unsupportedResource_logicalResourceId = Lens.lens (\UnsupportedResource' {logicalResourceId} -> logicalResourceId) (\s@UnsupportedResource' {} a -> s {logicalResourceId = a} :: UnsupportedResource)
+
+-- | The physical resource identifier for the unsupported resource.
+unsupportedResource_physicalResourceId :: Lens.Lens' UnsupportedResource PhysicalResourceId
+unsupportedResource_physicalResourceId = Lens.lens (\UnsupportedResource' {physicalResourceId} -> physicalResourceId) (\s@UnsupportedResource' {} a -> s {physicalResourceId = a} :: UnsupportedResource)
+
+-- | The type of resource.
+unsupportedResource_resourceType :: Lens.Lens' UnsupportedResource Prelude.Text
+unsupportedResource_resourceType = Lens.lens (\UnsupportedResource' {resourceType} -> resourceType) (\s@UnsupportedResource' {} a -> s {resourceType = a} :: UnsupportedResource)
+
+instance Data.FromJSON UnsupportedResource where
+  parseJSON =
+    Data.withObject
+      "UnsupportedResource"
+      ( \x ->
+          UnsupportedResource'
+            Prelude.<$> (x Data..: "logicalResourceId")
+            Prelude.<*> (x Data..: "physicalResourceId")
+            Prelude.<*> (x Data..: "resourceType")
+      )
+
+instance Prelude.Hashable UnsupportedResource where
+  hashWithSalt _salt UnsupportedResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` logicalResourceId
+      `Prelude.hashWithSalt` physicalResourceId
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData UnsupportedResource where
+  rnf UnsupportedResource' {..} =
+    Prelude.rnf logicalResourceId
+      `Prelude.seq` Prelude.rnf physicalResourceId
+      `Prelude.seq` Prelude.rnf resourceType
diff --git a/gen/Amazonka/ResilienceHub/UntagResource.hs b/gen/Amazonka/ResilienceHub/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/UntagResource.hs
@@ -0,0 +1,166 @@
+{-# 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.ResilienceHub.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more tags from a resource.
+module Amazonka.ResilienceHub.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The keys of the tags to remove.
+    tagKeys :: Data.Sensitive (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys of the tags to remove.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys =
+        Data._Sensitive
+          Prelude.. Lens.coerced
+          Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The keys of the tags to remove.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResilienceHub/UpdateApp.hs b/gen/Amazonka/ResilienceHub/UpdateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/UpdateApp.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.ResilienceHub.UpdateApp
+-- 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 an application.
+module Amazonka.ResilienceHub.UpdateApp
+  ( -- * Creating a Request
+    UpdateApp (..),
+    newUpdateApp,
+
+    -- * Request Lenses
+    updateApp_assessmentSchedule,
+    updateApp_clearResiliencyPolicyArn,
+    updateApp_description,
+    updateApp_policyArn,
+    updateApp_appArn,
+
+    -- * Destructuring the Response
+    UpdateAppResponse (..),
+    newUpdateAppResponse,
+
+    -- * Response Lenses
+    updateAppResponse_httpStatus,
+    updateAppResponse_app,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateApp' smart constructor.
+data UpdateApp = UpdateApp'
+  { -- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+    assessmentSchedule :: Prelude.Maybe AppAssessmentScheduleType,
+    -- | Specifies if the resiliency policy ARN should be cleared.
+    clearResiliencyPolicyArn :: Prelude.Maybe Prelude.Bool,
+    -- | The optional description for an app.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the application. The format for this
+    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    appArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApp' with all optional fields 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:
+--
+-- 'assessmentSchedule', 'updateApp_assessmentSchedule' - Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+--
+-- 'clearResiliencyPolicyArn', 'updateApp_clearResiliencyPolicyArn' - Specifies if the resiliency policy ARN should be cleared.
+--
+-- 'description', 'updateApp_description' - The optional description for an app.
+--
+-- 'policyArn', 'updateApp_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'appArn', 'updateApp_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newUpdateApp ::
+  -- | 'appArn'
+  Prelude.Text ->
+  UpdateApp
+newUpdateApp pAppArn_ =
+  UpdateApp'
+    { assessmentSchedule = Prelude.Nothing,
+      clearResiliencyPolicyArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      policyArn = Prelude.Nothing,
+      appArn = pAppArn_
+    }
+
+-- | Assessment execution schedule with \'Daily\' or \'Disabled\' values.
+updateApp_assessmentSchedule :: Lens.Lens' UpdateApp (Prelude.Maybe AppAssessmentScheduleType)
+updateApp_assessmentSchedule = Lens.lens (\UpdateApp' {assessmentSchedule} -> assessmentSchedule) (\s@UpdateApp' {} a -> s {assessmentSchedule = a} :: UpdateApp)
+
+-- | Specifies if the resiliency policy ARN should be cleared.
+updateApp_clearResiliencyPolicyArn :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Bool)
+updateApp_clearResiliencyPolicyArn = Lens.lens (\UpdateApp' {clearResiliencyPolicyArn} -> clearResiliencyPolicyArn) (\s@UpdateApp' {} a -> s {clearResiliencyPolicyArn = a} :: UpdateApp)
+
+-- | The optional description for an app.
+updateApp_description :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_description = Lens.lens (\UpdateApp' {description} -> description) (\s@UpdateApp' {} a -> s {description = a} :: UpdateApp)
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+updateApp_policyArn :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_policyArn = Lens.lens (\UpdateApp' {policyArn} -> policyArn) (\s@UpdateApp' {} a -> s {policyArn = a} :: UpdateApp)
+
+-- | The Amazon Resource Name (ARN) of the application. The format for this
+-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+updateApp_appArn :: Lens.Lens' UpdateApp Prelude.Text
+updateApp_appArn = Lens.lens (\UpdateApp' {appArn} -> appArn) (\s@UpdateApp' {} a -> s {appArn = a} :: UpdateApp)
+
+instance Core.AWSRequest UpdateApp where
+  type AWSResponse UpdateApp = UpdateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "app")
+      )
+
+instance Prelude.Hashable UpdateApp where
+  hashWithSalt _salt UpdateApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` assessmentSchedule
+      `Prelude.hashWithSalt` clearResiliencyPolicyArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` policyArn
+      `Prelude.hashWithSalt` appArn
+
+instance Prelude.NFData UpdateApp where
+  rnf UpdateApp' {..} =
+    Prelude.rnf assessmentSchedule
+      `Prelude.seq` Prelude.rnf clearResiliencyPolicyArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf policyArn
+      `Prelude.seq` Prelude.rnf appArn
+
+instance Data.ToHeaders UpdateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApp where
+  toJSON UpdateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("assessmentSchedule" Data..=)
+              Prelude.<$> assessmentSchedule,
+            ("clearResiliencyPolicyArn" Data..=)
+              Prelude.<$> clearResiliencyPolicyArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("policyArn" Data..=) Prelude.<$> policyArn,
+            Prelude.Just ("appArn" Data..= appArn)
+          ]
+      )
+
+instance Data.ToPath UpdateApp where
+  toPath = Prelude.const "/update-app"
+
+instance Data.ToQuery UpdateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAppResponse' smart constructor.
+data UpdateAppResponse = UpdateAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The specified application, returned as an object with details including
+    -- compliance status, creation time, description, resiliency score, and
+    -- more.
+    app :: App
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppResponse' with all optional fields 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', 'updateAppResponse_httpStatus' - The response's http status code.
+--
+-- 'app', 'updateAppResponse_app' - The specified application, returned as an object with details including
+-- compliance status, creation time, description, resiliency score, and
+-- more.
+newUpdateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'app'
+  App ->
+  UpdateAppResponse
+newUpdateAppResponse pHttpStatus_ pApp_ =
+  UpdateAppResponse'
+    { httpStatus = pHttpStatus_,
+      app = pApp_
+    }
+
+-- | The response's http status code.
+updateAppResponse_httpStatus :: Lens.Lens' UpdateAppResponse Prelude.Int
+updateAppResponse_httpStatus = Lens.lens (\UpdateAppResponse' {httpStatus} -> httpStatus) (\s@UpdateAppResponse' {} a -> s {httpStatus = a} :: UpdateAppResponse)
+
+-- | The specified application, returned as an object with details including
+-- compliance status, creation time, description, resiliency score, and
+-- more.
+updateAppResponse_app :: Lens.Lens' UpdateAppResponse App
+updateAppResponse_app = Lens.lens (\UpdateAppResponse' {app} -> app) (\s@UpdateAppResponse' {} a -> s {app = a} :: UpdateAppResponse)
+
+instance Prelude.NFData UpdateAppResponse where
+  rnf UpdateAppResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf app
diff --git a/gen/Amazonka/ResilienceHub/UpdateResiliencyPolicy.hs b/gen/Amazonka/ResilienceHub/UpdateResiliencyPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/UpdateResiliencyPolicy.hs
@@ -0,0 +1,271 @@
+{-# 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.ResilienceHub.UpdateResiliencyPolicy
+-- 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 a resiliency policy.
+module Amazonka.ResilienceHub.UpdateResiliencyPolicy
+  ( -- * Creating a Request
+    UpdateResiliencyPolicy (..),
+    newUpdateResiliencyPolicy,
+
+    -- * Request Lenses
+    updateResiliencyPolicy_dataLocationConstraint,
+    updateResiliencyPolicy_policy,
+    updateResiliencyPolicy_policyDescription,
+    updateResiliencyPolicy_policyName,
+    updateResiliencyPolicy_tier,
+    updateResiliencyPolicy_policyArn,
+
+    -- * Destructuring the Response
+    UpdateResiliencyPolicyResponse (..),
+    newUpdateResiliencyPolicyResponse,
+
+    -- * Response Lenses
+    updateResiliencyPolicyResponse_httpStatus,
+    updateResiliencyPolicyResponse_policy,
+  )
+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
+import qualified Amazonka.Request as Request
+import Amazonka.ResilienceHub.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResiliencyPolicy' smart constructor.
+data UpdateResiliencyPolicy = UpdateResiliencyPolicy'
+  { -- | Specifies a high-level geographical location constraint for where your
+    -- resilience policy data can be stored.
+    dataLocationConstraint :: Prelude.Maybe DataLocationConstraint,
+    -- | The type of resiliency policy to be created, including the recovery time
+    -- objective (RTO) and recovery point objective (RPO) in seconds.
+    policy :: Prelude.Maybe (Prelude.HashMap DisruptionType FailurePolicy),
+    -- | The description for the policy.
+    policyDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy
+    policyName :: Prelude.Maybe Prelude.Text,
+    -- | The tier for this resiliency policy, ranging from the highest severity
+    -- (@MissionCritical@) to lowest (@NonCritical@).
+    tier :: Prelude.Maybe ResiliencyPolicyTier,
+    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+    -- this ARN is:
+    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+    -- For more information about ARNs, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    policyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResiliencyPolicy' with all optional fields 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:
+--
+-- 'dataLocationConstraint', 'updateResiliencyPolicy_dataLocationConstraint' - Specifies a high-level geographical location constraint for where your
+-- resilience policy data can be stored.
+--
+-- 'policy', 'updateResiliencyPolicy_policy' - The type of resiliency policy to be created, including the recovery time
+-- objective (RTO) and recovery point objective (RPO) in seconds.
+--
+-- 'policyDescription', 'updateResiliencyPolicy_policyDescription' - The description for the policy.
+--
+-- 'policyName', 'updateResiliencyPolicy_policyName' - The name of the policy
+--
+-- 'tier', 'updateResiliencyPolicy_tier' - The tier for this resiliency policy, ranging from the highest severity
+-- (@MissionCritical@) to lowest (@NonCritical@).
+--
+-- 'policyArn', 'updateResiliencyPolicy_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+newUpdateResiliencyPolicy ::
+  -- | 'policyArn'
+  Prelude.Text ->
+  UpdateResiliencyPolicy
+newUpdateResiliencyPolicy pPolicyArn_ =
+  UpdateResiliencyPolicy'
+    { dataLocationConstraint =
+        Prelude.Nothing,
+      policy = Prelude.Nothing,
+      policyDescription = Prelude.Nothing,
+      policyName = Prelude.Nothing,
+      tier = Prelude.Nothing,
+      policyArn = pPolicyArn_
+    }
+
+-- | Specifies a high-level geographical location constraint for where your
+-- resilience policy data can be stored.
+updateResiliencyPolicy_dataLocationConstraint :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe DataLocationConstraint)
+updateResiliencyPolicy_dataLocationConstraint = Lens.lens (\UpdateResiliencyPolicy' {dataLocationConstraint} -> dataLocationConstraint) (\s@UpdateResiliencyPolicy' {} a -> s {dataLocationConstraint = a} :: UpdateResiliencyPolicy)
+
+-- | The type of resiliency policy to be created, including the recovery time
+-- objective (RTO) and recovery point objective (RPO) in seconds.
+updateResiliencyPolicy_policy :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe (Prelude.HashMap DisruptionType FailurePolicy))
+updateResiliencyPolicy_policy = Lens.lens (\UpdateResiliencyPolicy' {policy} -> policy) (\s@UpdateResiliencyPolicy' {} a -> s {policy = a} :: UpdateResiliencyPolicy) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description for the policy.
+updateResiliencyPolicy_policyDescription :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe Prelude.Text)
+updateResiliencyPolicy_policyDescription = Lens.lens (\UpdateResiliencyPolicy' {policyDescription} -> policyDescription) (\s@UpdateResiliencyPolicy' {} a -> s {policyDescription = a} :: UpdateResiliencyPolicy)
+
+-- | The name of the policy
+updateResiliencyPolicy_policyName :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe Prelude.Text)
+updateResiliencyPolicy_policyName = Lens.lens (\UpdateResiliencyPolicy' {policyName} -> policyName) (\s@UpdateResiliencyPolicy' {} a -> s {policyName = a} :: UpdateResiliencyPolicy)
+
+-- | The tier for this resiliency policy, ranging from the highest severity
+-- (@MissionCritical@) to lowest (@NonCritical@).
+updateResiliencyPolicy_tier :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe ResiliencyPolicyTier)
+updateResiliencyPolicy_tier = Lens.lens (\UpdateResiliencyPolicy' {tier} -> tier) (\s@UpdateResiliencyPolicy' {} a -> s {tier = a} :: UpdateResiliencyPolicy)
+
+-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
+-- this ARN is:
+-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
+-- For more information about ARNs, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+updateResiliencyPolicy_policyArn :: Lens.Lens' UpdateResiliencyPolicy Prelude.Text
+updateResiliencyPolicy_policyArn = Lens.lens (\UpdateResiliencyPolicy' {policyArn} -> policyArn) (\s@UpdateResiliencyPolicy' {} a -> s {policyArn = a} :: UpdateResiliencyPolicy)
+
+instance Core.AWSRequest UpdateResiliencyPolicy where
+  type
+    AWSResponse UpdateResiliencyPolicy =
+      UpdateResiliencyPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateResiliencyPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "policy")
+      )
+
+instance Prelude.Hashable UpdateResiliencyPolicy where
+  hashWithSalt _salt UpdateResiliencyPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataLocationConstraint
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` policyDescription
+      `Prelude.hashWithSalt` policyName
+      `Prelude.hashWithSalt` tier
+      `Prelude.hashWithSalt` policyArn
+
+instance Prelude.NFData UpdateResiliencyPolicy where
+  rnf UpdateResiliencyPolicy' {..} =
+    Prelude.rnf dataLocationConstraint
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf policyDescription
+      `Prelude.seq` Prelude.rnf policyName
+      `Prelude.seq` Prelude.rnf tier
+      `Prelude.seq` Prelude.rnf policyArn
+
+instance Data.ToHeaders UpdateResiliencyPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateResiliencyPolicy where
+  toJSON UpdateResiliencyPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataLocationConstraint" Data..=)
+              Prelude.<$> dataLocationConstraint,
+            ("policy" Data..=) Prelude.<$> policy,
+            ("policyDescription" Data..=)
+              Prelude.<$> policyDescription,
+            ("policyName" Data..=) Prelude.<$> policyName,
+            ("tier" Data..=) Prelude.<$> tier,
+            Prelude.Just ("policyArn" Data..= policyArn)
+          ]
+      )
+
+instance Data.ToPath UpdateResiliencyPolicy where
+  toPath = Prelude.const "/update-resiliency-policy"
+
+instance Data.ToQuery UpdateResiliencyPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateResiliencyPolicyResponse' smart constructor.
+data UpdateResiliencyPolicyResponse = UpdateResiliencyPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The type of resiliency policy that was updated, including the recovery
+    -- time objective (RTO) and recovery point objective (RPO) in seconds.
+    policy :: ResiliencyPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResiliencyPolicyResponse' with all optional fields 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', 'updateResiliencyPolicyResponse_httpStatus' - The response's http status code.
+--
+-- 'policy', 'updateResiliencyPolicyResponse_policy' - The type of resiliency policy that was updated, including the recovery
+-- time objective (RTO) and recovery point objective (RPO) in seconds.
+newUpdateResiliencyPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'policy'
+  ResiliencyPolicy ->
+  UpdateResiliencyPolicyResponse
+newUpdateResiliencyPolicyResponse
+  pHttpStatus_
+  pPolicy_ =
+    UpdateResiliencyPolicyResponse'
+      { httpStatus =
+          pHttpStatus_,
+        policy = pPolicy_
+      }
+
+-- | The response's http status code.
+updateResiliencyPolicyResponse_httpStatus :: Lens.Lens' UpdateResiliencyPolicyResponse Prelude.Int
+updateResiliencyPolicyResponse_httpStatus = Lens.lens (\UpdateResiliencyPolicyResponse' {httpStatus} -> httpStatus) (\s@UpdateResiliencyPolicyResponse' {} a -> s {httpStatus = a} :: UpdateResiliencyPolicyResponse)
+
+-- | The type of resiliency policy that was updated, including the recovery
+-- time objective (RTO) and recovery point objective (RPO) in seconds.
+updateResiliencyPolicyResponse_policy :: Lens.Lens' UpdateResiliencyPolicyResponse ResiliencyPolicy
+updateResiliencyPolicyResponse_policy = Lens.lens (\UpdateResiliencyPolicyResponse' {policy} -> policy) (\s@UpdateResiliencyPolicyResponse' {} a -> s {policy = a} :: UpdateResiliencyPolicyResponse)
+
+instance
+  Prelude.NFData
+    UpdateResiliencyPolicyResponse
+  where
+  rnf UpdateResiliencyPolicyResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf policy
diff --git a/gen/Amazonka/ResilienceHub/Waiters.hs b/gen/Amazonka/ResilienceHub/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResilienceHub/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.ResilienceHub.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.ResilienceHub.Waiters 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
+import Amazonka.ResilienceHub.Lens
+import Amazonka.ResilienceHub.Types
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.ResilienceHub
+import Test.Amazonka.ResilienceHub.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ResilienceHub"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/ResilienceHub.hs b/test/Test/Amazonka/Gen/ResilienceHub.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ResilienceHub.hs
@@ -0,0 +1,818 @@
+{-# 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.ResilienceHub
+-- 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.ResilienceHub where
+
+import Amazonka.ResilienceHub
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.ResilienceHub.Internal
+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"
+--         [ requestAddDraftAppVersionResourceMappings $
+--             newAddDraftAppVersionResourceMappings
+--
+--         , requestCreateApp $
+--             newCreateApp
+--
+--         , requestCreateRecommendationTemplate $
+--             newCreateRecommendationTemplate
+--
+--         , requestCreateResiliencyPolicy $
+--             newCreateResiliencyPolicy
+--
+--         , requestDeleteApp $
+--             newDeleteApp
+--
+--         , requestDeleteAppAssessment $
+--             newDeleteAppAssessment
+--
+--         , requestDeleteRecommendationTemplate $
+--             newDeleteRecommendationTemplate
+--
+--         , requestDeleteResiliencyPolicy $
+--             newDeleteResiliencyPolicy
+--
+--         , requestDescribeApp $
+--             newDescribeApp
+--
+--         , requestDescribeAppAssessment $
+--             newDescribeAppAssessment
+--
+--         , requestDescribeAppVersionResourcesResolutionStatus $
+--             newDescribeAppVersionResourcesResolutionStatus
+--
+--         , requestDescribeAppVersionTemplate $
+--             newDescribeAppVersionTemplate
+--
+--         , requestDescribeDraftAppVersionResourcesImportStatus $
+--             newDescribeDraftAppVersionResourcesImportStatus
+--
+--         , requestDescribeResiliencyPolicy $
+--             newDescribeResiliencyPolicy
+--
+--         , requestImportResourcesToDraftAppVersion $
+--             newImportResourcesToDraftAppVersion
+--
+--         , requestListAlarmRecommendations $
+--             newListAlarmRecommendations
+--
+--         , requestListAppAssessments $
+--             newListAppAssessments
+--
+--         , requestListAppComponentCompliances $
+--             newListAppComponentCompliances
+--
+--         , requestListAppComponentRecommendations $
+--             newListAppComponentRecommendations
+--
+--         , requestListAppVersionResourceMappings $
+--             newListAppVersionResourceMappings
+--
+--         , requestListAppVersionResources $
+--             newListAppVersionResources
+--
+--         , requestListAppVersions $
+--             newListAppVersions
+--
+--         , requestListApps $
+--             newListApps
+--
+--         , requestListRecommendationTemplates $
+--             newListRecommendationTemplates
+--
+--         , requestListResiliencyPolicies $
+--             newListResiliencyPolicies
+--
+--         , requestListSopRecommendations $
+--             newListSopRecommendations
+--
+--         , requestListSuggestedResiliencyPolicies $
+--             newListSuggestedResiliencyPolicies
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListTestRecommendations $
+--             newListTestRecommendations
+--
+--         , requestListUnsupportedAppVersionResources $
+--             newListUnsupportedAppVersionResources
+--
+--         , requestPublishAppVersion $
+--             newPublishAppVersion
+--
+--         , requestPutDraftAppVersionTemplate $
+--             newPutDraftAppVersionTemplate
+--
+--         , requestRemoveDraftAppVersionResourceMappings $
+--             newRemoveDraftAppVersionResourceMappings
+--
+--         , requestResolveAppVersionResources $
+--             newResolveAppVersionResources
+--
+--         , requestStartAppAssessment $
+--             newStartAppAssessment
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApp $
+--             newUpdateApp
+--
+--         , requestUpdateResiliencyPolicy $
+--             newUpdateResiliencyPolicy
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAddDraftAppVersionResourceMappings $
+--             newAddDraftAppVersionResourceMappingsResponse
+--
+--         , responseCreateApp $
+--             newCreateAppResponse
+--
+--         , responseCreateRecommendationTemplate $
+--             newCreateRecommendationTemplateResponse
+--
+--         , responseCreateResiliencyPolicy $
+--             newCreateResiliencyPolicyResponse
+--
+--         , responseDeleteApp $
+--             newDeleteAppResponse
+--
+--         , responseDeleteAppAssessment $
+--             newDeleteAppAssessmentResponse
+--
+--         , responseDeleteRecommendationTemplate $
+--             newDeleteRecommendationTemplateResponse
+--
+--         , responseDeleteResiliencyPolicy $
+--             newDeleteResiliencyPolicyResponse
+--
+--         , responseDescribeApp $
+--             newDescribeAppResponse
+--
+--         , responseDescribeAppAssessment $
+--             newDescribeAppAssessmentResponse
+--
+--         , responseDescribeAppVersionResourcesResolutionStatus $
+--             newDescribeAppVersionResourcesResolutionStatusResponse
+--
+--         , responseDescribeAppVersionTemplate $
+--             newDescribeAppVersionTemplateResponse
+--
+--         , responseDescribeDraftAppVersionResourcesImportStatus $
+--             newDescribeDraftAppVersionResourcesImportStatusResponse
+--
+--         , responseDescribeResiliencyPolicy $
+--             newDescribeResiliencyPolicyResponse
+--
+--         , responseImportResourcesToDraftAppVersion $
+--             newImportResourcesToDraftAppVersionResponse
+--
+--         , responseListAlarmRecommendations $
+--             newListAlarmRecommendationsResponse
+--
+--         , responseListAppAssessments $
+--             newListAppAssessmentsResponse
+--
+--         , responseListAppComponentCompliances $
+--             newListAppComponentCompliancesResponse
+--
+--         , responseListAppComponentRecommendations $
+--             newListAppComponentRecommendationsResponse
+--
+--         , responseListAppVersionResourceMappings $
+--             newListAppVersionResourceMappingsResponse
+--
+--         , responseListAppVersionResources $
+--             newListAppVersionResourcesResponse
+--
+--         , responseListAppVersions $
+--             newListAppVersionsResponse
+--
+--         , responseListApps $
+--             newListAppsResponse
+--
+--         , responseListRecommendationTemplates $
+--             newListRecommendationTemplatesResponse
+--
+--         , responseListResiliencyPolicies $
+--             newListResiliencyPoliciesResponse
+--
+--         , responseListSopRecommendations $
+--             newListSopRecommendationsResponse
+--
+--         , responseListSuggestedResiliencyPolicies $
+--             newListSuggestedResiliencyPoliciesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListTestRecommendations $
+--             newListTestRecommendationsResponse
+--
+--         , responseListUnsupportedAppVersionResources $
+--             newListUnsupportedAppVersionResourcesResponse
+--
+--         , responsePublishAppVersion $
+--             newPublishAppVersionResponse
+--
+--         , responsePutDraftAppVersionTemplate $
+--             newPutDraftAppVersionTemplateResponse
+--
+--         , responseRemoveDraftAppVersionResourceMappings $
+--             newRemoveDraftAppVersionResourceMappingsResponse
+--
+--         , responseResolveAppVersionResources $
+--             newResolveAppVersionResourcesResponse
+--
+--         , responseStartAppAssessment $
+--             newStartAppAssessmentResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApp $
+--             newUpdateAppResponse
+--
+--         , responseUpdateResiliencyPolicy $
+--             newUpdateResiliencyPolicyResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAddDraftAppVersionResourceMappings :: AddDraftAppVersionResourceMappings -> TestTree
+requestAddDraftAppVersionResourceMappings =
+  req
+    "AddDraftAppVersionResourceMappings"
+    "fixture/AddDraftAppVersionResourceMappings.yaml"
+
+requestCreateApp :: CreateApp -> TestTree
+requestCreateApp =
+  req
+    "CreateApp"
+    "fixture/CreateApp.yaml"
+
+requestCreateRecommendationTemplate :: CreateRecommendationTemplate -> TestTree
+requestCreateRecommendationTemplate =
+  req
+    "CreateRecommendationTemplate"
+    "fixture/CreateRecommendationTemplate.yaml"
+
+requestCreateResiliencyPolicy :: CreateResiliencyPolicy -> TestTree
+requestCreateResiliencyPolicy =
+  req
+    "CreateResiliencyPolicy"
+    "fixture/CreateResiliencyPolicy.yaml"
+
+requestDeleteApp :: DeleteApp -> TestTree
+requestDeleteApp =
+  req
+    "DeleteApp"
+    "fixture/DeleteApp.yaml"
+
+requestDeleteAppAssessment :: DeleteAppAssessment -> TestTree
+requestDeleteAppAssessment =
+  req
+    "DeleteAppAssessment"
+    "fixture/DeleteAppAssessment.yaml"
+
+requestDeleteRecommendationTemplate :: DeleteRecommendationTemplate -> TestTree
+requestDeleteRecommendationTemplate =
+  req
+    "DeleteRecommendationTemplate"
+    "fixture/DeleteRecommendationTemplate.yaml"
+
+requestDeleteResiliencyPolicy :: DeleteResiliencyPolicy -> TestTree
+requestDeleteResiliencyPolicy =
+  req
+    "DeleteResiliencyPolicy"
+    "fixture/DeleteResiliencyPolicy.yaml"
+
+requestDescribeApp :: DescribeApp -> TestTree
+requestDescribeApp =
+  req
+    "DescribeApp"
+    "fixture/DescribeApp.yaml"
+
+requestDescribeAppAssessment :: DescribeAppAssessment -> TestTree
+requestDescribeAppAssessment =
+  req
+    "DescribeAppAssessment"
+    "fixture/DescribeAppAssessment.yaml"
+
+requestDescribeAppVersionResourcesResolutionStatus :: DescribeAppVersionResourcesResolutionStatus -> TestTree
+requestDescribeAppVersionResourcesResolutionStatus =
+  req
+    "DescribeAppVersionResourcesResolutionStatus"
+    "fixture/DescribeAppVersionResourcesResolutionStatus.yaml"
+
+requestDescribeAppVersionTemplate :: DescribeAppVersionTemplate -> TestTree
+requestDescribeAppVersionTemplate =
+  req
+    "DescribeAppVersionTemplate"
+    "fixture/DescribeAppVersionTemplate.yaml"
+
+requestDescribeDraftAppVersionResourcesImportStatus :: DescribeDraftAppVersionResourcesImportStatus -> TestTree
+requestDescribeDraftAppVersionResourcesImportStatus =
+  req
+    "DescribeDraftAppVersionResourcesImportStatus"
+    "fixture/DescribeDraftAppVersionResourcesImportStatus.yaml"
+
+requestDescribeResiliencyPolicy :: DescribeResiliencyPolicy -> TestTree
+requestDescribeResiliencyPolicy =
+  req
+    "DescribeResiliencyPolicy"
+    "fixture/DescribeResiliencyPolicy.yaml"
+
+requestImportResourcesToDraftAppVersion :: ImportResourcesToDraftAppVersion -> TestTree
+requestImportResourcesToDraftAppVersion =
+  req
+    "ImportResourcesToDraftAppVersion"
+    "fixture/ImportResourcesToDraftAppVersion.yaml"
+
+requestListAlarmRecommendations :: ListAlarmRecommendations -> TestTree
+requestListAlarmRecommendations =
+  req
+    "ListAlarmRecommendations"
+    "fixture/ListAlarmRecommendations.yaml"
+
+requestListAppAssessments :: ListAppAssessments -> TestTree
+requestListAppAssessments =
+  req
+    "ListAppAssessments"
+    "fixture/ListAppAssessments.yaml"
+
+requestListAppComponentCompliances :: ListAppComponentCompliances -> TestTree
+requestListAppComponentCompliances =
+  req
+    "ListAppComponentCompliances"
+    "fixture/ListAppComponentCompliances.yaml"
+
+requestListAppComponentRecommendations :: ListAppComponentRecommendations -> TestTree
+requestListAppComponentRecommendations =
+  req
+    "ListAppComponentRecommendations"
+    "fixture/ListAppComponentRecommendations.yaml"
+
+requestListAppVersionResourceMappings :: ListAppVersionResourceMappings -> TestTree
+requestListAppVersionResourceMappings =
+  req
+    "ListAppVersionResourceMappings"
+    "fixture/ListAppVersionResourceMappings.yaml"
+
+requestListAppVersionResources :: ListAppVersionResources -> TestTree
+requestListAppVersionResources =
+  req
+    "ListAppVersionResources"
+    "fixture/ListAppVersionResources.yaml"
+
+requestListAppVersions :: ListAppVersions -> TestTree
+requestListAppVersions =
+  req
+    "ListAppVersions"
+    "fixture/ListAppVersions.yaml"
+
+requestListApps :: ListApps -> TestTree
+requestListApps =
+  req
+    "ListApps"
+    "fixture/ListApps.yaml"
+
+requestListRecommendationTemplates :: ListRecommendationTemplates -> TestTree
+requestListRecommendationTemplates =
+  req
+    "ListRecommendationTemplates"
+    "fixture/ListRecommendationTemplates.yaml"
+
+requestListResiliencyPolicies :: ListResiliencyPolicies -> TestTree
+requestListResiliencyPolicies =
+  req
+    "ListResiliencyPolicies"
+    "fixture/ListResiliencyPolicies.yaml"
+
+requestListSopRecommendations :: ListSopRecommendations -> TestTree
+requestListSopRecommendations =
+  req
+    "ListSopRecommendations"
+    "fixture/ListSopRecommendations.yaml"
+
+requestListSuggestedResiliencyPolicies :: ListSuggestedResiliencyPolicies -> TestTree
+requestListSuggestedResiliencyPolicies =
+  req
+    "ListSuggestedResiliencyPolicies"
+    "fixture/ListSuggestedResiliencyPolicies.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListTestRecommendations :: ListTestRecommendations -> TestTree
+requestListTestRecommendations =
+  req
+    "ListTestRecommendations"
+    "fixture/ListTestRecommendations.yaml"
+
+requestListUnsupportedAppVersionResources :: ListUnsupportedAppVersionResources -> TestTree
+requestListUnsupportedAppVersionResources =
+  req
+    "ListUnsupportedAppVersionResources"
+    "fixture/ListUnsupportedAppVersionResources.yaml"
+
+requestPublishAppVersion :: PublishAppVersion -> TestTree
+requestPublishAppVersion =
+  req
+    "PublishAppVersion"
+    "fixture/PublishAppVersion.yaml"
+
+requestPutDraftAppVersionTemplate :: PutDraftAppVersionTemplate -> TestTree
+requestPutDraftAppVersionTemplate =
+  req
+    "PutDraftAppVersionTemplate"
+    "fixture/PutDraftAppVersionTemplate.yaml"
+
+requestRemoveDraftAppVersionResourceMappings :: RemoveDraftAppVersionResourceMappings -> TestTree
+requestRemoveDraftAppVersionResourceMappings =
+  req
+    "RemoveDraftAppVersionResourceMappings"
+    "fixture/RemoveDraftAppVersionResourceMappings.yaml"
+
+requestResolveAppVersionResources :: ResolveAppVersionResources -> TestTree
+requestResolveAppVersionResources =
+  req
+    "ResolveAppVersionResources"
+    "fixture/ResolveAppVersionResources.yaml"
+
+requestStartAppAssessment :: StartAppAssessment -> TestTree
+requestStartAppAssessment =
+  req
+    "StartAppAssessment"
+    "fixture/StartAppAssessment.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApp :: UpdateApp -> TestTree
+requestUpdateApp =
+  req
+    "UpdateApp"
+    "fixture/UpdateApp.yaml"
+
+requestUpdateResiliencyPolicy :: UpdateResiliencyPolicy -> TestTree
+requestUpdateResiliencyPolicy =
+  req
+    "UpdateResiliencyPolicy"
+    "fixture/UpdateResiliencyPolicy.yaml"
+
+-- Responses
+
+responseAddDraftAppVersionResourceMappings :: AddDraftAppVersionResourceMappingsResponse -> TestTree
+responseAddDraftAppVersionResourceMappings =
+  res
+    "AddDraftAppVersionResourceMappingsResponse"
+    "fixture/AddDraftAppVersionResourceMappingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddDraftAppVersionResourceMappings)
+
+responseCreateApp :: CreateAppResponse -> TestTree
+responseCreateApp =
+  res
+    "CreateAppResponse"
+    "fixture/CreateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApp)
+
+responseCreateRecommendationTemplate :: CreateRecommendationTemplateResponse -> TestTree
+responseCreateRecommendationTemplate =
+  res
+    "CreateRecommendationTemplateResponse"
+    "fixture/CreateRecommendationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRecommendationTemplate)
+
+responseCreateResiliencyPolicy :: CreateResiliencyPolicyResponse -> TestTree
+responseCreateResiliencyPolicy =
+  res
+    "CreateResiliencyPolicyResponse"
+    "fixture/CreateResiliencyPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateResiliencyPolicy)
+
+responseDeleteApp :: DeleteAppResponse -> TestTree
+responseDeleteApp =
+  res
+    "DeleteAppResponse"
+    "fixture/DeleteAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApp)
+
+responseDeleteAppAssessment :: DeleteAppAssessmentResponse -> TestTree
+responseDeleteAppAssessment =
+  res
+    "DeleteAppAssessmentResponse"
+    "fixture/DeleteAppAssessmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppAssessment)
+
+responseDeleteRecommendationTemplate :: DeleteRecommendationTemplateResponse -> TestTree
+responseDeleteRecommendationTemplate =
+  res
+    "DeleteRecommendationTemplateResponse"
+    "fixture/DeleteRecommendationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRecommendationTemplate)
+
+responseDeleteResiliencyPolicy :: DeleteResiliencyPolicyResponse -> TestTree
+responseDeleteResiliencyPolicy =
+  res
+    "DeleteResiliencyPolicyResponse"
+    "fixture/DeleteResiliencyPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteResiliencyPolicy)
+
+responseDescribeApp :: DescribeAppResponse -> TestTree
+responseDescribeApp =
+  res
+    "DescribeAppResponse"
+    "fixture/DescribeAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeApp)
+
+responseDescribeAppAssessment :: DescribeAppAssessmentResponse -> TestTree
+responseDescribeAppAssessment =
+  res
+    "DescribeAppAssessmentResponse"
+    "fixture/DescribeAppAssessmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppAssessment)
+
+responseDescribeAppVersionResourcesResolutionStatus :: DescribeAppVersionResourcesResolutionStatusResponse -> TestTree
+responseDescribeAppVersionResourcesResolutionStatus =
+  res
+    "DescribeAppVersionResourcesResolutionStatusResponse"
+    "fixture/DescribeAppVersionResourcesResolutionStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppVersionResourcesResolutionStatus)
+
+responseDescribeAppVersionTemplate :: DescribeAppVersionTemplateResponse -> TestTree
+responseDescribeAppVersionTemplate =
+  res
+    "DescribeAppVersionTemplateResponse"
+    "fixture/DescribeAppVersionTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppVersionTemplate)
+
+responseDescribeDraftAppVersionResourcesImportStatus :: DescribeDraftAppVersionResourcesImportStatusResponse -> TestTree
+responseDescribeDraftAppVersionResourcesImportStatus =
+  res
+    "DescribeDraftAppVersionResourcesImportStatusResponse"
+    "fixture/DescribeDraftAppVersionResourcesImportStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDraftAppVersionResourcesImportStatus)
+
+responseDescribeResiliencyPolicy :: DescribeResiliencyPolicyResponse -> TestTree
+responseDescribeResiliencyPolicy =
+  res
+    "DescribeResiliencyPolicyResponse"
+    "fixture/DescribeResiliencyPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeResiliencyPolicy)
+
+responseImportResourcesToDraftAppVersion :: ImportResourcesToDraftAppVersionResponse -> TestTree
+responseImportResourcesToDraftAppVersion =
+  res
+    "ImportResourcesToDraftAppVersionResponse"
+    "fixture/ImportResourcesToDraftAppVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportResourcesToDraftAppVersion)
+
+responseListAlarmRecommendations :: ListAlarmRecommendationsResponse -> TestTree
+responseListAlarmRecommendations =
+  res
+    "ListAlarmRecommendationsResponse"
+    "fixture/ListAlarmRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAlarmRecommendations)
+
+responseListAppAssessments :: ListAppAssessmentsResponse -> TestTree
+responseListAppAssessments =
+  res
+    "ListAppAssessmentsResponse"
+    "fixture/ListAppAssessmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppAssessments)
+
+responseListAppComponentCompliances :: ListAppComponentCompliancesResponse -> TestTree
+responseListAppComponentCompliances =
+  res
+    "ListAppComponentCompliancesResponse"
+    "fixture/ListAppComponentCompliancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppComponentCompliances)
+
+responseListAppComponentRecommendations :: ListAppComponentRecommendationsResponse -> TestTree
+responseListAppComponentRecommendations =
+  res
+    "ListAppComponentRecommendationsResponse"
+    "fixture/ListAppComponentRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppComponentRecommendations)
+
+responseListAppVersionResourceMappings :: ListAppVersionResourceMappingsResponse -> TestTree
+responseListAppVersionResourceMappings =
+  res
+    "ListAppVersionResourceMappingsResponse"
+    "fixture/ListAppVersionResourceMappingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppVersionResourceMappings)
+
+responseListAppVersionResources :: ListAppVersionResourcesResponse -> TestTree
+responseListAppVersionResources =
+  res
+    "ListAppVersionResourcesResponse"
+    "fixture/ListAppVersionResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppVersionResources)
+
+responseListAppVersions :: ListAppVersionsResponse -> TestTree
+responseListAppVersions =
+  res
+    "ListAppVersionsResponse"
+    "fixture/ListAppVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppVersions)
+
+responseListApps :: ListAppsResponse -> TestTree
+responseListApps =
+  res
+    "ListAppsResponse"
+    "fixture/ListAppsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApps)
+
+responseListRecommendationTemplates :: ListRecommendationTemplatesResponse -> TestTree
+responseListRecommendationTemplates =
+  res
+    "ListRecommendationTemplatesResponse"
+    "fixture/ListRecommendationTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecommendationTemplates)
+
+responseListResiliencyPolicies :: ListResiliencyPoliciesResponse -> TestTree
+responseListResiliencyPolicies =
+  res
+    "ListResiliencyPoliciesResponse"
+    "fixture/ListResiliencyPoliciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListResiliencyPolicies)
+
+responseListSopRecommendations :: ListSopRecommendationsResponse -> TestTree
+responseListSopRecommendations =
+  res
+    "ListSopRecommendationsResponse"
+    "fixture/ListSopRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSopRecommendations)
+
+responseListSuggestedResiliencyPolicies :: ListSuggestedResiliencyPoliciesResponse -> TestTree
+responseListSuggestedResiliencyPolicies =
+  res
+    "ListSuggestedResiliencyPoliciesResponse"
+    "fixture/ListSuggestedResiliencyPoliciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSuggestedResiliencyPolicies)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListTestRecommendations :: ListTestRecommendationsResponse -> TestTree
+responseListTestRecommendations =
+  res
+    "ListTestRecommendationsResponse"
+    "fixture/ListTestRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTestRecommendations)
+
+responseListUnsupportedAppVersionResources :: ListUnsupportedAppVersionResourcesResponse -> TestTree
+responseListUnsupportedAppVersionResources =
+  res
+    "ListUnsupportedAppVersionResourcesResponse"
+    "fixture/ListUnsupportedAppVersionResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListUnsupportedAppVersionResources)
+
+responsePublishAppVersion :: PublishAppVersionResponse -> TestTree
+responsePublishAppVersion =
+  res
+    "PublishAppVersionResponse"
+    "fixture/PublishAppVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PublishAppVersion)
+
+responsePutDraftAppVersionTemplate :: PutDraftAppVersionTemplateResponse -> TestTree
+responsePutDraftAppVersionTemplate =
+  res
+    "PutDraftAppVersionTemplateResponse"
+    "fixture/PutDraftAppVersionTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDraftAppVersionTemplate)
+
+responseRemoveDraftAppVersionResourceMappings :: RemoveDraftAppVersionResourceMappingsResponse -> TestTree
+responseRemoveDraftAppVersionResourceMappings =
+  res
+    "RemoveDraftAppVersionResourceMappingsResponse"
+    "fixture/RemoveDraftAppVersionResourceMappingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveDraftAppVersionResourceMappings)
+
+responseResolveAppVersionResources :: ResolveAppVersionResourcesResponse -> TestTree
+responseResolveAppVersionResources =
+  res
+    "ResolveAppVersionResourcesResponse"
+    "fixture/ResolveAppVersionResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResolveAppVersionResources)
+
+responseStartAppAssessment :: StartAppAssessmentResponse -> TestTree
+responseStartAppAssessment =
+  res
+    "StartAppAssessmentResponse"
+    "fixture/StartAppAssessmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartAppAssessment)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateApp :: UpdateAppResponse -> TestTree
+responseUpdateApp =
+  res
+    "UpdateAppResponse"
+    "fixture/UpdateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApp)
+
+responseUpdateResiliencyPolicy :: UpdateResiliencyPolicyResponse -> TestTree
+responseUpdateResiliencyPolicy =
+  res
+    "UpdateResiliencyPolicyResponse"
+    "fixture/UpdateResiliencyPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResiliencyPolicy)
diff --git a/test/Test/Amazonka/ResilienceHub.hs b/test/Test/Amazonka/ResilienceHub.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ResilienceHub.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ResilienceHub
+-- 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.ResilienceHub
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ResilienceHub/Internal.hs b/test/Test/Amazonka/ResilienceHub/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ResilienceHub/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ResilienceHub.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.ResilienceHub.Internal where
