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 Route53 Recovery Readiness SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2019-12-02@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-route53-recovery-readiness)
+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.Route53RecoveryReadiness](http://hackage.haskell.org/package/amazonka-route53-recovery-readiness/docs/Amazonka-Route53RecoveryReadiness.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-route53-recovery-readiness` 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-route53-recovery-readiness.cabal b/amazonka-route53-recovery-readiness.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-route53-recovery-readiness.cabal
@@ -0,0 +1,131 @@
+cabal-version:      2.2
+name:               amazonka-route53-recovery-readiness
+version:            2.0
+synopsis:           Amazon Route53 Recovery Readiness 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 @2019-12-02@ 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.Route53RecoveryReadiness.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.Route53RecoveryReadiness" 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-route53-recovery-readiness
+
+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.Route53RecoveryReadiness
+    Amazonka.Route53RecoveryReadiness.CreateCell
+    Amazonka.Route53RecoveryReadiness.CreateCrossAccountAuthorization
+    Amazonka.Route53RecoveryReadiness.CreateReadinessCheck
+    Amazonka.Route53RecoveryReadiness.CreateRecoveryGroup
+    Amazonka.Route53RecoveryReadiness.CreateResourceSet
+    Amazonka.Route53RecoveryReadiness.DeleteCell
+    Amazonka.Route53RecoveryReadiness.DeleteCrossAccountAuthorization
+    Amazonka.Route53RecoveryReadiness.DeleteReadinessCheck
+    Amazonka.Route53RecoveryReadiness.DeleteRecoveryGroup
+    Amazonka.Route53RecoveryReadiness.DeleteResourceSet
+    Amazonka.Route53RecoveryReadiness.GetArchitectureRecommendations
+    Amazonka.Route53RecoveryReadiness.GetCell
+    Amazonka.Route53RecoveryReadiness.GetCellReadinessSummary
+    Amazonka.Route53RecoveryReadiness.GetReadinessCheck
+    Amazonka.Route53RecoveryReadiness.GetReadinessCheckResourceStatus
+    Amazonka.Route53RecoveryReadiness.GetReadinessCheckStatus
+    Amazonka.Route53RecoveryReadiness.GetRecoveryGroup
+    Amazonka.Route53RecoveryReadiness.GetRecoveryGroupReadinessSummary
+    Amazonka.Route53RecoveryReadiness.GetResourceSet
+    Amazonka.Route53RecoveryReadiness.Lens
+    Amazonka.Route53RecoveryReadiness.ListCells
+    Amazonka.Route53RecoveryReadiness.ListCrossAccountAuthorizations
+    Amazonka.Route53RecoveryReadiness.ListReadinessChecks
+    Amazonka.Route53RecoveryReadiness.ListRecoveryGroups
+    Amazonka.Route53RecoveryReadiness.ListResourceSets
+    Amazonka.Route53RecoveryReadiness.ListRules
+    Amazonka.Route53RecoveryReadiness.ListTagsForResources
+    Amazonka.Route53RecoveryReadiness.TagResource
+    Amazonka.Route53RecoveryReadiness.Types
+    Amazonka.Route53RecoveryReadiness.Types.CellOutput
+    Amazonka.Route53RecoveryReadiness.Types.DNSTargetResource
+    Amazonka.Route53RecoveryReadiness.Types.ListRulesOutput
+    Amazonka.Route53RecoveryReadiness.Types.Message
+    Amazonka.Route53RecoveryReadiness.Types.NLBResource
+    Amazonka.Route53RecoveryReadiness.Types.R53ResourceRecord
+    Amazonka.Route53RecoveryReadiness.Types.Readiness
+    Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckOutput
+    Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckSummary
+    Amazonka.Route53RecoveryReadiness.Types.Recommendation
+    Amazonka.Route53RecoveryReadiness.Types.RecoveryGroupOutput
+    Amazonka.Route53RecoveryReadiness.Types.Resource
+    Amazonka.Route53RecoveryReadiness.Types.ResourceResult
+    Amazonka.Route53RecoveryReadiness.Types.ResourceSetOutput
+    Amazonka.Route53RecoveryReadiness.Types.RuleResult
+    Amazonka.Route53RecoveryReadiness.Types.TargetResource
+    Amazonka.Route53RecoveryReadiness.UntagResource
+    Amazonka.Route53RecoveryReadiness.UpdateCell
+    Amazonka.Route53RecoveryReadiness.UpdateReadinessCheck
+    Amazonka.Route53RecoveryReadiness.UpdateRecoveryGroup
+    Amazonka.Route53RecoveryReadiness.UpdateResourceSet
+    Amazonka.Route53RecoveryReadiness.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-route53-recovery-readiness-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.Route53RecoveryReadiness
+    Test.Amazonka.Route53RecoveryReadiness
+    Test.Amazonka.Route53RecoveryReadiness.Internal
+
+  build-depends:
+    , amazonka-core                        >=2.0 && <2.1
+    , amazonka-route53-recovery-readiness
+    , amazonka-test                        >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateCell.yaml b/fixture/CreateCell.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCell.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/CreateCellResponse.proto b/fixture/CreateCellResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCellResponse.proto
diff --git a/fixture/CreateCrossAccountAuthorization.yaml b/fixture/CreateCrossAccountAuthorization.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCrossAccountAuthorization.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/CreateCrossAccountAuthorizationResponse.proto b/fixture/CreateCrossAccountAuthorizationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCrossAccountAuthorizationResponse.proto
diff --git a/fixture/CreateReadinessCheck.yaml b/fixture/CreateReadinessCheck.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReadinessCheck.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/CreateReadinessCheckResponse.proto b/fixture/CreateReadinessCheckResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReadinessCheckResponse.proto
diff --git a/fixture/CreateRecoveryGroup.yaml b/fixture/CreateRecoveryGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecoveryGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/CreateRecoveryGroupResponse.proto b/fixture/CreateRecoveryGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRecoveryGroupResponse.proto
diff --git a/fixture/CreateResourceSet.yaml b/fixture/CreateResourceSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResourceSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/CreateResourceSetResponse.proto b/fixture/CreateResourceSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResourceSetResponse.proto
diff --git a/fixture/DeleteCell.yaml b/fixture/DeleteCell.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCell.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/DeleteCellResponse.proto b/fixture/DeleteCellResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCellResponse.proto
diff --git a/fixture/DeleteCrossAccountAuthorization.yaml b/fixture/DeleteCrossAccountAuthorization.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCrossAccountAuthorization.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/DeleteCrossAccountAuthorizationResponse.proto b/fixture/DeleteCrossAccountAuthorizationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCrossAccountAuthorizationResponse.proto
diff --git a/fixture/DeleteReadinessCheck.yaml b/fixture/DeleteReadinessCheck.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReadinessCheck.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/DeleteReadinessCheckResponse.proto b/fixture/DeleteReadinessCheckResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReadinessCheckResponse.proto
diff --git a/fixture/DeleteRecoveryGroup.yaml b/fixture/DeleteRecoveryGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecoveryGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/DeleteRecoveryGroupResponse.proto b/fixture/DeleteRecoveryGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecoveryGroupResponse.proto
diff --git a/fixture/DeleteResourceSet.yaml b/fixture/DeleteResourceSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourceSet.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/DeleteResourceSetResponse.proto b/fixture/DeleteResourceSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourceSetResponse.proto
diff --git a/fixture/GetArchitectureRecommendations.yaml b/fixture/GetArchitectureRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetArchitectureRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetArchitectureRecommendationsResponse.proto b/fixture/GetArchitectureRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetArchitectureRecommendationsResponse.proto
diff --git a/fixture/GetCell.yaml b/fixture/GetCell.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCell.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetCellReadinessSummary.yaml b/fixture/GetCellReadinessSummary.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCellReadinessSummary.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetCellReadinessSummaryResponse.proto b/fixture/GetCellReadinessSummaryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCellReadinessSummaryResponse.proto
diff --git a/fixture/GetCellResponse.proto b/fixture/GetCellResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCellResponse.proto
diff --git a/fixture/GetReadinessCheck.yaml b/fixture/GetReadinessCheck.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetReadinessCheck.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetReadinessCheckResourceStatus.yaml b/fixture/GetReadinessCheckResourceStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetReadinessCheckResourceStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetReadinessCheckResourceStatusResponse.proto b/fixture/GetReadinessCheckResourceStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetReadinessCheckResourceStatusResponse.proto
diff --git a/fixture/GetReadinessCheckResponse.proto b/fixture/GetReadinessCheckResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetReadinessCheckResponse.proto
diff --git a/fixture/GetReadinessCheckStatus.yaml b/fixture/GetReadinessCheckStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetReadinessCheckStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetReadinessCheckStatusResponse.proto b/fixture/GetReadinessCheckStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetReadinessCheckStatusResponse.proto
diff --git a/fixture/GetRecoveryGroup.yaml b/fixture/GetRecoveryGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRecoveryGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetRecoveryGroupReadinessSummary.yaml b/fixture/GetRecoveryGroupReadinessSummary.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRecoveryGroupReadinessSummary.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetRecoveryGroupReadinessSummaryResponse.proto b/fixture/GetRecoveryGroupReadinessSummaryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRecoveryGroupReadinessSummaryResponse.proto
diff --git a/fixture/GetRecoveryGroupResponse.proto b/fixture/GetRecoveryGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRecoveryGroupResponse.proto
diff --git a/fixture/GetResourceSet.yaml b/fixture/GetResourceSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceSet.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/GetResourceSetResponse.proto b/fixture/GetResourceSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceSetResponse.proto
diff --git a/fixture/ListCells.yaml b/fixture/ListCells.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCells.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListCellsResponse.proto b/fixture/ListCellsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCellsResponse.proto
diff --git a/fixture/ListCrossAccountAuthorizations.yaml b/fixture/ListCrossAccountAuthorizations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCrossAccountAuthorizations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListCrossAccountAuthorizationsResponse.proto b/fixture/ListCrossAccountAuthorizationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCrossAccountAuthorizationsResponse.proto
diff --git a/fixture/ListReadinessChecks.yaml b/fixture/ListReadinessChecks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListReadinessChecks.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListReadinessChecksResponse.proto b/fixture/ListReadinessChecksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListReadinessChecksResponse.proto
diff --git a/fixture/ListRecoveryGroups.yaml b/fixture/ListRecoveryGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecoveryGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListRecoveryGroupsResponse.proto b/fixture/ListRecoveryGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecoveryGroupsResponse.proto
diff --git a/fixture/ListResourceSets.yaml b/fixture/ListResourceSets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListResourceSets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListResourceSetsResponse.proto b/fixture/ListResourceSetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListResourceSetsResponse.proto
diff --git a/fixture/ListRules.yaml b/fixture/ListRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRules.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListRulesResponse.proto b/fixture/ListRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRulesResponse.proto
diff --git a/fixture/ListTagsForResources.yaml b/fixture/ListTagsForResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResources.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/ListTagsForResourcesResponse.proto b/fixture/ListTagsForResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourcesResponse.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/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/UpdateCell.yaml b/fixture/UpdateCell.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCell.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/UpdateCellResponse.proto b/fixture/UpdateCellResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCellResponse.proto
diff --git a/fixture/UpdateReadinessCheck.yaml b/fixture/UpdateReadinessCheck.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateReadinessCheck.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/UpdateReadinessCheckResponse.proto b/fixture/UpdateReadinessCheckResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateReadinessCheckResponse.proto
diff --git a/fixture/UpdateRecoveryGroup.yaml b/fixture/UpdateRecoveryGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRecoveryGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/UpdateRecoveryGroupResponse.proto b/fixture/UpdateRecoveryGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRecoveryGroupResponse.proto
diff --git a/fixture/UpdateResourceSet.yaml b/fixture/UpdateResourceSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceSet.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-readiness/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  route53-recovery-readiness.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/UpdateResourceSetResponse.proto b/fixture/UpdateResourceSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceSetResponse.proto
diff --git a/gen/Amazonka/Route53RecoveryReadiness.hs b/gen/Amazonka/Route53RecoveryReadiness.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness.hs
@@ -0,0 +1,366 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness
+-- 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 @2019-12-02@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Recovery readiness
+module Amazonka.Route53RecoveryReadiness
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateCell
+    CreateCell (CreateCell'),
+    newCreateCell,
+    CreateCellResponse (CreateCellResponse'),
+    newCreateCellResponse,
+
+    -- ** CreateCrossAccountAuthorization
+    CreateCrossAccountAuthorization (CreateCrossAccountAuthorization'),
+    newCreateCrossAccountAuthorization,
+    CreateCrossAccountAuthorizationResponse (CreateCrossAccountAuthorizationResponse'),
+    newCreateCrossAccountAuthorizationResponse,
+
+    -- ** CreateReadinessCheck
+    CreateReadinessCheck (CreateReadinessCheck'),
+    newCreateReadinessCheck,
+    CreateReadinessCheckResponse (CreateReadinessCheckResponse'),
+    newCreateReadinessCheckResponse,
+
+    -- ** CreateRecoveryGroup
+    CreateRecoveryGroup (CreateRecoveryGroup'),
+    newCreateRecoveryGroup,
+    CreateRecoveryGroupResponse (CreateRecoveryGroupResponse'),
+    newCreateRecoveryGroupResponse,
+
+    -- ** CreateResourceSet
+    CreateResourceSet (CreateResourceSet'),
+    newCreateResourceSet,
+    CreateResourceSetResponse (CreateResourceSetResponse'),
+    newCreateResourceSetResponse,
+
+    -- ** DeleteCell
+    DeleteCell (DeleteCell'),
+    newDeleteCell,
+    DeleteCellResponse (DeleteCellResponse'),
+    newDeleteCellResponse,
+
+    -- ** DeleteCrossAccountAuthorization
+    DeleteCrossAccountAuthorization (DeleteCrossAccountAuthorization'),
+    newDeleteCrossAccountAuthorization,
+    DeleteCrossAccountAuthorizationResponse (DeleteCrossAccountAuthorizationResponse'),
+    newDeleteCrossAccountAuthorizationResponse,
+
+    -- ** DeleteReadinessCheck
+    DeleteReadinessCheck (DeleteReadinessCheck'),
+    newDeleteReadinessCheck,
+    DeleteReadinessCheckResponse (DeleteReadinessCheckResponse'),
+    newDeleteReadinessCheckResponse,
+
+    -- ** DeleteRecoveryGroup
+    DeleteRecoveryGroup (DeleteRecoveryGroup'),
+    newDeleteRecoveryGroup,
+    DeleteRecoveryGroupResponse (DeleteRecoveryGroupResponse'),
+    newDeleteRecoveryGroupResponse,
+
+    -- ** DeleteResourceSet
+    DeleteResourceSet (DeleteResourceSet'),
+    newDeleteResourceSet,
+    DeleteResourceSetResponse (DeleteResourceSetResponse'),
+    newDeleteResourceSetResponse,
+
+    -- ** GetArchitectureRecommendations
+    GetArchitectureRecommendations (GetArchitectureRecommendations'),
+    newGetArchitectureRecommendations,
+    GetArchitectureRecommendationsResponse (GetArchitectureRecommendationsResponse'),
+    newGetArchitectureRecommendationsResponse,
+
+    -- ** GetCell
+    GetCell (GetCell'),
+    newGetCell,
+    GetCellResponse (GetCellResponse'),
+    newGetCellResponse,
+
+    -- ** GetCellReadinessSummary (Paginated)
+    GetCellReadinessSummary (GetCellReadinessSummary'),
+    newGetCellReadinessSummary,
+    GetCellReadinessSummaryResponse (GetCellReadinessSummaryResponse'),
+    newGetCellReadinessSummaryResponse,
+
+    -- ** GetReadinessCheck
+    GetReadinessCheck (GetReadinessCheck'),
+    newGetReadinessCheck,
+    GetReadinessCheckResponse (GetReadinessCheckResponse'),
+    newGetReadinessCheckResponse,
+
+    -- ** GetReadinessCheckResourceStatus (Paginated)
+    GetReadinessCheckResourceStatus (GetReadinessCheckResourceStatus'),
+    newGetReadinessCheckResourceStatus,
+    GetReadinessCheckResourceStatusResponse (GetReadinessCheckResourceStatusResponse'),
+    newGetReadinessCheckResourceStatusResponse,
+
+    -- ** GetReadinessCheckStatus (Paginated)
+    GetReadinessCheckStatus (GetReadinessCheckStatus'),
+    newGetReadinessCheckStatus,
+    GetReadinessCheckStatusResponse (GetReadinessCheckStatusResponse'),
+    newGetReadinessCheckStatusResponse,
+
+    -- ** GetRecoveryGroup
+    GetRecoveryGroup (GetRecoveryGroup'),
+    newGetRecoveryGroup,
+    GetRecoveryGroupResponse (GetRecoveryGroupResponse'),
+    newGetRecoveryGroupResponse,
+
+    -- ** GetRecoveryGroupReadinessSummary (Paginated)
+    GetRecoveryGroupReadinessSummary (GetRecoveryGroupReadinessSummary'),
+    newGetRecoveryGroupReadinessSummary,
+    GetRecoveryGroupReadinessSummaryResponse (GetRecoveryGroupReadinessSummaryResponse'),
+    newGetRecoveryGroupReadinessSummaryResponse,
+
+    -- ** GetResourceSet
+    GetResourceSet (GetResourceSet'),
+    newGetResourceSet,
+    GetResourceSetResponse (GetResourceSetResponse'),
+    newGetResourceSetResponse,
+
+    -- ** ListCells (Paginated)
+    ListCells (ListCells'),
+    newListCells,
+    ListCellsResponse (ListCellsResponse'),
+    newListCellsResponse,
+
+    -- ** ListCrossAccountAuthorizations (Paginated)
+    ListCrossAccountAuthorizations (ListCrossAccountAuthorizations'),
+    newListCrossAccountAuthorizations,
+    ListCrossAccountAuthorizationsResponse (ListCrossAccountAuthorizationsResponse'),
+    newListCrossAccountAuthorizationsResponse,
+
+    -- ** ListReadinessChecks (Paginated)
+    ListReadinessChecks (ListReadinessChecks'),
+    newListReadinessChecks,
+    ListReadinessChecksResponse (ListReadinessChecksResponse'),
+    newListReadinessChecksResponse,
+
+    -- ** ListRecoveryGroups (Paginated)
+    ListRecoveryGroups (ListRecoveryGroups'),
+    newListRecoveryGroups,
+    ListRecoveryGroupsResponse (ListRecoveryGroupsResponse'),
+    newListRecoveryGroupsResponse,
+
+    -- ** ListResourceSets (Paginated)
+    ListResourceSets (ListResourceSets'),
+    newListResourceSets,
+    ListResourceSetsResponse (ListResourceSetsResponse'),
+    newListResourceSetsResponse,
+
+    -- ** ListRules (Paginated)
+    ListRules (ListRules'),
+    newListRules,
+    ListRulesResponse (ListRulesResponse'),
+    newListRulesResponse,
+
+    -- ** ListTagsForResources
+    ListTagsForResources (ListTagsForResources'),
+    newListTagsForResources,
+    ListTagsForResourcesResponse (ListTagsForResourcesResponse'),
+    newListTagsForResourcesResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateCell
+    UpdateCell (UpdateCell'),
+    newUpdateCell,
+    UpdateCellResponse (UpdateCellResponse'),
+    newUpdateCellResponse,
+
+    -- ** UpdateReadinessCheck
+    UpdateReadinessCheck (UpdateReadinessCheck'),
+    newUpdateReadinessCheck,
+    UpdateReadinessCheckResponse (UpdateReadinessCheckResponse'),
+    newUpdateReadinessCheckResponse,
+
+    -- ** UpdateRecoveryGroup
+    UpdateRecoveryGroup (UpdateRecoveryGroup'),
+    newUpdateRecoveryGroup,
+    UpdateRecoveryGroupResponse (UpdateRecoveryGroupResponse'),
+    newUpdateRecoveryGroupResponse,
+
+    -- ** UpdateResourceSet
+    UpdateResourceSet (UpdateResourceSet'),
+    newUpdateResourceSet,
+    UpdateResourceSetResponse (UpdateResourceSetResponse'),
+    newUpdateResourceSetResponse,
+
+    -- * Types
+
+    -- ** Readiness
+    Readiness (..),
+
+    -- ** CellOutput
+    CellOutput (CellOutput'),
+    newCellOutput,
+
+    -- ** DNSTargetResource
+    DNSTargetResource (DNSTargetResource'),
+    newDNSTargetResource,
+
+    -- ** ListRulesOutput
+    ListRulesOutput (ListRulesOutput'),
+    newListRulesOutput,
+
+    -- ** Message
+    Message (Message'),
+    newMessage,
+
+    -- ** NLBResource
+    NLBResource (NLBResource'),
+    newNLBResource,
+
+    -- ** R53ResourceRecord
+    R53ResourceRecord (R53ResourceRecord'),
+    newR53ResourceRecord,
+
+    -- ** ReadinessCheckOutput
+    ReadinessCheckOutput (ReadinessCheckOutput'),
+    newReadinessCheckOutput,
+
+    -- ** ReadinessCheckSummary
+    ReadinessCheckSummary (ReadinessCheckSummary'),
+    newReadinessCheckSummary,
+
+    -- ** Recommendation
+    Recommendation (Recommendation'),
+    newRecommendation,
+
+    -- ** RecoveryGroupOutput
+    RecoveryGroupOutput (RecoveryGroupOutput'),
+    newRecoveryGroupOutput,
+
+    -- ** Resource
+    Resource (Resource'),
+    newResource,
+
+    -- ** ResourceResult
+    ResourceResult (ResourceResult'),
+    newResourceResult,
+
+    -- ** ResourceSetOutput
+    ResourceSetOutput (ResourceSetOutput'),
+    newResourceSetOutput,
+
+    -- ** RuleResult
+    RuleResult (RuleResult'),
+    newRuleResult,
+
+    -- ** TargetResource
+    TargetResource (TargetResource'),
+    newTargetResource,
+  )
+where
+
+import Amazonka.Route53RecoveryReadiness.CreateCell
+import Amazonka.Route53RecoveryReadiness.CreateCrossAccountAuthorization
+import Amazonka.Route53RecoveryReadiness.CreateReadinessCheck
+import Amazonka.Route53RecoveryReadiness.CreateRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.CreateResourceSet
+import Amazonka.Route53RecoveryReadiness.DeleteCell
+import Amazonka.Route53RecoveryReadiness.DeleteCrossAccountAuthorization
+import Amazonka.Route53RecoveryReadiness.DeleteReadinessCheck
+import Amazonka.Route53RecoveryReadiness.DeleteRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.DeleteResourceSet
+import Amazonka.Route53RecoveryReadiness.GetArchitectureRecommendations
+import Amazonka.Route53RecoveryReadiness.GetCell
+import Amazonka.Route53RecoveryReadiness.GetCellReadinessSummary
+import Amazonka.Route53RecoveryReadiness.GetReadinessCheck
+import Amazonka.Route53RecoveryReadiness.GetReadinessCheckResourceStatus
+import Amazonka.Route53RecoveryReadiness.GetReadinessCheckStatus
+import Amazonka.Route53RecoveryReadiness.GetRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.GetRecoveryGroupReadinessSummary
+import Amazonka.Route53RecoveryReadiness.GetResourceSet
+import Amazonka.Route53RecoveryReadiness.Lens
+import Amazonka.Route53RecoveryReadiness.ListCells
+import Amazonka.Route53RecoveryReadiness.ListCrossAccountAuthorizations
+import Amazonka.Route53RecoveryReadiness.ListReadinessChecks
+import Amazonka.Route53RecoveryReadiness.ListRecoveryGroups
+import Amazonka.Route53RecoveryReadiness.ListResourceSets
+import Amazonka.Route53RecoveryReadiness.ListRules
+import Amazonka.Route53RecoveryReadiness.ListTagsForResources
+import Amazonka.Route53RecoveryReadiness.TagResource
+import Amazonka.Route53RecoveryReadiness.Types
+import Amazonka.Route53RecoveryReadiness.UntagResource
+import Amazonka.Route53RecoveryReadiness.UpdateCell
+import Amazonka.Route53RecoveryReadiness.UpdateReadinessCheck
+import Amazonka.Route53RecoveryReadiness.UpdateRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.UpdateResourceSet
+import Amazonka.Route53RecoveryReadiness.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 'Route53RecoveryReadiness'.
+
+-- $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/Route53RecoveryReadiness/CreateCell.hs b/gen/Amazonka/Route53RecoveryReadiness/CreateCell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/CreateCell.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.Route53RecoveryReadiness.CreateCell
+-- 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 cell in an account.
+module Amazonka.Route53RecoveryReadiness.CreateCell
+  ( -- * Creating a Request
+    CreateCell (..),
+    newCreateCell,
+
+    -- * Request Lenses
+    createCell_cells,
+    createCell_tags,
+    createCell_cellName,
+
+    -- * Destructuring the Response
+    CreateCellResponse (..),
+    newCreateCellResponse,
+
+    -- * Response Lenses
+    createCellResponse_cellArn,
+    createCellResponse_cellName,
+    createCellResponse_cells,
+    createCellResponse_parentReadinessScopes,
+    createCellResponse_tags,
+    createCellResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newCreateCell' smart constructor.
+data CreateCell = CreateCell'
+  { -- | A list of cell Amazon Resource Names (ARNs) contained within this cell,
+    -- for use in nested cells. For example, Availability Zones within specific
+    -- Amazon Web Services Regions.
+    cells :: Prelude.Maybe [Prelude.Text],
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the cell to create.
+    cellName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCell' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'createCell_cells' - A list of cell Amazon Resource Names (ARNs) contained within this cell,
+-- for use in nested cells. For example, Availability Zones within specific
+-- Amazon Web Services Regions.
+--
+-- 'tags', 'createCell_tags' - Undocumented member.
+--
+-- 'cellName', 'createCell_cellName' - The name of the cell to create.
+newCreateCell ::
+  -- | 'cellName'
+  Prelude.Text ->
+  CreateCell
+newCreateCell pCellName_ =
+  CreateCell'
+    { cells = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      cellName = pCellName_
+    }
+
+-- | A list of cell Amazon Resource Names (ARNs) contained within this cell,
+-- for use in nested cells. For example, Availability Zones within specific
+-- Amazon Web Services Regions.
+createCell_cells :: Lens.Lens' CreateCell (Prelude.Maybe [Prelude.Text])
+createCell_cells = Lens.lens (\CreateCell' {cells} -> cells) (\s@CreateCell' {} a -> s {cells = a} :: CreateCell) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createCell_tags :: Lens.Lens' CreateCell (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createCell_tags = Lens.lens (\CreateCell' {tags} -> tags) (\s@CreateCell' {} a -> s {tags = a} :: CreateCell) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the cell to create.
+createCell_cellName :: Lens.Lens' CreateCell Prelude.Text
+createCell_cellName = Lens.lens (\CreateCell' {cellName} -> cellName) (\s@CreateCell' {} a -> s {cellName = a} :: CreateCell)
+
+instance Core.AWSRequest CreateCell where
+  type AWSResponse CreateCell = CreateCellResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCellResponse'
+            Prelude.<$> (x Data..?> "cellArn")
+            Prelude.<*> (x Data..?> "cellName")
+            Prelude.<*> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "parentReadinessScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCell where
+  hashWithSalt _salt CreateCell' {..} =
+    _salt
+      `Prelude.hashWithSalt` cells
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` cellName
+
+instance Prelude.NFData CreateCell where
+  rnf CreateCell' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf cellName
+
+instance Data.ToHeaders CreateCell where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCell where
+  toJSON CreateCell' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cells" Data..=) Prelude.<$> cells,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("cellName" Data..= cellName)
+          ]
+      )
+
+instance Data.ToPath CreateCell where
+  toPath = Prelude.const "/cells"
+
+instance Data.ToQuery CreateCell where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCellResponse' smart constructor.
+data CreateCellResponse = CreateCellResponse'
+  { -- | The Amazon Resource Name (ARN) for the cell.
+    cellArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cell.
+    cellName :: Prelude.Maybe Prelude.Text,
+    -- | A list of cell ARNs.
+    cells :: Prelude.Maybe [Prelude.Text],
+    -- | The readiness scope for the cell, which can be a cell Amazon Resource
+    -- Name (ARN) or a recovery group ARN. This is a list but currently can
+    -- have only one element.
+    parentReadinessScopes :: Prelude.Maybe [Prelude.Text],
+    -- | Tags on the resources.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCellResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellArn', 'createCellResponse_cellArn' - The Amazon Resource Name (ARN) for the cell.
+--
+-- 'cellName', 'createCellResponse_cellName' - The name of the cell.
+--
+-- 'cells', 'createCellResponse_cells' - A list of cell ARNs.
+--
+-- 'parentReadinessScopes', 'createCellResponse_parentReadinessScopes' - The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+--
+-- 'tags', 'createCellResponse_tags' - Tags on the resources.
+--
+-- 'httpStatus', 'createCellResponse_httpStatus' - The response's http status code.
+newCreateCellResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCellResponse
+newCreateCellResponse pHttpStatus_ =
+  CreateCellResponse'
+    { cellArn = Prelude.Nothing,
+      cellName = Prelude.Nothing,
+      cells = Prelude.Nothing,
+      parentReadinessScopes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the cell.
+createCellResponse_cellArn :: Lens.Lens' CreateCellResponse (Prelude.Maybe Prelude.Text)
+createCellResponse_cellArn = Lens.lens (\CreateCellResponse' {cellArn} -> cellArn) (\s@CreateCellResponse' {} a -> s {cellArn = a} :: CreateCellResponse)
+
+-- | The name of the cell.
+createCellResponse_cellName :: Lens.Lens' CreateCellResponse (Prelude.Maybe Prelude.Text)
+createCellResponse_cellName = Lens.lens (\CreateCellResponse' {cellName} -> cellName) (\s@CreateCellResponse' {} a -> s {cellName = a} :: CreateCellResponse)
+
+-- | A list of cell ARNs.
+createCellResponse_cells :: Lens.Lens' CreateCellResponse (Prelude.Maybe [Prelude.Text])
+createCellResponse_cells = Lens.lens (\CreateCellResponse' {cells} -> cells) (\s@CreateCellResponse' {} a -> s {cells = a} :: CreateCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+createCellResponse_parentReadinessScopes :: Lens.Lens' CreateCellResponse (Prelude.Maybe [Prelude.Text])
+createCellResponse_parentReadinessScopes = Lens.lens (\CreateCellResponse' {parentReadinessScopes} -> parentReadinessScopes) (\s@CreateCellResponse' {} a -> s {parentReadinessScopes = a} :: CreateCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags on the resources.
+createCellResponse_tags :: Lens.Lens' CreateCellResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createCellResponse_tags = Lens.lens (\CreateCellResponse' {tags} -> tags) (\s@CreateCellResponse' {} a -> s {tags = a} :: CreateCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createCellResponse_httpStatus :: Lens.Lens' CreateCellResponse Prelude.Int
+createCellResponse_httpStatus = Lens.lens (\CreateCellResponse' {httpStatus} -> httpStatus) (\s@CreateCellResponse' {} a -> s {httpStatus = a} :: CreateCellResponse)
+
+instance Prelude.NFData CreateCellResponse where
+  rnf CreateCellResponse' {..} =
+    Prelude.rnf cellArn
+      `Prelude.seq` Prelude.rnf cellName
+      `Prelude.seq` Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf parentReadinessScopes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/CreateCrossAccountAuthorization.hs b/gen/Amazonka/Route53RecoveryReadiness/CreateCrossAccountAuthorization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/CreateCrossAccountAuthorization.hs
@@ -0,0 +1,195 @@
+{-# 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.Route53RecoveryReadiness.CreateCrossAccountAuthorization
+-- 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 cross-account readiness authorization. This lets you authorize
+-- another account to work with Route 53 Application Recovery Controller,
+-- for example, to check the readiness status of resources in a separate
+-- account.
+module Amazonka.Route53RecoveryReadiness.CreateCrossAccountAuthorization
+  ( -- * Creating a Request
+    CreateCrossAccountAuthorization (..),
+    newCreateCrossAccountAuthorization,
+
+    -- * Request Lenses
+    createCrossAccountAuthorization_crossAccountAuthorization,
+
+    -- * Destructuring the Response
+    CreateCrossAccountAuthorizationResponse (..),
+    newCreateCrossAccountAuthorizationResponse,
+
+    -- * Response Lenses
+    createCrossAccountAuthorizationResponse_crossAccountAuthorization,
+    createCrossAccountAuthorizationResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newCreateCrossAccountAuthorization' smart constructor.
+data CreateCrossAccountAuthorization = CreateCrossAccountAuthorization'
+  { -- | The cross-account authorization.
+    crossAccountAuthorization :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCrossAccountAuthorization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crossAccountAuthorization', 'createCrossAccountAuthorization_crossAccountAuthorization' - The cross-account authorization.
+newCreateCrossAccountAuthorization ::
+  -- | 'crossAccountAuthorization'
+  Prelude.Text ->
+  CreateCrossAccountAuthorization
+newCreateCrossAccountAuthorization
+  pCrossAccountAuthorization_ =
+    CreateCrossAccountAuthorization'
+      { crossAccountAuthorization =
+          pCrossAccountAuthorization_
+      }
+
+-- | The cross-account authorization.
+createCrossAccountAuthorization_crossAccountAuthorization :: Lens.Lens' CreateCrossAccountAuthorization Prelude.Text
+createCrossAccountAuthorization_crossAccountAuthorization = Lens.lens (\CreateCrossAccountAuthorization' {crossAccountAuthorization} -> crossAccountAuthorization) (\s@CreateCrossAccountAuthorization' {} a -> s {crossAccountAuthorization = a} :: CreateCrossAccountAuthorization)
+
+instance
+  Core.AWSRequest
+    CreateCrossAccountAuthorization
+  where
+  type
+    AWSResponse CreateCrossAccountAuthorization =
+      CreateCrossAccountAuthorizationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCrossAccountAuthorizationResponse'
+            Prelude.<$> (x Data..?> "crossAccountAuthorization")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateCrossAccountAuthorization
+  where
+  hashWithSalt
+    _salt
+    CreateCrossAccountAuthorization' {..} =
+      _salt
+        `Prelude.hashWithSalt` crossAccountAuthorization
+
+instance
+  Prelude.NFData
+    CreateCrossAccountAuthorization
+  where
+  rnf CreateCrossAccountAuthorization' {..} =
+    Prelude.rnf crossAccountAuthorization
+
+instance
+  Data.ToHeaders
+    CreateCrossAccountAuthorization
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCrossAccountAuthorization where
+  toJSON CreateCrossAccountAuthorization' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "crossAccountAuthorization"
+                  Data..= crossAccountAuthorization
+              )
+          ]
+      )
+
+instance Data.ToPath CreateCrossAccountAuthorization where
+  toPath = Prelude.const "/crossaccountauthorizations"
+
+instance Data.ToQuery CreateCrossAccountAuthorization where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCrossAccountAuthorizationResponse' smart constructor.
+data CreateCrossAccountAuthorizationResponse = CreateCrossAccountAuthorizationResponse'
+  { -- | The cross-account authorization.
+    crossAccountAuthorization :: 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 'CreateCrossAccountAuthorizationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crossAccountAuthorization', 'createCrossAccountAuthorizationResponse_crossAccountAuthorization' - The cross-account authorization.
+--
+-- 'httpStatus', 'createCrossAccountAuthorizationResponse_httpStatus' - The response's http status code.
+newCreateCrossAccountAuthorizationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCrossAccountAuthorizationResponse
+newCreateCrossAccountAuthorizationResponse
+  pHttpStatus_ =
+    CreateCrossAccountAuthorizationResponse'
+      { crossAccountAuthorization =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The cross-account authorization.
+createCrossAccountAuthorizationResponse_crossAccountAuthorization :: Lens.Lens' CreateCrossAccountAuthorizationResponse (Prelude.Maybe Prelude.Text)
+createCrossAccountAuthorizationResponse_crossAccountAuthorization = Lens.lens (\CreateCrossAccountAuthorizationResponse' {crossAccountAuthorization} -> crossAccountAuthorization) (\s@CreateCrossAccountAuthorizationResponse' {} a -> s {crossAccountAuthorization = a} :: CreateCrossAccountAuthorizationResponse)
+
+-- | The response's http status code.
+createCrossAccountAuthorizationResponse_httpStatus :: Lens.Lens' CreateCrossAccountAuthorizationResponse Prelude.Int
+createCrossAccountAuthorizationResponse_httpStatus = Lens.lens (\CreateCrossAccountAuthorizationResponse' {httpStatus} -> httpStatus) (\s@CreateCrossAccountAuthorizationResponse' {} a -> s {httpStatus = a} :: CreateCrossAccountAuthorizationResponse)
+
+instance
+  Prelude.NFData
+    CreateCrossAccountAuthorizationResponse
+  where
+  rnf CreateCrossAccountAuthorizationResponse' {..} =
+    Prelude.rnf crossAccountAuthorization
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/CreateReadinessCheck.hs b/gen/Amazonka/Route53RecoveryReadiness/CreateReadinessCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/CreateReadinessCheck.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.Route53RecoveryReadiness.CreateReadinessCheck
+-- 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 readiness check in an account. A readiness check monitors a
+-- resource set in your application, such as a set of Amazon Aurora
+-- instances, that Application Recovery Controller is auditing recovery
+-- readiness for. The audits run once every minute on every resource
+-- that\'s associated with a readiness check.
+module Amazonka.Route53RecoveryReadiness.CreateReadinessCheck
+  ( -- * Creating a Request
+    CreateReadinessCheck (..),
+    newCreateReadinessCheck,
+
+    -- * Request Lenses
+    createReadinessCheck_tags,
+    createReadinessCheck_resourceSetName,
+    createReadinessCheck_readinessCheckName,
+
+    -- * Destructuring the Response
+    CreateReadinessCheckResponse (..),
+    newCreateReadinessCheckResponse,
+
+    -- * Response Lenses
+    createReadinessCheckResponse_readinessCheckArn,
+    createReadinessCheckResponse_readinessCheckName,
+    createReadinessCheckResponse_resourceSet,
+    createReadinessCheckResponse_tags,
+    createReadinessCheckResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newCreateReadinessCheck' smart constructor.
+data CreateReadinessCheck = CreateReadinessCheck'
+  { tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the resource set to check.
+    resourceSetName :: Prelude.Text,
+    -- | The name of the readiness check to create.
+    readinessCheckName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReadinessCheck' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createReadinessCheck_tags' - Undocumented member.
+--
+-- 'resourceSetName', 'createReadinessCheck_resourceSetName' - The name of the resource set to check.
+--
+-- 'readinessCheckName', 'createReadinessCheck_readinessCheckName' - The name of the readiness check to create.
+newCreateReadinessCheck ::
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  -- | 'readinessCheckName'
+  Prelude.Text ->
+  CreateReadinessCheck
+newCreateReadinessCheck
+  pResourceSetName_
+  pReadinessCheckName_ =
+    CreateReadinessCheck'
+      { tags = Prelude.Nothing,
+        resourceSetName = pResourceSetName_,
+        readinessCheckName = pReadinessCheckName_
+      }
+
+-- | Undocumented member.
+createReadinessCheck_tags :: Lens.Lens' CreateReadinessCheck (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createReadinessCheck_tags = Lens.lens (\CreateReadinessCheck' {tags} -> tags) (\s@CreateReadinessCheck' {} a -> s {tags = a} :: CreateReadinessCheck) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the resource set to check.
+createReadinessCheck_resourceSetName :: Lens.Lens' CreateReadinessCheck Prelude.Text
+createReadinessCheck_resourceSetName = Lens.lens (\CreateReadinessCheck' {resourceSetName} -> resourceSetName) (\s@CreateReadinessCheck' {} a -> s {resourceSetName = a} :: CreateReadinessCheck)
+
+-- | The name of the readiness check to create.
+createReadinessCheck_readinessCheckName :: Lens.Lens' CreateReadinessCheck Prelude.Text
+createReadinessCheck_readinessCheckName = Lens.lens (\CreateReadinessCheck' {readinessCheckName} -> readinessCheckName) (\s@CreateReadinessCheck' {} a -> s {readinessCheckName = a} :: CreateReadinessCheck)
+
+instance Core.AWSRequest CreateReadinessCheck where
+  type
+    AWSResponse CreateReadinessCheck =
+      CreateReadinessCheckResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateReadinessCheckResponse'
+            Prelude.<$> (x Data..?> "readinessCheckArn")
+            Prelude.<*> (x Data..?> "readinessCheckName")
+            Prelude.<*> (x Data..?> "resourceSet")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateReadinessCheck where
+  hashWithSalt _salt CreateReadinessCheck' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` resourceSetName
+      `Prelude.hashWithSalt` readinessCheckName
+
+instance Prelude.NFData CreateReadinessCheck where
+  rnf CreateReadinessCheck' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf readinessCheckName
+
+instance Data.ToHeaders CreateReadinessCheck where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateReadinessCheck where
+  toJSON CreateReadinessCheck' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("resourceSetName" Data..= resourceSetName),
+            Prelude.Just
+              ("readinessCheckName" Data..= readinessCheckName)
+          ]
+      )
+
+instance Data.ToPath CreateReadinessCheck where
+  toPath = Prelude.const "/readinesschecks"
+
+instance Data.ToQuery CreateReadinessCheck where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateReadinessCheckResponse' smart constructor.
+data CreateReadinessCheckResponse = CreateReadinessCheckResponse'
+  { -- | The Amazon Resource Name (ARN) associated with a readiness check.
+    readinessCheckArn :: Prelude.Maybe Prelude.Text,
+    -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Maybe Prelude.Text,
+    -- | Name of the resource set to be checked.
+    resourceSet :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReadinessCheckResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckArn', 'createReadinessCheckResponse_readinessCheckArn' - The Amazon Resource Name (ARN) associated with a readiness check.
+--
+-- 'readinessCheckName', 'createReadinessCheckResponse_readinessCheckName' - Name of a readiness check.
+--
+-- 'resourceSet', 'createReadinessCheckResponse_resourceSet' - Name of the resource set to be checked.
+--
+-- 'tags', 'createReadinessCheckResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'createReadinessCheckResponse_httpStatus' - The response's http status code.
+newCreateReadinessCheckResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateReadinessCheckResponse
+newCreateReadinessCheckResponse pHttpStatus_ =
+  CreateReadinessCheckResponse'
+    { readinessCheckArn =
+        Prelude.Nothing,
+      readinessCheckName = Prelude.Nothing,
+      resourceSet = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) associated with a readiness check.
+createReadinessCheckResponse_readinessCheckArn :: Lens.Lens' CreateReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+createReadinessCheckResponse_readinessCheckArn = Lens.lens (\CreateReadinessCheckResponse' {readinessCheckArn} -> readinessCheckArn) (\s@CreateReadinessCheckResponse' {} a -> s {readinessCheckArn = a} :: CreateReadinessCheckResponse)
+
+-- | Name of a readiness check.
+createReadinessCheckResponse_readinessCheckName :: Lens.Lens' CreateReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+createReadinessCheckResponse_readinessCheckName = Lens.lens (\CreateReadinessCheckResponse' {readinessCheckName} -> readinessCheckName) (\s@CreateReadinessCheckResponse' {} a -> s {readinessCheckName = a} :: CreateReadinessCheckResponse)
+
+-- | Name of the resource set to be checked.
+createReadinessCheckResponse_resourceSet :: Lens.Lens' CreateReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+createReadinessCheckResponse_resourceSet = Lens.lens (\CreateReadinessCheckResponse' {resourceSet} -> resourceSet) (\s@CreateReadinessCheckResponse' {} a -> s {resourceSet = a} :: CreateReadinessCheckResponse)
+
+-- | Undocumented member.
+createReadinessCheckResponse_tags :: Lens.Lens' CreateReadinessCheckResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createReadinessCheckResponse_tags = Lens.lens (\CreateReadinessCheckResponse' {tags} -> tags) (\s@CreateReadinessCheckResponse' {} a -> s {tags = a} :: CreateReadinessCheckResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createReadinessCheckResponse_httpStatus :: Lens.Lens' CreateReadinessCheckResponse Prelude.Int
+createReadinessCheckResponse_httpStatus = Lens.lens (\CreateReadinessCheckResponse' {httpStatus} -> httpStatus) (\s@CreateReadinessCheckResponse' {} a -> s {httpStatus = a} :: CreateReadinessCheckResponse)
+
+instance Prelude.NFData CreateReadinessCheckResponse where
+  rnf CreateReadinessCheckResponse' {..} =
+    Prelude.rnf readinessCheckArn
+      `Prelude.seq` Prelude.rnf readinessCheckName
+      `Prelude.seq` Prelude.rnf resourceSet
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/CreateRecoveryGroup.hs b/gen/Amazonka/Route53RecoveryReadiness/CreateRecoveryGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/CreateRecoveryGroup.hs
@@ -0,0 +1,233 @@
+{-# 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.Route53RecoveryReadiness.CreateRecoveryGroup
+-- 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 recovery group in an account. A recovery group corresponds to
+-- an application and includes a list of the cells that make up the
+-- application.
+module Amazonka.Route53RecoveryReadiness.CreateRecoveryGroup
+  ( -- * Creating a Request
+    CreateRecoveryGroup (..),
+    newCreateRecoveryGroup,
+
+    -- * Request Lenses
+    createRecoveryGroup_cells,
+    createRecoveryGroup_tags,
+    createRecoveryGroup_recoveryGroupName,
+
+    -- * Destructuring the Response
+    CreateRecoveryGroupResponse (..),
+    newCreateRecoveryGroupResponse,
+
+    -- * Response Lenses
+    createRecoveryGroupResponse_cells,
+    createRecoveryGroupResponse_recoveryGroupArn,
+    createRecoveryGroupResponse_recoveryGroupName,
+    createRecoveryGroupResponse_tags,
+    createRecoveryGroupResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newCreateRecoveryGroup' smart constructor.
+data CreateRecoveryGroup = CreateRecoveryGroup'
+  { -- | A list of the cell Amazon Resource Names (ARNs) in the recovery group.
+    cells :: Prelude.Maybe [Prelude.Text],
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the recovery group to create.
+    recoveryGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecoveryGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'createRecoveryGroup_cells' - A list of the cell Amazon Resource Names (ARNs) in the recovery group.
+--
+-- 'tags', 'createRecoveryGroup_tags' - Undocumented member.
+--
+-- 'recoveryGroupName', 'createRecoveryGroup_recoveryGroupName' - The name of the recovery group to create.
+newCreateRecoveryGroup ::
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  CreateRecoveryGroup
+newCreateRecoveryGroup pRecoveryGroupName_ =
+  CreateRecoveryGroup'
+    { cells = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      recoveryGroupName = pRecoveryGroupName_
+    }
+
+-- | A list of the cell Amazon Resource Names (ARNs) in the recovery group.
+createRecoveryGroup_cells :: Lens.Lens' CreateRecoveryGroup (Prelude.Maybe [Prelude.Text])
+createRecoveryGroup_cells = Lens.lens (\CreateRecoveryGroup' {cells} -> cells) (\s@CreateRecoveryGroup' {} a -> s {cells = a} :: CreateRecoveryGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createRecoveryGroup_tags :: Lens.Lens' CreateRecoveryGroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRecoveryGroup_tags = Lens.lens (\CreateRecoveryGroup' {tags} -> tags) (\s@CreateRecoveryGroup' {} a -> s {tags = a} :: CreateRecoveryGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the recovery group to create.
+createRecoveryGroup_recoveryGroupName :: Lens.Lens' CreateRecoveryGroup Prelude.Text
+createRecoveryGroup_recoveryGroupName = Lens.lens (\CreateRecoveryGroup' {recoveryGroupName} -> recoveryGroupName) (\s@CreateRecoveryGroup' {} a -> s {recoveryGroupName = a} :: CreateRecoveryGroup)
+
+instance Core.AWSRequest CreateRecoveryGroup where
+  type
+    AWSResponse CreateRecoveryGroup =
+      CreateRecoveryGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRecoveryGroupResponse'
+            Prelude.<$> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "recoveryGroupArn")
+            Prelude.<*> (x Data..?> "recoveryGroupName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRecoveryGroup where
+  hashWithSalt _salt CreateRecoveryGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` cells
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` recoveryGroupName
+
+instance Prelude.NFData CreateRecoveryGroup where
+  rnf CreateRecoveryGroup' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+
+instance Data.ToHeaders CreateRecoveryGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRecoveryGroup where
+  toJSON CreateRecoveryGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cells" Data..=) Prelude.<$> cells,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("recoveryGroupName" Data..= recoveryGroupName)
+          ]
+      )
+
+instance Data.ToPath CreateRecoveryGroup where
+  toPath = Prelude.const "/recoverygroups"
+
+instance Data.ToQuery CreateRecoveryGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRecoveryGroupResponse' smart constructor.
+data CreateRecoveryGroupResponse = CreateRecoveryGroupResponse'
+  { -- | A list of a cell\'s Amazon Resource Names (ARNs).
+    cells :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the recovery group.
+    recoveryGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recovery group.
+    recoveryGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with the recovery group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRecoveryGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'createRecoveryGroupResponse_cells' - A list of a cell\'s Amazon Resource Names (ARNs).
+--
+-- 'recoveryGroupArn', 'createRecoveryGroupResponse_recoveryGroupArn' - The Amazon Resource Name (ARN) for the recovery group.
+--
+-- 'recoveryGroupName', 'createRecoveryGroupResponse_recoveryGroupName' - The name of the recovery group.
+--
+-- 'tags', 'createRecoveryGroupResponse_tags' - The tags associated with the recovery group.
+--
+-- 'httpStatus', 'createRecoveryGroupResponse_httpStatus' - The response's http status code.
+newCreateRecoveryGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRecoveryGroupResponse
+newCreateRecoveryGroupResponse pHttpStatus_ =
+  CreateRecoveryGroupResponse'
+    { cells =
+        Prelude.Nothing,
+      recoveryGroupArn = Prelude.Nothing,
+      recoveryGroupName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of a cell\'s Amazon Resource Names (ARNs).
+createRecoveryGroupResponse_cells :: Lens.Lens' CreateRecoveryGroupResponse (Prelude.Maybe [Prelude.Text])
+createRecoveryGroupResponse_cells = Lens.lens (\CreateRecoveryGroupResponse' {cells} -> cells) (\s@CreateRecoveryGroupResponse' {} a -> s {cells = a} :: CreateRecoveryGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the recovery group.
+createRecoveryGroupResponse_recoveryGroupArn :: Lens.Lens' CreateRecoveryGroupResponse (Prelude.Maybe Prelude.Text)
+createRecoveryGroupResponse_recoveryGroupArn = Lens.lens (\CreateRecoveryGroupResponse' {recoveryGroupArn} -> recoveryGroupArn) (\s@CreateRecoveryGroupResponse' {} a -> s {recoveryGroupArn = a} :: CreateRecoveryGroupResponse)
+
+-- | The name of the recovery group.
+createRecoveryGroupResponse_recoveryGroupName :: Lens.Lens' CreateRecoveryGroupResponse (Prelude.Maybe Prelude.Text)
+createRecoveryGroupResponse_recoveryGroupName = Lens.lens (\CreateRecoveryGroupResponse' {recoveryGroupName} -> recoveryGroupName) (\s@CreateRecoveryGroupResponse' {} a -> s {recoveryGroupName = a} :: CreateRecoveryGroupResponse)
+
+-- | The tags associated with the recovery group.
+createRecoveryGroupResponse_tags :: Lens.Lens' CreateRecoveryGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRecoveryGroupResponse_tags = Lens.lens (\CreateRecoveryGroupResponse' {tags} -> tags) (\s@CreateRecoveryGroupResponse' {} a -> s {tags = a} :: CreateRecoveryGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createRecoveryGroupResponse_httpStatus :: Lens.Lens' CreateRecoveryGroupResponse Prelude.Int
+createRecoveryGroupResponse_httpStatus = Lens.lens (\CreateRecoveryGroupResponse' {httpStatus} -> httpStatus) (\s@CreateRecoveryGroupResponse' {} a -> s {httpStatus = a} :: CreateRecoveryGroupResponse)
+
+instance Prelude.NFData CreateRecoveryGroupResponse where
+  rnf CreateRecoveryGroupResponse' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf recoveryGroupArn
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/CreateResourceSet.hs b/gen/Amazonka/Route53RecoveryReadiness/CreateResourceSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/CreateResourceSet.hs
@@ -0,0 +1,329 @@
+{-# 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.Route53RecoveryReadiness.CreateResourceSet
+-- 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 resource set. A resource set is a set of resources of one type
+-- that span multiple cells. You can associate a resource set with a
+-- readiness check to monitor the resources for failover readiness.
+module Amazonka.Route53RecoveryReadiness.CreateResourceSet
+  ( -- * Creating a Request
+    CreateResourceSet (..),
+    newCreateResourceSet,
+
+    -- * Request Lenses
+    createResourceSet_tags,
+    createResourceSet_resourceSetType,
+    createResourceSet_resourceSetName,
+    createResourceSet_resources,
+
+    -- * Destructuring the Response
+    CreateResourceSetResponse (..),
+    newCreateResourceSetResponse,
+
+    -- * Response Lenses
+    createResourceSetResponse_resourceSetArn,
+    createResourceSetResponse_resourceSetName,
+    createResourceSetResponse_resourceSetType,
+    createResourceSetResponse_resources,
+    createResourceSetResponse_tags,
+    createResourceSetResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newCreateResourceSet' smart constructor.
+data CreateResourceSet = CreateResourceSet'
+  { -- | A tag to associate with the parameters for a resource set.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The resource type of the resources in the resource set. Enter one of the
+    -- following values for resource type:
+    --
+    -- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+    -- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+    -- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+    -- AWS::ElasticLoadBalancing::LoadBalancer,
+    -- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+    -- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+    -- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+    -- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+    -- AWS::Route53RecoveryReadiness::DNSTargetResource
+    resourceSetType :: Prelude.Text,
+    -- | The name of the resource set to create.
+    resourceSetName :: Prelude.Text,
+    -- | A list of resource objects in the resource set.
+    resources :: [Resource]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResourceSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createResourceSet_tags' - A tag to associate with the parameters for a resource set.
+--
+-- 'resourceSetType', 'createResourceSet_resourceSetType' - The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+--
+-- 'resourceSetName', 'createResourceSet_resourceSetName' - The name of the resource set to create.
+--
+-- 'resources', 'createResourceSet_resources' - A list of resource objects in the resource set.
+newCreateResourceSet ::
+  -- | 'resourceSetType'
+  Prelude.Text ->
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  CreateResourceSet
+newCreateResourceSet
+  pResourceSetType_
+  pResourceSetName_ =
+    CreateResourceSet'
+      { tags = Prelude.Nothing,
+        resourceSetType = pResourceSetType_,
+        resourceSetName = pResourceSetName_,
+        resources = Prelude.mempty
+      }
+
+-- | A tag to associate with the parameters for a resource set.
+createResourceSet_tags :: Lens.Lens' CreateResourceSet (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createResourceSet_tags = Lens.lens (\CreateResourceSet' {tags} -> tags) (\s@CreateResourceSet' {} a -> s {tags = a} :: CreateResourceSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+createResourceSet_resourceSetType :: Lens.Lens' CreateResourceSet Prelude.Text
+createResourceSet_resourceSetType = Lens.lens (\CreateResourceSet' {resourceSetType} -> resourceSetType) (\s@CreateResourceSet' {} a -> s {resourceSetType = a} :: CreateResourceSet)
+
+-- | The name of the resource set to create.
+createResourceSet_resourceSetName :: Lens.Lens' CreateResourceSet Prelude.Text
+createResourceSet_resourceSetName = Lens.lens (\CreateResourceSet' {resourceSetName} -> resourceSetName) (\s@CreateResourceSet' {} a -> s {resourceSetName = a} :: CreateResourceSet)
+
+-- | A list of resource objects in the resource set.
+createResourceSet_resources :: Lens.Lens' CreateResourceSet [Resource]
+createResourceSet_resources = Lens.lens (\CreateResourceSet' {resources} -> resources) (\s@CreateResourceSet' {} a -> s {resources = a} :: CreateResourceSet) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateResourceSet where
+  type
+    AWSResponse CreateResourceSet =
+      CreateResourceSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateResourceSetResponse'
+            Prelude.<$> (x Data..?> "resourceSetArn")
+            Prelude.<*> (x Data..?> "resourceSetName")
+            Prelude.<*> (x Data..?> "resourceSetType")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateResourceSet where
+  hashWithSalt _salt CreateResourceSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` resourceSetType
+      `Prelude.hashWithSalt` resourceSetName
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData CreateResourceSet where
+  rnf CreateResourceSet' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf resourceSetType
+      `Prelude.seq` Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf resources
+
+instance Data.ToHeaders CreateResourceSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateResourceSet where
+  toJSON CreateResourceSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("resourceSetType" Data..= resourceSetType),
+            Prelude.Just
+              ("resourceSetName" Data..= resourceSetName),
+            Prelude.Just ("resources" Data..= resources)
+          ]
+      )
+
+instance Data.ToPath CreateResourceSet where
+  toPath = Prelude.const "/resourcesets"
+
+instance Data.ToQuery CreateResourceSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateResourceSetResponse' smart constructor.
+data CreateResourceSetResponse = CreateResourceSetResponse'
+  { -- | The Amazon Resource Name (ARN) for the resource set.
+    resourceSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource set.
+    resourceSetName :: Prelude.Maybe Prelude.Text,
+    -- | The resource type of the resources in the resource set. Enter one of the
+    -- following values for resource type:
+    --
+    -- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+    -- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+    -- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+    -- AWS::ElasticLoadBalancing::LoadBalancer,
+    -- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+    -- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+    -- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+    -- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+    -- AWS::Route53RecoveryReadiness::DNSTargetResource
+    resourceSetType :: Prelude.Maybe Prelude.Text,
+    -- | A list of resource objects.
+    resources :: Prelude.Maybe [Resource],
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResourceSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceSetArn', 'createResourceSetResponse_resourceSetArn' - The Amazon Resource Name (ARN) for the resource set.
+--
+-- 'resourceSetName', 'createResourceSetResponse_resourceSetName' - The name of the resource set.
+--
+-- 'resourceSetType', 'createResourceSetResponse_resourceSetType' - The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+--
+-- 'resources', 'createResourceSetResponse_resources' - A list of resource objects.
+--
+-- 'tags', 'createResourceSetResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'createResourceSetResponse_httpStatus' - The response's http status code.
+newCreateResourceSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateResourceSetResponse
+newCreateResourceSetResponse pHttpStatus_ =
+  CreateResourceSetResponse'
+    { resourceSetArn =
+        Prelude.Nothing,
+      resourceSetName = Prelude.Nothing,
+      resourceSetType = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the resource set.
+createResourceSetResponse_resourceSetArn :: Lens.Lens' CreateResourceSetResponse (Prelude.Maybe Prelude.Text)
+createResourceSetResponse_resourceSetArn = Lens.lens (\CreateResourceSetResponse' {resourceSetArn} -> resourceSetArn) (\s@CreateResourceSetResponse' {} a -> s {resourceSetArn = a} :: CreateResourceSetResponse)
+
+-- | The name of the resource set.
+createResourceSetResponse_resourceSetName :: Lens.Lens' CreateResourceSetResponse (Prelude.Maybe Prelude.Text)
+createResourceSetResponse_resourceSetName = Lens.lens (\CreateResourceSetResponse' {resourceSetName} -> resourceSetName) (\s@CreateResourceSetResponse' {} a -> s {resourceSetName = a} :: CreateResourceSetResponse)
+
+-- | The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+createResourceSetResponse_resourceSetType :: Lens.Lens' CreateResourceSetResponse (Prelude.Maybe Prelude.Text)
+createResourceSetResponse_resourceSetType = Lens.lens (\CreateResourceSetResponse' {resourceSetType} -> resourceSetType) (\s@CreateResourceSetResponse' {} a -> s {resourceSetType = a} :: CreateResourceSetResponse)
+
+-- | A list of resource objects.
+createResourceSetResponse_resources :: Lens.Lens' CreateResourceSetResponse (Prelude.Maybe [Resource])
+createResourceSetResponse_resources = Lens.lens (\CreateResourceSetResponse' {resources} -> resources) (\s@CreateResourceSetResponse' {} a -> s {resources = a} :: CreateResourceSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createResourceSetResponse_tags :: Lens.Lens' CreateResourceSetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createResourceSetResponse_tags = Lens.lens (\CreateResourceSetResponse' {tags} -> tags) (\s@CreateResourceSetResponse' {} a -> s {tags = a} :: CreateResourceSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createResourceSetResponse_httpStatus :: Lens.Lens' CreateResourceSetResponse Prelude.Int
+createResourceSetResponse_httpStatus = Lens.lens (\CreateResourceSetResponse' {httpStatus} -> httpStatus) (\s@CreateResourceSetResponse' {} a -> s {httpStatus = a} :: CreateResourceSetResponse)
+
+instance Prelude.NFData CreateResourceSetResponse where
+  rnf CreateResourceSetResponse' {..} =
+    Prelude.rnf resourceSetArn
+      `Prelude.seq` Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf resourceSetType
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/DeleteCell.hs b/gen/Amazonka/Route53RecoveryReadiness/DeleteCell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/DeleteCell.hs
@@ -0,0 +1,120 @@
+{-# 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.Route53RecoveryReadiness.DeleteCell
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a cell. When successful, the response code is 204, with no
+-- response body.
+module Amazonka.Route53RecoveryReadiness.DeleteCell
+  ( -- * Creating a Request
+    DeleteCell (..),
+    newDeleteCell,
+
+    -- * Request Lenses
+    deleteCell_cellName,
+
+    -- * Destructuring the Response
+    DeleteCellResponse (..),
+    newDeleteCellResponse,
+  )
+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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newDeleteCell' smart constructor.
+data DeleteCell = DeleteCell'
+  { -- | The name of the cell.
+    cellName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCell' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellName', 'deleteCell_cellName' - The name of the cell.
+newDeleteCell ::
+  -- | 'cellName'
+  Prelude.Text ->
+  DeleteCell
+newDeleteCell pCellName_ =
+  DeleteCell' {cellName = pCellName_}
+
+-- | The name of the cell.
+deleteCell_cellName :: Lens.Lens' DeleteCell Prelude.Text
+deleteCell_cellName = Lens.lens (\DeleteCell' {cellName} -> cellName) (\s@DeleteCell' {} a -> s {cellName = a} :: DeleteCell)
+
+instance Core.AWSRequest DeleteCell where
+  type AWSResponse DeleteCell = DeleteCellResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteCellResponse'
+
+instance Prelude.Hashable DeleteCell where
+  hashWithSalt _salt DeleteCell' {..} =
+    _salt `Prelude.hashWithSalt` cellName
+
+instance Prelude.NFData DeleteCell where
+  rnf DeleteCell' {..} = Prelude.rnf cellName
+
+instance Data.ToHeaders DeleteCell where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCell where
+  toPath DeleteCell' {..} =
+    Prelude.mconcat ["/cells/", Data.toBS cellName]
+
+instance Data.ToQuery DeleteCell where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCellResponse' smart constructor.
+data DeleteCellResponse = DeleteCellResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCellResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCellResponse ::
+  DeleteCellResponse
+newDeleteCellResponse = DeleteCellResponse'
+
+instance Prelude.NFData DeleteCellResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Route53RecoveryReadiness/DeleteCrossAccountAuthorization.hs b/gen/Amazonka/Route53RecoveryReadiness/DeleteCrossAccountAuthorization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/DeleteCrossAccountAuthorization.hs
@@ -0,0 +1,173 @@
+{-# 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.Route53RecoveryReadiness.DeleteCrossAccountAuthorization
+-- 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 cross account readiness authorization.
+module Amazonka.Route53RecoveryReadiness.DeleteCrossAccountAuthorization
+  ( -- * Creating a Request
+    DeleteCrossAccountAuthorization (..),
+    newDeleteCrossAccountAuthorization,
+
+    -- * Request Lenses
+    deleteCrossAccountAuthorization_crossAccountAuthorization,
+
+    -- * Destructuring the Response
+    DeleteCrossAccountAuthorizationResponse (..),
+    newDeleteCrossAccountAuthorizationResponse,
+
+    -- * Response Lenses
+    deleteCrossAccountAuthorizationResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newDeleteCrossAccountAuthorization' smart constructor.
+data DeleteCrossAccountAuthorization = DeleteCrossAccountAuthorization'
+  { -- | The cross-account authorization.
+    crossAccountAuthorization :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCrossAccountAuthorization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crossAccountAuthorization', 'deleteCrossAccountAuthorization_crossAccountAuthorization' - The cross-account authorization.
+newDeleteCrossAccountAuthorization ::
+  -- | 'crossAccountAuthorization'
+  Prelude.Text ->
+  DeleteCrossAccountAuthorization
+newDeleteCrossAccountAuthorization
+  pCrossAccountAuthorization_ =
+    DeleteCrossAccountAuthorization'
+      { crossAccountAuthorization =
+          pCrossAccountAuthorization_
+      }
+
+-- | The cross-account authorization.
+deleteCrossAccountAuthorization_crossAccountAuthorization :: Lens.Lens' DeleteCrossAccountAuthorization Prelude.Text
+deleteCrossAccountAuthorization_crossAccountAuthorization = Lens.lens (\DeleteCrossAccountAuthorization' {crossAccountAuthorization} -> crossAccountAuthorization) (\s@DeleteCrossAccountAuthorization' {} a -> s {crossAccountAuthorization = a} :: DeleteCrossAccountAuthorization)
+
+instance
+  Core.AWSRequest
+    DeleteCrossAccountAuthorization
+  where
+  type
+    AWSResponse DeleteCrossAccountAuthorization =
+      DeleteCrossAccountAuthorizationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteCrossAccountAuthorizationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteCrossAccountAuthorization
+  where
+  hashWithSalt
+    _salt
+    DeleteCrossAccountAuthorization' {..} =
+      _salt
+        `Prelude.hashWithSalt` crossAccountAuthorization
+
+instance
+  Prelude.NFData
+    DeleteCrossAccountAuthorization
+  where
+  rnf DeleteCrossAccountAuthorization' {..} =
+    Prelude.rnf crossAccountAuthorization
+
+instance
+  Data.ToHeaders
+    DeleteCrossAccountAuthorization
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCrossAccountAuthorization where
+  toPath DeleteCrossAccountAuthorization' {..} =
+    Prelude.mconcat
+      [ "/crossaccountauthorizations/",
+        Data.toBS crossAccountAuthorization
+      ]
+
+instance Data.ToQuery DeleteCrossAccountAuthorization where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCrossAccountAuthorizationResponse' smart constructor.
+data DeleteCrossAccountAuthorizationResponse = DeleteCrossAccountAuthorizationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCrossAccountAuthorizationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteCrossAccountAuthorizationResponse_httpStatus' - The response's http status code.
+newDeleteCrossAccountAuthorizationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCrossAccountAuthorizationResponse
+newDeleteCrossAccountAuthorizationResponse
+  pHttpStatus_ =
+    DeleteCrossAccountAuthorizationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteCrossAccountAuthorizationResponse_httpStatus :: Lens.Lens' DeleteCrossAccountAuthorizationResponse Prelude.Int
+deleteCrossAccountAuthorizationResponse_httpStatus = Lens.lens (\DeleteCrossAccountAuthorizationResponse' {httpStatus} -> httpStatus) (\s@DeleteCrossAccountAuthorizationResponse' {} a -> s {httpStatus = a} :: DeleteCrossAccountAuthorizationResponse)
+
+instance
+  Prelude.NFData
+    DeleteCrossAccountAuthorizationResponse
+  where
+  rnf DeleteCrossAccountAuthorizationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/DeleteReadinessCheck.hs b/gen/Amazonka/Route53RecoveryReadiness/DeleteReadinessCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/DeleteReadinessCheck.hs
@@ -0,0 +1,128 @@
+{-# 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.Route53RecoveryReadiness.DeleteReadinessCheck
+-- 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 readiness check.
+module Amazonka.Route53RecoveryReadiness.DeleteReadinessCheck
+  ( -- * Creating a Request
+    DeleteReadinessCheck (..),
+    newDeleteReadinessCheck,
+
+    -- * Request Lenses
+    deleteReadinessCheck_readinessCheckName,
+
+    -- * Destructuring the Response
+    DeleteReadinessCheckResponse (..),
+    newDeleteReadinessCheckResponse,
+  )
+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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newDeleteReadinessCheck' smart constructor.
+data DeleteReadinessCheck = DeleteReadinessCheck'
+  { -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteReadinessCheck' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckName', 'deleteReadinessCheck_readinessCheckName' - Name of a readiness check.
+newDeleteReadinessCheck ::
+  -- | 'readinessCheckName'
+  Prelude.Text ->
+  DeleteReadinessCheck
+newDeleteReadinessCheck pReadinessCheckName_ =
+  DeleteReadinessCheck'
+    { readinessCheckName =
+        pReadinessCheckName_
+    }
+
+-- | Name of a readiness check.
+deleteReadinessCheck_readinessCheckName :: Lens.Lens' DeleteReadinessCheck Prelude.Text
+deleteReadinessCheck_readinessCheckName = Lens.lens (\DeleteReadinessCheck' {readinessCheckName} -> readinessCheckName) (\s@DeleteReadinessCheck' {} a -> s {readinessCheckName = a} :: DeleteReadinessCheck)
+
+instance Core.AWSRequest DeleteReadinessCheck where
+  type
+    AWSResponse DeleteReadinessCheck =
+      DeleteReadinessCheckResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteReadinessCheckResponse'
+
+instance Prelude.Hashable DeleteReadinessCheck where
+  hashWithSalt _salt DeleteReadinessCheck' {..} =
+    _salt `Prelude.hashWithSalt` readinessCheckName
+
+instance Prelude.NFData DeleteReadinessCheck where
+  rnf DeleteReadinessCheck' {..} =
+    Prelude.rnf readinessCheckName
+
+instance Data.ToHeaders DeleteReadinessCheck where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteReadinessCheck where
+  toPath DeleteReadinessCheck' {..} =
+    Prelude.mconcat
+      ["/readinesschecks/", Data.toBS readinessCheckName]
+
+instance Data.ToQuery DeleteReadinessCheck where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteReadinessCheckResponse' smart constructor.
+data DeleteReadinessCheckResponse = DeleteReadinessCheckResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteReadinessCheckResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteReadinessCheckResponse ::
+  DeleteReadinessCheckResponse
+newDeleteReadinessCheckResponse =
+  DeleteReadinessCheckResponse'
+
+instance Prelude.NFData DeleteReadinessCheckResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Route53RecoveryReadiness/DeleteRecoveryGroup.hs b/gen/Amazonka/Route53RecoveryReadiness/DeleteRecoveryGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/DeleteRecoveryGroup.hs
@@ -0,0 +1,128 @@
+{-# 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.Route53RecoveryReadiness.DeleteRecoveryGroup
+-- 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 recovery group.
+module Amazonka.Route53RecoveryReadiness.DeleteRecoveryGroup
+  ( -- * Creating a Request
+    DeleteRecoveryGroup (..),
+    newDeleteRecoveryGroup,
+
+    -- * Request Lenses
+    deleteRecoveryGroup_recoveryGroupName,
+
+    -- * Destructuring the Response
+    DeleteRecoveryGroupResponse (..),
+    newDeleteRecoveryGroupResponse,
+  )
+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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newDeleteRecoveryGroup' smart constructor.
+data DeleteRecoveryGroup = DeleteRecoveryGroup'
+  { -- | The name of a recovery group.
+    recoveryGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecoveryGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryGroupName', 'deleteRecoveryGroup_recoveryGroupName' - The name of a recovery group.
+newDeleteRecoveryGroup ::
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  DeleteRecoveryGroup
+newDeleteRecoveryGroup pRecoveryGroupName_ =
+  DeleteRecoveryGroup'
+    { recoveryGroupName =
+        pRecoveryGroupName_
+    }
+
+-- | The name of a recovery group.
+deleteRecoveryGroup_recoveryGroupName :: Lens.Lens' DeleteRecoveryGroup Prelude.Text
+deleteRecoveryGroup_recoveryGroupName = Lens.lens (\DeleteRecoveryGroup' {recoveryGroupName} -> recoveryGroupName) (\s@DeleteRecoveryGroup' {} a -> s {recoveryGroupName = a} :: DeleteRecoveryGroup)
+
+instance Core.AWSRequest DeleteRecoveryGroup where
+  type
+    AWSResponse DeleteRecoveryGroup =
+      DeleteRecoveryGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteRecoveryGroupResponse'
+
+instance Prelude.Hashable DeleteRecoveryGroup where
+  hashWithSalt _salt DeleteRecoveryGroup' {..} =
+    _salt `Prelude.hashWithSalt` recoveryGroupName
+
+instance Prelude.NFData DeleteRecoveryGroup where
+  rnf DeleteRecoveryGroup' {..} =
+    Prelude.rnf recoveryGroupName
+
+instance Data.ToHeaders DeleteRecoveryGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRecoveryGroup where
+  toPath DeleteRecoveryGroup' {..} =
+    Prelude.mconcat
+      ["/recoverygroups/", Data.toBS recoveryGroupName]
+
+instance Data.ToQuery DeleteRecoveryGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRecoveryGroupResponse' smart constructor.
+data DeleteRecoveryGroupResponse = DeleteRecoveryGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecoveryGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRecoveryGroupResponse ::
+  DeleteRecoveryGroupResponse
+newDeleteRecoveryGroupResponse =
+  DeleteRecoveryGroupResponse'
+
+instance Prelude.NFData DeleteRecoveryGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Route53RecoveryReadiness/DeleteResourceSet.hs b/gen/Amazonka/Route53RecoveryReadiness/DeleteResourceSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/DeleteResourceSet.hs
@@ -0,0 +1,128 @@
+{-# 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.Route53RecoveryReadiness.DeleteResourceSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a resource set.
+module Amazonka.Route53RecoveryReadiness.DeleteResourceSet
+  ( -- * Creating a Request
+    DeleteResourceSet (..),
+    newDeleteResourceSet,
+
+    -- * Request Lenses
+    deleteResourceSet_resourceSetName,
+
+    -- * Destructuring the Response
+    DeleteResourceSetResponse (..),
+    newDeleteResourceSetResponse,
+  )
+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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newDeleteResourceSet' smart constructor.
+data DeleteResourceSet = DeleteResourceSet'
+  { -- | Name of a resource set.
+    resourceSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourceSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceSetName', 'deleteResourceSet_resourceSetName' - Name of a resource set.
+newDeleteResourceSet ::
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  DeleteResourceSet
+newDeleteResourceSet pResourceSetName_ =
+  DeleteResourceSet'
+    { resourceSetName =
+        pResourceSetName_
+    }
+
+-- | Name of a resource set.
+deleteResourceSet_resourceSetName :: Lens.Lens' DeleteResourceSet Prelude.Text
+deleteResourceSet_resourceSetName = Lens.lens (\DeleteResourceSet' {resourceSetName} -> resourceSetName) (\s@DeleteResourceSet' {} a -> s {resourceSetName = a} :: DeleteResourceSet)
+
+instance Core.AWSRequest DeleteResourceSet where
+  type
+    AWSResponse DeleteResourceSet =
+      DeleteResourceSetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteResourceSetResponse'
+
+instance Prelude.Hashable DeleteResourceSet where
+  hashWithSalt _salt DeleteResourceSet' {..} =
+    _salt `Prelude.hashWithSalt` resourceSetName
+
+instance Prelude.NFData DeleteResourceSet where
+  rnf DeleteResourceSet' {..} =
+    Prelude.rnf resourceSetName
+
+instance Data.ToHeaders DeleteResourceSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteResourceSet where
+  toPath DeleteResourceSet' {..} =
+    Prelude.mconcat
+      ["/resourcesets/", Data.toBS resourceSetName]
+
+instance Data.ToQuery DeleteResourceSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteResourceSetResponse' smart constructor.
+data DeleteResourceSetResponse = DeleteResourceSetResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourceSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteResourceSetResponse ::
+  DeleteResourceSetResponse
+newDeleteResourceSetResponse =
+  DeleteResourceSetResponse'
+
+instance Prelude.NFData DeleteResourceSetResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetArchitectureRecommendations.hs b/gen/Amazonka/Route53RecoveryReadiness/GetArchitectureRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetArchitectureRecommendations.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.GetArchitectureRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets recommendations about architecture designs for improving resiliency
+-- for an application, based on a recovery group.
+module Amazonka.Route53RecoveryReadiness.GetArchitectureRecommendations
+  ( -- * Creating a Request
+    GetArchitectureRecommendations (..),
+    newGetArchitectureRecommendations,
+
+    -- * Request Lenses
+    getArchitectureRecommendations_maxResults,
+    getArchitectureRecommendations_nextToken,
+    getArchitectureRecommendations_recoveryGroupName,
+
+    -- * Destructuring the Response
+    GetArchitectureRecommendationsResponse (..),
+    newGetArchitectureRecommendationsResponse,
+
+    -- * Response Lenses
+    getArchitectureRecommendationsResponse_lastAuditTimestamp,
+    getArchitectureRecommendationsResponse_nextToken,
+    getArchitectureRecommendationsResponse_recommendations,
+    getArchitectureRecommendationsResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetArchitectureRecommendations' smart constructor.
+data GetArchitectureRecommendations = GetArchitectureRecommendations'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of a recovery group.
+    recoveryGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetArchitectureRecommendations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getArchitectureRecommendations_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'getArchitectureRecommendations_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'recoveryGroupName', 'getArchitectureRecommendations_recoveryGroupName' - The name of a recovery group.
+newGetArchitectureRecommendations ::
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  GetArchitectureRecommendations
+newGetArchitectureRecommendations pRecoveryGroupName_ =
+  GetArchitectureRecommendations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      recoveryGroupName = pRecoveryGroupName_
+    }
+
+-- | The number of objects that you want to return with this call.
+getArchitectureRecommendations_maxResults :: Lens.Lens' GetArchitectureRecommendations (Prelude.Maybe Prelude.Natural)
+getArchitectureRecommendations_maxResults = Lens.lens (\GetArchitectureRecommendations' {maxResults} -> maxResults) (\s@GetArchitectureRecommendations' {} a -> s {maxResults = a} :: GetArchitectureRecommendations)
+
+-- | The token that identifies which batch of results you want to see.
+getArchitectureRecommendations_nextToken :: Lens.Lens' GetArchitectureRecommendations (Prelude.Maybe Prelude.Text)
+getArchitectureRecommendations_nextToken = Lens.lens (\GetArchitectureRecommendations' {nextToken} -> nextToken) (\s@GetArchitectureRecommendations' {} a -> s {nextToken = a} :: GetArchitectureRecommendations)
+
+-- | The name of a recovery group.
+getArchitectureRecommendations_recoveryGroupName :: Lens.Lens' GetArchitectureRecommendations Prelude.Text
+getArchitectureRecommendations_recoveryGroupName = Lens.lens (\GetArchitectureRecommendations' {recoveryGroupName} -> recoveryGroupName) (\s@GetArchitectureRecommendations' {} a -> s {recoveryGroupName = a} :: GetArchitectureRecommendations)
+
+instance
+  Core.AWSRequest
+    GetArchitectureRecommendations
+  where
+  type
+    AWSResponse GetArchitectureRecommendations =
+      GetArchitectureRecommendationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetArchitectureRecommendationsResponse'
+            Prelude.<$> (x Data..?> "lastAuditTimestamp")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "recommendations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetArchitectureRecommendations
+  where
+  hashWithSalt
+    _salt
+    GetArchitectureRecommendations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` recoveryGroupName
+
+instance
+  Prelude.NFData
+    GetArchitectureRecommendations
+  where
+  rnf GetArchitectureRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+
+instance
+  Data.ToHeaders
+    GetArchitectureRecommendations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetArchitectureRecommendations where
+  toPath GetArchitectureRecommendations' {..} =
+    Prelude.mconcat
+      [ "/recoverygroups/",
+        Data.toBS recoveryGroupName,
+        "/architectureRecommendations"
+      ]
+
+instance Data.ToQuery GetArchitectureRecommendations where
+  toQuery GetArchitectureRecommendations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetArchitectureRecommendationsResponse' smart constructor.
+data GetArchitectureRecommendationsResponse = GetArchitectureRecommendationsResponse'
+  { -- | The time that a recovery group was last assessed for recommendations, in
+    -- UTC ISO-8601 format.
+    lastAuditTimestamp :: Prelude.Maybe Data.ISO8601,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of the recommendations for the customer\'s application.
+    recommendations :: Prelude.Maybe [Recommendation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetArchitectureRecommendationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastAuditTimestamp', 'getArchitectureRecommendationsResponse_lastAuditTimestamp' - The time that a recovery group was last assessed for recommendations, in
+-- UTC ISO-8601 format.
+--
+-- 'nextToken', 'getArchitectureRecommendationsResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'recommendations', 'getArchitectureRecommendationsResponse_recommendations' - A list of the recommendations for the customer\'s application.
+--
+-- 'httpStatus', 'getArchitectureRecommendationsResponse_httpStatus' - The response's http status code.
+newGetArchitectureRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetArchitectureRecommendationsResponse
+newGetArchitectureRecommendationsResponse
+  pHttpStatus_ =
+    GetArchitectureRecommendationsResponse'
+      { lastAuditTimestamp =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        recommendations = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The time that a recovery group was last assessed for recommendations, in
+-- UTC ISO-8601 format.
+getArchitectureRecommendationsResponse_lastAuditTimestamp :: Lens.Lens' GetArchitectureRecommendationsResponse (Prelude.Maybe Prelude.UTCTime)
+getArchitectureRecommendationsResponse_lastAuditTimestamp = Lens.lens (\GetArchitectureRecommendationsResponse' {lastAuditTimestamp} -> lastAuditTimestamp) (\s@GetArchitectureRecommendationsResponse' {} a -> s {lastAuditTimestamp = a} :: GetArchitectureRecommendationsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The token that identifies which batch of results you want to see.
+getArchitectureRecommendationsResponse_nextToken :: Lens.Lens' GetArchitectureRecommendationsResponse (Prelude.Maybe Prelude.Text)
+getArchitectureRecommendationsResponse_nextToken = Lens.lens (\GetArchitectureRecommendationsResponse' {nextToken} -> nextToken) (\s@GetArchitectureRecommendationsResponse' {} a -> s {nextToken = a} :: GetArchitectureRecommendationsResponse)
+
+-- | A list of the recommendations for the customer\'s application.
+getArchitectureRecommendationsResponse_recommendations :: Lens.Lens' GetArchitectureRecommendationsResponse (Prelude.Maybe [Recommendation])
+getArchitectureRecommendationsResponse_recommendations = Lens.lens (\GetArchitectureRecommendationsResponse' {recommendations} -> recommendations) (\s@GetArchitectureRecommendationsResponse' {} a -> s {recommendations = a} :: GetArchitectureRecommendationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getArchitectureRecommendationsResponse_httpStatus :: Lens.Lens' GetArchitectureRecommendationsResponse Prelude.Int
+getArchitectureRecommendationsResponse_httpStatus = Lens.lens (\GetArchitectureRecommendationsResponse' {httpStatus} -> httpStatus) (\s@GetArchitectureRecommendationsResponse' {} a -> s {httpStatus = a} :: GetArchitectureRecommendationsResponse)
+
+instance
+  Prelude.NFData
+    GetArchitectureRecommendationsResponse
+  where
+  rnf GetArchitectureRecommendationsResponse' {..} =
+    Prelude.rnf lastAuditTimestamp
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recommendations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetCell.hs b/gen/Amazonka/Route53RecoveryReadiness/GetCell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetCell.hs
@@ -0,0 +1,214 @@
+{-# 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.Route53RecoveryReadiness.GetCell
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about a cell including cell name, cell Amazon Resource
+-- Name (ARN), ARNs of nested cells for this cell, and a list of those cell
+-- ARNs with their associated recovery group ARNs.
+module Amazonka.Route53RecoveryReadiness.GetCell
+  ( -- * Creating a Request
+    GetCell (..),
+    newGetCell,
+
+    -- * Request Lenses
+    getCell_cellName,
+
+    -- * Destructuring the Response
+    GetCellResponse (..),
+    newGetCellResponse,
+
+    -- * Response Lenses
+    getCellResponse_cellArn,
+    getCellResponse_cellName,
+    getCellResponse_cells,
+    getCellResponse_parentReadinessScopes,
+    getCellResponse_tags,
+    getCellResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetCell' smart constructor.
+data GetCell = GetCell'
+  { -- | The name of the cell.
+    cellName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCell' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellName', 'getCell_cellName' - The name of the cell.
+newGetCell ::
+  -- | 'cellName'
+  Prelude.Text ->
+  GetCell
+newGetCell pCellName_ =
+  GetCell' {cellName = pCellName_}
+
+-- | The name of the cell.
+getCell_cellName :: Lens.Lens' GetCell Prelude.Text
+getCell_cellName = Lens.lens (\GetCell' {cellName} -> cellName) (\s@GetCell' {} a -> s {cellName = a} :: GetCell)
+
+instance Core.AWSRequest GetCell where
+  type AWSResponse GetCell = GetCellResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCellResponse'
+            Prelude.<$> (x Data..?> "cellArn")
+            Prelude.<*> (x Data..?> "cellName")
+            Prelude.<*> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "parentReadinessScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCell where
+  hashWithSalt _salt GetCell' {..} =
+    _salt `Prelude.hashWithSalt` cellName
+
+instance Prelude.NFData GetCell where
+  rnf GetCell' {..} = Prelude.rnf cellName
+
+instance Data.ToHeaders GetCell where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetCell where
+  toPath GetCell' {..} =
+    Prelude.mconcat ["/cells/", Data.toBS cellName]
+
+instance Data.ToQuery GetCell where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetCellResponse' smart constructor.
+data GetCellResponse = GetCellResponse'
+  { -- | The Amazon Resource Name (ARN) for the cell.
+    cellArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cell.
+    cellName :: Prelude.Maybe Prelude.Text,
+    -- | A list of cell ARNs.
+    cells :: Prelude.Maybe [Prelude.Text],
+    -- | The readiness scope for the cell, which can be a cell Amazon Resource
+    -- Name (ARN) or a recovery group ARN. This is a list but currently can
+    -- have only one element.
+    parentReadinessScopes :: Prelude.Maybe [Prelude.Text],
+    -- | Tags on the resources.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCellResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellArn', 'getCellResponse_cellArn' - The Amazon Resource Name (ARN) for the cell.
+--
+-- 'cellName', 'getCellResponse_cellName' - The name of the cell.
+--
+-- 'cells', 'getCellResponse_cells' - A list of cell ARNs.
+--
+-- 'parentReadinessScopes', 'getCellResponse_parentReadinessScopes' - The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+--
+-- 'tags', 'getCellResponse_tags' - Tags on the resources.
+--
+-- 'httpStatus', 'getCellResponse_httpStatus' - The response's http status code.
+newGetCellResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCellResponse
+newGetCellResponse pHttpStatus_ =
+  GetCellResponse'
+    { cellArn = Prelude.Nothing,
+      cellName = Prelude.Nothing,
+      cells = Prelude.Nothing,
+      parentReadinessScopes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the cell.
+getCellResponse_cellArn :: Lens.Lens' GetCellResponse (Prelude.Maybe Prelude.Text)
+getCellResponse_cellArn = Lens.lens (\GetCellResponse' {cellArn} -> cellArn) (\s@GetCellResponse' {} a -> s {cellArn = a} :: GetCellResponse)
+
+-- | The name of the cell.
+getCellResponse_cellName :: Lens.Lens' GetCellResponse (Prelude.Maybe Prelude.Text)
+getCellResponse_cellName = Lens.lens (\GetCellResponse' {cellName} -> cellName) (\s@GetCellResponse' {} a -> s {cellName = a} :: GetCellResponse)
+
+-- | A list of cell ARNs.
+getCellResponse_cells :: Lens.Lens' GetCellResponse (Prelude.Maybe [Prelude.Text])
+getCellResponse_cells = Lens.lens (\GetCellResponse' {cells} -> cells) (\s@GetCellResponse' {} a -> s {cells = a} :: GetCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+getCellResponse_parentReadinessScopes :: Lens.Lens' GetCellResponse (Prelude.Maybe [Prelude.Text])
+getCellResponse_parentReadinessScopes = Lens.lens (\GetCellResponse' {parentReadinessScopes} -> parentReadinessScopes) (\s@GetCellResponse' {} a -> s {parentReadinessScopes = a} :: GetCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags on the resources.
+getCellResponse_tags :: Lens.Lens' GetCellResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getCellResponse_tags = Lens.lens (\GetCellResponse' {tags} -> tags) (\s@GetCellResponse' {} a -> s {tags = a} :: GetCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getCellResponse_httpStatus :: Lens.Lens' GetCellResponse Prelude.Int
+getCellResponse_httpStatus = Lens.lens (\GetCellResponse' {httpStatus} -> httpStatus) (\s@GetCellResponse' {} a -> s {httpStatus = a} :: GetCellResponse)
+
+instance Prelude.NFData GetCellResponse where
+  rnf GetCellResponse' {..} =
+    Prelude.rnf cellArn
+      `Prelude.seq` Prelude.rnf cellName
+      `Prelude.seq` Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf parentReadinessScopes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetCellReadinessSummary.hs b/gen/Amazonka/Route53RecoveryReadiness/GetCellReadinessSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetCellReadinessSummary.hs
@@ -0,0 +1,247 @@
+{-# 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.Route53RecoveryReadiness.GetCellReadinessSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets readiness for a cell. Aggregates the readiness of all the resources
+-- that are associated with the cell into a single value.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.GetCellReadinessSummary
+  ( -- * Creating a Request
+    GetCellReadinessSummary (..),
+    newGetCellReadinessSummary,
+
+    -- * Request Lenses
+    getCellReadinessSummary_maxResults,
+    getCellReadinessSummary_nextToken,
+    getCellReadinessSummary_cellName,
+
+    -- * Destructuring the Response
+    GetCellReadinessSummaryResponse (..),
+    newGetCellReadinessSummaryResponse,
+
+    -- * Response Lenses
+    getCellReadinessSummaryResponse_nextToken,
+    getCellReadinessSummaryResponse_readiness,
+    getCellReadinessSummaryResponse_readinessChecks,
+    getCellReadinessSummaryResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetCellReadinessSummary' smart constructor.
+data GetCellReadinessSummary = GetCellReadinessSummary'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cell.
+    cellName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCellReadinessSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCellReadinessSummary_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'getCellReadinessSummary_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'cellName', 'getCellReadinessSummary_cellName' - The name of the cell.
+newGetCellReadinessSummary ::
+  -- | 'cellName'
+  Prelude.Text ->
+  GetCellReadinessSummary
+newGetCellReadinessSummary pCellName_ =
+  GetCellReadinessSummary'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      cellName = pCellName_
+    }
+
+-- | The number of objects that you want to return with this call.
+getCellReadinessSummary_maxResults :: Lens.Lens' GetCellReadinessSummary (Prelude.Maybe Prelude.Natural)
+getCellReadinessSummary_maxResults = Lens.lens (\GetCellReadinessSummary' {maxResults} -> maxResults) (\s@GetCellReadinessSummary' {} a -> s {maxResults = a} :: GetCellReadinessSummary)
+
+-- | The token that identifies which batch of results you want to see.
+getCellReadinessSummary_nextToken :: Lens.Lens' GetCellReadinessSummary (Prelude.Maybe Prelude.Text)
+getCellReadinessSummary_nextToken = Lens.lens (\GetCellReadinessSummary' {nextToken} -> nextToken) (\s@GetCellReadinessSummary' {} a -> s {nextToken = a} :: GetCellReadinessSummary)
+
+-- | The name of the cell.
+getCellReadinessSummary_cellName :: Lens.Lens' GetCellReadinessSummary Prelude.Text
+getCellReadinessSummary_cellName = Lens.lens (\GetCellReadinessSummary' {cellName} -> cellName) (\s@GetCellReadinessSummary' {} a -> s {cellName = a} :: GetCellReadinessSummary)
+
+instance Core.AWSPager GetCellReadinessSummary where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getCellReadinessSummaryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getCellReadinessSummaryResponse_readinessChecks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getCellReadinessSummary_nextToken
+          Lens..~ rs
+          Lens.^? getCellReadinessSummaryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetCellReadinessSummary where
+  type
+    AWSResponse GetCellReadinessSummary =
+      GetCellReadinessSummaryResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCellReadinessSummaryResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "readiness")
+            Prelude.<*> ( x
+                            Data..?> "readinessChecks"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCellReadinessSummary where
+  hashWithSalt _salt GetCellReadinessSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` cellName
+
+instance Prelude.NFData GetCellReadinessSummary where
+  rnf GetCellReadinessSummary' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf cellName
+
+instance Data.ToHeaders GetCellReadinessSummary where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetCellReadinessSummary where
+  toPath GetCellReadinessSummary' {..} =
+    Prelude.mconcat
+      ["/cellreadiness/", Data.toBS cellName]
+
+instance Data.ToQuery GetCellReadinessSummary where
+  toQuery GetCellReadinessSummary' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetCellReadinessSummaryResponse' smart constructor.
+data GetCellReadinessSummaryResponse = GetCellReadinessSummaryResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The readiness at a cell level.
+    readiness :: Prelude.Maybe Readiness,
+    -- | Summaries for the readiness checks that make up the cell.
+    readinessChecks :: Prelude.Maybe [ReadinessCheckSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCellReadinessSummaryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCellReadinessSummaryResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readiness', 'getCellReadinessSummaryResponse_readiness' - The readiness at a cell level.
+--
+-- 'readinessChecks', 'getCellReadinessSummaryResponse_readinessChecks' - Summaries for the readiness checks that make up the cell.
+--
+-- 'httpStatus', 'getCellReadinessSummaryResponse_httpStatus' - The response's http status code.
+newGetCellReadinessSummaryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCellReadinessSummaryResponse
+newGetCellReadinessSummaryResponse pHttpStatus_ =
+  GetCellReadinessSummaryResponse'
+    { nextToken =
+        Prelude.Nothing,
+      readiness = Prelude.Nothing,
+      readinessChecks = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results you want to see.
+getCellReadinessSummaryResponse_nextToken :: Lens.Lens' GetCellReadinessSummaryResponse (Prelude.Maybe Prelude.Text)
+getCellReadinessSummaryResponse_nextToken = Lens.lens (\GetCellReadinessSummaryResponse' {nextToken} -> nextToken) (\s@GetCellReadinessSummaryResponse' {} a -> s {nextToken = a} :: GetCellReadinessSummaryResponse)
+
+-- | The readiness at a cell level.
+getCellReadinessSummaryResponse_readiness :: Lens.Lens' GetCellReadinessSummaryResponse (Prelude.Maybe Readiness)
+getCellReadinessSummaryResponse_readiness = Lens.lens (\GetCellReadinessSummaryResponse' {readiness} -> readiness) (\s@GetCellReadinessSummaryResponse' {} a -> s {readiness = a} :: GetCellReadinessSummaryResponse)
+
+-- | Summaries for the readiness checks that make up the cell.
+getCellReadinessSummaryResponse_readinessChecks :: Lens.Lens' GetCellReadinessSummaryResponse (Prelude.Maybe [ReadinessCheckSummary])
+getCellReadinessSummaryResponse_readinessChecks = Lens.lens (\GetCellReadinessSummaryResponse' {readinessChecks} -> readinessChecks) (\s@GetCellReadinessSummaryResponse' {} a -> s {readinessChecks = a} :: GetCellReadinessSummaryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getCellReadinessSummaryResponse_httpStatus :: Lens.Lens' GetCellReadinessSummaryResponse Prelude.Int
+getCellReadinessSummaryResponse_httpStatus = Lens.lens (\GetCellReadinessSummaryResponse' {httpStatus} -> httpStatus) (\s@GetCellReadinessSummaryResponse' {} a -> s {httpStatus = a} :: GetCellReadinessSummaryResponse)
+
+instance
+  Prelude.NFData
+    GetCellReadinessSummaryResponse
+  where
+  rnf GetCellReadinessSummaryResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf readinessChecks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheck.hs b/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheck.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.Route53RecoveryReadiness.GetReadinessCheck
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets details about a readiness check.
+module Amazonka.Route53RecoveryReadiness.GetReadinessCheck
+  ( -- * Creating a Request
+    GetReadinessCheck (..),
+    newGetReadinessCheck,
+
+    -- * Request Lenses
+    getReadinessCheck_readinessCheckName,
+
+    -- * Destructuring the Response
+    GetReadinessCheckResponse (..),
+    newGetReadinessCheckResponse,
+
+    -- * Response Lenses
+    getReadinessCheckResponse_readinessCheckArn,
+    getReadinessCheckResponse_readinessCheckName,
+    getReadinessCheckResponse_resourceSet,
+    getReadinessCheckResponse_tags,
+    getReadinessCheckResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetReadinessCheck' smart constructor.
+data GetReadinessCheck = GetReadinessCheck'
+  { -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReadinessCheck' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckName', 'getReadinessCheck_readinessCheckName' - Name of a readiness check.
+newGetReadinessCheck ::
+  -- | 'readinessCheckName'
+  Prelude.Text ->
+  GetReadinessCheck
+newGetReadinessCheck pReadinessCheckName_ =
+  GetReadinessCheck'
+    { readinessCheckName =
+        pReadinessCheckName_
+    }
+
+-- | Name of a readiness check.
+getReadinessCheck_readinessCheckName :: Lens.Lens' GetReadinessCheck Prelude.Text
+getReadinessCheck_readinessCheckName = Lens.lens (\GetReadinessCheck' {readinessCheckName} -> readinessCheckName) (\s@GetReadinessCheck' {} a -> s {readinessCheckName = a} :: GetReadinessCheck)
+
+instance Core.AWSRequest GetReadinessCheck where
+  type
+    AWSResponse GetReadinessCheck =
+      GetReadinessCheckResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetReadinessCheckResponse'
+            Prelude.<$> (x Data..?> "readinessCheckArn")
+            Prelude.<*> (x Data..?> "readinessCheckName")
+            Prelude.<*> (x Data..?> "resourceSet")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetReadinessCheck where
+  hashWithSalt _salt GetReadinessCheck' {..} =
+    _salt `Prelude.hashWithSalt` readinessCheckName
+
+instance Prelude.NFData GetReadinessCheck where
+  rnf GetReadinessCheck' {..} =
+    Prelude.rnf readinessCheckName
+
+instance Data.ToHeaders GetReadinessCheck where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetReadinessCheck where
+  toPath GetReadinessCheck' {..} =
+    Prelude.mconcat
+      ["/readinesschecks/", Data.toBS readinessCheckName]
+
+instance Data.ToQuery GetReadinessCheck where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetReadinessCheckResponse' smart constructor.
+data GetReadinessCheckResponse = GetReadinessCheckResponse'
+  { -- | The Amazon Resource Name (ARN) associated with a readiness check.
+    readinessCheckArn :: Prelude.Maybe Prelude.Text,
+    -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Maybe Prelude.Text,
+    -- | Name of the resource set to be checked.
+    resourceSet :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReadinessCheckResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckArn', 'getReadinessCheckResponse_readinessCheckArn' - The Amazon Resource Name (ARN) associated with a readiness check.
+--
+-- 'readinessCheckName', 'getReadinessCheckResponse_readinessCheckName' - Name of a readiness check.
+--
+-- 'resourceSet', 'getReadinessCheckResponse_resourceSet' - Name of the resource set to be checked.
+--
+-- 'tags', 'getReadinessCheckResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'getReadinessCheckResponse_httpStatus' - The response's http status code.
+newGetReadinessCheckResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetReadinessCheckResponse
+newGetReadinessCheckResponse pHttpStatus_ =
+  GetReadinessCheckResponse'
+    { readinessCheckArn =
+        Prelude.Nothing,
+      readinessCheckName = Prelude.Nothing,
+      resourceSet = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) associated with a readiness check.
+getReadinessCheckResponse_readinessCheckArn :: Lens.Lens' GetReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+getReadinessCheckResponse_readinessCheckArn = Lens.lens (\GetReadinessCheckResponse' {readinessCheckArn} -> readinessCheckArn) (\s@GetReadinessCheckResponse' {} a -> s {readinessCheckArn = a} :: GetReadinessCheckResponse)
+
+-- | Name of a readiness check.
+getReadinessCheckResponse_readinessCheckName :: Lens.Lens' GetReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+getReadinessCheckResponse_readinessCheckName = Lens.lens (\GetReadinessCheckResponse' {readinessCheckName} -> readinessCheckName) (\s@GetReadinessCheckResponse' {} a -> s {readinessCheckName = a} :: GetReadinessCheckResponse)
+
+-- | Name of the resource set to be checked.
+getReadinessCheckResponse_resourceSet :: Lens.Lens' GetReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+getReadinessCheckResponse_resourceSet = Lens.lens (\GetReadinessCheckResponse' {resourceSet} -> resourceSet) (\s@GetReadinessCheckResponse' {} a -> s {resourceSet = a} :: GetReadinessCheckResponse)
+
+-- | Undocumented member.
+getReadinessCheckResponse_tags :: Lens.Lens' GetReadinessCheckResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getReadinessCheckResponse_tags = Lens.lens (\GetReadinessCheckResponse' {tags} -> tags) (\s@GetReadinessCheckResponse' {} a -> s {tags = a} :: GetReadinessCheckResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getReadinessCheckResponse_httpStatus :: Lens.Lens' GetReadinessCheckResponse Prelude.Int
+getReadinessCheckResponse_httpStatus = Lens.lens (\GetReadinessCheckResponse' {httpStatus} -> httpStatus) (\s@GetReadinessCheckResponse' {} a -> s {httpStatus = a} :: GetReadinessCheckResponse)
+
+instance Prelude.NFData GetReadinessCheckResponse where
+  rnf GetReadinessCheckResponse' {..} =
+    Prelude.rnf readinessCheckArn
+      `Prelude.seq` Prelude.rnf readinessCheckName
+      `Prelude.seq` Prelude.rnf resourceSet
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheckResourceStatus.hs b/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheckResourceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheckResourceStatus.hs
@@ -0,0 +1,291 @@
+{-# 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.Route53RecoveryReadiness.GetReadinessCheckResourceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets individual readiness status for a readiness check. To see the
+-- overall readiness status for a recovery group, that considers the
+-- readiness status for all the readiness checks in the recovery group, use
+-- GetRecoveryGroupReadinessSummary.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.GetReadinessCheckResourceStatus
+  ( -- * Creating a Request
+    GetReadinessCheckResourceStatus (..),
+    newGetReadinessCheckResourceStatus,
+
+    -- * Request Lenses
+    getReadinessCheckResourceStatus_maxResults,
+    getReadinessCheckResourceStatus_nextToken,
+    getReadinessCheckResourceStatus_readinessCheckName,
+    getReadinessCheckResourceStatus_resourceIdentifier,
+
+    -- * Destructuring the Response
+    GetReadinessCheckResourceStatusResponse (..),
+    newGetReadinessCheckResourceStatusResponse,
+
+    -- * Response Lenses
+    getReadinessCheckResourceStatusResponse_nextToken,
+    getReadinessCheckResourceStatusResponse_readiness,
+    getReadinessCheckResourceStatusResponse_rules,
+    getReadinessCheckResourceStatusResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetReadinessCheckResourceStatus' smart constructor.
+data GetReadinessCheckResourceStatus = GetReadinessCheckResourceStatus'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Text,
+    -- | The resource identifier, which is the Amazon Resource Name (ARN) or the
+    -- identifier generated for the resource by Application Recovery Controller
+    -- (for example, for a DNS target resource).
+    resourceIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReadinessCheckResourceStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getReadinessCheckResourceStatus_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'getReadinessCheckResourceStatus_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readinessCheckName', 'getReadinessCheckResourceStatus_readinessCheckName' - Name of a readiness check.
+--
+-- 'resourceIdentifier', 'getReadinessCheckResourceStatus_resourceIdentifier' - The resource identifier, which is the Amazon Resource Name (ARN) or the
+-- identifier generated for the resource by Application Recovery Controller
+-- (for example, for a DNS target resource).
+newGetReadinessCheckResourceStatus ::
+  -- | 'readinessCheckName'
+  Prelude.Text ->
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  GetReadinessCheckResourceStatus
+newGetReadinessCheckResourceStatus
+  pReadinessCheckName_
+  pResourceIdentifier_ =
+    GetReadinessCheckResourceStatus'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        readinessCheckName = pReadinessCheckName_,
+        resourceIdentifier = pResourceIdentifier_
+      }
+
+-- | The number of objects that you want to return with this call.
+getReadinessCheckResourceStatus_maxResults :: Lens.Lens' GetReadinessCheckResourceStatus (Prelude.Maybe Prelude.Natural)
+getReadinessCheckResourceStatus_maxResults = Lens.lens (\GetReadinessCheckResourceStatus' {maxResults} -> maxResults) (\s@GetReadinessCheckResourceStatus' {} a -> s {maxResults = a} :: GetReadinessCheckResourceStatus)
+
+-- | The token that identifies which batch of results you want to see.
+getReadinessCheckResourceStatus_nextToken :: Lens.Lens' GetReadinessCheckResourceStatus (Prelude.Maybe Prelude.Text)
+getReadinessCheckResourceStatus_nextToken = Lens.lens (\GetReadinessCheckResourceStatus' {nextToken} -> nextToken) (\s@GetReadinessCheckResourceStatus' {} a -> s {nextToken = a} :: GetReadinessCheckResourceStatus)
+
+-- | Name of a readiness check.
+getReadinessCheckResourceStatus_readinessCheckName :: Lens.Lens' GetReadinessCheckResourceStatus Prelude.Text
+getReadinessCheckResourceStatus_readinessCheckName = Lens.lens (\GetReadinessCheckResourceStatus' {readinessCheckName} -> readinessCheckName) (\s@GetReadinessCheckResourceStatus' {} a -> s {readinessCheckName = a} :: GetReadinessCheckResourceStatus)
+
+-- | The resource identifier, which is the Amazon Resource Name (ARN) or the
+-- identifier generated for the resource by Application Recovery Controller
+-- (for example, for a DNS target resource).
+getReadinessCheckResourceStatus_resourceIdentifier :: Lens.Lens' GetReadinessCheckResourceStatus Prelude.Text
+getReadinessCheckResourceStatus_resourceIdentifier = Lens.lens (\GetReadinessCheckResourceStatus' {resourceIdentifier} -> resourceIdentifier) (\s@GetReadinessCheckResourceStatus' {} a -> s {resourceIdentifier = a} :: GetReadinessCheckResourceStatus)
+
+instance
+  Core.AWSPager
+    GetReadinessCheckResourceStatus
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getReadinessCheckResourceStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getReadinessCheckResourceStatusResponse_rules
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getReadinessCheckResourceStatus_nextToken
+          Lens..~ rs
+          Lens.^? getReadinessCheckResourceStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetReadinessCheckResourceStatus
+  where
+  type
+    AWSResponse GetReadinessCheckResourceStatus =
+      GetReadinessCheckResourceStatusResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetReadinessCheckResourceStatusResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "readiness")
+            Prelude.<*> (x Data..?> "rules" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetReadinessCheckResourceStatus
+  where
+  hashWithSalt
+    _salt
+    GetReadinessCheckResourceStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` readinessCheckName
+        `Prelude.hashWithSalt` resourceIdentifier
+
+instance
+  Prelude.NFData
+    GetReadinessCheckResourceStatus
+  where
+  rnf GetReadinessCheckResourceStatus' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readinessCheckName
+      `Prelude.seq` Prelude.rnf resourceIdentifier
+
+instance
+  Data.ToHeaders
+    GetReadinessCheckResourceStatus
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetReadinessCheckResourceStatus where
+  toPath GetReadinessCheckResourceStatus' {..} =
+    Prelude.mconcat
+      [ "/readinesschecks/",
+        Data.toBS readinessCheckName,
+        "/resource/",
+        Data.toBS resourceIdentifier,
+        "/status"
+      ]
+
+instance Data.ToQuery GetReadinessCheckResourceStatus where
+  toQuery GetReadinessCheckResourceStatus' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetReadinessCheckResourceStatusResponse' smart constructor.
+data GetReadinessCheckResourceStatusResponse = GetReadinessCheckResourceStatusResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The readiness at a rule level.
+    readiness :: Prelude.Maybe Readiness,
+    -- | Details of the rule\'s results.
+    rules :: Prelude.Maybe [RuleResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReadinessCheckResourceStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getReadinessCheckResourceStatusResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readiness', 'getReadinessCheckResourceStatusResponse_readiness' - The readiness at a rule level.
+--
+-- 'rules', 'getReadinessCheckResourceStatusResponse_rules' - Details of the rule\'s results.
+--
+-- 'httpStatus', 'getReadinessCheckResourceStatusResponse_httpStatus' - The response's http status code.
+newGetReadinessCheckResourceStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetReadinessCheckResourceStatusResponse
+newGetReadinessCheckResourceStatusResponse
+  pHttpStatus_ =
+    GetReadinessCheckResourceStatusResponse'
+      { nextToken =
+          Prelude.Nothing,
+        readiness = Prelude.Nothing,
+        rules = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token that identifies which batch of results you want to see.
+getReadinessCheckResourceStatusResponse_nextToken :: Lens.Lens' GetReadinessCheckResourceStatusResponse (Prelude.Maybe Prelude.Text)
+getReadinessCheckResourceStatusResponse_nextToken = Lens.lens (\GetReadinessCheckResourceStatusResponse' {nextToken} -> nextToken) (\s@GetReadinessCheckResourceStatusResponse' {} a -> s {nextToken = a} :: GetReadinessCheckResourceStatusResponse)
+
+-- | The readiness at a rule level.
+getReadinessCheckResourceStatusResponse_readiness :: Lens.Lens' GetReadinessCheckResourceStatusResponse (Prelude.Maybe Readiness)
+getReadinessCheckResourceStatusResponse_readiness = Lens.lens (\GetReadinessCheckResourceStatusResponse' {readiness} -> readiness) (\s@GetReadinessCheckResourceStatusResponse' {} a -> s {readiness = a} :: GetReadinessCheckResourceStatusResponse)
+
+-- | Details of the rule\'s results.
+getReadinessCheckResourceStatusResponse_rules :: Lens.Lens' GetReadinessCheckResourceStatusResponse (Prelude.Maybe [RuleResult])
+getReadinessCheckResourceStatusResponse_rules = Lens.lens (\GetReadinessCheckResourceStatusResponse' {rules} -> rules) (\s@GetReadinessCheckResourceStatusResponse' {} a -> s {rules = a} :: GetReadinessCheckResourceStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getReadinessCheckResourceStatusResponse_httpStatus :: Lens.Lens' GetReadinessCheckResourceStatusResponse Prelude.Int
+getReadinessCheckResourceStatusResponse_httpStatus = Lens.lens (\GetReadinessCheckResourceStatusResponse' {httpStatus} -> httpStatus) (\s@GetReadinessCheckResourceStatusResponse' {} a -> s {httpStatus = a} :: GetReadinessCheckResourceStatusResponse)
+
+instance
+  Prelude.NFData
+    GetReadinessCheckResourceStatusResponse
+  where
+  rnf GetReadinessCheckResourceStatusResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf rules
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheckStatus.hs b/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheckStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetReadinessCheckStatus.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.Route53RecoveryReadiness.GetReadinessCheckStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the readiness status for an individual readiness check. To see the
+-- overall readiness status for a recovery group, that considers the
+-- readiness status for all the readiness checks in a recovery group, use
+-- GetRecoveryGroupReadinessSummary.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.GetReadinessCheckStatus
+  ( -- * Creating a Request
+    GetReadinessCheckStatus (..),
+    newGetReadinessCheckStatus,
+
+    -- * Request Lenses
+    getReadinessCheckStatus_maxResults,
+    getReadinessCheckStatus_nextToken,
+    getReadinessCheckStatus_readinessCheckName,
+
+    -- * Destructuring the Response
+    GetReadinessCheckStatusResponse (..),
+    newGetReadinessCheckStatusResponse,
+
+    -- * Response Lenses
+    getReadinessCheckStatusResponse_messages,
+    getReadinessCheckStatusResponse_nextToken,
+    getReadinessCheckStatusResponse_readiness,
+    getReadinessCheckStatusResponse_resources,
+    getReadinessCheckStatusResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetReadinessCheckStatus' smart constructor.
+data GetReadinessCheckStatus = GetReadinessCheckStatus'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReadinessCheckStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getReadinessCheckStatus_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'getReadinessCheckStatus_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readinessCheckName', 'getReadinessCheckStatus_readinessCheckName' - Name of a readiness check.
+newGetReadinessCheckStatus ::
+  -- | 'readinessCheckName'
+  Prelude.Text ->
+  GetReadinessCheckStatus
+newGetReadinessCheckStatus pReadinessCheckName_ =
+  GetReadinessCheckStatus'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      readinessCheckName = pReadinessCheckName_
+    }
+
+-- | The number of objects that you want to return with this call.
+getReadinessCheckStatus_maxResults :: Lens.Lens' GetReadinessCheckStatus (Prelude.Maybe Prelude.Natural)
+getReadinessCheckStatus_maxResults = Lens.lens (\GetReadinessCheckStatus' {maxResults} -> maxResults) (\s@GetReadinessCheckStatus' {} a -> s {maxResults = a} :: GetReadinessCheckStatus)
+
+-- | The token that identifies which batch of results you want to see.
+getReadinessCheckStatus_nextToken :: Lens.Lens' GetReadinessCheckStatus (Prelude.Maybe Prelude.Text)
+getReadinessCheckStatus_nextToken = Lens.lens (\GetReadinessCheckStatus' {nextToken} -> nextToken) (\s@GetReadinessCheckStatus' {} a -> s {nextToken = a} :: GetReadinessCheckStatus)
+
+-- | Name of a readiness check.
+getReadinessCheckStatus_readinessCheckName :: Lens.Lens' GetReadinessCheckStatus Prelude.Text
+getReadinessCheckStatus_readinessCheckName = Lens.lens (\GetReadinessCheckStatus' {readinessCheckName} -> readinessCheckName) (\s@GetReadinessCheckStatus' {} a -> s {readinessCheckName = a} :: GetReadinessCheckStatus)
+
+instance Core.AWSPager GetReadinessCheckStatus where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getReadinessCheckStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getReadinessCheckStatusResponse_resources
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getReadinessCheckStatus_nextToken
+          Lens..~ rs
+          Lens.^? getReadinessCheckStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetReadinessCheckStatus where
+  type
+    AWSResponse GetReadinessCheckStatus =
+      GetReadinessCheckStatusResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetReadinessCheckStatusResponse'
+            Prelude.<$> (x Data..?> "messages" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "readiness")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetReadinessCheckStatus where
+  hashWithSalt _salt GetReadinessCheckStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` readinessCheckName
+
+instance Prelude.NFData GetReadinessCheckStatus where
+  rnf GetReadinessCheckStatus' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readinessCheckName
+
+instance Data.ToHeaders GetReadinessCheckStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetReadinessCheckStatus where
+  toPath GetReadinessCheckStatus' {..} =
+    Prelude.mconcat
+      [ "/readinesschecks/",
+        Data.toBS readinessCheckName,
+        "/status"
+      ]
+
+instance Data.ToQuery GetReadinessCheckStatus where
+  toQuery GetReadinessCheckStatus' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetReadinessCheckStatusResponse' smart constructor.
+data GetReadinessCheckStatusResponse = GetReadinessCheckStatusResponse'
+  { -- | Top level messages for readiness check status
+    messages :: Prelude.Maybe [Message],
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The readiness at rule level.
+    readiness :: Prelude.Maybe Readiness,
+    -- | Summary of the readiness of resources.
+    resources :: Prelude.Maybe [ResourceResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReadinessCheckStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'messages', 'getReadinessCheckStatusResponse_messages' - Top level messages for readiness check status
+--
+-- 'nextToken', 'getReadinessCheckStatusResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readiness', 'getReadinessCheckStatusResponse_readiness' - The readiness at rule level.
+--
+-- 'resources', 'getReadinessCheckStatusResponse_resources' - Summary of the readiness of resources.
+--
+-- 'httpStatus', 'getReadinessCheckStatusResponse_httpStatus' - The response's http status code.
+newGetReadinessCheckStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetReadinessCheckStatusResponse
+newGetReadinessCheckStatusResponse pHttpStatus_ =
+  GetReadinessCheckStatusResponse'
+    { messages =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      readiness = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Top level messages for readiness check status
+getReadinessCheckStatusResponse_messages :: Lens.Lens' GetReadinessCheckStatusResponse (Prelude.Maybe [Message])
+getReadinessCheckStatusResponse_messages = Lens.lens (\GetReadinessCheckStatusResponse' {messages} -> messages) (\s@GetReadinessCheckStatusResponse' {} a -> s {messages = a} :: GetReadinessCheckStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that identifies which batch of results you want to see.
+getReadinessCheckStatusResponse_nextToken :: Lens.Lens' GetReadinessCheckStatusResponse (Prelude.Maybe Prelude.Text)
+getReadinessCheckStatusResponse_nextToken = Lens.lens (\GetReadinessCheckStatusResponse' {nextToken} -> nextToken) (\s@GetReadinessCheckStatusResponse' {} a -> s {nextToken = a} :: GetReadinessCheckStatusResponse)
+
+-- | The readiness at rule level.
+getReadinessCheckStatusResponse_readiness :: Lens.Lens' GetReadinessCheckStatusResponse (Prelude.Maybe Readiness)
+getReadinessCheckStatusResponse_readiness = Lens.lens (\GetReadinessCheckStatusResponse' {readiness} -> readiness) (\s@GetReadinessCheckStatusResponse' {} a -> s {readiness = a} :: GetReadinessCheckStatusResponse)
+
+-- | Summary of the readiness of resources.
+getReadinessCheckStatusResponse_resources :: Lens.Lens' GetReadinessCheckStatusResponse (Prelude.Maybe [ResourceResult])
+getReadinessCheckStatusResponse_resources = Lens.lens (\GetReadinessCheckStatusResponse' {resources} -> resources) (\s@GetReadinessCheckStatusResponse' {} a -> s {resources = a} :: GetReadinessCheckStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getReadinessCheckStatusResponse_httpStatus :: Lens.Lens' GetReadinessCheckStatusResponse Prelude.Int
+getReadinessCheckStatusResponse_httpStatus = Lens.lens (\GetReadinessCheckStatusResponse' {httpStatus} -> httpStatus) (\s@GetReadinessCheckStatusResponse' {} a -> s {httpStatus = a} :: GetReadinessCheckStatusResponse)
+
+instance
+  Prelude.NFData
+    GetReadinessCheckStatusResponse
+  where
+  rnf GetReadinessCheckStatusResponse' {..} =
+    Prelude.rnf messages
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetRecoveryGroup.hs b/gen/Amazonka/Route53RecoveryReadiness/GetRecoveryGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetRecoveryGroup.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.Route53RecoveryReadiness.GetRecoveryGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets details about a recovery group, including a list of the cells that
+-- are included in it.
+module Amazonka.Route53RecoveryReadiness.GetRecoveryGroup
+  ( -- * Creating a Request
+    GetRecoveryGroup (..),
+    newGetRecoveryGroup,
+
+    -- * Request Lenses
+    getRecoveryGroup_recoveryGroupName,
+
+    -- * Destructuring the Response
+    GetRecoveryGroupResponse (..),
+    newGetRecoveryGroupResponse,
+
+    -- * Response Lenses
+    getRecoveryGroupResponse_cells,
+    getRecoveryGroupResponse_recoveryGroupArn,
+    getRecoveryGroupResponse_recoveryGroupName,
+    getRecoveryGroupResponse_tags,
+    getRecoveryGroupResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetRecoveryGroup' smart constructor.
+data GetRecoveryGroup = GetRecoveryGroup'
+  { -- | The name of a recovery group.
+    recoveryGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRecoveryGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryGroupName', 'getRecoveryGroup_recoveryGroupName' - The name of a recovery group.
+newGetRecoveryGroup ::
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  GetRecoveryGroup
+newGetRecoveryGroup pRecoveryGroupName_ =
+  GetRecoveryGroup'
+    { recoveryGroupName =
+        pRecoveryGroupName_
+    }
+
+-- | The name of a recovery group.
+getRecoveryGroup_recoveryGroupName :: Lens.Lens' GetRecoveryGroup Prelude.Text
+getRecoveryGroup_recoveryGroupName = Lens.lens (\GetRecoveryGroup' {recoveryGroupName} -> recoveryGroupName) (\s@GetRecoveryGroup' {} a -> s {recoveryGroupName = a} :: GetRecoveryGroup)
+
+instance Core.AWSRequest GetRecoveryGroup where
+  type
+    AWSResponse GetRecoveryGroup =
+      GetRecoveryGroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRecoveryGroupResponse'
+            Prelude.<$> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "recoveryGroupArn")
+            Prelude.<*> (x Data..?> "recoveryGroupName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRecoveryGroup where
+  hashWithSalt _salt GetRecoveryGroup' {..} =
+    _salt `Prelude.hashWithSalt` recoveryGroupName
+
+instance Prelude.NFData GetRecoveryGroup where
+  rnf GetRecoveryGroup' {..} =
+    Prelude.rnf recoveryGroupName
+
+instance Data.ToHeaders GetRecoveryGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRecoveryGroup where
+  toPath GetRecoveryGroup' {..} =
+    Prelude.mconcat
+      ["/recoverygroups/", Data.toBS recoveryGroupName]
+
+instance Data.ToQuery GetRecoveryGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRecoveryGroupResponse' smart constructor.
+data GetRecoveryGroupResponse = GetRecoveryGroupResponse'
+  { -- | A list of a cell\'s Amazon Resource Names (ARNs).
+    cells :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the recovery group.
+    recoveryGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recovery group.
+    recoveryGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with the recovery group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRecoveryGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'getRecoveryGroupResponse_cells' - A list of a cell\'s Amazon Resource Names (ARNs).
+--
+-- 'recoveryGroupArn', 'getRecoveryGroupResponse_recoveryGroupArn' - The Amazon Resource Name (ARN) for the recovery group.
+--
+-- 'recoveryGroupName', 'getRecoveryGroupResponse_recoveryGroupName' - The name of the recovery group.
+--
+-- 'tags', 'getRecoveryGroupResponse_tags' - The tags associated with the recovery group.
+--
+-- 'httpStatus', 'getRecoveryGroupResponse_httpStatus' - The response's http status code.
+newGetRecoveryGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRecoveryGroupResponse
+newGetRecoveryGroupResponse pHttpStatus_ =
+  GetRecoveryGroupResponse'
+    { cells = Prelude.Nothing,
+      recoveryGroupArn = Prelude.Nothing,
+      recoveryGroupName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of a cell\'s Amazon Resource Names (ARNs).
+getRecoveryGroupResponse_cells :: Lens.Lens' GetRecoveryGroupResponse (Prelude.Maybe [Prelude.Text])
+getRecoveryGroupResponse_cells = Lens.lens (\GetRecoveryGroupResponse' {cells} -> cells) (\s@GetRecoveryGroupResponse' {} a -> s {cells = a} :: GetRecoveryGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the recovery group.
+getRecoveryGroupResponse_recoveryGroupArn :: Lens.Lens' GetRecoveryGroupResponse (Prelude.Maybe Prelude.Text)
+getRecoveryGroupResponse_recoveryGroupArn = Lens.lens (\GetRecoveryGroupResponse' {recoveryGroupArn} -> recoveryGroupArn) (\s@GetRecoveryGroupResponse' {} a -> s {recoveryGroupArn = a} :: GetRecoveryGroupResponse)
+
+-- | The name of the recovery group.
+getRecoveryGroupResponse_recoveryGroupName :: Lens.Lens' GetRecoveryGroupResponse (Prelude.Maybe Prelude.Text)
+getRecoveryGroupResponse_recoveryGroupName = Lens.lens (\GetRecoveryGroupResponse' {recoveryGroupName} -> recoveryGroupName) (\s@GetRecoveryGroupResponse' {} a -> s {recoveryGroupName = a} :: GetRecoveryGroupResponse)
+
+-- | The tags associated with the recovery group.
+getRecoveryGroupResponse_tags :: Lens.Lens' GetRecoveryGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getRecoveryGroupResponse_tags = Lens.lens (\GetRecoveryGroupResponse' {tags} -> tags) (\s@GetRecoveryGroupResponse' {} a -> s {tags = a} :: GetRecoveryGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getRecoveryGroupResponse_httpStatus :: Lens.Lens' GetRecoveryGroupResponse Prelude.Int
+getRecoveryGroupResponse_httpStatus = Lens.lens (\GetRecoveryGroupResponse' {httpStatus} -> httpStatus) (\s@GetRecoveryGroupResponse' {} a -> s {httpStatus = a} :: GetRecoveryGroupResponse)
+
+instance Prelude.NFData GetRecoveryGroupResponse where
+  rnf GetRecoveryGroupResponse' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf recoveryGroupArn
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetRecoveryGroupReadinessSummary.hs b/gen/Amazonka/Route53RecoveryReadiness/GetRecoveryGroupReadinessSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetRecoveryGroupReadinessSummary.hs
@@ -0,0 +1,272 @@
+{-# 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.Route53RecoveryReadiness.GetRecoveryGroupReadinessSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays a summary of information about a recovery group\'s readiness
+-- status. Includes the readiness checks for resources in the recovery
+-- group and the readiness status of each one.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.GetRecoveryGroupReadinessSummary
+  ( -- * Creating a Request
+    GetRecoveryGroupReadinessSummary (..),
+    newGetRecoveryGroupReadinessSummary,
+
+    -- * Request Lenses
+    getRecoveryGroupReadinessSummary_maxResults,
+    getRecoveryGroupReadinessSummary_nextToken,
+    getRecoveryGroupReadinessSummary_recoveryGroupName,
+
+    -- * Destructuring the Response
+    GetRecoveryGroupReadinessSummaryResponse (..),
+    newGetRecoveryGroupReadinessSummaryResponse,
+
+    -- * Response Lenses
+    getRecoveryGroupReadinessSummaryResponse_nextToken,
+    getRecoveryGroupReadinessSummaryResponse_readiness,
+    getRecoveryGroupReadinessSummaryResponse_readinessChecks,
+    getRecoveryGroupReadinessSummaryResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetRecoveryGroupReadinessSummary' smart constructor.
+data GetRecoveryGroupReadinessSummary = GetRecoveryGroupReadinessSummary'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of a recovery group.
+    recoveryGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRecoveryGroupReadinessSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRecoveryGroupReadinessSummary_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'getRecoveryGroupReadinessSummary_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'recoveryGroupName', 'getRecoveryGroupReadinessSummary_recoveryGroupName' - The name of a recovery group.
+newGetRecoveryGroupReadinessSummary ::
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  GetRecoveryGroupReadinessSummary
+newGetRecoveryGroupReadinessSummary
+  pRecoveryGroupName_ =
+    GetRecoveryGroupReadinessSummary'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        recoveryGroupName = pRecoveryGroupName_
+      }
+
+-- | The number of objects that you want to return with this call.
+getRecoveryGroupReadinessSummary_maxResults :: Lens.Lens' GetRecoveryGroupReadinessSummary (Prelude.Maybe Prelude.Natural)
+getRecoveryGroupReadinessSummary_maxResults = Lens.lens (\GetRecoveryGroupReadinessSummary' {maxResults} -> maxResults) (\s@GetRecoveryGroupReadinessSummary' {} a -> s {maxResults = a} :: GetRecoveryGroupReadinessSummary)
+
+-- | The token that identifies which batch of results you want to see.
+getRecoveryGroupReadinessSummary_nextToken :: Lens.Lens' GetRecoveryGroupReadinessSummary (Prelude.Maybe Prelude.Text)
+getRecoveryGroupReadinessSummary_nextToken = Lens.lens (\GetRecoveryGroupReadinessSummary' {nextToken} -> nextToken) (\s@GetRecoveryGroupReadinessSummary' {} a -> s {nextToken = a} :: GetRecoveryGroupReadinessSummary)
+
+-- | The name of a recovery group.
+getRecoveryGroupReadinessSummary_recoveryGroupName :: Lens.Lens' GetRecoveryGroupReadinessSummary Prelude.Text
+getRecoveryGroupReadinessSummary_recoveryGroupName = Lens.lens (\GetRecoveryGroupReadinessSummary' {recoveryGroupName} -> recoveryGroupName) (\s@GetRecoveryGroupReadinessSummary' {} a -> s {recoveryGroupName = a} :: GetRecoveryGroupReadinessSummary)
+
+instance
+  Core.AWSPager
+    GetRecoveryGroupReadinessSummary
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getRecoveryGroupReadinessSummaryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getRecoveryGroupReadinessSummaryResponse_readinessChecks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getRecoveryGroupReadinessSummary_nextToken
+          Lens..~ rs
+          Lens.^? getRecoveryGroupReadinessSummaryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetRecoveryGroupReadinessSummary
+  where
+  type
+    AWSResponse GetRecoveryGroupReadinessSummary =
+      GetRecoveryGroupReadinessSummaryResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRecoveryGroupReadinessSummaryResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "readiness")
+            Prelude.<*> ( x
+                            Data..?> "readinessChecks"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetRecoveryGroupReadinessSummary
+  where
+  hashWithSalt
+    _salt
+    GetRecoveryGroupReadinessSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` recoveryGroupName
+
+instance
+  Prelude.NFData
+    GetRecoveryGroupReadinessSummary
+  where
+  rnf GetRecoveryGroupReadinessSummary' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+
+instance
+  Data.ToHeaders
+    GetRecoveryGroupReadinessSummary
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRecoveryGroupReadinessSummary where
+  toPath GetRecoveryGroupReadinessSummary' {..} =
+    Prelude.mconcat
+      [ "/recoverygroupreadiness/",
+        Data.toBS recoveryGroupName
+      ]
+
+instance
+  Data.ToQuery
+    GetRecoveryGroupReadinessSummary
+  where
+  toQuery GetRecoveryGroupReadinessSummary' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetRecoveryGroupReadinessSummaryResponse' smart constructor.
+data GetRecoveryGroupReadinessSummaryResponse = GetRecoveryGroupReadinessSummaryResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The readiness status at a recovery group level.
+    readiness :: Prelude.Maybe Readiness,
+    -- | Summaries of the readiness checks for the recovery group.
+    readinessChecks :: Prelude.Maybe [ReadinessCheckSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRecoveryGroupReadinessSummaryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRecoveryGroupReadinessSummaryResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readiness', 'getRecoveryGroupReadinessSummaryResponse_readiness' - The readiness status at a recovery group level.
+--
+-- 'readinessChecks', 'getRecoveryGroupReadinessSummaryResponse_readinessChecks' - Summaries of the readiness checks for the recovery group.
+--
+-- 'httpStatus', 'getRecoveryGroupReadinessSummaryResponse_httpStatus' - The response's http status code.
+newGetRecoveryGroupReadinessSummaryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRecoveryGroupReadinessSummaryResponse
+newGetRecoveryGroupReadinessSummaryResponse
+  pHttpStatus_ =
+    GetRecoveryGroupReadinessSummaryResponse'
+      { nextToken =
+          Prelude.Nothing,
+        readiness = Prelude.Nothing,
+        readinessChecks = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token that identifies which batch of results you want to see.
+getRecoveryGroupReadinessSummaryResponse_nextToken :: Lens.Lens' GetRecoveryGroupReadinessSummaryResponse (Prelude.Maybe Prelude.Text)
+getRecoveryGroupReadinessSummaryResponse_nextToken = Lens.lens (\GetRecoveryGroupReadinessSummaryResponse' {nextToken} -> nextToken) (\s@GetRecoveryGroupReadinessSummaryResponse' {} a -> s {nextToken = a} :: GetRecoveryGroupReadinessSummaryResponse)
+
+-- | The readiness status at a recovery group level.
+getRecoveryGroupReadinessSummaryResponse_readiness :: Lens.Lens' GetRecoveryGroupReadinessSummaryResponse (Prelude.Maybe Readiness)
+getRecoveryGroupReadinessSummaryResponse_readiness = Lens.lens (\GetRecoveryGroupReadinessSummaryResponse' {readiness} -> readiness) (\s@GetRecoveryGroupReadinessSummaryResponse' {} a -> s {readiness = a} :: GetRecoveryGroupReadinessSummaryResponse)
+
+-- | Summaries of the readiness checks for the recovery group.
+getRecoveryGroupReadinessSummaryResponse_readinessChecks :: Lens.Lens' GetRecoveryGroupReadinessSummaryResponse (Prelude.Maybe [ReadinessCheckSummary])
+getRecoveryGroupReadinessSummaryResponse_readinessChecks = Lens.lens (\GetRecoveryGroupReadinessSummaryResponse' {readinessChecks} -> readinessChecks) (\s@GetRecoveryGroupReadinessSummaryResponse' {} a -> s {readinessChecks = a} :: GetRecoveryGroupReadinessSummaryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getRecoveryGroupReadinessSummaryResponse_httpStatus :: Lens.Lens' GetRecoveryGroupReadinessSummaryResponse Prelude.Int
+getRecoveryGroupReadinessSummaryResponse_httpStatus = Lens.lens (\GetRecoveryGroupReadinessSummaryResponse' {httpStatus} -> httpStatus) (\s@GetRecoveryGroupReadinessSummaryResponse' {} a -> s {httpStatus = a} :: GetRecoveryGroupReadinessSummaryResponse)
+
+instance
+  Prelude.NFData
+    GetRecoveryGroupReadinessSummaryResponse
+  where
+  rnf GetRecoveryGroupReadinessSummaryResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf readinessChecks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/GetResourceSet.hs b/gen/Amazonka/Route53RecoveryReadiness/GetResourceSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/GetResourceSet.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.Route53RecoveryReadiness.GetResourceSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the details about a resource set, including a list of the
+-- resources in the set.
+module Amazonka.Route53RecoveryReadiness.GetResourceSet
+  ( -- * Creating a Request
+    GetResourceSet (..),
+    newGetResourceSet,
+
+    -- * Request Lenses
+    getResourceSet_resourceSetName,
+
+    -- * Destructuring the Response
+    GetResourceSetResponse (..),
+    newGetResourceSetResponse,
+
+    -- * Response Lenses
+    getResourceSetResponse_resourceSetArn,
+    getResourceSetResponse_resourceSetName,
+    getResourceSetResponse_resourceSetType,
+    getResourceSetResponse_resources,
+    getResourceSetResponse_tags,
+    getResourceSetResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newGetResourceSet' smart constructor.
+data GetResourceSet = GetResourceSet'
+  { -- | Name of a resource set.
+    resourceSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceSetName', 'getResourceSet_resourceSetName' - Name of a resource set.
+newGetResourceSet ::
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  GetResourceSet
+newGetResourceSet pResourceSetName_ =
+  GetResourceSet'
+    { resourceSetName =
+        pResourceSetName_
+    }
+
+-- | Name of a resource set.
+getResourceSet_resourceSetName :: Lens.Lens' GetResourceSet Prelude.Text
+getResourceSet_resourceSetName = Lens.lens (\GetResourceSet' {resourceSetName} -> resourceSetName) (\s@GetResourceSet' {} a -> s {resourceSetName = a} :: GetResourceSet)
+
+instance Core.AWSRequest GetResourceSet where
+  type
+    AWSResponse GetResourceSet =
+      GetResourceSetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetResourceSetResponse'
+            Prelude.<$> (x Data..?> "resourceSetArn")
+            Prelude.<*> (x Data..?> "resourceSetName")
+            Prelude.<*> (x Data..?> "resourceSetType")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetResourceSet where
+  hashWithSalt _salt GetResourceSet' {..} =
+    _salt `Prelude.hashWithSalt` resourceSetName
+
+instance Prelude.NFData GetResourceSet where
+  rnf GetResourceSet' {..} = Prelude.rnf resourceSetName
+
+instance Data.ToHeaders GetResourceSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetResourceSet where
+  toPath GetResourceSet' {..} =
+    Prelude.mconcat
+      ["/resourcesets/", Data.toBS resourceSetName]
+
+instance Data.ToQuery GetResourceSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetResourceSetResponse' smart constructor.
+data GetResourceSetResponse = GetResourceSetResponse'
+  { -- | The Amazon Resource Name (ARN) for the resource set.
+    resourceSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource set.
+    resourceSetName :: Prelude.Maybe Prelude.Text,
+    -- | The resource type of the resources in the resource set. Enter one of the
+    -- following values for resource type:
+    --
+    -- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+    -- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+    -- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+    -- AWS::ElasticLoadBalancing::LoadBalancer,
+    -- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+    -- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+    -- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+    -- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+    -- AWS::Route53RecoveryReadiness::DNSTargetResource
+    resourceSetType :: Prelude.Maybe Prelude.Text,
+    -- | A list of resource objects.
+    resources :: Prelude.Maybe [Resource],
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceSetArn', 'getResourceSetResponse_resourceSetArn' - The Amazon Resource Name (ARN) for the resource set.
+--
+-- 'resourceSetName', 'getResourceSetResponse_resourceSetName' - The name of the resource set.
+--
+-- 'resourceSetType', 'getResourceSetResponse_resourceSetType' - The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+--
+-- 'resources', 'getResourceSetResponse_resources' - A list of resource objects.
+--
+-- 'tags', 'getResourceSetResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'getResourceSetResponse_httpStatus' - The response's http status code.
+newGetResourceSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourceSetResponse
+newGetResourceSetResponse pHttpStatus_ =
+  GetResourceSetResponse'
+    { resourceSetArn =
+        Prelude.Nothing,
+      resourceSetName = Prelude.Nothing,
+      resourceSetType = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the resource set.
+getResourceSetResponse_resourceSetArn :: Lens.Lens' GetResourceSetResponse (Prelude.Maybe Prelude.Text)
+getResourceSetResponse_resourceSetArn = Lens.lens (\GetResourceSetResponse' {resourceSetArn} -> resourceSetArn) (\s@GetResourceSetResponse' {} a -> s {resourceSetArn = a} :: GetResourceSetResponse)
+
+-- | The name of the resource set.
+getResourceSetResponse_resourceSetName :: Lens.Lens' GetResourceSetResponse (Prelude.Maybe Prelude.Text)
+getResourceSetResponse_resourceSetName = Lens.lens (\GetResourceSetResponse' {resourceSetName} -> resourceSetName) (\s@GetResourceSetResponse' {} a -> s {resourceSetName = a} :: GetResourceSetResponse)
+
+-- | The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+getResourceSetResponse_resourceSetType :: Lens.Lens' GetResourceSetResponse (Prelude.Maybe Prelude.Text)
+getResourceSetResponse_resourceSetType = Lens.lens (\GetResourceSetResponse' {resourceSetType} -> resourceSetType) (\s@GetResourceSetResponse' {} a -> s {resourceSetType = a} :: GetResourceSetResponse)
+
+-- | A list of resource objects.
+getResourceSetResponse_resources :: Lens.Lens' GetResourceSetResponse (Prelude.Maybe [Resource])
+getResourceSetResponse_resources = Lens.lens (\GetResourceSetResponse' {resources} -> resources) (\s@GetResourceSetResponse' {} a -> s {resources = a} :: GetResourceSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+getResourceSetResponse_tags :: Lens.Lens' GetResourceSetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getResourceSetResponse_tags = Lens.lens (\GetResourceSetResponse' {tags} -> tags) (\s@GetResourceSetResponse' {} a -> s {tags = a} :: GetResourceSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getResourceSetResponse_httpStatus :: Lens.Lens' GetResourceSetResponse Prelude.Int
+getResourceSetResponse_httpStatus = Lens.lens (\GetResourceSetResponse' {httpStatus} -> httpStatus) (\s@GetResourceSetResponse' {} a -> s {httpStatus = a} :: GetResourceSetResponse)
+
+instance Prelude.NFData GetResourceSetResponse where
+  rnf GetResourceSetResponse' {..} =
+    Prelude.rnf resourceSetArn
+      `Prelude.seq` Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf resourceSetType
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Lens.hs b/gen/Amazonka/Route53RecoveryReadiness/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Lens.hs
@@ -0,0 +1,385 @@
+{-# 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.Route53RecoveryReadiness.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.Route53RecoveryReadiness.Lens
+  ( -- * Operations
+
+    -- ** CreateCell
+    createCell_cells,
+    createCell_tags,
+    createCell_cellName,
+    createCellResponse_cellArn,
+    createCellResponse_cellName,
+    createCellResponse_cells,
+    createCellResponse_parentReadinessScopes,
+    createCellResponse_tags,
+    createCellResponse_httpStatus,
+
+    -- ** CreateCrossAccountAuthorization
+    createCrossAccountAuthorization_crossAccountAuthorization,
+    createCrossAccountAuthorizationResponse_crossAccountAuthorization,
+    createCrossAccountAuthorizationResponse_httpStatus,
+
+    -- ** CreateReadinessCheck
+    createReadinessCheck_tags,
+    createReadinessCheck_resourceSetName,
+    createReadinessCheck_readinessCheckName,
+    createReadinessCheckResponse_readinessCheckArn,
+    createReadinessCheckResponse_readinessCheckName,
+    createReadinessCheckResponse_resourceSet,
+    createReadinessCheckResponse_tags,
+    createReadinessCheckResponse_httpStatus,
+
+    -- ** CreateRecoveryGroup
+    createRecoveryGroup_cells,
+    createRecoveryGroup_tags,
+    createRecoveryGroup_recoveryGroupName,
+    createRecoveryGroupResponse_cells,
+    createRecoveryGroupResponse_recoveryGroupArn,
+    createRecoveryGroupResponse_recoveryGroupName,
+    createRecoveryGroupResponse_tags,
+    createRecoveryGroupResponse_httpStatus,
+
+    -- ** CreateResourceSet
+    createResourceSet_tags,
+    createResourceSet_resourceSetType,
+    createResourceSet_resourceSetName,
+    createResourceSet_resources,
+    createResourceSetResponse_resourceSetArn,
+    createResourceSetResponse_resourceSetName,
+    createResourceSetResponse_resourceSetType,
+    createResourceSetResponse_resources,
+    createResourceSetResponse_tags,
+    createResourceSetResponse_httpStatus,
+
+    -- ** DeleteCell
+    deleteCell_cellName,
+
+    -- ** DeleteCrossAccountAuthorization
+    deleteCrossAccountAuthorization_crossAccountAuthorization,
+    deleteCrossAccountAuthorizationResponse_httpStatus,
+
+    -- ** DeleteReadinessCheck
+    deleteReadinessCheck_readinessCheckName,
+
+    -- ** DeleteRecoveryGroup
+    deleteRecoveryGroup_recoveryGroupName,
+
+    -- ** DeleteResourceSet
+    deleteResourceSet_resourceSetName,
+
+    -- ** GetArchitectureRecommendations
+    getArchitectureRecommendations_maxResults,
+    getArchitectureRecommendations_nextToken,
+    getArchitectureRecommendations_recoveryGroupName,
+    getArchitectureRecommendationsResponse_lastAuditTimestamp,
+    getArchitectureRecommendationsResponse_nextToken,
+    getArchitectureRecommendationsResponse_recommendations,
+    getArchitectureRecommendationsResponse_httpStatus,
+
+    -- ** GetCell
+    getCell_cellName,
+    getCellResponse_cellArn,
+    getCellResponse_cellName,
+    getCellResponse_cells,
+    getCellResponse_parentReadinessScopes,
+    getCellResponse_tags,
+    getCellResponse_httpStatus,
+
+    -- ** GetCellReadinessSummary
+    getCellReadinessSummary_maxResults,
+    getCellReadinessSummary_nextToken,
+    getCellReadinessSummary_cellName,
+    getCellReadinessSummaryResponse_nextToken,
+    getCellReadinessSummaryResponse_readiness,
+    getCellReadinessSummaryResponse_readinessChecks,
+    getCellReadinessSummaryResponse_httpStatus,
+
+    -- ** GetReadinessCheck
+    getReadinessCheck_readinessCheckName,
+    getReadinessCheckResponse_readinessCheckArn,
+    getReadinessCheckResponse_readinessCheckName,
+    getReadinessCheckResponse_resourceSet,
+    getReadinessCheckResponse_tags,
+    getReadinessCheckResponse_httpStatus,
+
+    -- ** GetReadinessCheckResourceStatus
+    getReadinessCheckResourceStatus_maxResults,
+    getReadinessCheckResourceStatus_nextToken,
+    getReadinessCheckResourceStatus_readinessCheckName,
+    getReadinessCheckResourceStatus_resourceIdentifier,
+    getReadinessCheckResourceStatusResponse_nextToken,
+    getReadinessCheckResourceStatusResponse_readiness,
+    getReadinessCheckResourceStatusResponse_rules,
+    getReadinessCheckResourceStatusResponse_httpStatus,
+
+    -- ** GetReadinessCheckStatus
+    getReadinessCheckStatus_maxResults,
+    getReadinessCheckStatus_nextToken,
+    getReadinessCheckStatus_readinessCheckName,
+    getReadinessCheckStatusResponse_messages,
+    getReadinessCheckStatusResponse_nextToken,
+    getReadinessCheckStatusResponse_readiness,
+    getReadinessCheckStatusResponse_resources,
+    getReadinessCheckStatusResponse_httpStatus,
+
+    -- ** GetRecoveryGroup
+    getRecoveryGroup_recoveryGroupName,
+    getRecoveryGroupResponse_cells,
+    getRecoveryGroupResponse_recoveryGroupArn,
+    getRecoveryGroupResponse_recoveryGroupName,
+    getRecoveryGroupResponse_tags,
+    getRecoveryGroupResponse_httpStatus,
+
+    -- ** GetRecoveryGroupReadinessSummary
+    getRecoveryGroupReadinessSummary_maxResults,
+    getRecoveryGroupReadinessSummary_nextToken,
+    getRecoveryGroupReadinessSummary_recoveryGroupName,
+    getRecoveryGroupReadinessSummaryResponse_nextToken,
+    getRecoveryGroupReadinessSummaryResponse_readiness,
+    getRecoveryGroupReadinessSummaryResponse_readinessChecks,
+    getRecoveryGroupReadinessSummaryResponse_httpStatus,
+
+    -- ** GetResourceSet
+    getResourceSet_resourceSetName,
+    getResourceSetResponse_resourceSetArn,
+    getResourceSetResponse_resourceSetName,
+    getResourceSetResponse_resourceSetType,
+    getResourceSetResponse_resources,
+    getResourceSetResponse_tags,
+    getResourceSetResponse_httpStatus,
+
+    -- ** ListCells
+    listCells_maxResults,
+    listCells_nextToken,
+    listCellsResponse_cells,
+    listCellsResponse_nextToken,
+    listCellsResponse_httpStatus,
+
+    -- ** ListCrossAccountAuthorizations
+    listCrossAccountAuthorizations_maxResults,
+    listCrossAccountAuthorizations_nextToken,
+    listCrossAccountAuthorizationsResponse_crossAccountAuthorizations,
+    listCrossAccountAuthorizationsResponse_nextToken,
+    listCrossAccountAuthorizationsResponse_httpStatus,
+
+    -- ** ListReadinessChecks
+    listReadinessChecks_maxResults,
+    listReadinessChecks_nextToken,
+    listReadinessChecksResponse_nextToken,
+    listReadinessChecksResponse_readinessChecks,
+    listReadinessChecksResponse_httpStatus,
+
+    -- ** ListRecoveryGroups
+    listRecoveryGroups_maxResults,
+    listRecoveryGroups_nextToken,
+    listRecoveryGroupsResponse_nextToken,
+    listRecoveryGroupsResponse_recoveryGroups,
+    listRecoveryGroupsResponse_httpStatus,
+
+    -- ** ListResourceSets
+    listResourceSets_maxResults,
+    listResourceSets_nextToken,
+    listResourceSetsResponse_nextToken,
+    listResourceSetsResponse_resourceSets,
+    listResourceSetsResponse_httpStatus,
+
+    -- ** ListRules
+    listRules_maxResults,
+    listRules_nextToken,
+    listRules_resourceType,
+    listRulesResponse_nextToken,
+    listRulesResponse_rules,
+    listRulesResponse_httpStatus,
+
+    -- ** ListTagsForResources
+    listTagsForResources_resourceArn,
+    listTagsForResourcesResponse_tags,
+    listTagsForResourcesResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+
+    -- ** UpdateCell
+    updateCell_cellName,
+    updateCell_cells,
+    updateCellResponse_cellArn,
+    updateCellResponse_cellName,
+    updateCellResponse_cells,
+    updateCellResponse_parentReadinessScopes,
+    updateCellResponse_tags,
+    updateCellResponse_httpStatus,
+
+    -- ** UpdateReadinessCheck
+    updateReadinessCheck_readinessCheckName,
+    updateReadinessCheck_resourceSetName,
+    updateReadinessCheckResponse_readinessCheckArn,
+    updateReadinessCheckResponse_readinessCheckName,
+    updateReadinessCheckResponse_resourceSet,
+    updateReadinessCheckResponse_tags,
+    updateReadinessCheckResponse_httpStatus,
+
+    -- ** UpdateRecoveryGroup
+    updateRecoveryGroup_recoveryGroupName,
+    updateRecoveryGroup_cells,
+    updateRecoveryGroupResponse_cells,
+    updateRecoveryGroupResponse_recoveryGroupArn,
+    updateRecoveryGroupResponse_recoveryGroupName,
+    updateRecoveryGroupResponse_tags,
+    updateRecoveryGroupResponse_httpStatus,
+
+    -- ** UpdateResourceSet
+    updateResourceSet_resourceSetName,
+    updateResourceSet_resourceSetType,
+    updateResourceSet_resources,
+    updateResourceSetResponse_resourceSetArn,
+    updateResourceSetResponse_resourceSetName,
+    updateResourceSetResponse_resourceSetType,
+    updateResourceSetResponse_resources,
+    updateResourceSetResponse_tags,
+    updateResourceSetResponse_httpStatus,
+
+    -- * Types
+
+    -- ** CellOutput
+    cellOutput_tags,
+    cellOutput_parentReadinessScopes,
+    cellOutput_cellArn,
+    cellOutput_cellName,
+    cellOutput_cells,
+
+    -- ** DNSTargetResource
+    dNSTargetResource_domainName,
+    dNSTargetResource_hostedZoneArn,
+    dNSTargetResource_recordSetId,
+    dNSTargetResource_recordType,
+    dNSTargetResource_targetResource,
+
+    -- ** ListRulesOutput
+    listRulesOutput_ruleDescription,
+    listRulesOutput_ruleId,
+    listRulesOutput_resourceType,
+
+    -- ** Message
+    message_messageText,
+
+    -- ** NLBResource
+    nLBResource_arn,
+
+    -- ** R53ResourceRecord
+    r53ResourceRecord_domainName,
+    r53ResourceRecord_recordSetId,
+
+    -- ** ReadinessCheckOutput
+    readinessCheckOutput_readinessCheckName,
+    readinessCheckOutput_tags,
+    readinessCheckOutput_readinessCheckArn,
+    readinessCheckOutput_resourceSet,
+
+    -- ** ReadinessCheckSummary
+    readinessCheckSummary_readiness,
+    readinessCheckSummary_readinessCheckName,
+
+    -- ** Recommendation
+    recommendation_recommendationText,
+
+    -- ** RecoveryGroupOutput
+    recoveryGroupOutput_tags,
+    recoveryGroupOutput_recoveryGroupArn,
+    recoveryGroupOutput_recoveryGroupName,
+    recoveryGroupOutput_cells,
+
+    -- ** Resource
+    resource_componentId,
+    resource_dnsTargetResource,
+    resource_readinessScopes,
+    resource_resourceArn,
+
+    -- ** ResourceResult
+    resourceResult_componentId,
+    resourceResult_resourceArn,
+    resourceResult_readiness,
+    resourceResult_lastCheckedTimestamp,
+
+    -- ** ResourceSetOutput
+    resourceSetOutput_tags,
+    resourceSetOutput_resourceSetType,
+    resourceSetOutput_resourceSetName,
+    resourceSetOutput_resourceSetArn,
+    resourceSetOutput_resources,
+
+    -- ** RuleResult
+    ruleResult_messages,
+    ruleResult_readiness,
+    ruleResult_ruleId,
+    ruleResult_lastCheckedTimestamp,
+
+    -- ** TargetResource
+    targetResource_nLBResource,
+    targetResource_r53Resource,
+  )
+where
+
+import Amazonka.Route53RecoveryReadiness.CreateCell
+import Amazonka.Route53RecoveryReadiness.CreateCrossAccountAuthorization
+import Amazonka.Route53RecoveryReadiness.CreateReadinessCheck
+import Amazonka.Route53RecoveryReadiness.CreateRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.CreateResourceSet
+import Amazonka.Route53RecoveryReadiness.DeleteCell
+import Amazonka.Route53RecoveryReadiness.DeleteCrossAccountAuthorization
+import Amazonka.Route53RecoveryReadiness.DeleteReadinessCheck
+import Amazonka.Route53RecoveryReadiness.DeleteRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.DeleteResourceSet
+import Amazonka.Route53RecoveryReadiness.GetArchitectureRecommendations
+import Amazonka.Route53RecoveryReadiness.GetCell
+import Amazonka.Route53RecoveryReadiness.GetCellReadinessSummary
+import Amazonka.Route53RecoveryReadiness.GetReadinessCheck
+import Amazonka.Route53RecoveryReadiness.GetReadinessCheckResourceStatus
+import Amazonka.Route53RecoveryReadiness.GetReadinessCheckStatus
+import Amazonka.Route53RecoveryReadiness.GetRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.GetRecoveryGroupReadinessSummary
+import Amazonka.Route53RecoveryReadiness.GetResourceSet
+import Amazonka.Route53RecoveryReadiness.ListCells
+import Amazonka.Route53RecoveryReadiness.ListCrossAccountAuthorizations
+import Amazonka.Route53RecoveryReadiness.ListReadinessChecks
+import Amazonka.Route53RecoveryReadiness.ListRecoveryGroups
+import Amazonka.Route53RecoveryReadiness.ListResourceSets
+import Amazonka.Route53RecoveryReadiness.ListRules
+import Amazonka.Route53RecoveryReadiness.ListTagsForResources
+import Amazonka.Route53RecoveryReadiness.TagResource
+import Amazonka.Route53RecoveryReadiness.Types.CellOutput
+import Amazonka.Route53RecoveryReadiness.Types.DNSTargetResource
+import Amazonka.Route53RecoveryReadiness.Types.ListRulesOutput
+import Amazonka.Route53RecoveryReadiness.Types.Message
+import Amazonka.Route53RecoveryReadiness.Types.NLBResource
+import Amazonka.Route53RecoveryReadiness.Types.R53ResourceRecord
+import Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckOutput
+import Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckSummary
+import Amazonka.Route53RecoveryReadiness.Types.Recommendation
+import Amazonka.Route53RecoveryReadiness.Types.RecoveryGroupOutput
+import Amazonka.Route53RecoveryReadiness.Types.Resource
+import Amazonka.Route53RecoveryReadiness.Types.ResourceResult
+import Amazonka.Route53RecoveryReadiness.Types.ResourceSetOutput
+import Amazonka.Route53RecoveryReadiness.Types.RuleResult
+import Amazonka.Route53RecoveryReadiness.Types.TargetResource
+import Amazonka.Route53RecoveryReadiness.UntagResource
+import Amazonka.Route53RecoveryReadiness.UpdateCell
+import Amazonka.Route53RecoveryReadiness.UpdateReadinessCheck
+import Amazonka.Route53RecoveryReadiness.UpdateRecoveryGroup
+import Amazonka.Route53RecoveryReadiness.UpdateResourceSet
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListCells.hs b/gen/Amazonka/Route53RecoveryReadiness/ListCells.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListCells.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.ListCells
+-- 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 cells for an account.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.ListCells
+  ( -- * Creating a Request
+    ListCells (..),
+    newListCells,
+
+    -- * Request Lenses
+    listCells_maxResults,
+    listCells_nextToken,
+
+    -- * Destructuring the Response
+    ListCellsResponse (..),
+    newListCellsResponse,
+
+    -- * Response Lenses
+    listCellsResponse_cells,
+    listCellsResponse_nextToken,
+    listCellsResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListCells' smart constructor.
+data ListCells = ListCells'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCells' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCells_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'listCells_nextToken' - The token that identifies which batch of results you want to see.
+newListCells ::
+  ListCells
+newListCells =
+  ListCells'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of objects that you want to return with this call.
+listCells_maxResults :: Lens.Lens' ListCells (Prelude.Maybe Prelude.Natural)
+listCells_maxResults = Lens.lens (\ListCells' {maxResults} -> maxResults) (\s@ListCells' {} a -> s {maxResults = a} :: ListCells)
+
+-- | The token that identifies which batch of results you want to see.
+listCells_nextToken :: Lens.Lens' ListCells (Prelude.Maybe Prelude.Text)
+listCells_nextToken = Lens.lens (\ListCells' {nextToken} -> nextToken) (\s@ListCells' {} a -> s {nextToken = a} :: ListCells)
+
+instance Core.AWSPager ListCells where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCellsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCellsResponse_cells
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCells_nextToken
+          Lens..~ rs
+          Lens.^? listCellsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCells where
+  type AWSResponse ListCells = ListCellsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCellsResponse'
+            Prelude.<$> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCells where
+  hashWithSalt _salt ListCells' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCells where
+  rnf ListCells' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCells where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListCells where
+  toPath = Prelude.const "/cells"
+
+instance Data.ToQuery ListCells where
+  toQuery ListCells' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListCellsResponse' smart constructor.
+data ListCellsResponse = ListCellsResponse'
+  { -- | A list of cells.
+    cells :: Prelude.Maybe [CellOutput],
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCellsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'listCellsResponse_cells' - A list of cells.
+--
+-- 'nextToken', 'listCellsResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'httpStatus', 'listCellsResponse_httpStatus' - The response's http status code.
+newListCellsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCellsResponse
+newListCellsResponse pHttpStatus_ =
+  ListCellsResponse'
+    { cells = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of cells.
+listCellsResponse_cells :: Lens.Lens' ListCellsResponse (Prelude.Maybe [CellOutput])
+listCellsResponse_cells = Lens.lens (\ListCellsResponse' {cells} -> cells) (\s@ListCellsResponse' {} a -> s {cells = a} :: ListCellsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that identifies which batch of results you want to see.
+listCellsResponse_nextToken :: Lens.Lens' ListCellsResponse (Prelude.Maybe Prelude.Text)
+listCellsResponse_nextToken = Lens.lens (\ListCellsResponse' {nextToken} -> nextToken) (\s@ListCellsResponse' {} a -> s {nextToken = a} :: ListCellsResponse)
+
+-- | The response's http status code.
+listCellsResponse_httpStatus :: Lens.Lens' ListCellsResponse Prelude.Int
+listCellsResponse_httpStatus = Lens.lens (\ListCellsResponse' {httpStatus} -> httpStatus) (\s@ListCellsResponse' {} a -> s {httpStatus = a} :: ListCellsResponse)
+
+instance Prelude.NFData ListCellsResponse where
+  rnf ListCellsResponse' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListCrossAccountAuthorizations.hs b/gen/Amazonka/Route53RecoveryReadiness/ListCrossAccountAuthorizations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListCrossAccountAuthorizations.hs
@@ -0,0 +1,234 @@
+{-# 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.Route53RecoveryReadiness.ListCrossAccountAuthorizations
+-- 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 cross-account readiness authorizations that are in place for
+-- an account.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.ListCrossAccountAuthorizations
+  ( -- * Creating a Request
+    ListCrossAccountAuthorizations (..),
+    newListCrossAccountAuthorizations,
+
+    -- * Request Lenses
+    listCrossAccountAuthorizations_maxResults,
+    listCrossAccountAuthorizations_nextToken,
+
+    -- * Destructuring the Response
+    ListCrossAccountAuthorizationsResponse (..),
+    newListCrossAccountAuthorizationsResponse,
+
+    -- * Response Lenses
+    listCrossAccountAuthorizationsResponse_crossAccountAuthorizations,
+    listCrossAccountAuthorizationsResponse_nextToken,
+    listCrossAccountAuthorizationsResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListCrossAccountAuthorizations' smart constructor.
+data ListCrossAccountAuthorizations = ListCrossAccountAuthorizations'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCrossAccountAuthorizations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCrossAccountAuthorizations_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'listCrossAccountAuthorizations_nextToken' - The token that identifies which batch of results you want to see.
+newListCrossAccountAuthorizations ::
+  ListCrossAccountAuthorizations
+newListCrossAccountAuthorizations =
+  ListCrossAccountAuthorizations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of objects that you want to return with this call.
+listCrossAccountAuthorizations_maxResults :: Lens.Lens' ListCrossAccountAuthorizations (Prelude.Maybe Prelude.Natural)
+listCrossAccountAuthorizations_maxResults = Lens.lens (\ListCrossAccountAuthorizations' {maxResults} -> maxResults) (\s@ListCrossAccountAuthorizations' {} a -> s {maxResults = a} :: ListCrossAccountAuthorizations)
+
+-- | The token that identifies which batch of results you want to see.
+listCrossAccountAuthorizations_nextToken :: Lens.Lens' ListCrossAccountAuthorizations (Prelude.Maybe Prelude.Text)
+listCrossAccountAuthorizations_nextToken = Lens.lens (\ListCrossAccountAuthorizations' {nextToken} -> nextToken) (\s@ListCrossAccountAuthorizations' {} a -> s {nextToken = a} :: ListCrossAccountAuthorizations)
+
+instance Core.AWSPager ListCrossAccountAuthorizations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCrossAccountAuthorizationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCrossAccountAuthorizationsResponse_crossAccountAuthorizations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCrossAccountAuthorizations_nextToken
+          Lens..~ rs
+          Lens.^? listCrossAccountAuthorizationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListCrossAccountAuthorizations
+  where
+  type
+    AWSResponse ListCrossAccountAuthorizations =
+      ListCrossAccountAuthorizationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCrossAccountAuthorizationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "crossAccountAuthorizations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListCrossAccountAuthorizations
+  where
+  hashWithSalt
+    _salt
+    ListCrossAccountAuthorizations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListCrossAccountAuthorizations
+  where
+  rnf ListCrossAccountAuthorizations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListCrossAccountAuthorizations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListCrossAccountAuthorizations where
+  toPath = Prelude.const "/crossaccountauthorizations"
+
+instance Data.ToQuery ListCrossAccountAuthorizations where
+  toQuery ListCrossAccountAuthorizations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListCrossAccountAuthorizationsResponse' smart constructor.
+data ListCrossAccountAuthorizationsResponse = ListCrossAccountAuthorizationsResponse'
+  { -- | A list of cross-account authorizations.
+    crossAccountAuthorizations :: Prelude.Maybe [Prelude.Text],
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCrossAccountAuthorizationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crossAccountAuthorizations', 'listCrossAccountAuthorizationsResponse_crossAccountAuthorizations' - A list of cross-account authorizations.
+--
+-- 'nextToken', 'listCrossAccountAuthorizationsResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'httpStatus', 'listCrossAccountAuthorizationsResponse_httpStatus' - The response's http status code.
+newListCrossAccountAuthorizationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCrossAccountAuthorizationsResponse
+newListCrossAccountAuthorizationsResponse
+  pHttpStatus_ =
+    ListCrossAccountAuthorizationsResponse'
+      { crossAccountAuthorizations =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | A list of cross-account authorizations.
+listCrossAccountAuthorizationsResponse_crossAccountAuthorizations :: Lens.Lens' ListCrossAccountAuthorizationsResponse (Prelude.Maybe [Prelude.Text])
+listCrossAccountAuthorizationsResponse_crossAccountAuthorizations = Lens.lens (\ListCrossAccountAuthorizationsResponse' {crossAccountAuthorizations} -> crossAccountAuthorizations) (\s@ListCrossAccountAuthorizationsResponse' {} a -> s {crossAccountAuthorizations = a} :: ListCrossAccountAuthorizationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that identifies which batch of results you want to see.
+listCrossAccountAuthorizationsResponse_nextToken :: Lens.Lens' ListCrossAccountAuthorizationsResponse (Prelude.Maybe Prelude.Text)
+listCrossAccountAuthorizationsResponse_nextToken = Lens.lens (\ListCrossAccountAuthorizationsResponse' {nextToken} -> nextToken) (\s@ListCrossAccountAuthorizationsResponse' {} a -> s {nextToken = a} :: ListCrossAccountAuthorizationsResponse)
+
+-- | The response's http status code.
+listCrossAccountAuthorizationsResponse_httpStatus :: Lens.Lens' ListCrossAccountAuthorizationsResponse Prelude.Int
+listCrossAccountAuthorizationsResponse_httpStatus = Lens.lens (\ListCrossAccountAuthorizationsResponse' {httpStatus} -> httpStatus) (\s@ListCrossAccountAuthorizationsResponse' {} a -> s {httpStatus = a} :: ListCrossAccountAuthorizationsResponse)
+
+instance
+  Prelude.NFData
+    ListCrossAccountAuthorizationsResponse
+  where
+  rnf ListCrossAccountAuthorizationsResponse' {..} =
+    Prelude.rnf crossAccountAuthorizations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListReadinessChecks.hs b/gen/Amazonka/Route53RecoveryReadiness/ListReadinessChecks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListReadinessChecks.hs
@@ -0,0 +1,214 @@
+{-# 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.Route53RecoveryReadiness.ListReadinessChecks
+-- 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 readiness checks for an account.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.ListReadinessChecks
+  ( -- * Creating a Request
+    ListReadinessChecks (..),
+    newListReadinessChecks,
+
+    -- * Request Lenses
+    listReadinessChecks_maxResults,
+    listReadinessChecks_nextToken,
+
+    -- * Destructuring the Response
+    ListReadinessChecksResponse (..),
+    newListReadinessChecksResponse,
+
+    -- * Response Lenses
+    listReadinessChecksResponse_nextToken,
+    listReadinessChecksResponse_readinessChecks,
+    listReadinessChecksResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListReadinessChecks' smart constructor.
+data ListReadinessChecks = ListReadinessChecks'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListReadinessChecks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listReadinessChecks_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'listReadinessChecks_nextToken' - The token that identifies which batch of results you want to see.
+newListReadinessChecks ::
+  ListReadinessChecks
+newListReadinessChecks =
+  ListReadinessChecks'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of objects that you want to return with this call.
+listReadinessChecks_maxResults :: Lens.Lens' ListReadinessChecks (Prelude.Maybe Prelude.Natural)
+listReadinessChecks_maxResults = Lens.lens (\ListReadinessChecks' {maxResults} -> maxResults) (\s@ListReadinessChecks' {} a -> s {maxResults = a} :: ListReadinessChecks)
+
+-- | The token that identifies which batch of results you want to see.
+listReadinessChecks_nextToken :: Lens.Lens' ListReadinessChecks (Prelude.Maybe Prelude.Text)
+listReadinessChecks_nextToken = Lens.lens (\ListReadinessChecks' {nextToken} -> nextToken) (\s@ListReadinessChecks' {} a -> s {nextToken = a} :: ListReadinessChecks)
+
+instance Core.AWSPager ListReadinessChecks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listReadinessChecksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listReadinessChecksResponse_readinessChecks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listReadinessChecks_nextToken
+          Lens..~ rs
+          Lens.^? listReadinessChecksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListReadinessChecks where
+  type
+    AWSResponse ListReadinessChecks =
+      ListReadinessChecksResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListReadinessChecksResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "readinessChecks"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListReadinessChecks where
+  hashWithSalt _salt ListReadinessChecks' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListReadinessChecks where
+  rnf ListReadinessChecks' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListReadinessChecks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListReadinessChecks where
+  toPath = Prelude.const "/readinesschecks"
+
+instance Data.ToQuery ListReadinessChecks where
+  toQuery ListReadinessChecks' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListReadinessChecksResponse' smart constructor.
+data ListReadinessChecksResponse = ListReadinessChecksResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of readiness checks associated with the account.
+    readinessChecks :: Prelude.Maybe [ReadinessCheckOutput],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListReadinessChecksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listReadinessChecksResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'readinessChecks', 'listReadinessChecksResponse_readinessChecks' - A list of readiness checks associated with the account.
+--
+-- 'httpStatus', 'listReadinessChecksResponse_httpStatus' - The response's http status code.
+newListReadinessChecksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListReadinessChecksResponse
+newListReadinessChecksResponse pHttpStatus_ =
+  ListReadinessChecksResponse'
+    { nextToken =
+        Prelude.Nothing,
+      readinessChecks = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results you want to see.
+listReadinessChecksResponse_nextToken :: Lens.Lens' ListReadinessChecksResponse (Prelude.Maybe Prelude.Text)
+listReadinessChecksResponse_nextToken = Lens.lens (\ListReadinessChecksResponse' {nextToken} -> nextToken) (\s@ListReadinessChecksResponse' {} a -> s {nextToken = a} :: ListReadinessChecksResponse)
+
+-- | A list of readiness checks associated with the account.
+listReadinessChecksResponse_readinessChecks :: Lens.Lens' ListReadinessChecksResponse (Prelude.Maybe [ReadinessCheckOutput])
+listReadinessChecksResponse_readinessChecks = Lens.lens (\ListReadinessChecksResponse' {readinessChecks} -> readinessChecks) (\s@ListReadinessChecksResponse' {} a -> s {readinessChecks = a} :: ListReadinessChecksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listReadinessChecksResponse_httpStatus :: Lens.Lens' ListReadinessChecksResponse Prelude.Int
+listReadinessChecksResponse_httpStatus = Lens.lens (\ListReadinessChecksResponse' {httpStatus} -> httpStatus) (\s@ListReadinessChecksResponse' {} a -> s {httpStatus = a} :: ListReadinessChecksResponse)
+
+instance Prelude.NFData ListReadinessChecksResponse where
+  rnf ListReadinessChecksResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf readinessChecks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListRecoveryGroups.hs b/gen/Amazonka/Route53RecoveryReadiness/ListRecoveryGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListRecoveryGroups.hs
@@ -0,0 +1,211 @@
+{-# 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.Route53RecoveryReadiness.ListRecoveryGroups
+-- 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 recovery groups in an account.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.ListRecoveryGroups
+  ( -- * Creating a Request
+    ListRecoveryGroups (..),
+    newListRecoveryGroups,
+
+    -- * Request Lenses
+    listRecoveryGroups_maxResults,
+    listRecoveryGroups_nextToken,
+
+    -- * Destructuring the Response
+    ListRecoveryGroupsResponse (..),
+    newListRecoveryGroupsResponse,
+
+    -- * Response Lenses
+    listRecoveryGroupsResponse_nextToken,
+    listRecoveryGroupsResponse_recoveryGroups,
+    listRecoveryGroupsResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListRecoveryGroups' smart constructor.
+data ListRecoveryGroups = ListRecoveryGroups'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecoveryGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRecoveryGroups_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'listRecoveryGroups_nextToken' - The token that identifies which batch of results you want to see.
+newListRecoveryGroups ::
+  ListRecoveryGroups
+newListRecoveryGroups =
+  ListRecoveryGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of objects that you want to return with this call.
+listRecoveryGroups_maxResults :: Lens.Lens' ListRecoveryGroups (Prelude.Maybe Prelude.Natural)
+listRecoveryGroups_maxResults = Lens.lens (\ListRecoveryGroups' {maxResults} -> maxResults) (\s@ListRecoveryGroups' {} a -> s {maxResults = a} :: ListRecoveryGroups)
+
+-- | The token that identifies which batch of results you want to see.
+listRecoveryGroups_nextToken :: Lens.Lens' ListRecoveryGroups (Prelude.Maybe Prelude.Text)
+listRecoveryGroups_nextToken = Lens.lens (\ListRecoveryGroups' {nextToken} -> nextToken) (\s@ListRecoveryGroups' {} a -> s {nextToken = a} :: ListRecoveryGroups)
+
+instance Core.AWSPager ListRecoveryGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRecoveryGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRecoveryGroupsResponse_recoveryGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRecoveryGroups_nextToken
+          Lens..~ rs
+          Lens.^? listRecoveryGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRecoveryGroups where
+  type
+    AWSResponse ListRecoveryGroups =
+      ListRecoveryGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecoveryGroupsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "recoveryGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRecoveryGroups where
+  hashWithSalt _salt ListRecoveryGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListRecoveryGroups where
+  rnf ListRecoveryGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListRecoveryGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRecoveryGroups where
+  toPath = Prelude.const "/recoverygroups"
+
+instance Data.ToQuery ListRecoveryGroups where
+  toQuery ListRecoveryGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListRecoveryGroupsResponse' smart constructor.
+data ListRecoveryGroupsResponse = ListRecoveryGroupsResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of recovery groups.
+    recoveryGroups :: Prelude.Maybe [RecoveryGroupOutput],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecoveryGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRecoveryGroupsResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'recoveryGroups', 'listRecoveryGroupsResponse_recoveryGroups' - A list of recovery groups.
+--
+-- 'httpStatus', 'listRecoveryGroupsResponse_httpStatus' - The response's http status code.
+newListRecoveryGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecoveryGroupsResponse
+newListRecoveryGroupsResponse pHttpStatus_ =
+  ListRecoveryGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      recoveryGroups = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results you want to see.
+listRecoveryGroupsResponse_nextToken :: Lens.Lens' ListRecoveryGroupsResponse (Prelude.Maybe Prelude.Text)
+listRecoveryGroupsResponse_nextToken = Lens.lens (\ListRecoveryGroupsResponse' {nextToken} -> nextToken) (\s@ListRecoveryGroupsResponse' {} a -> s {nextToken = a} :: ListRecoveryGroupsResponse)
+
+-- | A list of recovery groups.
+listRecoveryGroupsResponse_recoveryGroups :: Lens.Lens' ListRecoveryGroupsResponse (Prelude.Maybe [RecoveryGroupOutput])
+listRecoveryGroupsResponse_recoveryGroups = Lens.lens (\ListRecoveryGroupsResponse' {recoveryGroups} -> recoveryGroups) (\s@ListRecoveryGroupsResponse' {} a -> s {recoveryGroups = a} :: ListRecoveryGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRecoveryGroupsResponse_httpStatus :: Lens.Lens' ListRecoveryGroupsResponse Prelude.Int
+listRecoveryGroupsResponse_httpStatus = Lens.lens (\ListRecoveryGroupsResponse' {httpStatus} -> httpStatus) (\s@ListRecoveryGroupsResponse' {} a -> s {httpStatus = a} :: ListRecoveryGroupsResponse)
+
+instance Prelude.NFData ListRecoveryGroupsResponse where
+  rnf ListRecoveryGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf recoveryGroups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListResourceSets.hs b/gen/Amazonka/Route53RecoveryReadiness/ListResourceSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListResourceSets.hs
@@ -0,0 +1,211 @@
+{-# 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.Route53RecoveryReadiness.ListResourceSets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the resource sets in an account.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.ListResourceSets
+  ( -- * Creating a Request
+    ListResourceSets (..),
+    newListResourceSets,
+
+    -- * Request Lenses
+    listResourceSets_maxResults,
+    listResourceSets_nextToken,
+
+    -- * Destructuring the Response
+    ListResourceSetsResponse (..),
+    newListResourceSetsResponse,
+
+    -- * Response Lenses
+    listResourceSetsResponse_nextToken,
+    listResourceSetsResponse_resourceSets,
+    listResourceSetsResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListResourceSets' smart constructor.
+data ListResourceSets = ListResourceSets'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListResourceSets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listResourceSets_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'listResourceSets_nextToken' - The token that identifies which batch of results you want to see.
+newListResourceSets ::
+  ListResourceSets
+newListResourceSets =
+  ListResourceSets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of objects that you want to return with this call.
+listResourceSets_maxResults :: Lens.Lens' ListResourceSets (Prelude.Maybe Prelude.Natural)
+listResourceSets_maxResults = Lens.lens (\ListResourceSets' {maxResults} -> maxResults) (\s@ListResourceSets' {} a -> s {maxResults = a} :: ListResourceSets)
+
+-- | The token that identifies which batch of results you want to see.
+listResourceSets_nextToken :: Lens.Lens' ListResourceSets (Prelude.Maybe Prelude.Text)
+listResourceSets_nextToken = Lens.lens (\ListResourceSets' {nextToken} -> nextToken) (\s@ListResourceSets' {} a -> s {nextToken = a} :: ListResourceSets)
+
+instance Core.AWSPager ListResourceSets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listResourceSetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listResourceSetsResponse_resourceSets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listResourceSets_nextToken
+          Lens..~ rs
+          Lens.^? listResourceSetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListResourceSets where
+  type
+    AWSResponse ListResourceSets =
+      ListResourceSetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListResourceSetsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "resourceSets" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListResourceSets where
+  hashWithSalt _salt ListResourceSets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListResourceSets where
+  rnf ListResourceSets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListResourceSets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListResourceSets where
+  toPath = Prelude.const "/resourcesets"
+
+instance Data.ToQuery ListResourceSets where
+  toQuery ListResourceSets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListResourceSetsResponse' smart constructor.
+data ListResourceSetsResponse = ListResourceSetsResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of resource sets associated with the account.
+    resourceSets :: Prelude.Maybe [ResourceSetOutput],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListResourceSetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listResourceSetsResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'resourceSets', 'listResourceSetsResponse_resourceSets' - A list of resource sets associated with the account.
+--
+-- 'httpStatus', 'listResourceSetsResponse_httpStatus' - The response's http status code.
+newListResourceSetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListResourceSetsResponse
+newListResourceSetsResponse pHttpStatus_ =
+  ListResourceSetsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      resourceSets = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results you want to see.
+listResourceSetsResponse_nextToken :: Lens.Lens' ListResourceSetsResponse (Prelude.Maybe Prelude.Text)
+listResourceSetsResponse_nextToken = Lens.lens (\ListResourceSetsResponse' {nextToken} -> nextToken) (\s@ListResourceSetsResponse' {} a -> s {nextToken = a} :: ListResourceSetsResponse)
+
+-- | A list of resource sets associated with the account.
+listResourceSetsResponse_resourceSets :: Lens.Lens' ListResourceSetsResponse (Prelude.Maybe [ResourceSetOutput])
+listResourceSetsResponse_resourceSets = Lens.lens (\ListResourceSetsResponse' {resourceSets} -> resourceSets) (\s@ListResourceSetsResponse' {} a -> s {resourceSets = a} :: ListResourceSetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listResourceSetsResponse_httpStatus :: Lens.Lens' ListResourceSetsResponse Prelude.Int
+listResourceSetsResponse_httpStatus = Lens.lens (\ListResourceSetsResponse' {httpStatus} -> httpStatus) (\s@ListResourceSetsResponse' {} a -> s {httpStatus = a} :: ListResourceSetsResponse)
+
+instance Prelude.NFData ListResourceSetsResponse where
+  rnf ListResourceSetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceSets
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListRules.hs b/gen/Amazonka/Route53RecoveryReadiness/ListRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListRules.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.Route53RecoveryReadiness.ListRules
+-- 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 readiness rules, or lists the readiness rules for a specific
+-- resource type.
+--
+-- This operation returns paginated results.
+module Amazonka.Route53RecoveryReadiness.ListRules
+  ( -- * Creating a Request
+    ListRules (..),
+    newListRules,
+
+    -- * Request Lenses
+    listRules_maxResults,
+    listRules_nextToken,
+    listRules_resourceType,
+
+    -- * Destructuring the Response
+    ListRulesResponse (..),
+    newListRulesResponse,
+
+    -- * Response Lenses
+    listRulesResponse_nextToken,
+    listRulesResponse_rules,
+    listRulesResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListRules' smart constructor.
+data ListRules = ListRules'
+  { -- | The number of objects that you want to return with this call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The resource type that a readiness rule applies to.
+    resourceType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRules_maxResults' - The number of objects that you want to return with this call.
+--
+-- 'nextToken', 'listRules_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'resourceType', 'listRules_resourceType' - The resource type that a readiness rule applies to.
+newListRules ::
+  ListRules
+newListRules =
+  ListRules'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceType = Prelude.Nothing
+    }
+
+-- | The number of objects that you want to return with this call.
+listRules_maxResults :: Lens.Lens' ListRules (Prelude.Maybe Prelude.Natural)
+listRules_maxResults = Lens.lens (\ListRules' {maxResults} -> maxResults) (\s@ListRules' {} a -> s {maxResults = a} :: ListRules)
+
+-- | The token that identifies which batch of results you want to see.
+listRules_nextToken :: Lens.Lens' ListRules (Prelude.Maybe Prelude.Text)
+listRules_nextToken = Lens.lens (\ListRules' {nextToken} -> nextToken) (\s@ListRules' {} a -> s {nextToken = a} :: ListRules)
+
+-- | The resource type that a readiness rule applies to.
+listRules_resourceType :: Lens.Lens' ListRules (Prelude.Maybe Prelude.Text)
+listRules_resourceType = Lens.lens (\ListRules' {resourceType} -> resourceType) (\s@ListRules' {} a -> s {resourceType = a} :: ListRules)
+
+instance Core.AWSPager ListRules where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRulesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRulesResponse_rules
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRules_nextToken
+          Lens..~ rs
+          Lens.^? listRulesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRules where
+  type AWSResponse ListRules = ListRulesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRulesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "rules" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRules where
+  hashWithSalt _salt ListRules' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData ListRules where
+  rnf ListRules' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToHeaders ListRules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRules where
+  toPath = Prelude.const "/rules"
+
+instance Data.ToQuery ListRules where
+  toQuery ListRules' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "resourceType" Data.=: resourceType
+      ]
+
+-- | /See:/ 'newListRulesResponse' smart constructor.
+data ListRulesResponse = ListRulesResponse'
+  { -- | The token that identifies which batch of results you want to see.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of readiness rules for a specific resource type.
+    rules :: Prelude.Maybe [ListRulesOutput],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRulesResponse_nextToken' - The token that identifies which batch of results you want to see.
+--
+-- 'rules', 'listRulesResponse_rules' - A list of readiness rules for a specific resource type.
+--
+-- 'httpStatus', 'listRulesResponse_httpStatus' - The response's http status code.
+newListRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRulesResponse
+newListRulesResponse pHttpStatus_ =
+  ListRulesResponse'
+    { nextToken = Prelude.Nothing,
+      rules = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results you want to see.
+listRulesResponse_nextToken :: Lens.Lens' ListRulesResponse (Prelude.Maybe Prelude.Text)
+listRulesResponse_nextToken = Lens.lens (\ListRulesResponse' {nextToken} -> nextToken) (\s@ListRulesResponse' {} a -> s {nextToken = a} :: ListRulesResponse)
+
+-- | A list of readiness rules for a specific resource type.
+listRulesResponse_rules :: Lens.Lens' ListRulesResponse (Prelude.Maybe [ListRulesOutput])
+listRulesResponse_rules = Lens.lens (\ListRulesResponse' {rules} -> rules) (\s@ListRulesResponse' {} a -> s {rules = a} :: ListRulesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRulesResponse_httpStatus :: Lens.Lens' ListRulesResponse Prelude.Int
+listRulesResponse_httpStatus = Lens.lens (\ListRulesResponse' {httpStatus} -> httpStatus) (\s@ListRulesResponse' {} a -> s {httpStatus = a} :: ListRulesResponse)
+
+instance Prelude.NFData ListRulesResponse where
+  rnf ListRulesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf rules
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/ListTagsForResources.hs b/gen/Amazonka/Route53RecoveryReadiness/ListTagsForResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/ListTagsForResources.hs
@@ -0,0 +1,157 @@
+{-# 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.Route53RecoveryReadiness.ListTagsForResources
+-- 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 a resource.
+module Amazonka.Route53RecoveryReadiness.ListTagsForResources
+  ( -- * Creating a Request
+    ListTagsForResources (..),
+    newListTagsForResources,
+
+    -- * Request Lenses
+    listTagsForResources_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourcesResponse (..),
+    newListTagsForResourcesResponse,
+
+    -- * Response Lenses
+    listTagsForResourcesResponse_tags,
+    listTagsForResourcesResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newListTagsForResources' smart constructor.
+data ListTagsForResources = ListTagsForResources'
+  { -- | The Amazon Resource Name (ARN) for a resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTagsForResources_resourceArn' - The Amazon Resource Name (ARN) for a resource.
+newListTagsForResources ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResources
+newListTagsForResources pResourceArn_ =
+  ListTagsForResources' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) for a resource.
+listTagsForResources_resourceArn :: Lens.Lens' ListTagsForResources Prelude.Text
+listTagsForResources_resourceArn = Lens.lens (\ListTagsForResources' {resourceArn} -> resourceArn) (\s@ListTagsForResources' {} a -> s {resourceArn = a} :: ListTagsForResources)
+
+instance Core.AWSRequest ListTagsForResources where
+  type
+    AWSResponse ListTagsForResources =
+      ListTagsForResourcesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourcesResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResources where
+  hashWithSalt _salt ListTagsForResources' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResources where
+  rnf ListTagsForResources' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResources where
+  toPath ListTagsForResources' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourcesResponse' smart constructor.
+data ListTagsForResourcesResponse = ListTagsForResourcesResponse'
+  { tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTagsForResourcesResponse_tags' -
+--
+-- 'httpStatus', 'listTagsForResourcesResponse_httpStatus' - The response's http status code.
+newListTagsForResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourcesResponse
+newListTagsForResourcesResponse pHttpStatus_ =
+  ListTagsForResourcesResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+listTagsForResourcesResponse_tags :: Lens.Lens' ListTagsForResourcesResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourcesResponse_tags = Lens.lens (\ListTagsForResourcesResponse' {tags} -> tags) (\s@ListTagsForResourcesResponse' {} a -> s {tags = a} :: ListTagsForResourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourcesResponse_httpStatus :: Lens.Lens' ListTagsForResourcesResponse Prelude.Int
+listTagsForResourcesResponse_httpStatus = Lens.lens (\ListTagsForResourcesResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourcesResponse' {} a -> s {httpStatus = a} :: ListTagsForResourcesResponse)
+
+instance Prelude.NFData ListTagsForResourcesResponse where
+  rnf ListTagsForResourcesResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/TagResource.hs b/gen/Amazonka/Route53RecoveryReadiness/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/TagResource.hs
@@ -0,0 +1,161 @@
+{-# 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.Route53RecoveryReadiness.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)
+--
+-- Adds a tag to a resource.
+module Amazonka.Route53RecoveryReadiness.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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) for a resource.
+    resourceArn :: Prelude.Text,
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) for a resource.
+--
+-- 'tags', 'tagResource_tags' -
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) for a resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.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/Route53RecoveryReadiness/Types.hs b/gen/Amazonka/Route53RecoveryReadiness/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types.hs
@@ -0,0 +1,279 @@
+{-# 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.Route53RecoveryReadiness.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.Route53RecoveryReadiness.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * Readiness
+    Readiness (..),
+
+    -- * CellOutput
+    CellOutput (..),
+    newCellOutput,
+    cellOutput_tags,
+    cellOutput_parentReadinessScopes,
+    cellOutput_cellArn,
+    cellOutput_cellName,
+    cellOutput_cells,
+
+    -- * DNSTargetResource
+    DNSTargetResource (..),
+    newDNSTargetResource,
+    dNSTargetResource_domainName,
+    dNSTargetResource_hostedZoneArn,
+    dNSTargetResource_recordSetId,
+    dNSTargetResource_recordType,
+    dNSTargetResource_targetResource,
+
+    -- * ListRulesOutput
+    ListRulesOutput (..),
+    newListRulesOutput,
+    listRulesOutput_ruleDescription,
+    listRulesOutput_ruleId,
+    listRulesOutput_resourceType,
+
+    -- * Message
+    Message (..),
+    newMessage,
+    message_messageText,
+
+    -- * NLBResource
+    NLBResource (..),
+    newNLBResource,
+    nLBResource_arn,
+
+    -- * R53ResourceRecord
+    R53ResourceRecord (..),
+    newR53ResourceRecord,
+    r53ResourceRecord_domainName,
+    r53ResourceRecord_recordSetId,
+
+    -- * ReadinessCheckOutput
+    ReadinessCheckOutput (..),
+    newReadinessCheckOutput,
+    readinessCheckOutput_readinessCheckName,
+    readinessCheckOutput_tags,
+    readinessCheckOutput_readinessCheckArn,
+    readinessCheckOutput_resourceSet,
+
+    -- * ReadinessCheckSummary
+    ReadinessCheckSummary (..),
+    newReadinessCheckSummary,
+    readinessCheckSummary_readiness,
+    readinessCheckSummary_readinessCheckName,
+
+    -- * Recommendation
+    Recommendation (..),
+    newRecommendation,
+    recommendation_recommendationText,
+
+    -- * RecoveryGroupOutput
+    RecoveryGroupOutput (..),
+    newRecoveryGroupOutput,
+    recoveryGroupOutput_tags,
+    recoveryGroupOutput_recoveryGroupArn,
+    recoveryGroupOutput_recoveryGroupName,
+    recoveryGroupOutput_cells,
+
+    -- * Resource
+    Resource (..),
+    newResource,
+    resource_componentId,
+    resource_dnsTargetResource,
+    resource_readinessScopes,
+    resource_resourceArn,
+
+    -- * ResourceResult
+    ResourceResult (..),
+    newResourceResult,
+    resourceResult_componentId,
+    resourceResult_resourceArn,
+    resourceResult_readiness,
+    resourceResult_lastCheckedTimestamp,
+
+    -- * ResourceSetOutput
+    ResourceSetOutput (..),
+    newResourceSetOutput,
+    resourceSetOutput_tags,
+    resourceSetOutput_resourceSetType,
+    resourceSetOutput_resourceSetName,
+    resourceSetOutput_resourceSetArn,
+    resourceSetOutput_resources,
+
+    -- * RuleResult
+    RuleResult (..),
+    newRuleResult,
+    ruleResult_messages,
+    ruleResult_readiness,
+    ruleResult_ruleId,
+    ruleResult_lastCheckedTimestamp,
+
+    -- * TargetResource
+    TargetResource (..),
+    newTargetResource,
+    targetResource_nLBResource,
+    targetResource_r53Resource,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Route53RecoveryReadiness.Types.CellOutput
+import Amazonka.Route53RecoveryReadiness.Types.DNSTargetResource
+import Amazonka.Route53RecoveryReadiness.Types.ListRulesOutput
+import Amazonka.Route53RecoveryReadiness.Types.Message
+import Amazonka.Route53RecoveryReadiness.Types.NLBResource
+import Amazonka.Route53RecoveryReadiness.Types.R53ResourceRecord
+import Amazonka.Route53RecoveryReadiness.Types.Readiness
+import Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckOutput
+import Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckSummary
+import Amazonka.Route53RecoveryReadiness.Types.Recommendation
+import Amazonka.Route53RecoveryReadiness.Types.RecoveryGroupOutput
+import Amazonka.Route53RecoveryReadiness.Types.Resource
+import Amazonka.Route53RecoveryReadiness.Types.ResourceResult
+import Amazonka.Route53RecoveryReadiness.Types.ResourceSetOutput
+import Amazonka.Route53RecoveryReadiness.Types.RuleResult
+import Amazonka.Route53RecoveryReadiness.Types.TargetResource
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2019-12-02@ of the Amazon Route53 Recovery Readiness SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev =
+        "Route53RecoveryReadiness",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "route53-recovery-readiness",
+      Core.signingName = "route53-recovery-readiness",
+      Core.version = "2019-12-02",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "Route53RecoveryReadiness",
+      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
+
+-- | User does not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Updating or deleting a resource can cause an inconsistent state.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An unexpected error occurred.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The requested resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Request was denied due to request throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The input fails to satisfy the constraints specified by an AWS service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/CellOutput.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/CellOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/CellOutput.hs
@@ -0,0 +1,133 @@
+{-# 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.Route53RecoveryReadiness.Types.CellOutput
+-- 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.Route53RecoveryReadiness.Types.CellOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a cell.
+--
+-- /See:/ 'newCellOutput' smart constructor.
+data CellOutput = CellOutput'
+  { -- | Tags on the resources.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The readiness scope for the cell, which can be a cell Amazon Resource
+    -- Name (ARN) or a recovery group ARN. This is a list but currently can
+    -- have only one element.
+    parentReadinessScopes :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the cell.
+    cellArn :: Prelude.Text,
+    -- | The name of the cell.
+    cellName :: Prelude.Text,
+    -- | A list of cell ARNs.
+    cells :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CellOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cellOutput_tags' - Tags on the resources.
+--
+-- 'parentReadinessScopes', 'cellOutput_parentReadinessScopes' - The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+--
+-- 'cellArn', 'cellOutput_cellArn' - The Amazon Resource Name (ARN) for the cell.
+--
+-- 'cellName', 'cellOutput_cellName' - The name of the cell.
+--
+-- 'cells', 'cellOutput_cells' - A list of cell ARNs.
+newCellOutput ::
+  -- | 'cellArn'
+  Prelude.Text ->
+  -- | 'cellName'
+  Prelude.Text ->
+  CellOutput
+newCellOutput pCellArn_ pCellName_ =
+  CellOutput'
+    { tags = Prelude.Nothing,
+      parentReadinessScopes = Prelude.mempty,
+      cellArn = pCellArn_,
+      cellName = pCellName_,
+      cells = Prelude.mempty
+    }
+
+-- | Tags on the resources.
+cellOutput_tags :: Lens.Lens' CellOutput (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+cellOutput_tags = Lens.lens (\CellOutput' {tags} -> tags) (\s@CellOutput' {} a -> s {tags = a} :: CellOutput) Prelude.. Lens.mapping Lens.coerced
+
+-- | The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+cellOutput_parentReadinessScopes :: Lens.Lens' CellOutput [Prelude.Text]
+cellOutput_parentReadinessScopes = Lens.lens (\CellOutput' {parentReadinessScopes} -> parentReadinessScopes) (\s@CellOutput' {} a -> s {parentReadinessScopes = a} :: CellOutput) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the cell.
+cellOutput_cellArn :: Lens.Lens' CellOutput Prelude.Text
+cellOutput_cellArn = Lens.lens (\CellOutput' {cellArn} -> cellArn) (\s@CellOutput' {} a -> s {cellArn = a} :: CellOutput)
+
+-- | The name of the cell.
+cellOutput_cellName :: Lens.Lens' CellOutput Prelude.Text
+cellOutput_cellName = Lens.lens (\CellOutput' {cellName} -> cellName) (\s@CellOutput' {} a -> s {cellName = a} :: CellOutput)
+
+-- | A list of cell ARNs.
+cellOutput_cells :: Lens.Lens' CellOutput [Prelude.Text]
+cellOutput_cells = Lens.lens (\CellOutput' {cells} -> cells) (\s@CellOutput' {} a -> s {cells = a} :: CellOutput) Prelude.. Lens.coerced
+
+instance Data.FromJSON CellOutput where
+  parseJSON =
+    Data.withObject
+      "CellOutput"
+      ( \x ->
+          CellOutput'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "parentReadinessScopes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "cellArn")
+            Prelude.<*> (x Data..: "cellName")
+            Prelude.<*> (x Data..:? "cells" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable CellOutput where
+  hashWithSalt _salt CellOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` parentReadinessScopes
+      `Prelude.hashWithSalt` cellArn
+      `Prelude.hashWithSalt` cellName
+      `Prelude.hashWithSalt` cells
+
+instance Prelude.NFData CellOutput where
+  rnf CellOutput' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf parentReadinessScopes
+      `Prelude.seq` Prelude.rnf cellArn
+      `Prelude.seq` Prelude.rnf cellName
+      `Prelude.seq` Prelude.rnf cells
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/DNSTargetResource.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/DNSTargetResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/DNSTargetResource.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.DNSTargetResource
+-- 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.Route53RecoveryReadiness.Types.DNSTargetResource 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.Route53RecoveryReadiness.Types.TargetResource
+
+-- | A component for DNS\/routing control readiness checks and architecture
+-- checks.
+--
+-- /See:/ 'newDNSTargetResource' smart constructor.
+data DNSTargetResource = DNSTargetResource'
+  { -- | The domain name that acts as an ingress point to a portion of the
+    -- customer application.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The hosted zone Amazon Resource Name (ARN) that contains the DNS record
+    -- with the provided name of the target resource.
+    hostedZoneArn :: Prelude.Maybe Prelude.Text,
+    -- | The Route 53 record set ID that uniquely identifies a DNS record, given
+    -- a name and a type.
+    recordSetId :: Prelude.Maybe Prelude.Text,
+    -- | The type of DNS record of the target resource.
+    recordType :: Prelude.Maybe Prelude.Text,
+    -- | The target resource of the DNS target resource.
+    targetResource :: Prelude.Maybe TargetResource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DNSTargetResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'dNSTargetResource_domainName' - The domain name that acts as an ingress point to a portion of the
+-- customer application.
+--
+-- 'hostedZoneArn', 'dNSTargetResource_hostedZoneArn' - The hosted zone Amazon Resource Name (ARN) that contains the DNS record
+-- with the provided name of the target resource.
+--
+-- 'recordSetId', 'dNSTargetResource_recordSetId' - The Route 53 record set ID that uniquely identifies a DNS record, given
+-- a name and a type.
+--
+-- 'recordType', 'dNSTargetResource_recordType' - The type of DNS record of the target resource.
+--
+-- 'targetResource', 'dNSTargetResource_targetResource' - The target resource of the DNS target resource.
+newDNSTargetResource ::
+  DNSTargetResource
+newDNSTargetResource =
+  DNSTargetResource'
+    { domainName = Prelude.Nothing,
+      hostedZoneArn = Prelude.Nothing,
+      recordSetId = Prelude.Nothing,
+      recordType = Prelude.Nothing,
+      targetResource = Prelude.Nothing
+    }
+
+-- | The domain name that acts as an ingress point to a portion of the
+-- customer application.
+dNSTargetResource_domainName :: Lens.Lens' DNSTargetResource (Prelude.Maybe Prelude.Text)
+dNSTargetResource_domainName = Lens.lens (\DNSTargetResource' {domainName} -> domainName) (\s@DNSTargetResource' {} a -> s {domainName = a} :: DNSTargetResource)
+
+-- | The hosted zone Amazon Resource Name (ARN) that contains the DNS record
+-- with the provided name of the target resource.
+dNSTargetResource_hostedZoneArn :: Lens.Lens' DNSTargetResource (Prelude.Maybe Prelude.Text)
+dNSTargetResource_hostedZoneArn = Lens.lens (\DNSTargetResource' {hostedZoneArn} -> hostedZoneArn) (\s@DNSTargetResource' {} a -> s {hostedZoneArn = a} :: DNSTargetResource)
+
+-- | The Route 53 record set ID that uniquely identifies a DNS record, given
+-- a name and a type.
+dNSTargetResource_recordSetId :: Lens.Lens' DNSTargetResource (Prelude.Maybe Prelude.Text)
+dNSTargetResource_recordSetId = Lens.lens (\DNSTargetResource' {recordSetId} -> recordSetId) (\s@DNSTargetResource' {} a -> s {recordSetId = a} :: DNSTargetResource)
+
+-- | The type of DNS record of the target resource.
+dNSTargetResource_recordType :: Lens.Lens' DNSTargetResource (Prelude.Maybe Prelude.Text)
+dNSTargetResource_recordType = Lens.lens (\DNSTargetResource' {recordType} -> recordType) (\s@DNSTargetResource' {} a -> s {recordType = a} :: DNSTargetResource)
+
+-- | The target resource of the DNS target resource.
+dNSTargetResource_targetResource :: Lens.Lens' DNSTargetResource (Prelude.Maybe TargetResource)
+dNSTargetResource_targetResource = Lens.lens (\DNSTargetResource' {targetResource} -> targetResource) (\s@DNSTargetResource' {} a -> s {targetResource = a} :: DNSTargetResource)
+
+instance Data.FromJSON DNSTargetResource where
+  parseJSON =
+    Data.withObject
+      "DNSTargetResource"
+      ( \x ->
+          DNSTargetResource'
+            Prelude.<$> (x Data..:? "domainName")
+            Prelude.<*> (x Data..:? "hostedZoneArn")
+            Prelude.<*> (x Data..:? "recordSetId")
+            Prelude.<*> (x Data..:? "recordType")
+            Prelude.<*> (x Data..:? "targetResource")
+      )
+
+instance Prelude.Hashable DNSTargetResource where
+  hashWithSalt _salt DNSTargetResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` hostedZoneArn
+      `Prelude.hashWithSalt` recordSetId
+      `Prelude.hashWithSalt` recordType
+      `Prelude.hashWithSalt` targetResource
+
+instance Prelude.NFData DNSTargetResource where
+  rnf DNSTargetResource' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf hostedZoneArn
+      `Prelude.seq` Prelude.rnf recordSetId
+      `Prelude.seq` Prelude.rnf recordType
+      `Prelude.seq` Prelude.rnf targetResource
+
+instance Data.ToJSON DNSTargetResource where
+  toJSON DNSTargetResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("domainName" Data..=) Prelude.<$> domainName,
+            ("hostedZoneArn" Data..=) Prelude.<$> hostedZoneArn,
+            ("recordSetId" Data..=) Prelude.<$> recordSetId,
+            ("recordType" Data..=) Prelude.<$> recordType,
+            ("targetResource" Data..=)
+              Prelude.<$> targetResource
+          ]
+      )
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/ListRulesOutput.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/ListRulesOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/ListRulesOutput.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.ListRulesOutput
+-- 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.Route53RecoveryReadiness.Types.ListRulesOutput 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
+
+-- | Readiness rule information, including the resource type, rule ID, and
+-- rule description.
+--
+-- /See:/ 'newListRulesOutput' smart constructor.
+data ListRulesOutput = ListRulesOutput'
+  { -- | The description of a readiness rule.
+    ruleDescription :: Prelude.Text,
+    -- | The ID for the readiness rule.
+    ruleId :: Prelude.Text,
+    -- | The resource type that the readiness rule applies to.
+    resourceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRulesOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ruleDescription', 'listRulesOutput_ruleDescription' - The description of a readiness rule.
+--
+-- 'ruleId', 'listRulesOutput_ruleId' - The ID for the readiness rule.
+--
+-- 'resourceType', 'listRulesOutput_resourceType' - The resource type that the readiness rule applies to.
+newListRulesOutput ::
+  -- | 'ruleDescription'
+  Prelude.Text ->
+  -- | 'ruleId'
+  Prelude.Text ->
+  -- | 'resourceType'
+  Prelude.Text ->
+  ListRulesOutput
+newListRulesOutput
+  pRuleDescription_
+  pRuleId_
+  pResourceType_ =
+    ListRulesOutput'
+      { ruleDescription =
+          pRuleDescription_,
+        ruleId = pRuleId_,
+        resourceType = pResourceType_
+      }
+
+-- | The description of a readiness rule.
+listRulesOutput_ruleDescription :: Lens.Lens' ListRulesOutput Prelude.Text
+listRulesOutput_ruleDescription = Lens.lens (\ListRulesOutput' {ruleDescription} -> ruleDescription) (\s@ListRulesOutput' {} a -> s {ruleDescription = a} :: ListRulesOutput)
+
+-- | The ID for the readiness rule.
+listRulesOutput_ruleId :: Lens.Lens' ListRulesOutput Prelude.Text
+listRulesOutput_ruleId = Lens.lens (\ListRulesOutput' {ruleId} -> ruleId) (\s@ListRulesOutput' {} a -> s {ruleId = a} :: ListRulesOutput)
+
+-- | The resource type that the readiness rule applies to.
+listRulesOutput_resourceType :: Lens.Lens' ListRulesOutput Prelude.Text
+listRulesOutput_resourceType = Lens.lens (\ListRulesOutput' {resourceType} -> resourceType) (\s@ListRulesOutput' {} a -> s {resourceType = a} :: ListRulesOutput)
+
+instance Data.FromJSON ListRulesOutput where
+  parseJSON =
+    Data.withObject
+      "ListRulesOutput"
+      ( \x ->
+          ListRulesOutput'
+            Prelude.<$> (x Data..: "ruleDescription")
+            Prelude.<*> (x Data..: "ruleId")
+            Prelude.<*> (x Data..: "resourceType")
+      )
+
+instance Prelude.Hashable ListRulesOutput where
+  hashWithSalt _salt ListRulesOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` ruleDescription
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData ListRulesOutput where
+  rnf ListRulesOutput' {..} =
+    Prelude.rnf ruleDescription
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf resourceType
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/Message.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/Message.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/Message.hs
@@ -0,0 +1,66 @@
+{-# 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.Route53RecoveryReadiness.Types.Message
+-- 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.Route53RecoveryReadiness.Types.Message where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information relating to readiness check status.
+--
+-- /See:/ 'newMessage' smart constructor.
+data Message = Message'
+  { -- | The text of a readiness check message.
+    messageText :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Message' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'messageText', 'message_messageText' - The text of a readiness check message.
+newMessage ::
+  Message
+newMessage = Message' {messageText = Prelude.Nothing}
+
+-- | The text of a readiness check message.
+message_messageText :: Lens.Lens' Message (Prelude.Maybe Prelude.Text)
+message_messageText = Lens.lens (\Message' {messageText} -> messageText) (\s@Message' {} a -> s {messageText = a} :: Message)
+
+instance Data.FromJSON Message where
+  parseJSON =
+    Data.withObject
+      "Message"
+      ( \x ->
+          Message' Prelude.<$> (x Data..:? "messageText")
+      )
+
+instance Prelude.Hashable Message where
+  hashWithSalt _salt Message' {..} =
+    _salt `Prelude.hashWithSalt` messageText
+
+instance Prelude.NFData Message where
+  rnf Message' {..} = Prelude.rnf messageText
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/NLBResource.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/NLBResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/NLBResource.hs
@@ -0,0 +1,69 @@
+{-# 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.Route53RecoveryReadiness.Types.NLBResource
+-- 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.Route53RecoveryReadiness.Types.NLBResource 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 Network Load Balancer resource that a DNS target resource points to.
+--
+-- /See:/ 'newNLBResource' smart constructor.
+data NLBResource = NLBResource'
+  { -- | The Network Load Balancer resource Amazon Resource Name (ARN).
+    arn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NLBResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'nLBResource_arn' - The Network Load Balancer resource Amazon Resource Name (ARN).
+newNLBResource ::
+  NLBResource
+newNLBResource = NLBResource' {arn = Prelude.Nothing}
+
+-- | The Network Load Balancer resource Amazon Resource Name (ARN).
+nLBResource_arn :: Lens.Lens' NLBResource (Prelude.Maybe Prelude.Text)
+nLBResource_arn = Lens.lens (\NLBResource' {arn} -> arn) (\s@NLBResource' {} a -> s {arn = a} :: NLBResource)
+
+instance Data.FromJSON NLBResource where
+  parseJSON =
+    Data.withObject
+      "NLBResource"
+      (\x -> NLBResource' Prelude.<$> (x Data..:? "arn"))
+
+instance Prelude.Hashable NLBResource where
+  hashWithSalt _salt NLBResource' {..} =
+    _salt `Prelude.hashWithSalt` arn
+
+instance Prelude.NFData NLBResource where
+  rnf NLBResource' {..} = Prelude.rnf arn
+
+instance Data.ToJSON NLBResource where
+  toJSON NLBResource' {..} =
+    Data.object
+      (Prelude.catMaybes [("arn" Data..=) Prelude.<$> arn])
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/R53ResourceRecord.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/R53ResourceRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/R53ResourceRecord.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.R53ResourceRecord
+-- 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.Route53RecoveryReadiness.Types.R53ResourceRecord 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 Route 53 resource that a DNS target resource record points to.
+--
+-- /See:/ 'newR53ResourceRecord' smart constructor.
+data R53ResourceRecord = R53ResourceRecord'
+  { -- | The DNS target domain name.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The Route 53 Resource Record Set ID.
+    recordSetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'R53ResourceRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'r53ResourceRecord_domainName' - The DNS target domain name.
+--
+-- 'recordSetId', 'r53ResourceRecord_recordSetId' - The Route 53 Resource Record Set ID.
+newR53ResourceRecord ::
+  R53ResourceRecord
+newR53ResourceRecord =
+  R53ResourceRecord'
+    { domainName = Prelude.Nothing,
+      recordSetId = Prelude.Nothing
+    }
+
+-- | The DNS target domain name.
+r53ResourceRecord_domainName :: Lens.Lens' R53ResourceRecord (Prelude.Maybe Prelude.Text)
+r53ResourceRecord_domainName = Lens.lens (\R53ResourceRecord' {domainName} -> domainName) (\s@R53ResourceRecord' {} a -> s {domainName = a} :: R53ResourceRecord)
+
+-- | The Route 53 Resource Record Set ID.
+r53ResourceRecord_recordSetId :: Lens.Lens' R53ResourceRecord (Prelude.Maybe Prelude.Text)
+r53ResourceRecord_recordSetId = Lens.lens (\R53ResourceRecord' {recordSetId} -> recordSetId) (\s@R53ResourceRecord' {} a -> s {recordSetId = a} :: R53ResourceRecord)
+
+instance Data.FromJSON R53ResourceRecord where
+  parseJSON =
+    Data.withObject
+      "R53ResourceRecord"
+      ( \x ->
+          R53ResourceRecord'
+            Prelude.<$> (x Data..:? "domainName")
+            Prelude.<*> (x Data..:? "recordSetId")
+      )
+
+instance Prelude.Hashable R53ResourceRecord where
+  hashWithSalt _salt R53ResourceRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` recordSetId
+
+instance Prelude.NFData R53ResourceRecord where
+  rnf R53ResourceRecord' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf recordSetId
+
+instance Data.ToJSON R53ResourceRecord where
+  toJSON R53ResourceRecord' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("domainName" Data..=) Prelude.<$> domainName,
+            ("recordSetId" Data..=) Prelude.<$> recordSetId
+          ]
+      )
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/Readiness.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/Readiness.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/Readiness.hs
@@ -0,0 +1,82 @@
+{-# 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.Route53RecoveryReadiness.Types.Readiness
+-- 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.Route53RecoveryReadiness.Types.Readiness
+  ( Readiness
+      ( ..,
+        Readiness_NOT_AUTHORIZED,
+        Readiness_NOT_READY,
+        Readiness_READY,
+        Readiness_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The readiness status.
+newtype Readiness = Readiness'
+  { fromReadiness ::
+      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 Readiness_NOT_AUTHORIZED :: Readiness
+pattern Readiness_NOT_AUTHORIZED = Readiness' "NOT_AUTHORIZED"
+
+pattern Readiness_NOT_READY :: Readiness
+pattern Readiness_NOT_READY = Readiness' "NOT_READY"
+
+pattern Readiness_READY :: Readiness
+pattern Readiness_READY = Readiness' "READY"
+
+pattern Readiness_UNKNOWN :: Readiness
+pattern Readiness_UNKNOWN = Readiness' "UNKNOWN"
+
+{-# COMPLETE
+  Readiness_NOT_AUTHORIZED,
+  Readiness_NOT_READY,
+  Readiness_READY,
+  Readiness_UNKNOWN,
+  Readiness'
+  #-}
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/ReadinessCheckOutput.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/ReadinessCheckOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/ReadinessCheckOutput.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckOutput
+-- 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.Route53RecoveryReadiness.Types.ReadinessCheckOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A readiness check.
+--
+-- /See:/ 'newReadinessCheckOutput' smart constructor.
+data ReadinessCheckOutput = ReadinessCheckOutput'
+  { -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) associated with a readiness check.
+    readinessCheckArn :: Prelude.Text,
+    -- | Name of the resource set to be checked.
+    resourceSet :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReadinessCheckOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckName', 'readinessCheckOutput_readinessCheckName' - Name of a readiness check.
+--
+-- 'tags', 'readinessCheckOutput_tags' - Undocumented member.
+--
+-- 'readinessCheckArn', 'readinessCheckOutput_readinessCheckArn' - The Amazon Resource Name (ARN) associated with a readiness check.
+--
+-- 'resourceSet', 'readinessCheckOutput_resourceSet' - Name of the resource set to be checked.
+newReadinessCheckOutput ::
+  -- | 'readinessCheckArn'
+  Prelude.Text ->
+  -- | 'resourceSet'
+  Prelude.Text ->
+  ReadinessCheckOutput
+newReadinessCheckOutput
+  pReadinessCheckArn_
+  pResourceSet_ =
+    ReadinessCheckOutput'
+      { readinessCheckName =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        readinessCheckArn = pReadinessCheckArn_,
+        resourceSet = pResourceSet_
+      }
+
+-- | Name of a readiness check.
+readinessCheckOutput_readinessCheckName :: Lens.Lens' ReadinessCheckOutput (Prelude.Maybe Prelude.Text)
+readinessCheckOutput_readinessCheckName = Lens.lens (\ReadinessCheckOutput' {readinessCheckName} -> readinessCheckName) (\s@ReadinessCheckOutput' {} a -> s {readinessCheckName = a} :: ReadinessCheckOutput)
+
+-- | Undocumented member.
+readinessCheckOutput_tags :: Lens.Lens' ReadinessCheckOutput (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+readinessCheckOutput_tags = Lens.lens (\ReadinessCheckOutput' {tags} -> tags) (\s@ReadinessCheckOutput' {} a -> s {tags = a} :: ReadinessCheckOutput) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) associated with a readiness check.
+readinessCheckOutput_readinessCheckArn :: Lens.Lens' ReadinessCheckOutput Prelude.Text
+readinessCheckOutput_readinessCheckArn = Lens.lens (\ReadinessCheckOutput' {readinessCheckArn} -> readinessCheckArn) (\s@ReadinessCheckOutput' {} a -> s {readinessCheckArn = a} :: ReadinessCheckOutput)
+
+-- | Name of the resource set to be checked.
+readinessCheckOutput_resourceSet :: Lens.Lens' ReadinessCheckOutput Prelude.Text
+readinessCheckOutput_resourceSet = Lens.lens (\ReadinessCheckOutput' {resourceSet} -> resourceSet) (\s@ReadinessCheckOutput' {} a -> s {resourceSet = a} :: ReadinessCheckOutput)
+
+instance Data.FromJSON ReadinessCheckOutput where
+  parseJSON =
+    Data.withObject
+      "ReadinessCheckOutput"
+      ( \x ->
+          ReadinessCheckOutput'
+            Prelude.<$> (x Data..:? "readinessCheckName")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "readinessCheckArn")
+            Prelude.<*> (x Data..: "resourceSet")
+      )
+
+instance Prelude.Hashable ReadinessCheckOutput where
+  hashWithSalt _salt ReadinessCheckOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` readinessCheckName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` readinessCheckArn
+      `Prelude.hashWithSalt` resourceSet
+
+instance Prelude.NFData ReadinessCheckOutput where
+  rnf ReadinessCheckOutput' {..} =
+    Prelude.rnf readinessCheckName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf readinessCheckArn
+      `Prelude.seq` Prelude.rnf resourceSet
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/ReadinessCheckSummary.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/ReadinessCheckSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/ReadinessCheckSummary.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.ReadinessCheckSummary
+-- 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.Route53RecoveryReadiness.Types.ReadinessCheckSummary 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.Route53RecoveryReadiness.Types.Readiness
+
+-- | Summary of all readiness check statuses in a recovery group, paginated
+-- in GetRecoveryGroupReadinessSummary and GetCellReadinessSummary.
+--
+-- /See:/ 'newReadinessCheckSummary' smart constructor.
+data ReadinessCheckSummary = ReadinessCheckSummary'
+  { -- | The readiness status of this readiness check.
+    readiness :: Prelude.Maybe Readiness,
+    -- | The name of a readiness check.
+    readinessCheckName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReadinessCheckSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readiness', 'readinessCheckSummary_readiness' - The readiness status of this readiness check.
+--
+-- 'readinessCheckName', 'readinessCheckSummary_readinessCheckName' - The name of a readiness check.
+newReadinessCheckSummary ::
+  ReadinessCheckSummary
+newReadinessCheckSummary =
+  ReadinessCheckSummary'
+    { readiness = Prelude.Nothing,
+      readinessCheckName = Prelude.Nothing
+    }
+
+-- | The readiness status of this readiness check.
+readinessCheckSummary_readiness :: Lens.Lens' ReadinessCheckSummary (Prelude.Maybe Readiness)
+readinessCheckSummary_readiness = Lens.lens (\ReadinessCheckSummary' {readiness} -> readiness) (\s@ReadinessCheckSummary' {} a -> s {readiness = a} :: ReadinessCheckSummary)
+
+-- | The name of a readiness check.
+readinessCheckSummary_readinessCheckName :: Lens.Lens' ReadinessCheckSummary (Prelude.Maybe Prelude.Text)
+readinessCheckSummary_readinessCheckName = Lens.lens (\ReadinessCheckSummary' {readinessCheckName} -> readinessCheckName) (\s@ReadinessCheckSummary' {} a -> s {readinessCheckName = a} :: ReadinessCheckSummary)
+
+instance Data.FromJSON ReadinessCheckSummary where
+  parseJSON =
+    Data.withObject
+      "ReadinessCheckSummary"
+      ( \x ->
+          ReadinessCheckSummary'
+            Prelude.<$> (x Data..:? "readiness")
+            Prelude.<*> (x Data..:? "readinessCheckName")
+      )
+
+instance Prelude.Hashable ReadinessCheckSummary where
+  hashWithSalt _salt ReadinessCheckSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` readiness
+      `Prelude.hashWithSalt` readinessCheckName
+
+instance Prelude.NFData ReadinessCheckSummary where
+  rnf ReadinessCheckSummary' {..} =
+    Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf readinessCheckName
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/Recommendation.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/Recommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/Recommendation.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.Recommendation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Route53RecoveryReadiness.Types.Recommendation 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
+
+-- | Recommendations that are provided to make an application more recovery
+-- resilient.
+--
+-- /See:/ 'newRecommendation' smart constructor.
+data Recommendation = Recommendation'
+  { -- | Text of the recommendations that are provided to make an application
+    -- more recovery resilient.
+    recommendationText :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Recommendation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recommendationText', 'recommendation_recommendationText' - Text of the recommendations that are provided to make an application
+-- more recovery resilient.
+newRecommendation ::
+  -- | 'recommendationText'
+  Prelude.Text ->
+  Recommendation
+newRecommendation pRecommendationText_ =
+  Recommendation'
+    { recommendationText =
+        pRecommendationText_
+    }
+
+-- | Text of the recommendations that are provided to make an application
+-- more recovery resilient.
+recommendation_recommendationText :: Lens.Lens' Recommendation Prelude.Text
+recommendation_recommendationText = Lens.lens (\Recommendation' {recommendationText} -> recommendationText) (\s@Recommendation' {} a -> s {recommendationText = a} :: Recommendation)
+
+instance Data.FromJSON Recommendation where
+  parseJSON =
+    Data.withObject
+      "Recommendation"
+      ( \x ->
+          Recommendation'
+            Prelude.<$> (x Data..: "recommendationText")
+      )
+
+instance Prelude.Hashable Recommendation where
+  hashWithSalt _salt Recommendation' {..} =
+    _salt `Prelude.hashWithSalt` recommendationText
+
+instance Prelude.NFData Recommendation where
+  rnf Recommendation' {..} =
+    Prelude.rnf recommendationText
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/RecoveryGroupOutput.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/RecoveryGroupOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/RecoveryGroupOutput.hs
@@ -0,0 +1,115 @@
+{-# 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.Route53RecoveryReadiness.Types.RecoveryGroupOutput
+-- 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.Route53RecoveryReadiness.Types.RecoveryGroupOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A representation of the application, typically containing multiple
+-- cells.
+--
+-- /See:/ 'newRecoveryGroupOutput' smart constructor.
+data RecoveryGroupOutput = RecoveryGroupOutput'
+  { -- | The tags associated with the recovery group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) for the recovery group.
+    recoveryGroupArn :: Prelude.Text,
+    -- | The name of the recovery group.
+    recoveryGroupName :: Prelude.Text,
+    -- | A list of a cell\'s Amazon Resource Names (ARNs).
+    cells :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryGroupOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'recoveryGroupOutput_tags' - The tags associated with the recovery group.
+--
+-- 'recoveryGroupArn', 'recoveryGroupOutput_recoveryGroupArn' - The Amazon Resource Name (ARN) for the recovery group.
+--
+-- 'recoveryGroupName', 'recoveryGroupOutput_recoveryGroupName' - The name of the recovery group.
+--
+-- 'cells', 'recoveryGroupOutput_cells' - A list of a cell\'s Amazon Resource Names (ARNs).
+newRecoveryGroupOutput ::
+  -- | 'recoveryGroupArn'
+  Prelude.Text ->
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  RecoveryGroupOutput
+newRecoveryGroupOutput
+  pRecoveryGroupArn_
+  pRecoveryGroupName_ =
+    RecoveryGroupOutput'
+      { tags = Prelude.Nothing,
+        recoveryGroupArn = pRecoveryGroupArn_,
+        recoveryGroupName = pRecoveryGroupName_,
+        cells = Prelude.mempty
+      }
+
+-- | The tags associated with the recovery group.
+recoveryGroupOutput_tags :: Lens.Lens' RecoveryGroupOutput (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+recoveryGroupOutput_tags = Lens.lens (\RecoveryGroupOutput' {tags} -> tags) (\s@RecoveryGroupOutput' {} a -> s {tags = a} :: RecoveryGroupOutput) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the recovery group.
+recoveryGroupOutput_recoveryGroupArn :: Lens.Lens' RecoveryGroupOutput Prelude.Text
+recoveryGroupOutput_recoveryGroupArn = Lens.lens (\RecoveryGroupOutput' {recoveryGroupArn} -> recoveryGroupArn) (\s@RecoveryGroupOutput' {} a -> s {recoveryGroupArn = a} :: RecoveryGroupOutput)
+
+-- | The name of the recovery group.
+recoveryGroupOutput_recoveryGroupName :: Lens.Lens' RecoveryGroupOutput Prelude.Text
+recoveryGroupOutput_recoveryGroupName = Lens.lens (\RecoveryGroupOutput' {recoveryGroupName} -> recoveryGroupName) (\s@RecoveryGroupOutput' {} a -> s {recoveryGroupName = a} :: RecoveryGroupOutput)
+
+-- | A list of a cell\'s Amazon Resource Names (ARNs).
+recoveryGroupOutput_cells :: Lens.Lens' RecoveryGroupOutput [Prelude.Text]
+recoveryGroupOutput_cells = Lens.lens (\RecoveryGroupOutput' {cells} -> cells) (\s@RecoveryGroupOutput' {} a -> s {cells = a} :: RecoveryGroupOutput) Prelude.. Lens.coerced
+
+instance Data.FromJSON RecoveryGroupOutput where
+  parseJSON =
+    Data.withObject
+      "RecoveryGroupOutput"
+      ( \x ->
+          RecoveryGroupOutput'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "recoveryGroupArn")
+            Prelude.<*> (x Data..: "recoveryGroupName")
+            Prelude.<*> (x Data..:? "cells" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable RecoveryGroupOutput where
+  hashWithSalt _salt RecoveryGroupOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` recoveryGroupArn
+      `Prelude.hashWithSalt` recoveryGroupName
+      `Prelude.hashWithSalt` cells
+
+instance Prelude.NFData RecoveryGroupOutput where
+  rnf RecoveryGroupOutput' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf recoveryGroupArn
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+      `Prelude.seq` Prelude.rnf cells
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/Resource.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/Resource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/Resource.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.Resource
+-- 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.Route53RecoveryReadiness.Types.Resource 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.Route53RecoveryReadiness.Types.DNSTargetResource
+
+-- | The resource element of a resource set.
+--
+-- /See:/ 'newResource' smart constructor.
+data Resource = Resource'
+  { -- | The component identifier of the resource, generated when DNS target
+    -- resource is used.
+    componentId :: Prelude.Maybe Prelude.Text,
+    -- | The DNS target resource.
+    dnsTargetResource :: Prelude.Maybe DNSTargetResource,
+    -- | A list of recovery group Amazon Resource Names (ARNs) and cell ARNs that
+    -- this resource is contained within.
+    readinessScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the Amazon Web Services resource.
+    resourceArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Resource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentId', 'resource_componentId' - The component identifier of the resource, generated when DNS target
+-- resource is used.
+--
+-- 'dnsTargetResource', 'resource_dnsTargetResource' - The DNS target resource.
+--
+-- 'readinessScopes', 'resource_readinessScopes' - A list of recovery group Amazon Resource Names (ARNs) and cell ARNs that
+-- this resource is contained within.
+--
+-- 'resourceArn', 'resource_resourceArn' - The Amazon Resource Name (ARN) of the Amazon Web Services resource.
+newResource ::
+  Resource
+newResource =
+  Resource'
+    { componentId = Prelude.Nothing,
+      dnsTargetResource = Prelude.Nothing,
+      readinessScopes = Prelude.Nothing,
+      resourceArn = Prelude.Nothing
+    }
+
+-- | The component identifier of the resource, generated when DNS target
+-- resource is used.
+resource_componentId :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_componentId = Lens.lens (\Resource' {componentId} -> componentId) (\s@Resource' {} a -> s {componentId = a} :: Resource)
+
+-- | The DNS target resource.
+resource_dnsTargetResource :: Lens.Lens' Resource (Prelude.Maybe DNSTargetResource)
+resource_dnsTargetResource = Lens.lens (\Resource' {dnsTargetResource} -> dnsTargetResource) (\s@Resource' {} a -> s {dnsTargetResource = a} :: Resource)
+
+-- | A list of recovery group Amazon Resource Names (ARNs) and cell ARNs that
+-- this resource is contained within.
+resource_readinessScopes :: Lens.Lens' Resource (Prelude.Maybe [Prelude.Text])
+resource_readinessScopes = Lens.lens (\Resource' {readinessScopes} -> readinessScopes) (\s@Resource' {} a -> s {readinessScopes = a} :: Resource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Amazon Web Services resource.
+resource_resourceArn :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_resourceArn = Lens.lens (\Resource' {resourceArn} -> resourceArn) (\s@Resource' {} a -> s {resourceArn = a} :: Resource)
+
+instance Data.FromJSON Resource where
+  parseJSON =
+    Data.withObject
+      "Resource"
+      ( \x ->
+          Resource'
+            Prelude.<$> (x Data..:? "componentId")
+            Prelude.<*> (x Data..:? "dnsTargetResource")
+            Prelude.<*> ( x
+                            Data..:? "readinessScopes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "resourceArn")
+      )
+
+instance Prelude.Hashable Resource where
+  hashWithSalt _salt Resource' {..} =
+    _salt
+      `Prelude.hashWithSalt` componentId
+      `Prelude.hashWithSalt` dnsTargetResource
+      `Prelude.hashWithSalt` readinessScopes
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData Resource where
+  rnf Resource' {..} =
+    Prelude.rnf componentId
+      `Prelude.seq` Prelude.rnf dnsTargetResource
+      `Prelude.seq` Prelude.rnf readinessScopes
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToJSON Resource where
+  toJSON Resource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("componentId" Data..=) Prelude.<$> componentId,
+            ("dnsTargetResource" Data..=)
+              Prelude.<$> dnsTargetResource,
+            ("readinessScopes" Data..=)
+              Prelude.<$> readinessScopes,
+            ("resourceArn" Data..=) Prelude.<$> resourceArn
+          ]
+      )
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/ResourceResult.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/ResourceResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/ResourceResult.hs
@@ -0,0 +1,118 @@
+{-# 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.Route53RecoveryReadiness.Types.ResourceResult
+-- 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.Route53RecoveryReadiness.Types.ResourceResult 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.Route53RecoveryReadiness.Types.Readiness
+
+-- | The result of a successful Resource request, with status for an
+-- individual resource.
+--
+-- /See:/ 'newResourceResult' smart constructor.
+data ResourceResult = ResourceResult'
+  { -- | The component id of the resource.
+    componentId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The readiness of a resource.
+    readiness :: Readiness,
+    -- | The time (UTC) that the resource was last checked for readiness, in
+    -- ISO-8601 format.
+    lastCheckedTimestamp :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentId', 'resourceResult_componentId' - The component id of the resource.
+--
+-- 'resourceArn', 'resourceResult_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'readiness', 'resourceResult_readiness' - The readiness of a resource.
+--
+-- 'lastCheckedTimestamp', 'resourceResult_lastCheckedTimestamp' - The time (UTC) that the resource was last checked for readiness, in
+-- ISO-8601 format.
+newResourceResult ::
+  -- | 'readiness'
+  Readiness ->
+  -- | 'lastCheckedTimestamp'
+  Prelude.UTCTime ->
+  ResourceResult
+newResourceResult pReadiness_ pLastCheckedTimestamp_ =
+  ResourceResult'
+    { componentId = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      readiness = pReadiness_,
+      lastCheckedTimestamp =
+        Data._Time Lens.# pLastCheckedTimestamp_
+    }
+
+-- | The component id of the resource.
+resourceResult_componentId :: Lens.Lens' ResourceResult (Prelude.Maybe Prelude.Text)
+resourceResult_componentId = Lens.lens (\ResourceResult' {componentId} -> componentId) (\s@ResourceResult' {} a -> s {componentId = a} :: ResourceResult)
+
+-- | The Amazon Resource Name (ARN) of the resource.
+resourceResult_resourceArn :: Lens.Lens' ResourceResult (Prelude.Maybe Prelude.Text)
+resourceResult_resourceArn = Lens.lens (\ResourceResult' {resourceArn} -> resourceArn) (\s@ResourceResult' {} a -> s {resourceArn = a} :: ResourceResult)
+
+-- | The readiness of a resource.
+resourceResult_readiness :: Lens.Lens' ResourceResult Readiness
+resourceResult_readiness = Lens.lens (\ResourceResult' {readiness} -> readiness) (\s@ResourceResult' {} a -> s {readiness = a} :: ResourceResult)
+
+-- | The time (UTC) that the resource was last checked for readiness, in
+-- ISO-8601 format.
+resourceResult_lastCheckedTimestamp :: Lens.Lens' ResourceResult Prelude.UTCTime
+resourceResult_lastCheckedTimestamp = Lens.lens (\ResourceResult' {lastCheckedTimestamp} -> lastCheckedTimestamp) (\s@ResourceResult' {} a -> s {lastCheckedTimestamp = a} :: ResourceResult) Prelude.. Data._Time
+
+instance Data.FromJSON ResourceResult where
+  parseJSON =
+    Data.withObject
+      "ResourceResult"
+      ( \x ->
+          ResourceResult'
+            Prelude.<$> (x Data..:? "componentId")
+            Prelude.<*> (x Data..:? "resourceArn")
+            Prelude.<*> (x Data..: "readiness")
+            Prelude.<*> (x Data..: "lastCheckedTimestamp")
+      )
+
+instance Prelude.Hashable ResourceResult where
+  hashWithSalt _salt ResourceResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` componentId
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` readiness
+      `Prelude.hashWithSalt` lastCheckedTimestamp
+
+instance Prelude.NFData ResourceResult where
+  rnf ResourceResult' {..} =
+    Prelude.rnf componentId
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf lastCheckedTimestamp
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/ResourceSetOutput.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/ResourceSetOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/ResourceSetOutput.hs
@@ -0,0 +1,162 @@
+{-# 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.Route53RecoveryReadiness.Types.ResourceSetOutput
+-- 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.Route53RecoveryReadiness.Types.ResourceSetOutput 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.Route53RecoveryReadiness.Types.Resource
+
+-- | A collection of resources of the same type.
+--
+-- /See:/ 'newResourceSetOutput' smart constructor.
+data ResourceSetOutput = ResourceSetOutput'
+  { tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The resource type of the resources in the resource set. Enter one of the
+    -- following values for resource type:
+    --
+    -- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+    -- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+    -- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+    -- AWS::ElasticLoadBalancing::LoadBalancer,
+    -- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+    -- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+    -- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+    -- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+    -- AWS::Route53RecoveryReadiness::DNSTargetResource
+    resourceSetType :: Prelude.Text,
+    -- | The name of the resource set.
+    resourceSetName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the resource set.
+    resourceSetArn :: Prelude.Text,
+    -- | A list of resource objects.
+    resources :: [Resource]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceSetOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'resourceSetOutput_tags' - Undocumented member.
+--
+-- 'resourceSetType', 'resourceSetOutput_resourceSetType' - The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+--
+-- 'resourceSetName', 'resourceSetOutput_resourceSetName' - The name of the resource set.
+--
+-- 'resourceSetArn', 'resourceSetOutput_resourceSetArn' - The Amazon Resource Name (ARN) for the resource set.
+--
+-- 'resources', 'resourceSetOutput_resources' - A list of resource objects.
+newResourceSetOutput ::
+  -- | 'resourceSetType'
+  Prelude.Text ->
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  -- | 'resourceSetArn'
+  Prelude.Text ->
+  ResourceSetOutput
+newResourceSetOutput
+  pResourceSetType_
+  pResourceSetName_
+  pResourceSetArn_ =
+    ResourceSetOutput'
+      { tags = Prelude.Nothing,
+        resourceSetType = pResourceSetType_,
+        resourceSetName = pResourceSetName_,
+        resourceSetArn = pResourceSetArn_,
+        resources = Prelude.mempty
+      }
+
+-- | Undocumented member.
+resourceSetOutput_tags :: Lens.Lens' ResourceSetOutput (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+resourceSetOutput_tags = Lens.lens (\ResourceSetOutput' {tags} -> tags) (\s@ResourceSetOutput' {} a -> s {tags = a} :: ResourceSetOutput) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+resourceSetOutput_resourceSetType :: Lens.Lens' ResourceSetOutput Prelude.Text
+resourceSetOutput_resourceSetType = Lens.lens (\ResourceSetOutput' {resourceSetType} -> resourceSetType) (\s@ResourceSetOutput' {} a -> s {resourceSetType = a} :: ResourceSetOutput)
+
+-- | The name of the resource set.
+resourceSetOutput_resourceSetName :: Lens.Lens' ResourceSetOutput Prelude.Text
+resourceSetOutput_resourceSetName = Lens.lens (\ResourceSetOutput' {resourceSetName} -> resourceSetName) (\s@ResourceSetOutput' {} a -> s {resourceSetName = a} :: ResourceSetOutput)
+
+-- | The Amazon Resource Name (ARN) for the resource set.
+resourceSetOutput_resourceSetArn :: Lens.Lens' ResourceSetOutput Prelude.Text
+resourceSetOutput_resourceSetArn = Lens.lens (\ResourceSetOutput' {resourceSetArn} -> resourceSetArn) (\s@ResourceSetOutput' {} a -> s {resourceSetArn = a} :: ResourceSetOutput)
+
+-- | A list of resource objects.
+resourceSetOutput_resources :: Lens.Lens' ResourceSetOutput [Resource]
+resourceSetOutput_resources = Lens.lens (\ResourceSetOutput' {resources} -> resources) (\s@ResourceSetOutput' {} a -> s {resources = a} :: ResourceSetOutput) Prelude.. Lens.coerced
+
+instance Data.FromJSON ResourceSetOutput where
+  parseJSON =
+    Data.withObject
+      "ResourceSetOutput"
+      ( \x ->
+          ResourceSetOutput'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "resourceSetType")
+            Prelude.<*> (x Data..: "resourceSetName")
+            Prelude.<*> (x Data..: "resourceSetArn")
+            Prelude.<*> (x Data..:? "resources" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ResourceSetOutput where
+  hashWithSalt _salt ResourceSetOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` resourceSetType
+      `Prelude.hashWithSalt` resourceSetName
+      `Prelude.hashWithSalt` resourceSetArn
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData ResourceSetOutput where
+  rnf ResourceSetOutput' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf resourceSetType
+      `Prelude.seq` Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf resourceSetArn
+      `Prelude.seq` Prelude.rnf resources
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/RuleResult.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/RuleResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/RuleResult.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.RuleResult
+-- 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.Route53RecoveryReadiness.Types.RuleResult 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.Route53RecoveryReadiness.Types.Message
+import Amazonka.Route53RecoveryReadiness.Types.Readiness
+
+-- | The result of a successful Rule request, with status for an individual
+-- rule.
+--
+-- /See:/ 'newRuleResult' smart constructor.
+data RuleResult = RuleResult'
+  { -- | Details about the resource\'s readiness.
+    messages :: [Message],
+    -- | The readiness at rule level.
+    readiness :: Readiness,
+    -- | The identifier of the rule.
+    ruleId :: Prelude.Text,
+    -- | The time the resource was last checked for readiness, in ISO-8601
+    -- format, UTC.
+    lastCheckedTimestamp :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RuleResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'messages', 'ruleResult_messages' - Details about the resource\'s readiness.
+--
+-- 'readiness', 'ruleResult_readiness' - The readiness at rule level.
+--
+-- 'ruleId', 'ruleResult_ruleId' - The identifier of the rule.
+--
+-- 'lastCheckedTimestamp', 'ruleResult_lastCheckedTimestamp' - The time the resource was last checked for readiness, in ISO-8601
+-- format, UTC.
+newRuleResult ::
+  -- | 'readiness'
+  Readiness ->
+  -- | 'ruleId'
+  Prelude.Text ->
+  -- | 'lastCheckedTimestamp'
+  Prelude.UTCTime ->
+  RuleResult
+newRuleResult
+  pReadiness_
+  pRuleId_
+  pLastCheckedTimestamp_ =
+    RuleResult'
+      { messages = Prelude.mempty,
+        readiness = pReadiness_,
+        ruleId = pRuleId_,
+        lastCheckedTimestamp =
+          Data._Time Lens.# pLastCheckedTimestamp_
+      }
+
+-- | Details about the resource\'s readiness.
+ruleResult_messages :: Lens.Lens' RuleResult [Message]
+ruleResult_messages = Lens.lens (\RuleResult' {messages} -> messages) (\s@RuleResult' {} a -> s {messages = a} :: RuleResult) Prelude.. Lens.coerced
+
+-- | The readiness at rule level.
+ruleResult_readiness :: Lens.Lens' RuleResult Readiness
+ruleResult_readiness = Lens.lens (\RuleResult' {readiness} -> readiness) (\s@RuleResult' {} a -> s {readiness = a} :: RuleResult)
+
+-- | The identifier of the rule.
+ruleResult_ruleId :: Lens.Lens' RuleResult Prelude.Text
+ruleResult_ruleId = Lens.lens (\RuleResult' {ruleId} -> ruleId) (\s@RuleResult' {} a -> s {ruleId = a} :: RuleResult)
+
+-- | The time the resource was last checked for readiness, in ISO-8601
+-- format, UTC.
+ruleResult_lastCheckedTimestamp :: Lens.Lens' RuleResult Prelude.UTCTime
+ruleResult_lastCheckedTimestamp = Lens.lens (\RuleResult' {lastCheckedTimestamp} -> lastCheckedTimestamp) (\s@RuleResult' {} a -> s {lastCheckedTimestamp = a} :: RuleResult) Prelude.. Data._Time
+
+instance Data.FromJSON RuleResult where
+  parseJSON =
+    Data.withObject
+      "RuleResult"
+      ( \x ->
+          RuleResult'
+            Prelude.<$> (x Data..:? "messages" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "readiness")
+            Prelude.<*> (x Data..: "ruleId")
+            Prelude.<*> (x Data..: "lastCheckedTimestamp")
+      )
+
+instance Prelude.Hashable RuleResult where
+  hashWithSalt _salt RuleResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` messages
+      `Prelude.hashWithSalt` readiness
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` lastCheckedTimestamp
+
+instance Prelude.NFData RuleResult where
+  rnf RuleResult' {..} =
+    Prelude.rnf messages
+      `Prelude.seq` Prelude.rnf readiness
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf lastCheckedTimestamp
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Types/TargetResource.hs b/gen/Amazonka/Route53RecoveryReadiness/Types/TargetResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/Types/TargetResource.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.Types.TargetResource
+-- 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.Route53RecoveryReadiness.Types.TargetResource 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.Route53RecoveryReadiness.Types.NLBResource
+import Amazonka.Route53RecoveryReadiness.Types.R53ResourceRecord
+
+-- | The target resource that the Route 53 record points to.
+--
+-- /See:/ 'newTargetResource' smart constructor.
+data TargetResource = TargetResource'
+  { -- | The Network Load Balancer Resource.
+    nLBResource :: Prelude.Maybe NLBResource,
+    -- | The Route 53 resource.
+    r53Resource :: Prelude.Maybe R53ResourceRecord
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nLBResource', 'targetResource_nLBResource' - The Network Load Balancer Resource.
+--
+-- 'r53Resource', 'targetResource_r53Resource' - The Route 53 resource.
+newTargetResource ::
+  TargetResource
+newTargetResource =
+  TargetResource'
+    { nLBResource = Prelude.Nothing,
+      r53Resource = Prelude.Nothing
+    }
+
+-- | The Network Load Balancer Resource.
+targetResource_nLBResource :: Lens.Lens' TargetResource (Prelude.Maybe NLBResource)
+targetResource_nLBResource = Lens.lens (\TargetResource' {nLBResource} -> nLBResource) (\s@TargetResource' {} a -> s {nLBResource = a} :: TargetResource)
+
+-- | The Route 53 resource.
+targetResource_r53Resource :: Lens.Lens' TargetResource (Prelude.Maybe R53ResourceRecord)
+targetResource_r53Resource = Lens.lens (\TargetResource' {r53Resource} -> r53Resource) (\s@TargetResource' {} a -> s {r53Resource = a} :: TargetResource)
+
+instance Data.FromJSON TargetResource where
+  parseJSON =
+    Data.withObject
+      "TargetResource"
+      ( \x ->
+          TargetResource'
+            Prelude.<$> (x Data..:? "nLBResource")
+            Prelude.<*> (x Data..:? "r53Resource")
+      )
+
+instance Prelude.Hashable TargetResource where
+  hashWithSalt _salt TargetResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` nLBResource
+      `Prelude.hashWithSalt` r53Resource
+
+instance Prelude.NFData TargetResource where
+  rnf TargetResource' {..} =
+    Prelude.rnf nLBResource
+      `Prelude.seq` Prelude.rnf r53Resource
+
+instance Data.ToJSON TargetResource where
+  toJSON TargetResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("nLBResource" Data..=) Prelude.<$> nLBResource,
+            ("r53Resource" Data..=) Prelude.<$> r53Resource
+          ]
+      )
diff --git a/gen/Amazonka/Route53RecoveryReadiness/UntagResource.hs b/gen/Amazonka/Route53RecoveryReadiness/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/UntagResource.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.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 a tag from a resource.
+module Amazonka.Route53RecoveryReadiness.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The keys for tags you add to resources.
+    tagKeys :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for a resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys for tags you add to resources.
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) for a resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { tagKeys = Prelude.mempty,
+      resourceArn = pResourceArn_
+    }
+
+-- | The keys for tags you add to resources.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for a resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` tagKeys
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf tagKeys
+      `Prelude.seq` Prelude.rnf resourceArn
+
+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'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Route53RecoveryReadiness/UpdateCell.hs b/gen/Amazonka/Route53RecoveryReadiness/UpdateCell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/UpdateCell.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.Route53RecoveryReadiness.UpdateCell
+-- 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 cell to replace the list of nested cells with a new list of
+-- nested cells.
+module Amazonka.Route53RecoveryReadiness.UpdateCell
+  ( -- * Creating a Request
+    UpdateCell (..),
+    newUpdateCell,
+
+    -- * Request Lenses
+    updateCell_cellName,
+    updateCell_cells,
+
+    -- * Destructuring the Response
+    UpdateCellResponse (..),
+    newUpdateCellResponse,
+
+    -- * Response Lenses
+    updateCellResponse_cellArn,
+    updateCellResponse_cellName,
+    updateCellResponse_cells,
+    updateCellResponse_parentReadinessScopes,
+    updateCellResponse_tags,
+    updateCellResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | /See:/ 'newUpdateCell' smart constructor.
+data UpdateCell = UpdateCell'
+  { -- | The name of the cell.
+    cellName :: Prelude.Text,
+    -- | A list of cell Amazon Resource Names (ARNs), which completely replaces
+    -- the previous list.
+    cells :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCell' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellName', 'updateCell_cellName' - The name of the cell.
+--
+-- 'cells', 'updateCell_cells' - A list of cell Amazon Resource Names (ARNs), which completely replaces
+-- the previous list.
+newUpdateCell ::
+  -- | 'cellName'
+  Prelude.Text ->
+  UpdateCell
+newUpdateCell pCellName_ =
+  UpdateCell'
+    { cellName = pCellName_,
+      cells = Prelude.mempty
+    }
+
+-- | The name of the cell.
+updateCell_cellName :: Lens.Lens' UpdateCell Prelude.Text
+updateCell_cellName = Lens.lens (\UpdateCell' {cellName} -> cellName) (\s@UpdateCell' {} a -> s {cellName = a} :: UpdateCell)
+
+-- | A list of cell Amazon Resource Names (ARNs), which completely replaces
+-- the previous list.
+updateCell_cells :: Lens.Lens' UpdateCell [Prelude.Text]
+updateCell_cells = Lens.lens (\UpdateCell' {cells} -> cells) (\s@UpdateCell' {} a -> s {cells = a} :: UpdateCell) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateCell where
+  type AWSResponse UpdateCell = UpdateCellResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateCellResponse'
+            Prelude.<$> (x Data..?> "cellArn")
+            Prelude.<*> (x Data..?> "cellName")
+            Prelude.<*> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "parentReadinessScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateCell where
+  hashWithSalt _salt UpdateCell' {..} =
+    _salt
+      `Prelude.hashWithSalt` cellName
+      `Prelude.hashWithSalt` cells
+
+instance Prelude.NFData UpdateCell where
+  rnf UpdateCell' {..} =
+    Prelude.rnf cellName
+      `Prelude.seq` Prelude.rnf cells
+
+instance Data.ToHeaders UpdateCell where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCell where
+  toJSON UpdateCell' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("cells" Data..= cells)]
+      )
+
+instance Data.ToPath UpdateCell where
+  toPath UpdateCell' {..} =
+    Prelude.mconcat ["/cells/", Data.toBS cellName]
+
+instance Data.ToQuery UpdateCell where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCellResponse' smart constructor.
+data UpdateCellResponse = UpdateCellResponse'
+  { -- | The Amazon Resource Name (ARN) for the cell.
+    cellArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the cell.
+    cellName :: Prelude.Maybe Prelude.Text,
+    -- | A list of cell ARNs.
+    cells :: Prelude.Maybe [Prelude.Text],
+    -- | The readiness scope for the cell, which can be a cell Amazon Resource
+    -- Name (ARN) or a recovery group ARN. This is a list but currently can
+    -- have only one element.
+    parentReadinessScopes :: Prelude.Maybe [Prelude.Text],
+    -- | Tags on the resources.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCellResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cellArn', 'updateCellResponse_cellArn' - The Amazon Resource Name (ARN) for the cell.
+--
+-- 'cellName', 'updateCellResponse_cellName' - The name of the cell.
+--
+-- 'cells', 'updateCellResponse_cells' - A list of cell ARNs.
+--
+-- 'parentReadinessScopes', 'updateCellResponse_parentReadinessScopes' - The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+--
+-- 'tags', 'updateCellResponse_tags' - Tags on the resources.
+--
+-- 'httpStatus', 'updateCellResponse_httpStatus' - The response's http status code.
+newUpdateCellResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCellResponse
+newUpdateCellResponse pHttpStatus_ =
+  UpdateCellResponse'
+    { cellArn = Prelude.Nothing,
+      cellName = Prelude.Nothing,
+      cells = Prelude.Nothing,
+      parentReadinessScopes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the cell.
+updateCellResponse_cellArn :: Lens.Lens' UpdateCellResponse (Prelude.Maybe Prelude.Text)
+updateCellResponse_cellArn = Lens.lens (\UpdateCellResponse' {cellArn} -> cellArn) (\s@UpdateCellResponse' {} a -> s {cellArn = a} :: UpdateCellResponse)
+
+-- | The name of the cell.
+updateCellResponse_cellName :: Lens.Lens' UpdateCellResponse (Prelude.Maybe Prelude.Text)
+updateCellResponse_cellName = Lens.lens (\UpdateCellResponse' {cellName} -> cellName) (\s@UpdateCellResponse' {} a -> s {cellName = a} :: UpdateCellResponse)
+
+-- | A list of cell ARNs.
+updateCellResponse_cells :: Lens.Lens' UpdateCellResponse (Prelude.Maybe [Prelude.Text])
+updateCellResponse_cells = Lens.lens (\UpdateCellResponse' {cells} -> cells) (\s@UpdateCellResponse' {} a -> s {cells = a} :: UpdateCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The readiness scope for the cell, which can be a cell Amazon Resource
+-- Name (ARN) or a recovery group ARN. This is a list but currently can
+-- have only one element.
+updateCellResponse_parentReadinessScopes :: Lens.Lens' UpdateCellResponse (Prelude.Maybe [Prelude.Text])
+updateCellResponse_parentReadinessScopes = Lens.lens (\UpdateCellResponse' {parentReadinessScopes} -> parentReadinessScopes) (\s@UpdateCellResponse' {} a -> s {parentReadinessScopes = a} :: UpdateCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags on the resources.
+updateCellResponse_tags :: Lens.Lens' UpdateCellResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateCellResponse_tags = Lens.lens (\UpdateCellResponse' {tags} -> tags) (\s@UpdateCellResponse' {} a -> s {tags = a} :: UpdateCellResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateCellResponse_httpStatus :: Lens.Lens' UpdateCellResponse Prelude.Int
+updateCellResponse_httpStatus = Lens.lens (\UpdateCellResponse' {httpStatus} -> httpStatus) (\s@UpdateCellResponse' {} a -> s {httpStatus = a} :: UpdateCellResponse)
+
+instance Prelude.NFData UpdateCellResponse where
+  rnf UpdateCellResponse' {..} =
+    Prelude.rnf cellArn
+      `Prelude.seq` Prelude.rnf cellName
+      `Prelude.seq` Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf parentReadinessScopes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/UpdateReadinessCheck.hs b/gen/Amazonka/Route53RecoveryReadiness/UpdateReadinessCheck.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/UpdateReadinessCheck.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Route53RecoveryReadiness.UpdateReadinessCheck
+-- 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 readiness check.
+module Amazonka.Route53RecoveryReadiness.UpdateReadinessCheck
+  ( -- * Creating a Request
+    UpdateReadinessCheck (..),
+    newUpdateReadinessCheck,
+
+    -- * Request Lenses
+    updateReadinessCheck_readinessCheckName,
+    updateReadinessCheck_resourceSetName,
+
+    -- * Destructuring the Response
+    UpdateReadinessCheckResponse (..),
+    newUpdateReadinessCheckResponse,
+
+    -- * Response Lenses
+    updateReadinessCheckResponse_readinessCheckArn,
+    updateReadinessCheckResponse_readinessCheckName,
+    updateReadinessCheckResponse_resourceSet,
+    updateReadinessCheckResponse_tags,
+    updateReadinessCheckResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | Name of a readiness check to describe.
+--
+-- /See:/ 'newUpdateReadinessCheck' smart constructor.
+data UpdateReadinessCheck = UpdateReadinessCheck'
+  { -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Text,
+    -- | The name of the resource set to be checked.
+    resourceSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateReadinessCheck' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckName', 'updateReadinessCheck_readinessCheckName' - Name of a readiness check.
+--
+-- 'resourceSetName', 'updateReadinessCheck_resourceSetName' - The name of the resource set to be checked.
+newUpdateReadinessCheck ::
+  -- | 'readinessCheckName'
+  Prelude.Text ->
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  UpdateReadinessCheck
+newUpdateReadinessCheck
+  pReadinessCheckName_
+  pResourceSetName_ =
+    UpdateReadinessCheck'
+      { readinessCheckName =
+          pReadinessCheckName_,
+        resourceSetName = pResourceSetName_
+      }
+
+-- | Name of a readiness check.
+updateReadinessCheck_readinessCheckName :: Lens.Lens' UpdateReadinessCheck Prelude.Text
+updateReadinessCheck_readinessCheckName = Lens.lens (\UpdateReadinessCheck' {readinessCheckName} -> readinessCheckName) (\s@UpdateReadinessCheck' {} a -> s {readinessCheckName = a} :: UpdateReadinessCheck)
+
+-- | The name of the resource set to be checked.
+updateReadinessCheck_resourceSetName :: Lens.Lens' UpdateReadinessCheck Prelude.Text
+updateReadinessCheck_resourceSetName = Lens.lens (\UpdateReadinessCheck' {resourceSetName} -> resourceSetName) (\s@UpdateReadinessCheck' {} a -> s {resourceSetName = a} :: UpdateReadinessCheck)
+
+instance Core.AWSRequest UpdateReadinessCheck where
+  type
+    AWSResponse UpdateReadinessCheck =
+      UpdateReadinessCheckResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateReadinessCheckResponse'
+            Prelude.<$> (x Data..?> "readinessCheckArn")
+            Prelude.<*> (x Data..?> "readinessCheckName")
+            Prelude.<*> (x Data..?> "resourceSet")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateReadinessCheck where
+  hashWithSalt _salt UpdateReadinessCheck' {..} =
+    _salt
+      `Prelude.hashWithSalt` readinessCheckName
+      `Prelude.hashWithSalt` resourceSetName
+
+instance Prelude.NFData UpdateReadinessCheck where
+  rnf UpdateReadinessCheck' {..} =
+    Prelude.rnf readinessCheckName
+      `Prelude.seq` Prelude.rnf resourceSetName
+
+instance Data.ToHeaders UpdateReadinessCheck where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateReadinessCheck where
+  toJSON UpdateReadinessCheck' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("resourceSetName" Data..= resourceSetName)
+          ]
+      )
+
+instance Data.ToPath UpdateReadinessCheck where
+  toPath UpdateReadinessCheck' {..} =
+    Prelude.mconcat
+      ["/readinesschecks/", Data.toBS readinessCheckName]
+
+instance Data.ToQuery UpdateReadinessCheck where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateReadinessCheckResponse' smart constructor.
+data UpdateReadinessCheckResponse = UpdateReadinessCheckResponse'
+  { -- | The Amazon Resource Name (ARN) associated with a readiness check.
+    readinessCheckArn :: Prelude.Maybe Prelude.Text,
+    -- | Name of a readiness check.
+    readinessCheckName :: Prelude.Maybe Prelude.Text,
+    -- | Name of the resource set to be checked.
+    resourceSet :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateReadinessCheckResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'readinessCheckArn', 'updateReadinessCheckResponse_readinessCheckArn' - The Amazon Resource Name (ARN) associated with a readiness check.
+--
+-- 'readinessCheckName', 'updateReadinessCheckResponse_readinessCheckName' - Name of a readiness check.
+--
+-- 'resourceSet', 'updateReadinessCheckResponse_resourceSet' - Name of the resource set to be checked.
+--
+-- 'tags', 'updateReadinessCheckResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'updateReadinessCheckResponse_httpStatus' - The response's http status code.
+newUpdateReadinessCheckResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateReadinessCheckResponse
+newUpdateReadinessCheckResponse pHttpStatus_ =
+  UpdateReadinessCheckResponse'
+    { readinessCheckArn =
+        Prelude.Nothing,
+      readinessCheckName = Prelude.Nothing,
+      resourceSet = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) associated with a readiness check.
+updateReadinessCheckResponse_readinessCheckArn :: Lens.Lens' UpdateReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+updateReadinessCheckResponse_readinessCheckArn = Lens.lens (\UpdateReadinessCheckResponse' {readinessCheckArn} -> readinessCheckArn) (\s@UpdateReadinessCheckResponse' {} a -> s {readinessCheckArn = a} :: UpdateReadinessCheckResponse)
+
+-- | Name of a readiness check.
+updateReadinessCheckResponse_readinessCheckName :: Lens.Lens' UpdateReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+updateReadinessCheckResponse_readinessCheckName = Lens.lens (\UpdateReadinessCheckResponse' {readinessCheckName} -> readinessCheckName) (\s@UpdateReadinessCheckResponse' {} a -> s {readinessCheckName = a} :: UpdateReadinessCheckResponse)
+
+-- | Name of the resource set to be checked.
+updateReadinessCheckResponse_resourceSet :: Lens.Lens' UpdateReadinessCheckResponse (Prelude.Maybe Prelude.Text)
+updateReadinessCheckResponse_resourceSet = Lens.lens (\UpdateReadinessCheckResponse' {resourceSet} -> resourceSet) (\s@UpdateReadinessCheckResponse' {} a -> s {resourceSet = a} :: UpdateReadinessCheckResponse)
+
+-- | Undocumented member.
+updateReadinessCheckResponse_tags :: Lens.Lens' UpdateReadinessCheckResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateReadinessCheckResponse_tags = Lens.lens (\UpdateReadinessCheckResponse' {tags} -> tags) (\s@UpdateReadinessCheckResponse' {} a -> s {tags = a} :: UpdateReadinessCheckResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateReadinessCheckResponse_httpStatus :: Lens.Lens' UpdateReadinessCheckResponse Prelude.Int
+updateReadinessCheckResponse_httpStatus = Lens.lens (\UpdateReadinessCheckResponse' {httpStatus} -> httpStatus) (\s@UpdateReadinessCheckResponse' {} a -> s {httpStatus = a} :: UpdateReadinessCheckResponse)
+
+instance Prelude.NFData UpdateReadinessCheckResponse where
+  rnf UpdateReadinessCheckResponse' {..} =
+    Prelude.rnf readinessCheckArn
+      `Prelude.seq` Prelude.rnf readinessCheckName
+      `Prelude.seq` Prelude.rnf resourceSet
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/UpdateRecoveryGroup.hs b/gen/Amazonka/Route53RecoveryReadiness/UpdateRecoveryGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/UpdateRecoveryGroup.hs
@@ -0,0 +1,224 @@
+{-# 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.Route53RecoveryReadiness.UpdateRecoveryGroup
+-- 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 recovery group.
+module Amazonka.Route53RecoveryReadiness.UpdateRecoveryGroup
+  ( -- * Creating a Request
+    UpdateRecoveryGroup (..),
+    newUpdateRecoveryGroup,
+
+    -- * Request Lenses
+    updateRecoveryGroup_recoveryGroupName,
+    updateRecoveryGroup_cells,
+
+    -- * Destructuring the Response
+    UpdateRecoveryGroupResponse (..),
+    newUpdateRecoveryGroupResponse,
+
+    -- * Response Lenses
+    updateRecoveryGroupResponse_cells,
+    updateRecoveryGroupResponse_recoveryGroupArn,
+    updateRecoveryGroupResponse_recoveryGroupName,
+    updateRecoveryGroupResponse_tags,
+    updateRecoveryGroupResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | Name of a recovery group.
+--
+-- /See:/ 'newUpdateRecoveryGroup' smart constructor.
+data UpdateRecoveryGroup = UpdateRecoveryGroup'
+  { -- | The name of a recovery group.
+    recoveryGroupName :: Prelude.Text,
+    -- | A list of cell Amazon Resource Names (ARNs). This list completely
+    -- replaces the previous list.
+    cells :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRecoveryGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryGroupName', 'updateRecoveryGroup_recoveryGroupName' - The name of a recovery group.
+--
+-- 'cells', 'updateRecoveryGroup_cells' - A list of cell Amazon Resource Names (ARNs). This list completely
+-- replaces the previous list.
+newUpdateRecoveryGroup ::
+  -- | 'recoveryGroupName'
+  Prelude.Text ->
+  UpdateRecoveryGroup
+newUpdateRecoveryGroup pRecoveryGroupName_ =
+  UpdateRecoveryGroup'
+    { recoveryGroupName =
+        pRecoveryGroupName_,
+      cells = Prelude.mempty
+    }
+
+-- | The name of a recovery group.
+updateRecoveryGroup_recoveryGroupName :: Lens.Lens' UpdateRecoveryGroup Prelude.Text
+updateRecoveryGroup_recoveryGroupName = Lens.lens (\UpdateRecoveryGroup' {recoveryGroupName} -> recoveryGroupName) (\s@UpdateRecoveryGroup' {} a -> s {recoveryGroupName = a} :: UpdateRecoveryGroup)
+
+-- | A list of cell Amazon Resource Names (ARNs). This list completely
+-- replaces the previous list.
+updateRecoveryGroup_cells :: Lens.Lens' UpdateRecoveryGroup [Prelude.Text]
+updateRecoveryGroup_cells = Lens.lens (\UpdateRecoveryGroup' {cells} -> cells) (\s@UpdateRecoveryGroup' {} a -> s {cells = a} :: UpdateRecoveryGroup) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateRecoveryGroup where
+  type
+    AWSResponse UpdateRecoveryGroup =
+      UpdateRecoveryGroupResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRecoveryGroupResponse'
+            Prelude.<$> (x Data..?> "cells" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "recoveryGroupArn")
+            Prelude.<*> (x Data..?> "recoveryGroupName")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRecoveryGroup where
+  hashWithSalt _salt UpdateRecoveryGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` recoveryGroupName
+      `Prelude.hashWithSalt` cells
+
+instance Prelude.NFData UpdateRecoveryGroup where
+  rnf UpdateRecoveryGroup' {..} =
+    Prelude.rnf recoveryGroupName
+      `Prelude.seq` Prelude.rnf cells
+
+instance Data.ToHeaders UpdateRecoveryGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRecoveryGroup where
+  toJSON UpdateRecoveryGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("cells" Data..= cells)]
+      )
+
+instance Data.ToPath UpdateRecoveryGroup where
+  toPath UpdateRecoveryGroup' {..} =
+    Prelude.mconcat
+      ["/recoverygroups/", Data.toBS recoveryGroupName]
+
+instance Data.ToQuery UpdateRecoveryGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRecoveryGroupResponse' smart constructor.
+data UpdateRecoveryGroupResponse = UpdateRecoveryGroupResponse'
+  { -- | A list of a cell\'s Amazon Resource Names (ARNs).
+    cells :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) for the recovery group.
+    recoveryGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the recovery group.
+    recoveryGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with the recovery group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRecoveryGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'updateRecoveryGroupResponse_cells' - A list of a cell\'s Amazon Resource Names (ARNs).
+--
+-- 'recoveryGroupArn', 'updateRecoveryGroupResponse_recoveryGroupArn' - The Amazon Resource Name (ARN) for the recovery group.
+--
+-- 'recoveryGroupName', 'updateRecoveryGroupResponse_recoveryGroupName' - The name of the recovery group.
+--
+-- 'tags', 'updateRecoveryGroupResponse_tags' - The tags associated with the recovery group.
+--
+-- 'httpStatus', 'updateRecoveryGroupResponse_httpStatus' - The response's http status code.
+newUpdateRecoveryGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRecoveryGroupResponse
+newUpdateRecoveryGroupResponse pHttpStatus_ =
+  UpdateRecoveryGroupResponse'
+    { cells =
+        Prelude.Nothing,
+      recoveryGroupArn = Prelude.Nothing,
+      recoveryGroupName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of a cell\'s Amazon Resource Names (ARNs).
+updateRecoveryGroupResponse_cells :: Lens.Lens' UpdateRecoveryGroupResponse (Prelude.Maybe [Prelude.Text])
+updateRecoveryGroupResponse_cells = Lens.lens (\UpdateRecoveryGroupResponse' {cells} -> cells) (\s@UpdateRecoveryGroupResponse' {} a -> s {cells = a} :: UpdateRecoveryGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) for the recovery group.
+updateRecoveryGroupResponse_recoveryGroupArn :: Lens.Lens' UpdateRecoveryGroupResponse (Prelude.Maybe Prelude.Text)
+updateRecoveryGroupResponse_recoveryGroupArn = Lens.lens (\UpdateRecoveryGroupResponse' {recoveryGroupArn} -> recoveryGroupArn) (\s@UpdateRecoveryGroupResponse' {} a -> s {recoveryGroupArn = a} :: UpdateRecoveryGroupResponse)
+
+-- | The name of the recovery group.
+updateRecoveryGroupResponse_recoveryGroupName :: Lens.Lens' UpdateRecoveryGroupResponse (Prelude.Maybe Prelude.Text)
+updateRecoveryGroupResponse_recoveryGroupName = Lens.lens (\UpdateRecoveryGroupResponse' {recoveryGroupName} -> recoveryGroupName) (\s@UpdateRecoveryGroupResponse' {} a -> s {recoveryGroupName = a} :: UpdateRecoveryGroupResponse)
+
+-- | The tags associated with the recovery group.
+updateRecoveryGroupResponse_tags :: Lens.Lens' UpdateRecoveryGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateRecoveryGroupResponse_tags = Lens.lens (\UpdateRecoveryGroupResponse' {tags} -> tags) (\s@UpdateRecoveryGroupResponse' {} a -> s {tags = a} :: UpdateRecoveryGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateRecoveryGroupResponse_httpStatus :: Lens.Lens' UpdateRecoveryGroupResponse Prelude.Int
+updateRecoveryGroupResponse_httpStatus = Lens.lens (\UpdateRecoveryGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateRecoveryGroupResponse' {} a -> s {httpStatus = a} :: UpdateRecoveryGroupResponse)
+
+instance Prelude.NFData UpdateRecoveryGroupResponse where
+  rnf UpdateRecoveryGroupResponse' {..} =
+    Prelude.rnf cells
+      `Prelude.seq` Prelude.rnf recoveryGroupArn
+      `Prelude.seq` Prelude.rnf recoveryGroupName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/UpdateResourceSet.hs b/gen/Amazonka/Route53RecoveryReadiness/UpdateResourceSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/UpdateResourceSet.hs
@@ -0,0 +1,317 @@
+{-# 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.Route53RecoveryReadiness.UpdateResourceSet
+-- 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 resource set.
+module Amazonka.Route53RecoveryReadiness.UpdateResourceSet
+  ( -- * Creating a Request
+    UpdateResourceSet (..),
+    newUpdateResourceSet,
+
+    -- * Request Lenses
+    updateResourceSet_resourceSetName,
+    updateResourceSet_resourceSetType,
+    updateResourceSet_resources,
+
+    -- * Destructuring the Response
+    UpdateResourceSetResponse (..),
+    newUpdateResourceSetResponse,
+
+    -- * Response Lenses
+    updateResourceSetResponse_resourceSetArn,
+    updateResourceSetResponse_resourceSetName,
+    updateResourceSetResponse_resourceSetType,
+    updateResourceSetResponse_resources,
+    updateResourceSetResponse_tags,
+    updateResourceSetResponse_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 qualified Amazonka.Response as Response
+import Amazonka.Route53RecoveryReadiness.Types
+
+-- | Name of a resource set.
+--
+-- /See:/ 'newUpdateResourceSet' smart constructor.
+data UpdateResourceSet = UpdateResourceSet'
+  { -- | Name of a resource set.
+    resourceSetName :: Prelude.Text,
+    -- | The resource type of the resources in the resource set. Enter one of the
+    -- following values for resource type:
+    --
+    -- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+    -- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+    -- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+    -- AWS::ElasticLoadBalancing::LoadBalancer,
+    -- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+    -- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+    -- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+    -- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+    -- AWS::Route53RecoveryReadiness::DNSTargetResource
+    resourceSetType :: Prelude.Text,
+    -- | A list of resource objects.
+    resources :: [Resource]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceSetName', 'updateResourceSet_resourceSetName' - Name of a resource set.
+--
+-- 'resourceSetType', 'updateResourceSet_resourceSetType' - The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+--
+-- 'resources', 'updateResourceSet_resources' - A list of resource objects.
+newUpdateResourceSet ::
+  -- | 'resourceSetName'
+  Prelude.Text ->
+  -- | 'resourceSetType'
+  Prelude.Text ->
+  UpdateResourceSet
+newUpdateResourceSet
+  pResourceSetName_
+  pResourceSetType_ =
+    UpdateResourceSet'
+      { resourceSetName =
+          pResourceSetName_,
+        resourceSetType = pResourceSetType_,
+        resources = Prelude.mempty
+      }
+
+-- | Name of a resource set.
+updateResourceSet_resourceSetName :: Lens.Lens' UpdateResourceSet Prelude.Text
+updateResourceSet_resourceSetName = Lens.lens (\UpdateResourceSet' {resourceSetName} -> resourceSetName) (\s@UpdateResourceSet' {} a -> s {resourceSetName = a} :: UpdateResourceSet)
+
+-- | The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+updateResourceSet_resourceSetType :: Lens.Lens' UpdateResourceSet Prelude.Text
+updateResourceSet_resourceSetType = Lens.lens (\UpdateResourceSet' {resourceSetType} -> resourceSetType) (\s@UpdateResourceSet' {} a -> s {resourceSetType = a} :: UpdateResourceSet)
+
+-- | A list of resource objects.
+updateResourceSet_resources :: Lens.Lens' UpdateResourceSet [Resource]
+updateResourceSet_resources = Lens.lens (\UpdateResourceSet' {resources} -> resources) (\s@UpdateResourceSet' {} a -> s {resources = a} :: UpdateResourceSet) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateResourceSet where
+  type
+    AWSResponse UpdateResourceSet =
+      UpdateResourceSetResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateResourceSetResponse'
+            Prelude.<$> (x Data..?> "resourceSetArn")
+            Prelude.<*> (x Data..?> "resourceSetName")
+            Prelude.<*> (x Data..?> "resourceSetType")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateResourceSet where
+  hashWithSalt _salt UpdateResourceSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceSetName
+      `Prelude.hashWithSalt` resourceSetType
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData UpdateResourceSet where
+  rnf UpdateResourceSet' {..} =
+    Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf resourceSetType
+      `Prelude.seq` Prelude.rnf resources
+
+instance Data.ToHeaders UpdateResourceSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateResourceSet where
+  toJSON UpdateResourceSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("resourceSetType" Data..= resourceSetType),
+            Prelude.Just ("resources" Data..= resources)
+          ]
+      )
+
+instance Data.ToPath UpdateResourceSet where
+  toPath UpdateResourceSet' {..} =
+    Prelude.mconcat
+      ["/resourcesets/", Data.toBS resourceSetName]
+
+instance Data.ToQuery UpdateResourceSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateResourceSetResponse' smart constructor.
+data UpdateResourceSetResponse = UpdateResourceSetResponse'
+  { -- | The Amazon Resource Name (ARN) for the resource set.
+    resourceSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource set.
+    resourceSetName :: Prelude.Maybe Prelude.Text,
+    -- | The resource type of the resources in the resource set. Enter one of the
+    -- following values for resource type:
+    --
+    -- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+    -- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+    -- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+    -- AWS::ElasticLoadBalancing::LoadBalancer,
+    -- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+    -- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+    -- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+    -- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+    -- AWS::Route53RecoveryReadiness::DNSTargetResource
+    resourceSetType :: Prelude.Maybe Prelude.Text,
+    -- | A list of resource objects.
+    resources :: Prelude.Maybe [Resource],
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceSetArn', 'updateResourceSetResponse_resourceSetArn' - The Amazon Resource Name (ARN) for the resource set.
+--
+-- 'resourceSetName', 'updateResourceSetResponse_resourceSetName' - The name of the resource set.
+--
+-- 'resourceSetType', 'updateResourceSetResponse_resourceSetType' - The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+--
+-- 'resources', 'updateResourceSetResponse_resources' - A list of resource objects.
+--
+-- 'tags', 'updateResourceSetResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'updateResourceSetResponse_httpStatus' - The response's http status code.
+newUpdateResourceSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourceSetResponse
+newUpdateResourceSetResponse pHttpStatus_ =
+  UpdateResourceSetResponse'
+    { resourceSetArn =
+        Prelude.Nothing,
+      resourceSetName = Prelude.Nothing,
+      resourceSetType = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the resource set.
+updateResourceSetResponse_resourceSetArn :: Lens.Lens' UpdateResourceSetResponse (Prelude.Maybe Prelude.Text)
+updateResourceSetResponse_resourceSetArn = Lens.lens (\UpdateResourceSetResponse' {resourceSetArn} -> resourceSetArn) (\s@UpdateResourceSetResponse' {} a -> s {resourceSetArn = a} :: UpdateResourceSetResponse)
+
+-- | The name of the resource set.
+updateResourceSetResponse_resourceSetName :: Lens.Lens' UpdateResourceSetResponse (Prelude.Maybe Prelude.Text)
+updateResourceSetResponse_resourceSetName = Lens.lens (\UpdateResourceSetResponse' {resourceSetName} -> resourceSetName) (\s@UpdateResourceSetResponse' {} a -> s {resourceSetName = a} :: UpdateResourceSetResponse)
+
+-- | The resource type of the resources in the resource set. Enter one of the
+-- following values for resource type:
+--
+-- AWS::ApiGateway::Stage, AWS::ApiGatewayV2::Stage,
+-- AWS::AutoScaling::AutoScalingGroup, AWS::CloudWatch::Alarm,
+-- AWS::EC2::CustomerGateway, AWS::DynamoDB::Table, AWS::EC2::Volume,
+-- AWS::ElasticLoadBalancing::LoadBalancer,
+-- AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::Lambda::Function,
+-- AWS::MSK::Cluster, AWS::RDS::DBCluster, AWS::Route53::HealthCheck,
+-- AWS::SQS::Queue, AWS::SNS::Topic, AWS::SNS::Subscription, AWS::EC2::VPC,
+-- AWS::EC2::VPNConnection, AWS::EC2::VPNGateway,
+-- AWS::Route53RecoveryReadiness::DNSTargetResource
+updateResourceSetResponse_resourceSetType :: Lens.Lens' UpdateResourceSetResponse (Prelude.Maybe Prelude.Text)
+updateResourceSetResponse_resourceSetType = Lens.lens (\UpdateResourceSetResponse' {resourceSetType} -> resourceSetType) (\s@UpdateResourceSetResponse' {} a -> s {resourceSetType = a} :: UpdateResourceSetResponse)
+
+-- | A list of resource objects.
+updateResourceSetResponse_resources :: Lens.Lens' UpdateResourceSetResponse (Prelude.Maybe [Resource])
+updateResourceSetResponse_resources = Lens.lens (\UpdateResourceSetResponse' {resources} -> resources) (\s@UpdateResourceSetResponse' {} a -> s {resources = a} :: UpdateResourceSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+updateResourceSetResponse_tags :: Lens.Lens' UpdateResourceSetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateResourceSetResponse_tags = Lens.lens (\UpdateResourceSetResponse' {tags} -> tags) (\s@UpdateResourceSetResponse' {} a -> s {tags = a} :: UpdateResourceSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateResourceSetResponse_httpStatus :: Lens.Lens' UpdateResourceSetResponse Prelude.Int
+updateResourceSetResponse_httpStatus = Lens.lens (\UpdateResourceSetResponse' {httpStatus} -> httpStatus) (\s@UpdateResourceSetResponse' {} a -> s {httpStatus = a} :: UpdateResourceSetResponse)
+
+instance Prelude.NFData UpdateResourceSetResponse where
+  rnf UpdateResourceSetResponse' {..} =
+    Prelude.rnf resourceSetArn
+      `Prelude.seq` Prelude.rnf resourceSetName
+      `Prelude.seq` Prelude.rnf resourceSetType
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Route53RecoveryReadiness/Waiters.hs b/gen/Amazonka/Route53RecoveryReadiness/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Route53RecoveryReadiness/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.Route53RecoveryReadiness.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.Route53RecoveryReadiness.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.Route53RecoveryReadiness.Lens
+import Amazonka.Route53RecoveryReadiness.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.Route53RecoveryReadiness
+import Test.Amazonka.Route53RecoveryReadiness.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Route53RecoveryReadiness"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/Route53RecoveryReadiness.hs b/test/Test/Amazonka/Gen/Route53RecoveryReadiness.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Route53RecoveryReadiness.hs
@@ -0,0 +1,678 @@
+{-# 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.Route53RecoveryReadiness
+-- 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.Route53RecoveryReadiness where
+
+import Amazonka.Route53RecoveryReadiness
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.Route53RecoveryReadiness.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"
+--         [ requestCreateCell $
+--             newCreateCell
+--
+--         , requestCreateCrossAccountAuthorization $
+--             newCreateCrossAccountAuthorization
+--
+--         , requestCreateReadinessCheck $
+--             newCreateReadinessCheck
+--
+--         , requestCreateRecoveryGroup $
+--             newCreateRecoveryGroup
+--
+--         , requestCreateResourceSet $
+--             newCreateResourceSet
+--
+--         , requestDeleteCell $
+--             newDeleteCell
+--
+--         , requestDeleteCrossAccountAuthorization $
+--             newDeleteCrossAccountAuthorization
+--
+--         , requestDeleteReadinessCheck $
+--             newDeleteReadinessCheck
+--
+--         , requestDeleteRecoveryGroup $
+--             newDeleteRecoveryGroup
+--
+--         , requestDeleteResourceSet $
+--             newDeleteResourceSet
+--
+--         , requestGetArchitectureRecommendations $
+--             newGetArchitectureRecommendations
+--
+--         , requestGetCell $
+--             newGetCell
+--
+--         , requestGetCellReadinessSummary $
+--             newGetCellReadinessSummary
+--
+--         , requestGetReadinessCheck $
+--             newGetReadinessCheck
+--
+--         , requestGetReadinessCheckResourceStatus $
+--             newGetReadinessCheckResourceStatus
+--
+--         , requestGetReadinessCheckStatus $
+--             newGetReadinessCheckStatus
+--
+--         , requestGetRecoveryGroup $
+--             newGetRecoveryGroup
+--
+--         , requestGetRecoveryGroupReadinessSummary $
+--             newGetRecoveryGroupReadinessSummary
+--
+--         , requestGetResourceSet $
+--             newGetResourceSet
+--
+--         , requestListCells $
+--             newListCells
+--
+--         , requestListCrossAccountAuthorizations $
+--             newListCrossAccountAuthorizations
+--
+--         , requestListReadinessChecks $
+--             newListReadinessChecks
+--
+--         , requestListRecoveryGroups $
+--             newListRecoveryGroups
+--
+--         , requestListResourceSets $
+--             newListResourceSets
+--
+--         , requestListRules $
+--             newListRules
+--
+--         , requestListTagsForResources $
+--             newListTagsForResources
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateCell $
+--             newUpdateCell
+--
+--         , requestUpdateReadinessCheck $
+--             newUpdateReadinessCheck
+--
+--         , requestUpdateRecoveryGroup $
+--             newUpdateRecoveryGroup
+--
+--         , requestUpdateResourceSet $
+--             newUpdateResourceSet
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateCell $
+--             newCreateCellResponse
+--
+--         , responseCreateCrossAccountAuthorization $
+--             newCreateCrossAccountAuthorizationResponse
+--
+--         , responseCreateReadinessCheck $
+--             newCreateReadinessCheckResponse
+--
+--         , responseCreateRecoveryGroup $
+--             newCreateRecoveryGroupResponse
+--
+--         , responseCreateResourceSet $
+--             newCreateResourceSetResponse
+--
+--         , responseDeleteCell $
+--             newDeleteCellResponse
+--
+--         , responseDeleteCrossAccountAuthorization $
+--             newDeleteCrossAccountAuthorizationResponse
+--
+--         , responseDeleteReadinessCheck $
+--             newDeleteReadinessCheckResponse
+--
+--         , responseDeleteRecoveryGroup $
+--             newDeleteRecoveryGroupResponse
+--
+--         , responseDeleteResourceSet $
+--             newDeleteResourceSetResponse
+--
+--         , responseGetArchitectureRecommendations $
+--             newGetArchitectureRecommendationsResponse
+--
+--         , responseGetCell $
+--             newGetCellResponse
+--
+--         , responseGetCellReadinessSummary $
+--             newGetCellReadinessSummaryResponse
+--
+--         , responseGetReadinessCheck $
+--             newGetReadinessCheckResponse
+--
+--         , responseGetReadinessCheckResourceStatus $
+--             newGetReadinessCheckResourceStatusResponse
+--
+--         , responseGetReadinessCheckStatus $
+--             newGetReadinessCheckStatusResponse
+--
+--         , responseGetRecoveryGroup $
+--             newGetRecoveryGroupResponse
+--
+--         , responseGetRecoveryGroupReadinessSummary $
+--             newGetRecoveryGroupReadinessSummaryResponse
+--
+--         , responseGetResourceSet $
+--             newGetResourceSetResponse
+--
+--         , responseListCells $
+--             newListCellsResponse
+--
+--         , responseListCrossAccountAuthorizations $
+--             newListCrossAccountAuthorizationsResponse
+--
+--         , responseListReadinessChecks $
+--             newListReadinessChecksResponse
+--
+--         , responseListRecoveryGroups $
+--             newListRecoveryGroupsResponse
+--
+--         , responseListResourceSets $
+--             newListResourceSetsResponse
+--
+--         , responseListRules $
+--             newListRulesResponse
+--
+--         , responseListTagsForResources $
+--             newListTagsForResourcesResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateCell $
+--             newUpdateCellResponse
+--
+--         , responseUpdateReadinessCheck $
+--             newUpdateReadinessCheckResponse
+--
+--         , responseUpdateRecoveryGroup $
+--             newUpdateRecoveryGroupResponse
+--
+--         , responseUpdateResourceSet $
+--             newUpdateResourceSetResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateCell :: CreateCell -> TestTree
+requestCreateCell =
+  req
+    "CreateCell"
+    "fixture/CreateCell.yaml"
+
+requestCreateCrossAccountAuthorization :: CreateCrossAccountAuthorization -> TestTree
+requestCreateCrossAccountAuthorization =
+  req
+    "CreateCrossAccountAuthorization"
+    "fixture/CreateCrossAccountAuthorization.yaml"
+
+requestCreateReadinessCheck :: CreateReadinessCheck -> TestTree
+requestCreateReadinessCheck =
+  req
+    "CreateReadinessCheck"
+    "fixture/CreateReadinessCheck.yaml"
+
+requestCreateRecoveryGroup :: CreateRecoveryGroup -> TestTree
+requestCreateRecoveryGroup =
+  req
+    "CreateRecoveryGroup"
+    "fixture/CreateRecoveryGroup.yaml"
+
+requestCreateResourceSet :: CreateResourceSet -> TestTree
+requestCreateResourceSet =
+  req
+    "CreateResourceSet"
+    "fixture/CreateResourceSet.yaml"
+
+requestDeleteCell :: DeleteCell -> TestTree
+requestDeleteCell =
+  req
+    "DeleteCell"
+    "fixture/DeleteCell.yaml"
+
+requestDeleteCrossAccountAuthorization :: DeleteCrossAccountAuthorization -> TestTree
+requestDeleteCrossAccountAuthorization =
+  req
+    "DeleteCrossAccountAuthorization"
+    "fixture/DeleteCrossAccountAuthorization.yaml"
+
+requestDeleteReadinessCheck :: DeleteReadinessCheck -> TestTree
+requestDeleteReadinessCheck =
+  req
+    "DeleteReadinessCheck"
+    "fixture/DeleteReadinessCheck.yaml"
+
+requestDeleteRecoveryGroup :: DeleteRecoveryGroup -> TestTree
+requestDeleteRecoveryGroup =
+  req
+    "DeleteRecoveryGroup"
+    "fixture/DeleteRecoveryGroup.yaml"
+
+requestDeleteResourceSet :: DeleteResourceSet -> TestTree
+requestDeleteResourceSet =
+  req
+    "DeleteResourceSet"
+    "fixture/DeleteResourceSet.yaml"
+
+requestGetArchitectureRecommendations :: GetArchitectureRecommendations -> TestTree
+requestGetArchitectureRecommendations =
+  req
+    "GetArchitectureRecommendations"
+    "fixture/GetArchitectureRecommendations.yaml"
+
+requestGetCell :: GetCell -> TestTree
+requestGetCell =
+  req
+    "GetCell"
+    "fixture/GetCell.yaml"
+
+requestGetCellReadinessSummary :: GetCellReadinessSummary -> TestTree
+requestGetCellReadinessSummary =
+  req
+    "GetCellReadinessSummary"
+    "fixture/GetCellReadinessSummary.yaml"
+
+requestGetReadinessCheck :: GetReadinessCheck -> TestTree
+requestGetReadinessCheck =
+  req
+    "GetReadinessCheck"
+    "fixture/GetReadinessCheck.yaml"
+
+requestGetReadinessCheckResourceStatus :: GetReadinessCheckResourceStatus -> TestTree
+requestGetReadinessCheckResourceStatus =
+  req
+    "GetReadinessCheckResourceStatus"
+    "fixture/GetReadinessCheckResourceStatus.yaml"
+
+requestGetReadinessCheckStatus :: GetReadinessCheckStatus -> TestTree
+requestGetReadinessCheckStatus =
+  req
+    "GetReadinessCheckStatus"
+    "fixture/GetReadinessCheckStatus.yaml"
+
+requestGetRecoveryGroup :: GetRecoveryGroup -> TestTree
+requestGetRecoveryGroup =
+  req
+    "GetRecoveryGroup"
+    "fixture/GetRecoveryGroup.yaml"
+
+requestGetRecoveryGroupReadinessSummary :: GetRecoveryGroupReadinessSummary -> TestTree
+requestGetRecoveryGroupReadinessSummary =
+  req
+    "GetRecoveryGroupReadinessSummary"
+    "fixture/GetRecoveryGroupReadinessSummary.yaml"
+
+requestGetResourceSet :: GetResourceSet -> TestTree
+requestGetResourceSet =
+  req
+    "GetResourceSet"
+    "fixture/GetResourceSet.yaml"
+
+requestListCells :: ListCells -> TestTree
+requestListCells =
+  req
+    "ListCells"
+    "fixture/ListCells.yaml"
+
+requestListCrossAccountAuthorizations :: ListCrossAccountAuthorizations -> TestTree
+requestListCrossAccountAuthorizations =
+  req
+    "ListCrossAccountAuthorizations"
+    "fixture/ListCrossAccountAuthorizations.yaml"
+
+requestListReadinessChecks :: ListReadinessChecks -> TestTree
+requestListReadinessChecks =
+  req
+    "ListReadinessChecks"
+    "fixture/ListReadinessChecks.yaml"
+
+requestListRecoveryGroups :: ListRecoveryGroups -> TestTree
+requestListRecoveryGroups =
+  req
+    "ListRecoveryGroups"
+    "fixture/ListRecoveryGroups.yaml"
+
+requestListResourceSets :: ListResourceSets -> TestTree
+requestListResourceSets =
+  req
+    "ListResourceSets"
+    "fixture/ListResourceSets.yaml"
+
+requestListRules :: ListRules -> TestTree
+requestListRules =
+  req
+    "ListRules"
+    "fixture/ListRules.yaml"
+
+requestListTagsForResources :: ListTagsForResources -> TestTree
+requestListTagsForResources =
+  req
+    "ListTagsForResources"
+    "fixture/ListTagsForResources.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateCell :: UpdateCell -> TestTree
+requestUpdateCell =
+  req
+    "UpdateCell"
+    "fixture/UpdateCell.yaml"
+
+requestUpdateReadinessCheck :: UpdateReadinessCheck -> TestTree
+requestUpdateReadinessCheck =
+  req
+    "UpdateReadinessCheck"
+    "fixture/UpdateReadinessCheck.yaml"
+
+requestUpdateRecoveryGroup :: UpdateRecoveryGroup -> TestTree
+requestUpdateRecoveryGroup =
+  req
+    "UpdateRecoveryGroup"
+    "fixture/UpdateRecoveryGroup.yaml"
+
+requestUpdateResourceSet :: UpdateResourceSet -> TestTree
+requestUpdateResourceSet =
+  req
+    "UpdateResourceSet"
+    "fixture/UpdateResourceSet.yaml"
+
+-- Responses
+
+responseCreateCell :: CreateCellResponse -> TestTree
+responseCreateCell =
+  res
+    "CreateCellResponse"
+    "fixture/CreateCellResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCell)
+
+responseCreateCrossAccountAuthorization :: CreateCrossAccountAuthorizationResponse -> TestTree
+responseCreateCrossAccountAuthorization =
+  res
+    "CreateCrossAccountAuthorizationResponse"
+    "fixture/CreateCrossAccountAuthorizationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCrossAccountAuthorization)
+
+responseCreateReadinessCheck :: CreateReadinessCheckResponse -> TestTree
+responseCreateReadinessCheck =
+  res
+    "CreateReadinessCheckResponse"
+    "fixture/CreateReadinessCheckResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReadinessCheck)
+
+responseCreateRecoveryGroup :: CreateRecoveryGroupResponse -> TestTree
+responseCreateRecoveryGroup =
+  res
+    "CreateRecoveryGroupResponse"
+    "fixture/CreateRecoveryGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRecoveryGroup)
+
+responseCreateResourceSet :: CreateResourceSetResponse -> TestTree
+responseCreateResourceSet =
+  res
+    "CreateResourceSetResponse"
+    "fixture/CreateResourceSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateResourceSet)
+
+responseDeleteCell :: DeleteCellResponse -> TestTree
+responseDeleteCell =
+  res
+    "DeleteCellResponse"
+    "fixture/DeleteCellResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCell)
+
+responseDeleteCrossAccountAuthorization :: DeleteCrossAccountAuthorizationResponse -> TestTree
+responseDeleteCrossAccountAuthorization =
+  res
+    "DeleteCrossAccountAuthorizationResponse"
+    "fixture/DeleteCrossAccountAuthorizationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCrossAccountAuthorization)
+
+responseDeleteReadinessCheck :: DeleteReadinessCheckResponse -> TestTree
+responseDeleteReadinessCheck =
+  res
+    "DeleteReadinessCheckResponse"
+    "fixture/DeleteReadinessCheckResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteReadinessCheck)
+
+responseDeleteRecoveryGroup :: DeleteRecoveryGroupResponse -> TestTree
+responseDeleteRecoveryGroup =
+  res
+    "DeleteRecoveryGroupResponse"
+    "fixture/DeleteRecoveryGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRecoveryGroup)
+
+responseDeleteResourceSet :: DeleteResourceSetResponse -> TestTree
+responseDeleteResourceSet =
+  res
+    "DeleteResourceSetResponse"
+    "fixture/DeleteResourceSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteResourceSet)
+
+responseGetArchitectureRecommendations :: GetArchitectureRecommendationsResponse -> TestTree
+responseGetArchitectureRecommendations =
+  res
+    "GetArchitectureRecommendationsResponse"
+    "fixture/GetArchitectureRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetArchitectureRecommendations)
+
+responseGetCell :: GetCellResponse -> TestTree
+responseGetCell =
+  res
+    "GetCellResponse"
+    "fixture/GetCellResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCell)
+
+responseGetCellReadinessSummary :: GetCellReadinessSummaryResponse -> TestTree
+responseGetCellReadinessSummary =
+  res
+    "GetCellReadinessSummaryResponse"
+    "fixture/GetCellReadinessSummaryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCellReadinessSummary)
+
+responseGetReadinessCheck :: GetReadinessCheckResponse -> TestTree
+responseGetReadinessCheck =
+  res
+    "GetReadinessCheckResponse"
+    "fixture/GetReadinessCheckResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReadinessCheck)
+
+responseGetReadinessCheckResourceStatus :: GetReadinessCheckResourceStatusResponse -> TestTree
+responseGetReadinessCheckResourceStatus =
+  res
+    "GetReadinessCheckResourceStatusResponse"
+    "fixture/GetReadinessCheckResourceStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReadinessCheckResourceStatus)
+
+responseGetReadinessCheckStatus :: GetReadinessCheckStatusResponse -> TestTree
+responseGetReadinessCheckStatus =
+  res
+    "GetReadinessCheckStatusResponse"
+    "fixture/GetReadinessCheckStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReadinessCheckStatus)
+
+responseGetRecoveryGroup :: GetRecoveryGroupResponse -> TestTree
+responseGetRecoveryGroup =
+  res
+    "GetRecoveryGroupResponse"
+    "fixture/GetRecoveryGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRecoveryGroup)
+
+responseGetRecoveryGroupReadinessSummary :: GetRecoveryGroupReadinessSummaryResponse -> TestTree
+responseGetRecoveryGroupReadinessSummary =
+  res
+    "GetRecoveryGroupReadinessSummaryResponse"
+    "fixture/GetRecoveryGroupReadinessSummaryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRecoveryGroupReadinessSummary)
+
+responseGetResourceSet :: GetResourceSetResponse -> TestTree
+responseGetResourceSet =
+  res
+    "GetResourceSetResponse"
+    "fixture/GetResourceSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResourceSet)
+
+responseListCells :: ListCellsResponse -> TestTree
+responseListCells =
+  res
+    "ListCellsResponse"
+    "fixture/ListCellsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCells)
+
+responseListCrossAccountAuthorizations :: ListCrossAccountAuthorizationsResponse -> TestTree
+responseListCrossAccountAuthorizations =
+  res
+    "ListCrossAccountAuthorizationsResponse"
+    "fixture/ListCrossAccountAuthorizationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCrossAccountAuthorizations)
+
+responseListReadinessChecks :: ListReadinessChecksResponse -> TestTree
+responseListReadinessChecks =
+  res
+    "ListReadinessChecksResponse"
+    "fixture/ListReadinessChecksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListReadinessChecks)
+
+responseListRecoveryGroups :: ListRecoveryGroupsResponse -> TestTree
+responseListRecoveryGroups =
+  res
+    "ListRecoveryGroupsResponse"
+    "fixture/ListRecoveryGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecoveryGroups)
+
+responseListResourceSets :: ListResourceSetsResponse -> TestTree
+responseListResourceSets =
+  res
+    "ListResourceSetsResponse"
+    "fixture/ListResourceSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListResourceSets)
+
+responseListRules :: ListRulesResponse -> TestTree
+responseListRules =
+  res
+    "ListRulesResponse"
+    "fixture/ListRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRules)
+
+responseListTagsForResources :: ListTagsForResourcesResponse -> TestTree
+responseListTagsForResources =
+  res
+    "ListTagsForResourcesResponse"
+    "fixture/ListTagsForResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResources)
+
+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)
+
+responseUpdateCell :: UpdateCellResponse -> TestTree
+responseUpdateCell =
+  res
+    "UpdateCellResponse"
+    "fixture/UpdateCellResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCell)
+
+responseUpdateReadinessCheck :: UpdateReadinessCheckResponse -> TestTree
+responseUpdateReadinessCheck =
+  res
+    "UpdateReadinessCheckResponse"
+    "fixture/UpdateReadinessCheckResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateReadinessCheck)
+
+responseUpdateRecoveryGroup :: UpdateRecoveryGroupResponse -> TestTree
+responseUpdateRecoveryGroup =
+  res
+    "UpdateRecoveryGroupResponse"
+    "fixture/UpdateRecoveryGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRecoveryGroup)
+
+responseUpdateResourceSet :: UpdateResourceSetResponse -> TestTree
+responseUpdateResourceSet =
+  res
+    "UpdateResourceSetResponse"
+    "fixture/UpdateResourceSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourceSet)
diff --git a/test/Test/Amazonka/Route53RecoveryReadiness.hs b/test/Test/Amazonka/Route53RecoveryReadiness.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Route53RecoveryReadiness.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Route53RecoveryReadiness
+-- 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.Route53RecoveryReadiness
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Route53RecoveryReadiness/Internal.hs b/test/Test/Amazonka/Route53RecoveryReadiness/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Route53RecoveryReadiness/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Route53RecoveryReadiness.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.Route53RecoveryReadiness.Internal where
