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 Elastic Disaster Recovery Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-02-26@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-drs)
+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.DrS](http://hackage.haskell.org/package/amazonka-drs/docs/Amazonka-DrS.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-drs` 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-drs.cabal b/amazonka-drs.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-drs.cabal
@@ -0,0 +1,192 @@
+cabal-version:      2.2
+name:               amazonka-drs
+version:            2.0
+synopsis:           Amazon Elastic Disaster Recovery Service SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-02-26@ 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.DrS.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.DrS" 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-drs
+
+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.DrS
+    Amazonka.DrS.CreateExtendedSourceServer
+    Amazonka.DrS.CreateReplicationConfigurationTemplate
+    Amazonka.DrS.DeleteJob
+    Amazonka.DrS.DeleteRecoveryInstance
+    Amazonka.DrS.DeleteReplicationConfigurationTemplate
+    Amazonka.DrS.DeleteSourceServer
+    Amazonka.DrS.DescribeJobLogItems
+    Amazonka.DrS.DescribeJobs
+    Amazonka.DrS.DescribeRecoveryInstances
+    Amazonka.DrS.DescribeRecoverySnapshots
+    Amazonka.DrS.DescribeReplicationConfigurationTemplates
+    Amazonka.DrS.DescribeSourceServers
+    Amazonka.DrS.DisconnectRecoveryInstance
+    Amazonka.DrS.DisconnectSourceServer
+    Amazonka.DrS.GetFailbackReplicationConfiguration
+    Amazonka.DrS.GetLaunchConfiguration
+    Amazonka.DrS.GetReplicationConfiguration
+    Amazonka.DrS.InitializeService
+    Amazonka.DrS.Lens
+    Amazonka.DrS.ListExtensibleSourceServers
+    Amazonka.DrS.ListStagingAccounts
+    Amazonka.DrS.ListTagsForResource
+    Amazonka.DrS.RetryDataReplication
+    Amazonka.DrS.ReverseReplication
+    Amazonka.DrS.StartFailbackLaunch
+    Amazonka.DrS.StartRecovery
+    Amazonka.DrS.StartReplication
+    Amazonka.DrS.StopFailback
+    Amazonka.DrS.StopReplication
+    Amazonka.DrS.TagResource
+    Amazonka.DrS.TerminateRecoveryInstances
+    Amazonka.DrS.Types
+    Amazonka.DrS.Types.Account
+    Amazonka.DrS.Types.ConversionProperties
+    Amazonka.DrS.Types.CPU
+    Amazonka.DrS.Types.DataReplicationError
+    Amazonka.DrS.Types.DataReplicationErrorString
+    Amazonka.DrS.Types.DataReplicationInfo
+    Amazonka.DrS.Types.DataReplicationInfoReplicatedDisk
+    Amazonka.DrS.Types.DataReplicationInitiation
+    Amazonka.DrS.Types.DataReplicationInitiationStep
+    Amazonka.DrS.Types.DataReplicationInitiationStepName
+    Amazonka.DrS.Types.DataReplicationInitiationStepStatus
+    Amazonka.DrS.Types.DataReplicationState
+    Amazonka.DrS.Types.DescribeJobsRequestFilters
+    Amazonka.DrS.Types.DescribeRecoveryInstancesRequestFilters
+    Amazonka.DrS.Types.DescribeRecoverySnapshotsRequestFilters
+    Amazonka.DrS.Types.DescribeSourceServersRequestFilters
+    Amazonka.DrS.Types.Disk
+    Amazonka.DrS.Types.EC2InstanceState
+    Amazonka.DrS.Types.ExtensionStatus
+    Amazonka.DrS.Types.FailbackLaunchType
+    Amazonka.DrS.Types.FailbackReplicationError
+    Amazonka.DrS.Types.FailbackState
+    Amazonka.DrS.Types.IdentificationHints
+    Amazonka.DrS.Types.InitiatedBy
+    Amazonka.DrS.Types.Job
+    Amazonka.DrS.Types.JobLog
+    Amazonka.DrS.Types.JobLogEvent
+    Amazonka.DrS.Types.JobLogEventData
+    Amazonka.DrS.Types.JobStatus
+    Amazonka.DrS.Types.JobType
+    Amazonka.DrS.Types.LastLaunchResult
+    Amazonka.DrS.Types.LastLaunchType
+    Amazonka.DrS.Types.LaunchConfiguration
+    Amazonka.DrS.Types.LaunchDisposition
+    Amazonka.DrS.Types.LaunchStatus
+    Amazonka.DrS.Types.Licensing
+    Amazonka.DrS.Types.LifeCycle
+    Amazonka.DrS.Types.LifeCycleLastLaunch
+    Amazonka.DrS.Types.LifeCycleLastLaunchInitiated
+    Amazonka.DrS.Types.NetworkInterface
+    Amazonka.DrS.Types.OriginEnvironment
+    Amazonka.DrS.Types.OS
+    Amazonka.DrS.Types.ParticipatingServer
+    Amazonka.DrS.Types.PITPolicyRule
+    Amazonka.DrS.Types.PITPolicyRuleUnits
+    Amazonka.DrS.Types.RecoveryInstance
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationError
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfo
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfoReplicatedDisk
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiation
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStep
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepName
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepStatus
+    Amazonka.DrS.Types.RecoveryInstanceDataReplicationState
+    Amazonka.DrS.Types.RecoveryInstanceDisk
+    Amazonka.DrS.Types.RecoveryInstanceFailback
+    Amazonka.DrS.Types.RecoveryInstanceProperties
+    Amazonka.DrS.Types.RecoverySnapshot
+    Amazonka.DrS.Types.RecoverySnapshotsOrder
+    Amazonka.DrS.Types.ReplicationConfiguration
+    Amazonka.DrS.Types.ReplicationConfigurationDataPlaneRouting
+    Amazonka.DrS.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+    Amazonka.DrS.Types.ReplicationConfigurationEbsEncryption
+    Amazonka.DrS.Types.ReplicationConfigurationReplicatedDisk
+    Amazonka.DrS.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+    Amazonka.DrS.Types.ReplicationConfigurationTemplate
+    Amazonka.DrS.Types.ReplicationDirection
+    Amazonka.DrS.Types.SourceCloudProperties
+    Amazonka.DrS.Types.SourceProperties
+    Amazonka.DrS.Types.SourceServer
+    Amazonka.DrS.Types.StagingArea
+    Amazonka.DrS.Types.StagingSourceServer
+    Amazonka.DrS.Types.StartRecoveryRequestSourceServer
+    Amazonka.DrS.Types.TargetInstanceTypeRightSizingMethod
+    Amazonka.DrS.UntagResource
+    Amazonka.DrS.UpdateFailbackReplicationConfiguration
+    Amazonka.DrS.UpdateLaunchConfiguration
+    Amazonka.DrS.UpdateReplicationConfiguration
+    Amazonka.DrS.UpdateReplicationConfigurationTemplate
+    Amazonka.DrS.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-drs-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.DrS
+    Test.Amazonka.DrS.Internal
+    Test.Amazonka.Gen.DrS
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-drs
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateExtendedSourceServer.yaml b/fixture/CreateExtendedSourceServer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExtendedSourceServer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/CreateExtendedSourceServerResponse.proto b/fixture/CreateExtendedSourceServerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExtendedSourceServerResponse.proto
diff --git a/fixture/CreateReplicationConfigurationTemplate.yaml b/fixture/CreateReplicationConfigurationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationConfigurationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/CreateReplicationConfigurationTemplateResponse.proto b/fixture/CreateReplicationConfigurationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationConfigurationTemplateResponse.proto
diff --git a/fixture/DeleteJob.yaml b/fixture/DeleteJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DeleteJobResponse.proto b/fixture/DeleteJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJobResponse.proto
diff --git a/fixture/DeleteRecoveryInstance.yaml b/fixture/DeleteRecoveryInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecoveryInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DeleteRecoveryInstanceResponse.proto b/fixture/DeleteRecoveryInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRecoveryInstanceResponse.proto
diff --git a/fixture/DeleteReplicationConfigurationTemplate.yaml b/fixture/DeleteReplicationConfigurationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationConfigurationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DeleteReplicationConfigurationTemplateResponse.proto b/fixture/DeleteReplicationConfigurationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationConfigurationTemplateResponse.proto
diff --git a/fixture/DeleteSourceServer.yaml b/fixture/DeleteSourceServer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSourceServer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DeleteSourceServerResponse.proto b/fixture/DeleteSourceServerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSourceServerResponse.proto
diff --git a/fixture/DescribeJobLogItems.yaml b/fixture/DescribeJobLogItems.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobLogItems.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DescribeJobLogItemsResponse.proto b/fixture/DescribeJobLogItemsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobLogItemsResponse.proto
diff --git a/fixture/DescribeJobs.yaml b/fixture/DescribeJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DescribeJobsResponse.proto b/fixture/DescribeJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeJobsResponse.proto
diff --git a/fixture/DescribeRecoveryInstances.yaml b/fixture/DescribeRecoveryInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRecoveryInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DescribeRecoveryInstancesResponse.proto b/fixture/DescribeRecoveryInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRecoveryInstancesResponse.proto
diff --git a/fixture/DescribeRecoverySnapshots.yaml b/fixture/DescribeRecoverySnapshots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRecoverySnapshots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DescribeRecoverySnapshotsResponse.proto b/fixture/DescribeRecoverySnapshotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRecoverySnapshotsResponse.proto
diff --git a/fixture/DescribeReplicationConfigurationTemplates.yaml b/fixture/DescribeReplicationConfigurationTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationConfigurationTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DescribeReplicationConfigurationTemplatesResponse.proto b/fixture/DescribeReplicationConfigurationTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationConfigurationTemplatesResponse.proto
diff --git a/fixture/DescribeSourceServers.yaml b/fixture/DescribeSourceServers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSourceServers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DescribeSourceServersResponse.proto b/fixture/DescribeSourceServersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSourceServersResponse.proto
diff --git a/fixture/DisconnectRecoveryInstance.yaml b/fixture/DisconnectRecoveryInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectRecoveryInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DisconnectRecoveryInstanceResponse.proto b/fixture/DisconnectRecoveryInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectRecoveryInstanceResponse.proto
diff --git a/fixture/DisconnectSourceServer.yaml b/fixture/DisconnectSourceServer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectSourceServer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/DisconnectSourceServerResponse.proto b/fixture/DisconnectSourceServerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectSourceServerResponse.proto
diff --git a/fixture/GetFailbackReplicationConfiguration.yaml b/fixture/GetFailbackReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFailbackReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/GetFailbackReplicationConfigurationResponse.proto b/fixture/GetFailbackReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFailbackReplicationConfigurationResponse.proto
diff --git a/fixture/GetLaunchConfiguration.yaml b/fixture/GetLaunchConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/GetLaunchConfigurationResponse.proto b/fixture/GetLaunchConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchConfigurationResponse.proto
diff --git a/fixture/GetReplicationConfiguration.yaml b/fixture/GetReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/GetReplicationConfigurationResponse.proto b/fixture/GetReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetReplicationConfigurationResponse.proto
diff --git a/fixture/InitializeService.yaml b/fixture/InitializeService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/InitializeService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/InitializeServiceResponse.proto b/fixture/InitializeServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/InitializeServiceResponse.proto
diff --git a/fixture/ListExtensibleSourceServers.yaml b/fixture/ListExtensibleSourceServers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensibleSourceServers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/ListExtensibleSourceServersResponse.proto b/fixture/ListExtensibleSourceServersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensibleSourceServersResponse.proto
diff --git a/fixture/ListStagingAccounts.yaml b/fixture/ListStagingAccounts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStagingAccounts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/ListStagingAccountsResponse.proto b/fixture/ListStagingAccountsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStagingAccountsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/RetryDataReplication.yaml b/fixture/RetryDataReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RetryDataReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/RetryDataReplicationResponse.proto b/fixture/RetryDataReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RetryDataReplicationResponse.proto
diff --git a/fixture/ReverseReplication.yaml b/fixture/ReverseReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReverseReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/ReverseReplicationResponse.proto b/fixture/ReverseReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReverseReplicationResponse.proto
diff --git a/fixture/StartFailbackLaunch.yaml b/fixture/StartFailbackLaunch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartFailbackLaunch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/StartFailbackLaunchResponse.proto b/fixture/StartFailbackLaunchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartFailbackLaunchResponse.proto
diff --git a/fixture/StartRecovery.yaml b/fixture/StartRecovery.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartRecovery.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/StartRecoveryResponse.proto b/fixture/StartRecoveryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartRecoveryResponse.proto
diff --git a/fixture/StartReplication.yaml b/fixture/StartReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/StartReplicationResponse.proto b/fixture/StartReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartReplicationResponse.proto
diff --git a/fixture/StopFailback.yaml b/fixture/StopFailback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopFailback.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/StopFailbackResponse.proto b/fixture/StopFailbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopFailbackResponse.proto
diff --git a/fixture/StopReplication.yaml b/fixture/StopReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/StopReplicationResponse.proto b/fixture/StopReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopReplicationResponse.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/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/TerminateRecoveryInstances.yaml b/fixture/TerminateRecoveryInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateRecoveryInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/TerminateRecoveryInstancesResponse.proto b/fixture/TerminateRecoveryInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateRecoveryInstancesResponse.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/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/UpdateFailbackReplicationConfiguration.yaml b/fixture/UpdateFailbackReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFailbackReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/UpdateFailbackReplicationConfigurationResponse.proto b/fixture/UpdateFailbackReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFailbackReplicationConfigurationResponse.proto
diff --git a/fixture/UpdateLaunchConfiguration.yaml b/fixture/UpdateLaunchConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/UpdateLaunchConfigurationResponse.proto b/fixture/UpdateLaunchConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchConfigurationResponse.proto
diff --git a/fixture/UpdateReplicationConfiguration.yaml b/fixture/UpdateReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/UpdateReplicationConfigurationResponse.proto b/fixture/UpdateReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateReplicationConfigurationResponse.proto
diff --git a/fixture/UpdateReplicationConfigurationTemplate.yaml b/fixture/UpdateReplicationConfigurationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateReplicationConfigurationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/drs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  drs.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/UpdateReplicationConfigurationTemplateResponse.proto b/fixture/UpdateReplicationConfigurationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateReplicationConfigurationTemplateResponse.proto
diff --git a/gen/Amazonka/DrS.hs b/gen/Amazonka/DrS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS.hs
@@ -0,0 +1,597 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.DrS
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-02-26@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Elastic Disaster Recovery Service.
+module Amazonka.DrS
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** UninitializedAccountException
+    _UninitializedAccountException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateExtendedSourceServer
+    CreateExtendedSourceServer (CreateExtendedSourceServer'),
+    newCreateExtendedSourceServer,
+    CreateExtendedSourceServerResponse (CreateExtendedSourceServerResponse'),
+    newCreateExtendedSourceServerResponse,
+
+    -- ** CreateReplicationConfigurationTemplate
+    CreateReplicationConfigurationTemplate (CreateReplicationConfigurationTemplate'),
+    newCreateReplicationConfigurationTemplate,
+    ReplicationConfigurationTemplate (ReplicationConfigurationTemplate'),
+    newReplicationConfigurationTemplate,
+
+    -- ** DeleteJob
+    DeleteJob (DeleteJob'),
+    newDeleteJob,
+    DeleteJobResponse (DeleteJobResponse'),
+    newDeleteJobResponse,
+
+    -- ** DeleteRecoveryInstance
+    DeleteRecoveryInstance (DeleteRecoveryInstance'),
+    newDeleteRecoveryInstance,
+    DeleteRecoveryInstanceResponse (DeleteRecoveryInstanceResponse'),
+    newDeleteRecoveryInstanceResponse,
+
+    -- ** DeleteReplicationConfigurationTemplate
+    DeleteReplicationConfigurationTemplate (DeleteReplicationConfigurationTemplate'),
+    newDeleteReplicationConfigurationTemplate,
+    DeleteReplicationConfigurationTemplateResponse (DeleteReplicationConfigurationTemplateResponse'),
+    newDeleteReplicationConfigurationTemplateResponse,
+
+    -- ** DeleteSourceServer
+    DeleteSourceServer (DeleteSourceServer'),
+    newDeleteSourceServer,
+    DeleteSourceServerResponse (DeleteSourceServerResponse'),
+    newDeleteSourceServerResponse,
+
+    -- ** DescribeJobLogItems (Paginated)
+    DescribeJobLogItems (DescribeJobLogItems'),
+    newDescribeJobLogItems,
+    DescribeJobLogItemsResponse (DescribeJobLogItemsResponse'),
+    newDescribeJobLogItemsResponse,
+
+    -- ** DescribeJobs (Paginated)
+    DescribeJobs (DescribeJobs'),
+    newDescribeJobs,
+    DescribeJobsResponse (DescribeJobsResponse'),
+    newDescribeJobsResponse,
+
+    -- ** DescribeRecoveryInstances (Paginated)
+    DescribeRecoveryInstances (DescribeRecoveryInstances'),
+    newDescribeRecoveryInstances,
+    DescribeRecoveryInstancesResponse (DescribeRecoveryInstancesResponse'),
+    newDescribeRecoveryInstancesResponse,
+
+    -- ** DescribeRecoverySnapshots (Paginated)
+    DescribeRecoverySnapshots (DescribeRecoverySnapshots'),
+    newDescribeRecoverySnapshots,
+    DescribeRecoverySnapshotsResponse (DescribeRecoverySnapshotsResponse'),
+    newDescribeRecoverySnapshotsResponse,
+
+    -- ** DescribeReplicationConfigurationTemplates (Paginated)
+    DescribeReplicationConfigurationTemplates (DescribeReplicationConfigurationTemplates'),
+    newDescribeReplicationConfigurationTemplates,
+    DescribeReplicationConfigurationTemplatesResponse (DescribeReplicationConfigurationTemplatesResponse'),
+    newDescribeReplicationConfigurationTemplatesResponse,
+
+    -- ** DescribeSourceServers (Paginated)
+    DescribeSourceServers (DescribeSourceServers'),
+    newDescribeSourceServers,
+    DescribeSourceServersResponse (DescribeSourceServersResponse'),
+    newDescribeSourceServersResponse,
+
+    -- ** DisconnectRecoveryInstance
+    DisconnectRecoveryInstance (DisconnectRecoveryInstance'),
+    newDisconnectRecoveryInstance,
+    DisconnectRecoveryInstanceResponse (DisconnectRecoveryInstanceResponse'),
+    newDisconnectRecoveryInstanceResponse,
+
+    -- ** DisconnectSourceServer
+    DisconnectSourceServer (DisconnectSourceServer'),
+    newDisconnectSourceServer,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** GetFailbackReplicationConfiguration
+    GetFailbackReplicationConfiguration (GetFailbackReplicationConfiguration'),
+    newGetFailbackReplicationConfiguration,
+    GetFailbackReplicationConfigurationResponse (GetFailbackReplicationConfigurationResponse'),
+    newGetFailbackReplicationConfigurationResponse,
+
+    -- ** GetLaunchConfiguration
+    GetLaunchConfiguration (GetLaunchConfiguration'),
+    newGetLaunchConfiguration,
+    LaunchConfiguration (LaunchConfiguration'),
+    newLaunchConfiguration,
+
+    -- ** GetReplicationConfiguration
+    GetReplicationConfiguration (GetReplicationConfiguration'),
+    newGetReplicationConfiguration,
+    ReplicationConfiguration (ReplicationConfiguration'),
+    newReplicationConfiguration,
+
+    -- ** InitializeService
+    InitializeService (InitializeService'),
+    newInitializeService,
+    InitializeServiceResponse (InitializeServiceResponse'),
+    newInitializeServiceResponse,
+
+    -- ** ListExtensibleSourceServers (Paginated)
+    ListExtensibleSourceServers (ListExtensibleSourceServers'),
+    newListExtensibleSourceServers,
+    ListExtensibleSourceServersResponse (ListExtensibleSourceServersResponse'),
+    newListExtensibleSourceServersResponse,
+
+    -- ** ListStagingAccounts (Paginated)
+    ListStagingAccounts (ListStagingAccounts'),
+    newListStagingAccounts,
+    ListStagingAccountsResponse (ListStagingAccountsResponse'),
+    newListStagingAccountsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** RetryDataReplication
+    RetryDataReplication (RetryDataReplication'),
+    newRetryDataReplication,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** ReverseReplication
+    ReverseReplication (ReverseReplication'),
+    newReverseReplication,
+    ReverseReplicationResponse (ReverseReplicationResponse'),
+    newReverseReplicationResponse,
+
+    -- ** StartFailbackLaunch
+    StartFailbackLaunch (StartFailbackLaunch'),
+    newStartFailbackLaunch,
+    StartFailbackLaunchResponse (StartFailbackLaunchResponse'),
+    newStartFailbackLaunchResponse,
+
+    -- ** StartRecovery
+    StartRecovery (StartRecovery'),
+    newStartRecovery,
+    StartRecoveryResponse (StartRecoveryResponse'),
+    newStartRecoveryResponse,
+
+    -- ** StartReplication
+    StartReplication (StartReplication'),
+    newStartReplication,
+    StartReplicationResponse (StartReplicationResponse'),
+    newStartReplicationResponse,
+
+    -- ** StopFailback
+    StopFailback (StopFailback'),
+    newStopFailback,
+    StopFailbackResponse (StopFailbackResponse'),
+    newStopFailbackResponse,
+
+    -- ** StopReplication
+    StopReplication (StopReplication'),
+    newStopReplication,
+    StopReplicationResponse (StopReplicationResponse'),
+    newStopReplicationResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** TerminateRecoveryInstances
+    TerminateRecoveryInstances (TerminateRecoveryInstances'),
+    newTerminateRecoveryInstances,
+    TerminateRecoveryInstancesResponse (TerminateRecoveryInstancesResponse'),
+    newTerminateRecoveryInstancesResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateFailbackReplicationConfiguration
+    UpdateFailbackReplicationConfiguration (UpdateFailbackReplicationConfiguration'),
+    newUpdateFailbackReplicationConfiguration,
+    UpdateFailbackReplicationConfigurationResponse (UpdateFailbackReplicationConfigurationResponse'),
+    newUpdateFailbackReplicationConfigurationResponse,
+
+    -- ** UpdateLaunchConfiguration
+    UpdateLaunchConfiguration (UpdateLaunchConfiguration'),
+    newUpdateLaunchConfiguration,
+    LaunchConfiguration (LaunchConfiguration'),
+    newLaunchConfiguration,
+
+    -- ** UpdateReplicationConfiguration
+    UpdateReplicationConfiguration (UpdateReplicationConfiguration'),
+    newUpdateReplicationConfiguration,
+    ReplicationConfiguration (ReplicationConfiguration'),
+    newReplicationConfiguration,
+
+    -- ** UpdateReplicationConfigurationTemplate
+    UpdateReplicationConfigurationTemplate (UpdateReplicationConfigurationTemplate'),
+    newUpdateReplicationConfigurationTemplate,
+    ReplicationConfigurationTemplate (ReplicationConfigurationTemplate'),
+    newReplicationConfigurationTemplate,
+
+    -- * Types
+
+    -- ** DataReplicationErrorString
+    DataReplicationErrorString (..),
+
+    -- ** DataReplicationInitiationStepName
+    DataReplicationInitiationStepName (..),
+
+    -- ** DataReplicationInitiationStepStatus
+    DataReplicationInitiationStepStatus (..),
+
+    -- ** DataReplicationState
+    DataReplicationState (..),
+
+    -- ** EC2InstanceState
+    EC2InstanceState (..),
+
+    -- ** ExtensionStatus
+    ExtensionStatus (..),
+
+    -- ** FailbackLaunchType
+    FailbackLaunchType (..),
+
+    -- ** FailbackReplicationError
+    FailbackReplicationError (..),
+
+    -- ** FailbackState
+    FailbackState (..),
+
+    -- ** InitiatedBy
+    InitiatedBy (..),
+
+    -- ** JobLogEvent
+    JobLogEvent (..),
+
+    -- ** JobStatus
+    JobStatus (..),
+
+    -- ** JobType
+    JobType (..),
+
+    -- ** LastLaunchResult
+    LastLaunchResult (..),
+
+    -- ** LastLaunchType
+    LastLaunchType (..),
+
+    -- ** LaunchDisposition
+    LaunchDisposition (..),
+
+    -- ** LaunchStatus
+    LaunchStatus (..),
+
+    -- ** OriginEnvironment
+    OriginEnvironment (..),
+
+    -- ** PITPolicyRuleUnits
+    PITPolicyRuleUnits (..),
+
+    -- ** RecoveryInstanceDataReplicationInitiationStepName
+    RecoveryInstanceDataReplicationInitiationStepName (..),
+
+    -- ** RecoveryInstanceDataReplicationInitiationStepStatus
+    RecoveryInstanceDataReplicationInitiationStepStatus (..),
+
+    -- ** RecoveryInstanceDataReplicationState
+    RecoveryInstanceDataReplicationState (..),
+
+    -- ** RecoverySnapshotsOrder
+    RecoverySnapshotsOrder (..),
+
+    -- ** ReplicationConfigurationDataPlaneRouting
+    ReplicationConfigurationDataPlaneRouting (..),
+
+    -- ** ReplicationConfigurationDefaultLargeStagingDiskType
+    ReplicationConfigurationDefaultLargeStagingDiskType (..),
+
+    -- ** ReplicationConfigurationEbsEncryption
+    ReplicationConfigurationEbsEncryption (..),
+
+    -- ** ReplicationConfigurationReplicatedDiskStagingDiskType
+    ReplicationConfigurationReplicatedDiskStagingDiskType (..),
+
+    -- ** ReplicationDirection
+    ReplicationDirection (..),
+
+    -- ** TargetInstanceTypeRightSizingMethod
+    TargetInstanceTypeRightSizingMethod (..),
+
+    -- ** Account
+    Account (Account'),
+    newAccount,
+
+    -- ** CPU
+    CPU (CPU'),
+    newCPU,
+
+    -- ** ConversionProperties
+    ConversionProperties (ConversionProperties'),
+    newConversionProperties,
+
+    -- ** DataReplicationError
+    DataReplicationError (DataReplicationError'),
+    newDataReplicationError,
+
+    -- ** DataReplicationInfo
+    DataReplicationInfo (DataReplicationInfo'),
+    newDataReplicationInfo,
+
+    -- ** DataReplicationInfoReplicatedDisk
+    DataReplicationInfoReplicatedDisk (DataReplicationInfoReplicatedDisk'),
+    newDataReplicationInfoReplicatedDisk,
+
+    -- ** DataReplicationInitiation
+    DataReplicationInitiation (DataReplicationInitiation'),
+    newDataReplicationInitiation,
+
+    -- ** DataReplicationInitiationStep
+    DataReplicationInitiationStep (DataReplicationInitiationStep'),
+    newDataReplicationInitiationStep,
+
+    -- ** DescribeJobsRequestFilters
+    DescribeJobsRequestFilters (DescribeJobsRequestFilters'),
+    newDescribeJobsRequestFilters,
+
+    -- ** DescribeRecoveryInstancesRequestFilters
+    DescribeRecoveryInstancesRequestFilters (DescribeRecoveryInstancesRequestFilters'),
+    newDescribeRecoveryInstancesRequestFilters,
+
+    -- ** DescribeRecoverySnapshotsRequestFilters
+    DescribeRecoverySnapshotsRequestFilters (DescribeRecoverySnapshotsRequestFilters'),
+    newDescribeRecoverySnapshotsRequestFilters,
+
+    -- ** DescribeSourceServersRequestFilters
+    DescribeSourceServersRequestFilters (DescribeSourceServersRequestFilters'),
+    newDescribeSourceServersRequestFilters,
+
+    -- ** Disk
+    Disk (Disk'),
+    newDisk,
+
+    -- ** IdentificationHints
+    IdentificationHints (IdentificationHints'),
+    newIdentificationHints,
+
+    -- ** Job
+    Job (Job'),
+    newJob,
+
+    -- ** JobLog
+    JobLog (JobLog'),
+    newJobLog,
+
+    -- ** JobLogEventData
+    JobLogEventData (JobLogEventData'),
+    newJobLogEventData,
+
+    -- ** LaunchConfiguration
+    LaunchConfiguration (LaunchConfiguration'),
+    newLaunchConfiguration,
+
+    -- ** Licensing
+    Licensing (Licensing'),
+    newLicensing,
+
+    -- ** LifeCycle
+    LifeCycle (LifeCycle'),
+    newLifeCycle,
+
+    -- ** LifeCycleLastLaunch
+    LifeCycleLastLaunch (LifeCycleLastLaunch'),
+    newLifeCycleLastLaunch,
+
+    -- ** LifeCycleLastLaunchInitiated
+    LifeCycleLastLaunchInitiated (LifeCycleLastLaunchInitiated'),
+    newLifeCycleLastLaunchInitiated,
+
+    -- ** NetworkInterface
+    NetworkInterface (NetworkInterface'),
+    newNetworkInterface,
+
+    -- ** OS
+    OS (OS'),
+    newOS,
+
+    -- ** PITPolicyRule
+    PITPolicyRule (PITPolicyRule'),
+    newPITPolicyRule,
+
+    -- ** ParticipatingServer
+    ParticipatingServer (ParticipatingServer'),
+    newParticipatingServer,
+
+    -- ** RecoveryInstance
+    RecoveryInstance (RecoveryInstance'),
+    newRecoveryInstance,
+
+    -- ** RecoveryInstanceDataReplicationError
+    RecoveryInstanceDataReplicationError (RecoveryInstanceDataReplicationError'),
+    newRecoveryInstanceDataReplicationError,
+
+    -- ** RecoveryInstanceDataReplicationInfo
+    RecoveryInstanceDataReplicationInfo (RecoveryInstanceDataReplicationInfo'),
+    newRecoveryInstanceDataReplicationInfo,
+
+    -- ** RecoveryInstanceDataReplicationInfoReplicatedDisk
+    RecoveryInstanceDataReplicationInfoReplicatedDisk (RecoveryInstanceDataReplicationInfoReplicatedDisk'),
+    newRecoveryInstanceDataReplicationInfoReplicatedDisk,
+
+    -- ** RecoveryInstanceDataReplicationInitiation
+    RecoveryInstanceDataReplicationInitiation (RecoveryInstanceDataReplicationInitiation'),
+    newRecoveryInstanceDataReplicationInitiation,
+
+    -- ** RecoveryInstanceDataReplicationInitiationStep
+    RecoveryInstanceDataReplicationInitiationStep (RecoveryInstanceDataReplicationInitiationStep'),
+    newRecoveryInstanceDataReplicationInitiationStep,
+
+    -- ** RecoveryInstanceDisk
+    RecoveryInstanceDisk (RecoveryInstanceDisk'),
+    newRecoveryInstanceDisk,
+
+    -- ** RecoveryInstanceFailback
+    RecoveryInstanceFailback (RecoveryInstanceFailback'),
+    newRecoveryInstanceFailback,
+
+    -- ** RecoveryInstanceProperties
+    RecoveryInstanceProperties (RecoveryInstanceProperties'),
+    newRecoveryInstanceProperties,
+
+    -- ** RecoverySnapshot
+    RecoverySnapshot (RecoverySnapshot'),
+    newRecoverySnapshot,
+
+    -- ** ReplicationConfiguration
+    ReplicationConfiguration (ReplicationConfiguration'),
+    newReplicationConfiguration,
+
+    -- ** ReplicationConfigurationReplicatedDisk
+    ReplicationConfigurationReplicatedDisk (ReplicationConfigurationReplicatedDisk'),
+    newReplicationConfigurationReplicatedDisk,
+
+    -- ** ReplicationConfigurationTemplate
+    ReplicationConfigurationTemplate (ReplicationConfigurationTemplate'),
+    newReplicationConfigurationTemplate,
+
+    -- ** SourceCloudProperties
+    SourceCloudProperties (SourceCloudProperties'),
+    newSourceCloudProperties,
+
+    -- ** SourceProperties
+    SourceProperties (SourceProperties'),
+    newSourceProperties,
+
+    -- ** SourceServer
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** StagingArea
+    StagingArea (StagingArea'),
+    newStagingArea,
+
+    -- ** StagingSourceServer
+    StagingSourceServer (StagingSourceServer'),
+    newStagingSourceServer,
+
+    -- ** StartRecoveryRequestSourceServer
+    StartRecoveryRequestSourceServer (StartRecoveryRequestSourceServer'),
+    newStartRecoveryRequestSourceServer,
+  )
+where
+
+import Amazonka.DrS.CreateExtendedSourceServer
+import Amazonka.DrS.CreateReplicationConfigurationTemplate
+import Amazonka.DrS.DeleteJob
+import Amazonka.DrS.DeleteRecoveryInstance
+import Amazonka.DrS.DeleteReplicationConfigurationTemplate
+import Amazonka.DrS.DeleteSourceServer
+import Amazonka.DrS.DescribeJobLogItems
+import Amazonka.DrS.DescribeJobs
+import Amazonka.DrS.DescribeRecoveryInstances
+import Amazonka.DrS.DescribeRecoverySnapshots
+import Amazonka.DrS.DescribeReplicationConfigurationTemplates
+import Amazonka.DrS.DescribeSourceServers
+import Amazonka.DrS.DisconnectRecoveryInstance
+import Amazonka.DrS.DisconnectSourceServer
+import Amazonka.DrS.GetFailbackReplicationConfiguration
+import Amazonka.DrS.GetLaunchConfiguration
+import Amazonka.DrS.GetReplicationConfiguration
+import Amazonka.DrS.InitializeService
+import Amazonka.DrS.Lens
+import Amazonka.DrS.ListExtensibleSourceServers
+import Amazonka.DrS.ListStagingAccounts
+import Amazonka.DrS.ListTagsForResource
+import Amazonka.DrS.RetryDataReplication
+import Amazonka.DrS.ReverseReplication
+import Amazonka.DrS.StartFailbackLaunch
+import Amazonka.DrS.StartRecovery
+import Amazonka.DrS.StartReplication
+import Amazonka.DrS.StopFailback
+import Amazonka.DrS.StopReplication
+import Amazonka.DrS.TagResource
+import Amazonka.DrS.TerminateRecoveryInstances
+import Amazonka.DrS.Types
+import Amazonka.DrS.UntagResource
+import Amazonka.DrS.UpdateFailbackReplicationConfiguration
+import Amazonka.DrS.UpdateLaunchConfiguration
+import Amazonka.DrS.UpdateReplicationConfiguration
+import Amazonka.DrS.UpdateReplicationConfigurationTemplate
+import Amazonka.DrS.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 'DrS'.
+
+-- $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/DrS/CreateExtendedSourceServer.hs b/gen/Amazonka/DrS/CreateExtendedSourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/CreateExtendedSourceServer.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.CreateExtendedSourceServer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an extended source server in the target Account based on the
+-- source server in staging account.
+module Amazonka.DrS.CreateExtendedSourceServer
+  ( -- * Creating a Request
+    CreateExtendedSourceServer (..),
+    newCreateExtendedSourceServer,
+
+    -- * Request Lenses
+    createExtendedSourceServer_tags,
+    createExtendedSourceServer_sourceServerArn,
+
+    -- * Destructuring the Response
+    CreateExtendedSourceServerResponse (..),
+    newCreateExtendedSourceServerResponse,
+
+    -- * Response Lenses
+    createExtendedSourceServerResponse_sourceServer,
+    createExtendedSourceServerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExtendedSourceServer' smart constructor.
+data CreateExtendedSourceServer = CreateExtendedSourceServer'
+  { -- | A list of tags associated with the extended source server.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | This defines the ARN of the source server in staging Account based on
+    -- which you want to create an extended source server.
+    sourceServerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExtendedSourceServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createExtendedSourceServer_tags' - A list of tags associated with the extended source server.
+--
+-- 'sourceServerArn', 'createExtendedSourceServer_sourceServerArn' - This defines the ARN of the source server in staging Account based on
+-- which you want to create an extended source server.
+newCreateExtendedSourceServer ::
+  -- | 'sourceServerArn'
+  Prelude.Text ->
+  CreateExtendedSourceServer
+newCreateExtendedSourceServer pSourceServerArn_ =
+  CreateExtendedSourceServer'
+    { tags = Prelude.Nothing,
+      sourceServerArn = pSourceServerArn_
+    }
+
+-- | A list of tags associated with the extended source server.
+createExtendedSourceServer_tags :: Lens.Lens' CreateExtendedSourceServer (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createExtendedSourceServer_tags = Lens.lens (\CreateExtendedSourceServer' {tags} -> tags) (\s@CreateExtendedSourceServer' {} a -> s {tags = a} :: CreateExtendedSourceServer) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | This defines the ARN of the source server in staging Account based on
+-- which you want to create an extended source server.
+createExtendedSourceServer_sourceServerArn :: Lens.Lens' CreateExtendedSourceServer Prelude.Text
+createExtendedSourceServer_sourceServerArn = Lens.lens (\CreateExtendedSourceServer' {sourceServerArn} -> sourceServerArn) (\s@CreateExtendedSourceServer' {} a -> s {sourceServerArn = a} :: CreateExtendedSourceServer)
+
+instance Core.AWSRequest CreateExtendedSourceServer where
+  type
+    AWSResponse CreateExtendedSourceServer =
+      CreateExtendedSourceServerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateExtendedSourceServerResponse'
+            Prelude.<$> (x Data..?> "sourceServer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateExtendedSourceServer where
+  hashWithSalt _salt CreateExtendedSourceServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceServerArn
+
+instance Prelude.NFData CreateExtendedSourceServer where
+  rnf CreateExtendedSourceServer' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceServerArn
+
+instance Data.ToHeaders CreateExtendedSourceServer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExtendedSourceServer where
+  toJSON CreateExtendedSourceServer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("sourceServerArn" Data..= sourceServerArn)
+          ]
+      )
+
+instance Data.ToPath CreateExtendedSourceServer where
+  toPath = Prelude.const "/CreateExtendedSourceServer"
+
+instance Data.ToQuery CreateExtendedSourceServer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateExtendedSourceServerResponse' smart constructor.
+data CreateExtendedSourceServerResponse = CreateExtendedSourceServerResponse'
+  { -- | Created extended source server.
+    sourceServer :: Prelude.Maybe SourceServer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExtendedSourceServerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServer', 'createExtendedSourceServerResponse_sourceServer' - Created extended source server.
+--
+-- 'httpStatus', 'createExtendedSourceServerResponse_httpStatus' - The response's http status code.
+newCreateExtendedSourceServerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateExtendedSourceServerResponse
+newCreateExtendedSourceServerResponse pHttpStatus_ =
+  CreateExtendedSourceServerResponse'
+    { sourceServer =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Created extended source server.
+createExtendedSourceServerResponse_sourceServer :: Lens.Lens' CreateExtendedSourceServerResponse (Prelude.Maybe SourceServer)
+createExtendedSourceServerResponse_sourceServer = Lens.lens (\CreateExtendedSourceServerResponse' {sourceServer} -> sourceServer) (\s@CreateExtendedSourceServerResponse' {} a -> s {sourceServer = a} :: CreateExtendedSourceServerResponse)
+
+-- | The response's http status code.
+createExtendedSourceServerResponse_httpStatus :: Lens.Lens' CreateExtendedSourceServerResponse Prelude.Int
+createExtendedSourceServerResponse_httpStatus = Lens.lens (\CreateExtendedSourceServerResponse' {httpStatus} -> httpStatus) (\s@CreateExtendedSourceServerResponse' {} a -> s {httpStatus = a} :: CreateExtendedSourceServerResponse)
+
+instance
+  Prelude.NFData
+    CreateExtendedSourceServerResponse
+  where
+  rnf CreateExtendedSourceServerResponse' {..} =
+    Prelude.rnf sourceServer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/CreateReplicationConfigurationTemplate.hs b/gen/Amazonka/DrS/CreateReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/CreateReplicationConfigurationTemplate.hs
@@ -0,0 +1,410 @@
+{-# 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.DrS.CreateReplicationConfigurationTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new ReplicationConfigurationTemplate.
+module Amazonka.DrS.CreateReplicationConfigurationTemplate
+  ( -- * Creating a Request
+    CreateReplicationConfigurationTemplate (..),
+    newCreateReplicationConfigurationTemplate,
+
+    -- * Request Lenses
+    createReplicationConfigurationTemplate_ebsEncryptionKeyArn,
+    createReplicationConfigurationTemplate_tags,
+    createReplicationConfigurationTemplate_associateDefaultSecurityGroup,
+    createReplicationConfigurationTemplate_bandwidthThrottling,
+    createReplicationConfigurationTemplate_createPublicIP,
+    createReplicationConfigurationTemplate_dataPlaneRouting,
+    createReplicationConfigurationTemplate_defaultLargeStagingDiskType,
+    createReplicationConfigurationTemplate_ebsEncryption,
+    createReplicationConfigurationTemplate_pitPolicy,
+    createReplicationConfigurationTemplate_replicationServerInstanceType,
+    createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    createReplicationConfigurationTemplate_stagingAreaSubnetId,
+    createReplicationConfigurationTemplate_stagingAreaTags,
+    createReplicationConfigurationTemplate_useDedicatedReplicationServer,
+
+    -- * Destructuring the Response
+    ReplicationConfigurationTemplate (..),
+    newReplicationConfigurationTemplate,
+
+    -- * Response Lenses
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_pitPolicy,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateReplicationConfigurationTemplate' smart constructor.
+data CreateReplicationConfigurationTemplate = CreateReplicationConfigurationTemplate'
+  { -- | The ARN of the EBS encryption key to be used during replication.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | A set of tags to be associated with the Replication Configuration
+    -- Template resource.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Whether to associate the default Elastic Disaster Recovery Security
+    -- group with the Replication Configuration Template.
+    associateDefaultSecurityGroup :: Prelude.Bool,
+    -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Source Server in Mbps.
+    bandwidthThrottling :: Prelude.Natural,
+    -- | Whether to create a Public IP for the Recovery Instance by default.
+    createPublicIP :: Prelude.Bool,
+    -- | The data plane routing mechanism that will be used for replication.
+    dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting,
+    -- | The Staging Disk EBS volume type to be used during replication.
+    defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | The type of EBS encryption to be used during replication.
+    ebsEncryption :: ReplicationConfigurationEbsEncryption,
+    -- | The Point in time (PIT) policy to manage snapshots taken during
+    -- replication.
+    pitPolicy :: Prelude.NonEmpty PITPolicyRule,
+    -- | The instance type to be used for the replication server.
+    replicationServerInstanceType :: Prelude.Text,
+    -- | The security group IDs that will be used by the replication server.
+    replicationServersSecurityGroupsIDs :: [Prelude.Text],
+    -- | The subnet to be used by the replication staging area.
+    stagingAreaSubnetId :: Prelude.Text,
+    -- | A set of tags to be associated with all resources created in the
+    -- replication staging area: EC2 replication server, EBS volumes, EBS
+    -- snapshots, etc.
+    stagingAreaTags :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Whether to use a dedicated Replication Server in the replication staging
+    -- area.
+    useDedicatedReplicationServer :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReplicationConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebsEncryptionKeyArn', 'createReplicationConfigurationTemplate_ebsEncryptionKeyArn' - The ARN of the EBS encryption key to be used during replication.
+--
+-- 'tags', 'createReplicationConfigurationTemplate_tags' - A set of tags to be associated with the Replication Configuration
+-- Template resource.
+--
+-- 'associateDefaultSecurityGroup', 'createReplicationConfigurationTemplate_associateDefaultSecurityGroup' - Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration Template.
+--
+-- 'bandwidthThrottling', 'createReplicationConfigurationTemplate_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+--
+-- 'createPublicIP', 'createReplicationConfigurationTemplate_createPublicIP' - Whether to create a Public IP for the Recovery Instance by default.
+--
+-- 'dataPlaneRouting', 'createReplicationConfigurationTemplate_dataPlaneRouting' - The data plane routing mechanism that will be used for replication.
+--
+-- 'defaultLargeStagingDiskType', 'createReplicationConfigurationTemplate_defaultLargeStagingDiskType' - The Staging Disk EBS volume type to be used during replication.
+--
+-- 'ebsEncryption', 'createReplicationConfigurationTemplate_ebsEncryption' - The type of EBS encryption to be used during replication.
+--
+-- 'pitPolicy', 'createReplicationConfigurationTemplate_pitPolicy' - The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+--
+-- 'replicationServerInstanceType', 'createReplicationConfigurationTemplate_replicationServerInstanceType' - The instance type to be used for the replication server.
+--
+-- 'replicationServersSecurityGroupsIDs', 'createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - The security group IDs that will be used by the replication server.
+--
+-- 'stagingAreaSubnetId', 'createReplicationConfigurationTemplate_stagingAreaSubnetId' - The subnet to be used by the replication staging area.
+--
+-- 'stagingAreaTags', 'createReplicationConfigurationTemplate_stagingAreaTags' - A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+--
+-- 'useDedicatedReplicationServer', 'createReplicationConfigurationTemplate_useDedicatedReplicationServer' - Whether to use a dedicated Replication Server in the replication staging
+-- area.
+newCreateReplicationConfigurationTemplate ::
+  -- | 'associateDefaultSecurityGroup'
+  Prelude.Bool ->
+  -- | 'bandwidthThrottling'
+  Prelude.Natural ->
+  -- | 'createPublicIP'
+  Prelude.Bool ->
+  -- | 'dataPlaneRouting'
+  ReplicationConfigurationDataPlaneRouting ->
+  -- | 'defaultLargeStagingDiskType'
+  ReplicationConfigurationDefaultLargeStagingDiskType ->
+  -- | 'ebsEncryption'
+  ReplicationConfigurationEbsEncryption ->
+  -- | 'pitPolicy'
+  Prelude.NonEmpty PITPolicyRule ->
+  -- | 'replicationServerInstanceType'
+  Prelude.Text ->
+  -- | 'stagingAreaSubnetId'
+  Prelude.Text ->
+  -- | 'useDedicatedReplicationServer'
+  Prelude.Bool ->
+  CreateReplicationConfigurationTemplate
+newCreateReplicationConfigurationTemplate
+  pAssociateDefaultSecurityGroup_
+  pBandwidthThrottling_
+  pCreatePublicIP_
+  pDataPlaneRouting_
+  pDefaultLargeStagingDiskType_
+  pEbsEncryption_
+  pPitPolicy_
+  pReplicationServerInstanceType_
+  pStagingAreaSubnetId_
+  pUseDedicatedReplicationServer_ =
+    CreateReplicationConfigurationTemplate'
+      { ebsEncryptionKeyArn =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        associateDefaultSecurityGroup =
+          pAssociateDefaultSecurityGroup_,
+        bandwidthThrottling =
+          pBandwidthThrottling_,
+        createPublicIP = pCreatePublicIP_,
+        dataPlaneRouting =
+          pDataPlaneRouting_,
+        defaultLargeStagingDiskType =
+          pDefaultLargeStagingDiskType_,
+        ebsEncryption = pEbsEncryption_,
+        pitPolicy =
+          Lens.coerced Lens.# pPitPolicy_,
+        replicationServerInstanceType =
+          pReplicationServerInstanceType_,
+        replicationServersSecurityGroupsIDs =
+          Prelude.mempty,
+        stagingAreaSubnetId =
+          pStagingAreaSubnetId_,
+        stagingAreaTags = Prelude.mempty,
+        useDedicatedReplicationServer =
+          pUseDedicatedReplicationServer_
+      }
+
+-- | The ARN of the EBS encryption key to be used during replication.
+createReplicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+createReplicationConfigurationTemplate_ebsEncryptionKeyArn = Lens.lens (\CreateReplicationConfigurationTemplate' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@CreateReplicationConfigurationTemplate' {} a -> s {ebsEncryptionKeyArn = a} :: CreateReplicationConfigurationTemplate)
+
+-- | A set of tags to be associated with the Replication Configuration
+-- Template resource.
+createReplicationConfigurationTemplate_tags :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createReplicationConfigurationTemplate_tags = Lens.lens (\CreateReplicationConfigurationTemplate' {tags} -> tags) (\s@CreateReplicationConfigurationTemplate' {} a -> s {tags = a} :: CreateReplicationConfigurationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration Template.
+createReplicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
+createReplicationConfigurationTemplate_associateDefaultSecurityGroup = Lens.lens (\CreateReplicationConfigurationTemplate' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@CreateReplicationConfigurationTemplate' {} a -> s {associateDefaultSecurityGroup = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+createReplicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Natural
+createReplicationConfigurationTemplate_bandwidthThrottling = Lens.lens (\CreateReplicationConfigurationTemplate' {bandwidthThrottling} -> bandwidthThrottling) (\s@CreateReplicationConfigurationTemplate' {} a -> s {bandwidthThrottling = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Whether to create a Public IP for the Recovery Instance by default.
+createReplicationConfigurationTemplate_createPublicIP :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
+createReplicationConfigurationTemplate_createPublicIP = Lens.lens (\CreateReplicationConfigurationTemplate' {createPublicIP} -> createPublicIP) (\s@CreateReplicationConfigurationTemplate' {} a -> s {createPublicIP = a} :: CreateReplicationConfigurationTemplate)
+
+-- | The data plane routing mechanism that will be used for replication.
+createReplicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationDataPlaneRouting
+createReplicationConfigurationTemplate_dataPlaneRouting = Lens.lens (\CreateReplicationConfigurationTemplate' {dataPlaneRouting} -> dataPlaneRouting) (\s@CreateReplicationConfigurationTemplate' {} a -> s {dataPlaneRouting = a} :: CreateReplicationConfigurationTemplate)
+
+-- | The Staging Disk EBS volume type to be used during replication.
+createReplicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationDefaultLargeStagingDiskType
+createReplicationConfigurationTemplate_defaultLargeStagingDiskType = Lens.lens (\CreateReplicationConfigurationTemplate' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@CreateReplicationConfigurationTemplate' {} a -> s {defaultLargeStagingDiskType = a} :: CreateReplicationConfigurationTemplate)
+
+-- | The type of EBS encryption to be used during replication.
+createReplicationConfigurationTemplate_ebsEncryption :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationEbsEncryption
+createReplicationConfigurationTemplate_ebsEncryption = Lens.lens (\CreateReplicationConfigurationTemplate' {ebsEncryption} -> ebsEncryption) (\s@CreateReplicationConfigurationTemplate' {} a -> s {ebsEncryption = a} :: CreateReplicationConfigurationTemplate)
+
+-- | The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+createReplicationConfigurationTemplate_pitPolicy :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.NonEmpty PITPolicyRule)
+createReplicationConfigurationTemplate_pitPolicy = Lens.lens (\CreateReplicationConfigurationTemplate' {pitPolicy} -> pitPolicy) (\s@CreateReplicationConfigurationTemplate' {} a -> s {pitPolicy = a} :: CreateReplicationConfigurationTemplate) Prelude.. Lens.coerced
+
+-- | The instance type to be used for the replication server.
+createReplicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Text
+createReplicationConfigurationTemplate_replicationServerInstanceType = Lens.lens (\CreateReplicationConfigurationTemplate' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@CreateReplicationConfigurationTemplate' {} a -> s {replicationServerInstanceType = a} :: CreateReplicationConfigurationTemplate)
+
+-- | The security group IDs that will be used by the replication server.
+createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs :: Lens.Lens' CreateReplicationConfigurationTemplate [Prelude.Text]
+createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs = Lens.lens (\CreateReplicationConfigurationTemplate' {replicationServersSecurityGroupsIDs} -> replicationServersSecurityGroupsIDs) (\s@CreateReplicationConfigurationTemplate' {} a -> s {replicationServersSecurityGroupsIDs = a} :: CreateReplicationConfigurationTemplate) Prelude.. Lens.coerced
+
+-- | The subnet to be used by the replication staging area.
+createReplicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Text
+createReplicationConfigurationTemplate_stagingAreaSubnetId = Lens.lens (\CreateReplicationConfigurationTemplate' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@CreateReplicationConfigurationTemplate' {} a -> s {stagingAreaSubnetId = a} :: CreateReplicationConfigurationTemplate)
+
+-- | A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+createReplicationConfigurationTemplate_stagingAreaTags :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.HashMap Prelude.Text Prelude.Text)
+createReplicationConfigurationTemplate_stagingAreaTags = Lens.lens (\CreateReplicationConfigurationTemplate' {stagingAreaTags} -> stagingAreaTags) (\s@CreateReplicationConfigurationTemplate' {} a -> s {stagingAreaTags = a} :: CreateReplicationConfigurationTemplate) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | Whether to use a dedicated Replication Server in the replication staging
+-- area.
+createReplicationConfigurationTemplate_useDedicatedReplicationServer :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
+createReplicationConfigurationTemplate_useDedicatedReplicationServer = Lens.lens (\CreateReplicationConfigurationTemplate' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@CreateReplicationConfigurationTemplate' {} a -> s {useDedicatedReplicationServer = a} :: CreateReplicationConfigurationTemplate)
+
+instance
+  Core.AWSRequest
+    CreateReplicationConfigurationTemplate
+  where
+  type
+    AWSResponse
+      CreateReplicationConfigurationTemplate =
+      ReplicationConfigurationTemplate
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance
+  Prelude.Hashable
+    CreateReplicationConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    CreateReplicationConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` ebsEncryptionKeyArn
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` associateDefaultSecurityGroup
+        `Prelude.hashWithSalt` bandwidthThrottling
+        `Prelude.hashWithSalt` createPublicIP
+        `Prelude.hashWithSalt` dataPlaneRouting
+        `Prelude.hashWithSalt` defaultLargeStagingDiskType
+        `Prelude.hashWithSalt` ebsEncryption
+        `Prelude.hashWithSalt` pitPolicy
+        `Prelude.hashWithSalt` replicationServerInstanceType
+        `Prelude.hashWithSalt` replicationServersSecurityGroupsIDs
+        `Prelude.hashWithSalt` stagingAreaSubnetId
+        `Prelude.hashWithSalt` stagingAreaTags
+        `Prelude.hashWithSalt` useDedicatedReplicationServer
+
+instance
+  Prelude.NFData
+    CreateReplicationConfigurationTemplate
+  where
+  rnf CreateReplicationConfigurationTemplate' {..} =
+    Prelude.rnf ebsEncryptionKeyArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf associateDefaultSecurityGroup
+      `Prelude.seq` Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf createPublicIP
+      `Prelude.seq` Prelude.rnf dataPlaneRouting
+      `Prelude.seq` Prelude.rnf defaultLargeStagingDiskType
+      `Prelude.seq` Prelude.rnf ebsEncryption
+      `Prelude.seq` Prelude.rnf pitPolicy
+      `Prelude.seq` Prelude.rnf replicationServerInstanceType
+      `Prelude.seq` Prelude.rnf replicationServersSecurityGroupsIDs
+      `Prelude.seq` Prelude.rnf stagingAreaSubnetId
+      `Prelude.seq` Prelude.rnf stagingAreaTags
+      `Prelude.seq` Prelude.rnf useDedicatedReplicationServer
+
+instance
+  Data.ToHeaders
+    CreateReplicationConfigurationTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    CreateReplicationConfigurationTemplate
+  where
+  toJSON CreateReplicationConfigurationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ebsEncryptionKeyArn" Data..=)
+              Prelude.<$> ebsEncryptionKeyArn,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "associateDefaultSecurityGroup"
+                  Data..= associateDefaultSecurityGroup
+              ),
+            Prelude.Just
+              ("bandwidthThrottling" Data..= bandwidthThrottling),
+            Prelude.Just
+              ("createPublicIP" Data..= createPublicIP),
+            Prelude.Just
+              ("dataPlaneRouting" Data..= dataPlaneRouting),
+            Prelude.Just
+              ( "defaultLargeStagingDiskType"
+                  Data..= defaultLargeStagingDiskType
+              ),
+            Prelude.Just ("ebsEncryption" Data..= ebsEncryption),
+            Prelude.Just ("pitPolicy" Data..= pitPolicy),
+            Prelude.Just
+              ( "replicationServerInstanceType"
+                  Data..= replicationServerInstanceType
+              ),
+            Prelude.Just
+              ( "replicationServersSecurityGroupsIDs"
+                  Data..= replicationServersSecurityGroupsIDs
+              ),
+            Prelude.Just
+              ("stagingAreaSubnetId" Data..= stagingAreaSubnetId),
+            Prelude.Just
+              ("stagingAreaTags" Data..= stagingAreaTags),
+            Prelude.Just
+              ( "useDedicatedReplicationServer"
+                  Data..= useDedicatedReplicationServer
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateReplicationConfigurationTemplate
+  where
+  toPath =
+    Prelude.const
+      "/CreateReplicationConfigurationTemplate"
+
+instance
+  Data.ToQuery
+    CreateReplicationConfigurationTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/DeleteJob.hs b/gen/Amazonka/DrS/DeleteJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DeleteJob.hs
@@ -0,0 +1,145 @@
+{-# 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.DrS.DeleteJob
+-- 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 single Job by ID.
+module Amazonka.DrS.DeleteJob
+  ( -- * Creating a Request
+    DeleteJob (..),
+    newDeleteJob,
+
+    -- * Request Lenses
+    deleteJob_jobID,
+
+    -- * Destructuring the Response
+    DeleteJobResponse (..),
+    newDeleteJobResponse,
+
+    -- * Response Lenses
+    deleteJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteJob' smart constructor.
+data DeleteJob = DeleteJob'
+  { -- | The ID of the Job to be deleted.
+    jobID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobID', 'deleteJob_jobID' - The ID of the Job to be deleted.
+newDeleteJob ::
+  -- | 'jobID'
+  Prelude.Text ->
+  DeleteJob
+newDeleteJob pJobID_ = DeleteJob' {jobID = pJobID_}
+
+-- | The ID of the Job to be deleted.
+deleteJob_jobID :: Lens.Lens' DeleteJob Prelude.Text
+deleteJob_jobID = Lens.lens (\DeleteJob' {jobID} -> jobID) (\s@DeleteJob' {} a -> s {jobID = a} :: DeleteJob)
+
+instance Core.AWSRequest DeleteJob where
+  type AWSResponse DeleteJob = DeleteJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteJob where
+  hashWithSalt _salt DeleteJob' {..} =
+    _salt `Prelude.hashWithSalt` jobID
+
+instance Prelude.NFData DeleteJob where
+  rnf DeleteJob' {..} = Prelude.rnf jobID
+
+instance Data.ToHeaders DeleteJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteJob where
+  toJSON DeleteJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobID" Data..= jobID)]
+      )
+
+instance Data.ToPath DeleteJob where
+  toPath = Prelude.const "/DeleteJob"
+
+instance Data.ToQuery DeleteJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteJobResponse' smart constructor.
+data DeleteJobResponse = DeleteJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteJobResponse_httpStatus' - The response's http status code.
+newDeleteJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteJobResponse
+newDeleteJobResponse pHttpStatus_ =
+  DeleteJobResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteJobResponse_httpStatus :: Lens.Lens' DeleteJobResponse Prelude.Int
+deleteJobResponse_httpStatus = Lens.lens (\DeleteJobResponse' {httpStatus} -> httpStatus) (\s@DeleteJobResponse' {} a -> s {httpStatus = a} :: DeleteJobResponse)
+
+instance Prelude.NFData DeleteJobResponse where
+  rnf DeleteJobResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DeleteRecoveryInstance.hs b/gen/Amazonka/DrS/DeleteRecoveryInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DeleteRecoveryInstance.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.DeleteRecoveryInstance
+-- 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 single Recovery Instance by ID. This deletes the Recovery
+-- Instance resource from Elastic Disaster Recovery. The Recovery Instance
+-- must be disconnected first in order to delete it.
+module Amazonka.DrS.DeleteRecoveryInstance
+  ( -- * Creating a Request
+    DeleteRecoveryInstance (..),
+    newDeleteRecoveryInstance,
+
+    -- * Request Lenses
+    deleteRecoveryInstance_recoveryInstanceID,
+
+    -- * Destructuring the Response
+    DeleteRecoveryInstanceResponse (..),
+    newDeleteRecoveryInstanceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRecoveryInstance' smart constructor.
+data DeleteRecoveryInstance = DeleteRecoveryInstance'
+  { -- | The ID of the Recovery Instance to be deleted.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecoveryInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceID', 'deleteRecoveryInstance_recoveryInstanceID' - The ID of the Recovery Instance to be deleted.
+newDeleteRecoveryInstance ::
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  DeleteRecoveryInstance
+newDeleteRecoveryInstance pRecoveryInstanceID_ =
+  DeleteRecoveryInstance'
+    { recoveryInstanceID =
+        pRecoveryInstanceID_
+    }
+
+-- | The ID of the Recovery Instance to be deleted.
+deleteRecoveryInstance_recoveryInstanceID :: Lens.Lens' DeleteRecoveryInstance Prelude.Text
+deleteRecoveryInstance_recoveryInstanceID = Lens.lens (\DeleteRecoveryInstance' {recoveryInstanceID} -> recoveryInstanceID) (\s@DeleteRecoveryInstance' {} a -> s {recoveryInstanceID = a} :: DeleteRecoveryInstance)
+
+instance Core.AWSRequest DeleteRecoveryInstance where
+  type
+    AWSResponse DeleteRecoveryInstance =
+      DeleteRecoveryInstanceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteRecoveryInstanceResponse'
+
+instance Prelude.Hashable DeleteRecoveryInstance where
+  hashWithSalt _salt DeleteRecoveryInstance' {..} =
+    _salt `Prelude.hashWithSalt` recoveryInstanceID
+
+instance Prelude.NFData DeleteRecoveryInstance where
+  rnf DeleteRecoveryInstance' {..} =
+    Prelude.rnf recoveryInstanceID
+
+instance Data.ToHeaders DeleteRecoveryInstance where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRecoveryInstance where
+  toJSON DeleteRecoveryInstance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recoveryInstanceID" Data..= recoveryInstanceID)
+          ]
+      )
+
+instance Data.ToPath DeleteRecoveryInstance where
+  toPath = Prelude.const "/DeleteRecoveryInstance"
+
+instance Data.ToQuery DeleteRecoveryInstance where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRecoveryInstanceResponse' smart constructor.
+data DeleteRecoveryInstanceResponse = DeleteRecoveryInstanceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRecoveryInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRecoveryInstanceResponse ::
+  DeleteRecoveryInstanceResponse
+newDeleteRecoveryInstanceResponse =
+  DeleteRecoveryInstanceResponse'
+
+instance
+  Prelude.NFData
+    DeleteRecoveryInstanceResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/DrS/DeleteReplicationConfigurationTemplate.hs b/gen/Amazonka/DrS/DeleteReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DeleteReplicationConfigurationTemplate.hs
@@ -0,0 +1,193 @@
+{-# 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.DrS.DeleteReplicationConfigurationTemplate
+-- 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 single Replication Configuration Template by ID
+module Amazonka.DrS.DeleteReplicationConfigurationTemplate
+  ( -- * Creating a Request
+    DeleteReplicationConfigurationTemplate (..),
+    newDeleteReplicationConfigurationTemplate,
+
+    -- * Request Lenses
+    deleteReplicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- * Destructuring the Response
+    DeleteReplicationConfigurationTemplateResponse (..),
+    newDeleteReplicationConfigurationTemplateResponse,
+
+    -- * Response Lenses
+    deleteReplicationConfigurationTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteReplicationConfigurationTemplate' smart constructor.
+data DeleteReplicationConfigurationTemplate = DeleteReplicationConfigurationTemplate'
+  { -- | The ID of the Replication Configuration Template to be deleted.
+    replicationConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteReplicationConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicationConfigurationTemplateID', 'deleteReplicationConfigurationTemplate_replicationConfigurationTemplateID' - The ID of the Replication Configuration Template to be deleted.
+newDeleteReplicationConfigurationTemplate ::
+  -- | 'replicationConfigurationTemplateID'
+  Prelude.Text ->
+  DeleteReplicationConfigurationTemplate
+newDeleteReplicationConfigurationTemplate
+  pReplicationConfigurationTemplateID_ =
+    DeleteReplicationConfigurationTemplate'
+      { replicationConfigurationTemplateID =
+          pReplicationConfigurationTemplateID_
+      }
+
+-- | The ID of the Replication Configuration Template to be deleted.
+deleteReplicationConfigurationTemplate_replicationConfigurationTemplateID :: Lens.Lens' DeleteReplicationConfigurationTemplate Prelude.Text
+deleteReplicationConfigurationTemplate_replicationConfigurationTemplateID = Lens.lens (\DeleteReplicationConfigurationTemplate' {replicationConfigurationTemplateID} -> replicationConfigurationTemplateID) (\s@DeleteReplicationConfigurationTemplate' {} a -> s {replicationConfigurationTemplateID = a} :: DeleteReplicationConfigurationTemplate)
+
+instance
+  Core.AWSRequest
+    DeleteReplicationConfigurationTemplate
+  where
+  type
+    AWSResponse
+      DeleteReplicationConfigurationTemplate =
+      DeleteReplicationConfigurationTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteReplicationConfigurationTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteReplicationConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    DeleteReplicationConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` replicationConfigurationTemplateID
+
+instance
+  Prelude.NFData
+    DeleteReplicationConfigurationTemplate
+  where
+  rnf DeleteReplicationConfigurationTemplate' {..} =
+    Prelude.rnf replicationConfigurationTemplateID
+
+instance
+  Data.ToHeaders
+    DeleteReplicationConfigurationTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DeleteReplicationConfigurationTemplate
+  where
+  toJSON DeleteReplicationConfigurationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "replicationConfigurationTemplateID"
+                  Data..= replicationConfigurationTemplateID
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DeleteReplicationConfigurationTemplate
+  where
+  toPath =
+    Prelude.const
+      "/DeleteReplicationConfigurationTemplate"
+
+instance
+  Data.ToQuery
+    DeleteReplicationConfigurationTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteReplicationConfigurationTemplateResponse' smart constructor.
+data DeleteReplicationConfigurationTemplateResponse = DeleteReplicationConfigurationTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteReplicationConfigurationTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteReplicationConfigurationTemplateResponse_httpStatus' - The response's http status code.
+newDeleteReplicationConfigurationTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteReplicationConfigurationTemplateResponse
+newDeleteReplicationConfigurationTemplateResponse
+  pHttpStatus_ =
+    DeleteReplicationConfigurationTemplateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteReplicationConfigurationTemplateResponse_httpStatus :: Lens.Lens' DeleteReplicationConfigurationTemplateResponse Prelude.Int
+deleteReplicationConfigurationTemplateResponse_httpStatus = Lens.lens (\DeleteReplicationConfigurationTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteReplicationConfigurationTemplateResponse' {} a -> s {httpStatus = a} :: DeleteReplicationConfigurationTemplateResponse)
+
+instance
+  Prelude.NFData
+    DeleteReplicationConfigurationTemplateResponse
+  where
+  rnf
+    DeleteReplicationConfigurationTemplateResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DeleteSourceServer.hs b/gen/Amazonka/DrS/DeleteSourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DeleteSourceServer.hs
@@ -0,0 +1,159 @@
+{-# 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.DrS.DeleteSourceServer
+-- 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 single Source Server by ID. The Source Server must be
+-- disconnected first.
+module Amazonka.DrS.DeleteSourceServer
+  ( -- * Creating a Request
+    DeleteSourceServer (..),
+    newDeleteSourceServer,
+
+    -- * Request Lenses
+    deleteSourceServer_sourceServerID,
+
+    -- * Destructuring the Response
+    DeleteSourceServerResponse (..),
+    newDeleteSourceServerResponse,
+
+    -- * Response Lenses
+    deleteSourceServerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSourceServer' smart constructor.
+data DeleteSourceServer = DeleteSourceServer'
+  { -- | The ID of the Source Server to be deleted.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSourceServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'deleteSourceServer_sourceServerID' - The ID of the Source Server to be deleted.
+newDeleteSourceServer ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  DeleteSourceServer
+newDeleteSourceServer pSourceServerID_ =
+  DeleteSourceServer'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | The ID of the Source Server to be deleted.
+deleteSourceServer_sourceServerID :: Lens.Lens' DeleteSourceServer Prelude.Text
+deleteSourceServer_sourceServerID = Lens.lens (\DeleteSourceServer' {sourceServerID} -> sourceServerID) (\s@DeleteSourceServer' {} a -> s {sourceServerID = a} :: DeleteSourceServer)
+
+instance Core.AWSRequest DeleteSourceServer where
+  type
+    AWSResponse DeleteSourceServer =
+      DeleteSourceServerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSourceServerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSourceServer where
+  hashWithSalt _salt DeleteSourceServer' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData DeleteSourceServer where
+  rnf DeleteSourceServer' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders DeleteSourceServer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSourceServer where
+  toJSON DeleteSourceServer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath DeleteSourceServer where
+  toPath = Prelude.const "/DeleteSourceServer"
+
+instance Data.ToQuery DeleteSourceServer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSourceServerResponse' smart constructor.
+data DeleteSourceServerResponse = DeleteSourceServerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSourceServerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteSourceServerResponse_httpStatus' - The response's http status code.
+newDeleteSourceServerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSourceServerResponse
+newDeleteSourceServerResponse pHttpStatus_ =
+  DeleteSourceServerResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSourceServerResponse_httpStatus :: Lens.Lens' DeleteSourceServerResponse Prelude.Int
+deleteSourceServerResponse_httpStatus = Lens.lens (\DeleteSourceServerResponse' {httpStatus} -> httpStatus) (\s@DeleteSourceServerResponse' {} a -> s {httpStatus = a} :: DeleteSourceServerResponse)
+
+instance Prelude.NFData DeleteSourceServerResponse where
+  rnf DeleteSourceServerResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DescribeJobLogItems.hs b/gen/Amazonka/DrS/DescribeJobLogItems.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DescribeJobLogItems.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.DescribeJobLogItems
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a detailed Job log with pagination.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.DescribeJobLogItems
+  ( -- * Creating a Request
+    DescribeJobLogItems (..),
+    newDescribeJobLogItems,
+
+    -- * Request Lenses
+    describeJobLogItems_maxResults,
+    describeJobLogItems_nextToken,
+    describeJobLogItems_jobID,
+
+    -- * Destructuring the Response
+    DescribeJobLogItemsResponse (..),
+    newDescribeJobLogItemsResponse,
+
+    -- * Response Lenses
+    describeJobLogItemsResponse_items,
+    describeJobLogItemsResponse_nextToken,
+    describeJobLogItemsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeJobLogItems' smart constructor.
+data DescribeJobLogItems = DescribeJobLogItems'
+  { -- | Maximum number of Job log items to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next Job log items to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Job for which Job log items will be retrieved.
+    jobID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobLogItems' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeJobLogItems_maxResults' - Maximum number of Job log items to retrieve.
+--
+-- 'nextToken', 'describeJobLogItems_nextToken' - The token of the next Job log items to retrieve.
+--
+-- 'jobID', 'describeJobLogItems_jobID' - The ID of the Job for which Job log items will be retrieved.
+newDescribeJobLogItems ::
+  -- | 'jobID'
+  Prelude.Text ->
+  DescribeJobLogItems
+newDescribeJobLogItems pJobID_ =
+  DescribeJobLogItems'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      jobID = pJobID_
+    }
+
+-- | Maximum number of Job log items to retrieve.
+describeJobLogItems_maxResults :: Lens.Lens' DescribeJobLogItems (Prelude.Maybe Prelude.Natural)
+describeJobLogItems_maxResults = Lens.lens (\DescribeJobLogItems' {maxResults} -> maxResults) (\s@DescribeJobLogItems' {} a -> s {maxResults = a} :: DescribeJobLogItems)
+
+-- | The token of the next Job log items to retrieve.
+describeJobLogItems_nextToken :: Lens.Lens' DescribeJobLogItems (Prelude.Maybe Prelude.Text)
+describeJobLogItems_nextToken = Lens.lens (\DescribeJobLogItems' {nextToken} -> nextToken) (\s@DescribeJobLogItems' {} a -> s {nextToken = a} :: DescribeJobLogItems)
+
+-- | The ID of the Job for which Job log items will be retrieved.
+describeJobLogItems_jobID :: Lens.Lens' DescribeJobLogItems Prelude.Text
+describeJobLogItems_jobID = Lens.lens (\DescribeJobLogItems' {jobID} -> jobID) (\s@DescribeJobLogItems' {} a -> s {jobID = a} :: DescribeJobLogItems)
+
+instance Core.AWSPager DescribeJobLogItems where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeJobLogItemsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeJobLogItemsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeJobLogItems_nextToken
+          Lens..~ rs
+          Lens.^? describeJobLogItemsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeJobLogItems where
+  type
+    AWSResponse DescribeJobLogItems =
+      DescribeJobLogItemsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeJobLogItemsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeJobLogItems where
+  hashWithSalt _salt DescribeJobLogItems' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` jobID
+
+instance Prelude.NFData DescribeJobLogItems where
+  rnf DescribeJobLogItems' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf jobID
+
+instance Data.ToHeaders DescribeJobLogItems where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeJobLogItems where
+  toJSON DescribeJobLogItems' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("jobID" Data..= jobID)
+          ]
+      )
+
+instance Data.ToPath DescribeJobLogItems where
+  toPath = Prelude.const "/DescribeJobLogItems"
+
+instance Data.ToQuery DescribeJobLogItems where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeJobLogItemsResponse' smart constructor.
+data DescribeJobLogItemsResponse = DescribeJobLogItemsResponse'
+  { -- | An array of Job log items.
+    items :: Prelude.Maybe [JobLog],
+    -- | The token of the next Job log items to retrieve.
+    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 'DescribeJobLogItemsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'describeJobLogItemsResponse_items' - An array of Job log items.
+--
+-- 'nextToken', 'describeJobLogItemsResponse_nextToken' - The token of the next Job log items to retrieve.
+--
+-- 'httpStatus', 'describeJobLogItemsResponse_httpStatus' - The response's http status code.
+newDescribeJobLogItemsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeJobLogItemsResponse
+newDescribeJobLogItemsResponse pHttpStatus_ =
+  DescribeJobLogItemsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of Job log items.
+describeJobLogItemsResponse_items :: Lens.Lens' DescribeJobLogItemsResponse (Prelude.Maybe [JobLog])
+describeJobLogItemsResponse_items = Lens.lens (\DescribeJobLogItemsResponse' {items} -> items) (\s@DescribeJobLogItemsResponse' {} a -> s {items = a} :: DescribeJobLogItemsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next Job log items to retrieve.
+describeJobLogItemsResponse_nextToken :: Lens.Lens' DescribeJobLogItemsResponse (Prelude.Maybe Prelude.Text)
+describeJobLogItemsResponse_nextToken = Lens.lens (\DescribeJobLogItemsResponse' {nextToken} -> nextToken) (\s@DescribeJobLogItemsResponse' {} a -> s {nextToken = a} :: DescribeJobLogItemsResponse)
+
+-- | The response's http status code.
+describeJobLogItemsResponse_httpStatus :: Lens.Lens' DescribeJobLogItemsResponse Prelude.Int
+describeJobLogItemsResponse_httpStatus = Lens.lens (\DescribeJobLogItemsResponse' {httpStatus} -> httpStatus) (\s@DescribeJobLogItemsResponse' {} a -> s {httpStatus = a} :: DescribeJobLogItemsResponse)
+
+instance Prelude.NFData DescribeJobLogItemsResponse where
+  rnf DescribeJobLogItemsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DescribeJobs.hs b/gen/Amazonka/DrS/DescribeJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DescribeJobs.hs
@@ -0,0 +1,232 @@
+{-# 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.DrS.DescribeJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of Jobs. Use the JobsID and fromDate and toDate filters
+-- to limit which jobs are returned. The response is sorted by
+-- creationDataTime - latest date first. Jobs are created by the
+-- StartRecovery, TerminateRecoveryInstances and StartFailbackLaunch APIs.
+-- Jobs are also created by DiagnosticLaunch and
+-- TerminateDiagnosticInstances, which are APIs available only to *Support*
+-- and only used in response to relevant support tickets.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.DescribeJobs
+  ( -- * Creating a Request
+    DescribeJobs (..),
+    newDescribeJobs,
+
+    -- * Request Lenses
+    describeJobs_filters,
+    describeJobs_maxResults,
+    describeJobs_nextToken,
+
+    -- * Destructuring the Response
+    DescribeJobsResponse (..),
+    newDescribeJobsResponse,
+
+    -- * Response Lenses
+    describeJobsResponse_items,
+    describeJobsResponse_nextToken,
+    describeJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeJobs' smart constructor.
+data DescribeJobs = DescribeJobs'
+  { -- | A set of filters by which to return Jobs.
+    filters :: Prelude.Maybe DescribeJobsRequestFilters,
+    -- | Maximum number of Jobs to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next Job to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeJobs_filters' - A set of filters by which to return Jobs.
+--
+-- 'maxResults', 'describeJobs_maxResults' - Maximum number of Jobs to retrieve.
+--
+-- 'nextToken', 'describeJobs_nextToken' - The token of the next Job to retrieve.
+newDescribeJobs ::
+  DescribeJobs
+newDescribeJobs =
+  DescribeJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | A set of filters by which to return Jobs.
+describeJobs_filters :: Lens.Lens' DescribeJobs (Prelude.Maybe DescribeJobsRequestFilters)
+describeJobs_filters = Lens.lens (\DescribeJobs' {filters} -> filters) (\s@DescribeJobs' {} a -> s {filters = a} :: DescribeJobs)
+
+-- | Maximum number of Jobs to retrieve.
+describeJobs_maxResults :: Lens.Lens' DescribeJobs (Prelude.Maybe Prelude.Natural)
+describeJobs_maxResults = Lens.lens (\DescribeJobs' {maxResults} -> maxResults) (\s@DescribeJobs' {} a -> s {maxResults = a} :: DescribeJobs)
+
+-- | The token of the next Job to retrieve.
+describeJobs_nextToken :: Lens.Lens' DescribeJobs (Prelude.Maybe Prelude.Text)
+describeJobs_nextToken = Lens.lens (\DescribeJobs' {nextToken} -> nextToken) (\s@DescribeJobs' {} a -> s {nextToken = a} :: DescribeJobs)
+
+instance Core.AWSPager DescribeJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeJobsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeJobs_nextToken
+          Lens..~ rs
+          Lens.^? describeJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeJobs where
+  type AWSResponse DescribeJobs = DescribeJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeJobsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeJobs where
+  hashWithSalt _salt DescribeJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeJobs where
+  rnf DescribeJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeJobs where
+  toJSON DescribeJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeJobs where
+  toPath = Prelude.const "/DescribeJobs"
+
+instance Data.ToQuery DescribeJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeJobsResponse' smart constructor.
+data DescribeJobsResponse = DescribeJobsResponse'
+  { -- | An array of Jobs.
+    items :: Prelude.Maybe [Job],
+    -- | The token of the next Job to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'describeJobsResponse_items' - An array of Jobs.
+--
+-- 'nextToken', 'describeJobsResponse_nextToken' - The token of the next Job to retrieve.
+--
+-- 'httpStatus', 'describeJobsResponse_httpStatus' - The response's http status code.
+newDescribeJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeJobsResponse
+newDescribeJobsResponse pHttpStatus_ =
+  DescribeJobsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of Jobs.
+describeJobsResponse_items :: Lens.Lens' DescribeJobsResponse (Prelude.Maybe [Job])
+describeJobsResponse_items = Lens.lens (\DescribeJobsResponse' {items} -> items) (\s@DescribeJobsResponse' {} a -> s {items = a} :: DescribeJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next Job to retrieve.
+describeJobsResponse_nextToken :: Lens.Lens' DescribeJobsResponse (Prelude.Maybe Prelude.Text)
+describeJobsResponse_nextToken = Lens.lens (\DescribeJobsResponse' {nextToken} -> nextToken) (\s@DescribeJobsResponse' {} a -> s {nextToken = a} :: DescribeJobsResponse)
+
+-- | The response's http status code.
+describeJobsResponse_httpStatus :: Lens.Lens' DescribeJobsResponse Prelude.Int
+describeJobsResponse_httpStatus = Lens.lens (\DescribeJobsResponse' {httpStatus} -> httpStatus) (\s@DescribeJobsResponse' {} a -> s {httpStatus = a} :: DescribeJobsResponse)
+
+instance Prelude.NFData DescribeJobsResponse where
+  rnf DescribeJobsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DescribeRecoveryInstances.hs b/gen/Amazonka/DrS/DescribeRecoveryInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DescribeRecoveryInstances.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.DrS.DescribeRecoveryInstances
+-- 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 Recovery Instances or multiple Recovery Instances by ID.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.DescribeRecoveryInstances
+  ( -- * Creating a Request
+    DescribeRecoveryInstances (..),
+    newDescribeRecoveryInstances,
+
+    -- * Request Lenses
+    describeRecoveryInstances_filters,
+    describeRecoveryInstances_maxResults,
+    describeRecoveryInstances_nextToken,
+
+    -- * Destructuring the Response
+    DescribeRecoveryInstancesResponse (..),
+    newDescribeRecoveryInstancesResponse,
+
+    -- * Response Lenses
+    describeRecoveryInstancesResponse_items,
+    describeRecoveryInstancesResponse_nextToken,
+    describeRecoveryInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRecoveryInstances' smart constructor.
+data DescribeRecoveryInstances = DescribeRecoveryInstances'
+  { -- | A set of filters by which to return Recovery Instances.
+    filters :: Prelude.Maybe DescribeRecoveryInstancesRequestFilters,
+    -- | Maximum number of Recovery Instances to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next Recovery Instance to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecoveryInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeRecoveryInstances_filters' - A set of filters by which to return Recovery Instances.
+--
+-- 'maxResults', 'describeRecoveryInstances_maxResults' - Maximum number of Recovery Instances to retrieve.
+--
+-- 'nextToken', 'describeRecoveryInstances_nextToken' - The token of the next Recovery Instance to retrieve.
+newDescribeRecoveryInstances ::
+  DescribeRecoveryInstances
+newDescribeRecoveryInstances =
+  DescribeRecoveryInstances'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | A set of filters by which to return Recovery Instances.
+describeRecoveryInstances_filters :: Lens.Lens' DescribeRecoveryInstances (Prelude.Maybe DescribeRecoveryInstancesRequestFilters)
+describeRecoveryInstances_filters = Lens.lens (\DescribeRecoveryInstances' {filters} -> filters) (\s@DescribeRecoveryInstances' {} a -> s {filters = a} :: DescribeRecoveryInstances)
+
+-- | Maximum number of Recovery Instances to retrieve.
+describeRecoveryInstances_maxResults :: Lens.Lens' DescribeRecoveryInstances (Prelude.Maybe Prelude.Natural)
+describeRecoveryInstances_maxResults = Lens.lens (\DescribeRecoveryInstances' {maxResults} -> maxResults) (\s@DescribeRecoveryInstances' {} a -> s {maxResults = a} :: DescribeRecoveryInstances)
+
+-- | The token of the next Recovery Instance to retrieve.
+describeRecoveryInstances_nextToken :: Lens.Lens' DescribeRecoveryInstances (Prelude.Maybe Prelude.Text)
+describeRecoveryInstances_nextToken = Lens.lens (\DescribeRecoveryInstances' {nextToken} -> nextToken) (\s@DescribeRecoveryInstances' {} a -> s {nextToken = a} :: DescribeRecoveryInstances)
+
+instance Core.AWSPager DescribeRecoveryInstances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeRecoveryInstancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeRecoveryInstancesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeRecoveryInstances_nextToken
+          Lens..~ rs
+          Lens.^? describeRecoveryInstancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeRecoveryInstances where
+  type
+    AWSResponse DescribeRecoveryInstances =
+      DescribeRecoveryInstancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRecoveryInstancesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRecoveryInstances where
+  hashWithSalt _salt DescribeRecoveryInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeRecoveryInstances where
+  rnf DescribeRecoveryInstances' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeRecoveryInstances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeRecoveryInstances where
+  toJSON DescribeRecoveryInstances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeRecoveryInstances where
+  toPath = Prelude.const "/DescribeRecoveryInstances"
+
+instance Data.ToQuery DescribeRecoveryInstances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeRecoveryInstancesResponse' smart constructor.
+data DescribeRecoveryInstancesResponse = DescribeRecoveryInstancesResponse'
+  { -- | An array of Recovery Instances.
+    items :: Prelude.Maybe [RecoveryInstance],
+    -- | The token of the next Recovery Instance to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecoveryInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'describeRecoveryInstancesResponse_items' - An array of Recovery Instances.
+--
+-- 'nextToken', 'describeRecoveryInstancesResponse_nextToken' - The token of the next Recovery Instance to retrieve.
+--
+-- 'httpStatus', 'describeRecoveryInstancesResponse_httpStatus' - The response's http status code.
+newDescribeRecoveryInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRecoveryInstancesResponse
+newDescribeRecoveryInstancesResponse pHttpStatus_ =
+  DescribeRecoveryInstancesResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of Recovery Instances.
+describeRecoveryInstancesResponse_items :: Lens.Lens' DescribeRecoveryInstancesResponse (Prelude.Maybe [RecoveryInstance])
+describeRecoveryInstancesResponse_items = Lens.lens (\DescribeRecoveryInstancesResponse' {items} -> items) (\s@DescribeRecoveryInstancesResponse' {} a -> s {items = a} :: DescribeRecoveryInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next Recovery Instance to retrieve.
+describeRecoveryInstancesResponse_nextToken :: Lens.Lens' DescribeRecoveryInstancesResponse (Prelude.Maybe Prelude.Text)
+describeRecoveryInstancesResponse_nextToken = Lens.lens (\DescribeRecoveryInstancesResponse' {nextToken} -> nextToken) (\s@DescribeRecoveryInstancesResponse' {} a -> s {nextToken = a} :: DescribeRecoveryInstancesResponse)
+
+-- | The response's http status code.
+describeRecoveryInstancesResponse_httpStatus :: Lens.Lens' DescribeRecoveryInstancesResponse Prelude.Int
+describeRecoveryInstancesResponse_httpStatus = Lens.lens (\DescribeRecoveryInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeRecoveryInstancesResponse' {} a -> s {httpStatus = a} :: DescribeRecoveryInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeRecoveryInstancesResponse
+  where
+  rnf DescribeRecoveryInstancesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DescribeRecoverySnapshots.hs b/gen/Amazonka/DrS/DescribeRecoverySnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DescribeRecoverySnapshots.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.DescribeRecoverySnapshots
+-- 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 Recovery Snapshots for a single Source Server.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.DescribeRecoverySnapshots
+  ( -- * Creating a Request
+    DescribeRecoverySnapshots (..),
+    newDescribeRecoverySnapshots,
+
+    -- * Request Lenses
+    describeRecoverySnapshots_filters,
+    describeRecoverySnapshots_maxResults,
+    describeRecoverySnapshots_nextToken,
+    describeRecoverySnapshots_order,
+    describeRecoverySnapshots_sourceServerID,
+
+    -- * Destructuring the Response
+    DescribeRecoverySnapshotsResponse (..),
+    newDescribeRecoverySnapshotsResponse,
+
+    -- * Response Lenses
+    describeRecoverySnapshotsResponse_items,
+    describeRecoverySnapshotsResponse_nextToken,
+    describeRecoverySnapshotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRecoverySnapshots' smart constructor.
+data DescribeRecoverySnapshots = DescribeRecoverySnapshots'
+  { -- | A set of filters by which to return Recovery Snapshots.
+    filters :: Prelude.Maybe DescribeRecoverySnapshotsRequestFilters,
+    -- | Maximum number of Recovery Snapshots to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next Recovery Snapshot to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sorted ordering by which to return Recovery Snapshots.
+    order :: Prelude.Maybe RecoverySnapshotsOrder,
+    -- | Filter Recovery Snapshots by Source Server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecoverySnapshots' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeRecoverySnapshots_filters' - A set of filters by which to return Recovery Snapshots.
+--
+-- 'maxResults', 'describeRecoverySnapshots_maxResults' - Maximum number of Recovery Snapshots to retrieve.
+--
+-- 'nextToken', 'describeRecoverySnapshots_nextToken' - The token of the next Recovery Snapshot to retrieve.
+--
+-- 'order', 'describeRecoverySnapshots_order' - The sorted ordering by which to return Recovery Snapshots.
+--
+-- 'sourceServerID', 'describeRecoverySnapshots_sourceServerID' - Filter Recovery Snapshots by Source Server ID.
+newDescribeRecoverySnapshots ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  DescribeRecoverySnapshots
+newDescribeRecoverySnapshots pSourceServerID_ =
+  DescribeRecoverySnapshots'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      order = Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | A set of filters by which to return Recovery Snapshots.
+describeRecoverySnapshots_filters :: Lens.Lens' DescribeRecoverySnapshots (Prelude.Maybe DescribeRecoverySnapshotsRequestFilters)
+describeRecoverySnapshots_filters = Lens.lens (\DescribeRecoverySnapshots' {filters} -> filters) (\s@DescribeRecoverySnapshots' {} a -> s {filters = a} :: DescribeRecoverySnapshots)
+
+-- | Maximum number of Recovery Snapshots to retrieve.
+describeRecoverySnapshots_maxResults :: Lens.Lens' DescribeRecoverySnapshots (Prelude.Maybe Prelude.Natural)
+describeRecoverySnapshots_maxResults = Lens.lens (\DescribeRecoverySnapshots' {maxResults} -> maxResults) (\s@DescribeRecoverySnapshots' {} a -> s {maxResults = a} :: DescribeRecoverySnapshots)
+
+-- | The token of the next Recovery Snapshot to retrieve.
+describeRecoverySnapshots_nextToken :: Lens.Lens' DescribeRecoverySnapshots (Prelude.Maybe Prelude.Text)
+describeRecoverySnapshots_nextToken = Lens.lens (\DescribeRecoverySnapshots' {nextToken} -> nextToken) (\s@DescribeRecoverySnapshots' {} a -> s {nextToken = a} :: DescribeRecoverySnapshots)
+
+-- | The sorted ordering by which to return Recovery Snapshots.
+describeRecoverySnapshots_order :: Lens.Lens' DescribeRecoverySnapshots (Prelude.Maybe RecoverySnapshotsOrder)
+describeRecoverySnapshots_order = Lens.lens (\DescribeRecoverySnapshots' {order} -> order) (\s@DescribeRecoverySnapshots' {} a -> s {order = a} :: DescribeRecoverySnapshots)
+
+-- | Filter Recovery Snapshots by Source Server ID.
+describeRecoverySnapshots_sourceServerID :: Lens.Lens' DescribeRecoverySnapshots Prelude.Text
+describeRecoverySnapshots_sourceServerID = Lens.lens (\DescribeRecoverySnapshots' {sourceServerID} -> sourceServerID) (\s@DescribeRecoverySnapshots' {} a -> s {sourceServerID = a} :: DescribeRecoverySnapshots)
+
+instance Core.AWSPager DescribeRecoverySnapshots where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeRecoverySnapshotsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeRecoverySnapshotsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeRecoverySnapshots_nextToken
+          Lens..~ rs
+          Lens.^? describeRecoverySnapshotsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeRecoverySnapshots where
+  type
+    AWSResponse DescribeRecoverySnapshots =
+      DescribeRecoverySnapshotsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRecoverySnapshotsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRecoverySnapshots where
+  hashWithSalt _salt DescribeRecoverySnapshots' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` order
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData DescribeRecoverySnapshots where
+  rnf DescribeRecoverySnapshots' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf order
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToHeaders DescribeRecoverySnapshots where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeRecoverySnapshots where
+  toJSON DescribeRecoverySnapshots' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("order" Data..=) Prelude.<$> order,
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath DescribeRecoverySnapshots where
+  toPath = Prelude.const "/DescribeRecoverySnapshots"
+
+instance Data.ToQuery DescribeRecoverySnapshots where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeRecoverySnapshotsResponse' smart constructor.
+data DescribeRecoverySnapshotsResponse = DescribeRecoverySnapshotsResponse'
+  { -- | An array of Recovery Snapshots.
+    items :: Prelude.Maybe [RecoverySnapshot],
+    -- | The token of the next Recovery Snapshot to retrieve.
+    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 'DescribeRecoverySnapshotsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'describeRecoverySnapshotsResponse_items' - An array of Recovery Snapshots.
+--
+-- 'nextToken', 'describeRecoverySnapshotsResponse_nextToken' - The token of the next Recovery Snapshot to retrieve.
+--
+-- 'httpStatus', 'describeRecoverySnapshotsResponse_httpStatus' - The response's http status code.
+newDescribeRecoverySnapshotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRecoverySnapshotsResponse
+newDescribeRecoverySnapshotsResponse pHttpStatus_ =
+  DescribeRecoverySnapshotsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of Recovery Snapshots.
+describeRecoverySnapshotsResponse_items :: Lens.Lens' DescribeRecoverySnapshotsResponse (Prelude.Maybe [RecoverySnapshot])
+describeRecoverySnapshotsResponse_items = Lens.lens (\DescribeRecoverySnapshotsResponse' {items} -> items) (\s@DescribeRecoverySnapshotsResponse' {} a -> s {items = a} :: DescribeRecoverySnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next Recovery Snapshot to retrieve.
+describeRecoverySnapshotsResponse_nextToken :: Lens.Lens' DescribeRecoverySnapshotsResponse (Prelude.Maybe Prelude.Text)
+describeRecoverySnapshotsResponse_nextToken = Lens.lens (\DescribeRecoverySnapshotsResponse' {nextToken} -> nextToken) (\s@DescribeRecoverySnapshotsResponse' {} a -> s {nextToken = a} :: DescribeRecoverySnapshotsResponse)
+
+-- | The response's http status code.
+describeRecoverySnapshotsResponse_httpStatus :: Lens.Lens' DescribeRecoverySnapshotsResponse Prelude.Int
+describeRecoverySnapshotsResponse_httpStatus = Lens.lens (\DescribeRecoverySnapshotsResponse' {httpStatus} -> httpStatus) (\s@DescribeRecoverySnapshotsResponse' {} a -> s {httpStatus = a} :: DescribeRecoverySnapshotsResponse)
+
+instance
+  Prelude.NFData
+    DescribeRecoverySnapshotsResponse
+  where
+  rnf DescribeRecoverySnapshotsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DescribeReplicationConfigurationTemplates.hs b/gen/Amazonka/DrS/DescribeReplicationConfigurationTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DescribeReplicationConfigurationTemplates.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.DrS.DescribeReplicationConfigurationTemplates
+-- 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 ReplicationConfigurationTemplates, filtered by Source Server
+-- IDs.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.DescribeReplicationConfigurationTemplates
+  ( -- * Creating a Request
+    DescribeReplicationConfigurationTemplates (..),
+    newDescribeReplicationConfigurationTemplates,
+
+    -- * Request Lenses
+    describeReplicationConfigurationTemplates_maxResults,
+    describeReplicationConfigurationTemplates_nextToken,
+    describeReplicationConfigurationTemplates_replicationConfigurationTemplateIDs,
+
+    -- * Destructuring the Response
+    DescribeReplicationConfigurationTemplatesResponse (..),
+    newDescribeReplicationConfigurationTemplatesResponse,
+
+    -- * Response Lenses
+    describeReplicationConfigurationTemplatesResponse_items,
+    describeReplicationConfigurationTemplatesResponse_nextToken,
+    describeReplicationConfigurationTemplatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeReplicationConfigurationTemplates' smart constructor.
+data DescribeReplicationConfigurationTemplates = DescribeReplicationConfigurationTemplates'
+  { -- | Maximum number of Replication Configuration Templates to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next Replication Configuration Template to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Replication Configuration Templates to retrieve. An empty
+    -- list means all Replication Configuration Templates.
+    replicationConfigurationTemplateIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReplicationConfigurationTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeReplicationConfigurationTemplates_maxResults' - Maximum number of Replication Configuration Templates to retrieve.
+--
+-- 'nextToken', 'describeReplicationConfigurationTemplates_nextToken' - The token of the next Replication Configuration Template to retrieve.
+--
+-- 'replicationConfigurationTemplateIDs', 'describeReplicationConfigurationTemplates_replicationConfigurationTemplateIDs' - The IDs of the Replication Configuration Templates to retrieve. An empty
+-- list means all Replication Configuration Templates.
+newDescribeReplicationConfigurationTemplates ::
+  DescribeReplicationConfigurationTemplates
+newDescribeReplicationConfigurationTemplates =
+  DescribeReplicationConfigurationTemplates'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      replicationConfigurationTemplateIDs =
+        Prelude.Nothing
+    }
+
+-- | Maximum number of Replication Configuration Templates to retrieve.
+describeReplicationConfigurationTemplates_maxResults :: Lens.Lens' DescribeReplicationConfigurationTemplates (Prelude.Maybe Prelude.Natural)
+describeReplicationConfigurationTemplates_maxResults = Lens.lens (\DescribeReplicationConfigurationTemplates' {maxResults} -> maxResults) (\s@DescribeReplicationConfigurationTemplates' {} a -> s {maxResults = a} :: DescribeReplicationConfigurationTemplates)
+
+-- | The token of the next Replication Configuration Template to retrieve.
+describeReplicationConfigurationTemplates_nextToken :: Lens.Lens' DescribeReplicationConfigurationTemplates (Prelude.Maybe Prelude.Text)
+describeReplicationConfigurationTemplates_nextToken = Lens.lens (\DescribeReplicationConfigurationTemplates' {nextToken} -> nextToken) (\s@DescribeReplicationConfigurationTemplates' {} a -> s {nextToken = a} :: DescribeReplicationConfigurationTemplates)
+
+-- | The IDs of the Replication Configuration Templates to retrieve. An empty
+-- list means all Replication Configuration Templates.
+describeReplicationConfigurationTemplates_replicationConfigurationTemplateIDs :: Lens.Lens' DescribeReplicationConfigurationTemplates (Prelude.Maybe [Prelude.Text])
+describeReplicationConfigurationTemplates_replicationConfigurationTemplateIDs = Lens.lens (\DescribeReplicationConfigurationTemplates' {replicationConfigurationTemplateIDs} -> replicationConfigurationTemplateIDs) (\s@DescribeReplicationConfigurationTemplates' {} a -> s {replicationConfigurationTemplateIDs = a} :: DescribeReplicationConfigurationTemplates) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeReplicationConfigurationTemplates
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeReplicationConfigurationTemplatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeReplicationConfigurationTemplatesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeReplicationConfigurationTemplates_nextToken
+          Lens..~ rs
+          Lens.^? describeReplicationConfigurationTemplatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeReplicationConfigurationTemplates
+  where
+  type
+    AWSResponse
+      DescribeReplicationConfigurationTemplates =
+      DescribeReplicationConfigurationTemplatesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeReplicationConfigurationTemplatesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeReplicationConfigurationTemplates
+  where
+  hashWithSalt
+    _salt
+    DescribeReplicationConfigurationTemplates' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` replicationConfigurationTemplateIDs
+
+instance
+  Prelude.NFData
+    DescribeReplicationConfigurationTemplates
+  where
+  rnf DescribeReplicationConfigurationTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replicationConfigurationTemplateIDs
+
+instance
+  Data.ToHeaders
+    DescribeReplicationConfigurationTemplates
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeReplicationConfigurationTemplates
+  where
+  toJSON DescribeReplicationConfigurationTemplates' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("replicationConfigurationTemplateIDs" Data..=)
+              Prelude.<$> replicationConfigurationTemplateIDs
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeReplicationConfigurationTemplates
+  where
+  toPath =
+    Prelude.const
+      "/DescribeReplicationConfigurationTemplates"
+
+instance
+  Data.ToQuery
+    DescribeReplicationConfigurationTemplates
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeReplicationConfigurationTemplatesResponse' smart constructor.
+data DescribeReplicationConfigurationTemplatesResponse = DescribeReplicationConfigurationTemplatesResponse'
+  { -- | An array of Replication Configuration Templates.
+    items :: Prelude.Maybe [ReplicationConfigurationTemplate],
+    -- | The token of the next Replication Configuration Template to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReplicationConfigurationTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'describeReplicationConfigurationTemplatesResponse_items' - An array of Replication Configuration Templates.
+--
+-- 'nextToken', 'describeReplicationConfigurationTemplatesResponse_nextToken' - The token of the next Replication Configuration Template to retrieve.
+--
+-- 'httpStatus', 'describeReplicationConfigurationTemplatesResponse_httpStatus' - The response's http status code.
+newDescribeReplicationConfigurationTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReplicationConfigurationTemplatesResponse
+newDescribeReplicationConfigurationTemplatesResponse
+  pHttpStatus_ =
+    DescribeReplicationConfigurationTemplatesResponse'
+      { items =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | An array of Replication Configuration Templates.
+describeReplicationConfigurationTemplatesResponse_items :: Lens.Lens' DescribeReplicationConfigurationTemplatesResponse (Prelude.Maybe [ReplicationConfigurationTemplate])
+describeReplicationConfigurationTemplatesResponse_items = Lens.lens (\DescribeReplicationConfigurationTemplatesResponse' {items} -> items) (\s@DescribeReplicationConfigurationTemplatesResponse' {} a -> s {items = a} :: DescribeReplicationConfigurationTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next Replication Configuration Template to retrieve.
+describeReplicationConfigurationTemplatesResponse_nextToken :: Lens.Lens' DescribeReplicationConfigurationTemplatesResponse (Prelude.Maybe Prelude.Text)
+describeReplicationConfigurationTemplatesResponse_nextToken = Lens.lens (\DescribeReplicationConfigurationTemplatesResponse' {nextToken} -> nextToken) (\s@DescribeReplicationConfigurationTemplatesResponse' {} a -> s {nextToken = a} :: DescribeReplicationConfigurationTemplatesResponse)
+
+-- | The response's http status code.
+describeReplicationConfigurationTemplatesResponse_httpStatus :: Lens.Lens' DescribeReplicationConfigurationTemplatesResponse Prelude.Int
+describeReplicationConfigurationTemplatesResponse_httpStatus = Lens.lens (\DescribeReplicationConfigurationTemplatesResponse' {httpStatus} -> httpStatus) (\s@DescribeReplicationConfigurationTemplatesResponse' {} a -> s {httpStatus = a} :: DescribeReplicationConfigurationTemplatesResponse)
+
+instance
+  Prelude.NFData
+    DescribeReplicationConfigurationTemplatesResponse
+  where
+  rnf
+    DescribeReplicationConfigurationTemplatesResponse' {..} =
+      Prelude.rnf items
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DescribeSourceServers.hs b/gen/Amazonka/DrS/DescribeSourceServers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DescribeSourceServers.hs
@@ -0,0 +1,229 @@
+{-# 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.DrS.DescribeSourceServers
+-- 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 Source Servers or multiple Source Servers filtered by ID.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.DescribeSourceServers
+  ( -- * Creating a Request
+    DescribeSourceServers (..),
+    newDescribeSourceServers,
+
+    -- * Request Lenses
+    describeSourceServers_filters,
+    describeSourceServers_maxResults,
+    describeSourceServers_nextToken,
+
+    -- * Destructuring the Response
+    DescribeSourceServersResponse (..),
+    newDescribeSourceServersResponse,
+
+    -- * Response Lenses
+    describeSourceServersResponse_items,
+    describeSourceServersResponse_nextToken,
+    describeSourceServersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSourceServers' smart constructor.
+data DescribeSourceServers = DescribeSourceServers'
+  { -- | A set of filters by which to return Source Servers.
+    filters :: Prelude.Maybe DescribeSourceServersRequestFilters,
+    -- | Maximum number of Source Servers to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next Source Server to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSourceServers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeSourceServers_filters' - A set of filters by which to return Source Servers.
+--
+-- 'maxResults', 'describeSourceServers_maxResults' - Maximum number of Source Servers to retrieve.
+--
+-- 'nextToken', 'describeSourceServers_nextToken' - The token of the next Source Server to retrieve.
+newDescribeSourceServers ::
+  DescribeSourceServers
+newDescribeSourceServers =
+  DescribeSourceServers'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | A set of filters by which to return Source Servers.
+describeSourceServers_filters :: Lens.Lens' DescribeSourceServers (Prelude.Maybe DescribeSourceServersRequestFilters)
+describeSourceServers_filters = Lens.lens (\DescribeSourceServers' {filters} -> filters) (\s@DescribeSourceServers' {} a -> s {filters = a} :: DescribeSourceServers)
+
+-- | Maximum number of Source Servers to retrieve.
+describeSourceServers_maxResults :: Lens.Lens' DescribeSourceServers (Prelude.Maybe Prelude.Natural)
+describeSourceServers_maxResults = Lens.lens (\DescribeSourceServers' {maxResults} -> maxResults) (\s@DescribeSourceServers' {} a -> s {maxResults = a} :: DescribeSourceServers)
+
+-- | The token of the next Source Server to retrieve.
+describeSourceServers_nextToken :: Lens.Lens' DescribeSourceServers (Prelude.Maybe Prelude.Text)
+describeSourceServers_nextToken = Lens.lens (\DescribeSourceServers' {nextToken} -> nextToken) (\s@DescribeSourceServers' {} a -> s {nextToken = a} :: DescribeSourceServers)
+
+instance Core.AWSPager DescribeSourceServers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSourceServersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSourceServersResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSourceServers_nextToken
+          Lens..~ rs
+          Lens.^? describeSourceServersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSourceServers where
+  type
+    AWSResponse DescribeSourceServers =
+      DescribeSourceServersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSourceServersResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSourceServers where
+  hashWithSalt _salt DescribeSourceServers' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeSourceServers where
+  rnf DescribeSourceServers' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeSourceServers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSourceServers where
+  toJSON DescribeSourceServers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeSourceServers where
+  toPath = Prelude.const "/DescribeSourceServers"
+
+instance Data.ToQuery DescribeSourceServers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSourceServersResponse' smart constructor.
+data DescribeSourceServersResponse = DescribeSourceServersResponse'
+  { -- | An array of Source Servers.
+    items :: Prelude.Maybe [SourceServer],
+    -- | The token of the next Source Server to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSourceServersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'describeSourceServersResponse_items' - An array of Source Servers.
+--
+-- 'nextToken', 'describeSourceServersResponse_nextToken' - The token of the next Source Server to retrieve.
+--
+-- 'httpStatus', 'describeSourceServersResponse_httpStatus' - The response's http status code.
+newDescribeSourceServersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSourceServersResponse
+newDescribeSourceServersResponse pHttpStatus_ =
+  DescribeSourceServersResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of Source Servers.
+describeSourceServersResponse_items :: Lens.Lens' DescribeSourceServersResponse (Prelude.Maybe [SourceServer])
+describeSourceServersResponse_items = Lens.lens (\DescribeSourceServersResponse' {items} -> items) (\s@DescribeSourceServersResponse' {} a -> s {items = a} :: DescribeSourceServersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next Source Server to retrieve.
+describeSourceServersResponse_nextToken :: Lens.Lens' DescribeSourceServersResponse (Prelude.Maybe Prelude.Text)
+describeSourceServersResponse_nextToken = Lens.lens (\DescribeSourceServersResponse' {nextToken} -> nextToken) (\s@DescribeSourceServersResponse' {} a -> s {nextToken = a} :: DescribeSourceServersResponse)
+
+-- | The response's http status code.
+describeSourceServersResponse_httpStatus :: Lens.Lens' DescribeSourceServersResponse Prelude.Int
+describeSourceServersResponse_httpStatus = Lens.lens (\DescribeSourceServersResponse' {httpStatus} -> httpStatus) (\s@DescribeSourceServersResponse' {} a -> s {httpStatus = a} :: DescribeSourceServersResponse)
+
+instance Prelude.NFData DescribeSourceServersResponse where
+  rnf DescribeSourceServersResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/DisconnectRecoveryInstance.hs b/gen/Amazonka/DrS/DisconnectRecoveryInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DisconnectRecoveryInstance.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.DisconnectRecoveryInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disconnect a Recovery Instance from Elastic Disaster Recovery. Data
+-- replication is stopped immediately. All AWS resources created by Elastic
+-- Disaster Recovery for enabling the replication of the Recovery Instance
+-- will be terminated \/ deleted within 90 minutes. If the agent on the
+-- Recovery Instance has not been prevented from communicating with the
+-- Elastic Disaster Recovery service, then it will receive a command to
+-- uninstall itself (within approximately 10 minutes). The following
+-- properties of the Recovery Instance will be changed immediately:
+-- dataReplicationInfo.dataReplicationState will be set to DISCONNECTED;
+-- The totalStorageBytes property for each of
+-- dataReplicationInfo.replicatedDisks will be set to zero;
+-- dataReplicationInfo.lagDuration and dataReplicationInfo.lagDuration will
+-- be nullified.
+module Amazonka.DrS.DisconnectRecoveryInstance
+  ( -- * Creating a Request
+    DisconnectRecoveryInstance (..),
+    newDisconnectRecoveryInstance,
+
+    -- * Request Lenses
+    disconnectRecoveryInstance_recoveryInstanceID,
+
+    -- * Destructuring the Response
+    DisconnectRecoveryInstanceResponse (..),
+    newDisconnectRecoveryInstanceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisconnectRecoveryInstance' smart constructor.
+data DisconnectRecoveryInstance = DisconnectRecoveryInstance'
+  { -- | The ID of the Recovery Instance to disconnect.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisconnectRecoveryInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceID', 'disconnectRecoveryInstance_recoveryInstanceID' - The ID of the Recovery Instance to disconnect.
+newDisconnectRecoveryInstance ::
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  DisconnectRecoveryInstance
+newDisconnectRecoveryInstance pRecoveryInstanceID_ =
+  DisconnectRecoveryInstance'
+    { recoveryInstanceID =
+        pRecoveryInstanceID_
+    }
+
+-- | The ID of the Recovery Instance to disconnect.
+disconnectRecoveryInstance_recoveryInstanceID :: Lens.Lens' DisconnectRecoveryInstance Prelude.Text
+disconnectRecoveryInstance_recoveryInstanceID = Lens.lens (\DisconnectRecoveryInstance' {recoveryInstanceID} -> recoveryInstanceID) (\s@DisconnectRecoveryInstance' {} a -> s {recoveryInstanceID = a} :: DisconnectRecoveryInstance)
+
+instance Core.AWSRequest DisconnectRecoveryInstance where
+  type
+    AWSResponse DisconnectRecoveryInstance =
+      DisconnectRecoveryInstanceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DisconnectRecoveryInstanceResponse'
+
+instance Prelude.Hashable DisconnectRecoveryInstance where
+  hashWithSalt _salt DisconnectRecoveryInstance' {..} =
+    _salt `Prelude.hashWithSalt` recoveryInstanceID
+
+instance Prelude.NFData DisconnectRecoveryInstance where
+  rnf DisconnectRecoveryInstance' {..} =
+    Prelude.rnf recoveryInstanceID
+
+instance Data.ToHeaders DisconnectRecoveryInstance where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisconnectRecoveryInstance where
+  toJSON DisconnectRecoveryInstance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recoveryInstanceID" Data..= recoveryInstanceID)
+          ]
+      )
+
+instance Data.ToPath DisconnectRecoveryInstance where
+  toPath = Prelude.const "/DisconnectRecoveryInstance"
+
+instance Data.ToQuery DisconnectRecoveryInstance where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisconnectRecoveryInstanceResponse' smart constructor.
+data DisconnectRecoveryInstanceResponse = DisconnectRecoveryInstanceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisconnectRecoveryInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisconnectRecoveryInstanceResponse ::
+  DisconnectRecoveryInstanceResponse
+newDisconnectRecoveryInstanceResponse =
+  DisconnectRecoveryInstanceResponse'
+
+instance
+  Prelude.NFData
+    DisconnectRecoveryInstanceResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/DrS/DisconnectSourceServer.hs b/gen/Amazonka/DrS/DisconnectSourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/DisconnectSourceServer.hs
@@ -0,0 +1,145 @@
+{-# 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.DrS.DisconnectSourceServer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disconnects a specific Source Server from Elastic Disaster Recovery.
+-- Data replication is stopped immediately. All AWS resources created by
+-- Elastic Disaster Recovery for enabling the replication of the Source
+-- Server will be terminated \/ deleted within 90 minutes. You cannot
+-- disconnect a Source Server if it has a Recovery Instance. If the agent
+-- on the Source Server has not been prevented from communicating with the
+-- Elastic Disaster Recovery service, then it will receive a command to
+-- uninstall itself (within approximately 10 minutes). The following
+-- properties of the SourceServer will be changed immediately:
+-- dataReplicationInfo.dataReplicationState will be set to DISCONNECTED;
+-- The totalStorageBytes property for each of
+-- dataReplicationInfo.replicatedDisks will be set to zero;
+-- dataReplicationInfo.lagDuration and dataReplicationInfo.lagDuration will
+-- be nullified.
+module Amazonka.DrS.DisconnectSourceServer
+  ( -- * Creating a Request
+    DisconnectSourceServer (..),
+    newDisconnectSourceServer,
+
+    -- * Request Lenses
+    disconnectSourceServer_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_lastLaunchResult,
+    sourceServer_lifeCycle,
+    sourceServer_recoveryInstanceId,
+    sourceServer_replicationDirection,
+    sourceServer_reversedDirectionSourceServerArn,
+    sourceServer_sourceCloudProperties,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_stagingArea,
+    sourceServer_tags,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisconnectSourceServer' smart constructor.
+data DisconnectSourceServer = DisconnectSourceServer'
+  { -- | The ID of the Source Server to disconnect.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisconnectSourceServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'disconnectSourceServer_sourceServerID' - The ID of the Source Server to disconnect.
+newDisconnectSourceServer ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  DisconnectSourceServer
+newDisconnectSourceServer pSourceServerID_ =
+  DisconnectSourceServer'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | The ID of the Source Server to disconnect.
+disconnectSourceServer_sourceServerID :: Lens.Lens' DisconnectSourceServer Prelude.Text
+disconnectSourceServer_sourceServerID = Lens.lens (\DisconnectSourceServer' {sourceServerID} -> sourceServerID) (\s@DisconnectSourceServer' {} a -> s {sourceServerID = a} :: DisconnectSourceServer)
+
+instance Core.AWSRequest DisconnectSourceServer where
+  type
+    AWSResponse DisconnectSourceServer =
+      SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable DisconnectSourceServer where
+  hashWithSalt _salt DisconnectSourceServer' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData DisconnectSourceServer where
+  rnf DisconnectSourceServer' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders DisconnectSourceServer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisconnectSourceServer where
+  toJSON DisconnectSourceServer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath DisconnectSourceServer where
+  toPath = Prelude.const "/DisconnectSourceServer"
+
+instance Data.ToQuery DisconnectSourceServer where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/GetFailbackReplicationConfiguration.hs b/gen/Amazonka/DrS/GetFailbackReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/GetFailbackReplicationConfiguration.hs
@@ -0,0 +1,250 @@
+{-# 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.DrS.GetFailbackReplicationConfiguration
+-- 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 Failback ReplicationConfigurations, filtered by Recovery
+-- Instance ID.
+module Amazonka.DrS.GetFailbackReplicationConfiguration
+  ( -- * Creating a Request
+    GetFailbackReplicationConfiguration (..),
+    newGetFailbackReplicationConfiguration,
+
+    -- * Request Lenses
+    getFailbackReplicationConfiguration_recoveryInstanceID,
+
+    -- * Destructuring the Response
+    GetFailbackReplicationConfigurationResponse (..),
+    newGetFailbackReplicationConfigurationResponse,
+
+    -- * Response Lenses
+    getFailbackReplicationConfigurationResponse_bandwidthThrottling,
+    getFailbackReplicationConfigurationResponse_name,
+    getFailbackReplicationConfigurationResponse_usePrivateIP,
+    getFailbackReplicationConfigurationResponse_httpStatus,
+    getFailbackReplicationConfigurationResponse_recoveryInstanceID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFailbackReplicationConfiguration' smart constructor.
+data GetFailbackReplicationConfiguration = GetFailbackReplicationConfiguration'
+  { -- | The ID of the Recovery Instance whose failback replication configuration
+    -- should be returned.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFailbackReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceID', 'getFailbackReplicationConfiguration_recoveryInstanceID' - The ID of the Recovery Instance whose failback replication configuration
+-- should be returned.
+newGetFailbackReplicationConfiguration ::
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  GetFailbackReplicationConfiguration
+newGetFailbackReplicationConfiguration
+  pRecoveryInstanceID_ =
+    GetFailbackReplicationConfiguration'
+      { recoveryInstanceID =
+          pRecoveryInstanceID_
+      }
+
+-- | The ID of the Recovery Instance whose failback replication configuration
+-- should be returned.
+getFailbackReplicationConfiguration_recoveryInstanceID :: Lens.Lens' GetFailbackReplicationConfiguration Prelude.Text
+getFailbackReplicationConfiguration_recoveryInstanceID = Lens.lens (\GetFailbackReplicationConfiguration' {recoveryInstanceID} -> recoveryInstanceID) (\s@GetFailbackReplicationConfiguration' {} a -> s {recoveryInstanceID = a} :: GetFailbackReplicationConfiguration)
+
+instance
+  Core.AWSRequest
+    GetFailbackReplicationConfiguration
+  where
+  type
+    AWSResponse GetFailbackReplicationConfiguration =
+      GetFailbackReplicationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFailbackReplicationConfigurationResponse'
+            Prelude.<$> (x Data..?> "bandwidthThrottling")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "usePrivateIP")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "recoveryInstanceID")
+      )
+
+instance
+  Prelude.Hashable
+    GetFailbackReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    GetFailbackReplicationConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` recoveryInstanceID
+
+instance
+  Prelude.NFData
+    GetFailbackReplicationConfiguration
+  where
+  rnf GetFailbackReplicationConfiguration' {..} =
+    Prelude.rnf recoveryInstanceID
+
+instance
+  Data.ToHeaders
+    GetFailbackReplicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    GetFailbackReplicationConfiguration
+  where
+  toJSON GetFailbackReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recoveryInstanceID" Data..= recoveryInstanceID)
+          ]
+      )
+
+instance
+  Data.ToPath
+    GetFailbackReplicationConfiguration
+  where
+  toPath =
+    Prelude.const
+      "/GetFailbackReplicationConfiguration"
+
+instance
+  Data.ToQuery
+    GetFailbackReplicationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFailbackReplicationConfigurationResponse' smart constructor.
+data GetFailbackReplicationConfigurationResponse = GetFailbackReplicationConfigurationResponse'
+  { -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Recovery Instance in Mbps.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the Failback Replication Configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Whether to use Private IP for the failback replication of the Recovery
+    -- Instance.
+    usePrivateIP :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the Recovery Instance.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFailbackReplicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bandwidthThrottling', 'getFailbackReplicationConfigurationResponse_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Recovery Instance in Mbps.
+--
+-- 'name', 'getFailbackReplicationConfigurationResponse_name' - The name of the Failback Replication Configuration.
+--
+-- 'usePrivateIP', 'getFailbackReplicationConfigurationResponse_usePrivateIP' - Whether to use Private IP for the failback replication of the Recovery
+-- Instance.
+--
+-- 'httpStatus', 'getFailbackReplicationConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'recoveryInstanceID', 'getFailbackReplicationConfigurationResponse_recoveryInstanceID' - The ID of the Recovery Instance.
+newGetFailbackReplicationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  GetFailbackReplicationConfigurationResponse
+newGetFailbackReplicationConfigurationResponse
+  pHttpStatus_
+  pRecoveryInstanceID_ =
+    GetFailbackReplicationConfigurationResponse'
+      { bandwidthThrottling =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        usePrivateIP = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        recoveryInstanceID =
+          pRecoveryInstanceID_
+      }
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Recovery Instance in Mbps.
+getFailbackReplicationConfigurationResponse_bandwidthThrottling :: Lens.Lens' GetFailbackReplicationConfigurationResponse (Prelude.Maybe Prelude.Natural)
+getFailbackReplicationConfigurationResponse_bandwidthThrottling = Lens.lens (\GetFailbackReplicationConfigurationResponse' {bandwidthThrottling} -> bandwidthThrottling) (\s@GetFailbackReplicationConfigurationResponse' {} a -> s {bandwidthThrottling = a} :: GetFailbackReplicationConfigurationResponse)
+
+-- | The name of the Failback Replication Configuration.
+getFailbackReplicationConfigurationResponse_name :: Lens.Lens' GetFailbackReplicationConfigurationResponse (Prelude.Maybe Prelude.Text)
+getFailbackReplicationConfigurationResponse_name = Lens.lens (\GetFailbackReplicationConfigurationResponse' {name} -> name) (\s@GetFailbackReplicationConfigurationResponse' {} a -> s {name = a} :: GetFailbackReplicationConfigurationResponse)
+
+-- | Whether to use Private IP for the failback replication of the Recovery
+-- Instance.
+getFailbackReplicationConfigurationResponse_usePrivateIP :: Lens.Lens' GetFailbackReplicationConfigurationResponse (Prelude.Maybe Prelude.Bool)
+getFailbackReplicationConfigurationResponse_usePrivateIP = Lens.lens (\GetFailbackReplicationConfigurationResponse' {usePrivateIP} -> usePrivateIP) (\s@GetFailbackReplicationConfigurationResponse' {} a -> s {usePrivateIP = a} :: GetFailbackReplicationConfigurationResponse)
+
+-- | The response's http status code.
+getFailbackReplicationConfigurationResponse_httpStatus :: Lens.Lens' GetFailbackReplicationConfigurationResponse Prelude.Int
+getFailbackReplicationConfigurationResponse_httpStatus = Lens.lens (\GetFailbackReplicationConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetFailbackReplicationConfigurationResponse' {} a -> s {httpStatus = a} :: GetFailbackReplicationConfigurationResponse)
+
+-- | The ID of the Recovery Instance.
+getFailbackReplicationConfigurationResponse_recoveryInstanceID :: Lens.Lens' GetFailbackReplicationConfigurationResponse Prelude.Text
+getFailbackReplicationConfigurationResponse_recoveryInstanceID = Lens.lens (\GetFailbackReplicationConfigurationResponse' {recoveryInstanceID} -> recoveryInstanceID) (\s@GetFailbackReplicationConfigurationResponse' {} a -> s {recoveryInstanceID = a} :: GetFailbackReplicationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetFailbackReplicationConfigurationResponse
+  where
+  rnf GetFailbackReplicationConfigurationResponse' {..} =
+    Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf usePrivateIP
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf recoveryInstanceID
diff --git a/gen/Amazonka/DrS/GetLaunchConfiguration.hs b/gen/Amazonka/DrS/GetLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/GetLaunchConfiguration.hs
@@ -0,0 +1,131 @@
+{-# 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.DrS.GetLaunchConfiguration
+-- 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 a LaunchConfiguration, filtered by Source Server IDs.
+module Amazonka.DrS.GetLaunchConfiguration
+  ( -- * Creating a Request
+    GetLaunchConfiguration (..),
+    newGetLaunchConfiguration,
+
+    -- * Request Lenses
+    getLaunchConfiguration_sourceServerID,
+
+    -- * Destructuring the Response
+    LaunchConfiguration (..),
+    newLaunchConfiguration,
+
+    -- * Response Lenses
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_name,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLaunchConfiguration' smart constructor.
+data GetLaunchConfiguration = GetLaunchConfiguration'
+  { -- | The ID of the Source Server that we want to retrieve a Launch
+    -- Configuration for.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'getLaunchConfiguration_sourceServerID' - The ID of the Source Server that we want to retrieve a Launch
+-- Configuration for.
+newGetLaunchConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  GetLaunchConfiguration
+newGetLaunchConfiguration pSourceServerID_ =
+  GetLaunchConfiguration'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | The ID of the Source Server that we want to retrieve a Launch
+-- Configuration for.
+getLaunchConfiguration_sourceServerID :: Lens.Lens' GetLaunchConfiguration Prelude.Text
+getLaunchConfiguration_sourceServerID = Lens.lens (\GetLaunchConfiguration' {sourceServerID} -> sourceServerID) (\s@GetLaunchConfiguration' {} a -> s {sourceServerID = a} :: GetLaunchConfiguration)
+
+instance Core.AWSRequest GetLaunchConfiguration where
+  type
+    AWSResponse GetLaunchConfiguration =
+      LaunchConfiguration
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetLaunchConfiguration where
+  hashWithSalt _salt GetLaunchConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData GetLaunchConfiguration where
+  rnf GetLaunchConfiguration' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders GetLaunchConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLaunchConfiguration where
+  toJSON GetLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath GetLaunchConfiguration where
+  toPath = Prelude.const "/GetLaunchConfiguration"
+
+instance Data.ToQuery GetLaunchConfiguration where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/GetReplicationConfiguration.hs b/gen/Amazonka/DrS/GetReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/GetReplicationConfiguration.hs
@@ -0,0 +1,136 @@
+{-# 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.DrS.GetReplicationConfiguration
+-- 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 a ReplicationConfiguration, filtered by Source Server ID.
+module Amazonka.DrS.GetReplicationConfiguration
+  ( -- * Creating a Request
+    GetReplicationConfiguration (..),
+    newGetReplicationConfiguration,
+
+    -- * Request Lenses
+    getReplicationConfiguration_sourceServerID,
+
+    -- * Destructuring the Response
+    ReplicationConfiguration (..),
+    newReplicationConfiguration,
+
+    -- * Response Lenses
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_pitPolicy,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetReplicationConfiguration' smart constructor.
+data GetReplicationConfiguration = GetReplicationConfiguration'
+  { -- | The ID of the Source Serve for this Replication Configuration.r
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'getReplicationConfiguration_sourceServerID' - The ID of the Source Serve for this Replication Configuration.r
+newGetReplicationConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  GetReplicationConfiguration
+newGetReplicationConfiguration pSourceServerID_ =
+  GetReplicationConfiguration'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | The ID of the Source Serve for this Replication Configuration.r
+getReplicationConfiguration_sourceServerID :: Lens.Lens' GetReplicationConfiguration Prelude.Text
+getReplicationConfiguration_sourceServerID = Lens.lens (\GetReplicationConfiguration' {sourceServerID} -> sourceServerID) (\s@GetReplicationConfiguration' {} a -> s {sourceServerID = a} :: GetReplicationConfiguration)
+
+instance Core.AWSRequest GetReplicationConfiguration where
+  type
+    AWSResponse GetReplicationConfiguration =
+      ReplicationConfiguration
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable GetReplicationConfiguration where
+  hashWithSalt _salt GetReplicationConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData GetReplicationConfiguration where
+  rnf GetReplicationConfiguration' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders GetReplicationConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetReplicationConfiguration where
+  toJSON GetReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath GetReplicationConfiguration where
+  toPath = Prelude.const "/GetReplicationConfiguration"
+
+instance Data.ToQuery GetReplicationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/InitializeService.hs b/gen/Amazonka/DrS/InitializeService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/InitializeService.hs
@@ -0,0 +1,132 @@
+{-# 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.DrS.InitializeService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initialize Elastic Disaster Recovery.
+module Amazonka.DrS.InitializeService
+  ( -- * Creating a Request
+    InitializeService (..),
+    newInitializeService,
+
+    -- * Destructuring the Response
+    InitializeServiceResponse (..),
+    newInitializeServiceResponse,
+
+    -- * Response Lenses
+    initializeServiceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newInitializeService' smart constructor.
+data InitializeService = InitializeService'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InitializeService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newInitializeService ::
+  InitializeService
+newInitializeService = InitializeService'
+
+instance Core.AWSRequest InitializeService where
+  type
+    AWSResponse InitializeService =
+      InitializeServiceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          InitializeServiceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable InitializeService where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData InitializeService where
+  rnf _ = ()
+
+instance Data.ToHeaders InitializeService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON InitializeService where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath InitializeService where
+  toPath = Prelude.const "/InitializeService"
+
+instance Data.ToQuery InitializeService where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newInitializeServiceResponse' smart constructor.
+data InitializeServiceResponse = InitializeServiceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InitializeServiceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'initializeServiceResponse_httpStatus' - The response's http status code.
+newInitializeServiceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  InitializeServiceResponse
+newInitializeServiceResponse pHttpStatus_ =
+  InitializeServiceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+initializeServiceResponse_httpStatus :: Lens.Lens' InitializeServiceResponse Prelude.Int
+initializeServiceResponse_httpStatus = Lens.lens (\InitializeServiceResponse' {httpStatus} -> httpStatus) (\s@InitializeServiceResponse' {} a -> s {httpStatus = a} :: InitializeServiceResponse)
+
+instance Prelude.NFData InitializeServiceResponse where
+  rnf InitializeServiceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/Lens.hs b/gen/Amazonka/DrS/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Lens.hs
@@ -0,0 +1,735 @@
+{-# 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.DrS.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.DrS.Lens
+  ( -- * Operations
+
+    -- ** CreateExtendedSourceServer
+    createExtendedSourceServer_tags,
+    createExtendedSourceServer_sourceServerArn,
+    createExtendedSourceServerResponse_sourceServer,
+    createExtendedSourceServerResponse_httpStatus,
+
+    -- ** CreateReplicationConfigurationTemplate
+    createReplicationConfigurationTemplate_ebsEncryptionKeyArn,
+    createReplicationConfigurationTemplate_tags,
+    createReplicationConfigurationTemplate_associateDefaultSecurityGroup,
+    createReplicationConfigurationTemplate_bandwidthThrottling,
+    createReplicationConfigurationTemplate_createPublicIP,
+    createReplicationConfigurationTemplate_dataPlaneRouting,
+    createReplicationConfigurationTemplate_defaultLargeStagingDiskType,
+    createReplicationConfigurationTemplate_ebsEncryption,
+    createReplicationConfigurationTemplate_pitPolicy,
+    createReplicationConfigurationTemplate_replicationServerInstanceType,
+    createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    createReplicationConfigurationTemplate_stagingAreaSubnetId,
+    createReplicationConfigurationTemplate_stagingAreaTags,
+    createReplicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_pitPolicy,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- ** DeleteJob
+    deleteJob_jobID,
+    deleteJobResponse_httpStatus,
+
+    -- ** DeleteRecoveryInstance
+    deleteRecoveryInstance_recoveryInstanceID,
+
+    -- ** DeleteReplicationConfigurationTemplate
+    deleteReplicationConfigurationTemplate_replicationConfigurationTemplateID,
+    deleteReplicationConfigurationTemplateResponse_httpStatus,
+
+    -- ** DeleteSourceServer
+    deleteSourceServer_sourceServerID,
+    deleteSourceServerResponse_httpStatus,
+
+    -- ** DescribeJobLogItems
+    describeJobLogItems_maxResults,
+    describeJobLogItems_nextToken,
+    describeJobLogItems_jobID,
+    describeJobLogItemsResponse_items,
+    describeJobLogItemsResponse_nextToken,
+    describeJobLogItemsResponse_httpStatus,
+
+    -- ** DescribeJobs
+    describeJobs_filters,
+    describeJobs_maxResults,
+    describeJobs_nextToken,
+    describeJobsResponse_items,
+    describeJobsResponse_nextToken,
+    describeJobsResponse_httpStatus,
+
+    -- ** DescribeRecoveryInstances
+    describeRecoveryInstances_filters,
+    describeRecoveryInstances_maxResults,
+    describeRecoveryInstances_nextToken,
+    describeRecoveryInstancesResponse_items,
+    describeRecoveryInstancesResponse_nextToken,
+    describeRecoveryInstancesResponse_httpStatus,
+
+    -- ** DescribeRecoverySnapshots
+    describeRecoverySnapshots_filters,
+    describeRecoverySnapshots_maxResults,
+    describeRecoverySnapshots_nextToken,
+    describeRecoverySnapshots_order,
+    describeRecoverySnapshots_sourceServerID,
+    describeRecoverySnapshotsResponse_items,
+    describeRecoverySnapshotsResponse_nextToken,
+    describeRecoverySnapshotsResponse_httpStatus,
+
+    -- ** DescribeReplicationConfigurationTemplates
+    describeReplicationConfigurationTemplates_maxResults,
+    describeReplicationConfigurationTemplates_nextToken,
+    describeReplicationConfigurationTemplates_replicationConfigurationTemplateIDs,
+    describeReplicationConfigurationTemplatesResponse_items,
+    describeReplicationConfigurationTemplatesResponse_nextToken,
+    describeReplicationConfigurationTemplatesResponse_httpStatus,
+
+    -- ** DescribeSourceServers
+    describeSourceServers_filters,
+    describeSourceServers_maxResults,
+    describeSourceServers_nextToken,
+    describeSourceServersResponse_items,
+    describeSourceServersResponse_nextToken,
+    describeSourceServersResponse_httpStatus,
+
+    -- ** DisconnectRecoveryInstance
+    disconnectRecoveryInstance_recoveryInstanceID,
+
+    -- ** DisconnectSourceServer
+    disconnectSourceServer_sourceServerID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_lastLaunchResult,
+    sourceServer_lifeCycle,
+    sourceServer_recoveryInstanceId,
+    sourceServer_replicationDirection,
+    sourceServer_reversedDirectionSourceServerArn,
+    sourceServer_sourceCloudProperties,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_stagingArea,
+    sourceServer_tags,
+
+    -- ** GetFailbackReplicationConfiguration
+    getFailbackReplicationConfiguration_recoveryInstanceID,
+    getFailbackReplicationConfigurationResponse_bandwidthThrottling,
+    getFailbackReplicationConfigurationResponse_name,
+    getFailbackReplicationConfigurationResponse_usePrivateIP,
+    getFailbackReplicationConfigurationResponse_httpStatus,
+    getFailbackReplicationConfigurationResponse_recoveryInstanceID,
+
+    -- ** GetLaunchConfiguration
+    getLaunchConfiguration_sourceServerID,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_name,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- ** GetReplicationConfiguration
+    getReplicationConfiguration_sourceServerID,
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_pitPolicy,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- ** InitializeService
+    initializeServiceResponse_httpStatus,
+
+    -- ** ListExtensibleSourceServers
+    listExtensibleSourceServers_maxResults,
+    listExtensibleSourceServers_nextToken,
+    listExtensibleSourceServers_stagingAccountID,
+    listExtensibleSourceServersResponse_items,
+    listExtensibleSourceServersResponse_nextToken,
+    listExtensibleSourceServersResponse_httpStatus,
+
+    -- ** ListStagingAccounts
+    listStagingAccounts_maxResults,
+    listStagingAccounts_nextToken,
+    listStagingAccountsResponse_accounts,
+    listStagingAccountsResponse_nextToken,
+    listStagingAccountsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** RetryDataReplication
+    retryDataReplication_sourceServerID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_lastLaunchResult,
+    sourceServer_lifeCycle,
+    sourceServer_recoveryInstanceId,
+    sourceServer_replicationDirection,
+    sourceServer_reversedDirectionSourceServerArn,
+    sourceServer_sourceCloudProperties,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_stagingArea,
+    sourceServer_tags,
+
+    -- ** ReverseReplication
+    reverseReplication_recoveryInstanceID,
+    reverseReplicationResponse_reversedDirectionSourceServerArn,
+    reverseReplicationResponse_httpStatus,
+
+    -- ** StartFailbackLaunch
+    startFailbackLaunch_tags,
+    startFailbackLaunch_recoveryInstanceIDs,
+    startFailbackLaunchResponse_job,
+    startFailbackLaunchResponse_httpStatus,
+
+    -- ** StartRecovery
+    startRecovery_isDrill,
+    startRecovery_tags,
+    startRecovery_sourceServers,
+    startRecoveryResponse_job,
+    startRecoveryResponse_httpStatus,
+
+    -- ** StartReplication
+    startReplication_sourceServerID,
+    startReplicationResponse_sourceServer,
+    startReplicationResponse_httpStatus,
+
+    -- ** StopFailback
+    stopFailback_recoveryInstanceID,
+
+    -- ** StopReplication
+    stopReplication_sourceServerID,
+    stopReplicationResponse_sourceServer,
+    stopReplicationResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** TerminateRecoveryInstances
+    terminateRecoveryInstances_recoveryInstanceIDs,
+    terminateRecoveryInstancesResponse_job,
+    terminateRecoveryInstancesResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- ** UpdateFailbackReplicationConfiguration
+    updateFailbackReplicationConfiguration_bandwidthThrottling,
+    updateFailbackReplicationConfiguration_name,
+    updateFailbackReplicationConfiguration_usePrivateIP,
+    updateFailbackReplicationConfiguration_recoveryInstanceID,
+
+    -- ** UpdateLaunchConfiguration
+    updateLaunchConfiguration_copyPrivateIp,
+    updateLaunchConfiguration_copyTags,
+    updateLaunchConfiguration_launchDisposition,
+    updateLaunchConfiguration_licensing,
+    updateLaunchConfiguration_name,
+    updateLaunchConfiguration_targetInstanceTypeRightSizingMethod,
+    updateLaunchConfiguration_sourceServerID,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_name,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- ** UpdateReplicationConfiguration
+    updateReplicationConfiguration_associateDefaultSecurityGroup,
+    updateReplicationConfiguration_bandwidthThrottling,
+    updateReplicationConfiguration_createPublicIP,
+    updateReplicationConfiguration_dataPlaneRouting,
+    updateReplicationConfiguration_defaultLargeStagingDiskType,
+    updateReplicationConfiguration_ebsEncryption,
+    updateReplicationConfiguration_ebsEncryptionKeyArn,
+    updateReplicationConfiguration_name,
+    updateReplicationConfiguration_pitPolicy,
+    updateReplicationConfiguration_replicatedDisks,
+    updateReplicationConfiguration_replicationServerInstanceType,
+    updateReplicationConfiguration_replicationServersSecurityGroupsIDs,
+    updateReplicationConfiguration_stagingAreaSubnetId,
+    updateReplicationConfiguration_stagingAreaTags,
+    updateReplicationConfiguration_useDedicatedReplicationServer,
+    updateReplicationConfiguration_sourceServerID,
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_pitPolicy,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- ** UpdateReplicationConfigurationTemplate
+    updateReplicationConfigurationTemplate_arn,
+    updateReplicationConfigurationTemplate_associateDefaultSecurityGroup,
+    updateReplicationConfigurationTemplate_bandwidthThrottling,
+    updateReplicationConfigurationTemplate_createPublicIP,
+    updateReplicationConfigurationTemplate_dataPlaneRouting,
+    updateReplicationConfigurationTemplate_defaultLargeStagingDiskType,
+    updateReplicationConfigurationTemplate_ebsEncryption,
+    updateReplicationConfigurationTemplate_ebsEncryptionKeyArn,
+    updateReplicationConfigurationTemplate_pitPolicy,
+    updateReplicationConfigurationTemplate_replicationServerInstanceType,
+    updateReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    updateReplicationConfigurationTemplate_stagingAreaSubnetId,
+    updateReplicationConfigurationTemplate_stagingAreaTags,
+    updateReplicationConfigurationTemplate_useDedicatedReplicationServer,
+    updateReplicationConfigurationTemplate_replicationConfigurationTemplateID,
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_pitPolicy,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- * Types
+
+    -- ** Account
+    account_accountID,
+
+    -- ** CPU
+    cpu_cores,
+    cpu_modelName,
+
+    -- ** ConversionProperties
+    conversionProperties_dataTimestamp,
+    conversionProperties_forceUefi,
+    conversionProperties_rootVolumeName,
+    conversionProperties_volumeToConversionMap,
+    conversionProperties_volumeToVolumeSize,
+
+    -- ** DataReplicationError
+    dataReplicationError_error,
+    dataReplicationError_rawError,
+
+    -- ** DataReplicationInfo
+    dataReplicationInfo_dataReplicationError,
+    dataReplicationInfo_dataReplicationInitiation,
+    dataReplicationInfo_dataReplicationState,
+    dataReplicationInfo_etaDateTime,
+    dataReplicationInfo_lagDuration,
+    dataReplicationInfo_replicatedDisks,
+
+    -- ** DataReplicationInfoReplicatedDisk
+    dataReplicationInfoReplicatedDisk_backloggedStorageBytes,
+    dataReplicationInfoReplicatedDisk_deviceName,
+    dataReplicationInfoReplicatedDisk_replicatedStorageBytes,
+    dataReplicationInfoReplicatedDisk_rescannedStorageBytes,
+    dataReplicationInfoReplicatedDisk_totalStorageBytes,
+
+    -- ** DataReplicationInitiation
+    dataReplicationInitiation_nextAttemptDateTime,
+    dataReplicationInitiation_startDateTime,
+    dataReplicationInitiation_steps,
+
+    -- ** DataReplicationInitiationStep
+    dataReplicationInitiationStep_name,
+    dataReplicationInitiationStep_status,
+
+    -- ** DescribeJobsRequestFilters
+    describeJobsRequestFilters_fromDate,
+    describeJobsRequestFilters_jobIDs,
+    describeJobsRequestFilters_toDate,
+
+    -- ** DescribeRecoveryInstancesRequestFilters
+    describeRecoveryInstancesRequestFilters_recoveryInstanceIDs,
+    describeRecoveryInstancesRequestFilters_sourceServerIDs,
+
+    -- ** DescribeRecoverySnapshotsRequestFilters
+    describeRecoverySnapshotsRequestFilters_fromDateTime,
+    describeRecoverySnapshotsRequestFilters_toDateTime,
+
+    -- ** DescribeSourceServersRequestFilters
+    describeSourceServersRequestFilters_hardwareId,
+    describeSourceServersRequestFilters_sourceServerIDs,
+    describeSourceServersRequestFilters_stagingAccountIDs,
+
+    -- ** Disk
+    disk_bytes,
+    disk_deviceName,
+
+    -- ** IdentificationHints
+    identificationHints_awsInstanceID,
+    identificationHints_fqdn,
+    identificationHints_hostname,
+    identificationHints_vmWareUuid,
+
+    -- ** Job
+    job_arn,
+    job_creationDateTime,
+    job_endDateTime,
+    job_initiatedBy,
+    job_participatingServers,
+    job_status,
+    job_tags,
+    job_type,
+    job_jobID,
+
+    -- ** JobLog
+    jobLog_event,
+    jobLog_eventData,
+    jobLog_logDateTime,
+
+    -- ** JobLogEventData
+    jobLogEventData_conversionProperties,
+    jobLogEventData_conversionServerID,
+    jobLogEventData_rawError,
+    jobLogEventData_sourceServerID,
+    jobLogEventData_targetInstanceID,
+
+    -- ** LaunchConfiguration
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_name,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- ** Licensing
+    licensing_osByol,
+
+    -- ** LifeCycle
+    lifeCycle_addedToServiceDateTime,
+    lifeCycle_elapsedReplicationDuration,
+    lifeCycle_firstByteDateTime,
+    lifeCycle_lastLaunch,
+    lifeCycle_lastSeenByServiceDateTime,
+
+    -- ** LifeCycleLastLaunch
+    lifeCycleLastLaunch_initiated,
+
+    -- ** LifeCycleLastLaunchInitiated
+    lifeCycleLastLaunchInitiated_apiCallDateTime,
+    lifeCycleLastLaunchInitiated_jobID,
+    lifeCycleLastLaunchInitiated_type,
+
+    -- ** NetworkInterface
+    networkInterface_ips,
+    networkInterface_isPrimary,
+    networkInterface_macAddress,
+
+    -- ** OS
+    os_fullString,
+
+    -- ** PITPolicyRule
+    pITPolicyRule_enabled,
+    pITPolicyRule_ruleID,
+    pITPolicyRule_interval,
+    pITPolicyRule_retentionDuration,
+    pITPolicyRule_units,
+
+    -- ** ParticipatingServer
+    participatingServer_launchStatus,
+    participatingServer_recoveryInstanceID,
+    participatingServer_sourceServerID,
+
+    -- ** RecoveryInstance
+    recoveryInstance_arn,
+    recoveryInstance_dataReplicationInfo,
+    recoveryInstance_ec2InstanceID,
+    recoveryInstance_ec2InstanceState,
+    recoveryInstance_failback,
+    recoveryInstance_isDrill,
+    recoveryInstance_jobID,
+    recoveryInstance_originEnvironment,
+    recoveryInstance_pointInTimeSnapshotDateTime,
+    recoveryInstance_recoveryInstanceID,
+    recoveryInstance_recoveryInstanceProperties,
+    recoveryInstance_sourceServerID,
+    recoveryInstance_tags,
+
+    -- ** RecoveryInstanceDataReplicationError
+    recoveryInstanceDataReplicationError_error,
+    recoveryInstanceDataReplicationError_rawError,
+
+    -- ** RecoveryInstanceDataReplicationInfo
+    recoveryInstanceDataReplicationInfo_dataReplicationError,
+    recoveryInstanceDataReplicationInfo_dataReplicationInitiation,
+    recoveryInstanceDataReplicationInfo_dataReplicationState,
+    recoveryInstanceDataReplicationInfo_etaDateTime,
+    recoveryInstanceDataReplicationInfo_lagDuration,
+    recoveryInstanceDataReplicationInfo_replicatedDisks,
+
+    -- ** RecoveryInstanceDataReplicationInfoReplicatedDisk
+    recoveryInstanceDataReplicationInfoReplicatedDisk_backloggedStorageBytes,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_deviceName,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_replicatedStorageBytes,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_rescannedStorageBytes,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_totalStorageBytes,
+
+    -- ** RecoveryInstanceDataReplicationInitiation
+    recoveryInstanceDataReplicationInitiation_startDateTime,
+    recoveryInstanceDataReplicationInitiation_steps,
+
+    -- ** RecoveryInstanceDataReplicationInitiationStep
+    recoveryInstanceDataReplicationInitiationStep_name,
+    recoveryInstanceDataReplicationInitiationStep_status,
+
+    -- ** RecoveryInstanceDisk
+    recoveryInstanceDisk_bytes,
+    recoveryInstanceDisk_ebsVolumeID,
+    recoveryInstanceDisk_internalDeviceName,
+
+    -- ** RecoveryInstanceFailback
+    recoveryInstanceFailback_agentLastSeenByServiceDateTime,
+    recoveryInstanceFailback_elapsedReplicationDuration,
+    recoveryInstanceFailback_failbackClientID,
+    recoveryInstanceFailback_failbackClientLastSeenByServiceDateTime,
+    recoveryInstanceFailback_failbackInitiationTime,
+    recoveryInstanceFailback_failbackJobID,
+    recoveryInstanceFailback_failbackLaunchType,
+    recoveryInstanceFailback_failbackToOriginalServer,
+    recoveryInstanceFailback_firstByteDateTime,
+    recoveryInstanceFailback_state,
+
+    -- ** RecoveryInstanceProperties
+    recoveryInstanceProperties_cpus,
+    recoveryInstanceProperties_disks,
+    recoveryInstanceProperties_identificationHints,
+    recoveryInstanceProperties_lastUpdatedDateTime,
+    recoveryInstanceProperties_networkInterfaces,
+    recoveryInstanceProperties_os,
+    recoveryInstanceProperties_ramBytes,
+
+    -- ** RecoverySnapshot
+    recoverySnapshot_ebsSnapshots,
+    recoverySnapshot_timestamp,
+    recoverySnapshot_expectedTimestamp,
+    recoverySnapshot_snapshotID,
+    recoverySnapshot_sourceServerID,
+
+    -- ** ReplicationConfiguration
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_pitPolicy,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- ** ReplicationConfigurationReplicatedDisk
+    replicationConfigurationReplicatedDisk_deviceName,
+    replicationConfigurationReplicatedDisk_iops,
+    replicationConfigurationReplicatedDisk_isBootDisk,
+    replicationConfigurationReplicatedDisk_optimizedStagingDiskType,
+    replicationConfigurationReplicatedDisk_stagingDiskType,
+    replicationConfigurationReplicatedDisk_throughput,
+
+    -- ** ReplicationConfigurationTemplate
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_pitPolicy,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- ** SourceCloudProperties
+    sourceCloudProperties_originAccountID,
+    sourceCloudProperties_originAvailabilityZone,
+    sourceCloudProperties_originRegion,
+
+    -- ** SourceProperties
+    sourceProperties_cpus,
+    sourceProperties_disks,
+    sourceProperties_identificationHints,
+    sourceProperties_lastUpdatedDateTime,
+    sourceProperties_networkInterfaces,
+    sourceProperties_os,
+    sourceProperties_ramBytes,
+    sourceProperties_recommendedInstanceType,
+
+    -- ** SourceServer
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_lastLaunchResult,
+    sourceServer_lifeCycle,
+    sourceServer_recoveryInstanceId,
+    sourceServer_replicationDirection,
+    sourceServer_reversedDirectionSourceServerArn,
+    sourceServer_sourceCloudProperties,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_stagingArea,
+    sourceServer_tags,
+
+    -- ** StagingArea
+    stagingArea_errorMessage,
+    stagingArea_stagingAccountID,
+    stagingArea_stagingSourceServerArn,
+    stagingArea_status,
+
+    -- ** StagingSourceServer
+    stagingSourceServer_arn,
+    stagingSourceServer_hostname,
+    stagingSourceServer_tags,
+
+    -- ** StartRecoveryRequestSourceServer
+    startRecoveryRequestSourceServer_recoverySnapshotID,
+    startRecoveryRequestSourceServer_sourceServerID,
+  )
+where
+
+import Amazonka.DrS.CreateExtendedSourceServer
+import Amazonka.DrS.CreateReplicationConfigurationTemplate
+import Amazonka.DrS.DeleteJob
+import Amazonka.DrS.DeleteRecoveryInstance
+import Amazonka.DrS.DeleteReplicationConfigurationTemplate
+import Amazonka.DrS.DeleteSourceServer
+import Amazonka.DrS.DescribeJobLogItems
+import Amazonka.DrS.DescribeJobs
+import Amazonka.DrS.DescribeRecoveryInstances
+import Amazonka.DrS.DescribeRecoverySnapshots
+import Amazonka.DrS.DescribeReplicationConfigurationTemplates
+import Amazonka.DrS.DescribeSourceServers
+import Amazonka.DrS.DisconnectRecoveryInstance
+import Amazonka.DrS.DisconnectSourceServer
+import Amazonka.DrS.GetFailbackReplicationConfiguration
+import Amazonka.DrS.GetLaunchConfiguration
+import Amazonka.DrS.GetReplicationConfiguration
+import Amazonka.DrS.InitializeService
+import Amazonka.DrS.ListExtensibleSourceServers
+import Amazonka.DrS.ListStagingAccounts
+import Amazonka.DrS.ListTagsForResource
+import Amazonka.DrS.RetryDataReplication
+import Amazonka.DrS.ReverseReplication
+import Amazonka.DrS.StartFailbackLaunch
+import Amazonka.DrS.StartRecovery
+import Amazonka.DrS.StartReplication
+import Amazonka.DrS.StopFailback
+import Amazonka.DrS.StopReplication
+import Amazonka.DrS.TagResource
+import Amazonka.DrS.TerminateRecoveryInstances
+import Amazonka.DrS.Types.Account
+import Amazonka.DrS.Types.CPU
+import Amazonka.DrS.Types.ConversionProperties
+import Amazonka.DrS.Types.DataReplicationError
+import Amazonka.DrS.Types.DataReplicationInfo
+import Amazonka.DrS.Types.DataReplicationInfoReplicatedDisk
+import Amazonka.DrS.Types.DataReplicationInitiation
+import Amazonka.DrS.Types.DataReplicationInitiationStep
+import Amazonka.DrS.Types.DescribeJobsRequestFilters
+import Amazonka.DrS.Types.DescribeRecoveryInstancesRequestFilters
+import Amazonka.DrS.Types.DescribeRecoverySnapshotsRequestFilters
+import Amazonka.DrS.Types.DescribeSourceServersRequestFilters
+import Amazonka.DrS.Types.Disk
+import Amazonka.DrS.Types.IdentificationHints
+import Amazonka.DrS.Types.Job
+import Amazonka.DrS.Types.JobLog
+import Amazonka.DrS.Types.JobLogEventData
+import Amazonka.DrS.Types.LaunchConfiguration
+import Amazonka.DrS.Types.Licensing
+import Amazonka.DrS.Types.LifeCycle
+import Amazonka.DrS.Types.LifeCycleLastLaunch
+import Amazonka.DrS.Types.LifeCycleLastLaunchInitiated
+import Amazonka.DrS.Types.NetworkInterface
+import Amazonka.DrS.Types.OS
+import Amazonka.DrS.Types.PITPolicyRule
+import Amazonka.DrS.Types.ParticipatingServer
+import Amazonka.DrS.Types.RecoveryInstance
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationError
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfo
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfoReplicatedDisk
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiation
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStep
+import Amazonka.DrS.Types.RecoveryInstanceDisk
+import Amazonka.DrS.Types.RecoveryInstanceFailback
+import Amazonka.DrS.Types.RecoveryInstanceProperties
+import Amazonka.DrS.Types.RecoverySnapshot
+import Amazonka.DrS.Types.ReplicationConfiguration
+import Amazonka.DrS.Types.ReplicationConfigurationReplicatedDisk
+import Amazonka.DrS.Types.ReplicationConfigurationTemplate
+import Amazonka.DrS.Types.SourceCloudProperties
+import Amazonka.DrS.Types.SourceProperties
+import Amazonka.DrS.Types.SourceServer
+import Amazonka.DrS.Types.StagingArea
+import Amazonka.DrS.Types.StagingSourceServer
+import Amazonka.DrS.Types.StartRecoveryRequestSourceServer
+import Amazonka.DrS.UntagResource
+import Amazonka.DrS.UpdateFailbackReplicationConfiguration
+import Amazonka.DrS.UpdateLaunchConfiguration
+import Amazonka.DrS.UpdateReplicationConfiguration
+import Amazonka.DrS.UpdateReplicationConfigurationTemplate
diff --git a/gen/Amazonka/DrS/ListExtensibleSourceServers.hs b/gen/Amazonka/DrS/ListExtensibleSourceServers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/ListExtensibleSourceServers.hs
@@ -0,0 +1,242 @@
+{-# 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.DrS.ListExtensibleSourceServers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of source servers on a staging account that are
+-- extensible, which means that: a. The source server is not already
+-- extended into this Account. b. The source server on the Account we’re
+-- reading from is not an extension of another source server.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.ListExtensibleSourceServers
+  ( -- * Creating a Request
+    ListExtensibleSourceServers (..),
+    newListExtensibleSourceServers,
+
+    -- * Request Lenses
+    listExtensibleSourceServers_maxResults,
+    listExtensibleSourceServers_nextToken,
+    listExtensibleSourceServers_stagingAccountID,
+
+    -- * Destructuring the Response
+    ListExtensibleSourceServersResponse (..),
+    newListExtensibleSourceServersResponse,
+
+    -- * Response Lenses
+    listExtensibleSourceServersResponse_items,
+    listExtensibleSourceServersResponse_nextToken,
+    listExtensibleSourceServersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExtensibleSourceServers' smart constructor.
+data ListExtensibleSourceServers = ListExtensibleSourceServers'
+  { -- | The maximum number of extensible source servers to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next extensible source server to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Id of the staging Account to retrieve extensible source servers
+    -- from.
+    stagingAccountID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensibleSourceServers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listExtensibleSourceServers_maxResults' - The maximum number of extensible source servers to retrieve.
+--
+-- 'nextToken', 'listExtensibleSourceServers_nextToken' - The token of the next extensible source server to retrieve.
+--
+-- 'stagingAccountID', 'listExtensibleSourceServers_stagingAccountID' - The Id of the staging Account to retrieve extensible source servers
+-- from.
+newListExtensibleSourceServers ::
+  -- | 'stagingAccountID'
+  Prelude.Text ->
+  ListExtensibleSourceServers
+newListExtensibleSourceServers pStagingAccountID_ =
+  ListExtensibleSourceServers'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      stagingAccountID = pStagingAccountID_
+    }
+
+-- | The maximum number of extensible source servers to retrieve.
+listExtensibleSourceServers_maxResults :: Lens.Lens' ListExtensibleSourceServers (Prelude.Maybe Prelude.Natural)
+listExtensibleSourceServers_maxResults = Lens.lens (\ListExtensibleSourceServers' {maxResults} -> maxResults) (\s@ListExtensibleSourceServers' {} a -> s {maxResults = a} :: ListExtensibleSourceServers)
+
+-- | The token of the next extensible source server to retrieve.
+listExtensibleSourceServers_nextToken :: Lens.Lens' ListExtensibleSourceServers (Prelude.Maybe Prelude.Text)
+listExtensibleSourceServers_nextToken = Lens.lens (\ListExtensibleSourceServers' {nextToken} -> nextToken) (\s@ListExtensibleSourceServers' {} a -> s {nextToken = a} :: ListExtensibleSourceServers)
+
+-- | The Id of the staging Account to retrieve extensible source servers
+-- from.
+listExtensibleSourceServers_stagingAccountID :: Lens.Lens' ListExtensibleSourceServers Prelude.Text
+listExtensibleSourceServers_stagingAccountID = Lens.lens (\ListExtensibleSourceServers' {stagingAccountID} -> stagingAccountID) (\s@ListExtensibleSourceServers' {} a -> s {stagingAccountID = a} :: ListExtensibleSourceServers)
+
+instance Core.AWSPager ListExtensibleSourceServers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listExtensibleSourceServersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listExtensibleSourceServersResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listExtensibleSourceServers_nextToken
+          Lens..~ rs
+          Lens.^? listExtensibleSourceServersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListExtensibleSourceServers where
+  type
+    AWSResponse ListExtensibleSourceServers =
+      ListExtensibleSourceServersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExtensibleSourceServersResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExtensibleSourceServers where
+  hashWithSalt _salt ListExtensibleSourceServers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` stagingAccountID
+
+instance Prelude.NFData ListExtensibleSourceServers where
+  rnf ListExtensibleSourceServers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stagingAccountID
+
+instance Data.ToHeaders ListExtensibleSourceServers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListExtensibleSourceServers where
+  toJSON ListExtensibleSourceServers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("stagingAccountID" Data..= stagingAccountID)
+          ]
+      )
+
+instance Data.ToPath ListExtensibleSourceServers where
+  toPath = Prelude.const "/ListExtensibleSourceServers"
+
+instance Data.ToQuery ListExtensibleSourceServers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListExtensibleSourceServersResponse' smart constructor.
+data ListExtensibleSourceServersResponse = ListExtensibleSourceServersResponse'
+  { -- | A list of source servers on a staging Account that are extensible.
+    items :: Prelude.Maybe [StagingSourceServer],
+    -- | The token of the next extensible source server to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensibleSourceServersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'listExtensibleSourceServersResponse_items' - A list of source servers on a staging Account that are extensible.
+--
+-- 'nextToken', 'listExtensibleSourceServersResponse_nextToken' - The token of the next extensible source server to retrieve.
+--
+-- 'httpStatus', 'listExtensibleSourceServersResponse_httpStatus' - The response's http status code.
+newListExtensibleSourceServersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExtensibleSourceServersResponse
+newListExtensibleSourceServersResponse pHttpStatus_ =
+  ListExtensibleSourceServersResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of source servers on a staging Account that are extensible.
+listExtensibleSourceServersResponse_items :: Lens.Lens' ListExtensibleSourceServersResponse (Prelude.Maybe [StagingSourceServer])
+listExtensibleSourceServersResponse_items = Lens.lens (\ListExtensibleSourceServersResponse' {items} -> items) (\s@ListExtensibleSourceServersResponse' {} a -> s {items = a} :: ListExtensibleSourceServersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next extensible source server to retrieve.
+listExtensibleSourceServersResponse_nextToken :: Lens.Lens' ListExtensibleSourceServersResponse (Prelude.Maybe Prelude.Text)
+listExtensibleSourceServersResponse_nextToken = Lens.lens (\ListExtensibleSourceServersResponse' {nextToken} -> nextToken) (\s@ListExtensibleSourceServersResponse' {} a -> s {nextToken = a} :: ListExtensibleSourceServersResponse)
+
+-- | The response's http status code.
+listExtensibleSourceServersResponse_httpStatus :: Lens.Lens' ListExtensibleSourceServersResponse Prelude.Int
+listExtensibleSourceServersResponse_httpStatus = Lens.lens (\ListExtensibleSourceServersResponse' {httpStatus} -> httpStatus) (\s@ListExtensibleSourceServersResponse' {} a -> s {httpStatus = a} :: ListExtensibleSourceServersResponse)
+
+instance
+  Prelude.NFData
+    ListExtensibleSourceServersResponse
+  where
+  rnf ListExtensibleSourceServersResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/ListStagingAccounts.hs b/gen/Amazonka/DrS/ListStagingAccounts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/ListStagingAccounts.hs
@@ -0,0 +1,212 @@
+{-# 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.DrS.ListStagingAccounts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an array of staging accounts for existing extended source
+-- servers.
+--
+-- This operation returns paginated results.
+module Amazonka.DrS.ListStagingAccounts
+  ( -- * Creating a Request
+    ListStagingAccounts (..),
+    newListStagingAccounts,
+
+    -- * Request Lenses
+    listStagingAccounts_maxResults,
+    listStagingAccounts_nextToken,
+
+    -- * Destructuring the Response
+    ListStagingAccountsResponse (..),
+    newListStagingAccountsResponse,
+
+    -- * Response Lenses
+    listStagingAccountsResponse_accounts,
+    listStagingAccountsResponse_nextToken,
+    listStagingAccountsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStagingAccounts' smart constructor.
+data ListStagingAccounts = ListStagingAccounts'
+  { -- | The maximum number of staging Accounts to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token of the next staging Account to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStagingAccounts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStagingAccounts_maxResults' - The maximum number of staging Accounts to retrieve.
+--
+-- 'nextToken', 'listStagingAccounts_nextToken' - The token of the next staging Account to retrieve.
+newListStagingAccounts ::
+  ListStagingAccounts
+newListStagingAccounts =
+  ListStagingAccounts'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of staging Accounts to retrieve.
+listStagingAccounts_maxResults :: Lens.Lens' ListStagingAccounts (Prelude.Maybe Prelude.Natural)
+listStagingAccounts_maxResults = Lens.lens (\ListStagingAccounts' {maxResults} -> maxResults) (\s@ListStagingAccounts' {} a -> s {maxResults = a} :: ListStagingAccounts)
+
+-- | The token of the next staging Account to retrieve.
+listStagingAccounts_nextToken :: Lens.Lens' ListStagingAccounts (Prelude.Maybe Prelude.Text)
+listStagingAccounts_nextToken = Lens.lens (\ListStagingAccounts' {nextToken} -> nextToken) (\s@ListStagingAccounts' {} a -> s {nextToken = a} :: ListStagingAccounts)
+
+instance Core.AWSPager ListStagingAccounts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStagingAccountsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStagingAccountsResponse_accounts
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStagingAccounts_nextToken
+          Lens..~ rs
+          Lens.^? listStagingAccountsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStagingAccounts where
+  type
+    AWSResponse ListStagingAccounts =
+      ListStagingAccountsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStagingAccountsResponse'
+            Prelude.<$> (x Data..?> "accounts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStagingAccounts where
+  hashWithSalt _salt ListStagingAccounts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListStagingAccounts where
+  rnf ListStagingAccounts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListStagingAccounts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStagingAccounts where
+  toPath = Prelude.const "/ListStagingAccounts"
+
+instance Data.ToQuery ListStagingAccounts where
+  toQuery ListStagingAccounts' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListStagingAccountsResponse' smart constructor.
+data ListStagingAccountsResponse = ListStagingAccountsResponse'
+  { -- | An array of staging AWS Accounts.
+    accounts :: Prelude.Maybe [Account],
+    -- | The token of the next staging Account to retrieve.
+    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 'ListStagingAccountsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accounts', 'listStagingAccountsResponse_accounts' - An array of staging AWS Accounts.
+--
+-- 'nextToken', 'listStagingAccountsResponse_nextToken' - The token of the next staging Account to retrieve.
+--
+-- 'httpStatus', 'listStagingAccountsResponse_httpStatus' - The response's http status code.
+newListStagingAccountsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStagingAccountsResponse
+newListStagingAccountsResponse pHttpStatus_ =
+  ListStagingAccountsResponse'
+    { accounts =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of staging AWS Accounts.
+listStagingAccountsResponse_accounts :: Lens.Lens' ListStagingAccountsResponse (Prelude.Maybe [Account])
+listStagingAccountsResponse_accounts = Lens.lens (\ListStagingAccountsResponse' {accounts} -> accounts) (\s@ListStagingAccountsResponse' {} a -> s {accounts = a} :: ListStagingAccountsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token of the next staging Account to retrieve.
+listStagingAccountsResponse_nextToken :: Lens.Lens' ListStagingAccountsResponse (Prelude.Maybe Prelude.Text)
+listStagingAccountsResponse_nextToken = Lens.lens (\ListStagingAccountsResponse' {nextToken} -> nextToken) (\s@ListStagingAccountsResponse' {} a -> s {nextToken = a} :: ListStagingAccountsResponse)
+
+-- | The response's http status code.
+listStagingAccountsResponse_httpStatus :: Lens.Lens' ListStagingAccountsResponse Prelude.Int
+listStagingAccountsResponse_httpStatus = Lens.lens (\ListStagingAccountsResponse' {httpStatus} -> httpStatus) (\s@ListStagingAccountsResponse' {} a -> s {httpStatus = a} :: ListStagingAccountsResponse)
+
+instance Prelude.NFData ListStagingAccountsResponse where
+  rnf ListStagingAccountsResponse' {..} =
+    Prelude.rnf accounts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/ListTagsForResource.hs b/gen/Amazonka/DrS/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# 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.DrS.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all tags for your Elastic Disaster Recovery resources.
+module Amazonka.DrS.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The ARN of the resource whose tags should be returned.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The ARN of the resource whose tags should be returned.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The ARN of the resource whose tags should be returned.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags of the requested resource.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags of the requested resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags of the requested resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/RetryDataReplication.hs b/gen/Amazonka/DrS/RetryDataReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/RetryDataReplication.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.RetryDataReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Causes the data replication initiation sequence to begin immediately
+-- upon next Handshake for the specified Source Server ID, regardless of
+-- when the previous initiation started. This command will work only if the
+-- Source Server is stalled or is in a DISCONNECTED or STOPPED state.
+module Amazonka.DrS.RetryDataReplication
+  ( -- * Creating a Request
+    RetryDataReplication (..),
+    newRetryDataReplication,
+
+    -- * Request Lenses
+    retryDataReplication_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_lastLaunchResult,
+    sourceServer_lifeCycle,
+    sourceServer_recoveryInstanceId,
+    sourceServer_replicationDirection,
+    sourceServer_reversedDirectionSourceServerArn,
+    sourceServer_sourceCloudProperties,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_stagingArea,
+    sourceServer_tags,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRetryDataReplication' smart constructor.
+data RetryDataReplication = RetryDataReplication'
+  { -- | The ID of the Source Server whose data replication should be retried.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RetryDataReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'retryDataReplication_sourceServerID' - The ID of the Source Server whose data replication should be retried.
+newRetryDataReplication ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  RetryDataReplication
+newRetryDataReplication pSourceServerID_ =
+  RetryDataReplication'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | The ID of the Source Server whose data replication should be retried.
+retryDataReplication_sourceServerID :: Lens.Lens' RetryDataReplication Prelude.Text
+retryDataReplication_sourceServerID = Lens.lens (\RetryDataReplication' {sourceServerID} -> sourceServerID) (\s@RetryDataReplication' {} a -> s {sourceServerID = a} :: RetryDataReplication)
+
+instance Core.AWSRequest RetryDataReplication where
+  type AWSResponse RetryDataReplication = SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable RetryDataReplication where
+  hashWithSalt _salt RetryDataReplication' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData RetryDataReplication where
+  rnf RetryDataReplication' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders RetryDataReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RetryDataReplication where
+  toJSON RetryDataReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath RetryDataReplication where
+  toPath = Prelude.const "/RetryDataReplication"
+
+instance Data.ToQuery RetryDataReplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/ReverseReplication.hs b/gen/Amazonka/DrS/ReverseReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/ReverseReplication.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.ReverseReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Start replication to origin \/ target region - applies only to protected
+-- instances that originated in EC2. For recovery instances on target
+-- region - starts replication back to origin region. For failback
+-- instances on origin region - starts replication to target region to
+-- re-protect them.
+module Amazonka.DrS.ReverseReplication
+  ( -- * Creating a Request
+    ReverseReplication (..),
+    newReverseReplication,
+
+    -- * Request Lenses
+    reverseReplication_recoveryInstanceID,
+
+    -- * Destructuring the Response
+    ReverseReplicationResponse (..),
+    newReverseReplicationResponse,
+
+    -- * Response Lenses
+    reverseReplicationResponse_reversedDirectionSourceServerArn,
+    reverseReplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReverseReplication' smart constructor.
+data ReverseReplication = ReverseReplication'
+  { -- | The ID of the Recovery Instance that we want to reverse the replication
+    -- for.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReverseReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceID', 'reverseReplication_recoveryInstanceID' - The ID of the Recovery Instance that we want to reverse the replication
+-- for.
+newReverseReplication ::
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  ReverseReplication
+newReverseReplication pRecoveryInstanceID_ =
+  ReverseReplication'
+    { recoveryInstanceID =
+        pRecoveryInstanceID_
+    }
+
+-- | The ID of the Recovery Instance that we want to reverse the replication
+-- for.
+reverseReplication_recoveryInstanceID :: Lens.Lens' ReverseReplication Prelude.Text
+reverseReplication_recoveryInstanceID = Lens.lens (\ReverseReplication' {recoveryInstanceID} -> recoveryInstanceID) (\s@ReverseReplication' {} a -> s {recoveryInstanceID = a} :: ReverseReplication)
+
+instance Core.AWSRequest ReverseReplication where
+  type
+    AWSResponse ReverseReplication =
+      ReverseReplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ReverseReplicationResponse'
+            Prelude.<$> (x Data..?> "reversedDirectionSourceServerArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ReverseReplication where
+  hashWithSalt _salt ReverseReplication' {..} =
+    _salt `Prelude.hashWithSalt` recoveryInstanceID
+
+instance Prelude.NFData ReverseReplication where
+  rnf ReverseReplication' {..} =
+    Prelude.rnf recoveryInstanceID
+
+instance Data.ToHeaders ReverseReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ReverseReplication where
+  toJSON ReverseReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recoveryInstanceID" Data..= recoveryInstanceID)
+          ]
+      )
+
+instance Data.ToPath ReverseReplication where
+  toPath = Prelude.const "/ReverseReplication"
+
+instance Data.ToQuery ReverseReplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newReverseReplicationResponse' smart constructor.
+data ReverseReplicationResponse = ReverseReplicationResponse'
+  { -- | ARN of created SourceServer.
+    reversedDirectionSourceServerArn :: 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 'ReverseReplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reversedDirectionSourceServerArn', 'reverseReplicationResponse_reversedDirectionSourceServerArn' - ARN of created SourceServer.
+--
+-- 'httpStatus', 'reverseReplicationResponse_httpStatus' - The response's http status code.
+newReverseReplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReverseReplicationResponse
+newReverseReplicationResponse pHttpStatus_ =
+  ReverseReplicationResponse'
+    { reversedDirectionSourceServerArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | ARN of created SourceServer.
+reverseReplicationResponse_reversedDirectionSourceServerArn :: Lens.Lens' ReverseReplicationResponse (Prelude.Maybe Prelude.Text)
+reverseReplicationResponse_reversedDirectionSourceServerArn = Lens.lens (\ReverseReplicationResponse' {reversedDirectionSourceServerArn} -> reversedDirectionSourceServerArn) (\s@ReverseReplicationResponse' {} a -> s {reversedDirectionSourceServerArn = a} :: ReverseReplicationResponse)
+
+-- | The response's http status code.
+reverseReplicationResponse_httpStatus :: Lens.Lens' ReverseReplicationResponse Prelude.Int
+reverseReplicationResponse_httpStatus = Lens.lens (\ReverseReplicationResponse' {httpStatus} -> httpStatus) (\s@ReverseReplicationResponse' {} a -> s {httpStatus = a} :: ReverseReplicationResponse)
+
+instance Prelude.NFData ReverseReplicationResponse where
+  rnf ReverseReplicationResponse' {..} =
+    Prelude.rnf reversedDirectionSourceServerArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/StartFailbackLaunch.hs b/gen/Amazonka/DrS/StartFailbackLaunch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/StartFailbackLaunch.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.StartFailbackLaunch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates a Job for launching the machine that is being failed back to
+-- from the specified Recovery Instance. This will run conversion on the
+-- failback client and will reboot your machine, thus completing the
+-- failback process.
+module Amazonka.DrS.StartFailbackLaunch
+  ( -- * Creating a Request
+    StartFailbackLaunch (..),
+    newStartFailbackLaunch,
+
+    -- * Request Lenses
+    startFailbackLaunch_tags,
+    startFailbackLaunch_recoveryInstanceIDs,
+
+    -- * Destructuring the Response
+    StartFailbackLaunchResponse (..),
+    newStartFailbackLaunchResponse,
+
+    -- * Response Lenses
+    startFailbackLaunchResponse_job,
+    startFailbackLaunchResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartFailbackLaunch' smart constructor.
+data StartFailbackLaunch = StartFailbackLaunch'
+  { -- | The tags to be associated with the failback launch Job.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The IDs of the Recovery Instance whose failback launch we want to
+    -- request.
+    recoveryInstanceIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFailbackLaunch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startFailbackLaunch_tags' - The tags to be associated with the failback launch Job.
+--
+-- 'recoveryInstanceIDs', 'startFailbackLaunch_recoveryInstanceIDs' - The IDs of the Recovery Instance whose failback launch we want to
+-- request.
+newStartFailbackLaunch ::
+  -- | 'recoveryInstanceIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  StartFailbackLaunch
+newStartFailbackLaunch pRecoveryInstanceIDs_ =
+  StartFailbackLaunch'
+    { tags = Prelude.Nothing,
+      recoveryInstanceIDs =
+        Lens.coerced Lens.# pRecoveryInstanceIDs_
+    }
+
+-- | The tags to be associated with the failback launch Job.
+startFailbackLaunch_tags :: Lens.Lens' StartFailbackLaunch (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startFailbackLaunch_tags = Lens.lens (\StartFailbackLaunch' {tags} -> tags) (\s@StartFailbackLaunch' {} a -> s {tags = a} :: StartFailbackLaunch) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The IDs of the Recovery Instance whose failback launch we want to
+-- request.
+startFailbackLaunch_recoveryInstanceIDs :: Lens.Lens' StartFailbackLaunch (Prelude.NonEmpty Prelude.Text)
+startFailbackLaunch_recoveryInstanceIDs = Lens.lens (\StartFailbackLaunch' {recoveryInstanceIDs} -> recoveryInstanceIDs) (\s@StartFailbackLaunch' {} a -> s {recoveryInstanceIDs = a} :: StartFailbackLaunch) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartFailbackLaunch where
+  type
+    AWSResponse StartFailbackLaunch =
+      StartFailbackLaunchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartFailbackLaunchResponse'
+            Prelude.<$> (x Data..?> "job")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartFailbackLaunch where
+  hashWithSalt _salt StartFailbackLaunch' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` recoveryInstanceIDs
+
+instance Prelude.NFData StartFailbackLaunch where
+  rnf StartFailbackLaunch' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf recoveryInstanceIDs
+
+instance Data.ToHeaders StartFailbackLaunch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartFailbackLaunch where
+  toJSON StartFailbackLaunch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("recoveryInstanceIDs" Data..= recoveryInstanceIDs)
+          ]
+      )
+
+instance Data.ToPath StartFailbackLaunch where
+  toPath = Prelude.const "/StartFailbackLaunch"
+
+instance Data.ToQuery StartFailbackLaunch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartFailbackLaunchResponse' smart constructor.
+data StartFailbackLaunchResponse = StartFailbackLaunchResponse'
+  { -- | The failback launch Job.
+    job :: Prelude.Maybe Job,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFailbackLaunchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'job', 'startFailbackLaunchResponse_job' - The failback launch Job.
+--
+-- 'httpStatus', 'startFailbackLaunchResponse_httpStatus' - The response's http status code.
+newStartFailbackLaunchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartFailbackLaunchResponse
+newStartFailbackLaunchResponse pHttpStatus_ =
+  StartFailbackLaunchResponse'
+    { job = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The failback launch Job.
+startFailbackLaunchResponse_job :: Lens.Lens' StartFailbackLaunchResponse (Prelude.Maybe Job)
+startFailbackLaunchResponse_job = Lens.lens (\StartFailbackLaunchResponse' {job} -> job) (\s@StartFailbackLaunchResponse' {} a -> s {job = a} :: StartFailbackLaunchResponse)
+
+-- | The response's http status code.
+startFailbackLaunchResponse_httpStatus :: Lens.Lens' StartFailbackLaunchResponse Prelude.Int
+startFailbackLaunchResponse_httpStatus = Lens.lens (\StartFailbackLaunchResponse' {httpStatus} -> httpStatus) (\s@StartFailbackLaunchResponse' {} a -> s {httpStatus = a} :: StartFailbackLaunchResponse)
+
+instance Prelude.NFData StartFailbackLaunchResponse where
+  rnf StartFailbackLaunchResponse' {..} =
+    Prelude.rnf job
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/StartRecovery.hs b/gen/Amazonka/DrS/StartRecovery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/StartRecovery.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.StartRecovery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launches Recovery Instances for the specified Source Servers. For each
+-- Source Server you may choose a point in time snapshot to launch from, or
+-- use an on demand snapshot.
+module Amazonka.DrS.StartRecovery
+  ( -- * Creating a Request
+    StartRecovery (..),
+    newStartRecovery,
+
+    -- * Request Lenses
+    startRecovery_isDrill,
+    startRecovery_tags,
+    startRecovery_sourceServers,
+
+    -- * Destructuring the Response
+    StartRecoveryResponse (..),
+    newStartRecoveryResponse,
+
+    -- * Response Lenses
+    startRecoveryResponse_job,
+    startRecoveryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartRecovery' smart constructor.
+data StartRecovery = StartRecovery'
+  { -- | Whether this Source Server Recovery operation is a drill or not.
+    isDrill :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to be associated with the Recovery Job.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The Source Servers that we want to start a Recovery Job for.
+    sourceServers :: Prelude.NonEmpty StartRecoveryRequestSourceServer
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartRecovery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isDrill', 'startRecovery_isDrill' - Whether this Source Server Recovery operation is a drill or not.
+--
+-- 'tags', 'startRecovery_tags' - The tags to be associated with the Recovery Job.
+--
+-- 'sourceServers', 'startRecovery_sourceServers' - The Source Servers that we want to start a Recovery Job for.
+newStartRecovery ::
+  -- | 'sourceServers'
+  Prelude.NonEmpty StartRecoveryRequestSourceServer ->
+  StartRecovery
+newStartRecovery pSourceServers_ =
+  StartRecovery'
+    { isDrill = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      sourceServers = Lens.coerced Lens.# pSourceServers_
+    }
+
+-- | Whether this Source Server Recovery operation is a drill or not.
+startRecovery_isDrill :: Lens.Lens' StartRecovery (Prelude.Maybe Prelude.Bool)
+startRecovery_isDrill = Lens.lens (\StartRecovery' {isDrill} -> isDrill) (\s@StartRecovery' {} a -> s {isDrill = a} :: StartRecovery)
+
+-- | The tags to be associated with the Recovery Job.
+startRecovery_tags :: Lens.Lens' StartRecovery (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startRecovery_tags = Lens.lens (\StartRecovery' {tags} -> tags) (\s@StartRecovery' {} a -> s {tags = a} :: StartRecovery) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The Source Servers that we want to start a Recovery Job for.
+startRecovery_sourceServers :: Lens.Lens' StartRecovery (Prelude.NonEmpty StartRecoveryRequestSourceServer)
+startRecovery_sourceServers = Lens.lens (\StartRecovery' {sourceServers} -> sourceServers) (\s@StartRecovery' {} a -> s {sourceServers = a} :: StartRecovery) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartRecovery where
+  type
+    AWSResponse StartRecovery =
+      StartRecoveryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartRecoveryResponse'
+            Prelude.<$> (x Data..?> "job")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartRecovery where
+  hashWithSalt _salt StartRecovery' {..} =
+    _salt
+      `Prelude.hashWithSalt` isDrill
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceServers
+
+instance Prelude.NFData StartRecovery where
+  rnf StartRecovery' {..} =
+    Prelude.rnf isDrill
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceServers
+
+instance Data.ToHeaders StartRecovery where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartRecovery where
+  toJSON StartRecovery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("isDrill" Data..=) Prelude.<$> isDrill,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("sourceServers" Data..= sourceServers)
+          ]
+      )
+
+instance Data.ToPath StartRecovery where
+  toPath = Prelude.const "/StartRecovery"
+
+instance Data.ToQuery StartRecovery where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartRecoveryResponse' smart constructor.
+data StartRecoveryResponse = StartRecoveryResponse'
+  { -- | The Recovery Job.
+    job :: Prelude.Maybe Job,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartRecoveryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'job', 'startRecoveryResponse_job' - The Recovery Job.
+--
+-- 'httpStatus', 'startRecoveryResponse_httpStatus' - The response's http status code.
+newStartRecoveryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartRecoveryResponse
+newStartRecoveryResponse pHttpStatus_ =
+  StartRecoveryResponse'
+    { job = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Recovery Job.
+startRecoveryResponse_job :: Lens.Lens' StartRecoveryResponse (Prelude.Maybe Job)
+startRecoveryResponse_job = Lens.lens (\StartRecoveryResponse' {job} -> job) (\s@StartRecoveryResponse' {} a -> s {job = a} :: StartRecoveryResponse)
+
+-- | The response's http status code.
+startRecoveryResponse_httpStatus :: Lens.Lens' StartRecoveryResponse Prelude.Int
+startRecoveryResponse_httpStatus = Lens.lens (\StartRecoveryResponse' {httpStatus} -> httpStatus) (\s@StartRecoveryResponse' {} a -> s {httpStatus = a} :: StartRecoveryResponse)
+
+instance Prelude.NFData StartRecoveryResponse where
+  rnf StartRecoveryResponse' {..} =
+    Prelude.rnf job
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/StartReplication.hs b/gen/Amazonka/DrS/StartReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/StartReplication.hs
@@ -0,0 +1,171 @@
+{-# 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.DrS.StartReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts replication for a stopped Source Server. This action would make
+-- the Source Server protected again and restart billing for it.
+module Amazonka.DrS.StartReplication
+  ( -- * Creating a Request
+    StartReplication (..),
+    newStartReplication,
+
+    -- * Request Lenses
+    startReplication_sourceServerID,
+
+    -- * Destructuring the Response
+    StartReplicationResponse (..),
+    newStartReplicationResponse,
+
+    -- * Response Lenses
+    startReplicationResponse_sourceServer,
+    startReplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartReplication' smart constructor.
+data StartReplication = StartReplication'
+  { -- | The ID of the Source Server to start replication for.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'startReplication_sourceServerID' - The ID of the Source Server to start replication for.
+newStartReplication ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  StartReplication
+newStartReplication pSourceServerID_ =
+  StartReplication'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | The ID of the Source Server to start replication for.
+startReplication_sourceServerID :: Lens.Lens' StartReplication Prelude.Text
+startReplication_sourceServerID = Lens.lens (\StartReplication' {sourceServerID} -> sourceServerID) (\s@StartReplication' {} a -> s {sourceServerID = a} :: StartReplication)
+
+instance Core.AWSRequest StartReplication where
+  type
+    AWSResponse StartReplication =
+      StartReplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartReplicationResponse'
+            Prelude.<$> (x Data..?> "sourceServer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartReplication where
+  hashWithSalt _salt StartReplication' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData StartReplication where
+  rnf StartReplication' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders StartReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartReplication where
+  toJSON StartReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath StartReplication where
+  toPath = Prelude.const "/StartReplication"
+
+instance Data.ToQuery StartReplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartReplicationResponse' smart constructor.
+data StartReplicationResponse = StartReplicationResponse'
+  { -- | The Source Server that this action was targeted on.
+    sourceServer :: Prelude.Maybe SourceServer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartReplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServer', 'startReplicationResponse_sourceServer' - The Source Server that this action was targeted on.
+--
+-- 'httpStatus', 'startReplicationResponse_httpStatus' - The response's http status code.
+newStartReplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartReplicationResponse
+newStartReplicationResponse pHttpStatus_ =
+  StartReplicationResponse'
+    { sourceServer =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Source Server that this action was targeted on.
+startReplicationResponse_sourceServer :: Lens.Lens' StartReplicationResponse (Prelude.Maybe SourceServer)
+startReplicationResponse_sourceServer = Lens.lens (\StartReplicationResponse' {sourceServer} -> sourceServer) (\s@StartReplicationResponse' {} a -> s {sourceServer = a} :: StartReplicationResponse)
+
+-- | The response's http status code.
+startReplicationResponse_httpStatus :: Lens.Lens' StartReplicationResponse Prelude.Int
+startReplicationResponse_httpStatus = Lens.lens (\StartReplicationResponse' {httpStatus} -> httpStatus) (\s@StartReplicationResponse' {} a -> s {httpStatus = a} :: StartReplicationResponse)
+
+instance Prelude.NFData StartReplicationResponse where
+  rnf StartReplicationResponse' {..} =
+    Prelude.rnf sourceServer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/StopFailback.hs b/gen/Amazonka/DrS/StopFailback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/StopFailback.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.StopFailback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops the failback process for a specified Recovery Instance. This
+-- changes the Failback State of the Recovery Instance back to
+-- FAILBACK_NOT_STARTED.
+module Amazonka.DrS.StopFailback
+  ( -- * Creating a Request
+    StopFailback (..),
+    newStopFailback,
+
+    -- * Request Lenses
+    stopFailback_recoveryInstanceID,
+
+    -- * Destructuring the Response
+    StopFailbackResponse (..),
+    newStopFailbackResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopFailback' smart constructor.
+data StopFailback = StopFailback'
+  { -- | The ID of the Recovery Instance we want to stop failback for.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopFailback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceID', 'stopFailback_recoveryInstanceID' - The ID of the Recovery Instance we want to stop failback for.
+newStopFailback ::
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  StopFailback
+newStopFailback pRecoveryInstanceID_ =
+  StopFailback'
+    { recoveryInstanceID =
+        pRecoveryInstanceID_
+    }
+
+-- | The ID of the Recovery Instance we want to stop failback for.
+stopFailback_recoveryInstanceID :: Lens.Lens' StopFailback Prelude.Text
+stopFailback_recoveryInstanceID = Lens.lens (\StopFailback' {recoveryInstanceID} -> recoveryInstanceID) (\s@StopFailback' {} a -> s {recoveryInstanceID = a} :: StopFailback)
+
+instance Core.AWSRequest StopFailback where
+  type AWSResponse StopFailback = StopFailbackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull StopFailbackResponse'
+
+instance Prelude.Hashable StopFailback where
+  hashWithSalt _salt StopFailback' {..} =
+    _salt `Prelude.hashWithSalt` recoveryInstanceID
+
+instance Prelude.NFData StopFailback where
+  rnf StopFailback' {..} =
+    Prelude.rnf recoveryInstanceID
+
+instance Data.ToHeaders StopFailback where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopFailback where
+  toJSON StopFailback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recoveryInstanceID" Data..= recoveryInstanceID)
+          ]
+      )
+
+instance Data.ToPath StopFailback where
+  toPath = Prelude.const "/StopFailback"
+
+instance Data.ToQuery StopFailback where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopFailbackResponse' smart constructor.
+data StopFailbackResponse = StopFailbackResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopFailbackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newStopFailbackResponse ::
+  StopFailbackResponse
+newStopFailbackResponse = StopFailbackResponse'
+
+instance Prelude.NFData StopFailbackResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DrS/StopReplication.hs b/gen/Amazonka/DrS/StopReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/StopReplication.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.StopReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops replication for a Source Server. This action would make the Source
+-- Server unprotected, delete its existing snapshots and stop billing for
+-- it.
+module Amazonka.DrS.StopReplication
+  ( -- * Creating a Request
+    StopReplication (..),
+    newStopReplication,
+
+    -- * Request Lenses
+    stopReplication_sourceServerID,
+
+    -- * Destructuring the Response
+    StopReplicationResponse (..),
+    newStopReplicationResponse,
+
+    -- * Response Lenses
+    stopReplicationResponse_sourceServer,
+    stopReplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopReplication' smart constructor.
+data StopReplication = StopReplication'
+  { -- | The ID of the Source Server to stop replication for.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServerID', 'stopReplication_sourceServerID' - The ID of the Source Server to stop replication for.
+newStopReplication ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  StopReplication
+newStopReplication pSourceServerID_ =
+  StopReplication' {sourceServerID = pSourceServerID_}
+
+-- | The ID of the Source Server to stop replication for.
+stopReplication_sourceServerID :: Lens.Lens' StopReplication Prelude.Text
+stopReplication_sourceServerID = Lens.lens (\StopReplication' {sourceServerID} -> sourceServerID) (\s@StopReplication' {} a -> s {sourceServerID = a} :: StopReplication)
+
+instance Core.AWSRequest StopReplication where
+  type
+    AWSResponse StopReplication =
+      StopReplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopReplicationResponse'
+            Prelude.<$> (x Data..?> "sourceServer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopReplication where
+  hashWithSalt _salt StopReplication' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData StopReplication where
+  rnf StopReplication' {..} = Prelude.rnf sourceServerID
+
+instance Data.ToHeaders StopReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopReplication where
+  toJSON StopReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath StopReplication where
+  toPath = Prelude.const "/StopReplication"
+
+instance Data.ToQuery StopReplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopReplicationResponse' smart constructor.
+data StopReplicationResponse = StopReplicationResponse'
+  { -- | The Source Server that this action was targeted on.
+    sourceServer :: Prelude.Maybe SourceServer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopReplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceServer', 'stopReplicationResponse_sourceServer' - The Source Server that this action was targeted on.
+--
+-- 'httpStatus', 'stopReplicationResponse_httpStatus' - The response's http status code.
+newStopReplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopReplicationResponse
+newStopReplicationResponse pHttpStatus_ =
+  StopReplicationResponse'
+    { sourceServer =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Source Server that this action was targeted on.
+stopReplicationResponse_sourceServer :: Lens.Lens' StopReplicationResponse (Prelude.Maybe SourceServer)
+stopReplicationResponse_sourceServer = Lens.lens (\StopReplicationResponse' {sourceServer} -> sourceServer) (\s@StopReplicationResponse' {} a -> s {sourceServer = a} :: StopReplicationResponse)
+
+-- | The response's http status code.
+stopReplicationResponse_httpStatus :: Lens.Lens' StopReplicationResponse Prelude.Int
+stopReplicationResponse_httpStatus = Lens.lens (\StopReplicationResponse' {httpStatus} -> httpStatus) (\s@StopReplicationResponse' {} a -> s {httpStatus = a} :: StopReplicationResponse)
+
+instance Prelude.NFData StopReplicationResponse where
+  rnf StopReplicationResponse' {..} =
+    Prelude.rnf sourceServer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/TagResource.hs b/gen/Amazonka/DrS/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/TagResource.hs
@@ -0,0 +1,146 @@
+{-# 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.DrS.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 or overwrites only the specified tags for the specified Elastic
+-- Disaster Recovery resource or resources. When you specify an existing
+-- tag key, the value is overwritten with the new value. Each resource can
+-- have a maximum of 50 tags. Each tag consists of a key and optional
+-- value.
+module Amazonka.DrS.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | ARN of the resource for which tags are to be added or updated.
+    resourceArn :: Prelude.Text,
+    -- | Array of tags to be added or updated.
+    tags :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - ARN of the resource for which tags are to be added or updated.
+--
+-- 'tags', 'tagResource_tags' - Array of tags to be added or updated.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | ARN of the resource for which tags are to be added or updated.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Array of tags to be added or updated.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull TagResourceResponse'
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "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'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DrS/TerminateRecoveryInstances.hs b/gen/Amazonka/DrS/TerminateRecoveryInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/TerminateRecoveryInstances.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.TerminateRecoveryInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates a Job for terminating the EC2 resources associated with the
+-- specified Recovery Instances, and then will delete the Recovery
+-- Instances from the Elastic Disaster Recovery service.
+module Amazonka.DrS.TerminateRecoveryInstances
+  ( -- * Creating a Request
+    TerminateRecoveryInstances (..),
+    newTerminateRecoveryInstances,
+
+    -- * Request Lenses
+    terminateRecoveryInstances_recoveryInstanceIDs,
+
+    -- * Destructuring the Response
+    TerminateRecoveryInstancesResponse (..),
+    newTerminateRecoveryInstancesResponse,
+
+    -- * Response Lenses
+    terminateRecoveryInstancesResponse_job,
+    terminateRecoveryInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTerminateRecoveryInstances' smart constructor.
+data TerminateRecoveryInstances = TerminateRecoveryInstances'
+  { -- | The IDs of the Recovery Instances that should be terminated.
+    recoveryInstanceIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateRecoveryInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceIDs', 'terminateRecoveryInstances_recoveryInstanceIDs' - The IDs of the Recovery Instances that should be terminated.
+newTerminateRecoveryInstances ::
+  -- | 'recoveryInstanceIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  TerminateRecoveryInstances
+newTerminateRecoveryInstances pRecoveryInstanceIDs_ =
+  TerminateRecoveryInstances'
+    { recoveryInstanceIDs =
+        Lens.coerced Lens.# pRecoveryInstanceIDs_
+    }
+
+-- | The IDs of the Recovery Instances that should be terminated.
+terminateRecoveryInstances_recoveryInstanceIDs :: Lens.Lens' TerminateRecoveryInstances (Prelude.NonEmpty Prelude.Text)
+terminateRecoveryInstances_recoveryInstanceIDs = Lens.lens (\TerminateRecoveryInstances' {recoveryInstanceIDs} -> recoveryInstanceIDs) (\s@TerminateRecoveryInstances' {} a -> s {recoveryInstanceIDs = a} :: TerminateRecoveryInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TerminateRecoveryInstances where
+  type
+    AWSResponse TerminateRecoveryInstances =
+      TerminateRecoveryInstancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TerminateRecoveryInstancesResponse'
+            Prelude.<$> (x Data..?> "job")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TerminateRecoveryInstances where
+  hashWithSalt _salt TerminateRecoveryInstances' {..} =
+    _salt `Prelude.hashWithSalt` recoveryInstanceIDs
+
+instance Prelude.NFData TerminateRecoveryInstances where
+  rnf TerminateRecoveryInstances' {..} =
+    Prelude.rnf recoveryInstanceIDs
+
+instance Data.ToHeaders TerminateRecoveryInstances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TerminateRecoveryInstances where
+  toJSON TerminateRecoveryInstances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recoveryInstanceIDs" Data..= recoveryInstanceIDs)
+          ]
+      )
+
+instance Data.ToPath TerminateRecoveryInstances where
+  toPath = Prelude.const "/TerminateRecoveryInstances"
+
+instance Data.ToQuery TerminateRecoveryInstances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTerminateRecoveryInstancesResponse' smart constructor.
+data TerminateRecoveryInstancesResponse = TerminateRecoveryInstancesResponse'
+  { -- | The Job for terminating the Recovery Instances.
+    job :: Prelude.Maybe Job,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateRecoveryInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'job', 'terminateRecoveryInstancesResponse_job' - The Job for terminating the Recovery Instances.
+--
+-- 'httpStatus', 'terminateRecoveryInstancesResponse_httpStatus' - The response's http status code.
+newTerminateRecoveryInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TerminateRecoveryInstancesResponse
+newTerminateRecoveryInstancesResponse pHttpStatus_ =
+  TerminateRecoveryInstancesResponse'
+    { job =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Job for terminating the Recovery Instances.
+terminateRecoveryInstancesResponse_job :: Lens.Lens' TerminateRecoveryInstancesResponse (Prelude.Maybe Job)
+terminateRecoveryInstancesResponse_job = Lens.lens (\TerminateRecoveryInstancesResponse' {job} -> job) (\s@TerminateRecoveryInstancesResponse' {} a -> s {job = a} :: TerminateRecoveryInstancesResponse)
+
+-- | The response's http status code.
+terminateRecoveryInstancesResponse_httpStatus :: Lens.Lens' TerminateRecoveryInstancesResponse Prelude.Int
+terminateRecoveryInstancesResponse_httpStatus = Lens.lens (\TerminateRecoveryInstancesResponse' {httpStatus} -> httpStatus) (\s@TerminateRecoveryInstancesResponse' {} a -> s {httpStatus = a} :: TerminateRecoveryInstancesResponse)
+
+instance
+  Prelude.NFData
+    TerminateRecoveryInstancesResponse
+  where
+  rnf TerminateRecoveryInstancesResponse' {..} =
+    Prelude.rnf job
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DrS/Types.hs b/gen/Amazonka/DrS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types.hs
@@ -0,0 +1,727 @@
+{-# 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.DrS.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.DrS.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _UninitializedAccountException,
+    _ValidationException,
+
+    -- * DataReplicationErrorString
+    DataReplicationErrorString (..),
+
+    -- * DataReplicationInitiationStepName
+    DataReplicationInitiationStepName (..),
+
+    -- * DataReplicationInitiationStepStatus
+    DataReplicationInitiationStepStatus (..),
+
+    -- * DataReplicationState
+    DataReplicationState (..),
+
+    -- * EC2InstanceState
+    EC2InstanceState (..),
+
+    -- * ExtensionStatus
+    ExtensionStatus (..),
+
+    -- * FailbackLaunchType
+    FailbackLaunchType (..),
+
+    -- * FailbackReplicationError
+    FailbackReplicationError (..),
+
+    -- * FailbackState
+    FailbackState (..),
+
+    -- * InitiatedBy
+    InitiatedBy (..),
+
+    -- * JobLogEvent
+    JobLogEvent (..),
+
+    -- * JobStatus
+    JobStatus (..),
+
+    -- * JobType
+    JobType (..),
+
+    -- * LastLaunchResult
+    LastLaunchResult (..),
+
+    -- * LastLaunchType
+    LastLaunchType (..),
+
+    -- * LaunchDisposition
+    LaunchDisposition (..),
+
+    -- * LaunchStatus
+    LaunchStatus (..),
+
+    -- * OriginEnvironment
+    OriginEnvironment (..),
+
+    -- * PITPolicyRuleUnits
+    PITPolicyRuleUnits (..),
+
+    -- * RecoveryInstanceDataReplicationInitiationStepName
+    RecoveryInstanceDataReplicationInitiationStepName (..),
+
+    -- * RecoveryInstanceDataReplicationInitiationStepStatus
+    RecoveryInstanceDataReplicationInitiationStepStatus (..),
+
+    -- * RecoveryInstanceDataReplicationState
+    RecoveryInstanceDataReplicationState (..),
+
+    -- * RecoverySnapshotsOrder
+    RecoverySnapshotsOrder (..),
+
+    -- * ReplicationConfigurationDataPlaneRouting
+    ReplicationConfigurationDataPlaneRouting (..),
+
+    -- * ReplicationConfigurationDefaultLargeStagingDiskType
+    ReplicationConfigurationDefaultLargeStagingDiskType (..),
+
+    -- * ReplicationConfigurationEbsEncryption
+    ReplicationConfigurationEbsEncryption (..),
+
+    -- * ReplicationConfigurationReplicatedDiskStagingDiskType
+    ReplicationConfigurationReplicatedDiskStagingDiskType (..),
+
+    -- * ReplicationDirection
+    ReplicationDirection (..),
+
+    -- * TargetInstanceTypeRightSizingMethod
+    TargetInstanceTypeRightSizingMethod (..),
+
+    -- * Account
+    Account (..),
+    newAccount,
+    account_accountID,
+
+    -- * CPU
+    CPU (..),
+    newCPU,
+    cpu_cores,
+    cpu_modelName,
+
+    -- * ConversionProperties
+    ConversionProperties (..),
+    newConversionProperties,
+    conversionProperties_dataTimestamp,
+    conversionProperties_forceUefi,
+    conversionProperties_rootVolumeName,
+    conversionProperties_volumeToConversionMap,
+    conversionProperties_volumeToVolumeSize,
+
+    -- * DataReplicationError
+    DataReplicationError (..),
+    newDataReplicationError,
+    dataReplicationError_error,
+    dataReplicationError_rawError,
+
+    -- * DataReplicationInfo
+    DataReplicationInfo (..),
+    newDataReplicationInfo,
+    dataReplicationInfo_dataReplicationError,
+    dataReplicationInfo_dataReplicationInitiation,
+    dataReplicationInfo_dataReplicationState,
+    dataReplicationInfo_etaDateTime,
+    dataReplicationInfo_lagDuration,
+    dataReplicationInfo_replicatedDisks,
+
+    -- * DataReplicationInfoReplicatedDisk
+    DataReplicationInfoReplicatedDisk (..),
+    newDataReplicationInfoReplicatedDisk,
+    dataReplicationInfoReplicatedDisk_backloggedStorageBytes,
+    dataReplicationInfoReplicatedDisk_deviceName,
+    dataReplicationInfoReplicatedDisk_replicatedStorageBytes,
+    dataReplicationInfoReplicatedDisk_rescannedStorageBytes,
+    dataReplicationInfoReplicatedDisk_totalStorageBytes,
+
+    -- * DataReplicationInitiation
+    DataReplicationInitiation (..),
+    newDataReplicationInitiation,
+    dataReplicationInitiation_nextAttemptDateTime,
+    dataReplicationInitiation_startDateTime,
+    dataReplicationInitiation_steps,
+
+    -- * DataReplicationInitiationStep
+    DataReplicationInitiationStep (..),
+    newDataReplicationInitiationStep,
+    dataReplicationInitiationStep_name,
+    dataReplicationInitiationStep_status,
+
+    -- * DescribeJobsRequestFilters
+    DescribeJobsRequestFilters (..),
+    newDescribeJobsRequestFilters,
+    describeJobsRequestFilters_fromDate,
+    describeJobsRequestFilters_jobIDs,
+    describeJobsRequestFilters_toDate,
+
+    -- * DescribeRecoveryInstancesRequestFilters
+    DescribeRecoveryInstancesRequestFilters (..),
+    newDescribeRecoveryInstancesRequestFilters,
+    describeRecoveryInstancesRequestFilters_recoveryInstanceIDs,
+    describeRecoveryInstancesRequestFilters_sourceServerIDs,
+
+    -- * DescribeRecoverySnapshotsRequestFilters
+    DescribeRecoverySnapshotsRequestFilters (..),
+    newDescribeRecoverySnapshotsRequestFilters,
+    describeRecoverySnapshotsRequestFilters_fromDateTime,
+    describeRecoverySnapshotsRequestFilters_toDateTime,
+
+    -- * DescribeSourceServersRequestFilters
+    DescribeSourceServersRequestFilters (..),
+    newDescribeSourceServersRequestFilters,
+    describeSourceServersRequestFilters_hardwareId,
+    describeSourceServersRequestFilters_sourceServerIDs,
+    describeSourceServersRequestFilters_stagingAccountIDs,
+
+    -- * Disk
+    Disk (..),
+    newDisk,
+    disk_bytes,
+    disk_deviceName,
+
+    -- * IdentificationHints
+    IdentificationHints (..),
+    newIdentificationHints,
+    identificationHints_awsInstanceID,
+    identificationHints_fqdn,
+    identificationHints_hostname,
+    identificationHints_vmWareUuid,
+
+    -- * Job
+    Job (..),
+    newJob,
+    job_arn,
+    job_creationDateTime,
+    job_endDateTime,
+    job_initiatedBy,
+    job_participatingServers,
+    job_status,
+    job_tags,
+    job_type,
+    job_jobID,
+
+    -- * JobLog
+    JobLog (..),
+    newJobLog,
+    jobLog_event,
+    jobLog_eventData,
+    jobLog_logDateTime,
+
+    -- * JobLogEventData
+    JobLogEventData (..),
+    newJobLogEventData,
+    jobLogEventData_conversionProperties,
+    jobLogEventData_conversionServerID,
+    jobLogEventData_rawError,
+    jobLogEventData_sourceServerID,
+    jobLogEventData_targetInstanceID,
+
+    -- * LaunchConfiguration
+    LaunchConfiguration (..),
+    newLaunchConfiguration,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_name,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- * Licensing
+    Licensing (..),
+    newLicensing,
+    licensing_osByol,
+
+    -- * LifeCycle
+    LifeCycle (..),
+    newLifeCycle,
+    lifeCycle_addedToServiceDateTime,
+    lifeCycle_elapsedReplicationDuration,
+    lifeCycle_firstByteDateTime,
+    lifeCycle_lastLaunch,
+    lifeCycle_lastSeenByServiceDateTime,
+
+    -- * LifeCycleLastLaunch
+    LifeCycleLastLaunch (..),
+    newLifeCycleLastLaunch,
+    lifeCycleLastLaunch_initiated,
+
+    -- * LifeCycleLastLaunchInitiated
+    LifeCycleLastLaunchInitiated (..),
+    newLifeCycleLastLaunchInitiated,
+    lifeCycleLastLaunchInitiated_apiCallDateTime,
+    lifeCycleLastLaunchInitiated_jobID,
+    lifeCycleLastLaunchInitiated_type,
+
+    -- * NetworkInterface
+    NetworkInterface (..),
+    newNetworkInterface,
+    networkInterface_ips,
+    networkInterface_isPrimary,
+    networkInterface_macAddress,
+
+    -- * OS
+    OS (..),
+    newOS,
+    os_fullString,
+
+    -- * PITPolicyRule
+    PITPolicyRule (..),
+    newPITPolicyRule,
+    pITPolicyRule_enabled,
+    pITPolicyRule_ruleID,
+    pITPolicyRule_interval,
+    pITPolicyRule_retentionDuration,
+    pITPolicyRule_units,
+
+    -- * ParticipatingServer
+    ParticipatingServer (..),
+    newParticipatingServer,
+    participatingServer_launchStatus,
+    participatingServer_recoveryInstanceID,
+    participatingServer_sourceServerID,
+
+    -- * RecoveryInstance
+    RecoveryInstance (..),
+    newRecoveryInstance,
+    recoveryInstance_arn,
+    recoveryInstance_dataReplicationInfo,
+    recoveryInstance_ec2InstanceID,
+    recoveryInstance_ec2InstanceState,
+    recoveryInstance_failback,
+    recoveryInstance_isDrill,
+    recoveryInstance_jobID,
+    recoveryInstance_originEnvironment,
+    recoveryInstance_pointInTimeSnapshotDateTime,
+    recoveryInstance_recoveryInstanceID,
+    recoveryInstance_recoveryInstanceProperties,
+    recoveryInstance_sourceServerID,
+    recoveryInstance_tags,
+
+    -- * RecoveryInstanceDataReplicationError
+    RecoveryInstanceDataReplicationError (..),
+    newRecoveryInstanceDataReplicationError,
+    recoveryInstanceDataReplicationError_error,
+    recoveryInstanceDataReplicationError_rawError,
+
+    -- * RecoveryInstanceDataReplicationInfo
+    RecoveryInstanceDataReplicationInfo (..),
+    newRecoveryInstanceDataReplicationInfo,
+    recoveryInstanceDataReplicationInfo_dataReplicationError,
+    recoveryInstanceDataReplicationInfo_dataReplicationInitiation,
+    recoveryInstanceDataReplicationInfo_dataReplicationState,
+    recoveryInstanceDataReplicationInfo_etaDateTime,
+    recoveryInstanceDataReplicationInfo_lagDuration,
+    recoveryInstanceDataReplicationInfo_replicatedDisks,
+
+    -- * RecoveryInstanceDataReplicationInfoReplicatedDisk
+    RecoveryInstanceDataReplicationInfoReplicatedDisk (..),
+    newRecoveryInstanceDataReplicationInfoReplicatedDisk,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_backloggedStorageBytes,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_deviceName,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_replicatedStorageBytes,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_rescannedStorageBytes,
+    recoveryInstanceDataReplicationInfoReplicatedDisk_totalStorageBytes,
+
+    -- * RecoveryInstanceDataReplicationInitiation
+    RecoveryInstanceDataReplicationInitiation (..),
+    newRecoveryInstanceDataReplicationInitiation,
+    recoveryInstanceDataReplicationInitiation_startDateTime,
+    recoveryInstanceDataReplicationInitiation_steps,
+
+    -- * RecoveryInstanceDataReplicationInitiationStep
+    RecoveryInstanceDataReplicationInitiationStep (..),
+    newRecoveryInstanceDataReplicationInitiationStep,
+    recoveryInstanceDataReplicationInitiationStep_name,
+    recoveryInstanceDataReplicationInitiationStep_status,
+
+    -- * RecoveryInstanceDisk
+    RecoveryInstanceDisk (..),
+    newRecoveryInstanceDisk,
+    recoveryInstanceDisk_bytes,
+    recoveryInstanceDisk_ebsVolumeID,
+    recoveryInstanceDisk_internalDeviceName,
+
+    -- * RecoveryInstanceFailback
+    RecoveryInstanceFailback (..),
+    newRecoveryInstanceFailback,
+    recoveryInstanceFailback_agentLastSeenByServiceDateTime,
+    recoveryInstanceFailback_elapsedReplicationDuration,
+    recoveryInstanceFailback_failbackClientID,
+    recoveryInstanceFailback_failbackClientLastSeenByServiceDateTime,
+    recoveryInstanceFailback_failbackInitiationTime,
+    recoveryInstanceFailback_failbackJobID,
+    recoveryInstanceFailback_failbackLaunchType,
+    recoveryInstanceFailback_failbackToOriginalServer,
+    recoveryInstanceFailback_firstByteDateTime,
+    recoveryInstanceFailback_state,
+
+    -- * RecoveryInstanceProperties
+    RecoveryInstanceProperties (..),
+    newRecoveryInstanceProperties,
+    recoveryInstanceProperties_cpus,
+    recoveryInstanceProperties_disks,
+    recoveryInstanceProperties_identificationHints,
+    recoveryInstanceProperties_lastUpdatedDateTime,
+    recoveryInstanceProperties_networkInterfaces,
+    recoveryInstanceProperties_os,
+    recoveryInstanceProperties_ramBytes,
+
+    -- * RecoverySnapshot
+    RecoverySnapshot (..),
+    newRecoverySnapshot,
+    recoverySnapshot_ebsSnapshots,
+    recoverySnapshot_timestamp,
+    recoverySnapshot_expectedTimestamp,
+    recoverySnapshot_snapshotID,
+    recoverySnapshot_sourceServerID,
+
+    -- * ReplicationConfiguration
+    ReplicationConfiguration (..),
+    newReplicationConfiguration,
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_pitPolicy,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- * ReplicationConfigurationReplicatedDisk
+    ReplicationConfigurationReplicatedDisk (..),
+    newReplicationConfigurationReplicatedDisk,
+    replicationConfigurationReplicatedDisk_deviceName,
+    replicationConfigurationReplicatedDisk_iops,
+    replicationConfigurationReplicatedDisk_isBootDisk,
+    replicationConfigurationReplicatedDisk_optimizedStagingDiskType,
+    replicationConfigurationReplicatedDisk_stagingDiskType,
+    replicationConfigurationReplicatedDisk_throughput,
+
+    -- * ReplicationConfigurationTemplate
+    ReplicationConfigurationTemplate (..),
+    newReplicationConfigurationTemplate,
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_pitPolicy,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- * SourceCloudProperties
+    SourceCloudProperties (..),
+    newSourceCloudProperties,
+    sourceCloudProperties_originAccountID,
+    sourceCloudProperties_originAvailabilityZone,
+    sourceCloudProperties_originRegion,
+
+    -- * SourceProperties
+    SourceProperties (..),
+    newSourceProperties,
+    sourceProperties_cpus,
+    sourceProperties_disks,
+    sourceProperties_identificationHints,
+    sourceProperties_lastUpdatedDateTime,
+    sourceProperties_networkInterfaces,
+    sourceProperties_os,
+    sourceProperties_ramBytes,
+    sourceProperties_recommendedInstanceType,
+
+    -- * SourceServer
+    SourceServer (..),
+    newSourceServer,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_lastLaunchResult,
+    sourceServer_lifeCycle,
+    sourceServer_recoveryInstanceId,
+    sourceServer_replicationDirection,
+    sourceServer_reversedDirectionSourceServerArn,
+    sourceServer_sourceCloudProperties,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_stagingArea,
+    sourceServer_tags,
+
+    -- * StagingArea
+    StagingArea (..),
+    newStagingArea,
+    stagingArea_errorMessage,
+    stagingArea_stagingAccountID,
+    stagingArea_stagingSourceServerArn,
+    stagingArea_status,
+
+    -- * StagingSourceServer
+    StagingSourceServer (..),
+    newStagingSourceServer,
+    stagingSourceServer_arn,
+    stagingSourceServer_hostname,
+    stagingSourceServer_tags,
+
+    -- * StartRecoveryRequestSourceServer
+    StartRecoveryRequestSourceServer (..),
+    newStartRecoveryRequestSourceServer,
+    startRecoveryRequestSourceServer_recoverySnapshotID,
+    startRecoveryRequestSourceServer_sourceServerID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.DrS.Types.Account
+import Amazonka.DrS.Types.CPU
+import Amazonka.DrS.Types.ConversionProperties
+import Amazonka.DrS.Types.DataReplicationError
+import Amazonka.DrS.Types.DataReplicationErrorString
+import Amazonka.DrS.Types.DataReplicationInfo
+import Amazonka.DrS.Types.DataReplicationInfoReplicatedDisk
+import Amazonka.DrS.Types.DataReplicationInitiation
+import Amazonka.DrS.Types.DataReplicationInitiationStep
+import Amazonka.DrS.Types.DataReplicationInitiationStepName
+import Amazonka.DrS.Types.DataReplicationInitiationStepStatus
+import Amazonka.DrS.Types.DataReplicationState
+import Amazonka.DrS.Types.DescribeJobsRequestFilters
+import Amazonka.DrS.Types.DescribeRecoveryInstancesRequestFilters
+import Amazonka.DrS.Types.DescribeRecoverySnapshotsRequestFilters
+import Amazonka.DrS.Types.DescribeSourceServersRequestFilters
+import Amazonka.DrS.Types.Disk
+import Amazonka.DrS.Types.EC2InstanceState
+import Amazonka.DrS.Types.ExtensionStatus
+import Amazonka.DrS.Types.FailbackLaunchType
+import Amazonka.DrS.Types.FailbackReplicationError
+import Amazonka.DrS.Types.FailbackState
+import Amazonka.DrS.Types.IdentificationHints
+import Amazonka.DrS.Types.InitiatedBy
+import Amazonka.DrS.Types.Job
+import Amazonka.DrS.Types.JobLog
+import Amazonka.DrS.Types.JobLogEvent
+import Amazonka.DrS.Types.JobLogEventData
+import Amazonka.DrS.Types.JobStatus
+import Amazonka.DrS.Types.JobType
+import Amazonka.DrS.Types.LastLaunchResult
+import Amazonka.DrS.Types.LastLaunchType
+import Amazonka.DrS.Types.LaunchConfiguration
+import Amazonka.DrS.Types.LaunchDisposition
+import Amazonka.DrS.Types.LaunchStatus
+import Amazonka.DrS.Types.Licensing
+import Amazonka.DrS.Types.LifeCycle
+import Amazonka.DrS.Types.LifeCycleLastLaunch
+import Amazonka.DrS.Types.LifeCycleLastLaunchInitiated
+import Amazonka.DrS.Types.NetworkInterface
+import Amazonka.DrS.Types.OS
+import Amazonka.DrS.Types.OriginEnvironment
+import Amazonka.DrS.Types.PITPolicyRule
+import Amazonka.DrS.Types.PITPolicyRuleUnits
+import Amazonka.DrS.Types.ParticipatingServer
+import Amazonka.DrS.Types.RecoveryInstance
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationError
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfo
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfoReplicatedDisk
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiation
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStep
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepName
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepStatus
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationState
+import Amazonka.DrS.Types.RecoveryInstanceDisk
+import Amazonka.DrS.Types.RecoveryInstanceFailback
+import Amazonka.DrS.Types.RecoveryInstanceProperties
+import Amazonka.DrS.Types.RecoverySnapshot
+import Amazonka.DrS.Types.RecoverySnapshotsOrder
+import Amazonka.DrS.Types.ReplicationConfiguration
+import Amazonka.DrS.Types.ReplicationConfigurationDataPlaneRouting
+import Amazonka.DrS.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+import Amazonka.DrS.Types.ReplicationConfigurationEbsEncryption
+import Amazonka.DrS.Types.ReplicationConfigurationReplicatedDisk
+import Amazonka.DrS.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+import Amazonka.DrS.Types.ReplicationConfigurationTemplate
+import Amazonka.DrS.Types.ReplicationDirection
+import Amazonka.DrS.Types.SourceCloudProperties
+import Amazonka.DrS.Types.SourceProperties
+import Amazonka.DrS.Types.SourceServer
+import Amazonka.DrS.Types.StagingArea
+import Amazonka.DrS.Types.StagingSourceServer
+import Amazonka.DrS.Types.StartRecoveryRequestSourceServer
+import Amazonka.DrS.Types.TargetInstanceTypeRightSizingMethod
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-02-26@ of the Amazon Elastic Disaster Recovery Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "DrS",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "drs",
+      Core.signingName = "drs",
+      Core.version = "2020-02-26",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "DrS",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You do 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
+
+-- | The request could not be completed due to a conflict with the current
+-- state of the target resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The request processing has failed because of an unknown error, exception
+-- or failure.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The resource for this operation was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The request could not be completed because its exceeded the service
+-- quota.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request was denied due to request throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The account performing the request has not been initialized.
+_UninitializedAccountException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UninitializedAccountException =
+  Core._MatchServiceError
+    defaultService
+    "UninitializedAccountException"
+    Prelude.. Core.hasStatus 400
+
+-- | The input fails to satisfy the constraints specified by the 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/DrS/Types/Account.hs b/gen/Amazonka/DrS/Types/Account.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/Account.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.DrS.Types.Account
+-- 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.DrS.Types.Account 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
+
+-- | AWS account.
+--
+-- /See:/ 'newAccount' smart constructor.
+data Account = Account'
+  { -- | Account ID of AWS account.
+    accountID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Account' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountID', 'account_accountID' - Account ID of AWS account.
+newAccount ::
+  Account
+newAccount = Account' {accountID = Prelude.Nothing}
+
+-- | Account ID of AWS account.
+account_accountID :: Lens.Lens' Account (Prelude.Maybe Prelude.Text)
+account_accountID = Lens.lens (\Account' {accountID} -> accountID) (\s@Account' {} a -> s {accountID = a} :: Account)
+
+instance Data.FromJSON Account where
+  parseJSON =
+    Data.withObject
+      "Account"
+      ( \x ->
+          Account' Prelude.<$> (x Data..:? "accountID")
+      )
+
+instance Prelude.Hashable Account where
+  hashWithSalt _salt Account' {..} =
+    _salt `Prelude.hashWithSalt` accountID
+
+instance Prelude.NFData Account where
+  rnf Account' {..} = Prelude.rnf accountID
diff --git a/gen/Amazonka/DrS/Types/CPU.hs b/gen/Amazonka/DrS/Types/CPU.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/CPU.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.CPU
+-- 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.DrS.Types.CPU 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 server\'s CPU.
+--
+-- /See:/ 'newCPU' smart constructor.
+data CPU = CPU'
+  { -- | The number of CPU cores.
+    cores :: Prelude.Maybe Prelude.Natural,
+    -- | The model name of the CPU.
+    modelName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CPU' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cores', 'cpu_cores' - The number of CPU cores.
+--
+-- 'modelName', 'cpu_modelName' - The model name of the CPU.
+newCPU ::
+  CPU
+newCPU =
+  CPU'
+    { cores = Prelude.Nothing,
+      modelName = Prelude.Nothing
+    }
+
+-- | The number of CPU cores.
+cpu_cores :: Lens.Lens' CPU (Prelude.Maybe Prelude.Natural)
+cpu_cores = Lens.lens (\CPU' {cores} -> cores) (\s@CPU' {} a -> s {cores = a} :: CPU)
+
+-- | The model name of the CPU.
+cpu_modelName :: Lens.Lens' CPU (Prelude.Maybe Prelude.Text)
+cpu_modelName = Lens.lens (\CPU' {modelName} -> modelName) (\s@CPU' {} a -> s {modelName = a} :: CPU)
+
+instance Data.FromJSON CPU where
+  parseJSON =
+    Data.withObject
+      "CPU"
+      ( \x ->
+          CPU'
+            Prelude.<$> (x Data..:? "cores")
+            Prelude.<*> (x Data..:? "modelName")
+      )
+
+instance Prelude.Hashable CPU where
+  hashWithSalt _salt CPU' {..} =
+    _salt
+      `Prelude.hashWithSalt` cores
+      `Prelude.hashWithSalt` modelName
+
+instance Prelude.NFData CPU where
+  rnf CPU' {..} =
+    Prelude.rnf cores
+      `Prelude.seq` Prelude.rnf modelName
diff --git a/gen/Amazonka/DrS/Types/ConversionProperties.hs b/gen/Amazonka/DrS/Types/ConversionProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ConversionProperties.hs
@@ -0,0 +1,130 @@
+{-# 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.DrS.Types.ConversionProperties
+-- 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.DrS.Types.ConversionProperties 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
+
+-- | Properties of a conversion job
+--
+-- /See:/ 'newConversionProperties' smart constructor.
+data ConversionProperties = ConversionProperties'
+  { -- | The timestamp of when the snapshot being converted was taken
+    dataTimestamp :: Prelude.Maybe Prelude.Text,
+    -- | Whether the volume being converted uses UEFI or not
+    forceUefi :: Prelude.Maybe Prelude.Bool,
+    -- | The root volume name of a conversion job
+    rootVolumeName :: Prelude.Maybe Prelude.Text,
+    -- | A mapping between the volumes being converted and the converted snapshot
+    -- ids
+    volumeToConversionMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | A mapping between the volumes and their sizes
+    volumeToVolumeSize :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Natural)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConversionProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataTimestamp', 'conversionProperties_dataTimestamp' - The timestamp of when the snapshot being converted was taken
+--
+-- 'forceUefi', 'conversionProperties_forceUefi' - Whether the volume being converted uses UEFI or not
+--
+-- 'rootVolumeName', 'conversionProperties_rootVolumeName' - The root volume name of a conversion job
+--
+-- 'volumeToConversionMap', 'conversionProperties_volumeToConversionMap' - A mapping between the volumes being converted and the converted snapshot
+-- ids
+--
+-- 'volumeToVolumeSize', 'conversionProperties_volumeToVolumeSize' - A mapping between the volumes and their sizes
+newConversionProperties ::
+  ConversionProperties
+newConversionProperties =
+  ConversionProperties'
+    { dataTimestamp =
+        Prelude.Nothing,
+      forceUefi = Prelude.Nothing,
+      rootVolumeName = Prelude.Nothing,
+      volumeToConversionMap = Prelude.Nothing,
+      volumeToVolumeSize = Prelude.Nothing
+    }
+
+-- | The timestamp of when the snapshot being converted was taken
+conversionProperties_dataTimestamp :: Lens.Lens' ConversionProperties (Prelude.Maybe Prelude.Text)
+conversionProperties_dataTimestamp = Lens.lens (\ConversionProperties' {dataTimestamp} -> dataTimestamp) (\s@ConversionProperties' {} a -> s {dataTimestamp = a} :: ConversionProperties)
+
+-- | Whether the volume being converted uses UEFI or not
+conversionProperties_forceUefi :: Lens.Lens' ConversionProperties (Prelude.Maybe Prelude.Bool)
+conversionProperties_forceUefi = Lens.lens (\ConversionProperties' {forceUefi} -> forceUefi) (\s@ConversionProperties' {} a -> s {forceUefi = a} :: ConversionProperties)
+
+-- | The root volume name of a conversion job
+conversionProperties_rootVolumeName :: Lens.Lens' ConversionProperties (Prelude.Maybe Prelude.Text)
+conversionProperties_rootVolumeName = Lens.lens (\ConversionProperties' {rootVolumeName} -> rootVolumeName) (\s@ConversionProperties' {} a -> s {rootVolumeName = a} :: ConversionProperties)
+
+-- | A mapping between the volumes being converted and the converted snapshot
+-- ids
+conversionProperties_volumeToConversionMap :: Lens.Lens' ConversionProperties (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+conversionProperties_volumeToConversionMap = Lens.lens (\ConversionProperties' {volumeToConversionMap} -> volumeToConversionMap) (\s@ConversionProperties' {} a -> s {volumeToConversionMap = a} :: ConversionProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | A mapping between the volumes and their sizes
+conversionProperties_volumeToVolumeSize :: Lens.Lens' ConversionProperties (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Natural))
+conversionProperties_volumeToVolumeSize = Lens.lens (\ConversionProperties' {volumeToVolumeSize} -> volumeToVolumeSize) (\s@ConversionProperties' {} a -> s {volumeToVolumeSize = a} :: ConversionProperties) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConversionProperties where
+  parseJSON =
+    Data.withObject
+      "ConversionProperties"
+      ( \x ->
+          ConversionProperties'
+            Prelude.<$> (x Data..:? "dataTimestamp")
+            Prelude.<*> (x Data..:? "forceUefi")
+            Prelude.<*> (x Data..:? "rootVolumeName")
+            Prelude.<*> ( x
+                            Data..:? "volumeToConversionMap"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "volumeToVolumeSize"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ConversionProperties where
+  hashWithSalt _salt ConversionProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTimestamp
+      `Prelude.hashWithSalt` forceUefi
+      `Prelude.hashWithSalt` rootVolumeName
+      `Prelude.hashWithSalt` volumeToConversionMap
+      `Prelude.hashWithSalt` volumeToVolumeSize
+
+instance Prelude.NFData ConversionProperties where
+  rnf ConversionProperties' {..} =
+    Prelude.rnf dataTimestamp
+      `Prelude.seq` Prelude.rnf forceUefi
+      `Prelude.seq` Prelude.rnf rootVolumeName
+      `Prelude.seq` Prelude.rnf volumeToConversionMap
+      `Prelude.seq` Prelude.rnf volumeToVolumeSize
diff --git a/gen/Amazonka/DrS/Types/DataReplicationError.hs b/gen/Amazonka/DrS/Types/DataReplicationError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationError.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.DataReplicationError
+-- 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.DrS.Types.DataReplicationError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.DataReplicationErrorString
+import qualified Amazonka.Prelude as Prelude
+
+-- | Error in data replication.
+--
+-- /See:/ 'newDataReplicationError' smart constructor.
+data DataReplicationError = DataReplicationError'
+  { -- | Error in data replication.
+    error :: Prelude.Maybe DataReplicationErrorString,
+    -- | Error in data replication.
+    rawError :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataReplicationError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'dataReplicationError_error' - Error in data replication.
+--
+-- 'rawError', 'dataReplicationError_rawError' - Error in data replication.
+newDataReplicationError ::
+  DataReplicationError
+newDataReplicationError =
+  DataReplicationError'
+    { error = Prelude.Nothing,
+      rawError = Prelude.Nothing
+    }
+
+-- | Error in data replication.
+dataReplicationError_error :: Lens.Lens' DataReplicationError (Prelude.Maybe DataReplicationErrorString)
+dataReplicationError_error = Lens.lens (\DataReplicationError' {error} -> error) (\s@DataReplicationError' {} a -> s {error = a} :: DataReplicationError)
+
+-- | Error in data replication.
+dataReplicationError_rawError :: Lens.Lens' DataReplicationError (Prelude.Maybe Prelude.Text)
+dataReplicationError_rawError = Lens.lens (\DataReplicationError' {rawError} -> rawError) (\s@DataReplicationError' {} a -> s {rawError = a} :: DataReplicationError)
+
+instance Data.FromJSON DataReplicationError where
+  parseJSON =
+    Data.withObject
+      "DataReplicationError"
+      ( \x ->
+          DataReplicationError'
+            Prelude.<$> (x Data..:? "error")
+            Prelude.<*> (x Data..:? "rawError")
+      )
+
+instance Prelude.Hashable DataReplicationError where
+  hashWithSalt _salt DataReplicationError' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` rawError
+
+instance Prelude.NFData DataReplicationError where
+  rnf DataReplicationError' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf rawError
diff --git a/gen/Amazonka/DrS/Types/DataReplicationErrorString.hs b/gen/Amazonka/DrS/Types/DataReplicationErrorString.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationErrorString.hs
@@ -0,0 +1,131 @@
+{-# 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.DrS.Types.DataReplicationErrorString
+-- 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.DrS.Types.DataReplicationErrorString
+  ( DataReplicationErrorString
+      ( ..,
+        DataReplicationErrorString_AGENT_NOT_SEEN,
+        DataReplicationErrorString_FAILED_TO_ATTACH_STAGING_DISKS,
+        DataReplicationErrorString_FAILED_TO_AUTHENTICATE_WITH_SERVICE,
+        DataReplicationErrorString_FAILED_TO_BOOT_REPLICATION_SERVER,
+        DataReplicationErrorString_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER,
+        DataReplicationErrorString_FAILED_TO_CREATE_SECURITY_GROUP,
+        DataReplicationErrorString_FAILED_TO_CREATE_STAGING_DISKS,
+        DataReplicationErrorString_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE,
+        DataReplicationErrorString_FAILED_TO_LAUNCH_REPLICATION_SERVER,
+        DataReplicationErrorString_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT,
+        DataReplicationErrorString_FAILED_TO_START_DATA_TRANSFER,
+        DataReplicationErrorString_NOT_CONVERGING,
+        DataReplicationErrorString_SNAPSHOTS_FAILURE,
+        DataReplicationErrorString_UNSTABLE_NETWORK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataReplicationErrorString = DataReplicationErrorString'
+  { fromDataReplicationErrorString ::
+      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 DataReplicationErrorString_AGENT_NOT_SEEN :: DataReplicationErrorString
+pattern DataReplicationErrorString_AGENT_NOT_SEEN = DataReplicationErrorString' "AGENT_NOT_SEEN"
+
+pattern DataReplicationErrorString_FAILED_TO_ATTACH_STAGING_DISKS :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_ATTACH_STAGING_DISKS = DataReplicationErrorString' "FAILED_TO_ATTACH_STAGING_DISKS"
+
+pattern DataReplicationErrorString_FAILED_TO_AUTHENTICATE_WITH_SERVICE :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_AUTHENTICATE_WITH_SERVICE = DataReplicationErrorString' "FAILED_TO_AUTHENTICATE_WITH_SERVICE"
+
+pattern DataReplicationErrorString_FAILED_TO_BOOT_REPLICATION_SERVER :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_BOOT_REPLICATION_SERVER = DataReplicationErrorString' "FAILED_TO_BOOT_REPLICATION_SERVER"
+
+pattern DataReplicationErrorString_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER = DataReplicationErrorString' "FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER"
+
+pattern DataReplicationErrorString_FAILED_TO_CREATE_SECURITY_GROUP :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_CREATE_SECURITY_GROUP = DataReplicationErrorString' "FAILED_TO_CREATE_SECURITY_GROUP"
+
+pattern DataReplicationErrorString_FAILED_TO_CREATE_STAGING_DISKS :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_CREATE_STAGING_DISKS = DataReplicationErrorString' "FAILED_TO_CREATE_STAGING_DISKS"
+
+pattern DataReplicationErrorString_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE = DataReplicationErrorString' "FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE"
+
+pattern DataReplicationErrorString_FAILED_TO_LAUNCH_REPLICATION_SERVER :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_LAUNCH_REPLICATION_SERVER = DataReplicationErrorString' "FAILED_TO_LAUNCH_REPLICATION_SERVER"
+
+pattern DataReplicationErrorString_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT = DataReplicationErrorString' "FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT"
+
+pattern DataReplicationErrorString_FAILED_TO_START_DATA_TRANSFER :: DataReplicationErrorString
+pattern DataReplicationErrorString_FAILED_TO_START_DATA_TRANSFER = DataReplicationErrorString' "FAILED_TO_START_DATA_TRANSFER"
+
+pattern DataReplicationErrorString_NOT_CONVERGING :: DataReplicationErrorString
+pattern DataReplicationErrorString_NOT_CONVERGING = DataReplicationErrorString' "NOT_CONVERGING"
+
+pattern DataReplicationErrorString_SNAPSHOTS_FAILURE :: DataReplicationErrorString
+pattern DataReplicationErrorString_SNAPSHOTS_FAILURE = DataReplicationErrorString' "SNAPSHOTS_FAILURE"
+
+pattern DataReplicationErrorString_UNSTABLE_NETWORK :: DataReplicationErrorString
+pattern DataReplicationErrorString_UNSTABLE_NETWORK = DataReplicationErrorString' "UNSTABLE_NETWORK"
+
+{-# COMPLETE
+  DataReplicationErrorString_AGENT_NOT_SEEN,
+  DataReplicationErrorString_FAILED_TO_ATTACH_STAGING_DISKS,
+  DataReplicationErrorString_FAILED_TO_AUTHENTICATE_WITH_SERVICE,
+  DataReplicationErrorString_FAILED_TO_BOOT_REPLICATION_SERVER,
+  DataReplicationErrorString_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER,
+  DataReplicationErrorString_FAILED_TO_CREATE_SECURITY_GROUP,
+  DataReplicationErrorString_FAILED_TO_CREATE_STAGING_DISKS,
+  DataReplicationErrorString_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE,
+  DataReplicationErrorString_FAILED_TO_LAUNCH_REPLICATION_SERVER,
+  DataReplicationErrorString_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT,
+  DataReplicationErrorString_FAILED_TO_START_DATA_TRANSFER,
+  DataReplicationErrorString_NOT_CONVERGING,
+  DataReplicationErrorString_SNAPSHOTS_FAILURE,
+  DataReplicationErrorString_UNSTABLE_NETWORK,
+  DataReplicationErrorString'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/DataReplicationInfo.hs b/gen/Amazonka/DrS/Types/DataReplicationInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationInfo.hs
@@ -0,0 +1,140 @@
+{-# 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.DrS.Types.DataReplicationInfo
+-- 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.DrS.Types.DataReplicationInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.DataReplicationError
+import Amazonka.DrS.Types.DataReplicationInfoReplicatedDisk
+import Amazonka.DrS.Types.DataReplicationInitiation
+import Amazonka.DrS.Types.DataReplicationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about Data Replication
+--
+-- /See:/ 'newDataReplicationInfo' smart constructor.
+data DataReplicationInfo = DataReplicationInfo'
+  { -- | Error in data replication.
+    dataReplicationError :: Prelude.Maybe DataReplicationError,
+    -- | Information about whether the data replication has been initiated.
+    dataReplicationInitiation :: Prelude.Maybe DataReplicationInitiation,
+    -- | The state of the data replication.
+    dataReplicationState :: Prelude.Maybe DataReplicationState,
+    -- | An estimate of when the data replication will be completed.
+    etaDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Data replication lag duration.
+    lagDuration :: Prelude.Maybe Prelude.Text,
+    -- | The disks that should be replicated.
+    replicatedDisks :: Prelude.Maybe [DataReplicationInfoReplicatedDisk]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataReplicationInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataReplicationError', 'dataReplicationInfo_dataReplicationError' - Error in data replication.
+--
+-- 'dataReplicationInitiation', 'dataReplicationInfo_dataReplicationInitiation' - Information about whether the data replication has been initiated.
+--
+-- 'dataReplicationState', 'dataReplicationInfo_dataReplicationState' - The state of the data replication.
+--
+-- 'etaDateTime', 'dataReplicationInfo_etaDateTime' - An estimate of when the data replication will be completed.
+--
+-- 'lagDuration', 'dataReplicationInfo_lagDuration' - Data replication lag duration.
+--
+-- 'replicatedDisks', 'dataReplicationInfo_replicatedDisks' - The disks that should be replicated.
+newDataReplicationInfo ::
+  DataReplicationInfo
+newDataReplicationInfo =
+  DataReplicationInfo'
+    { dataReplicationError =
+        Prelude.Nothing,
+      dataReplicationInitiation = Prelude.Nothing,
+      dataReplicationState = Prelude.Nothing,
+      etaDateTime = Prelude.Nothing,
+      lagDuration = Prelude.Nothing,
+      replicatedDisks = Prelude.Nothing
+    }
+
+-- | Error in data replication.
+dataReplicationInfo_dataReplicationError :: Lens.Lens' DataReplicationInfo (Prelude.Maybe DataReplicationError)
+dataReplicationInfo_dataReplicationError = Lens.lens (\DataReplicationInfo' {dataReplicationError} -> dataReplicationError) (\s@DataReplicationInfo' {} a -> s {dataReplicationError = a} :: DataReplicationInfo)
+
+-- | Information about whether the data replication has been initiated.
+dataReplicationInfo_dataReplicationInitiation :: Lens.Lens' DataReplicationInfo (Prelude.Maybe DataReplicationInitiation)
+dataReplicationInfo_dataReplicationInitiation = Lens.lens (\DataReplicationInfo' {dataReplicationInitiation} -> dataReplicationInitiation) (\s@DataReplicationInfo' {} a -> s {dataReplicationInitiation = a} :: DataReplicationInfo)
+
+-- | The state of the data replication.
+dataReplicationInfo_dataReplicationState :: Lens.Lens' DataReplicationInfo (Prelude.Maybe DataReplicationState)
+dataReplicationInfo_dataReplicationState = Lens.lens (\DataReplicationInfo' {dataReplicationState} -> dataReplicationState) (\s@DataReplicationInfo' {} a -> s {dataReplicationState = a} :: DataReplicationInfo)
+
+-- | An estimate of when the data replication will be completed.
+dataReplicationInfo_etaDateTime :: Lens.Lens' DataReplicationInfo (Prelude.Maybe Prelude.Text)
+dataReplicationInfo_etaDateTime = Lens.lens (\DataReplicationInfo' {etaDateTime} -> etaDateTime) (\s@DataReplicationInfo' {} a -> s {etaDateTime = a} :: DataReplicationInfo)
+
+-- | Data replication lag duration.
+dataReplicationInfo_lagDuration :: Lens.Lens' DataReplicationInfo (Prelude.Maybe Prelude.Text)
+dataReplicationInfo_lagDuration = Lens.lens (\DataReplicationInfo' {lagDuration} -> lagDuration) (\s@DataReplicationInfo' {} a -> s {lagDuration = a} :: DataReplicationInfo)
+
+-- | The disks that should be replicated.
+dataReplicationInfo_replicatedDisks :: Lens.Lens' DataReplicationInfo (Prelude.Maybe [DataReplicationInfoReplicatedDisk])
+dataReplicationInfo_replicatedDisks = Lens.lens (\DataReplicationInfo' {replicatedDisks} -> replicatedDisks) (\s@DataReplicationInfo' {} a -> s {replicatedDisks = a} :: DataReplicationInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DataReplicationInfo where
+  parseJSON =
+    Data.withObject
+      "DataReplicationInfo"
+      ( \x ->
+          DataReplicationInfo'
+            Prelude.<$> (x Data..:? "dataReplicationError")
+            Prelude.<*> (x Data..:? "dataReplicationInitiation")
+            Prelude.<*> (x Data..:? "dataReplicationState")
+            Prelude.<*> (x Data..:? "etaDateTime")
+            Prelude.<*> (x Data..:? "lagDuration")
+            Prelude.<*> ( x
+                            Data..:? "replicatedDisks"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable DataReplicationInfo where
+  hashWithSalt _salt DataReplicationInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataReplicationError
+      `Prelude.hashWithSalt` dataReplicationInitiation
+      `Prelude.hashWithSalt` dataReplicationState
+      `Prelude.hashWithSalt` etaDateTime
+      `Prelude.hashWithSalt` lagDuration
+      `Prelude.hashWithSalt` replicatedDisks
+
+instance Prelude.NFData DataReplicationInfo where
+  rnf DataReplicationInfo' {..} =
+    Prelude.rnf dataReplicationError
+      `Prelude.seq` Prelude.rnf dataReplicationInitiation
+      `Prelude.seq` Prelude.rnf dataReplicationState
+      `Prelude.seq` Prelude.rnf etaDateTime
+      `Prelude.seq` Prelude.rnf lagDuration
+      `Prelude.seq` Prelude.rnf replicatedDisks
diff --git a/gen/Amazonka/DrS/Types/DataReplicationInfoReplicatedDisk.hs b/gen/Amazonka/DrS/Types/DataReplicationInfoReplicatedDisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationInfoReplicatedDisk.hs
@@ -0,0 +1,132 @@
+{-# 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.DrS.Types.DataReplicationInfoReplicatedDisk
+-- 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.DrS.Types.DataReplicationInfoReplicatedDisk 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 disk that should be replicated.
+--
+-- /See:/ 'newDataReplicationInfoReplicatedDisk' smart constructor.
+data DataReplicationInfoReplicatedDisk = DataReplicationInfoReplicatedDisk'
+  { -- | The size of the replication backlog in bytes.
+    backloggedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the device.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The amount of data replicated so far in bytes.
+    replicatedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The amount of data to be rescanned in bytes.
+    rescannedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The total amount of data to be replicated in bytes.
+    totalStorageBytes :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataReplicationInfoReplicatedDisk' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backloggedStorageBytes', 'dataReplicationInfoReplicatedDisk_backloggedStorageBytes' - The size of the replication backlog in bytes.
+--
+-- 'deviceName', 'dataReplicationInfoReplicatedDisk_deviceName' - The name of the device.
+--
+-- 'replicatedStorageBytes', 'dataReplicationInfoReplicatedDisk_replicatedStorageBytes' - The amount of data replicated so far in bytes.
+--
+-- 'rescannedStorageBytes', 'dataReplicationInfoReplicatedDisk_rescannedStorageBytes' - The amount of data to be rescanned in bytes.
+--
+-- 'totalStorageBytes', 'dataReplicationInfoReplicatedDisk_totalStorageBytes' - The total amount of data to be replicated in bytes.
+newDataReplicationInfoReplicatedDisk ::
+  DataReplicationInfoReplicatedDisk
+newDataReplicationInfoReplicatedDisk =
+  DataReplicationInfoReplicatedDisk'
+    { backloggedStorageBytes =
+        Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      replicatedStorageBytes = Prelude.Nothing,
+      rescannedStorageBytes = Prelude.Nothing,
+      totalStorageBytes = Prelude.Nothing
+    }
+
+-- | The size of the replication backlog in bytes.
+dataReplicationInfoReplicatedDisk_backloggedStorageBytes :: Lens.Lens' DataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+dataReplicationInfoReplicatedDisk_backloggedStorageBytes = Lens.lens (\DataReplicationInfoReplicatedDisk' {backloggedStorageBytes} -> backloggedStorageBytes) (\s@DataReplicationInfoReplicatedDisk' {} a -> s {backloggedStorageBytes = a} :: DataReplicationInfoReplicatedDisk)
+
+-- | The name of the device.
+dataReplicationInfoReplicatedDisk_deviceName :: Lens.Lens' DataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Text)
+dataReplicationInfoReplicatedDisk_deviceName = Lens.lens (\DataReplicationInfoReplicatedDisk' {deviceName} -> deviceName) (\s@DataReplicationInfoReplicatedDisk' {} a -> s {deviceName = a} :: DataReplicationInfoReplicatedDisk)
+
+-- | The amount of data replicated so far in bytes.
+dataReplicationInfoReplicatedDisk_replicatedStorageBytes :: Lens.Lens' DataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+dataReplicationInfoReplicatedDisk_replicatedStorageBytes = Lens.lens (\DataReplicationInfoReplicatedDisk' {replicatedStorageBytes} -> replicatedStorageBytes) (\s@DataReplicationInfoReplicatedDisk' {} a -> s {replicatedStorageBytes = a} :: DataReplicationInfoReplicatedDisk)
+
+-- | The amount of data to be rescanned in bytes.
+dataReplicationInfoReplicatedDisk_rescannedStorageBytes :: Lens.Lens' DataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+dataReplicationInfoReplicatedDisk_rescannedStorageBytes = Lens.lens (\DataReplicationInfoReplicatedDisk' {rescannedStorageBytes} -> rescannedStorageBytes) (\s@DataReplicationInfoReplicatedDisk' {} a -> s {rescannedStorageBytes = a} :: DataReplicationInfoReplicatedDisk)
+
+-- | The total amount of data to be replicated in bytes.
+dataReplicationInfoReplicatedDisk_totalStorageBytes :: Lens.Lens' DataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+dataReplicationInfoReplicatedDisk_totalStorageBytes = Lens.lens (\DataReplicationInfoReplicatedDisk' {totalStorageBytes} -> totalStorageBytes) (\s@DataReplicationInfoReplicatedDisk' {} a -> s {totalStorageBytes = a} :: DataReplicationInfoReplicatedDisk)
+
+instance
+  Data.FromJSON
+    DataReplicationInfoReplicatedDisk
+  where
+  parseJSON =
+    Data.withObject
+      "DataReplicationInfoReplicatedDisk"
+      ( \x ->
+          DataReplicationInfoReplicatedDisk'
+            Prelude.<$> (x Data..:? "backloggedStorageBytes")
+            Prelude.<*> (x Data..:? "deviceName")
+            Prelude.<*> (x Data..:? "replicatedStorageBytes")
+            Prelude.<*> (x Data..:? "rescannedStorageBytes")
+            Prelude.<*> (x Data..:? "totalStorageBytes")
+      )
+
+instance
+  Prelude.Hashable
+    DataReplicationInfoReplicatedDisk
+  where
+  hashWithSalt
+    _salt
+    DataReplicationInfoReplicatedDisk' {..} =
+      _salt
+        `Prelude.hashWithSalt` backloggedStorageBytes
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` replicatedStorageBytes
+        `Prelude.hashWithSalt` rescannedStorageBytes
+        `Prelude.hashWithSalt` totalStorageBytes
+
+instance
+  Prelude.NFData
+    DataReplicationInfoReplicatedDisk
+  where
+  rnf DataReplicationInfoReplicatedDisk' {..} =
+    Prelude.rnf backloggedStorageBytes
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf replicatedStorageBytes
+      `Prelude.seq` Prelude.rnf rescannedStorageBytes
+      `Prelude.seq` Prelude.rnf totalStorageBytes
diff --git a/gen/Amazonka/DrS/Types/DataReplicationInitiation.hs b/gen/Amazonka/DrS/Types/DataReplicationInitiation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationInitiation.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.DataReplicationInitiation
+-- 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.DrS.Types.DataReplicationInitiation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.DataReplicationInitiationStep
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data replication initiation.
+--
+-- /See:/ 'newDataReplicationInitiation' smart constructor.
+data DataReplicationInitiation = DataReplicationInitiation'
+  { -- | The date and time of the next attempt to initiate data replication.
+    nextAttemptDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The date and time of the current attempt to initiate data replication.
+    startDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The steps of the current attempt to initiate data replication.
+    steps :: Prelude.Maybe [DataReplicationInitiationStep]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataReplicationInitiation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextAttemptDateTime', 'dataReplicationInitiation_nextAttemptDateTime' - The date and time of the next attempt to initiate data replication.
+--
+-- 'startDateTime', 'dataReplicationInitiation_startDateTime' - The date and time of the current attempt to initiate data replication.
+--
+-- 'steps', 'dataReplicationInitiation_steps' - The steps of the current attempt to initiate data replication.
+newDataReplicationInitiation ::
+  DataReplicationInitiation
+newDataReplicationInitiation =
+  DataReplicationInitiation'
+    { nextAttemptDateTime =
+        Prelude.Nothing,
+      startDateTime = Prelude.Nothing,
+      steps = Prelude.Nothing
+    }
+
+-- | The date and time of the next attempt to initiate data replication.
+dataReplicationInitiation_nextAttemptDateTime :: Lens.Lens' DataReplicationInitiation (Prelude.Maybe Prelude.Text)
+dataReplicationInitiation_nextAttemptDateTime = Lens.lens (\DataReplicationInitiation' {nextAttemptDateTime} -> nextAttemptDateTime) (\s@DataReplicationInitiation' {} a -> s {nextAttemptDateTime = a} :: DataReplicationInitiation)
+
+-- | The date and time of the current attempt to initiate data replication.
+dataReplicationInitiation_startDateTime :: Lens.Lens' DataReplicationInitiation (Prelude.Maybe Prelude.Text)
+dataReplicationInitiation_startDateTime = Lens.lens (\DataReplicationInitiation' {startDateTime} -> startDateTime) (\s@DataReplicationInitiation' {} a -> s {startDateTime = a} :: DataReplicationInitiation)
+
+-- | The steps of the current attempt to initiate data replication.
+dataReplicationInitiation_steps :: Lens.Lens' DataReplicationInitiation (Prelude.Maybe [DataReplicationInitiationStep])
+dataReplicationInitiation_steps = Lens.lens (\DataReplicationInitiation' {steps} -> steps) (\s@DataReplicationInitiation' {} a -> s {steps = a} :: DataReplicationInitiation) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DataReplicationInitiation where
+  parseJSON =
+    Data.withObject
+      "DataReplicationInitiation"
+      ( \x ->
+          DataReplicationInitiation'
+            Prelude.<$> (x Data..:? "nextAttemptDateTime")
+            Prelude.<*> (x Data..:? "startDateTime")
+            Prelude.<*> (x Data..:? "steps" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable DataReplicationInitiation where
+  hashWithSalt _salt DataReplicationInitiation' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextAttemptDateTime
+      `Prelude.hashWithSalt` startDateTime
+      `Prelude.hashWithSalt` steps
+
+instance Prelude.NFData DataReplicationInitiation where
+  rnf DataReplicationInitiation' {..} =
+    Prelude.rnf nextAttemptDateTime
+      `Prelude.seq` Prelude.rnf startDateTime
+      `Prelude.seq` Prelude.rnf steps
diff --git a/gen/Amazonka/DrS/Types/DataReplicationInitiationStep.hs b/gen/Amazonka/DrS/Types/DataReplicationInitiationStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationInitiationStep.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.DataReplicationInitiationStep
+-- 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.DrS.Types.DataReplicationInitiationStep where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.DataReplicationInitiationStepName
+import Amazonka.DrS.Types.DataReplicationInitiationStepStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data replication initiation step.
+--
+-- /See:/ 'newDataReplicationInitiationStep' smart constructor.
+data DataReplicationInitiationStep = DataReplicationInitiationStep'
+  { -- | The name of the step.
+    name :: Prelude.Maybe DataReplicationInitiationStepName,
+    -- | The status of the step.
+    status :: Prelude.Maybe DataReplicationInitiationStepStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataReplicationInitiationStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'dataReplicationInitiationStep_name' - The name of the step.
+--
+-- 'status', 'dataReplicationInitiationStep_status' - The status of the step.
+newDataReplicationInitiationStep ::
+  DataReplicationInitiationStep
+newDataReplicationInitiationStep =
+  DataReplicationInitiationStep'
+    { name =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The name of the step.
+dataReplicationInitiationStep_name :: Lens.Lens' DataReplicationInitiationStep (Prelude.Maybe DataReplicationInitiationStepName)
+dataReplicationInitiationStep_name = Lens.lens (\DataReplicationInitiationStep' {name} -> name) (\s@DataReplicationInitiationStep' {} a -> s {name = a} :: DataReplicationInitiationStep)
+
+-- | The status of the step.
+dataReplicationInitiationStep_status :: Lens.Lens' DataReplicationInitiationStep (Prelude.Maybe DataReplicationInitiationStepStatus)
+dataReplicationInitiationStep_status = Lens.lens (\DataReplicationInitiationStep' {status} -> status) (\s@DataReplicationInitiationStep' {} a -> s {status = a} :: DataReplicationInitiationStep)
+
+instance Data.FromJSON DataReplicationInitiationStep where
+  parseJSON =
+    Data.withObject
+      "DataReplicationInitiationStep"
+      ( \x ->
+          DataReplicationInitiationStep'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance
+  Prelude.Hashable
+    DataReplicationInitiationStep
+  where
+  hashWithSalt _salt DataReplicationInitiationStep' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DataReplicationInitiationStep where
+  rnf DataReplicationInitiationStep' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DrS/Types/DataReplicationInitiationStepName.hs b/gen/Amazonka/DrS/Types/DataReplicationInitiationStepName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationInitiationStepName.hs
@@ -0,0 +1,116 @@
+{-# 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.DrS.Types.DataReplicationInitiationStepName
+-- 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.DrS.Types.DataReplicationInitiationStepName
+  ( DataReplicationInitiationStepName
+      ( ..,
+        DataReplicationInitiationStepName_ATTACH_STAGING_DISKS,
+        DataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE,
+        DataReplicationInitiationStepName_BOOT_REPLICATION_SERVER,
+        DataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER,
+        DataReplicationInitiationStepName_CREATE_SECURITY_GROUP,
+        DataReplicationInitiationStepName_CREATE_STAGING_DISKS,
+        DataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE,
+        DataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER,
+        DataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT,
+        DataReplicationInitiationStepName_START_DATA_TRANSFER,
+        DataReplicationInitiationStepName_WAIT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataReplicationInitiationStepName = DataReplicationInitiationStepName'
+  { fromDataReplicationInitiationStepName ::
+      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 DataReplicationInitiationStepName_ATTACH_STAGING_DISKS :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_ATTACH_STAGING_DISKS = DataReplicationInitiationStepName' "ATTACH_STAGING_DISKS"
+
+pattern DataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE = DataReplicationInitiationStepName' "AUTHENTICATE_WITH_SERVICE"
+
+pattern DataReplicationInitiationStepName_BOOT_REPLICATION_SERVER :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_BOOT_REPLICATION_SERVER = DataReplicationInitiationStepName' "BOOT_REPLICATION_SERVER"
+
+pattern DataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER = DataReplicationInitiationStepName' "CONNECT_AGENT_TO_REPLICATION_SERVER"
+
+pattern DataReplicationInitiationStepName_CREATE_SECURITY_GROUP :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_CREATE_SECURITY_GROUP = DataReplicationInitiationStepName' "CREATE_SECURITY_GROUP"
+
+pattern DataReplicationInitiationStepName_CREATE_STAGING_DISKS :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_CREATE_STAGING_DISKS = DataReplicationInitiationStepName' "CREATE_STAGING_DISKS"
+
+pattern DataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE = DataReplicationInitiationStepName' "DOWNLOAD_REPLICATION_SOFTWARE"
+
+pattern DataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER = DataReplicationInitiationStepName' "LAUNCH_REPLICATION_SERVER"
+
+pattern DataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT = DataReplicationInitiationStepName' "PAIR_REPLICATION_SERVER_WITH_AGENT"
+
+pattern DataReplicationInitiationStepName_START_DATA_TRANSFER :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_START_DATA_TRANSFER = DataReplicationInitiationStepName' "START_DATA_TRANSFER"
+
+pattern DataReplicationInitiationStepName_WAIT :: DataReplicationInitiationStepName
+pattern DataReplicationInitiationStepName_WAIT = DataReplicationInitiationStepName' "WAIT"
+
+{-# COMPLETE
+  DataReplicationInitiationStepName_ATTACH_STAGING_DISKS,
+  DataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE,
+  DataReplicationInitiationStepName_BOOT_REPLICATION_SERVER,
+  DataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER,
+  DataReplicationInitiationStepName_CREATE_SECURITY_GROUP,
+  DataReplicationInitiationStepName_CREATE_STAGING_DISKS,
+  DataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE,
+  DataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER,
+  DataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT,
+  DataReplicationInitiationStepName_START_DATA_TRANSFER,
+  DataReplicationInitiationStepName_WAIT,
+  DataReplicationInitiationStepName'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/DataReplicationInitiationStepStatus.hs b/gen/Amazonka/DrS/Types/DataReplicationInitiationStepStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationInitiationStepStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.DataReplicationInitiationStepStatus
+-- 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.DrS.Types.DataReplicationInitiationStepStatus
+  ( DataReplicationInitiationStepStatus
+      ( ..,
+        DataReplicationInitiationStepStatus_FAILED,
+        DataReplicationInitiationStepStatus_IN_PROGRESS,
+        DataReplicationInitiationStepStatus_NOT_STARTED,
+        DataReplicationInitiationStepStatus_SKIPPED,
+        DataReplicationInitiationStepStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataReplicationInitiationStepStatus = DataReplicationInitiationStepStatus'
+  { fromDataReplicationInitiationStepStatus ::
+      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 DataReplicationInitiationStepStatus_FAILED :: DataReplicationInitiationStepStatus
+pattern DataReplicationInitiationStepStatus_FAILED = DataReplicationInitiationStepStatus' "FAILED"
+
+pattern DataReplicationInitiationStepStatus_IN_PROGRESS :: DataReplicationInitiationStepStatus
+pattern DataReplicationInitiationStepStatus_IN_PROGRESS = DataReplicationInitiationStepStatus' "IN_PROGRESS"
+
+pattern DataReplicationInitiationStepStatus_NOT_STARTED :: DataReplicationInitiationStepStatus
+pattern DataReplicationInitiationStepStatus_NOT_STARTED = DataReplicationInitiationStepStatus' "NOT_STARTED"
+
+pattern DataReplicationInitiationStepStatus_SKIPPED :: DataReplicationInitiationStepStatus
+pattern DataReplicationInitiationStepStatus_SKIPPED = DataReplicationInitiationStepStatus' "SKIPPED"
+
+pattern DataReplicationInitiationStepStatus_SUCCEEDED :: DataReplicationInitiationStepStatus
+pattern DataReplicationInitiationStepStatus_SUCCEEDED = DataReplicationInitiationStepStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  DataReplicationInitiationStepStatus_FAILED,
+  DataReplicationInitiationStepStatus_IN_PROGRESS,
+  DataReplicationInitiationStepStatus_NOT_STARTED,
+  DataReplicationInitiationStepStatus_SKIPPED,
+  DataReplicationInitiationStepStatus_SUCCEEDED,
+  DataReplicationInitiationStepStatus'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/DataReplicationState.hs b/gen/Amazonka/DrS/Types/DataReplicationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DataReplicationState.hs
@@ -0,0 +1,111 @@
+{-# 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.DrS.Types.DataReplicationState
+-- 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.DrS.Types.DataReplicationState
+  ( DataReplicationState
+      ( ..,
+        DataReplicationState_BACKLOG,
+        DataReplicationState_CONTINUOUS,
+        DataReplicationState_CREATING_SNAPSHOT,
+        DataReplicationState_DISCONNECTED,
+        DataReplicationState_INITIAL_SYNC,
+        DataReplicationState_INITIATING,
+        DataReplicationState_PAUSED,
+        DataReplicationState_RESCAN,
+        DataReplicationState_STALLED,
+        DataReplicationState_STOPPED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataReplicationState = DataReplicationState'
+  { fromDataReplicationState ::
+      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 DataReplicationState_BACKLOG :: DataReplicationState
+pattern DataReplicationState_BACKLOG = DataReplicationState' "BACKLOG"
+
+pattern DataReplicationState_CONTINUOUS :: DataReplicationState
+pattern DataReplicationState_CONTINUOUS = DataReplicationState' "CONTINUOUS"
+
+pattern DataReplicationState_CREATING_SNAPSHOT :: DataReplicationState
+pattern DataReplicationState_CREATING_SNAPSHOT = DataReplicationState' "CREATING_SNAPSHOT"
+
+pattern DataReplicationState_DISCONNECTED :: DataReplicationState
+pattern DataReplicationState_DISCONNECTED = DataReplicationState' "DISCONNECTED"
+
+pattern DataReplicationState_INITIAL_SYNC :: DataReplicationState
+pattern DataReplicationState_INITIAL_SYNC = DataReplicationState' "INITIAL_SYNC"
+
+pattern DataReplicationState_INITIATING :: DataReplicationState
+pattern DataReplicationState_INITIATING = DataReplicationState' "INITIATING"
+
+pattern DataReplicationState_PAUSED :: DataReplicationState
+pattern DataReplicationState_PAUSED = DataReplicationState' "PAUSED"
+
+pattern DataReplicationState_RESCAN :: DataReplicationState
+pattern DataReplicationState_RESCAN = DataReplicationState' "RESCAN"
+
+pattern DataReplicationState_STALLED :: DataReplicationState
+pattern DataReplicationState_STALLED = DataReplicationState' "STALLED"
+
+pattern DataReplicationState_STOPPED :: DataReplicationState
+pattern DataReplicationState_STOPPED = DataReplicationState' "STOPPED"
+
+{-# COMPLETE
+  DataReplicationState_BACKLOG,
+  DataReplicationState_CONTINUOUS,
+  DataReplicationState_CREATING_SNAPSHOT,
+  DataReplicationState_DISCONNECTED,
+  DataReplicationState_INITIAL_SYNC,
+  DataReplicationState_INITIATING,
+  DataReplicationState_PAUSED,
+  DataReplicationState_RESCAN,
+  DataReplicationState_STALLED,
+  DataReplicationState_STOPPED,
+  DataReplicationState'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/DescribeJobsRequestFilters.hs b/gen/Amazonka/DrS/Types/DescribeJobsRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DescribeJobsRequestFilters.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.DescribeJobsRequestFilters
+-- 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.DrS.Types.DescribeJobsRequestFilters 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 set of filters by which to return Jobs.
+--
+-- /See:/ 'newDescribeJobsRequestFilters' smart constructor.
+data DescribeJobsRequestFilters = DescribeJobsRequestFilters'
+  { -- | The start date in a date range query.
+    fromDate :: Prelude.Maybe Prelude.Text,
+    -- | An array of Job IDs that should be returned. An empty array means all
+    -- jobs.
+    jobIDs :: Prelude.Maybe [Prelude.Text],
+    -- | The end date in a date range query.
+    toDate :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobsRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fromDate', 'describeJobsRequestFilters_fromDate' - The start date in a date range query.
+--
+-- 'jobIDs', 'describeJobsRequestFilters_jobIDs' - An array of Job IDs that should be returned. An empty array means all
+-- jobs.
+--
+-- 'toDate', 'describeJobsRequestFilters_toDate' - The end date in a date range query.
+newDescribeJobsRequestFilters ::
+  DescribeJobsRequestFilters
+newDescribeJobsRequestFilters =
+  DescribeJobsRequestFilters'
+    { fromDate =
+        Prelude.Nothing,
+      jobIDs = Prelude.Nothing,
+      toDate = Prelude.Nothing
+    }
+
+-- | The start date in a date range query.
+describeJobsRequestFilters_fromDate :: Lens.Lens' DescribeJobsRequestFilters (Prelude.Maybe Prelude.Text)
+describeJobsRequestFilters_fromDate = Lens.lens (\DescribeJobsRequestFilters' {fromDate} -> fromDate) (\s@DescribeJobsRequestFilters' {} a -> s {fromDate = a} :: DescribeJobsRequestFilters)
+
+-- | An array of Job IDs that should be returned. An empty array means all
+-- jobs.
+describeJobsRequestFilters_jobIDs :: Lens.Lens' DescribeJobsRequestFilters (Prelude.Maybe [Prelude.Text])
+describeJobsRequestFilters_jobIDs = Lens.lens (\DescribeJobsRequestFilters' {jobIDs} -> jobIDs) (\s@DescribeJobsRequestFilters' {} a -> s {jobIDs = a} :: DescribeJobsRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end date in a date range query.
+describeJobsRequestFilters_toDate :: Lens.Lens' DescribeJobsRequestFilters (Prelude.Maybe Prelude.Text)
+describeJobsRequestFilters_toDate = Lens.lens (\DescribeJobsRequestFilters' {toDate} -> toDate) (\s@DescribeJobsRequestFilters' {} a -> s {toDate = a} :: DescribeJobsRequestFilters)
+
+instance Prelude.Hashable DescribeJobsRequestFilters where
+  hashWithSalt _salt DescribeJobsRequestFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromDate
+      `Prelude.hashWithSalt` jobIDs
+      `Prelude.hashWithSalt` toDate
+
+instance Prelude.NFData DescribeJobsRequestFilters where
+  rnf DescribeJobsRequestFilters' {..} =
+    Prelude.rnf fromDate
+      `Prelude.seq` Prelude.rnf jobIDs
+      `Prelude.seq` Prelude.rnf toDate
+
+instance Data.ToJSON DescribeJobsRequestFilters where
+  toJSON DescribeJobsRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("fromDate" Data..=) Prelude.<$> fromDate,
+            ("jobIDs" Data..=) Prelude.<$> jobIDs,
+            ("toDate" Data..=) Prelude.<$> toDate
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/DescribeRecoveryInstancesRequestFilters.hs b/gen/Amazonka/DrS/Types/DescribeRecoveryInstancesRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DescribeRecoveryInstancesRequestFilters.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.DescribeRecoveryInstancesRequestFilters
+-- 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.DrS.Types.DescribeRecoveryInstancesRequestFilters 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 set of filters by which to return Recovery Instances.
+--
+-- /See:/ 'newDescribeRecoveryInstancesRequestFilters' smart constructor.
+data DescribeRecoveryInstancesRequestFilters = DescribeRecoveryInstancesRequestFilters'
+  { -- | An array of Recovery Instance IDs that should be returned. An empty
+    -- array means all Recovery Instances.
+    recoveryInstanceIDs :: Prelude.Maybe [Prelude.Text],
+    -- | An array of Source Server IDs for which associated Recovery Instances
+    -- should be returned.
+    sourceServerIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecoveryInstancesRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoveryInstanceIDs', 'describeRecoveryInstancesRequestFilters_recoveryInstanceIDs' - An array of Recovery Instance IDs that should be returned. An empty
+-- array means all Recovery Instances.
+--
+-- 'sourceServerIDs', 'describeRecoveryInstancesRequestFilters_sourceServerIDs' - An array of Source Server IDs for which associated Recovery Instances
+-- should be returned.
+newDescribeRecoveryInstancesRequestFilters ::
+  DescribeRecoveryInstancesRequestFilters
+newDescribeRecoveryInstancesRequestFilters =
+  DescribeRecoveryInstancesRequestFilters'
+    { recoveryInstanceIDs =
+        Prelude.Nothing,
+      sourceServerIDs = Prelude.Nothing
+    }
+
+-- | An array of Recovery Instance IDs that should be returned. An empty
+-- array means all Recovery Instances.
+describeRecoveryInstancesRequestFilters_recoveryInstanceIDs :: Lens.Lens' DescribeRecoveryInstancesRequestFilters (Prelude.Maybe [Prelude.Text])
+describeRecoveryInstancesRequestFilters_recoveryInstanceIDs = Lens.lens (\DescribeRecoveryInstancesRequestFilters' {recoveryInstanceIDs} -> recoveryInstanceIDs) (\s@DescribeRecoveryInstancesRequestFilters' {} a -> s {recoveryInstanceIDs = a} :: DescribeRecoveryInstancesRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of Source Server IDs for which associated Recovery Instances
+-- should be returned.
+describeRecoveryInstancesRequestFilters_sourceServerIDs :: Lens.Lens' DescribeRecoveryInstancesRequestFilters (Prelude.Maybe [Prelude.Text])
+describeRecoveryInstancesRequestFilters_sourceServerIDs = Lens.lens (\DescribeRecoveryInstancesRequestFilters' {sourceServerIDs} -> sourceServerIDs) (\s@DescribeRecoveryInstancesRequestFilters' {} a -> s {sourceServerIDs = a} :: DescribeRecoveryInstancesRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    DescribeRecoveryInstancesRequestFilters
+  where
+  hashWithSalt
+    _salt
+    DescribeRecoveryInstancesRequestFilters' {..} =
+      _salt
+        `Prelude.hashWithSalt` recoveryInstanceIDs
+        `Prelude.hashWithSalt` sourceServerIDs
+
+instance
+  Prelude.NFData
+    DescribeRecoveryInstancesRequestFilters
+  where
+  rnf DescribeRecoveryInstancesRequestFilters' {..} =
+    Prelude.rnf recoveryInstanceIDs
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance
+  Data.ToJSON
+    DescribeRecoveryInstancesRequestFilters
+  where
+  toJSON DescribeRecoveryInstancesRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("recoveryInstanceIDs" Data..=)
+              Prelude.<$> recoveryInstanceIDs,
+            ("sourceServerIDs" Data..=)
+              Prelude.<$> sourceServerIDs
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/DescribeRecoverySnapshotsRequestFilters.hs b/gen/Amazonka/DrS/Types/DescribeRecoverySnapshotsRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DescribeRecoverySnapshotsRequestFilters.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.DrS.Types.DescribeRecoverySnapshotsRequestFilters
+-- 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.DrS.Types.DescribeRecoverySnapshotsRequestFilters 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 set of filters by which to return Recovery Snapshots.
+--
+-- /See:/ 'newDescribeRecoverySnapshotsRequestFilters' smart constructor.
+data DescribeRecoverySnapshotsRequestFilters = DescribeRecoverySnapshotsRequestFilters'
+  { -- | The start date in a date range query.
+    fromDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The end date in a date range query.
+    toDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRecoverySnapshotsRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fromDateTime', 'describeRecoverySnapshotsRequestFilters_fromDateTime' - The start date in a date range query.
+--
+-- 'toDateTime', 'describeRecoverySnapshotsRequestFilters_toDateTime' - The end date in a date range query.
+newDescribeRecoverySnapshotsRequestFilters ::
+  DescribeRecoverySnapshotsRequestFilters
+newDescribeRecoverySnapshotsRequestFilters =
+  DescribeRecoverySnapshotsRequestFilters'
+    { fromDateTime =
+        Prelude.Nothing,
+      toDateTime = Prelude.Nothing
+    }
+
+-- | The start date in a date range query.
+describeRecoverySnapshotsRequestFilters_fromDateTime :: Lens.Lens' DescribeRecoverySnapshotsRequestFilters (Prelude.Maybe Prelude.Text)
+describeRecoverySnapshotsRequestFilters_fromDateTime = Lens.lens (\DescribeRecoverySnapshotsRequestFilters' {fromDateTime} -> fromDateTime) (\s@DescribeRecoverySnapshotsRequestFilters' {} a -> s {fromDateTime = a} :: DescribeRecoverySnapshotsRequestFilters)
+
+-- | The end date in a date range query.
+describeRecoverySnapshotsRequestFilters_toDateTime :: Lens.Lens' DescribeRecoverySnapshotsRequestFilters (Prelude.Maybe Prelude.Text)
+describeRecoverySnapshotsRequestFilters_toDateTime = Lens.lens (\DescribeRecoverySnapshotsRequestFilters' {toDateTime} -> toDateTime) (\s@DescribeRecoverySnapshotsRequestFilters' {} a -> s {toDateTime = a} :: DescribeRecoverySnapshotsRequestFilters)
+
+instance
+  Prelude.Hashable
+    DescribeRecoverySnapshotsRequestFilters
+  where
+  hashWithSalt
+    _salt
+    DescribeRecoverySnapshotsRequestFilters' {..} =
+      _salt
+        `Prelude.hashWithSalt` fromDateTime
+        `Prelude.hashWithSalt` toDateTime
+
+instance
+  Prelude.NFData
+    DescribeRecoverySnapshotsRequestFilters
+  where
+  rnf DescribeRecoverySnapshotsRequestFilters' {..} =
+    Prelude.rnf fromDateTime
+      `Prelude.seq` Prelude.rnf toDateTime
+
+instance
+  Data.ToJSON
+    DescribeRecoverySnapshotsRequestFilters
+  where
+  toJSON DescribeRecoverySnapshotsRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("fromDateTime" Data..=) Prelude.<$> fromDateTime,
+            ("toDateTime" Data..=) Prelude.<$> toDateTime
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/DescribeSourceServersRequestFilters.hs b/gen/Amazonka/DrS/Types/DescribeSourceServersRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/DescribeSourceServersRequestFilters.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.DrS.Types.DescribeSourceServersRequestFilters
+-- 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.DrS.Types.DescribeSourceServersRequestFilters 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 set of filters by which to return Source Servers.
+--
+-- /See:/ 'newDescribeSourceServersRequestFilters' smart constructor.
+data DescribeSourceServersRequestFilters = DescribeSourceServersRequestFilters'
+  { -- | An ID that describes the hardware of the Source Server. This is either
+    -- an EC2 instance id, a VMware uuid or a mac address.
+    hardwareId :: Prelude.Maybe Prelude.Text,
+    -- | An array of Source Servers IDs that should be returned. An empty array
+    -- means all Source Servers.
+    sourceServerIDs :: Prelude.Maybe [Prelude.Text],
+    -- | An array of staging account IDs that extended source servers belong to.
+    -- An empty array means all source servers will be shown.
+    stagingAccountIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSourceServersRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hardwareId', 'describeSourceServersRequestFilters_hardwareId' - An ID that describes the hardware of the Source Server. This is either
+-- an EC2 instance id, a VMware uuid or a mac address.
+--
+-- 'sourceServerIDs', 'describeSourceServersRequestFilters_sourceServerIDs' - An array of Source Servers IDs that should be returned. An empty array
+-- means all Source Servers.
+--
+-- 'stagingAccountIDs', 'describeSourceServersRequestFilters_stagingAccountIDs' - An array of staging account IDs that extended source servers belong to.
+-- An empty array means all source servers will be shown.
+newDescribeSourceServersRequestFilters ::
+  DescribeSourceServersRequestFilters
+newDescribeSourceServersRequestFilters =
+  DescribeSourceServersRequestFilters'
+    { hardwareId =
+        Prelude.Nothing,
+      sourceServerIDs = Prelude.Nothing,
+      stagingAccountIDs = Prelude.Nothing
+    }
+
+-- | An ID that describes the hardware of the Source Server. This is either
+-- an EC2 instance id, a VMware uuid or a mac address.
+describeSourceServersRequestFilters_hardwareId :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe Prelude.Text)
+describeSourceServersRequestFilters_hardwareId = Lens.lens (\DescribeSourceServersRequestFilters' {hardwareId} -> hardwareId) (\s@DescribeSourceServersRequestFilters' {} a -> s {hardwareId = a} :: DescribeSourceServersRequestFilters)
+
+-- | An array of Source Servers IDs that should be returned. An empty array
+-- means all Source Servers.
+describeSourceServersRequestFilters_sourceServerIDs :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe [Prelude.Text])
+describeSourceServersRequestFilters_sourceServerIDs = Lens.lens (\DescribeSourceServersRequestFilters' {sourceServerIDs} -> sourceServerIDs) (\s@DescribeSourceServersRequestFilters' {} a -> s {sourceServerIDs = a} :: DescribeSourceServersRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of staging account IDs that extended source servers belong to.
+-- An empty array means all source servers will be shown.
+describeSourceServersRequestFilters_stagingAccountIDs :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe [Prelude.Text])
+describeSourceServersRequestFilters_stagingAccountIDs = Lens.lens (\DescribeSourceServersRequestFilters' {stagingAccountIDs} -> stagingAccountIDs) (\s@DescribeSourceServersRequestFilters' {} a -> s {stagingAccountIDs = a} :: DescribeSourceServersRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    DescribeSourceServersRequestFilters
+  where
+  hashWithSalt
+    _salt
+    DescribeSourceServersRequestFilters' {..} =
+      _salt
+        `Prelude.hashWithSalt` hardwareId
+        `Prelude.hashWithSalt` sourceServerIDs
+        `Prelude.hashWithSalt` stagingAccountIDs
+
+instance
+  Prelude.NFData
+    DescribeSourceServersRequestFilters
+  where
+  rnf DescribeSourceServersRequestFilters' {..} =
+    Prelude.rnf hardwareId
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+      `Prelude.seq` Prelude.rnf stagingAccountIDs
+
+instance
+  Data.ToJSON
+    DescribeSourceServersRequestFilters
+  where
+  toJSON DescribeSourceServersRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("hardwareId" Data..=) Prelude.<$> hardwareId,
+            ("sourceServerIDs" Data..=)
+              Prelude.<$> sourceServerIDs,
+            ("stagingAccountIDs" Data..=)
+              Prelude.<$> stagingAccountIDs
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/Disk.hs b/gen/Amazonka/DrS/Types/Disk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/Disk.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.Disk
+-- 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.DrS.Types.Disk 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
+
+-- | An object representing a data storage device on a server.
+--
+-- /See:/ 'newDisk' smart constructor.
+data Disk = Disk'
+  { -- | The amount of storage on the disk in bytes.
+    bytes :: Prelude.Maybe Prelude.Natural,
+    -- | The disk or device name.
+    deviceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Disk' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bytes', 'disk_bytes' - The amount of storage on the disk in bytes.
+--
+-- 'deviceName', 'disk_deviceName' - The disk or device name.
+newDisk ::
+  Disk
+newDisk =
+  Disk'
+    { bytes = Prelude.Nothing,
+      deviceName = Prelude.Nothing
+    }
+
+-- | The amount of storage on the disk in bytes.
+disk_bytes :: Lens.Lens' Disk (Prelude.Maybe Prelude.Natural)
+disk_bytes = Lens.lens (\Disk' {bytes} -> bytes) (\s@Disk' {} a -> s {bytes = a} :: Disk)
+
+-- | The disk or device name.
+disk_deviceName :: Lens.Lens' Disk (Prelude.Maybe Prelude.Text)
+disk_deviceName = Lens.lens (\Disk' {deviceName} -> deviceName) (\s@Disk' {} a -> s {deviceName = a} :: Disk)
+
+instance Data.FromJSON Disk where
+  parseJSON =
+    Data.withObject
+      "Disk"
+      ( \x ->
+          Disk'
+            Prelude.<$> (x Data..:? "bytes")
+            Prelude.<*> (x Data..:? "deviceName")
+      )
+
+instance Prelude.Hashable Disk where
+  hashWithSalt _salt Disk' {..} =
+    _salt
+      `Prelude.hashWithSalt` bytes
+      `Prelude.hashWithSalt` deviceName
+
+instance Prelude.NFData Disk where
+  rnf Disk' {..} =
+    Prelude.rnf bytes
+      `Prelude.seq` Prelude.rnf deviceName
diff --git a/gen/Amazonka/DrS/Types/EC2InstanceState.hs b/gen/Amazonka/DrS/Types/EC2InstanceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/EC2InstanceState.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.EC2InstanceState
+-- 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.DrS.Types.EC2InstanceState
+  ( EC2InstanceState
+      ( ..,
+        EC2InstanceState_NOT_FOUND,
+        EC2InstanceState_PENDING,
+        EC2InstanceState_RUNNING,
+        EC2InstanceState_SHUTTING_DOWN,
+        EC2InstanceState_STOPPED,
+        EC2InstanceState_STOPPING,
+        EC2InstanceState_TERMINATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EC2InstanceState = EC2InstanceState'
+  { fromEC2InstanceState ::
+      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 EC2InstanceState_NOT_FOUND :: EC2InstanceState
+pattern EC2InstanceState_NOT_FOUND = EC2InstanceState' "NOT_FOUND"
+
+pattern EC2InstanceState_PENDING :: EC2InstanceState
+pattern EC2InstanceState_PENDING = EC2InstanceState' "PENDING"
+
+pattern EC2InstanceState_RUNNING :: EC2InstanceState
+pattern EC2InstanceState_RUNNING = EC2InstanceState' "RUNNING"
+
+pattern EC2InstanceState_SHUTTING_DOWN :: EC2InstanceState
+pattern EC2InstanceState_SHUTTING_DOWN = EC2InstanceState' "SHUTTING-DOWN"
+
+pattern EC2InstanceState_STOPPED :: EC2InstanceState
+pattern EC2InstanceState_STOPPED = EC2InstanceState' "STOPPED"
+
+pattern EC2InstanceState_STOPPING :: EC2InstanceState
+pattern EC2InstanceState_STOPPING = EC2InstanceState' "STOPPING"
+
+pattern EC2InstanceState_TERMINATED :: EC2InstanceState
+pattern EC2InstanceState_TERMINATED = EC2InstanceState' "TERMINATED"
+
+{-# COMPLETE
+  EC2InstanceState_NOT_FOUND,
+  EC2InstanceState_PENDING,
+  EC2InstanceState_RUNNING,
+  EC2InstanceState_SHUTTING_DOWN,
+  EC2InstanceState_STOPPED,
+  EC2InstanceState_STOPPING,
+  EC2InstanceState_TERMINATED,
+  EC2InstanceState'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ExtensionStatus.hs b/gen/Amazonka/DrS/Types/ExtensionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ExtensionStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ExtensionStatus
+-- 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.DrS.Types.ExtensionStatus
+  ( ExtensionStatus
+      ( ..,
+        ExtensionStatus_EXTENDED,
+        ExtensionStatus_EXTENSION_ERROR,
+        ExtensionStatus_NOT_EXTENDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExtensionStatus = ExtensionStatus'
+  { fromExtensionStatus ::
+      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 ExtensionStatus_EXTENDED :: ExtensionStatus
+pattern ExtensionStatus_EXTENDED = ExtensionStatus' "EXTENDED"
+
+pattern ExtensionStatus_EXTENSION_ERROR :: ExtensionStatus
+pattern ExtensionStatus_EXTENSION_ERROR = ExtensionStatus' "EXTENSION_ERROR"
+
+pattern ExtensionStatus_NOT_EXTENDED :: ExtensionStatus
+pattern ExtensionStatus_NOT_EXTENDED = ExtensionStatus' "NOT_EXTENDED"
+
+{-# COMPLETE
+  ExtensionStatus_EXTENDED,
+  ExtensionStatus_EXTENSION_ERROR,
+  ExtensionStatus_NOT_EXTENDED,
+  ExtensionStatus'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/FailbackLaunchType.hs b/gen/Amazonka/DrS/Types/FailbackLaunchType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/FailbackLaunchType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.FailbackLaunchType
+-- 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.DrS.Types.FailbackLaunchType
+  ( FailbackLaunchType
+      ( ..,
+        FailbackLaunchType_DRILL,
+        FailbackLaunchType_RECOVERY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FailbackLaunchType = FailbackLaunchType'
+  { fromFailbackLaunchType ::
+      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 FailbackLaunchType_DRILL :: FailbackLaunchType
+pattern FailbackLaunchType_DRILL = FailbackLaunchType' "DRILL"
+
+pattern FailbackLaunchType_RECOVERY :: FailbackLaunchType
+pattern FailbackLaunchType_RECOVERY = FailbackLaunchType' "RECOVERY"
+
+{-# COMPLETE
+  FailbackLaunchType_DRILL,
+  FailbackLaunchType_RECOVERY,
+  FailbackLaunchType'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/FailbackReplicationError.hs b/gen/Amazonka/DrS/Types/FailbackReplicationError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/FailbackReplicationError.hs
@@ -0,0 +1,166 @@
+{-# 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.DrS.Types.FailbackReplicationError
+-- 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.DrS.Types.FailbackReplicationError
+  ( FailbackReplicationError
+      ( ..,
+        FailbackReplicationError_AGENT_NOT_SEEN,
+        FailbackReplicationError_FAILBACK_CLIENT_NOT_SEEN,
+        FailbackReplicationError_FAILED_GETTING_REPLICATION_STATE,
+        FailbackReplicationError_FAILED_TO_ATTACH_STAGING_DISKS,
+        FailbackReplicationError_FAILED_TO_AUTHENTICATE_WITH_SERVICE,
+        FailbackReplicationError_FAILED_TO_BOOT_REPLICATION_SERVER,
+        FailbackReplicationError_FAILED_TO_CONFIGURE_REPLICATION_SOFTWARE,
+        FailbackReplicationError_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER,
+        FailbackReplicationError_FAILED_TO_CREATE_SECURITY_GROUP,
+        FailbackReplicationError_FAILED_TO_CREATE_STAGING_DISKS,
+        FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE,
+        FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT,
+        FailbackReplicationError_FAILED_TO_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION,
+        FailbackReplicationError_FAILED_TO_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION,
+        FailbackReplicationError_FAILED_TO_LAUNCH_REPLICATION_SERVER,
+        FailbackReplicationError_FAILED_TO_PAIR_AGENT_WITH_REPLICATION_SOFTWARE,
+        FailbackReplicationError_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT,
+        FailbackReplicationError_FAILED_TO_START_DATA_TRANSFER,
+        FailbackReplicationError_NOT_CONVERGING,
+        FailbackReplicationError_SNAPSHOTS_FAILURE,
+        FailbackReplicationError_UNSTABLE_NETWORK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FailbackReplicationError = FailbackReplicationError'
+  { fromFailbackReplicationError ::
+      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 FailbackReplicationError_AGENT_NOT_SEEN :: FailbackReplicationError
+pattern FailbackReplicationError_AGENT_NOT_SEEN = FailbackReplicationError' "AGENT_NOT_SEEN"
+
+pattern FailbackReplicationError_FAILBACK_CLIENT_NOT_SEEN :: FailbackReplicationError
+pattern FailbackReplicationError_FAILBACK_CLIENT_NOT_SEEN = FailbackReplicationError' "FAILBACK_CLIENT_NOT_SEEN"
+
+pattern FailbackReplicationError_FAILED_GETTING_REPLICATION_STATE :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_GETTING_REPLICATION_STATE = FailbackReplicationError' "FAILED_GETTING_REPLICATION_STATE"
+
+pattern FailbackReplicationError_FAILED_TO_ATTACH_STAGING_DISKS :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_ATTACH_STAGING_DISKS = FailbackReplicationError' "FAILED_TO_ATTACH_STAGING_DISKS"
+
+pattern FailbackReplicationError_FAILED_TO_AUTHENTICATE_WITH_SERVICE :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_AUTHENTICATE_WITH_SERVICE = FailbackReplicationError' "FAILED_TO_AUTHENTICATE_WITH_SERVICE"
+
+pattern FailbackReplicationError_FAILED_TO_BOOT_REPLICATION_SERVER :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_BOOT_REPLICATION_SERVER = FailbackReplicationError' "FAILED_TO_BOOT_REPLICATION_SERVER"
+
+pattern FailbackReplicationError_FAILED_TO_CONFIGURE_REPLICATION_SOFTWARE :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_CONFIGURE_REPLICATION_SOFTWARE = FailbackReplicationError' "FAILED_TO_CONFIGURE_REPLICATION_SOFTWARE"
+
+pattern FailbackReplicationError_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER = FailbackReplicationError' "FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER"
+
+pattern FailbackReplicationError_FAILED_TO_CREATE_SECURITY_GROUP :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_CREATE_SECURITY_GROUP = FailbackReplicationError' "FAILED_TO_CREATE_SECURITY_GROUP"
+
+pattern FailbackReplicationError_FAILED_TO_CREATE_STAGING_DISKS :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_CREATE_STAGING_DISKS = FailbackReplicationError' "FAILED_TO_CREATE_STAGING_DISKS"
+
+pattern FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE = FailbackReplicationError' "FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE"
+
+pattern FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT = FailbackReplicationError' "FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT"
+
+pattern FailbackReplicationError_FAILED_TO_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION = FailbackReplicationError' "FAILED_TO_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION"
+
+pattern FailbackReplicationError_FAILED_TO_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION = FailbackReplicationError' "FAILED_TO_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION"
+
+pattern FailbackReplicationError_FAILED_TO_LAUNCH_REPLICATION_SERVER :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_LAUNCH_REPLICATION_SERVER = FailbackReplicationError' "FAILED_TO_LAUNCH_REPLICATION_SERVER"
+
+pattern FailbackReplicationError_FAILED_TO_PAIR_AGENT_WITH_REPLICATION_SOFTWARE :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_PAIR_AGENT_WITH_REPLICATION_SOFTWARE = FailbackReplicationError' "FAILED_TO_PAIR_AGENT_WITH_REPLICATION_SOFTWARE"
+
+pattern FailbackReplicationError_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT = FailbackReplicationError' "FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT"
+
+pattern FailbackReplicationError_FAILED_TO_START_DATA_TRANSFER :: FailbackReplicationError
+pattern FailbackReplicationError_FAILED_TO_START_DATA_TRANSFER = FailbackReplicationError' "FAILED_TO_START_DATA_TRANSFER"
+
+pattern FailbackReplicationError_NOT_CONVERGING :: FailbackReplicationError
+pattern FailbackReplicationError_NOT_CONVERGING = FailbackReplicationError' "NOT_CONVERGING"
+
+pattern FailbackReplicationError_SNAPSHOTS_FAILURE :: FailbackReplicationError
+pattern FailbackReplicationError_SNAPSHOTS_FAILURE = FailbackReplicationError' "SNAPSHOTS_FAILURE"
+
+pattern FailbackReplicationError_UNSTABLE_NETWORK :: FailbackReplicationError
+pattern FailbackReplicationError_UNSTABLE_NETWORK = FailbackReplicationError' "UNSTABLE_NETWORK"
+
+{-# COMPLETE
+  FailbackReplicationError_AGENT_NOT_SEEN,
+  FailbackReplicationError_FAILBACK_CLIENT_NOT_SEEN,
+  FailbackReplicationError_FAILED_GETTING_REPLICATION_STATE,
+  FailbackReplicationError_FAILED_TO_ATTACH_STAGING_DISKS,
+  FailbackReplicationError_FAILED_TO_AUTHENTICATE_WITH_SERVICE,
+  FailbackReplicationError_FAILED_TO_BOOT_REPLICATION_SERVER,
+  FailbackReplicationError_FAILED_TO_CONFIGURE_REPLICATION_SOFTWARE,
+  FailbackReplicationError_FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER,
+  FailbackReplicationError_FAILED_TO_CREATE_SECURITY_GROUP,
+  FailbackReplicationError_FAILED_TO_CREATE_STAGING_DISKS,
+  FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE,
+  FailbackReplicationError_FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT,
+  FailbackReplicationError_FAILED_TO_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION,
+  FailbackReplicationError_FAILED_TO_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION,
+  FailbackReplicationError_FAILED_TO_LAUNCH_REPLICATION_SERVER,
+  FailbackReplicationError_FAILED_TO_PAIR_AGENT_WITH_REPLICATION_SOFTWARE,
+  FailbackReplicationError_FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT,
+  FailbackReplicationError_FAILED_TO_START_DATA_TRANSFER,
+  FailbackReplicationError_NOT_CONVERGING,
+  FailbackReplicationError_SNAPSHOTS_FAILURE,
+  FailbackReplicationError_UNSTABLE_NETWORK,
+  FailbackReplicationError'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/FailbackState.hs b/gen/Amazonka/DrS/Types/FailbackState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/FailbackState.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.FailbackState
+-- 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.DrS.Types.FailbackState
+  ( FailbackState
+      ( ..,
+        FailbackState_FAILBACK_COMPLETED,
+        FailbackState_FAILBACK_ERROR,
+        FailbackState_FAILBACK_IN_PROGRESS,
+        FailbackState_FAILBACK_LAUNCH_STATE_NOT_AVAILABLE,
+        FailbackState_FAILBACK_NOT_READY_FOR_LAUNCH,
+        FailbackState_FAILBACK_NOT_STARTED,
+        FailbackState_FAILBACK_READY_FOR_LAUNCH
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FailbackState = FailbackState'
+  { fromFailbackState ::
+      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 FailbackState_FAILBACK_COMPLETED :: FailbackState
+pattern FailbackState_FAILBACK_COMPLETED = FailbackState' "FAILBACK_COMPLETED"
+
+pattern FailbackState_FAILBACK_ERROR :: FailbackState
+pattern FailbackState_FAILBACK_ERROR = FailbackState' "FAILBACK_ERROR"
+
+pattern FailbackState_FAILBACK_IN_PROGRESS :: FailbackState
+pattern FailbackState_FAILBACK_IN_PROGRESS = FailbackState' "FAILBACK_IN_PROGRESS"
+
+pattern FailbackState_FAILBACK_LAUNCH_STATE_NOT_AVAILABLE :: FailbackState
+pattern FailbackState_FAILBACK_LAUNCH_STATE_NOT_AVAILABLE = FailbackState' "FAILBACK_LAUNCH_STATE_NOT_AVAILABLE"
+
+pattern FailbackState_FAILBACK_NOT_READY_FOR_LAUNCH :: FailbackState
+pattern FailbackState_FAILBACK_NOT_READY_FOR_LAUNCH = FailbackState' "FAILBACK_NOT_READY_FOR_LAUNCH"
+
+pattern FailbackState_FAILBACK_NOT_STARTED :: FailbackState
+pattern FailbackState_FAILBACK_NOT_STARTED = FailbackState' "FAILBACK_NOT_STARTED"
+
+pattern FailbackState_FAILBACK_READY_FOR_LAUNCH :: FailbackState
+pattern FailbackState_FAILBACK_READY_FOR_LAUNCH = FailbackState' "FAILBACK_READY_FOR_LAUNCH"
+
+{-# COMPLETE
+  FailbackState_FAILBACK_COMPLETED,
+  FailbackState_FAILBACK_ERROR,
+  FailbackState_FAILBACK_IN_PROGRESS,
+  FailbackState_FAILBACK_LAUNCH_STATE_NOT_AVAILABLE,
+  FailbackState_FAILBACK_NOT_READY_FOR_LAUNCH,
+  FailbackState_FAILBACK_NOT_STARTED,
+  FailbackState_FAILBACK_READY_FOR_LAUNCH,
+  FailbackState'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/IdentificationHints.hs b/gen/Amazonka/DrS/Types/IdentificationHints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/IdentificationHints.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.IdentificationHints
+-- 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.DrS.Types.IdentificationHints 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
+
+-- | Hints used to uniquely identify a machine.
+--
+-- /See:/ 'newIdentificationHints' smart constructor.
+data IdentificationHints = IdentificationHints'
+  { -- | AWS Instance ID identification hint.
+    awsInstanceID :: Prelude.Maybe Prelude.Text,
+    -- | Fully Qualified Domain Name identification hint.
+    fqdn :: Prelude.Maybe Prelude.Text,
+    -- | Hostname identification hint.
+    hostname :: Prelude.Maybe Prelude.Text,
+    -- | vCenter VM path identification hint.
+    vmWareUuid :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IdentificationHints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'awsInstanceID', 'identificationHints_awsInstanceID' - AWS Instance ID identification hint.
+--
+-- 'fqdn', 'identificationHints_fqdn' - Fully Qualified Domain Name identification hint.
+--
+-- 'hostname', 'identificationHints_hostname' - Hostname identification hint.
+--
+-- 'vmWareUuid', 'identificationHints_vmWareUuid' - vCenter VM path identification hint.
+newIdentificationHints ::
+  IdentificationHints
+newIdentificationHints =
+  IdentificationHints'
+    { awsInstanceID =
+        Prelude.Nothing,
+      fqdn = Prelude.Nothing,
+      hostname = Prelude.Nothing,
+      vmWareUuid = Prelude.Nothing
+    }
+
+-- | AWS Instance ID identification hint.
+identificationHints_awsInstanceID :: Lens.Lens' IdentificationHints (Prelude.Maybe Prelude.Text)
+identificationHints_awsInstanceID = Lens.lens (\IdentificationHints' {awsInstanceID} -> awsInstanceID) (\s@IdentificationHints' {} a -> s {awsInstanceID = a} :: IdentificationHints)
+
+-- | Fully Qualified Domain Name identification hint.
+identificationHints_fqdn :: Lens.Lens' IdentificationHints (Prelude.Maybe Prelude.Text)
+identificationHints_fqdn = Lens.lens (\IdentificationHints' {fqdn} -> fqdn) (\s@IdentificationHints' {} a -> s {fqdn = a} :: IdentificationHints)
+
+-- | Hostname identification hint.
+identificationHints_hostname :: Lens.Lens' IdentificationHints (Prelude.Maybe Prelude.Text)
+identificationHints_hostname = Lens.lens (\IdentificationHints' {hostname} -> hostname) (\s@IdentificationHints' {} a -> s {hostname = a} :: IdentificationHints)
+
+-- | vCenter VM path identification hint.
+identificationHints_vmWareUuid :: Lens.Lens' IdentificationHints (Prelude.Maybe Prelude.Text)
+identificationHints_vmWareUuid = Lens.lens (\IdentificationHints' {vmWareUuid} -> vmWareUuid) (\s@IdentificationHints' {} a -> s {vmWareUuid = a} :: IdentificationHints)
+
+instance Data.FromJSON IdentificationHints where
+  parseJSON =
+    Data.withObject
+      "IdentificationHints"
+      ( \x ->
+          IdentificationHints'
+            Prelude.<$> (x Data..:? "awsInstanceID")
+            Prelude.<*> (x Data..:? "fqdn")
+            Prelude.<*> (x Data..:? "hostname")
+            Prelude.<*> (x Data..:? "vmWareUuid")
+      )
+
+instance Prelude.Hashable IdentificationHints where
+  hashWithSalt _salt IdentificationHints' {..} =
+    _salt
+      `Prelude.hashWithSalt` awsInstanceID
+      `Prelude.hashWithSalt` fqdn
+      `Prelude.hashWithSalt` hostname
+      `Prelude.hashWithSalt` vmWareUuid
+
+instance Prelude.NFData IdentificationHints where
+  rnf IdentificationHints' {..} =
+    Prelude.rnf awsInstanceID
+      `Prelude.seq` Prelude.rnf fqdn
+      `Prelude.seq` Prelude.rnf hostname
+      `Prelude.seq` Prelude.rnf vmWareUuid
diff --git a/gen/Amazonka/DrS/Types/InitiatedBy.hs b/gen/Amazonka/DrS/Types/InitiatedBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/InitiatedBy.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.InitiatedBy
+-- 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.DrS.Types.InitiatedBy
+  ( InitiatedBy
+      ( ..,
+        InitiatedBy_DIAGNOSTIC,
+        InitiatedBy_FAILBACK,
+        InitiatedBy_START_DRILL,
+        InitiatedBy_START_RECOVERY,
+        InitiatedBy_TARGET_ACCOUNT,
+        InitiatedBy_TERMINATE_RECOVERY_INSTANCES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InitiatedBy = InitiatedBy'
+  { fromInitiatedBy ::
+      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 InitiatedBy_DIAGNOSTIC :: InitiatedBy
+pattern InitiatedBy_DIAGNOSTIC = InitiatedBy' "DIAGNOSTIC"
+
+pattern InitiatedBy_FAILBACK :: InitiatedBy
+pattern InitiatedBy_FAILBACK = InitiatedBy' "FAILBACK"
+
+pattern InitiatedBy_START_DRILL :: InitiatedBy
+pattern InitiatedBy_START_DRILL = InitiatedBy' "START_DRILL"
+
+pattern InitiatedBy_START_RECOVERY :: InitiatedBy
+pattern InitiatedBy_START_RECOVERY = InitiatedBy' "START_RECOVERY"
+
+pattern InitiatedBy_TARGET_ACCOUNT :: InitiatedBy
+pattern InitiatedBy_TARGET_ACCOUNT = InitiatedBy' "TARGET_ACCOUNT"
+
+pattern InitiatedBy_TERMINATE_RECOVERY_INSTANCES :: InitiatedBy
+pattern InitiatedBy_TERMINATE_RECOVERY_INSTANCES = InitiatedBy' "TERMINATE_RECOVERY_INSTANCES"
+
+{-# COMPLETE
+  InitiatedBy_DIAGNOSTIC,
+  InitiatedBy_FAILBACK,
+  InitiatedBy_START_DRILL,
+  InitiatedBy_START_RECOVERY,
+  InitiatedBy_TARGET_ACCOUNT,
+  InitiatedBy_TERMINATE_RECOVERY_INSTANCES,
+  InitiatedBy'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/Job.hs b/gen/Amazonka/DrS/Types/Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/Job.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.Job
+-- 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.DrS.Types.Job where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.InitiatedBy
+import Amazonka.DrS.Types.JobStatus
+import Amazonka.DrS.Types.JobType
+import Amazonka.DrS.Types.ParticipatingServer
+import qualified Amazonka.Prelude as Prelude
+
+-- | A job is an asynchronous workflow.
+--
+-- /See:/ 'newJob' smart constructor.
+data Job = Job'
+  { -- | The ARN of a Job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time of when the Job was created.
+    creationDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The date and time of when the Job ended.
+    endDateTime :: Prelude.Maybe Prelude.Text,
+    -- | A string representing who initiated the Job.
+    initiatedBy :: Prelude.Maybe InitiatedBy,
+    -- | A list of servers that the Job is acting upon.
+    participatingServers :: Prelude.Maybe [ParticipatingServer],
+    -- | The status of the Job.
+    status :: Prelude.Maybe JobStatus,
+    -- | A list of tags associated with the Job.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The type of the Job.
+    type' :: Prelude.Maybe JobType,
+    -- | The ID of the Job.
+    jobID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Job' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'job_arn' - The ARN of a Job.
+--
+-- 'creationDateTime', 'job_creationDateTime' - The date and time of when the Job was created.
+--
+-- 'endDateTime', 'job_endDateTime' - The date and time of when the Job ended.
+--
+-- 'initiatedBy', 'job_initiatedBy' - A string representing who initiated the Job.
+--
+-- 'participatingServers', 'job_participatingServers' - A list of servers that the Job is acting upon.
+--
+-- 'status', 'job_status' - The status of the Job.
+--
+-- 'tags', 'job_tags' - A list of tags associated with the Job.
+--
+-- 'type'', 'job_type' - The type of the Job.
+--
+-- 'jobID', 'job_jobID' - The ID of the Job.
+newJob ::
+  -- | 'jobID'
+  Prelude.Text ->
+  Job
+newJob pJobID_ =
+  Job'
+    { arn = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      endDateTime = Prelude.Nothing,
+      initiatedBy = Prelude.Nothing,
+      participatingServers = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      jobID = pJobID_
+    }
+
+-- | The ARN of a Job.
+job_arn :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_arn = Lens.lens (\Job' {arn} -> arn) (\s@Job' {} a -> s {arn = a} :: Job)
+
+-- | The date and time of when the Job was created.
+job_creationDateTime :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_creationDateTime = Lens.lens (\Job' {creationDateTime} -> creationDateTime) (\s@Job' {} a -> s {creationDateTime = a} :: Job)
+
+-- | The date and time of when the Job ended.
+job_endDateTime :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_endDateTime = Lens.lens (\Job' {endDateTime} -> endDateTime) (\s@Job' {} a -> s {endDateTime = a} :: Job)
+
+-- | A string representing who initiated the Job.
+job_initiatedBy :: Lens.Lens' Job (Prelude.Maybe InitiatedBy)
+job_initiatedBy = Lens.lens (\Job' {initiatedBy} -> initiatedBy) (\s@Job' {} a -> s {initiatedBy = a} :: Job)
+
+-- | A list of servers that the Job is acting upon.
+job_participatingServers :: Lens.Lens' Job (Prelude.Maybe [ParticipatingServer])
+job_participatingServers = Lens.lens (\Job' {participatingServers} -> participatingServers) (\s@Job' {} a -> s {participatingServers = a} :: Job) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the Job.
+job_status :: Lens.Lens' Job (Prelude.Maybe JobStatus)
+job_status = Lens.lens (\Job' {status} -> status) (\s@Job' {} a -> s {status = a} :: Job)
+
+-- | A list of tags associated with the Job.
+job_tags :: Lens.Lens' Job (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+job_tags = Lens.lens (\Job' {tags} -> tags) (\s@Job' {} a -> s {tags = a} :: Job) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The type of the Job.
+job_type :: Lens.Lens' Job (Prelude.Maybe JobType)
+job_type = Lens.lens (\Job' {type'} -> type') (\s@Job' {} a -> s {type' = a} :: Job)
+
+-- | The ID of the Job.
+job_jobID :: Lens.Lens' Job Prelude.Text
+job_jobID = Lens.lens (\Job' {jobID} -> jobID) (\s@Job' {} a -> s {jobID = a} :: Job)
+
+instance Data.FromJSON Job where
+  parseJSON =
+    Data.withObject
+      "Job"
+      ( \x ->
+          Job'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "endDateTime")
+            Prelude.<*> (x Data..:? "initiatedBy")
+            Prelude.<*> ( x
+                            Data..:? "participatingServers"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..: "jobID")
+      )
+
+instance Prelude.Hashable Job where
+  hashWithSalt _salt Job' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` endDateTime
+      `Prelude.hashWithSalt` initiatedBy
+      `Prelude.hashWithSalt` participatingServers
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` jobID
+
+instance Prelude.NFData Job where
+  rnf Job' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf endDateTime
+      `Prelude.seq` Prelude.rnf initiatedBy
+      `Prelude.seq` Prelude.rnf participatingServers
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf jobID
diff --git a/gen/Amazonka/DrS/Types/JobLog.hs b/gen/Amazonka/DrS/Types/JobLog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/JobLog.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.JobLog
+-- 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.DrS.Types.JobLog where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.JobLogEvent
+import Amazonka.DrS.Types.JobLogEventData
+import qualified Amazonka.Prelude as Prelude
+
+-- | A log outputted by a Job.
+--
+-- /See:/ 'newJobLog' smart constructor.
+data JobLog = JobLog'
+  { -- | The event represents the type of a log.
+    event :: Prelude.Maybe JobLogEvent,
+    -- | Metadata associated with a Job log.
+    eventData :: Prelude.Maybe JobLogEventData,
+    -- | The date and time the log was taken.
+    logDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobLog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'event', 'jobLog_event' - The event represents the type of a log.
+--
+-- 'eventData', 'jobLog_eventData' - Metadata associated with a Job log.
+--
+-- 'logDateTime', 'jobLog_logDateTime' - The date and time the log was taken.
+newJobLog ::
+  JobLog
+newJobLog =
+  JobLog'
+    { event = Prelude.Nothing,
+      eventData = Prelude.Nothing,
+      logDateTime = Prelude.Nothing
+    }
+
+-- | The event represents the type of a log.
+jobLog_event :: Lens.Lens' JobLog (Prelude.Maybe JobLogEvent)
+jobLog_event = Lens.lens (\JobLog' {event} -> event) (\s@JobLog' {} a -> s {event = a} :: JobLog)
+
+-- | Metadata associated with a Job log.
+jobLog_eventData :: Lens.Lens' JobLog (Prelude.Maybe JobLogEventData)
+jobLog_eventData = Lens.lens (\JobLog' {eventData} -> eventData) (\s@JobLog' {} a -> s {eventData = a} :: JobLog)
+
+-- | The date and time the log was taken.
+jobLog_logDateTime :: Lens.Lens' JobLog (Prelude.Maybe Prelude.Text)
+jobLog_logDateTime = Lens.lens (\JobLog' {logDateTime} -> logDateTime) (\s@JobLog' {} a -> s {logDateTime = a} :: JobLog)
+
+instance Data.FromJSON JobLog where
+  parseJSON =
+    Data.withObject
+      "JobLog"
+      ( \x ->
+          JobLog'
+            Prelude.<$> (x Data..:? "event")
+            Prelude.<*> (x Data..:? "eventData")
+            Prelude.<*> (x Data..:? "logDateTime")
+      )
+
+instance Prelude.Hashable JobLog where
+  hashWithSalt _salt JobLog' {..} =
+    _salt
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` eventData
+      `Prelude.hashWithSalt` logDateTime
+
+instance Prelude.NFData JobLog where
+  rnf JobLog' {..} =
+    Prelude.rnf event
+      `Prelude.seq` Prelude.rnf eventData
+      `Prelude.seq` Prelude.rnf logDateTime
diff --git a/gen/Amazonka/DrS/Types/JobLogEvent.hs b/gen/Amazonka/DrS/Types/JobLogEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/JobLogEvent.hs
@@ -0,0 +1,146 @@
+{-# 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.DrS.Types.JobLogEvent
+-- 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.DrS.Types.JobLogEvent
+  ( JobLogEvent
+      ( ..,
+        JobLogEvent_CLEANUP_END,
+        JobLogEvent_CLEANUP_FAIL,
+        JobLogEvent_CLEANUP_START,
+        JobLogEvent_CONVERSION_END,
+        JobLogEvent_CONVERSION_FAIL,
+        JobLogEvent_CONVERSION_START,
+        JobLogEvent_JOB_CANCEL,
+        JobLogEvent_JOB_END,
+        JobLogEvent_JOB_START,
+        JobLogEvent_LAUNCH_FAILED,
+        JobLogEvent_LAUNCH_START,
+        JobLogEvent_SERVER_SKIPPED,
+        JobLogEvent_SNAPSHOT_END,
+        JobLogEvent_SNAPSHOT_FAIL,
+        JobLogEvent_SNAPSHOT_START,
+        JobLogEvent_USING_PREVIOUS_SNAPSHOT,
+        JobLogEvent_USING_PREVIOUS_SNAPSHOT_FAILED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobLogEvent = JobLogEvent'
+  { fromJobLogEvent ::
+      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 JobLogEvent_CLEANUP_END :: JobLogEvent
+pattern JobLogEvent_CLEANUP_END = JobLogEvent' "CLEANUP_END"
+
+pattern JobLogEvent_CLEANUP_FAIL :: JobLogEvent
+pattern JobLogEvent_CLEANUP_FAIL = JobLogEvent' "CLEANUP_FAIL"
+
+pattern JobLogEvent_CLEANUP_START :: JobLogEvent
+pattern JobLogEvent_CLEANUP_START = JobLogEvent' "CLEANUP_START"
+
+pattern JobLogEvent_CONVERSION_END :: JobLogEvent
+pattern JobLogEvent_CONVERSION_END = JobLogEvent' "CONVERSION_END"
+
+pattern JobLogEvent_CONVERSION_FAIL :: JobLogEvent
+pattern JobLogEvent_CONVERSION_FAIL = JobLogEvent' "CONVERSION_FAIL"
+
+pattern JobLogEvent_CONVERSION_START :: JobLogEvent
+pattern JobLogEvent_CONVERSION_START = JobLogEvent' "CONVERSION_START"
+
+pattern JobLogEvent_JOB_CANCEL :: JobLogEvent
+pattern JobLogEvent_JOB_CANCEL = JobLogEvent' "JOB_CANCEL"
+
+pattern JobLogEvent_JOB_END :: JobLogEvent
+pattern JobLogEvent_JOB_END = JobLogEvent' "JOB_END"
+
+pattern JobLogEvent_JOB_START :: JobLogEvent
+pattern JobLogEvent_JOB_START = JobLogEvent' "JOB_START"
+
+pattern JobLogEvent_LAUNCH_FAILED :: JobLogEvent
+pattern JobLogEvent_LAUNCH_FAILED = JobLogEvent' "LAUNCH_FAILED"
+
+pattern JobLogEvent_LAUNCH_START :: JobLogEvent
+pattern JobLogEvent_LAUNCH_START = JobLogEvent' "LAUNCH_START"
+
+pattern JobLogEvent_SERVER_SKIPPED :: JobLogEvent
+pattern JobLogEvent_SERVER_SKIPPED = JobLogEvent' "SERVER_SKIPPED"
+
+pattern JobLogEvent_SNAPSHOT_END :: JobLogEvent
+pattern JobLogEvent_SNAPSHOT_END = JobLogEvent' "SNAPSHOT_END"
+
+pattern JobLogEvent_SNAPSHOT_FAIL :: JobLogEvent
+pattern JobLogEvent_SNAPSHOT_FAIL = JobLogEvent' "SNAPSHOT_FAIL"
+
+pattern JobLogEvent_SNAPSHOT_START :: JobLogEvent
+pattern JobLogEvent_SNAPSHOT_START = JobLogEvent' "SNAPSHOT_START"
+
+pattern JobLogEvent_USING_PREVIOUS_SNAPSHOT :: JobLogEvent
+pattern JobLogEvent_USING_PREVIOUS_SNAPSHOT = JobLogEvent' "USING_PREVIOUS_SNAPSHOT"
+
+pattern JobLogEvent_USING_PREVIOUS_SNAPSHOT_FAILED :: JobLogEvent
+pattern JobLogEvent_USING_PREVIOUS_SNAPSHOT_FAILED = JobLogEvent' "USING_PREVIOUS_SNAPSHOT_FAILED"
+
+{-# COMPLETE
+  JobLogEvent_CLEANUP_END,
+  JobLogEvent_CLEANUP_FAIL,
+  JobLogEvent_CLEANUP_START,
+  JobLogEvent_CONVERSION_END,
+  JobLogEvent_CONVERSION_FAIL,
+  JobLogEvent_CONVERSION_START,
+  JobLogEvent_JOB_CANCEL,
+  JobLogEvent_JOB_END,
+  JobLogEvent_JOB_START,
+  JobLogEvent_LAUNCH_FAILED,
+  JobLogEvent_LAUNCH_START,
+  JobLogEvent_SERVER_SKIPPED,
+  JobLogEvent_SNAPSHOT_END,
+  JobLogEvent_SNAPSHOT_FAIL,
+  JobLogEvent_SNAPSHOT_START,
+  JobLogEvent_USING_PREVIOUS_SNAPSHOT,
+  JobLogEvent_USING_PREVIOUS_SNAPSHOT_FAILED,
+  JobLogEvent'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/JobLogEventData.hs b/gen/Amazonka/DrS/Types/JobLogEventData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/JobLogEventData.hs
@@ -0,0 +1,122 @@
+{-# 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.DrS.Types.JobLogEventData
+-- 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.DrS.Types.JobLogEventData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.ConversionProperties
+import qualified Amazonka.Prelude as Prelude
+
+-- | Metadata associated with a Job log.
+--
+-- /See:/ 'newJobLogEventData' smart constructor.
+data JobLogEventData = JobLogEventData'
+  { -- | Properties of a conversion job
+    conversionProperties :: Prelude.Maybe ConversionProperties,
+    -- | The ID of a conversion server.
+    conversionServerID :: Prelude.Maybe Prelude.Text,
+    -- | A string representing a job error.
+    rawError :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a Source Server.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a Recovery Instance.
+    targetInstanceID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobLogEventData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conversionProperties', 'jobLogEventData_conversionProperties' - Properties of a conversion job
+--
+-- 'conversionServerID', 'jobLogEventData_conversionServerID' - The ID of a conversion server.
+--
+-- 'rawError', 'jobLogEventData_rawError' - A string representing a job error.
+--
+-- 'sourceServerID', 'jobLogEventData_sourceServerID' - The ID of a Source Server.
+--
+-- 'targetInstanceID', 'jobLogEventData_targetInstanceID' - The ID of a Recovery Instance.
+newJobLogEventData ::
+  JobLogEventData
+newJobLogEventData =
+  JobLogEventData'
+    { conversionProperties =
+        Prelude.Nothing,
+      conversionServerID = Prelude.Nothing,
+      rawError = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      targetInstanceID = Prelude.Nothing
+    }
+
+-- | Properties of a conversion job
+jobLogEventData_conversionProperties :: Lens.Lens' JobLogEventData (Prelude.Maybe ConversionProperties)
+jobLogEventData_conversionProperties = Lens.lens (\JobLogEventData' {conversionProperties} -> conversionProperties) (\s@JobLogEventData' {} a -> s {conversionProperties = a} :: JobLogEventData)
+
+-- | The ID of a conversion server.
+jobLogEventData_conversionServerID :: Lens.Lens' JobLogEventData (Prelude.Maybe Prelude.Text)
+jobLogEventData_conversionServerID = Lens.lens (\JobLogEventData' {conversionServerID} -> conversionServerID) (\s@JobLogEventData' {} a -> s {conversionServerID = a} :: JobLogEventData)
+
+-- | A string representing a job error.
+jobLogEventData_rawError :: Lens.Lens' JobLogEventData (Prelude.Maybe Prelude.Text)
+jobLogEventData_rawError = Lens.lens (\JobLogEventData' {rawError} -> rawError) (\s@JobLogEventData' {} a -> s {rawError = a} :: JobLogEventData)
+
+-- | The ID of a Source Server.
+jobLogEventData_sourceServerID :: Lens.Lens' JobLogEventData (Prelude.Maybe Prelude.Text)
+jobLogEventData_sourceServerID = Lens.lens (\JobLogEventData' {sourceServerID} -> sourceServerID) (\s@JobLogEventData' {} a -> s {sourceServerID = a} :: JobLogEventData)
+
+-- | The ID of a Recovery Instance.
+jobLogEventData_targetInstanceID :: Lens.Lens' JobLogEventData (Prelude.Maybe Prelude.Text)
+jobLogEventData_targetInstanceID = Lens.lens (\JobLogEventData' {targetInstanceID} -> targetInstanceID) (\s@JobLogEventData' {} a -> s {targetInstanceID = a} :: JobLogEventData)
+
+instance Data.FromJSON JobLogEventData where
+  parseJSON =
+    Data.withObject
+      "JobLogEventData"
+      ( \x ->
+          JobLogEventData'
+            Prelude.<$> (x Data..:? "conversionProperties")
+            Prelude.<*> (x Data..:? "conversionServerID")
+            Prelude.<*> (x Data..:? "rawError")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "targetInstanceID")
+      )
+
+instance Prelude.Hashable JobLogEventData where
+  hashWithSalt _salt JobLogEventData' {..} =
+    _salt
+      `Prelude.hashWithSalt` conversionProperties
+      `Prelude.hashWithSalt` conversionServerID
+      `Prelude.hashWithSalt` rawError
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` targetInstanceID
+
+instance Prelude.NFData JobLogEventData where
+  rnf JobLogEventData' {..} =
+    Prelude.rnf conversionProperties
+      `Prelude.seq` Prelude.rnf conversionServerID
+      `Prelude.seq` Prelude.rnf rawError
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf targetInstanceID
diff --git a/gen/Amazonka/DrS/Types/JobStatus.hs b/gen/Amazonka/DrS/Types/JobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/JobStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.JobStatus
+-- 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.DrS.Types.JobStatus
+  ( JobStatus
+      ( ..,
+        JobStatus_COMPLETED,
+        JobStatus_PENDING,
+        JobStatus_STARTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobStatus = JobStatus'
+  { fromJobStatus ::
+      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 JobStatus_COMPLETED :: JobStatus
+pattern JobStatus_COMPLETED = JobStatus' "COMPLETED"
+
+pattern JobStatus_PENDING :: JobStatus
+pattern JobStatus_PENDING = JobStatus' "PENDING"
+
+pattern JobStatus_STARTED :: JobStatus
+pattern JobStatus_STARTED = JobStatus' "STARTED"
+
+{-# COMPLETE
+  JobStatus_COMPLETED,
+  JobStatus_PENDING,
+  JobStatus_STARTED,
+  JobStatus'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/JobType.hs b/gen/Amazonka/DrS/Types/JobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/JobType.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.JobType
+-- 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.DrS.Types.JobType
+  ( JobType
+      ( ..,
+        JobType_CREATE_CONVERTED_SNAPSHOT,
+        JobType_LAUNCH,
+        JobType_TERMINATE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobType = JobType' {fromJobType :: 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 JobType_CREATE_CONVERTED_SNAPSHOT :: JobType
+pattern JobType_CREATE_CONVERTED_SNAPSHOT = JobType' "CREATE_CONVERTED_SNAPSHOT"
+
+pattern JobType_LAUNCH :: JobType
+pattern JobType_LAUNCH = JobType' "LAUNCH"
+
+pattern JobType_TERMINATE :: JobType
+pattern JobType_TERMINATE = JobType' "TERMINATE"
+
+{-# COMPLETE
+  JobType_CREATE_CONVERTED_SNAPSHOT,
+  JobType_LAUNCH,
+  JobType_TERMINATE,
+  JobType'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/LastLaunchResult.hs b/gen/Amazonka/DrS/Types/LastLaunchResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LastLaunchResult.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.LastLaunchResult
+-- 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.DrS.Types.LastLaunchResult
+  ( LastLaunchResult
+      ( ..,
+        LastLaunchResult_FAILED,
+        LastLaunchResult_NOT_STARTED,
+        LastLaunchResult_PENDING,
+        LastLaunchResult_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LastLaunchResult = LastLaunchResult'
+  { fromLastLaunchResult ::
+      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 LastLaunchResult_FAILED :: LastLaunchResult
+pattern LastLaunchResult_FAILED = LastLaunchResult' "FAILED"
+
+pattern LastLaunchResult_NOT_STARTED :: LastLaunchResult
+pattern LastLaunchResult_NOT_STARTED = LastLaunchResult' "NOT_STARTED"
+
+pattern LastLaunchResult_PENDING :: LastLaunchResult
+pattern LastLaunchResult_PENDING = LastLaunchResult' "PENDING"
+
+pattern LastLaunchResult_SUCCEEDED :: LastLaunchResult
+pattern LastLaunchResult_SUCCEEDED = LastLaunchResult' "SUCCEEDED"
+
+{-# COMPLETE
+  LastLaunchResult_FAILED,
+  LastLaunchResult_NOT_STARTED,
+  LastLaunchResult_PENDING,
+  LastLaunchResult_SUCCEEDED,
+  LastLaunchResult'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/LastLaunchType.hs b/gen/Amazonka/DrS/Types/LastLaunchType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LastLaunchType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.LastLaunchType
+-- 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.DrS.Types.LastLaunchType
+  ( LastLaunchType
+      ( ..,
+        LastLaunchType_DRILL,
+        LastLaunchType_RECOVERY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LastLaunchType = LastLaunchType'
+  { fromLastLaunchType ::
+      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 LastLaunchType_DRILL :: LastLaunchType
+pattern LastLaunchType_DRILL = LastLaunchType' "DRILL"
+
+pattern LastLaunchType_RECOVERY :: LastLaunchType
+pattern LastLaunchType_RECOVERY = LastLaunchType' "RECOVERY"
+
+{-# COMPLETE
+  LastLaunchType_DRILL,
+  LastLaunchType_RECOVERY,
+  LastLaunchType'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/LaunchConfiguration.hs b/gen/Amazonka/DrS/Types/LaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LaunchConfiguration.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.LaunchConfiguration
+-- 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.DrS.Types.LaunchConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.LaunchDisposition
+import Amazonka.DrS.Types.Licensing
+import Amazonka.DrS.Types.TargetInstanceTypeRightSizingMethod
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newLaunchConfiguration' smart constructor.
+data LaunchConfiguration = LaunchConfiguration'
+  { -- | Whether we should copy the Private IP of the Source Server to the
+    -- Recovery Instance.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Whether we want to copy the tags of the Source Server to the EC2 machine
+    -- of the Recovery Instance.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | The EC2 launch template ID of this launch configuration.
+    ec2LaunchTemplateID :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Recovery Instance in EC2 after the recovery operation.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    -- | The licensing configuration to be used for this launch configuration.
+    licensing :: Prelude.Maybe Licensing,
+    -- | The name of the launch configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Source Server for this launch configuration.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | Whether Elastic Disaster Recovery should try to automatically choose the
+    -- instance type that best matches the OS, CPU, and RAM of your Source
+    -- Server.
+    targetInstanceTypeRightSizingMethod :: Prelude.Maybe TargetInstanceTypeRightSizingMethod
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'copyPrivateIp', 'launchConfiguration_copyPrivateIp' - Whether we should copy the Private IP of the Source Server to the
+-- Recovery Instance.
+--
+-- 'copyTags', 'launchConfiguration_copyTags' - Whether we want to copy the tags of the Source Server to the EC2 machine
+-- of the Recovery Instance.
+--
+-- 'ec2LaunchTemplateID', 'launchConfiguration_ec2LaunchTemplateID' - The EC2 launch template ID of this launch configuration.
+--
+-- 'launchDisposition', 'launchConfiguration_launchDisposition' - The state of the Recovery Instance in EC2 after the recovery operation.
+--
+-- 'licensing', 'launchConfiguration_licensing' - The licensing configuration to be used for this launch configuration.
+--
+-- 'name', 'launchConfiguration_name' - The name of the launch configuration.
+--
+-- 'sourceServerID', 'launchConfiguration_sourceServerID' - The ID of the Source Server for this launch configuration.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'launchConfiguration_targetInstanceTypeRightSizingMethod' - Whether Elastic Disaster Recovery should try to automatically choose the
+-- instance type that best matches the OS, CPU, and RAM of your Source
+-- Server.
+newLaunchConfiguration ::
+  LaunchConfiguration
+newLaunchConfiguration =
+  LaunchConfiguration'
+    { copyPrivateIp =
+        Prelude.Nothing,
+      copyTags = Prelude.Nothing,
+      ec2LaunchTemplateID = Prelude.Nothing,
+      launchDisposition = Prelude.Nothing,
+      licensing = Prelude.Nothing,
+      name = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      targetInstanceTypeRightSizingMethod =
+        Prelude.Nothing
+    }
+
+-- | Whether we should copy the Private IP of the Source Server to the
+-- Recovery Instance.
+launchConfiguration_copyPrivateIp :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Bool)
+launchConfiguration_copyPrivateIp = Lens.lens (\LaunchConfiguration' {copyPrivateIp} -> copyPrivateIp) (\s@LaunchConfiguration' {} a -> s {copyPrivateIp = a} :: LaunchConfiguration)
+
+-- | Whether we want to copy the tags of the Source Server to the EC2 machine
+-- of the Recovery Instance.
+launchConfiguration_copyTags :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Bool)
+launchConfiguration_copyTags = Lens.lens (\LaunchConfiguration' {copyTags} -> copyTags) (\s@LaunchConfiguration' {} a -> s {copyTags = a} :: LaunchConfiguration)
+
+-- | The EC2 launch template ID of this launch configuration.
+launchConfiguration_ec2LaunchTemplateID :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_ec2LaunchTemplateID = Lens.lens (\LaunchConfiguration' {ec2LaunchTemplateID} -> ec2LaunchTemplateID) (\s@LaunchConfiguration' {} a -> s {ec2LaunchTemplateID = a} :: LaunchConfiguration)
+
+-- | The state of the Recovery Instance in EC2 after the recovery operation.
+launchConfiguration_launchDisposition :: Lens.Lens' LaunchConfiguration (Prelude.Maybe LaunchDisposition)
+launchConfiguration_launchDisposition = Lens.lens (\LaunchConfiguration' {launchDisposition} -> launchDisposition) (\s@LaunchConfiguration' {} a -> s {launchDisposition = a} :: LaunchConfiguration)
+
+-- | The licensing configuration to be used for this launch configuration.
+launchConfiguration_licensing :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Licensing)
+launchConfiguration_licensing = Lens.lens (\LaunchConfiguration' {licensing} -> licensing) (\s@LaunchConfiguration' {} a -> s {licensing = a} :: LaunchConfiguration)
+
+-- | The name of the launch configuration.
+launchConfiguration_name :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_name = Lens.lens (\LaunchConfiguration' {name} -> name) (\s@LaunchConfiguration' {} a -> s {name = a} :: LaunchConfiguration)
+
+-- | The ID of the Source Server for this launch configuration.
+launchConfiguration_sourceServerID :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_sourceServerID = Lens.lens (\LaunchConfiguration' {sourceServerID} -> sourceServerID) (\s@LaunchConfiguration' {} a -> s {sourceServerID = a} :: LaunchConfiguration)
+
+-- | Whether Elastic Disaster Recovery should try to automatically choose the
+-- instance type that best matches the OS, CPU, and RAM of your Source
+-- Server.
+launchConfiguration_targetInstanceTypeRightSizingMethod :: Lens.Lens' LaunchConfiguration (Prelude.Maybe TargetInstanceTypeRightSizingMethod)
+launchConfiguration_targetInstanceTypeRightSizingMethod = Lens.lens (\LaunchConfiguration' {targetInstanceTypeRightSizingMethod} -> targetInstanceTypeRightSizingMethod) (\s@LaunchConfiguration' {} a -> s {targetInstanceTypeRightSizingMethod = a} :: LaunchConfiguration)
+
+instance Data.FromJSON LaunchConfiguration where
+  parseJSON =
+    Data.withObject
+      "LaunchConfiguration"
+      ( \x ->
+          LaunchConfiguration'
+            Prelude.<$> (x Data..:? "copyPrivateIp")
+            Prelude.<*> (x Data..:? "copyTags")
+            Prelude.<*> (x Data..:? "ec2LaunchTemplateID")
+            Prelude.<*> (x Data..:? "launchDisposition")
+            Prelude.<*> (x Data..:? "licensing")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "targetInstanceTypeRightSizingMethod")
+      )
+
+instance Prelude.Hashable LaunchConfiguration where
+  hashWithSalt _salt LaunchConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` copyPrivateIp
+      `Prelude.hashWithSalt` copyTags
+      `Prelude.hashWithSalt` ec2LaunchTemplateID
+      `Prelude.hashWithSalt` launchDisposition
+      `Prelude.hashWithSalt` licensing
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+
+instance Prelude.NFData LaunchConfiguration where
+  rnf LaunchConfiguration' {..} =
+    Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf ec2LaunchTemplateID
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf targetInstanceTypeRightSizingMethod
diff --git a/gen/Amazonka/DrS/Types/LaunchDisposition.hs b/gen/Amazonka/DrS/Types/LaunchDisposition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LaunchDisposition.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.LaunchDisposition
+-- 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.DrS.Types.LaunchDisposition
+  ( LaunchDisposition
+      ( ..,
+        LaunchDisposition_STARTED,
+        LaunchDisposition_STOPPED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchDisposition = LaunchDisposition'
+  { fromLaunchDisposition ::
+      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 LaunchDisposition_STARTED :: LaunchDisposition
+pattern LaunchDisposition_STARTED = LaunchDisposition' "STARTED"
+
+pattern LaunchDisposition_STOPPED :: LaunchDisposition
+pattern LaunchDisposition_STOPPED = LaunchDisposition' "STOPPED"
+
+{-# COMPLETE
+  LaunchDisposition_STARTED,
+  LaunchDisposition_STOPPED,
+  LaunchDisposition'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/LaunchStatus.hs b/gen/Amazonka/DrS/Types/LaunchStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LaunchStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.LaunchStatus
+-- 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.DrS.Types.LaunchStatus
+  ( LaunchStatus
+      ( ..,
+        LaunchStatus_FAILED,
+        LaunchStatus_IN_PROGRESS,
+        LaunchStatus_LAUNCHED,
+        LaunchStatus_PENDING,
+        LaunchStatus_TERMINATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchStatus = LaunchStatus'
+  { fromLaunchStatus ::
+      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 LaunchStatus_FAILED :: LaunchStatus
+pattern LaunchStatus_FAILED = LaunchStatus' "FAILED"
+
+pattern LaunchStatus_IN_PROGRESS :: LaunchStatus
+pattern LaunchStatus_IN_PROGRESS = LaunchStatus' "IN_PROGRESS"
+
+pattern LaunchStatus_LAUNCHED :: LaunchStatus
+pattern LaunchStatus_LAUNCHED = LaunchStatus' "LAUNCHED"
+
+pattern LaunchStatus_PENDING :: LaunchStatus
+pattern LaunchStatus_PENDING = LaunchStatus' "PENDING"
+
+pattern LaunchStatus_TERMINATED :: LaunchStatus
+pattern LaunchStatus_TERMINATED = LaunchStatus' "TERMINATED"
+
+{-# COMPLETE
+  LaunchStatus_FAILED,
+  LaunchStatus_IN_PROGRESS,
+  LaunchStatus_LAUNCHED,
+  LaunchStatus_PENDING,
+  LaunchStatus_TERMINATED,
+  LaunchStatus'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/Licensing.hs b/gen/Amazonka/DrS/Types/Licensing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/Licensing.hs
@@ -0,0 +1,71 @@
+{-# 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.DrS.Types.Licensing
+-- 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.DrS.Types.Licensing 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
+
+-- | Configuration of a machine\'s license.
+--
+-- /See:/ 'newLicensing' smart constructor.
+data Licensing = Licensing'
+  { -- | Whether to enable \"Bring your own license\" or not.
+    osByol :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Licensing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'osByol', 'licensing_osByol' - Whether to enable \"Bring your own license\" or not.
+newLicensing ::
+  Licensing
+newLicensing = Licensing' {osByol = Prelude.Nothing}
+
+-- | Whether to enable \"Bring your own license\" or not.
+licensing_osByol :: Lens.Lens' Licensing (Prelude.Maybe Prelude.Bool)
+licensing_osByol = Lens.lens (\Licensing' {osByol} -> osByol) (\s@Licensing' {} a -> s {osByol = a} :: Licensing)
+
+instance Data.FromJSON Licensing where
+  parseJSON =
+    Data.withObject
+      "Licensing"
+      (\x -> Licensing' Prelude.<$> (x Data..:? "osByol"))
+
+instance Prelude.Hashable Licensing where
+  hashWithSalt _salt Licensing' {..} =
+    _salt `Prelude.hashWithSalt` osByol
+
+instance Prelude.NFData Licensing where
+  rnf Licensing' {..} = Prelude.rnf osByol
+
+instance Data.ToJSON Licensing where
+  toJSON Licensing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("osByol" Data..=) Prelude.<$> osByol]
+      )
diff --git a/gen/Amazonka/DrS/Types/LifeCycle.hs b/gen/Amazonka/DrS/Types/LifeCycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LifeCycle.hs
@@ -0,0 +1,128 @@
+{-# 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.DrS.Types.LifeCycle
+-- 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.DrS.Types.LifeCycle where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.LifeCycleLastLaunch
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing the Source Server Lifecycle.
+--
+-- /See:/ 'newLifeCycle' smart constructor.
+data LifeCycle = LifeCycle'
+  { -- | The date and time of when the Source Server was added to the service.
+    addedToServiceDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that the Source Server has been replicating for.
+    elapsedReplicationDuration :: Prelude.Maybe Prelude.Text,
+    -- | The date and time of the first byte that was replicated from the Source
+    -- Server.
+    firstByteDateTime :: Prelude.Maybe Prelude.Text,
+    -- | An object containing information regarding the last launch of the Source
+    -- Server.
+    lastLaunch :: Prelude.Maybe LifeCycleLastLaunch,
+    -- | The date and time this Source Server was last seen by the service.
+    lastSeenByServiceDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addedToServiceDateTime', 'lifeCycle_addedToServiceDateTime' - The date and time of when the Source Server was added to the service.
+--
+-- 'elapsedReplicationDuration', 'lifeCycle_elapsedReplicationDuration' - The amount of time that the Source Server has been replicating for.
+--
+-- 'firstByteDateTime', 'lifeCycle_firstByteDateTime' - The date and time of the first byte that was replicated from the Source
+-- Server.
+--
+-- 'lastLaunch', 'lifeCycle_lastLaunch' - An object containing information regarding the last launch of the Source
+-- Server.
+--
+-- 'lastSeenByServiceDateTime', 'lifeCycle_lastSeenByServiceDateTime' - The date and time this Source Server was last seen by the service.
+newLifeCycle ::
+  LifeCycle
+newLifeCycle =
+  LifeCycle'
+    { addedToServiceDateTime =
+        Prelude.Nothing,
+      elapsedReplicationDuration = Prelude.Nothing,
+      firstByteDateTime = Prelude.Nothing,
+      lastLaunch = Prelude.Nothing,
+      lastSeenByServiceDateTime = Prelude.Nothing
+    }
+
+-- | The date and time of when the Source Server was added to the service.
+lifeCycle_addedToServiceDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_addedToServiceDateTime = Lens.lens (\LifeCycle' {addedToServiceDateTime} -> addedToServiceDateTime) (\s@LifeCycle' {} a -> s {addedToServiceDateTime = a} :: LifeCycle)
+
+-- | The amount of time that the Source Server has been replicating for.
+lifeCycle_elapsedReplicationDuration :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_elapsedReplicationDuration = Lens.lens (\LifeCycle' {elapsedReplicationDuration} -> elapsedReplicationDuration) (\s@LifeCycle' {} a -> s {elapsedReplicationDuration = a} :: LifeCycle)
+
+-- | The date and time of the first byte that was replicated from the Source
+-- Server.
+lifeCycle_firstByteDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_firstByteDateTime = Lens.lens (\LifeCycle' {firstByteDateTime} -> firstByteDateTime) (\s@LifeCycle' {} a -> s {firstByteDateTime = a} :: LifeCycle)
+
+-- | An object containing information regarding the last launch of the Source
+-- Server.
+lifeCycle_lastLaunch :: Lens.Lens' LifeCycle (Prelude.Maybe LifeCycleLastLaunch)
+lifeCycle_lastLaunch = Lens.lens (\LifeCycle' {lastLaunch} -> lastLaunch) (\s@LifeCycle' {} a -> s {lastLaunch = a} :: LifeCycle)
+
+-- | The date and time this Source Server was last seen by the service.
+lifeCycle_lastSeenByServiceDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_lastSeenByServiceDateTime = Lens.lens (\LifeCycle' {lastSeenByServiceDateTime} -> lastSeenByServiceDateTime) (\s@LifeCycle' {} a -> s {lastSeenByServiceDateTime = a} :: LifeCycle)
+
+instance Data.FromJSON LifeCycle where
+  parseJSON =
+    Data.withObject
+      "LifeCycle"
+      ( \x ->
+          LifeCycle'
+            Prelude.<$> (x Data..:? "addedToServiceDateTime")
+            Prelude.<*> (x Data..:? "elapsedReplicationDuration")
+            Prelude.<*> (x Data..:? "firstByteDateTime")
+            Prelude.<*> (x Data..:? "lastLaunch")
+            Prelude.<*> (x Data..:? "lastSeenByServiceDateTime")
+      )
+
+instance Prelude.Hashable LifeCycle where
+  hashWithSalt _salt LifeCycle' {..} =
+    _salt
+      `Prelude.hashWithSalt` addedToServiceDateTime
+      `Prelude.hashWithSalt` elapsedReplicationDuration
+      `Prelude.hashWithSalt` firstByteDateTime
+      `Prelude.hashWithSalt` lastLaunch
+      `Prelude.hashWithSalt` lastSeenByServiceDateTime
+
+instance Prelude.NFData LifeCycle where
+  rnf LifeCycle' {..} =
+    Prelude.rnf addedToServiceDateTime
+      `Prelude.seq` Prelude.rnf elapsedReplicationDuration
+      `Prelude.seq` Prelude.rnf firstByteDateTime
+      `Prelude.seq` Prelude.rnf lastLaunch
+      `Prelude.seq` Prelude.rnf lastSeenByServiceDateTime
diff --git a/gen/Amazonka/DrS/Types/LifeCycleLastLaunch.hs b/gen/Amazonka/DrS/Types/LifeCycleLastLaunch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LifeCycleLastLaunch.hs
@@ -0,0 +1,73 @@
+{-# 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.DrS.Types.LifeCycleLastLaunch
+-- 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.DrS.Types.LifeCycleLastLaunch where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.LifeCycleLastLaunchInitiated
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object containing information regarding the last launch of a Source
+-- Server.
+--
+-- /See:/ 'newLifeCycleLastLaunch' smart constructor.
+data LifeCycleLastLaunch = LifeCycleLastLaunch'
+  { -- | An object containing information regarding the initiation of the last
+    -- launch of a Source Server.
+    initiated :: Prelude.Maybe LifeCycleLastLaunchInitiated
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastLaunch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'initiated', 'lifeCycleLastLaunch_initiated' - An object containing information regarding the initiation of the last
+-- launch of a Source Server.
+newLifeCycleLastLaunch ::
+  LifeCycleLastLaunch
+newLifeCycleLastLaunch =
+  LifeCycleLastLaunch' {initiated = Prelude.Nothing}
+
+-- | An object containing information regarding the initiation of the last
+-- launch of a Source Server.
+lifeCycleLastLaunch_initiated :: Lens.Lens' LifeCycleLastLaunch (Prelude.Maybe LifeCycleLastLaunchInitiated)
+lifeCycleLastLaunch_initiated = Lens.lens (\LifeCycleLastLaunch' {initiated} -> initiated) (\s@LifeCycleLastLaunch' {} a -> s {initiated = a} :: LifeCycleLastLaunch)
+
+instance Data.FromJSON LifeCycleLastLaunch where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastLaunch"
+      ( \x ->
+          LifeCycleLastLaunch'
+            Prelude.<$> (x Data..:? "initiated")
+      )
+
+instance Prelude.Hashable LifeCycleLastLaunch where
+  hashWithSalt _salt LifeCycleLastLaunch' {..} =
+    _salt `Prelude.hashWithSalt` initiated
+
+instance Prelude.NFData LifeCycleLastLaunch where
+  rnf LifeCycleLastLaunch' {..} = Prelude.rnf initiated
diff --git a/gen/Amazonka/DrS/Types/LifeCycleLastLaunchInitiated.hs b/gen/Amazonka/DrS/Types/LifeCycleLastLaunchInitiated.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/LifeCycleLastLaunchInitiated.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.LifeCycleLastLaunchInitiated
+-- 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.DrS.Types.LifeCycleLastLaunchInitiated where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.LastLaunchType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object containing information regarding the initiation of the last
+-- launch of a Source Server.
+--
+-- /See:/ 'newLifeCycleLastLaunchInitiated' smart constructor.
+data LifeCycleLastLaunchInitiated = LifeCycleLastLaunchInitiated'
+  { -- | The date and time the last Source Server launch was initiated.
+    apiCallDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Job that was used to last launch the Source Server.
+    jobID :: Prelude.Maybe Prelude.Text,
+    -- | The Job type that was used to last launch the Source Server.
+    type' :: Prelude.Maybe LastLaunchType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastLaunchInitiated' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiCallDateTime', 'lifeCycleLastLaunchInitiated_apiCallDateTime' - The date and time the last Source Server launch was initiated.
+--
+-- 'jobID', 'lifeCycleLastLaunchInitiated_jobID' - The ID of the Job that was used to last launch the Source Server.
+--
+-- 'type'', 'lifeCycleLastLaunchInitiated_type' - The Job type that was used to last launch the Source Server.
+newLifeCycleLastLaunchInitiated ::
+  LifeCycleLastLaunchInitiated
+newLifeCycleLastLaunchInitiated =
+  LifeCycleLastLaunchInitiated'
+    { apiCallDateTime =
+        Prelude.Nothing,
+      jobID = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The date and time the last Source Server launch was initiated.
+lifeCycleLastLaunchInitiated_apiCallDateTime :: Lens.Lens' LifeCycleLastLaunchInitiated (Prelude.Maybe Prelude.Text)
+lifeCycleLastLaunchInitiated_apiCallDateTime = Lens.lens (\LifeCycleLastLaunchInitiated' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastLaunchInitiated' {} a -> s {apiCallDateTime = a} :: LifeCycleLastLaunchInitiated)
+
+-- | The ID of the Job that was used to last launch the Source Server.
+lifeCycleLastLaunchInitiated_jobID :: Lens.Lens' LifeCycleLastLaunchInitiated (Prelude.Maybe Prelude.Text)
+lifeCycleLastLaunchInitiated_jobID = Lens.lens (\LifeCycleLastLaunchInitiated' {jobID} -> jobID) (\s@LifeCycleLastLaunchInitiated' {} a -> s {jobID = a} :: LifeCycleLastLaunchInitiated)
+
+-- | The Job type that was used to last launch the Source Server.
+lifeCycleLastLaunchInitiated_type :: Lens.Lens' LifeCycleLastLaunchInitiated (Prelude.Maybe LastLaunchType)
+lifeCycleLastLaunchInitiated_type = Lens.lens (\LifeCycleLastLaunchInitiated' {type'} -> type') (\s@LifeCycleLastLaunchInitiated' {} a -> s {type' = a} :: LifeCycleLastLaunchInitiated)
+
+instance Data.FromJSON LifeCycleLastLaunchInitiated where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastLaunchInitiated"
+      ( \x ->
+          LifeCycleLastLaunchInitiated'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+            Prelude.<*> (x Data..:? "jobID")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance
+  Prelude.Hashable
+    LifeCycleLastLaunchInitiated
+  where
+  hashWithSalt _salt LifeCycleLastLaunchInitiated' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiCallDateTime
+      `Prelude.hashWithSalt` jobID
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData LifeCycleLastLaunchInitiated where
+  rnf LifeCycleLastLaunchInitiated' {..} =
+    Prelude.rnf apiCallDateTime
+      `Prelude.seq` Prelude.rnf jobID
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/DrS/Types/NetworkInterface.hs b/gen/Amazonka/DrS/Types/NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/NetworkInterface.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.NetworkInterface
+-- 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.DrS.Types.NetworkInterface 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
+
+-- | Network interface.
+--
+-- /See:/ 'newNetworkInterface' smart constructor.
+data NetworkInterface = NetworkInterface'
+  { -- | Network interface IPs.
+    ips :: Prelude.Maybe [Prelude.Text],
+    -- | Whether this is the primary network interface.
+    isPrimary :: Prelude.Maybe Prelude.Bool,
+    -- | The MAC address of the network interface.
+    macAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ips', 'networkInterface_ips' - Network interface IPs.
+--
+-- 'isPrimary', 'networkInterface_isPrimary' - Whether this is the primary network interface.
+--
+-- 'macAddress', 'networkInterface_macAddress' - The MAC address of the network interface.
+newNetworkInterface ::
+  NetworkInterface
+newNetworkInterface =
+  NetworkInterface'
+    { ips = Prelude.Nothing,
+      isPrimary = Prelude.Nothing,
+      macAddress = Prelude.Nothing
+    }
+
+-- | Network interface IPs.
+networkInterface_ips :: Lens.Lens' NetworkInterface (Prelude.Maybe [Prelude.Text])
+networkInterface_ips = Lens.lens (\NetworkInterface' {ips} -> ips) (\s@NetworkInterface' {} a -> s {ips = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | Whether this is the primary network interface.
+networkInterface_isPrimary :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Bool)
+networkInterface_isPrimary = Lens.lens (\NetworkInterface' {isPrimary} -> isPrimary) (\s@NetworkInterface' {} a -> s {isPrimary = a} :: NetworkInterface)
+
+-- | The MAC address of the network interface.
+networkInterface_macAddress :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_macAddress = Lens.lens (\NetworkInterface' {macAddress} -> macAddress) (\s@NetworkInterface' {} a -> s {macAddress = a} :: NetworkInterface)
+
+instance Data.FromJSON NetworkInterface where
+  parseJSON =
+    Data.withObject
+      "NetworkInterface"
+      ( \x ->
+          NetworkInterface'
+            Prelude.<$> (x Data..:? "ips" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "isPrimary")
+            Prelude.<*> (x Data..:? "macAddress")
+      )
+
+instance Prelude.Hashable NetworkInterface where
+  hashWithSalt _salt NetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` ips
+      `Prelude.hashWithSalt` isPrimary
+      `Prelude.hashWithSalt` macAddress
+
+instance Prelude.NFData NetworkInterface where
+  rnf NetworkInterface' {..} =
+    Prelude.rnf ips
+      `Prelude.seq` Prelude.rnf isPrimary
+      `Prelude.seq` Prelude.rnf macAddress
diff --git a/gen/Amazonka/DrS/Types/OS.hs b/gen/Amazonka/DrS/Types/OS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/OS.hs
@@ -0,0 +1,64 @@
+{-# 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.DrS.Types.OS
+-- 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.DrS.Types.OS 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
+
+-- | Operating System.
+--
+-- /See:/ 'newOS' smart constructor.
+data OS = OS'
+  { -- | The long name of the Operating System.
+    fullString :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OS' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fullString', 'os_fullString' - The long name of the Operating System.
+newOS ::
+  OS
+newOS = OS' {fullString = Prelude.Nothing}
+
+-- | The long name of the Operating System.
+os_fullString :: Lens.Lens' OS (Prelude.Maybe Prelude.Text)
+os_fullString = Lens.lens (\OS' {fullString} -> fullString) (\s@OS' {} a -> s {fullString = a} :: OS)
+
+instance Data.FromJSON OS where
+  parseJSON =
+    Data.withObject
+      "OS"
+      (\x -> OS' Prelude.<$> (x Data..:? "fullString"))
+
+instance Prelude.Hashable OS where
+  hashWithSalt _salt OS' {..} =
+    _salt `Prelude.hashWithSalt` fullString
+
+instance Prelude.NFData OS where
+  rnf OS' {..} = Prelude.rnf fullString
diff --git a/gen/Amazonka/DrS/Types/OriginEnvironment.hs b/gen/Amazonka/DrS/Types/OriginEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/OriginEnvironment.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.OriginEnvironment
+-- 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.DrS.Types.OriginEnvironment
+  ( OriginEnvironment
+      ( ..,
+        OriginEnvironment_AWS,
+        OriginEnvironment_ON_PREMISES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OriginEnvironment = OriginEnvironment'
+  { fromOriginEnvironment ::
+      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 OriginEnvironment_AWS :: OriginEnvironment
+pattern OriginEnvironment_AWS = OriginEnvironment' "AWS"
+
+pattern OriginEnvironment_ON_PREMISES :: OriginEnvironment
+pattern OriginEnvironment_ON_PREMISES = OriginEnvironment' "ON_PREMISES"
+
+{-# COMPLETE
+  OriginEnvironment_AWS,
+  OriginEnvironment_ON_PREMISES,
+  OriginEnvironment'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/PITPolicyRule.hs b/gen/Amazonka/DrS/Types/PITPolicyRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/PITPolicyRule.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.DrS.Types.PITPolicyRule
+-- 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.DrS.Types.PITPolicyRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.PITPolicyRuleUnits
+import qualified Amazonka.Prelude as Prelude
+
+-- | A rule in the Point in Time (PIT) policy representing when to take
+-- snapshots and how long to retain them for.
+--
+-- /See:/ 'newPITPolicyRule' smart constructor.
+data PITPolicyRule = PITPolicyRule'
+  { -- | Whether this rule is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the rule.
+    ruleID :: Prelude.Maybe Prelude.Natural,
+    -- | How often, in the chosen units, a snapshot should be taken.
+    interval :: Prelude.Natural,
+    -- | The duration to retain a snapshot for, in the chosen units.
+    retentionDuration :: Prelude.Natural,
+    -- | The units used to measure the interval and retentionDuration.
+    units :: PITPolicyRuleUnits
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PITPolicyRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'pITPolicyRule_enabled' - Whether this rule is enabled or not.
+--
+-- 'ruleID', 'pITPolicyRule_ruleID' - The ID of the rule.
+--
+-- 'interval', 'pITPolicyRule_interval' - How often, in the chosen units, a snapshot should be taken.
+--
+-- 'retentionDuration', 'pITPolicyRule_retentionDuration' - The duration to retain a snapshot for, in the chosen units.
+--
+-- 'units', 'pITPolicyRule_units' - The units used to measure the interval and retentionDuration.
+newPITPolicyRule ::
+  -- | 'interval'
+  Prelude.Natural ->
+  -- | 'retentionDuration'
+  Prelude.Natural ->
+  -- | 'units'
+  PITPolicyRuleUnits ->
+  PITPolicyRule
+newPITPolicyRule
+  pInterval_
+  pRetentionDuration_
+  pUnits_ =
+    PITPolicyRule'
+      { enabled = Prelude.Nothing,
+        ruleID = Prelude.Nothing,
+        interval = pInterval_,
+        retentionDuration = pRetentionDuration_,
+        units = pUnits_
+      }
+
+-- | Whether this rule is enabled or not.
+pITPolicyRule_enabled :: Lens.Lens' PITPolicyRule (Prelude.Maybe Prelude.Bool)
+pITPolicyRule_enabled = Lens.lens (\PITPolicyRule' {enabled} -> enabled) (\s@PITPolicyRule' {} a -> s {enabled = a} :: PITPolicyRule)
+
+-- | The ID of the rule.
+pITPolicyRule_ruleID :: Lens.Lens' PITPolicyRule (Prelude.Maybe Prelude.Natural)
+pITPolicyRule_ruleID = Lens.lens (\PITPolicyRule' {ruleID} -> ruleID) (\s@PITPolicyRule' {} a -> s {ruleID = a} :: PITPolicyRule)
+
+-- | How often, in the chosen units, a snapshot should be taken.
+pITPolicyRule_interval :: Lens.Lens' PITPolicyRule Prelude.Natural
+pITPolicyRule_interval = Lens.lens (\PITPolicyRule' {interval} -> interval) (\s@PITPolicyRule' {} a -> s {interval = a} :: PITPolicyRule)
+
+-- | The duration to retain a snapshot for, in the chosen units.
+pITPolicyRule_retentionDuration :: Lens.Lens' PITPolicyRule Prelude.Natural
+pITPolicyRule_retentionDuration = Lens.lens (\PITPolicyRule' {retentionDuration} -> retentionDuration) (\s@PITPolicyRule' {} a -> s {retentionDuration = a} :: PITPolicyRule)
+
+-- | The units used to measure the interval and retentionDuration.
+pITPolicyRule_units :: Lens.Lens' PITPolicyRule PITPolicyRuleUnits
+pITPolicyRule_units = Lens.lens (\PITPolicyRule' {units} -> units) (\s@PITPolicyRule' {} a -> s {units = a} :: PITPolicyRule)
+
+instance Data.FromJSON PITPolicyRule where
+  parseJSON =
+    Data.withObject
+      "PITPolicyRule"
+      ( \x ->
+          PITPolicyRule'
+            Prelude.<$> (x Data..:? "enabled")
+            Prelude.<*> (x Data..:? "ruleID")
+            Prelude.<*> (x Data..: "interval")
+            Prelude.<*> (x Data..: "retentionDuration")
+            Prelude.<*> (x Data..: "units")
+      )
+
+instance Prelude.Hashable PITPolicyRule where
+  hashWithSalt _salt PITPolicyRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` ruleID
+      `Prelude.hashWithSalt` interval
+      `Prelude.hashWithSalt` retentionDuration
+      `Prelude.hashWithSalt` units
+
+instance Prelude.NFData PITPolicyRule where
+  rnf PITPolicyRule' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf ruleID
+      `Prelude.seq` Prelude.rnf interval
+      `Prelude.seq` Prelude.rnf retentionDuration
+      `Prelude.seq` Prelude.rnf units
+
+instance Data.ToJSON PITPolicyRule where
+  toJSON PITPolicyRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("enabled" Data..=) Prelude.<$> enabled,
+            ("ruleID" Data..=) Prelude.<$> ruleID,
+            Prelude.Just ("interval" Data..= interval),
+            Prelude.Just
+              ("retentionDuration" Data..= retentionDuration),
+            Prelude.Just ("units" Data..= units)
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/PITPolicyRuleUnits.hs b/gen/Amazonka/DrS/Types/PITPolicyRuleUnits.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/PITPolicyRuleUnits.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.PITPolicyRuleUnits
+-- 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.DrS.Types.PITPolicyRuleUnits
+  ( PITPolicyRuleUnits
+      ( ..,
+        PITPolicyRuleUnits_DAY,
+        PITPolicyRuleUnits_HOUR,
+        PITPolicyRuleUnits_MINUTE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PITPolicyRuleUnits = PITPolicyRuleUnits'
+  { fromPITPolicyRuleUnits ::
+      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 PITPolicyRuleUnits_DAY :: PITPolicyRuleUnits
+pattern PITPolicyRuleUnits_DAY = PITPolicyRuleUnits' "DAY"
+
+pattern PITPolicyRuleUnits_HOUR :: PITPolicyRuleUnits
+pattern PITPolicyRuleUnits_HOUR = PITPolicyRuleUnits' "HOUR"
+
+pattern PITPolicyRuleUnits_MINUTE :: PITPolicyRuleUnits
+pattern PITPolicyRuleUnits_MINUTE = PITPolicyRuleUnits' "MINUTE"
+
+{-# COMPLETE
+  PITPolicyRuleUnits_DAY,
+  PITPolicyRuleUnits_HOUR,
+  PITPolicyRuleUnits_MINUTE,
+  PITPolicyRuleUnits'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ParticipatingServer.hs b/gen/Amazonka/DrS/Types/ParticipatingServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ParticipatingServer.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ParticipatingServer
+-- 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.DrS.Types.ParticipatingServer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.LaunchStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a server participating in an asynchronous Job.
+--
+-- /See:/ 'newParticipatingServer' smart constructor.
+data ParticipatingServer = ParticipatingServer'
+  { -- | The launch status of a participating server.
+    launchStatus :: Prelude.Maybe LaunchStatus,
+    -- | The Recovery Instance ID of a participating server.
+    recoveryInstanceID :: Prelude.Maybe Prelude.Text,
+    -- | The Source Server ID of a participating server.
+    sourceServerID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ParticipatingServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchStatus', 'participatingServer_launchStatus' - The launch status of a participating server.
+--
+-- 'recoveryInstanceID', 'participatingServer_recoveryInstanceID' - The Recovery Instance ID of a participating server.
+--
+-- 'sourceServerID', 'participatingServer_sourceServerID' - The Source Server ID of a participating server.
+newParticipatingServer ::
+  ParticipatingServer
+newParticipatingServer =
+  ParticipatingServer'
+    { launchStatus =
+        Prelude.Nothing,
+      recoveryInstanceID = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing
+    }
+
+-- | The launch status of a participating server.
+participatingServer_launchStatus :: Lens.Lens' ParticipatingServer (Prelude.Maybe LaunchStatus)
+participatingServer_launchStatus = Lens.lens (\ParticipatingServer' {launchStatus} -> launchStatus) (\s@ParticipatingServer' {} a -> s {launchStatus = a} :: ParticipatingServer)
+
+-- | The Recovery Instance ID of a participating server.
+participatingServer_recoveryInstanceID :: Lens.Lens' ParticipatingServer (Prelude.Maybe Prelude.Text)
+participatingServer_recoveryInstanceID = Lens.lens (\ParticipatingServer' {recoveryInstanceID} -> recoveryInstanceID) (\s@ParticipatingServer' {} a -> s {recoveryInstanceID = a} :: ParticipatingServer)
+
+-- | The Source Server ID of a participating server.
+participatingServer_sourceServerID :: Lens.Lens' ParticipatingServer (Prelude.Maybe Prelude.Text)
+participatingServer_sourceServerID = Lens.lens (\ParticipatingServer' {sourceServerID} -> sourceServerID) (\s@ParticipatingServer' {} a -> s {sourceServerID = a} :: ParticipatingServer)
+
+instance Data.FromJSON ParticipatingServer where
+  parseJSON =
+    Data.withObject
+      "ParticipatingServer"
+      ( \x ->
+          ParticipatingServer'
+            Prelude.<$> (x Data..:? "launchStatus")
+            Prelude.<*> (x Data..:? "recoveryInstanceID")
+            Prelude.<*> (x Data..:? "sourceServerID")
+      )
+
+instance Prelude.Hashable ParticipatingServer where
+  hashWithSalt _salt ParticipatingServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchStatus
+      `Prelude.hashWithSalt` recoveryInstanceID
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData ParticipatingServer where
+  rnf ParticipatingServer' {..} =
+    Prelude.rnf launchStatus
+      `Prelude.seq` Prelude.rnf recoveryInstanceID
+      `Prelude.seq` Prelude.rnf sourceServerID
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstance.hs b/gen/Amazonka/DrS/Types/RecoveryInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstance.hs
@@ -0,0 +1,233 @@
+{-# 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.DrS.Types.RecoveryInstance
+-- 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.DrS.Types.RecoveryInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.EC2InstanceState
+import Amazonka.DrS.Types.OriginEnvironment
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfo
+import Amazonka.DrS.Types.RecoveryInstanceFailback
+import Amazonka.DrS.Types.RecoveryInstanceProperties
+import qualified Amazonka.Prelude as Prelude
+
+-- | A Recovery Instance is a replica of a Source Server running on EC2.
+--
+-- /See:/ 'newRecoveryInstance' smart constructor.
+data RecoveryInstance = RecoveryInstance'
+  { -- | The ARN of the Recovery Instance.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Data Replication Info of the Recovery Instance.
+    dataReplicationInfo :: Prelude.Maybe RecoveryInstanceDataReplicationInfo,
+    -- | The EC2 instance ID of the Recovery Instance.
+    ec2InstanceID :: Prelude.Maybe Prelude.Text,
+    -- | The state of the EC2 instance for this Recovery Instance.
+    ec2InstanceState :: Prelude.Maybe EC2InstanceState,
+    -- | An object representing failback related information of the Recovery
+    -- Instance.
+    failback :: Prelude.Maybe RecoveryInstanceFailback,
+    -- | Whether this Recovery Instance was created for a drill or for an actual
+    -- Recovery event.
+    isDrill :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Job that created the Recovery Instance.
+    jobID :: Prelude.Maybe Prelude.Text,
+    -- | Environment (On Premises \/ AWS) of the instance that the recovery
+    -- instance originated from.
+    originEnvironment :: Prelude.Maybe OriginEnvironment,
+    -- | The date and time of the Point in Time (PIT) snapshot that this Recovery
+    -- Instance was launched from.
+    pointInTimeSnapshotDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Recovery Instance.
+    recoveryInstanceID :: Prelude.Maybe Prelude.Text,
+    -- | Properties of the Recovery Instance machine.
+    recoveryInstanceProperties :: Prelude.Maybe RecoveryInstanceProperties,
+    -- | The Source Server ID that this Recovery Instance is associated with.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | An array of tags that are associated with the Recovery Instance.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'recoveryInstance_arn' - The ARN of the Recovery Instance.
+--
+-- 'dataReplicationInfo', 'recoveryInstance_dataReplicationInfo' - The Data Replication Info of the Recovery Instance.
+--
+-- 'ec2InstanceID', 'recoveryInstance_ec2InstanceID' - The EC2 instance ID of the Recovery Instance.
+--
+-- 'ec2InstanceState', 'recoveryInstance_ec2InstanceState' - The state of the EC2 instance for this Recovery Instance.
+--
+-- 'failback', 'recoveryInstance_failback' - An object representing failback related information of the Recovery
+-- Instance.
+--
+-- 'isDrill', 'recoveryInstance_isDrill' - Whether this Recovery Instance was created for a drill or for an actual
+-- Recovery event.
+--
+-- 'jobID', 'recoveryInstance_jobID' - The ID of the Job that created the Recovery Instance.
+--
+-- 'originEnvironment', 'recoveryInstance_originEnvironment' - Environment (On Premises \/ AWS) of the instance that the recovery
+-- instance originated from.
+--
+-- 'pointInTimeSnapshotDateTime', 'recoveryInstance_pointInTimeSnapshotDateTime' - The date and time of the Point in Time (PIT) snapshot that this Recovery
+-- Instance was launched from.
+--
+-- 'recoveryInstanceID', 'recoveryInstance_recoveryInstanceID' - The ID of the Recovery Instance.
+--
+-- 'recoveryInstanceProperties', 'recoveryInstance_recoveryInstanceProperties' - Properties of the Recovery Instance machine.
+--
+-- 'sourceServerID', 'recoveryInstance_sourceServerID' - The Source Server ID that this Recovery Instance is associated with.
+--
+-- 'tags', 'recoveryInstance_tags' - An array of tags that are associated with the Recovery Instance.
+newRecoveryInstance ::
+  RecoveryInstance
+newRecoveryInstance =
+  RecoveryInstance'
+    { arn = Prelude.Nothing,
+      dataReplicationInfo = Prelude.Nothing,
+      ec2InstanceID = Prelude.Nothing,
+      ec2InstanceState = Prelude.Nothing,
+      failback = Prelude.Nothing,
+      isDrill = Prelude.Nothing,
+      jobID = Prelude.Nothing,
+      originEnvironment = Prelude.Nothing,
+      pointInTimeSnapshotDateTime = Prelude.Nothing,
+      recoveryInstanceID = Prelude.Nothing,
+      recoveryInstanceProperties = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the Recovery Instance.
+recoveryInstance_arn :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Text)
+recoveryInstance_arn = Lens.lens (\RecoveryInstance' {arn} -> arn) (\s@RecoveryInstance' {} a -> s {arn = a} :: RecoveryInstance)
+
+-- | The Data Replication Info of the Recovery Instance.
+recoveryInstance_dataReplicationInfo :: Lens.Lens' RecoveryInstance (Prelude.Maybe RecoveryInstanceDataReplicationInfo)
+recoveryInstance_dataReplicationInfo = Lens.lens (\RecoveryInstance' {dataReplicationInfo} -> dataReplicationInfo) (\s@RecoveryInstance' {} a -> s {dataReplicationInfo = a} :: RecoveryInstance)
+
+-- | The EC2 instance ID of the Recovery Instance.
+recoveryInstance_ec2InstanceID :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Text)
+recoveryInstance_ec2InstanceID = Lens.lens (\RecoveryInstance' {ec2InstanceID} -> ec2InstanceID) (\s@RecoveryInstance' {} a -> s {ec2InstanceID = a} :: RecoveryInstance)
+
+-- | The state of the EC2 instance for this Recovery Instance.
+recoveryInstance_ec2InstanceState :: Lens.Lens' RecoveryInstance (Prelude.Maybe EC2InstanceState)
+recoveryInstance_ec2InstanceState = Lens.lens (\RecoveryInstance' {ec2InstanceState} -> ec2InstanceState) (\s@RecoveryInstance' {} a -> s {ec2InstanceState = a} :: RecoveryInstance)
+
+-- | An object representing failback related information of the Recovery
+-- Instance.
+recoveryInstance_failback :: Lens.Lens' RecoveryInstance (Prelude.Maybe RecoveryInstanceFailback)
+recoveryInstance_failback = Lens.lens (\RecoveryInstance' {failback} -> failback) (\s@RecoveryInstance' {} a -> s {failback = a} :: RecoveryInstance)
+
+-- | Whether this Recovery Instance was created for a drill or for an actual
+-- Recovery event.
+recoveryInstance_isDrill :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Bool)
+recoveryInstance_isDrill = Lens.lens (\RecoveryInstance' {isDrill} -> isDrill) (\s@RecoveryInstance' {} a -> s {isDrill = a} :: RecoveryInstance)
+
+-- | The ID of the Job that created the Recovery Instance.
+recoveryInstance_jobID :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Text)
+recoveryInstance_jobID = Lens.lens (\RecoveryInstance' {jobID} -> jobID) (\s@RecoveryInstance' {} a -> s {jobID = a} :: RecoveryInstance)
+
+-- | Environment (On Premises \/ AWS) of the instance that the recovery
+-- instance originated from.
+recoveryInstance_originEnvironment :: Lens.Lens' RecoveryInstance (Prelude.Maybe OriginEnvironment)
+recoveryInstance_originEnvironment = Lens.lens (\RecoveryInstance' {originEnvironment} -> originEnvironment) (\s@RecoveryInstance' {} a -> s {originEnvironment = a} :: RecoveryInstance)
+
+-- | The date and time of the Point in Time (PIT) snapshot that this Recovery
+-- Instance was launched from.
+recoveryInstance_pointInTimeSnapshotDateTime :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Text)
+recoveryInstance_pointInTimeSnapshotDateTime = Lens.lens (\RecoveryInstance' {pointInTimeSnapshotDateTime} -> pointInTimeSnapshotDateTime) (\s@RecoveryInstance' {} a -> s {pointInTimeSnapshotDateTime = a} :: RecoveryInstance)
+
+-- | The ID of the Recovery Instance.
+recoveryInstance_recoveryInstanceID :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Text)
+recoveryInstance_recoveryInstanceID = Lens.lens (\RecoveryInstance' {recoveryInstanceID} -> recoveryInstanceID) (\s@RecoveryInstance' {} a -> s {recoveryInstanceID = a} :: RecoveryInstance)
+
+-- | Properties of the Recovery Instance machine.
+recoveryInstance_recoveryInstanceProperties :: Lens.Lens' RecoveryInstance (Prelude.Maybe RecoveryInstanceProperties)
+recoveryInstance_recoveryInstanceProperties = Lens.lens (\RecoveryInstance' {recoveryInstanceProperties} -> recoveryInstanceProperties) (\s@RecoveryInstance' {} a -> s {recoveryInstanceProperties = a} :: RecoveryInstance)
+
+-- | The Source Server ID that this Recovery Instance is associated with.
+recoveryInstance_sourceServerID :: Lens.Lens' RecoveryInstance (Prelude.Maybe Prelude.Text)
+recoveryInstance_sourceServerID = Lens.lens (\RecoveryInstance' {sourceServerID} -> sourceServerID) (\s@RecoveryInstance' {} a -> s {sourceServerID = a} :: RecoveryInstance)
+
+-- | An array of tags that are associated with the Recovery Instance.
+recoveryInstance_tags :: Lens.Lens' RecoveryInstance (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+recoveryInstance_tags = Lens.lens (\RecoveryInstance' {tags} -> tags) (\s@RecoveryInstance' {} a -> s {tags = a} :: RecoveryInstance) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+instance Data.FromJSON RecoveryInstance where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstance"
+      ( \x ->
+          RecoveryInstance'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dataReplicationInfo")
+            Prelude.<*> (x Data..:? "ec2InstanceID")
+            Prelude.<*> (x Data..:? "ec2InstanceState")
+            Prelude.<*> (x Data..:? "failback")
+            Prelude.<*> (x Data..:? "isDrill")
+            Prelude.<*> (x Data..:? "jobID")
+            Prelude.<*> (x Data..:? "originEnvironment")
+            Prelude.<*> (x Data..:? "pointInTimeSnapshotDateTime")
+            Prelude.<*> (x Data..:? "recoveryInstanceID")
+            Prelude.<*> (x Data..:? "recoveryInstanceProperties")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable RecoveryInstance where
+  hashWithSalt _salt RecoveryInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dataReplicationInfo
+      `Prelude.hashWithSalt` ec2InstanceID
+      `Prelude.hashWithSalt` ec2InstanceState
+      `Prelude.hashWithSalt` failback
+      `Prelude.hashWithSalt` isDrill
+      `Prelude.hashWithSalt` jobID
+      `Prelude.hashWithSalt` originEnvironment
+      `Prelude.hashWithSalt` pointInTimeSnapshotDateTime
+      `Prelude.hashWithSalt` recoveryInstanceID
+      `Prelude.hashWithSalt` recoveryInstanceProperties
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData RecoveryInstance where
+  rnf RecoveryInstance' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dataReplicationInfo
+      `Prelude.seq` Prelude.rnf ec2InstanceID
+      `Prelude.seq` Prelude.rnf ec2InstanceState
+      `Prelude.seq` Prelude.rnf failback
+      `Prelude.seq` Prelude.rnf isDrill
+      `Prelude.seq` Prelude.rnf jobID
+      `Prelude.seq` Prelude.rnf originEnvironment
+      `Prelude.seq` Prelude.rnf pointInTimeSnapshotDateTime
+      `Prelude.seq` Prelude.rnf recoveryInstanceID
+      `Prelude.seq` Prelude.rnf recoveryInstanceProperties
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationError.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationError.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceDataReplicationError
+-- 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.DrS.Types.RecoveryInstanceDataReplicationError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.FailbackReplicationError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Error in data replication.
+--
+-- /See:/ 'newRecoveryInstanceDataReplicationError' smart constructor.
+data RecoveryInstanceDataReplicationError = RecoveryInstanceDataReplicationError'
+  { -- | Error in data replication.
+    error :: Prelude.Maybe FailbackReplicationError,
+    -- | Error in data replication.
+    rawError :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceDataReplicationError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'recoveryInstanceDataReplicationError_error' - Error in data replication.
+--
+-- 'rawError', 'recoveryInstanceDataReplicationError_rawError' - Error in data replication.
+newRecoveryInstanceDataReplicationError ::
+  RecoveryInstanceDataReplicationError
+newRecoveryInstanceDataReplicationError =
+  RecoveryInstanceDataReplicationError'
+    { error =
+        Prelude.Nothing,
+      rawError = Prelude.Nothing
+    }
+
+-- | Error in data replication.
+recoveryInstanceDataReplicationError_error :: Lens.Lens' RecoveryInstanceDataReplicationError (Prelude.Maybe FailbackReplicationError)
+recoveryInstanceDataReplicationError_error = Lens.lens (\RecoveryInstanceDataReplicationError' {error} -> error) (\s@RecoveryInstanceDataReplicationError' {} a -> s {error = a} :: RecoveryInstanceDataReplicationError)
+
+-- | Error in data replication.
+recoveryInstanceDataReplicationError_rawError :: Lens.Lens' RecoveryInstanceDataReplicationError (Prelude.Maybe Prelude.Text)
+recoveryInstanceDataReplicationError_rawError = Lens.lens (\RecoveryInstanceDataReplicationError' {rawError} -> rawError) (\s@RecoveryInstanceDataReplicationError' {} a -> s {rawError = a} :: RecoveryInstanceDataReplicationError)
+
+instance
+  Data.FromJSON
+    RecoveryInstanceDataReplicationError
+  where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceDataReplicationError"
+      ( \x ->
+          RecoveryInstanceDataReplicationError'
+            Prelude.<$> (x Data..:? "error")
+            Prelude.<*> (x Data..:? "rawError")
+      )
+
+instance
+  Prelude.Hashable
+    RecoveryInstanceDataReplicationError
+  where
+  hashWithSalt
+    _salt
+    RecoveryInstanceDataReplicationError' {..} =
+      _salt
+        `Prelude.hashWithSalt` error
+        `Prelude.hashWithSalt` rawError
+
+instance
+  Prelude.NFData
+    RecoveryInstanceDataReplicationError
+  where
+  rnf RecoveryInstanceDataReplicationError' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf rawError
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInfo.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInfo.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfo
+-- 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.DrS.Types.RecoveryInstanceDataReplicationInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationError
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInfoReplicatedDisk
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiation
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about Data Replication
+--
+-- /See:/ 'newRecoveryInstanceDataReplicationInfo' smart constructor.
+data RecoveryInstanceDataReplicationInfo = RecoveryInstanceDataReplicationInfo'
+  { -- | Information about Data Replication
+    dataReplicationError :: Prelude.Maybe RecoveryInstanceDataReplicationError,
+    -- | Information about whether the data replication has been initiated.
+    dataReplicationInitiation :: Prelude.Maybe RecoveryInstanceDataReplicationInitiation,
+    -- | The state of the data replication.
+    dataReplicationState :: Prelude.Maybe RecoveryInstanceDataReplicationState,
+    -- | An estimate of when the data replication will be completed.
+    etaDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Data replication lag duration.
+    lagDuration :: Prelude.Maybe Prelude.Text,
+    -- | The disks that should be replicated.
+    replicatedDisks :: Prelude.Maybe [RecoveryInstanceDataReplicationInfoReplicatedDisk]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceDataReplicationInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataReplicationError', 'recoveryInstanceDataReplicationInfo_dataReplicationError' - Information about Data Replication
+--
+-- 'dataReplicationInitiation', 'recoveryInstanceDataReplicationInfo_dataReplicationInitiation' - Information about whether the data replication has been initiated.
+--
+-- 'dataReplicationState', 'recoveryInstanceDataReplicationInfo_dataReplicationState' - The state of the data replication.
+--
+-- 'etaDateTime', 'recoveryInstanceDataReplicationInfo_etaDateTime' - An estimate of when the data replication will be completed.
+--
+-- 'lagDuration', 'recoveryInstanceDataReplicationInfo_lagDuration' - Data replication lag duration.
+--
+-- 'replicatedDisks', 'recoveryInstanceDataReplicationInfo_replicatedDisks' - The disks that should be replicated.
+newRecoveryInstanceDataReplicationInfo ::
+  RecoveryInstanceDataReplicationInfo
+newRecoveryInstanceDataReplicationInfo =
+  RecoveryInstanceDataReplicationInfo'
+    { dataReplicationError =
+        Prelude.Nothing,
+      dataReplicationInitiation =
+        Prelude.Nothing,
+      dataReplicationState = Prelude.Nothing,
+      etaDateTime = Prelude.Nothing,
+      lagDuration = Prelude.Nothing,
+      replicatedDisks = Prelude.Nothing
+    }
+
+-- | Information about Data Replication
+recoveryInstanceDataReplicationInfo_dataReplicationError :: Lens.Lens' RecoveryInstanceDataReplicationInfo (Prelude.Maybe RecoveryInstanceDataReplicationError)
+recoveryInstanceDataReplicationInfo_dataReplicationError = Lens.lens (\RecoveryInstanceDataReplicationInfo' {dataReplicationError} -> dataReplicationError) (\s@RecoveryInstanceDataReplicationInfo' {} a -> s {dataReplicationError = a} :: RecoveryInstanceDataReplicationInfo)
+
+-- | Information about whether the data replication has been initiated.
+recoveryInstanceDataReplicationInfo_dataReplicationInitiation :: Lens.Lens' RecoveryInstanceDataReplicationInfo (Prelude.Maybe RecoveryInstanceDataReplicationInitiation)
+recoveryInstanceDataReplicationInfo_dataReplicationInitiation = Lens.lens (\RecoveryInstanceDataReplicationInfo' {dataReplicationInitiation} -> dataReplicationInitiation) (\s@RecoveryInstanceDataReplicationInfo' {} a -> s {dataReplicationInitiation = a} :: RecoveryInstanceDataReplicationInfo)
+
+-- | The state of the data replication.
+recoveryInstanceDataReplicationInfo_dataReplicationState :: Lens.Lens' RecoveryInstanceDataReplicationInfo (Prelude.Maybe RecoveryInstanceDataReplicationState)
+recoveryInstanceDataReplicationInfo_dataReplicationState = Lens.lens (\RecoveryInstanceDataReplicationInfo' {dataReplicationState} -> dataReplicationState) (\s@RecoveryInstanceDataReplicationInfo' {} a -> s {dataReplicationState = a} :: RecoveryInstanceDataReplicationInfo)
+
+-- | An estimate of when the data replication will be completed.
+recoveryInstanceDataReplicationInfo_etaDateTime :: Lens.Lens' RecoveryInstanceDataReplicationInfo (Prelude.Maybe Prelude.Text)
+recoveryInstanceDataReplicationInfo_etaDateTime = Lens.lens (\RecoveryInstanceDataReplicationInfo' {etaDateTime} -> etaDateTime) (\s@RecoveryInstanceDataReplicationInfo' {} a -> s {etaDateTime = a} :: RecoveryInstanceDataReplicationInfo)
+
+-- | Data replication lag duration.
+recoveryInstanceDataReplicationInfo_lagDuration :: Lens.Lens' RecoveryInstanceDataReplicationInfo (Prelude.Maybe Prelude.Text)
+recoveryInstanceDataReplicationInfo_lagDuration = Lens.lens (\RecoveryInstanceDataReplicationInfo' {lagDuration} -> lagDuration) (\s@RecoveryInstanceDataReplicationInfo' {} a -> s {lagDuration = a} :: RecoveryInstanceDataReplicationInfo)
+
+-- | The disks that should be replicated.
+recoveryInstanceDataReplicationInfo_replicatedDisks :: Lens.Lens' RecoveryInstanceDataReplicationInfo (Prelude.Maybe [RecoveryInstanceDataReplicationInfoReplicatedDisk])
+recoveryInstanceDataReplicationInfo_replicatedDisks = Lens.lens (\RecoveryInstanceDataReplicationInfo' {replicatedDisks} -> replicatedDisks) (\s@RecoveryInstanceDataReplicationInfo' {} a -> s {replicatedDisks = a} :: RecoveryInstanceDataReplicationInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    RecoveryInstanceDataReplicationInfo
+  where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceDataReplicationInfo"
+      ( \x ->
+          RecoveryInstanceDataReplicationInfo'
+            Prelude.<$> (x Data..:? "dataReplicationError")
+            Prelude.<*> (x Data..:? "dataReplicationInitiation")
+            Prelude.<*> (x Data..:? "dataReplicationState")
+            Prelude.<*> (x Data..:? "etaDateTime")
+            Prelude.<*> (x Data..:? "lagDuration")
+            Prelude.<*> ( x
+                            Data..:? "replicatedDisks"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    RecoveryInstanceDataReplicationInfo
+  where
+  hashWithSalt
+    _salt
+    RecoveryInstanceDataReplicationInfo' {..} =
+      _salt
+        `Prelude.hashWithSalt` dataReplicationError
+        `Prelude.hashWithSalt` dataReplicationInitiation
+        `Prelude.hashWithSalt` dataReplicationState
+        `Prelude.hashWithSalt` etaDateTime
+        `Prelude.hashWithSalt` lagDuration
+        `Prelude.hashWithSalt` replicatedDisks
+
+instance
+  Prelude.NFData
+    RecoveryInstanceDataReplicationInfo
+  where
+  rnf RecoveryInstanceDataReplicationInfo' {..} =
+    Prelude.rnf dataReplicationError
+      `Prelude.seq` Prelude.rnf dataReplicationInitiation
+      `Prelude.seq` Prelude.rnf dataReplicationState
+      `Prelude.seq` Prelude.rnf etaDateTime
+      `Prelude.seq` Prelude.rnf lagDuration
+      `Prelude.seq` Prelude.rnf replicatedDisks
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInfoReplicatedDisk.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInfoReplicatedDisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInfoReplicatedDisk.hs
@@ -0,0 +1,137 @@
+{-# 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.DrS.Types.RecoveryInstanceDataReplicationInfoReplicatedDisk
+-- 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.DrS.Types.RecoveryInstanceDataReplicationInfoReplicatedDisk 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 disk that should be replicated.
+--
+-- /See:/ 'newRecoveryInstanceDataReplicationInfoReplicatedDisk' smart constructor.
+data RecoveryInstanceDataReplicationInfoReplicatedDisk = RecoveryInstanceDataReplicationInfoReplicatedDisk'
+  { -- | The size of the replication backlog in bytes.
+    backloggedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the device.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The amount of data replicated so far in bytes.
+    replicatedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The amount of data to be rescanned in bytes.
+    rescannedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The total amount of data to be replicated in bytes.
+    totalStorageBytes :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceDataReplicationInfoReplicatedDisk' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backloggedStorageBytes', 'recoveryInstanceDataReplicationInfoReplicatedDisk_backloggedStorageBytes' - The size of the replication backlog in bytes.
+--
+-- 'deviceName', 'recoveryInstanceDataReplicationInfoReplicatedDisk_deviceName' - The name of the device.
+--
+-- 'replicatedStorageBytes', 'recoveryInstanceDataReplicationInfoReplicatedDisk_replicatedStorageBytes' - The amount of data replicated so far in bytes.
+--
+-- 'rescannedStorageBytes', 'recoveryInstanceDataReplicationInfoReplicatedDisk_rescannedStorageBytes' - The amount of data to be rescanned in bytes.
+--
+-- 'totalStorageBytes', 'recoveryInstanceDataReplicationInfoReplicatedDisk_totalStorageBytes' - The total amount of data to be replicated in bytes.
+newRecoveryInstanceDataReplicationInfoReplicatedDisk ::
+  RecoveryInstanceDataReplicationInfoReplicatedDisk
+newRecoveryInstanceDataReplicationInfoReplicatedDisk =
+  RecoveryInstanceDataReplicationInfoReplicatedDisk'
+    { backloggedStorageBytes =
+        Prelude.Nothing,
+      deviceName =
+        Prelude.Nothing,
+      replicatedStorageBytes =
+        Prelude.Nothing,
+      rescannedStorageBytes =
+        Prelude.Nothing,
+      totalStorageBytes =
+        Prelude.Nothing
+    }
+
+-- | The size of the replication backlog in bytes.
+recoveryInstanceDataReplicationInfoReplicatedDisk_backloggedStorageBytes :: Lens.Lens' RecoveryInstanceDataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+recoveryInstanceDataReplicationInfoReplicatedDisk_backloggedStorageBytes = Lens.lens (\RecoveryInstanceDataReplicationInfoReplicatedDisk' {backloggedStorageBytes} -> backloggedStorageBytes) (\s@RecoveryInstanceDataReplicationInfoReplicatedDisk' {} a -> s {backloggedStorageBytes = a} :: RecoveryInstanceDataReplicationInfoReplicatedDisk)
+
+-- | The name of the device.
+recoveryInstanceDataReplicationInfoReplicatedDisk_deviceName :: Lens.Lens' RecoveryInstanceDataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Text)
+recoveryInstanceDataReplicationInfoReplicatedDisk_deviceName = Lens.lens (\RecoveryInstanceDataReplicationInfoReplicatedDisk' {deviceName} -> deviceName) (\s@RecoveryInstanceDataReplicationInfoReplicatedDisk' {} a -> s {deviceName = a} :: RecoveryInstanceDataReplicationInfoReplicatedDisk)
+
+-- | The amount of data replicated so far in bytes.
+recoveryInstanceDataReplicationInfoReplicatedDisk_replicatedStorageBytes :: Lens.Lens' RecoveryInstanceDataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+recoveryInstanceDataReplicationInfoReplicatedDisk_replicatedStorageBytes = Lens.lens (\RecoveryInstanceDataReplicationInfoReplicatedDisk' {replicatedStorageBytes} -> replicatedStorageBytes) (\s@RecoveryInstanceDataReplicationInfoReplicatedDisk' {} a -> s {replicatedStorageBytes = a} :: RecoveryInstanceDataReplicationInfoReplicatedDisk)
+
+-- | The amount of data to be rescanned in bytes.
+recoveryInstanceDataReplicationInfoReplicatedDisk_rescannedStorageBytes :: Lens.Lens' RecoveryInstanceDataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+recoveryInstanceDataReplicationInfoReplicatedDisk_rescannedStorageBytes = Lens.lens (\RecoveryInstanceDataReplicationInfoReplicatedDisk' {rescannedStorageBytes} -> rescannedStorageBytes) (\s@RecoveryInstanceDataReplicationInfoReplicatedDisk' {} a -> s {rescannedStorageBytes = a} :: RecoveryInstanceDataReplicationInfoReplicatedDisk)
+
+-- | The total amount of data to be replicated in bytes.
+recoveryInstanceDataReplicationInfoReplicatedDisk_totalStorageBytes :: Lens.Lens' RecoveryInstanceDataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Natural)
+recoveryInstanceDataReplicationInfoReplicatedDisk_totalStorageBytes = Lens.lens (\RecoveryInstanceDataReplicationInfoReplicatedDisk' {totalStorageBytes} -> totalStorageBytes) (\s@RecoveryInstanceDataReplicationInfoReplicatedDisk' {} a -> s {totalStorageBytes = a} :: RecoveryInstanceDataReplicationInfoReplicatedDisk)
+
+instance
+  Data.FromJSON
+    RecoveryInstanceDataReplicationInfoReplicatedDisk
+  where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceDataReplicationInfoReplicatedDisk"
+      ( \x ->
+          RecoveryInstanceDataReplicationInfoReplicatedDisk'
+            Prelude.<$> (x Data..:? "backloggedStorageBytes")
+            Prelude.<*> (x Data..:? "deviceName")
+            Prelude.<*> (x Data..:? "replicatedStorageBytes")
+            Prelude.<*> (x Data..:? "rescannedStorageBytes")
+            Prelude.<*> (x Data..:? "totalStorageBytes")
+      )
+
+instance
+  Prelude.Hashable
+    RecoveryInstanceDataReplicationInfoReplicatedDisk
+  where
+  hashWithSalt
+    _salt
+    RecoveryInstanceDataReplicationInfoReplicatedDisk' {..} =
+      _salt
+        `Prelude.hashWithSalt` backloggedStorageBytes
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` replicatedStorageBytes
+        `Prelude.hashWithSalt` rescannedStorageBytes
+        `Prelude.hashWithSalt` totalStorageBytes
+
+instance
+  Prelude.NFData
+    RecoveryInstanceDataReplicationInfoReplicatedDisk
+  where
+  rnf
+    RecoveryInstanceDataReplicationInfoReplicatedDisk' {..} =
+      Prelude.rnf backloggedStorageBytes
+        `Prelude.seq` Prelude.rnf deviceName
+        `Prelude.seq` Prelude.rnf replicatedStorageBytes
+        `Prelude.seq` Prelude.rnf rescannedStorageBytes
+        `Prelude.seq` Prelude.rnf totalStorageBytes
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiation.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiation.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiation
+-- 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.DrS.Types.RecoveryInstanceDataReplicationInitiation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStep
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data replication initiation.
+--
+-- /See:/ 'newRecoveryInstanceDataReplicationInitiation' smart constructor.
+data RecoveryInstanceDataReplicationInitiation = RecoveryInstanceDataReplicationInitiation'
+  { -- | The date and time of the current attempt to initiate data replication.
+    startDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The steps of the current attempt to initiate data replication.
+    steps :: Prelude.Maybe [RecoveryInstanceDataReplicationInitiationStep]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceDataReplicationInitiation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startDateTime', 'recoveryInstanceDataReplicationInitiation_startDateTime' - The date and time of the current attempt to initiate data replication.
+--
+-- 'steps', 'recoveryInstanceDataReplicationInitiation_steps' - The steps of the current attempt to initiate data replication.
+newRecoveryInstanceDataReplicationInitiation ::
+  RecoveryInstanceDataReplicationInitiation
+newRecoveryInstanceDataReplicationInitiation =
+  RecoveryInstanceDataReplicationInitiation'
+    { startDateTime =
+        Prelude.Nothing,
+      steps = Prelude.Nothing
+    }
+
+-- | The date and time of the current attempt to initiate data replication.
+recoveryInstanceDataReplicationInitiation_startDateTime :: Lens.Lens' RecoveryInstanceDataReplicationInitiation (Prelude.Maybe Prelude.Text)
+recoveryInstanceDataReplicationInitiation_startDateTime = Lens.lens (\RecoveryInstanceDataReplicationInitiation' {startDateTime} -> startDateTime) (\s@RecoveryInstanceDataReplicationInitiation' {} a -> s {startDateTime = a} :: RecoveryInstanceDataReplicationInitiation)
+
+-- | The steps of the current attempt to initiate data replication.
+recoveryInstanceDataReplicationInitiation_steps :: Lens.Lens' RecoveryInstanceDataReplicationInitiation (Prelude.Maybe [RecoveryInstanceDataReplicationInitiationStep])
+recoveryInstanceDataReplicationInitiation_steps = Lens.lens (\RecoveryInstanceDataReplicationInitiation' {steps} -> steps) (\s@RecoveryInstanceDataReplicationInitiation' {} a -> s {steps = a} :: RecoveryInstanceDataReplicationInitiation) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    RecoveryInstanceDataReplicationInitiation
+  where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceDataReplicationInitiation"
+      ( \x ->
+          RecoveryInstanceDataReplicationInitiation'
+            Prelude.<$> (x Data..:? "startDateTime")
+            Prelude.<*> (x Data..:? "steps" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    RecoveryInstanceDataReplicationInitiation
+  where
+  hashWithSalt
+    _salt
+    RecoveryInstanceDataReplicationInitiation' {..} =
+      _salt
+        `Prelude.hashWithSalt` startDateTime
+        `Prelude.hashWithSalt` steps
+
+instance
+  Prelude.NFData
+    RecoveryInstanceDataReplicationInitiation
+  where
+  rnf RecoveryInstanceDataReplicationInitiation' {..} =
+    Prelude.rnf startDateTime
+      `Prelude.seq` Prelude.rnf steps
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStep.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStep.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStep
+-- 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.DrS.Types.RecoveryInstanceDataReplicationInitiationStep where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepName
+import Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data replication initiation step.
+--
+-- /See:/ 'newRecoveryInstanceDataReplicationInitiationStep' smart constructor.
+data RecoveryInstanceDataReplicationInitiationStep = RecoveryInstanceDataReplicationInitiationStep'
+  { -- | The name of the step.
+    name :: Prelude.Maybe RecoveryInstanceDataReplicationInitiationStepName,
+    -- | The status of the step.
+    status :: Prelude.Maybe RecoveryInstanceDataReplicationInitiationStepStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceDataReplicationInitiationStep' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'recoveryInstanceDataReplicationInitiationStep_name' - The name of the step.
+--
+-- 'status', 'recoveryInstanceDataReplicationInitiationStep_status' - The status of the step.
+newRecoveryInstanceDataReplicationInitiationStep ::
+  RecoveryInstanceDataReplicationInitiationStep
+newRecoveryInstanceDataReplicationInitiationStep =
+  RecoveryInstanceDataReplicationInitiationStep'
+    { name =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The name of the step.
+recoveryInstanceDataReplicationInitiationStep_name :: Lens.Lens' RecoveryInstanceDataReplicationInitiationStep (Prelude.Maybe RecoveryInstanceDataReplicationInitiationStepName)
+recoveryInstanceDataReplicationInitiationStep_name = Lens.lens (\RecoveryInstanceDataReplicationInitiationStep' {name} -> name) (\s@RecoveryInstanceDataReplicationInitiationStep' {} a -> s {name = a} :: RecoveryInstanceDataReplicationInitiationStep)
+
+-- | The status of the step.
+recoveryInstanceDataReplicationInitiationStep_status :: Lens.Lens' RecoveryInstanceDataReplicationInitiationStep (Prelude.Maybe RecoveryInstanceDataReplicationInitiationStepStatus)
+recoveryInstanceDataReplicationInitiationStep_status = Lens.lens (\RecoveryInstanceDataReplicationInitiationStep' {status} -> status) (\s@RecoveryInstanceDataReplicationInitiationStep' {} a -> s {status = a} :: RecoveryInstanceDataReplicationInitiationStep)
+
+instance
+  Data.FromJSON
+    RecoveryInstanceDataReplicationInitiationStep
+  where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceDataReplicationInitiationStep"
+      ( \x ->
+          RecoveryInstanceDataReplicationInitiationStep'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance
+  Prelude.Hashable
+    RecoveryInstanceDataReplicationInitiationStep
+  where
+  hashWithSalt
+    _salt
+    RecoveryInstanceDataReplicationInitiationStep' {..} =
+      _salt
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    RecoveryInstanceDataReplicationInitiationStep
+  where
+  rnf
+    RecoveryInstanceDataReplicationInitiationStep' {..} =
+      Prelude.rnf name `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStepName.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStepName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStepName.hs
@@ -0,0 +1,151 @@
+{-# 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.DrS.Types.RecoveryInstanceDataReplicationInitiationStepName
+-- 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.DrS.Types.RecoveryInstanceDataReplicationInitiationStepName
+  ( RecoveryInstanceDataReplicationInitiationStepName
+      ( ..,
+        RecoveryInstanceDataReplicationInitiationStepName_ATTACH_STAGING_DISKS,
+        RecoveryInstanceDataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE,
+        RecoveryInstanceDataReplicationInitiationStepName_BOOT_REPLICATION_SERVER,
+        RecoveryInstanceDataReplicationInitiationStepName_COMPLETE_VOLUME_MAPPING,
+        RecoveryInstanceDataReplicationInitiationStepName_CONFIGURE_REPLICATION_SOFTWARE,
+        RecoveryInstanceDataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER,
+        RecoveryInstanceDataReplicationInitiationStepName_CREATE_SECURITY_GROUP,
+        RecoveryInstanceDataReplicationInitiationStepName_CREATE_STAGING_DISKS,
+        RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE,
+        RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT,
+        RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION,
+        RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION,
+        RecoveryInstanceDataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER,
+        RecoveryInstanceDataReplicationInitiationStepName_LINK_FAILBACK_CLIENT_WITH_RECOVERY_INSTANCE,
+        RecoveryInstanceDataReplicationInitiationStepName_PAIR_AGENT_WITH_REPLICATION_SOFTWARE,
+        RecoveryInstanceDataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT,
+        RecoveryInstanceDataReplicationInitiationStepName_START_DATA_TRANSFER,
+        RecoveryInstanceDataReplicationInitiationStepName_WAIT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecoveryInstanceDataReplicationInitiationStepName = RecoveryInstanceDataReplicationInitiationStepName'
+  { fromRecoveryInstanceDataReplicationInitiationStepName ::
+      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 RecoveryInstanceDataReplicationInitiationStepName_ATTACH_STAGING_DISKS :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_ATTACH_STAGING_DISKS = RecoveryInstanceDataReplicationInitiationStepName' "ATTACH_STAGING_DISKS"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE = RecoveryInstanceDataReplicationInitiationStepName' "AUTHENTICATE_WITH_SERVICE"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_BOOT_REPLICATION_SERVER :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_BOOT_REPLICATION_SERVER = RecoveryInstanceDataReplicationInitiationStepName' "BOOT_REPLICATION_SERVER"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_COMPLETE_VOLUME_MAPPING :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_COMPLETE_VOLUME_MAPPING = RecoveryInstanceDataReplicationInitiationStepName' "COMPLETE_VOLUME_MAPPING"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_CONFIGURE_REPLICATION_SOFTWARE :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_CONFIGURE_REPLICATION_SOFTWARE = RecoveryInstanceDataReplicationInitiationStepName' "CONFIGURE_REPLICATION_SOFTWARE"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER = RecoveryInstanceDataReplicationInitiationStepName' "CONNECT_AGENT_TO_REPLICATION_SERVER"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_CREATE_SECURITY_GROUP :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_CREATE_SECURITY_GROUP = RecoveryInstanceDataReplicationInitiationStepName' "CREATE_SECURITY_GROUP"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_CREATE_STAGING_DISKS :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_CREATE_STAGING_DISKS = RecoveryInstanceDataReplicationInitiationStepName' "CREATE_STAGING_DISKS"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE = RecoveryInstanceDataReplicationInitiationStepName' "DOWNLOAD_REPLICATION_SOFTWARE"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT = RecoveryInstanceDataReplicationInitiationStepName' "DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION = RecoveryInstanceDataReplicationInitiationStepName' "ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION = RecoveryInstanceDataReplicationInitiationStepName' "ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER = RecoveryInstanceDataReplicationInitiationStepName' "LAUNCH_REPLICATION_SERVER"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_LINK_FAILBACK_CLIENT_WITH_RECOVERY_INSTANCE :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_LINK_FAILBACK_CLIENT_WITH_RECOVERY_INSTANCE = RecoveryInstanceDataReplicationInitiationStepName' "LINK_FAILBACK_CLIENT_WITH_RECOVERY_INSTANCE"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_PAIR_AGENT_WITH_REPLICATION_SOFTWARE :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_PAIR_AGENT_WITH_REPLICATION_SOFTWARE = RecoveryInstanceDataReplicationInitiationStepName' "PAIR_AGENT_WITH_REPLICATION_SOFTWARE"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT = RecoveryInstanceDataReplicationInitiationStepName' "PAIR_REPLICATION_SERVER_WITH_AGENT"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_START_DATA_TRANSFER :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_START_DATA_TRANSFER = RecoveryInstanceDataReplicationInitiationStepName' "START_DATA_TRANSFER"
+
+pattern RecoveryInstanceDataReplicationInitiationStepName_WAIT :: RecoveryInstanceDataReplicationInitiationStepName
+pattern RecoveryInstanceDataReplicationInitiationStepName_WAIT = RecoveryInstanceDataReplicationInitiationStepName' "WAIT"
+
+{-# COMPLETE
+  RecoveryInstanceDataReplicationInitiationStepName_ATTACH_STAGING_DISKS,
+  RecoveryInstanceDataReplicationInitiationStepName_AUTHENTICATE_WITH_SERVICE,
+  RecoveryInstanceDataReplicationInitiationStepName_BOOT_REPLICATION_SERVER,
+  RecoveryInstanceDataReplicationInitiationStepName_COMPLETE_VOLUME_MAPPING,
+  RecoveryInstanceDataReplicationInitiationStepName_CONFIGURE_REPLICATION_SOFTWARE,
+  RecoveryInstanceDataReplicationInitiationStepName_CONNECT_AGENT_TO_REPLICATION_SERVER,
+  RecoveryInstanceDataReplicationInitiationStepName_CREATE_SECURITY_GROUP,
+  RecoveryInstanceDataReplicationInitiationStepName_CREATE_STAGING_DISKS,
+  RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE,
+  RecoveryInstanceDataReplicationInitiationStepName_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT,
+  RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION,
+  RecoveryInstanceDataReplicationInitiationStepName_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION,
+  RecoveryInstanceDataReplicationInitiationStepName_LAUNCH_REPLICATION_SERVER,
+  RecoveryInstanceDataReplicationInitiationStepName_LINK_FAILBACK_CLIENT_WITH_RECOVERY_INSTANCE,
+  RecoveryInstanceDataReplicationInitiationStepName_PAIR_AGENT_WITH_REPLICATION_SOFTWARE,
+  RecoveryInstanceDataReplicationInitiationStepName_PAIR_REPLICATION_SERVER_WITH_AGENT,
+  RecoveryInstanceDataReplicationInitiationStepName_START_DATA_TRANSFER,
+  RecoveryInstanceDataReplicationInitiationStepName_WAIT,
+  RecoveryInstanceDataReplicationInitiationStepName'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStepStatus.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStepStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationInitiationStepStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceDataReplicationInitiationStepStatus
+-- 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.DrS.Types.RecoveryInstanceDataReplicationInitiationStepStatus
+  ( RecoveryInstanceDataReplicationInitiationStepStatus
+      ( ..,
+        RecoveryInstanceDataReplicationInitiationStepStatus_FAILED,
+        RecoveryInstanceDataReplicationInitiationStepStatus_IN_PROGRESS,
+        RecoveryInstanceDataReplicationInitiationStepStatus_NOT_STARTED,
+        RecoveryInstanceDataReplicationInitiationStepStatus_SKIPPED,
+        RecoveryInstanceDataReplicationInitiationStepStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecoveryInstanceDataReplicationInitiationStepStatus = RecoveryInstanceDataReplicationInitiationStepStatus'
+  { fromRecoveryInstanceDataReplicationInitiationStepStatus ::
+      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 RecoveryInstanceDataReplicationInitiationStepStatus_FAILED :: RecoveryInstanceDataReplicationInitiationStepStatus
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_FAILED = RecoveryInstanceDataReplicationInitiationStepStatus' "FAILED"
+
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_IN_PROGRESS :: RecoveryInstanceDataReplicationInitiationStepStatus
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_IN_PROGRESS = RecoveryInstanceDataReplicationInitiationStepStatus' "IN_PROGRESS"
+
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_NOT_STARTED :: RecoveryInstanceDataReplicationInitiationStepStatus
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_NOT_STARTED = RecoveryInstanceDataReplicationInitiationStepStatus' "NOT_STARTED"
+
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_SKIPPED :: RecoveryInstanceDataReplicationInitiationStepStatus
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_SKIPPED = RecoveryInstanceDataReplicationInitiationStepStatus' "SKIPPED"
+
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_SUCCEEDED :: RecoveryInstanceDataReplicationInitiationStepStatus
+pattern RecoveryInstanceDataReplicationInitiationStepStatus_SUCCEEDED = RecoveryInstanceDataReplicationInitiationStepStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  RecoveryInstanceDataReplicationInitiationStepStatus_FAILED,
+  RecoveryInstanceDataReplicationInitiationStepStatus_IN_PROGRESS,
+  RecoveryInstanceDataReplicationInitiationStepStatus_NOT_STARTED,
+  RecoveryInstanceDataReplicationInitiationStepStatus_SKIPPED,
+  RecoveryInstanceDataReplicationInitiationStepStatus_SUCCEEDED,
+  RecoveryInstanceDataReplicationInitiationStepStatus'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationState.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDataReplicationState.hs
@@ -0,0 +1,121 @@
+{-# 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.DrS.Types.RecoveryInstanceDataReplicationState
+-- 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.DrS.Types.RecoveryInstanceDataReplicationState
+  ( RecoveryInstanceDataReplicationState
+      ( ..,
+        RecoveryInstanceDataReplicationState_BACKLOG,
+        RecoveryInstanceDataReplicationState_CONTINUOUS,
+        RecoveryInstanceDataReplicationState_CREATING_SNAPSHOT,
+        RecoveryInstanceDataReplicationState_DISCONNECTED,
+        RecoveryInstanceDataReplicationState_INITIAL_SYNC,
+        RecoveryInstanceDataReplicationState_INITIATING,
+        RecoveryInstanceDataReplicationState_NOT_STARTED,
+        RecoveryInstanceDataReplicationState_PAUSED,
+        RecoveryInstanceDataReplicationState_REPLICATION_STATE_NOT_AVAILABLE,
+        RecoveryInstanceDataReplicationState_RESCAN,
+        RecoveryInstanceDataReplicationState_STALLED,
+        RecoveryInstanceDataReplicationState_STOPPED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecoveryInstanceDataReplicationState = RecoveryInstanceDataReplicationState'
+  { fromRecoveryInstanceDataReplicationState ::
+      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 RecoveryInstanceDataReplicationState_BACKLOG :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_BACKLOG = RecoveryInstanceDataReplicationState' "BACKLOG"
+
+pattern RecoveryInstanceDataReplicationState_CONTINUOUS :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_CONTINUOUS = RecoveryInstanceDataReplicationState' "CONTINUOUS"
+
+pattern RecoveryInstanceDataReplicationState_CREATING_SNAPSHOT :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_CREATING_SNAPSHOT = RecoveryInstanceDataReplicationState' "CREATING_SNAPSHOT"
+
+pattern RecoveryInstanceDataReplicationState_DISCONNECTED :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_DISCONNECTED = RecoveryInstanceDataReplicationState' "DISCONNECTED"
+
+pattern RecoveryInstanceDataReplicationState_INITIAL_SYNC :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_INITIAL_SYNC = RecoveryInstanceDataReplicationState' "INITIAL_SYNC"
+
+pattern RecoveryInstanceDataReplicationState_INITIATING :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_INITIATING = RecoveryInstanceDataReplicationState' "INITIATING"
+
+pattern RecoveryInstanceDataReplicationState_NOT_STARTED :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_NOT_STARTED = RecoveryInstanceDataReplicationState' "NOT_STARTED"
+
+pattern RecoveryInstanceDataReplicationState_PAUSED :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_PAUSED = RecoveryInstanceDataReplicationState' "PAUSED"
+
+pattern RecoveryInstanceDataReplicationState_REPLICATION_STATE_NOT_AVAILABLE :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_REPLICATION_STATE_NOT_AVAILABLE = RecoveryInstanceDataReplicationState' "REPLICATION_STATE_NOT_AVAILABLE"
+
+pattern RecoveryInstanceDataReplicationState_RESCAN :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_RESCAN = RecoveryInstanceDataReplicationState' "RESCAN"
+
+pattern RecoveryInstanceDataReplicationState_STALLED :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_STALLED = RecoveryInstanceDataReplicationState' "STALLED"
+
+pattern RecoveryInstanceDataReplicationState_STOPPED :: RecoveryInstanceDataReplicationState
+pattern RecoveryInstanceDataReplicationState_STOPPED = RecoveryInstanceDataReplicationState' "STOPPED"
+
+{-# COMPLETE
+  RecoveryInstanceDataReplicationState_BACKLOG,
+  RecoveryInstanceDataReplicationState_CONTINUOUS,
+  RecoveryInstanceDataReplicationState_CREATING_SNAPSHOT,
+  RecoveryInstanceDataReplicationState_DISCONNECTED,
+  RecoveryInstanceDataReplicationState_INITIAL_SYNC,
+  RecoveryInstanceDataReplicationState_INITIATING,
+  RecoveryInstanceDataReplicationState_NOT_STARTED,
+  RecoveryInstanceDataReplicationState_PAUSED,
+  RecoveryInstanceDataReplicationState_REPLICATION_STATE_NOT_AVAILABLE,
+  RecoveryInstanceDataReplicationState_RESCAN,
+  RecoveryInstanceDataReplicationState_STALLED,
+  RecoveryInstanceDataReplicationState_STOPPED,
+  RecoveryInstanceDataReplicationState'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceDisk.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceDisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceDisk.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceDisk
+-- 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.DrS.Types.RecoveryInstanceDisk 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
+
+-- | An object representing a block storage device on the Recovery Instance.
+--
+-- /See:/ 'newRecoveryInstanceDisk' smart constructor.
+data RecoveryInstanceDisk = RecoveryInstanceDisk'
+  { -- | The amount of storage on the disk in bytes.
+    bytes :: Prelude.Maybe Prelude.Natural,
+    -- | The EBS Volume ID of this disk.
+    ebsVolumeID :: Prelude.Maybe Prelude.Text,
+    -- | The internal device name of this disk. This is the name that is visible
+    -- on the machine itself and not from the EC2 console.
+    internalDeviceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceDisk' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bytes', 'recoveryInstanceDisk_bytes' - The amount of storage on the disk in bytes.
+--
+-- 'ebsVolumeID', 'recoveryInstanceDisk_ebsVolumeID' - The EBS Volume ID of this disk.
+--
+-- 'internalDeviceName', 'recoveryInstanceDisk_internalDeviceName' - The internal device name of this disk. This is the name that is visible
+-- on the machine itself and not from the EC2 console.
+newRecoveryInstanceDisk ::
+  RecoveryInstanceDisk
+newRecoveryInstanceDisk =
+  RecoveryInstanceDisk'
+    { bytes = Prelude.Nothing,
+      ebsVolumeID = Prelude.Nothing,
+      internalDeviceName = Prelude.Nothing
+    }
+
+-- | The amount of storage on the disk in bytes.
+recoveryInstanceDisk_bytes :: Lens.Lens' RecoveryInstanceDisk (Prelude.Maybe Prelude.Natural)
+recoveryInstanceDisk_bytes = Lens.lens (\RecoveryInstanceDisk' {bytes} -> bytes) (\s@RecoveryInstanceDisk' {} a -> s {bytes = a} :: RecoveryInstanceDisk)
+
+-- | The EBS Volume ID of this disk.
+recoveryInstanceDisk_ebsVolumeID :: Lens.Lens' RecoveryInstanceDisk (Prelude.Maybe Prelude.Text)
+recoveryInstanceDisk_ebsVolumeID = Lens.lens (\RecoveryInstanceDisk' {ebsVolumeID} -> ebsVolumeID) (\s@RecoveryInstanceDisk' {} a -> s {ebsVolumeID = a} :: RecoveryInstanceDisk)
+
+-- | The internal device name of this disk. This is the name that is visible
+-- on the machine itself and not from the EC2 console.
+recoveryInstanceDisk_internalDeviceName :: Lens.Lens' RecoveryInstanceDisk (Prelude.Maybe Prelude.Text)
+recoveryInstanceDisk_internalDeviceName = Lens.lens (\RecoveryInstanceDisk' {internalDeviceName} -> internalDeviceName) (\s@RecoveryInstanceDisk' {} a -> s {internalDeviceName = a} :: RecoveryInstanceDisk)
+
+instance Data.FromJSON RecoveryInstanceDisk where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceDisk"
+      ( \x ->
+          RecoveryInstanceDisk'
+            Prelude.<$> (x Data..:? "bytes")
+            Prelude.<*> (x Data..:? "ebsVolumeID")
+            Prelude.<*> (x Data..:? "internalDeviceName")
+      )
+
+instance Prelude.Hashable RecoveryInstanceDisk where
+  hashWithSalt _salt RecoveryInstanceDisk' {..} =
+    _salt
+      `Prelude.hashWithSalt` bytes
+      `Prelude.hashWithSalt` ebsVolumeID
+      `Prelude.hashWithSalt` internalDeviceName
+
+instance Prelude.NFData RecoveryInstanceDisk where
+  rnf RecoveryInstanceDisk' {..} =
+    Prelude.rnf bytes
+      `Prelude.seq` Prelude.rnf ebsVolumeID
+      `Prelude.seq` Prelude.rnf internalDeviceName
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceFailback.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceFailback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceFailback.hs
@@ -0,0 +1,202 @@
+{-# 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.DrS.Types.RecoveryInstanceFailback
+-- 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.DrS.Types.RecoveryInstanceFailback where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.FailbackLaunchType
+import Amazonka.DrS.Types.FailbackState
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing failback related information of the Recovery
+-- Instance.
+--
+-- /See:/ 'newRecoveryInstanceFailback' smart constructor.
+data RecoveryInstanceFailback = RecoveryInstanceFailback'
+  { -- | The date and time the agent on the Recovery Instance was last seen by
+    -- the service.
+    agentLastSeenByServiceDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that the Recovery Instance has been replicating for.
+    elapsedReplicationDuration :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the failback client that this Recovery Instance is associated
+    -- with.
+    failbackClientID :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the failback client was last seen by the service.
+    failbackClientLastSeenByServiceDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the failback initiation started.
+    failbackInitiationTime :: Prelude.Maybe Prelude.Text,
+    -- | The Job ID of the last failback log for this Recovery Instance.
+    failbackJobID :: Prelude.Maybe Prelude.Text,
+    -- | The launch type (Recovery \/ Drill) of the last launch for the failback
+    -- replication of this recovery instance.
+    failbackLaunchType :: Prelude.Maybe FailbackLaunchType,
+    -- | Whether we are failing back to the original Source Server for this
+    -- Recovery Instance.
+    failbackToOriginalServer :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time of the first byte that was replicated from the
+    -- Recovery Instance.
+    firstByteDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The state of the failback process that this Recovery Instance is in.
+    state :: Prelude.Maybe FailbackState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceFailback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'agentLastSeenByServiceDateTime', 'recoveryInstanceFailback_agentLastSeenByServiceDateTime' - The date and time the agent on the Recovery Instance was last seen by
+-- the service.
+--
+-- 'elapsedReplicationDuration', 'recoveryInstanceFailback_elapsedReplicationDuration' - The amount of time that the Recovery Instance has been replicating for.
+--
+-- 'failbackClientID', 'recoveryInstanceFailback_failbackClientID' - The ID of the failback client that this Recovery Instance is associated
+-- with.
+--
+-- 'failbackClientLastSeenByServiceDateTime', 'recoveryInstanceFailback_failbackClientLastSeenByServiceDateTime' - The date and time that the failback client was last seen by the service.
+--
+-- 'failbackInitiationTime', 'recoveryInstanceFailback_failbackInitiationTime' - The date and time that the failback initiation started.
+--
+-- 'failbackJobID', 'recoveryInstanceFailback_failbackJobID' - The Job ID of the last failback log for this Recovery Instance.
+--
+-- 'failbackLaunchType', 'recoveryInstanceFailback_failbackLaunchType' - The launch type (Recovery \/ Drill) of the last launch for the failback
+-- replication of this recovery instance.
+--
+-- 'failbackToOriginalServer', 'recoveryInstanceFailback_failbackToOriginalServer' - Whether we are failing back to the original Source Server for this
+-- Recovery Instance.
+--
+-- 'firstByteDateTime', 'recoveryInstanceFailback_firstByteDateTime' - The date and time of the first byte that was replicated from the
+-- Recovery Instance.
+--
+-- 'state', 'recoveryInstanceFailback_state' - The state of the failback process that this Recovery Instance is in.
+newRecoveryInstanceFailback ::
+  RecoveryInstanceFailback
+newRecoveryInstanceFailback =
+  RecoveryInstanceFailback'
+    { agentLastSeenByServiceDateTime =
+        Prelude.Nothing,
+      elapsedReplicationDuration = Prelude.Nothing,
+      failbackClientID = Prelude.Nothing,
+      failbackClientLastSeenByServiceDateTime =
+        Prelude.Nothing,
+      failbackInitiationTime = Prelude.Nothing,
+      failbackJobID = Prelude.Nothing,
+      failbackLaunchType = Prelude.Nothing,
+      failbackToOriginalServer = Prelude.Nothing,
+      firstByteDateTime = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The date and time the agent on the Recovery Instance was last seen by
+-- the service.
+recoveryInstanceFailback_agentLastSeenByServiceDateTime :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_agentLastSeenByServiceDateTime = Lens.lens (\RecoveryInstanceFailback' {agentLastSeenByServiceDateTime} -> agentLastSeenByServiceDateTime) (\s@RecoveryInstanceFailback' {} a -> s {agentLastSeenByServiceDateTime = a} :: RecoveryInstanceFailback)
+
+-- | The amount of time that the Recovery Instance has been replicating for.
+recoveryInstanceFailback_elapsedReplicationDuration :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_elapsedReplicationDuration = Lens.lens (\RecoveryInstanceFailback' {elapsedReplicationDuration} -> elapsedReplicationDuration) (\s@RecoveryInstanceFailback' {} a -> s {elapsedReplicationDuration = a} :: RecoveryInstanceFailback)
+
+-- | The ID of the failback client that this Recovery Instance is associated
+-- with.
+recoveryInstanceFailback_failbackClientID :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_failbackClientID = Lens.lens (\RecoveryInstanceFailback' {failbackClientID} -> failbackClientID) (\s@RecoveryInstanceFailback' {} a -> s {failbackClientID = a} :: RecoveryInstanceFailback)
+
+-- | The date and time that the failback client was last seen by the service.
+recoveryInstanceFailback_failbackClientLastSeenByServiceDateTime :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_failbackClientLastSeenByServiceDateTime = Lens.lens (\RecoveryInstanceFailback' {failbackClientLastSeenByServiceDateTime} -> failbackClientLastSeenByServiceDateTime) (\s@RecoveryInstanceFailback' {} a -> s {failbackClientLastSeenByServiceDateTime = a} :: RecoveryInstanceFailback)
+
+-- | The date and time that the failback initiation started.
+recoveryInstanceFailback_failbackInitiationTime :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_failbackInitiationTime = Lens.lens (\RecoveryInstanceFailback' {failbackInitiationTime} -> failbackInitiationTime) (\s@RecoveryInstanceFailback' {} a -> s {failbackInitiationTime = a} :: RecoveryInstanceFailback)
+
+-- | The Job ID of the last failback log for this Recovery Instance.
+recoveryInstanceFailback_failbackJobID :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_failbackJobID = Lens.lens (\RecoveryInstanceFailback' {failbackJobID} -> failbackJobID) (\s@RecoveryInstanceFailback' {} a -> s {failbackJobID = a} :: RecoveryInstanceFailback)
+
+-- | The launch type (Recovery \/ Drill) of the last launch for the failback
+-- replication of this recovery instance.
+recoveryInstanceFailback_failbackLaunchType :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe FailbackLaunchType)
+recoveryInstanceFailback_failbackLaunchType = Lens.lens (\RecoveryInstanceFailback' {failbackLaunchType} -> failbackLaunchType) (\s@RecoveryInstanceFailback' {} a -> s {failbackLaunchType = a} :: RecoveryInstanceFailback)
+
+-- | Whether we are failing back to the original Source Server for this
+-- Recovery Instance.
+recoveryInstanceFailback_failbackToOriginalServer :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Bool)
+recoveryInstanceFailback_failbackToOriginalServer = Lens.lens (\RecoveryInstanceFailback' {failbackToOriginalServer} -> failbackToOriginalServer) (\s@RecoveryInstanceFailback' {} a -> s {failbackToOriginalServer = a} :: RecoveryInstanceFailback)
+
+-- | The date and time of the first byte that was replicated from the
+-- Recovery Instance.
+recoveryInstanceFailback_firstByteDateTime :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe Prelude.Text)
+recoveryInstanceFailback_firstByteDateTime = Lens.lens (\RecoveryInstanceFailback' {firstByteDateTime} -> firstByteDateTime) (\s@RecoveryInstanceFailback' {} a -> s {firstByteDateTime = a} :: RecoveryInstanceFailback)
+
+-- | The state of the failback process that this Recovery Instance is in.
+recoveryInstanceFailback_state :: Lens.Lens' RecoveryInstanceFailback (Prelude.Maybe FailbackState)
+recoveryInstanceFailback_state = Lens.lens (\RecoveryInstanceFailback' {state} -> state) (\s@RecoveryInstanceFailback' {} a -> s {state = a} :: RecoveryInstanceFailback)
+
+instance Data.FromJSON RecoveryInstanceFailback where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceFailback"
+      ( \x ->
+          RecoveryInstanceFailback'
+            Prelude.<$> (x Data..:? "agentLastSeenByServiceDateTime")
+            Prelude.<*> (x Data..:? "elapsedReplicationDuration")
+            Prelude.<*> (x Data..:? "failbackClientID")
+            Prelude.<*> ( x
+                            Data..:? "failbackClientLastSeenByServiceDateTime"
+                        )
+            Prelude.<*> (x Data..:? "failbackInitiationTime")
+            Prelude.<*> (x Data..:? "failbackJobID")
+            Prelude.<*> (x Data..:? "failbackLaunchType")
+            Prelude.<*> (x Data..:? "failbackToOriginalServer")
+            Prelude.<*> (x Data..:? "firstByteDateTime")
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance Prelude.Hashable RecoveryInstanceFailback where
+  hashWithSalt _salt RecoveryInstanceFailback' {..} =
+    _salt
+      `Prelude.hashWithSalt` agentLastSeenByServiceDateTime
+      `Prelude.hashWithSalt` elapsedReplicationDuration
+      `Prelude.hashWithSalt` failbackClientID
+      `Prelude.hashWithSalt` failbackClientLastSeenByServiceDateTime
+      `Prelude.hashWithSalt` failbackInitiationTime
+      `Prelude.hashWithSalt` failbackJobID
+      `Prelude.hashWithSalt` failbackLaunchType
+      `Prelude.hashWithSalt` failbackToOriginalServer
+      `Prelude.hashWithSalt` firstByteDateTime
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData RecoveryInstanceFailback where
+  rnf RecoveryInstanceFailback' {..} =
+    Prelude.rnf agentLastSeenByServiceDateTime
+      `Prelude.seq` Prelude.rnf elapsedReplicationDuration
+      `Prelude.seq` Prelude.rnf failbackClientID
+      `Prelude.seq` Prelude.rnf failbackClientLastSeenByServiceDateTime
+      `Prelude.seq` Prelude.rnf failbackInitiationTime
+      `Prelude.seq` Prelude.rnf failbackJobID
+      `Prelude.seq` Prelude.rnf failbackLaunchType
+      `Prelude.seq` Prelude.rnf failbackToOriginalServer
+      `Prelude.seq` Prelude.rnf firstByteDateTime
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/DrS/Types/RecoveryInstanceProperties.hs b/gen/Amazonka/DrS/Types/RecoveryInstanceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoveryInstanceProperties.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoveryInstanceProperties
+-- 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.DrS.Types.RecoveryInstanceProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.CPU
+import Amazonka.DrS.Types.IdentificationHints
+import Amazonka.DrS.Types.NetworkInterface
+import Amazonka.DrS.Types.OS
+import Amazonka.DrS.Types.RecoveryInstanceDisk
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of the Recovery Instance machine.
+--
+-- /See:/ 'newRecoveryInstanceProperties' smart constructor.
+data RecoveryInstanceProperties = RecoveryInstanceProperties'
+  { -- | An array of CPUs.
+    cpus :: Prelude.Maybe [CPU],
+    -- | An array of disks.
+    disks :: Prelude.Maybe [RecoveryInstanceDisk],
+    -- | Hints used to uniquely identify a machine.
+    identificationHints :: Prelude.Maybe IdentificationHints,
+    -- | The date and time the Recovery Instance properties were last updated on.
+    lastUpdatedDateTime :: Prelude.Maybe Prelude.Text,
+    -- | An array of network interfaces.
+    networkInterfaces :: Prelude.Maybe [NetworkInterface],
+    -- | Operating system.
+    os :: Prelude.Maybe OS,
+    -- | The amount of RAM in bytes.
+    ramBytes :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoveryInstanceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpus', 'recoveryInstanceProperties_cpus' - An array of CPUs.
+--
+-- 'disks', 'recoveryInstanceProperties_disks' - An array of disks.
+--
+-- 'identificationHints', 'recoveryInstanceProperties_identificationHints' - Hints used to uniquely identify a machine.
+--
+-- 'lastUpdatedDateTime', 'recoveryInstanceProperties_lastUpdatedDateTime' - The date and time the Recovery Instance properties were last updated on.
+--
+-- 'networkInterfaces', 'recoveryInstanceProperties_networkInterfaces' - An array of network interfaces.
+--
+-- 'os', 'recoveryInstanceProperties_os' - Operating system.
+--
+-- 'ramBytes', 'recoveryInstanceProperties_ramBytes' - The amount of RAM in bytes.
+newRecoveryInstanceProperties ::
+  RecoveryInstanceProperties
+newRecoveryInstanceProperties =
+  RecoveryInstanceProperties'
+    { cpus = Prelude.Nothing,
+      disks = Prelude.Nothing,
+      identificationHints = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      os = Prelude.Nothing,
+      ramBytes = Prelude.Nothing
+    }
+
+-- | An array of CPUs.
+recoveryInstanceProperties_cpus :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe [CPU])
+recoveryInstanceProperties_cpus = Lens.lens (\RecoveryInstanceProperties' {cpus} -> cpus) (\s@RecoveryInstanceProperties' {} a -> s {cpus = a} :: RecoveryInstanceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of disks.
+recoveryInstanceProperties_disks :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe [RecoveryInstanceDisk])
+recoveryInstanceProperties_disks = Lens.lens (\RecoveryInstanceProperties' {disks} -> disks) (\s@RecoveryInstanceProperties' {} a -> s {disks = a} :: RecoveryInstanceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | Hints used to uniquely identify a machine.
+recoveryInstanceProperties_identificationHints :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe IdentificationHints)
+recoveryInstanceProperties_identificationHints = Lens.lens (\RecoveryInstanceProperties' {identificationHints} -> identificationHints) (\s@RecoveryInstanceProperties' {} a -> s {identificationHints = a} :: RecoveryInstanceProperties)
+
+-- | The date and time the Recovery Instance properties were last updated on.
+recoveryInstanceProperties_lastUpdatedDateTime :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe Prelude.Text)
+recoveryInstanceProperties_lastUpdatedDateTime = Lens.lens (\RecoveryInstanceProperties' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@RecoveryInstanceProperties' {} a -> s {lastUpdatedDateTime = a} :: RecoveryInstanceProperties)
+
+-- | An array of network interfaces.
+recoveryInstanceProperties_networkInterfaces :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe [NetworkInterface])
+recoveryInstanceProperties_networkInterfaces = Lens.lens (\RecoveryInstanceProperties' {networkInterfaces} -> networkInterfaces) (\s@RecoveryInstanceProperties' {} a -> s {networkInterfaces = a} :: RecoveryInstanceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | Operating system.
+recoveryInstanceProperties_os :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe OS)
+recoveryInstanceProperties_os = Lens.lens (\RecoveryInstanceProperties' {os} -> os) (\s@RecoveryInstanceProperties' {} a -> s {os = a} :: RecoveryInstanceProperties)
+
+-- | The amount of RAM in bytes.
+recoveryInstanceProperties_ramBytes :: Lens.Lens' RecoveryInstanceProperties (Prelude.Maybe Prelude.Natural)
+recoveryInstanceProperties_ramBytes = Lens.lens (\RecoveryInstanceProperties' {ramBytes} -> ramBytes) (\s@RecoveryInstanceProperties' {} a -> s {ramBytes = a} :: RecoveryInstanceProperties)
+
+instance Data.FromJSON RecoveryInstanceProperties where
+  parseJSON =
+    Data.withObject
+      "RecoveryInstanceProperties"
+      ( \x ->
+          RecoveryInstanceProperties'
+            Prelude.<$> (x Data..:? "cpus" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "disks" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "identificationHints")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> ( x
+                            Data..:? "networkInterfaces"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "os")
+            Prelude.<*> (x Data..:? "ramBytes")
+      )
+
+instance Prelude.Hashable RecoveryInstanceProperties where
+  hashWithSalt _salt RecoveryInstanceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpus
+      `Prelude.hashWithSalt` disks
+      `Prelude.hashWithSalt` identificationHints
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` os
+      `Prelude.hashWithSalt` ramBytes
+
+instance Prelude.NFData RecoveryInstanceProperties where
+  rnf RecoveryInstanceProperties' {..} =
+    Prelude.rnf cpus
+      `Prelude.seq` Prelude.rnf disks
+      `Prelude.seq` Prelude.rnf identificationHints
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf os
+      `Prelude.seq` Prelude.rnf ramBytes
diff --git a/gen/Amazonka/DrS/Types/RecoverySnapshot.hs b/gen/Amazonka/DrS/Types/RecoverySnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoverySnapshot.hs
@@ -0,0 +1,129 @@
+{-# 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.DrS.Types.RecoverySnapshot
+-- 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.DrS.Types.RecoverySnapshot 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 snapshot of a Source Server used during recovery.
+--
+-- /See:/ 'newRecoverySnapshot' smart constructor.
+data RecoverySnapshot = RecoverySnapshot'
+  { -- | A list of EBS snapshots.
+    ebsSnapshots :: Prelude.Maybe [Prelude.Text],
+    -- | The actual timestamp that the snapshot was taken.
+    timestamp :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when we expect the snapshot to be taken.
+    expectedTimestamp :: Prelude.Text,
+    -- | The ID of the Recovery Snapshot.
+    snapshotID :: Prelude.Text,
+    -- | The ID of the Source Server that the snapshot was taken for.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecoverySnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebsSnapshots', 'recoverySnapshot_ebsSnapshots' - A list of EBS snapshots.
+--
+-- 'timestamp', 'recoverySnapshot_timestamp' - The actual timestamp that the snapshot was taken.
+--
+-- 'expectedTimestamp', 'recoverySnapshot_expectedTimestamp' - The timestamp of when we expect the snapshot to be taken.
+--
+-- 'snapshotID', 'recoverySnapshot_snapshotID' - The ID of the Recovery Snapshot.
+--
+-- 'sourceServerID', 'recoverySnapshot_sourceServerID' - The ID of the Source Server that the snapshot was taken for.
+newRecoverySnapshot ::
+  -- | 'expectedTimestamp'
+  Prelude.Text ->
+  -- | 'snapshotID'
+  Prelude.Text ->
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  RecoverySnapshot
+newRecoverySnapshot
+  pExpectedTimestamp_
+  pSnapshotID_
+  pSourceServerID_ =
+    RecoverySnapshot'
+      { ebsSnapshots = Prelude.Nothing,
+        timestamp = Prelude.Nothing,
+        expectedTimestamp = pExpectedTimestamp_,
+        snapshotID = pSnapshotID_,
+        sourceServerID = pSourceServerID_
+      }
+
+-- | A list of EBS snapshots.
+recoverySnapshot_ebsSnapshots :: Lens.Lens' RecoverySnapshot (Prelude.Maybe [Prelude.Text])
+recoverySnapshot_ebsSnapshots = Lens.lens (\RecoverySnapshot' {ebsSnapshots} -> ebsSnapshots) (\s@RecoverySnapshot' {} a -> s {ebsSnapshots = a} :: RecoverySnapshot) Prelude.. Lens.mapping Lens.coerced
+
+-- | The actual timestamp that the snapshot was taken.
+recoverySnapshot_timestamp :: Lens.Lens' RecoverySnapshot (Prelude.Maybe Prelude.Text)
+recoverySnapshot_timestamp = Lens.lens (\RecoverySnapshot' {timestamp} -> timestamp) (\s@RecoverySnapshot' {} a -> s {timestamp = a} :: RecoverySnapshot)
+
+-- | The timestamp of when we expect the snapshot to be taken.
+recoverySnapshot_expectedTimestamp :: Lens.Lens' RecoverySnapshot Prelude.Text
+recoverySnapshot_expectedTimestamp = Lens.lens (\RecoverySnapshot' {expectedTimestamp} -> expectedTimestamp) (\s@RecoverySnapshot' {} a -> s {expectedTimestamp = a} :: RecoverySnapshot)
+
+-- | The ID of the Recovery Snapshot.
+recoverySnapshot_snapshotID :: Lens.Lens' RecoverySnapshot Prelude.Text
+recoverySnapshot_snapshotID = Lens.lens (\RecoverySnapshot' {snapshotID} -> snapshotID) (\s@RecoverySnapshot' {} a -> s {snapshotID = a} :: RecoverySnapshot)
+
+-- | The ID of the Source Server that the snapshot was taken for.
+recoverySnapshot_sourceServerID :: Lens.Lens' RecoverySnapshot Prelude.Text
+recoverySnapshot_sourceServerID = Lens.lens (\RecoverySnapshot' {sourceServerID} -> sourceServerID) (\s@RecoverySnapshot' {} a -> s {sourceServerID = a} :: RecoverySnapshot)
+
+instance Data.FromJSON RecoverySnapshot where
+  parseJSON =
+    Data.withObject
+      "RecoverySnapshot"
+      ( \x ->
+          RecoverySnapshot'
+            Prelude.<$> (x Data..:? "ebsSnapshots" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "timestamp")
+            Prelude.<*> (x Data..: "expectedTimestamp")
+            Prelude.<*> (x Data..: "snapshotID")
+            Prelude.<*> (x Data..: "sourceServerID")
+      )
+
+instance Prelude.Hashable RecoverySnapshot where
+  hashWithSalt _salt RecoverySnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` ebsSnapshots
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` expectedTimestamp
+      `Prelude.hashWithSalt` snapshotID
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData RecoverySnapshot where
+  rnf RecoverySnapshot' {..} =
+    Prelude.rnf ebsSnapshots
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf expectedTimestamp
+      `Prelude.seq` Prelude.rnf snapshotID
+      `Prelude.seq` Prelude.rnf sourceServerID
diff --git a/gen/Amazonka/DrS/Types/RecoverySnapshotsOrder.hs b/gen/Amazonka/DrS/Types/RecoverySnapshotsOrder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/RecoverySnapshotsOrder.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.RecoverySnapshotsOrder
+-- 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.DrS.Types.RecoverySnapshotsOrder
+  ( RecoverySnapshotsOrder
+      ( ..,
+        RecoverySnapshotsOrder_ASC,
+        RecoverySnapshotsOrder_DESC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecoverySnapshotsOrder = RecoverySnapshotsOrder'
+  { fromRecoverySnapshotsOrder ::
+      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 RecoverySnapshotsOrder_ASC :: RecoverySnapshotsOrder
+pattern RecoverySnapshotsOrder_ASC = RecoverySnapshotsOrder' "ASC"
+
+pattern RecoverySnapshotsOrder_DESC :: RecoverySnapshotsOrder
+pattern RecoverySnapshotsOrder_DESC = RecoverySnapshotsOrder' "DESC"
+
+{-# COMPLETE
+  RecoverySnapshotsOrder_ASC,
+  RecoverySnapshotsOrder_DESC,
+  RecoverySnapshotsOrder'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfiguration.hs b/gen/Amazonka/DrS/Types/ReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfiguration.hs
@@ -0,0 +1,286 @@
+{-# 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.DrS.Types.ReplicationConfiguration
+-- 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.DrS.Types.ReplicationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.PITPolicyRule
+import Amazonka.DrS.Types.ReplicationConfigurationDataPlaneRouting
+import Amazonka.DrS.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+import Amazonka.DrS.Types.ReplicationConfigurationEbsEncryption
+import Amazonka.DrS.Types.ReplicationConfigurationReplicatedDisk
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newReplicationConfiguration' smart constructor.
+data ReplicationConfiguration = ReplicationConfiguration'
+  { -- | Whether to associate the default Elastic Disaster Recovery Security
+    -- group with the Replication Configuration.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Source Server in Mbps.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to create a Public IP for the Recovery Instance by default.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | The data plane routing mechanism that will be used for replication.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | The Staging Disk EBS volume type to be used during replication.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | The type of EBS encryption to be used during replication.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | The ARN of the EBS encryption key to be used during replication.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Replication Configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Point in time (PIT) policy to manage snapshots taken during
+    -- replication.
+    pitPolicy :: Prelude.Maybe (Prelude.NonEmpty PITPolicyRule),
+    -- | The configuration of the disks of the Source Server to be replicated.
+    replicatedDisks :: Prelude.Maybe [ReplicationConfigurationReplicatedDisk],
+    -- | The instance type to be used for the replication server.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | The security group IDs that will be used by the replication server.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the Source Server for this Replication Configuration.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | The subnet to be used by the replication staging area.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | A set of tags to be associated with all resources created in the
+    -- replication staging area: EC2 replication server, EBS volumes, EBS
+    -- snapshots, etc.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Whether to use a dedicated Replication Server in the replication staging
+    -- area.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associateDefaultSecurityGroup', 'replicationConfiguration_associateDefaultSecurityGroup' - Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration.
+--
+-- 'bandwidthThrottling', 'replicationConfiguration_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+--
+-- 'createPublicIP', 'replicationConfiguration_createPublicIP' - Whether to create a Public IP for the Recovery Instance by default.
+--
+-- 'dataPlaneRouting', 'replicationConfiguration_dataPlaneRouting' - The data plane routing mechanism that will be used for replication.
+--
+-- 'defaultLargeStagingDiskType', 'replicationConfiguration_defaultLargeStagingDiskType' - The Staging Disk EBS volume type to be used during replication.
+--
+-- 'ebsEncryption', 'replicationConfiguration_ebsEncryption' - The type of EBS encryption to be used during replication.
+--
+-- 'ebsEncryptionKeyArn', 'replicationConfiguration_ebsEncryptionKeyArn' - The ARN of the EBS encryption key to be used during replication.
+--
+-- 'name', 'replicationConfiguration_name' - The name of the Replication Configuration.
+--
+-- 'pitPolicy', 'replicationConfiguration_pitPolicy' - The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+--
+-- 'replicatedDisks', 'replicationConfiguration_replicatedDisks' - The configuration of the disks of the Source Server to be replicated.
+--
+-- 'replicationServerInstanceType', 'replicationConfiguration_replicationServerInstanceType' - The instance type to be used for the replication server.
+--
+-- 'replicationServersSecurityGroupsIDs', 'replicationConfiguration_replicationServersSecurityGroupsIDs' - The security group IDs that will be used by the replication server.
+--
+-- 'sourceServerID', 'replicationConfiguration_sourceServerID' - The ID of the Source Server for this Replication Configuration.
+--
+-- 'stagingAreaSubnetId', 'replicationConfiguration_stagingAreaSubnetId' - The subnet to be used by the replication staging area.
+--
+-- 'stagingAreaTags', 'replicationConfiguration_stagingAreaTags' - A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+--
+-- 'useDedicatedReplicationServer', 'replicationConfiguration_useDedicatedReplicationServer' - Whether to use a dedicated Replication Server in the replication staging
+-- area.
+newReplicationConfiguration ::
+  ReplicationConfiguration
+newReplicationConfiguration =
+  ReplicationConfiguration'
+    { associateDefaultSecurityGroup =
+        Prelude.Nothing,
+      bandwidthThrottling = Prelude.Nothing,
+      createPublicIP = Prelude.Nothing,
+      dataPlaneRouting = Prelude.Nothing,
+      defaultLargeStagingDiskType = Prelude.Nothing,
+      ebsEncryption = Prelude.Nothing,
+      ebsEncryptionKeyArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      pitPolicy = Prelude.Nothing,
+      replicatedDisks = Prelude.Nothing,
+      replicationServerInstanceType = Prelude.Nothing,
+      replicationServersSecurityGroupsIDs =
+        Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      stagingAreaSubnetId = Prelude.Nothing,
+      stagingAreaTags = Prelude.Nothing,
+      useDedicatedReplicationServer = Prelude.Nothing
+    }
+
+-- | Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration.
+replicationConfiguration_associateDefaultSecurityGroup :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+replicationConfiguration_associateDefaultSecurityGroup = Lens.lens (\ReplicationConfiguration' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@ReplicationConfiguration' {} a -> s {associateDefaultSecurityGroup = a} :: ReplicationConfiguration)
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+replicationConfiguration_bandwidthThrottling :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Natural)
+replicationConfiguration_bandwidthThrottling = Lens.lens (\ReplicationConfiguration' {bandwidthThrottling} -> bandwidthThrottling) (\s@ReplicationConfiguration' {} a -> s {bandwidthThrottling = a} :: ReplicationConfiguration)
+
+-- | Whether to create a Public IP for the Recovery Instance by default.
+replicationConfiguration_createPublicIP :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+replicationConfiguration_createPublicIP = Lens.lens (\ReplicationConfiguration' {createPublicIP} -> createPublicIP) (\s@ReplicationConfiguration' {} a -> s {createPublicIP = a} :: ReplicationConfiguration)
+
+-- | The data plane routing mechanism that will be used for replication.
+replicationConfiguration_dataPlaneRouting :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+replicationConfiguration_dataPlaneRouting = Lens.lens (\ReplicationConfiguration' {dataPlaneRouting} -> dataPlaneRouting) (\s@ReplicationConfiguration' {} a -> s {dataPlaneRouting = a} :: ReplicationConfiguration)
+
+-- | The Staging Disk EBS volume type to be used during replication.
+replicationConfiguration_defaultLargeStagingDiskType :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+replicationConfiguration_defaultLargeStagingDiskType = Lens.lens (\ReplicationConfiguration' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@ReplicationConfiguration' {} a -> s {defaultLargeStagingDiskType = a} :: ReplicationConfiguration)
+
+-- | The type of EBS encryption to be used during replication.
+replicationConfiguration_ebsEncryption :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+replicationConfiguration_ebsEncryption = Lens.lens (\ReplicationConfiguration' {ebsEncryption} -> ebsEncryption) (\s@ReplicationConfiguration' {} a -> s {ebsEncryption = a} :: ReplicationConfiguration)
+
+-- | The ARN of the EBS encryption key to be used during replication.
+replicationConfiguration_ebsEncryptionKeyArn :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_ebsEncryptionKeyArn = Lens.lens (\ReplicationConfiguration' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@ReplicationConfiguration' {} a -> s {ebsEncryptionKeyArn = a} :: ReplicationConfiguration)
+
+-- | The name of the Replication Configuration.
+replicationConfiguration_name :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_name = Lens.lens (\ReplicationConfiguration' {name} -> name) (\s@ReplicationConfiguration' {} a -> s {name = a} :: ReplicationConfiguration)
+
+-- | The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+replicationConfiguration_pitPolicy :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe (Prelude.NonEmpty PITPolicyRule))
+replicationConfiguration_pitPolicy = Lens.lens (\ReplicationConfiguration' {pitPolicy} -> pitPolicy) (\s@ReplicationConfiguration' {} a -> s {pitPolicy = a} :: ReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration of the disks of the Source Server to be replicated.
+replicationConfiguration_replicatedDisks :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe [ReplicationConfigurationReplicatedDisk])
+replicationConfiguration_replicatedDisks = Lens.lens (\ReplicationConfiguration' {replicatedDisks} -> replicatedDisks) (\s@ReplicationConfiguration' {} a -> s {replicatedDisks = a} :: ReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type to be used for the replication server.
+replicationConfiguration_replicationServerInstanceType :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_replicationServerInstanceType = Lens.lens (\ReplicationConfiguration' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@ReplicationConfiguration' {} a -> s {replicationServerInstanceType = a} :: ReplicationConfiguration)
+
+-- | The security group IDs that will be used by the replication server.
+replicationConfiguration_replicationServersSecurityGroupsIDs :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe [Prelude.Text])
+replicationConfiguration_replicationServersSecurityGroupsIDs = Lens.lens (\ReplicationConfiguration' {replicationServersSecurityGroupsIDs} -> replicationServersSecurityGroupsIDs) (\s@ReplicationConfiguration' {} a -> s {replicationServersSecurityGroupsIDs = a} :: ReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Source Server for this Replication Configuration.
+replicationConfiguration_sourceServerID :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_sourceServerID = Lens.lens (\ReplicationConfiguration' {sourceServerID} -> sourceServerID) (\s@ReplicationConfiguration' {} a -> s {sourceServerID = a} :: ReplicationConfiguration)
+
+-- | The subnet to be used by the replication staging area.
+replicationConfiguration_stagingAreaSubnetId :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_stagingAreaSubnetId = Lens.lens (\ReplicationConfiguration' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@ReplicationConfiguration' {} a -> s {stagingAreaSubnetId = a} :: ReplicationConfiguration)
+
+-- | A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+replicationConfiguration_stagingAreaTags :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+replicationConfiguration_stagingAreaTags = Lens.lens (\ReplicationConfiguration' {stagingAreaTags} -> stagingAreaTags) (\s@ReplicationConfiguration' {} a -> s {stagingAreaTags = a} :: ReplicationConfiguration) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Whether to use a dedicated Replication Server in the replication staging
+-- area.
+replicationConfiguration_useDedicatedReplicationServer :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+replicationConfiguration_useDedicatedReplicationServer = Lens.lens (\ReplicationConfiguration' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@ReplicationConfiguration' {} a -> s {useDedicatedReplicationServer = a} :: ReplicationConfiguration)
+
+instance Data.FromJSON ReplicationConfiguration where
+  parseJSON =
+    Data.withObject
+      "ReplicationConfiguration"
+      ( \x ->
+          ReplicationConfiguration'
+            Prelude.<$> (x Data..:? "associateDefaultSecurityGroup")
+            Prelude.<*> (x Data..:? "bandwidthThrottling")
+            Prelude.<*> (x Data..:? "createPublicIP")
+            Prelude.<*> (x Data..:? "dataPlaneRouting")
+            Prelude.<*> (x Data..:? "defaultLargeStagingDiskType")
+            Prelude.<*> (x Data..:? "ebsEncryption")
+            Prelude.<*> (x Data..:? "ebsEncryptionKeyArn")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "pitPolicy")
+            Prelude.<*> ( x
+                            Data..:? "replicatedDisks"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "replicationServerInstanceType")
+            Prelude.<*> ( x
+                            Data..:? "replicationServersSecurityGroupsIDs"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "stagingAreaSubnetId")
+            Prelude.<*> ( x
+                            Data..:? "stagingAreaTags"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "useDedicatedReplicationServer")
+      )
+
+instance Prelude.Hashable ReplicationConfiguration where
+  hashWithSalt _salt ReplicationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` associateDefaultSecurityGroup
+      `Prelude.hashWithSalt` bandwidthThrottling
+      `Prelude.hashWithSalt` createPublicIP
+      `Prelude.hashWithSalt` dataPlaneRouting
+      `Prelude.hashWithSalt` defaultLargeStagingDiskType
+      `Prelude.hashWithSalt` ebsEncryption
+      `Prelude.hashWithSalt` ebsEncryptionKeyArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` pitPolicy
+      `Prelude.hashWithSalt` replicatedDisks
+      `Prelude.hashWithSalt` replicationServerInstanceType
+      `Prelude.hashWithSalt` replicationServersSecurityGroupsIDs
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` stagingAreaSubnetId
+      `Prelude.hashWithSalt` stagingAreaTags
+      `Prelude.hashWithSalt` useDedicatedReplicationServer
+
+instance Prelude.NFData ReplicationConfiguration where
+  rnf ReplicationConfiguration' {..} =
+    Prelude.rnf associateDefaultSecurityGroup
+      `Prelude.seq` Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf createPublicIP
+      `Prelude.seq` Prelude.rnf dataPlaneRouting
+      `Prelude.seq` Prelude.rnf defaultLargeStagingDiskType
+      `Prelude.seq` Prelude.rnf ebsEncryption
+      `Prelude.seq` Prelude.rnf ebsEncryptionKeyArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf pitPolicy
+      `Prelude.seq` Prelude.rnf replicatedDisks
+      `Prelude.seq` Prelude.rnf replicationServerInstanceType
+      `Prelude.seq` Prelude.rnf
+        replicationServersSecurityGroupsIDs
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf stagingAreaSubnetId
+      `Prelude.seq` Prelude.rnf stagingAreaTags
+      `Prelude.seq` Prelude.rnf
+        useDedicatedReplicationServer
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfigurationDataPlaneRouting.hs b/gen/Amazonka/DrS/Types/ReplicationConfigurationDataPlaneRouting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfigurationDataPlaneRouting.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ReplicationConfigurationDataPlaneRouting
+-- 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.DrS.Types.ReplicationConfigurationDataPlaneRouting
+  ( ReplicationConfigurationDataPlaneRouting
+      ( ..,
+        ReplicationConfigurationDataPlaneRouting_PRIVATE_IP,
+        ReplicationConfigurationDataPlaneRouting_PUBLIC_IP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationConfigurationDataPlaneRouting = ReplicationConfigurationDataPlaneRouting'
+  { fromReplicationConfigurationDataPlaneRouting ::
+      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 ReplicationConfigurationDataPlaneRouting_PRIVATE_IP :: ReplicationConfigurationDataPlaneRouting
+pattern ReplicationConfigurationDataPlaneRouting_PRIVATE_IP = ReplicationConfigurationDataPlaneRouting' "PRIVATE_IP"
+
+pattern ReplicationConfigurationDataPlaneRouting_PUBLIC_IP :: ReplicationConfigurationDataPlaneRouting
+pattern ReplicationConfigurationDataPlaneRouting_PUBLIC_IP = ReplicationConfigurationDataPlaneRouting' "PUBLIC_IP"
+
+{-# COMPLETE
+  ReplicationConfigurationDataPlaneRouting_PRIVATE_IP,
+  ReplicationConfigurationDataPlaneRouting_PUBLIC_IP,
+  ReplicationConfigurationDataPlaneRouting'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfigurationDefaultLargeStagingDiskType.hs b/gen/Amazonka/DrS/Types/ReplicationConfigurationDefaultLargeStagingDiskType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfigurationDefaultLargeStagingDiskType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+-- 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.DrS.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+  ( ReplicationConfigurationDefaultLargeStagingDiskType
+      ( ..,
+        ReplicationConfigurationDefaultLargeStagingDiskType_AUTO,
+        ReplicationConfigurationDefaultLargeStagingDiskType_GP2,
+        ReplicationConfigurationDefaultLargeStagingDiskType_GP3,
+        ReplicationConfigurationDefaultLargeStagingDiskType_ST1
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationConfigurationDefaultLargeStagingDiskType = ReplicationConfigurationDefaultLargeStagingDiskType'
+  { fromReplicationConfigurationDefaultLargeStagingDiskType ::
+      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 ReplicationConfigurationDefaultLargeStagingDiskType_AUTO :: ReplicationConfigurationDefaultLargeStagingDiskType
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_AUTO = ReplicationConfigurationDefaultLargeStagingDiskType' "AUTO"
+
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_GP2 :: ReplicationConfigurationDefaultLargeStagingDiskType
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_GP2 = ReplicationConfigurationDefaultLargeStagingDiskType' "GP2"
+
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_GP3 :: ReplicationConfigurationDefaultLargeStagingDiskType
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_GP3 = ReplicationConfigurationDefaultLargeStagingDiskType' "GP3"
+
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_ST1 :: ReplicationConfigurationDefaultLargeStagingDiskType
+pattern ReplicationConfigurationDefaultLargeStagingDiskType_ST1 = ReplicationConfigurationDefaultLargeStagingDiskType' "ST1"
+
+{-# COMPLETE
+  ReplicationConfigurationDefaultLargeStagingDiskType_AUTO,
+  ReplicationConfigurationDefaultLargeStagingDiskType_GP2,
+  ReplicationConfigurationDefaultLargeStagingDiskType_GP3,
+  ReplicationConfigurationDefaultLargeStagingDiskType_ST1,
+  ReplicationConfigurationDefaultLargeStagingDiskType'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfigurationEbsEncryption.hs b/gen/Amazonka/DrS/Types/ReplicationConfigurationEbsEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfigurationEbsEncryption.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ReplicationConfigurationEbsEncryption
+-- 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.DrS.Types.ReplicationConfigurationEbsEncryption
+  ( ReplicationConfigurationEbsEncryption
+      ( ..,
+        ReplicationConfigurationEbsEncryption_CUSTOM,
+        ReplicationConfigurationEbsEncryption_DEFAULT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationConfigurationEbsEncryption = ReplicationConfigurationEbsEncryption'
+  { fromReplicationConfigurationEbsEncryption ::
+      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 ReplicationConfigurationEbsEncryption_CUSTOM :: ReplicationConfigurationEbsEncryption
+pattern ReplicationConfigurationEbsEncryption_CUSTOM = ReplicationConfigurationEbsEncryption' "CUSTOM"
+
+pattern ReplicationConfigurationEbsEncryption_DEFAULT :: ReplicationConfigurationEbsEncryption
+pattern ReplicationConfigurationEbsEncryption_DEFAULT = ReplicationConfigurationEbsEncryption' "DEFAULT"
+
+{-# COMPLETE
+  ReplicationConfigurationEbsEncryption_CUSTOM,
+  ReplicationConfigurationEbsEncryption_DEFAULT,
+  ReplicationConfigurationEbsEncryption'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfigurationReplicatedDisk.hs b/gen/Amazonka/DrS/Types/ReplicationConfigurationReplicatedDisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfigurationReplicatedDisk.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ReplicationConfigurationReplicatedDisk
+-- 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.DrS.Types.ReplicationConfigurationReplicatedDisk where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration of a disk of the Source Server to be replicated.
+--
+-- /See:/ 'newReplicationConfigurationReplicatedDisk' smart constructor.
+data ReplicationConfigurationReplicatedDisk = ReplicationConfigurationReplicatedDisk'
+  { -- | The name of the device.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The requested number of I\/O operations per second (IOPS).
+    iops :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to boot from this disk or not.
+    isBootDisk :: Prelude.Maybe Prelude.Bool,
+    -- | When @stagingDiskType@ is set to Auto, this field shows the current
+    -- staging disk EBS volume type as it is constantly updated by the service.
+    -- This is a read-only field.
+    optimizedStagingDiskType :: Prelude.Maybe ReplicationConfigurationReplicatedDiskStagingDiskType,
+    -- | The Staging Disk EBS volume type to be used during replication.
+    stagingDiskType :: Prelude.Maybe ReplicationConfigurationReplicatedDiskStagingDiskType,
+    -- | The throughput to use for the EBS volume in MiB\/s. This parameter is
+    -- valid only for gp3 volumes.
+    throughput :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationConfigurationReplicatedDisk' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'replicationConfigurationReplicatedDisk_deviceName' - The name of the device.
+--
+-- 'iops', 'replicationConfigurationReplicatedDisk_iops' - The requested number of I\/O operations per second (IOPS).
+--
+-- 'isBootDisk', 'replicationConfigurationReplicatedDisk_isBootDisk' - Whether to boot from this disk or not.
+--
+-- 'optimizedStagingDiskType', 'replicationConfigurationReplicatedDisk_optimizedStagingDiskType' - When @stagingDiskType@ is set to Auto, this field shows the current
+-- staging disk EBS volume type as it is constantly updated by the service.
+-- This is a read-only field.
+--
+-- 'stagingDiskType', 'replicationConfigurationReplicatedDisk_stagingDiskType' - The Staging Disk EBS volume type to be used during replication.
+--
+-- 'throughput', 'replicationConfigurationReplicatedDisk_throughput' - The throughput to use for the EBS volume in MiB\/s. This parameter is
+-- valid only for gp3 volumes.
+newReplicationConfigurationReplicatedDisk ::
+  ReplicationConfigurationReplicatedDisk
+newReplicationConfigurationReplicatedDisk =
+  ReplicationConfigurationReplicatedDisk'
+    { deviceName =
+        Prelude.Nothing,
+      iops = Prelude.Nothing,
+      isBootDisk = Prelude.Nothing,
+      optimizedStagingDiskType =
+        Prelude.Nothing,
+      stagingDiskType = Prelude.Nothing,
+      throughput = Prelude.Nothing
+    }
+
+-- | The name of the device.
+replicationConfigurationReplicatedDisk_deviceName :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Text)
+replicationConfigurationReplicatedDisk_deviceName = Lens.lens (\ReplicationConfigurationReplicatedDisk' {deviceName} -> deviceName) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {deviceName = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | The requested number of I\/O operations per second (IOPS).
+replicationConfigurationReplicatedDisk_iops :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Natural)
+replicationConfigurationReplicatedDisk_iops = Lens.lens (\ReplicationConfigurationReplicatedDisk' {iops} -> iops) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {iops = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | Whether to boot from this disk or not.
+replicationConfigurationReplicatedDisk_isBootDisk :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Bool)
+replicationConfigurationReplicatedDisk_isBootDisk = Lens.lens (\ReplicationConfigurationReplicatedDisk' {isBootDisk} -> isBootDisk) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {isBootDisk = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | When @stagingDiskType@ is set to Auto, this field shows the current
+-- staging disk EBS volume type as it is constantly updated by the service.
+-- This is a read-only field.
+replicationConfigurationReplicatedDisk_optimizedStagingDiskType :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe ReplicationConfigurationReplicatedDiskStagingDiskType)
+replicationConfigurationReplicatedDisk_optimizedStagingDiskType = Lens.lens (\ReplicationConfigurationReplicatedDisk' {optimizedStagingDiskType} -> optimizedStagingDiskType) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {optimizedStagingDiskType = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | The Staging Disk EBS volume type to be used during replication.
+replicationConfigurationReplicatedDisk_stagingDiskType :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe ReplicationConfigurationReplicatedDiskStagingDiskType)
+replicationConfigurationReplicatedDisk_stagingDiskType = Lens.lens (\ReplicationConfigurationReplicatedDisk' {stagingDiskType} -> stagingDiskType) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {stagingDiskType = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | The throughput to use for the EBS volume in MiB\/s. This parameter is
+-- valid only for gp3 volumes.
+replicationConfigurationReplicatedDisk_throughput :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Natural)
+replicationConfigurationReplicatedDisk_throughput = Lens.lens (\ReplicationConfigurationReplicatedDisk' {throughput} -> throughput) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {throughput = a} :: ReplicationConfigurationReplicatedDisk)
+
+instance
+  Data.FromJSON
+    ReplicationConfigurationReplicatedDisk
+  where
+  parseJSON =
+    Data.withObject
+      "ReplicationConfigurationReplicatedDisk"
+      ( \x ->
+          ReplicationConfigurationReplicatedDisk'
+            Prelude.<$> (x Data..:? "deviceName")
+            Prelude.<*> (x Data..:? "iops")
+            Prelude.<*> (x Data..:? "isBootDisk")
+            Prelude.<*> (x Data..:? "optimizedStagingDiskType")
+            Prelude.<*> (x Data..:? "stagingDiskType")
+            Prelude.<*> (x Data..:? "throughput")
+      )
+
+instance
+  Prelude.Hashable
+    ReplicationConfigurationReplicatedDisk
+  where
+  hashWithSalt
+    _salt
+    ReplicationConfigurationReplicatedDisk' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` iops
+        `Prelude.hashWithSalt` isBootDisk
+        `Prelude.hashWithSalt` optimizedStagingDiskType
+        `Prelude.hashWithSalt` stagingDiskType
+        `Prelude.hashWithSalt` throughput
+
+instance
+  Prelude.NFData
+    ReplicationConfigurationReplicatedDisk
+  where
+  rnf ReplicationConfigurationReplicatedDisk' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf isBootDisk
+      `Prelude.seq` Prelude.rnf optimizedStagingDiskType
+      `Prelude.seq` Prelude.rnf stagingDiskType
+      `Prelude.seq` Prelude.rnf throughput
+
+instance
+  Data.ToJSON
+    ReplicationConfigurationReplicatedDisk
+  where
+  toJSON ReplicationConfigurationReplicatedDisk' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("deviceName" Data..=) Prelude.<$> deviceName,
+            ("iops" Data..=) Prelude.<$> iops,
+            ("isBootDisk" Data..=) Prelude.<$> isBootDisk,
+            ("optimizedStagingDiskType" Data..=)
+              Prelude.<$> optimizedStagingDiskType,
+            ("stagingDiskType" Data..=)
+              Prelude.<$> stagingDiskType,
+            ("throughput" Data..=) Prelude.<$> throughput
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfigurationReplicatedDiskStagingDiskType.hs b/gen/Amazonka/DrS/Types/ReplicationConfigurationReplicatedDiskStagingDiskType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfigurationReplicatedDiskStagingDiskType.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+-- 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.DrS.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+  ( ReplicationConfigurationReplicatedDiskStagingDiskType
+      ( ..,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_AUTO,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_GP2,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_GP3,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_IO1,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_SC1,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_ST1,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_STANDARD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationConfigurationReplicatedDiskStagingDiskType = ReplicationConfigurationReplicatedDiskStagingDiskType'
+  { fromReplicationConfigurationReplicatedDiskStagingDiskType ::
+      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 ReplicationConfigurationReplicatedDiskStagingDiskType_AUTO :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_AUTO = ReplicationConfigurationReplicatedDiskStagingDiskType' "AUTO"
+
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_GP2 :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_GP2 = ReplicationConfigurationReplicatedDiskStagingDiskType' "GP2"
+
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_GP3 :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_GP3 = ReplicationConfigurationReplicatedDiskStagingDiskType' "GP3"
+
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_IO1 :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_IO1 = ReplicationConfigurationReplicatedDiskStagingDiskType' "IO1"
+
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_SC1 :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_SC1 = ReplicationConfigurationReplicatedDiskStagingDiskType' "SC1"
+
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_ST1 :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_ST1 = ReplicationConfigurationReplicatedDiskStagingDiskType' "ST1"
+
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_STANDARD :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_STANDARD = ReplicationConfigurationReplicatedDiskStagingDiskType' "STANDARD"
+
+{-# COMPLETE
+  ReplicationConfigurationReplicatedDiskStagingDiskType_AUTO,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_GP2,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_GP3,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_IO1,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_SC1,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_ST1,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_STANDARD,
+  ReplicationConfigurationReplicatedDiskStagingDiskType'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/ReplicationConfigurationTemplate.hs b/gen/Amazonka/DrS/Types/ReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationConfigurationTemplate.hs
@@ -0,0 +1,304 @@
+{-# 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.DrS.Types.ReplicationConfigurationTemplate
+-- 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.DrS.Types.ReplicationConfigurationTemplate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.PITPolicyRule
+import Amazonka.DrS.Types.ReplicationConfigurationDataPlaneRouting
+import Amazonka.DrS.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+import Amazonka.DrS.Types.ReplicationConfigurationEbsEncryption
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newReplicationConfigurationTemplate' smart constructor.
+data ReplicationConfigurationTemplate = ReplicationConfigurationTemplate'
+  { -- | The Replication Configuration Template ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Whether to associate the default Elastic Disaster Recovery Security
+    -- group with the Replication Configuration Template.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Source Server in Mbps.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to create a Public IP for the Recovery Instance by default.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | The data plane routing mechanism that will be used for replication.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | The Staging Disk EBS volume type to be used during replication.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | The type of EBS encryption to be used during replication.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | The ARN of the EBS encryption key to be used during replication.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The Point in time (PIT) policy to manage snapshots taken during
+    -- replication.
+    pitPolicy :: Prelude.Maybe (Prelude.NonEmpty PITPolicyRule),
+    -- | The instance type to be used for the replication server.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | The security group IDs that will be used by the replication server.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | The subnet to be used by the replication staging area.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | A set of tags to be associated with all resources created in the
+    -- replication staging area: EC2 replication server, EBS volumes, EBS
+    -- snapshots, etc.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | A set of tags to be associated with the Replication Configuration
+    -- Template resource.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Whether to use a dedicated Replication Server in the replication staging
+    -- area.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool,
+    -- | The Replication Configuration Template ID.
+    replicationConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'replicationConfigurationTemplate_arn' - The Replication Configuration Template ARN.
+--
+-- 'associateDefaultSecurityGroup', 'replicationConfigurationTemplate_associateDefaultSecurityGroup' - Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration Template.
+--
+-- 'bandwidthThrottling', 'replicationConfigurationTemplate_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+--
+-- 'createPublicIP', 'replicationConfigurationTemplate_createPublicIP' - Whether to create a Public IP for the Recovery Instance by default.
+--
+-- 'dataPlaneRouting', 'replicationConfigurationTemplate_dataPlaneRouting' - The data plane routing mechanism that will be used for replication.
+--
+-- 'defaultLargeStagingDiskType', 'replicationConfigurationTemplate_defaultLargeStagingDiskType' - The Staging Disk EBS volume type to be used during replication.
+--
+-- 'ebsEncryption', 'replicationConfigurationTemplate_ebsEncryption' - The type of EBS encryption to be used during replication.
+--
+-- 'ebsEncryptionKeyArn', 'replicationConfigurationTemplate_ebsEncryptionKeyArn' - The ARN of the EBS encryption key to be used during replication.
+--
+-- 'pitPolicy', 'replicationConfigurationTemplate_pitPolicy' - The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+--
+-- 'replicationServerInstanceType', 'replicationConfigurationTemplate_replicationServerInstanceType' - The instance type to be used for the replication server.
+--
+-- 'replicationServersSecurityGroupsIDs', 'replicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - The security group IDs that will be used by the replication server.
+--
+-- 'stagingAreaSubnetId', 'replicationConfigurationTemplate_stagingAreaSubnetId' - The subnet to be used by the replication staging area.
+--
+-- 'stagingAreaTags', 'replicationConfigurationTemplate_stagingAreaTags' - A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+--
+-- 'tags', 'replicationConfigurationTemplate_tags' - A set of tags to be associated with the Replication Configuration
+-- Template resource.
+--
+-- 'useDedicatedReplicationServer', 'replicationConfigurationTemplate_useDedicatedReplicationServer' - Whether to use a dedicated Replication Server in the replication staging
+-- area.
+--
+-- 'replicationConfigurationTemplateID', 'replicationConfigurationTemplate_replicationConfigurationTemplateID' - The Replication Configuration Template ID.
+newReplicationConfigurationTemplate ::
+  -- | 'replicationConfigurationTemplateID'
+  Prelude.Text ->
+  ReplicationConfigurationTemplate
+newReplicationConfigurationTemplate
+  pReplicationConfigurationTemplateID_ =
+    ReplicationConfigurationTemplate'
+      { arn =
+          Prelude.Nothing,
+        associateDefaultSecurityGroup =
+          Prelude.Nothing,
+        bandwidthThrottling = Prelude.Nothing,
+        createPublicIP = Prelude.Nothing,
+        dataPlaneRouting = Prelude.Nothing,
+        defaultLargeStagingDiskType =
+          Prelude.Nothing,
+        ebsEncryption = Prelude.Nothing,
+        ebsEncryptionKeyArn = Prelude.Nothing,
+        pitPolicy = Prelude.Nothing,
+        replicationServerInstanceType =
+          Prelude.Nothing,
+        replicationServersSecurityGroupsIDs =
+          Prelude.Nothing,
+        stagingAreaSubnetId = Prelude.Nothing,
+        stagingAreaTags = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        useDedicatedReplicationServer =
+          Prelude.Nothing,
+        replicationConfigurationTemplateID =
+          pReplicationConfigurationTemplateID_
+      }
+
+-- | The Replication Configuration Template ARN.
+replicationConfigurationTemplate_arn :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_arn = Lens.lens (\ReplicationConfigurationTemplate' {arn} -> arn) (\s@ReplicationConfigurationTemplate' {} a -> s {arn = a} :: ReplicationConfigurationTemplate)
+
+-- | Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration Template.
+replicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+replicationConfigurationTemplate_associateDefaultSecurityGroup = Lens.lens (\ReplicationConfigurationTemplate' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@ReplicationConfigurationTemplate' {} a -> s {associateDefaultSecurityGroup = a} :: ReplicationConfigurationTemplate)
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+replicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+replicationConfigurationTemplate_bandwidthThrottling = Lens.lens (\ReplicationConfigurationTemplate' {bandwidthThrottling} -> bandwidthThrottling) (\s@ReplicationConfigurationTemplate' {} a -> s {bandwidthThrottling = a} :: ReplicationConfigurationTemplate)
+
+-- | Whether to create a Public IP for the Recovery Instance by default.
+replicationConfigurationTemplate_createPublicIP :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+replicationConfigurationTemplate_createPublicIP = Lens.lens (\ReplicationConfigurationTemplate' {createPublicIP} -> createPublicIP) (\s@ReplicationConfigurationTemplate' {} a -> s {createPublicIP = a} :: ReplicationConfigurationTemplate)
+
+-- | The data plane routing mechanism that will be used for replication.
+replicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+replicationConfigurationTemplate_dataPlaneRouting = Lens.lens (\ReplicationConfigurationTemplate' {dataPlaneRouting} -> dataPlaneRouting) (\s@ReplicationConfigurationTemplate' {} a -> s {dataPlaneRouting = a} :: ReplicationConfigurationTemplate)
+
+-- | The Staging Disk EBS volume type to be used during replication.
+replicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+replicationConfigurationTemplate_defaultLargeStagingDiskType = Lens.lens (\ReplicationConfigurationTemplate' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@ReplicationConfigurationTemplate' {} a -> s {defaultLargeStagingDiskType = a} :: ReplicationConfigurationTemplate)
+
+-- | The type of EBS encryption to be used during replication.
+replicationConfigurationTemplate_ebsEncryption :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+replicationConfigurationTemplate_ebsEncryption = Lens.lens (\ReplicationConfigurationTemplate' {ebsEncryption} -> ebsEncryption) (\s@ReplicationConfigurationTemplate' {} a -> s {ebsEncryption = a} :: ReplicationConfigurationTemplate)
+
+-- | The ARN of the EBS encryption key to be used during replication.
+replicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_ebsEncryptionKeyArn = Lens.lens (\ReplicationConfigurationTemplate' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@ReplicationConfigurationTemplate' {} a -> s {ebsEncryptionKeyArn = a} :: ReplicationConfigurationTemplate)
+
+-- | The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+replicationConfigurationTemplate_pitPolicy :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe (Prelude.NonEmpty PITPolicyRule))
+replicationConfigurationTemplate_pitPolicy = Lens.lens (\ReplicationConfigurationTemplate' {pitPolicy} -> pitPolicy) (\s@ReplicationConfigurationTemplate' {} a -> s {pitPolicy = a} :: ReplicationConfigurationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type to be used for the replication server.
+replicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_replicationServerInstanceType = Lens.lens (\ReplicationConfigurationTemplate' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@ReplicationConfigurationTemplate' {} a -> s {replicationServerInstanceType = a} :: ReplicationConfigurationTemplate)
+
+-- | The security group IDs that will be used by the replication server.
+replicationConfigurationTemplate_replicationServersSecurityGroupsIDs :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe [Prelude.Text])
+replicationConfigurationTemplate_replicationServersSecurityGroupsIDs = Lens.lens (\ReplicationConfigurationTemplate' {replicationServersSecurityGroupsIDs} -> replicationServersSecurityGroupsIDs) (\s@ReplicationConfigurationTemplate' {} a -> s {replicationServersSecurityGroupsIDs = a} :: ReplicationConfigurationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnet to be used by the replication staging area.
+replicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_stagingAreaSubnetId = Lens.lens (\ReplicationConfigurationTemplate' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@ReplicationConfigurationTemplate' {} a -> s {stagingAreaSubnetId = a} :: ReplicationConfigurationTemplate)
+
+-- | A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+replicationConfigurationTemplate_stagingAreaTags :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+replicationConfigurationTemplate_stagingAreaTags = Lens.lens (\ReplicationConfigurationTemplate' {stagingAreaTags} -> stagingAreaTags) (\s@ReplicationConfigurationTemplate' {} a -> s {stagingAreaTags = a} :: ReplicationConfigurationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | A set of tags to be associated with the Replication Configuration
+-- Template resource.
+replicationConfigurationTemplate_tags :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+replicationConfigurationTemplate_tags = Lens.lens (\ReplicationConfigurationTemplate' {tags} -> tags) (\s@ReplicationConfigurationTemplate' {} a -> s {tags = a} :: ReplicationConfigurationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Whether to use a dedicated Replication Server in the replication staging
+-- area.
+replicationConfigurationTemplate_useDedicatedReplicationServer :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+replicationConfigurationTemplate_useDedicatedReplicationServer = Lens.lens (\ReplicationConfigurationTemplate' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@ReplicationConfigurationTemplate' {} a -> s {useDedicatedReplicationServer = a} :: ReplicationConfigurationTemplate)
+
+-- | The Replication Configuration Template ID.
+replicationConfigurationTemplate_replicationConfigurationTemplateID :: Lens.Lens' ReplicationConfigurationTemplate Prelude.Text
+replicationConfigurationTemplate_replicationConfigurationTemplateID = Lens.lens (\ReplicationConfigurationTemplate' {replicationConfigurationTemplateID} -> replicationConfigurationTemplateID) (\s@ReplicationConfigurationTemplate' {} a -> s {replicationConfigurationTemplateID = a} :: ReplicationConfigurationTemplate)
+
+instance
+  Data.FromJSON
+    ReplicationConfigurationTemplate
+  where
+  parseJSON =
+    Data.withObject
+      "ReplicationConfigurationTemplate"
+      ( \x ->
+          ReplicationConfigurationTemplate'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "associateDefaultSecurityGroup")
+            Prelude.<*> (x Data..:? "bandwidthThrottling")
+            Prelude.<*> (x Data..:? "createPublicIP")
+            Prelude.<*> (x Data..:? "dataPlaneRouting")
+            Prelude.<*> (x Data..:? "defaultLargeStagingDiskType")
+            Prelude.<*> (x Data..:? "ebsEncryption")
+            Prelude.<*> (x Data..:? "ebsEncryptionKeyArn")
+            Prelude.<*> (x Data..:? "pitPolicy")
+            Prelude.<*> (x Data..:? "replicationServerInstanceType")
+            Prelude.<*> ( x
+                            Data..:? "replicationServersSecurityGroupsIDs"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "stagingAreaSubnetId")
+            Prelude.<*> ( x
+                            Data..:? "stagingAreaTags"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "useDedicatedReplicationServer")
+            Prelude.<*> (x Data..: "replicationConfigurationTemplateID")
+      )
+
+instance
+  Prelude.Hashable
+    ReplicationConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    ReplicationConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` associateDefaultSecurityGroup
+        `Prelude.hashWithSalt` bandwidthThrottling
+        `Prelude.hashWithSalt` createPublicIP
+        `Prelude.hashWithSalt` dataPlaneRouting
+        `Prelude.hashWithSalt` defaultLargeStagingDiskType
+        `Prelude.hashWithSalt` ebsEncryption
+        `Prelude.hashWithSalt` ebsEncryptionKeyArn
+        `Prelude.hashWithSalt` pitPolicy
+        `Prelude.hashWithSalt` replicationServerInstanceType
+        `Prelude.hashWithSalt` replicationServersSecurityGroupsIDs
+        `Prelude.hashWithSalt` stagingAreaSubnetId
+        `Prelude.hashWithSalt` stagingAreaTags
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` useDedicatedReplicationServer
+        `Prelude.hashWithSalt` replicationConfigurationTemplateID
+
+instance
+  Prelude.NFData
+    ReplicationConfigurationTemplate
+  where
+  rnf ReplicationConfigurationTemplate' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf associateDefaultSecurityGroup
+      `Prelude.seq` Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf createPublicIP
+      `Prelude.seq` Prelude.rnf dataPlaneRouting
+      `Prelude.seq` Prelude.rnf defaultLargeStagingDiskType
+      `Prelude.seq` Prelude.rnf ebsEncryption
+      `Prelude.seq` Prelude.rnf ebsEncryptionKeyArn
+      `Prelude.seq` Prelude.rnf pitPolicy
+      `Prelude.seq` Prelude.rnf replicationServerInstanceType
+      `Prelude.seq` Prelude.rnf replicationServersSecurityGroupsIDs
+      `Prelude.seq` Prelude.rnf stagingAreaSubnetId
+      `Prelude.seq` Prelude.rnf stagingAreaTags
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf
+        useDedicatedReplicationServer
+      `Prelude.seq` Prelude.rnf
+        replicationConfigurationTemplateID
diff --git a/gen/Amazonka/DrS/Types/ReplicationDirection.hs b/gen/Amazonka/DrS/Types/ReplicationDirection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/ReplicationDirection.hs
@@ -0,0 +1,78 @@
+{-# 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.DrS.Types.ReplicationDirection
+-- 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.DrS.Types.ReplicationDirection
+  ( ReplicationDirection
+      ( ..,
+        ReplicationDirection_FAILBACK,
+        ReplicationDirection_FAILOVER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Replication direction designates if this is a failover replication, or a
+-- failback replication. When a DRS agent is installed on an instance, the
+-- replication direction is failover. In cases where a recovery launch was
+-- made in the recovery location and a new recovery instance was created,
+-- and then a failback replication was initiated from that recovery
+-- instance back to the origin location, then the replication direction
+-- will be failback.
+newtype ReplicationDirection = ReplicationDirection'
+  { fromReplicationDirection ::
+      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 ReplicationDirection_FAILBACK :: ReplicationDirection
+pattern ReplicationDirection_FAILBACK = ReplicationDirection' "FAILBACK"
+
+pattern ReplicationDirection_FAILOVER :: ReplicationDirection
+pattern ReplicationDirection_FAILOVER = ReplicationDirection' "FAILOVER"
+
+{-# COMPLETE
+  ReplicationDirection_FAILBACK,
+  ReplicationDirection_FAILOVER,
+  ReplicationDirection'
+  #-}
diff --git a/gen/Amazonka/DrS/Types/SourceCloudProperties.hs b/gen/Amazonka/DrS/Types/SourceCloudProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/SourceCloudProperties.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.SourceCloudProperties
+-- 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.DrS.Types.SourceCloudProperties 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
+
+-- | Properties of the cloud environment where this Source Server originated
+-- from.
+--
+-- /See:/ 'newSourceCloudProperties' smart constructor.
+data SourceCloudProperties = SourceCloudProperties'
+  { -- | AWS Account ID for an EC2-originated Source Server.
+    originAccountID :: Prelude.Maybe Prelude.Text,
+    -- | AWS Availability Zone for an EC2-originated Source Server.
+    originAvailabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | AWS Region for an EC2-originated Source Server.
+    originRegion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceCloudProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'originAccountID', 'sourceCloudProperties_originAccountID' - AWS Account ID for an EC2-originated Source Server.
+--
+-- 'originAvailabilityZone', 'sourceCloudProperties_originAvailabilityZone' - AWS Availability Zone for an EC2-originated Source Server.
+--
+-- 'originRegion', 'sourceCloudProperties_originRegion' - AWS Region for an EC2-originated Source Server.
+newSourceCloudProperties ::
+  SourceCloudProperties
+newSourceCloudProperties =
+  SourceCloudProperties'
+    { originAccountID =
+        Prelude.Nothing,
+      originAvailabilityZone = Prelude.Nothing,
+      originRegion = Prelude.Nothing
+    }
+
+-- | AWS Account ID for an EC2-originated Source Server.
+sourceCloudProperties_originAccountID :: Lens.Lens' SourceCloudProperties (Prelude.Maybe Prelude.Text)
+sourceCloudProperties_originAccountID = Lens.lens (\SourceCloudProperties' {originAccountID} -> originAccountID) (\s@SourceCloudProperties' {} a -> s {originAccountID = a} :: SourceCloudProperties)
+
+-- | AWS Availability Zone for an EC2-originated Source Server.
+sourceCloudProperties_originAvailabilityZone :: Lens.Lens' SourceCloudProperties (Prelude.Maybe Prelude.Text)
+sourceCloudProperties_originAvailabilityZone = Lens.lens (\SourceCloudProperties' {originAvailabilityZone} -> originAvailabilityZone) (\s@SourceCloudProperties' {} a -> s {originAvailabilityZone = a} :: SourceCloudProperties)
+
+-- | AWS Region for an EC2-originated Source Server.
+sourceCloudProperties_originRegion :: Lens.Lens' SourceCloudProperties (Prelude.Maybe Prelude.Text)
+sourceCloudProperties_originRegion = Lens.lens (\SourceCloudProperties' {originRegion} -> originRegion) (\s@SourceCloudProperties' {} a -> s {originRegion = a} :: SourceCloudProperties)
+
+instance Data.FromJSON SourceCloudProperties where
+  parseJSON =
+    Data.withObject
+      "SourceCloudProperties"
+      ( \x ->
+          SourceCloudProperties'
+            Prelude.<$> (x Data..:? "originAccountID")
+            Prelude.<*> (x Data..:? "originAvailabilityZone")
+            Prelude.<*> (x Data..:? "originRegion")
+      )
+
+instance Prelude.Hashable SourceCloudProperties where
+  hashWithSalt _salt SourceCloudProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` originAccountID
+      `Prelude.hashWithSalt` originAvailabilityZone
+      `Prelude.hashWithSalt` originRegion
+
+instance Prelude.NFData SourceCloudProperties where
+  rnf SourceCloudProperties' {..} =
+    Prelude.rnf originAccountID
+      `Prelude.seq` Prelude.rnf originAvailabilityZone
+      `Prelude.seq` Prelude.rnf originRegion
diff --git a/gen/Amazonka/DrS/Types/SourceProperties.hs b/gen/Amazonka/DrS/Types/SourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/SourceProperties.hs
@@ -0,0 +1,167 @@
+{-# 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.DrS.Types.SourceProperties
+-- 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.DrS.Types.SourceProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.CPU
+import Amazonka.DrS.Types.Disk
+import Amazonka.DrS.Types.IdentificationHints
+import Amazonka.DrS.Types.NetworkInterface
+import Amazonka.DrS.Types.OS
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of the Source Server machine.
+--
+-- /See:/ 'newSourceProperties' smart constructor.
+data SourceProperties = SourceProperties'
+  { -- | An array of CPUs.
+    cpus :: Prelude.Maybe [CPU],
+    -- | An array of disks.
+    disks :: Prelude.Maybe [Disk],
+    -- | Hints used to uniquely identify a machine.
+    identificationHints :: Prelude.Maybe IdentificationHints,
+    -- | The date and time the Source Properties were last updated on.
+    lastUpdatedDateTime :: Prelude.Maybe Prelude.Text,
+    -- | An array of network interfaces.
+    networkInterfaces :: Prelude.Maybe [NetworkInterface],
+    -- | Operating system.
+    os :: Prelude.Maybe OS,
+    -- | The amount of RAM in bytes.
+    ramBytes :: Prelude.Maybe Prelude.Natural,
+    -- | The recommended EC2 instance type that will be used when recovering the
+    -- Source Server.
+    recommendedInstanceType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpus', 'sourceProperties_cpus' - An array of CPUs.
+--
+-- 'disks', 'sourceProperties_disks' - An array of disks.
+--
+-- 'identificationHints', 'sourceProperties_identificationHints' - Hints used to uniquely identify a machine.
+--
+-- 'lastUpdatedDateTime', 'sourceProperties_lastUpdatedDateTime' - The date and time the Source Properties were last updated on.
+--
+-- 'networkInterfaces', 'sourceProperties_networkInterfaces' - An array of network interfaces.
+--
+-- 'os', 'sourceProperties_os' - Operating system.
+--
+-- 'ramBytes', 'sourceProperties_ramBytes' - The amount of RAM in bytes.
+--
+-- 'recommendedInstanceType', 'sourceProperties_recommendedInstanceType' - The recommended EC2 instance type that will be used when recovering the
+-- Source Server.
+newSourceProperties ::
+  SourceProperties
+newSourceProperties =
+  SourceProperties'
+    { cpus = Prelude.Nothing,
+      disks = Prelude.Nothing,
+      identificationHints = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      os = Prelude.Nothing,
+      ramBytes = Prelude.Nothing,
+      recommendedInstanceType = Prelude.Nothing
+    }
+
+-- | An array of CPUs.
+sourceProperties_cpus :: Lens.Lens' SourceProperties (Prelude.Maybe [CPU])
+sourceProperties_cpus = Lens.lens (\SourceProperties' {cpus} -> cpus) (\s@SourceProperties' {} a -> s {cpus = a} :: SourceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of disks.
+sourceProperties_disks :: Lens.Lens' SourceProperties (Prelude.Maybe [Disk])
+sourceProperties_disks = Lens.lens (\SourceProperties' {disks} -> disks) (\s@SourceProperties' {} a -> s {disks = a} :: SourceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | Hints used to uniquely identify a machine.
+sourceProperties_identificationHints :: Lens.Lens' SourceProperties (Prelude.Maybe IdentificationHints)
+sourceProperties_identificationHints = Lens.lens (\SourceProperties' {identificationHints} -> identificationHints) (\s@SourceProperties' {} a -> s {identificationHints = a} :: SourceProperties)
+
+-- | The date and time the Source Properties were last updated on.
+sourceProperties_lastUpdatedDateTime :: Lens.Lens' SourceProperties (Prelude.Maybe Prelude.Text)
+sourceProperties_lastUpdatedDateTime = Lens.lens (\SourceProperties' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@SourceProperties' {} a -> s {lastUpdatedDateTime = a} :: SourceProperties)
+
+-- | An array of network interfaces.
+sourceProperties_networkInterfaces :: Lens.Lens' SourceProperties (Prelude.Maybe [NetworkInterface])
+sourceProperties_networkInterfaces = Lens.lens (\SourceProperties' {networkInterfaces} -> networkInterfaces) (\s@SourceProperties' {} a -> s {networkInterfaces = a} :: SourceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | Operating system.
+sourceProperties_os :: Lens.Lens' SourceProperties (Prelude.Maybe OS)
+sourceProperties_os = Lens.lens (\SourceProperties' {os} -> os) (\s@SourceProperties' {} a -> s {os = a} :: SourceProperties)
+
+-- | The amount of RAM in bytes.
+sourceProperties_ramBytes :: Lens.Lens' SourceProperties (Prelude.Maybe Prelude.Natural)
+sourceProperties_ramBytes = Lens.lens (\SourceProperties' {ramBytes} -> ramBytes) (\s@SourceProperties' {} a -> s {ramBytes = a} :: SourceProperties)
+
+-- | The recommended EC2 instance type that will be used when recovering the
+-- Source Server.
+sourceProperties_recommendedInstanceType :: Lens.Lens' SourceProperties (Prelude.Maybe Prelude.Text)
+sourceProperties_recommendedInstanceType = Lens.lens (\SourceProperties' {recommendedInstanceType} -> recommendedInstanceType) (\s@SourceProperties' {} a -> s {recommendedInstanceType = a} :: SourceProperties)
+
+instance Data.FromJSON SourceProperties where
+  parseJSON =
+    Data.withObject
+      "SourceProperties"
+      ( \x ->
+          SourceProperties'
+            Prelude.<$> (x Data..:? "cpus" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "disks" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "identificationHints")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> ( x
+                            Data..:? "networkInterfaces"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "os")
+            Prelude.<*> (x Data..:? "ramBytes")
+            Prelude.<*> (x Data..:? "recommendedInstanceType")
+      )
+
+instance Prelude.Hashable SourceProperties where
+  hashWithSalt _salt SourceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpus
+      `Prelude.hashWithSalt` disks
+      `Prelude.hashWithSalt` identificationHints
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` os
+      `Prelude.hashWithSalt` ramBytes
+      `Prelude.hashWithSalt` recommendedInstanceType
+
+instance Prelude.NFData SourceProperties where
+  rnf SourceProperties' {..} =
+    Prelude.rnf cpus
+      `Prelude.seq` Prelude.rnf disks
+      `Prelude.seq` Prelude.rnf identificationHints
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf os
+      `Prelude.seq` Prelude.rnf ramBytes
+      `Prelude.seq` Prelude.rnf recommendedInstanceType
diff --git a/gen/Amazonka/DrS/Types/SourceServer.hs b/gen/Amazonka/DrS/Types/SourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/SourceServer.hs
@@ -0,0 +1,215 @@
+{-# 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.DrS.Types.SourceServer
+-- 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.DrS.Types.SourceServer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.DataReplicationInfo
+import Amazonka.DrS.Types.LastLaunchResult
+import Amazonka.DrS.Types.LifeCycle
+import Amazonka.DrS.Types.ReplicationDirection
+import Amazonka.DrS.Types.SourceCloudProperties
+import Amazonka.DrS.Types.SourceProperties
+import Amazonka.DrS.Types.StagingArea
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newSourceServer' smart constructor.
+data SourceServer = SourceServer'
+  { -- | The ARN of the Source Server.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Data Replication Info of the Source Server.
+    dataReplicationInfo :: Prelude.Maybe DataReplicationInfo,
+    -- | The status of the last recovery launch of this Source Server.
+    lastLaunchResult :: Prelude.Maybe LastLaunchResult,
+    -- | The lifecycle information of this Source Server.
+    lifeCycle :: Prelude.Maybe LifeCycle,
+    -- | The ID of the Recovery Instance associated with this Source Server.
+    recoveryInstanceId :: Prelude.Maybe Prelude.Text,
+    -- | Replication direction of the Source Server.
+    replicationDirection :: Prelude.Maybe ReplicationDirection,
+    -- | For EC2-originated Source Servers which have been failed over and then
+    -- failed back, this value will mean the ARN of the Source Server on the
+    -- opposite replication direction.
+    reversedDirectionSourceServerArn :: Prelude.Maybe Prelude.Text,
+    -- | Source cloud properties of the Source Server.
+    sourceCloudProperties :: Prelude.Maybe SourceCloudProperties,
+    -- | The source properties of the Source Server.
+    sourceProperties :: Prelude.Maybe SourceProperties,
+    -- | The ID of the Source Server.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | The staging area of the source server.
+    stagingArea :: Prelude.Maybe StagingArea,
+    -- | The tags associated with the Source Server.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'sourceServer_arn' - The ARN of the Source Server.
+--
+-- 'dataReplicationInfo', 'sourceServer_dataReplicationInfo' - The Data Replication Info of the Source Server.
+--
+-- 'lastLaunchResult', 'sourceServer_lastLaunchResult' - The status of the last recovery launch of this Source Server.
+--
+-- 'lifeCycle', 'sourceServer_lifeCycle' - The lifecycle information of this Source Server.
+--
+-- 'recoveryInstanceId', 'sourceServer_recoveryInstanceId' - The ID of the Recovery Instance associated with this Source Server.
+--
+-- 'replicationDirection', 'sourceServer_replicationDirection' - Replication direction of the Source Server.
+--
+-- 'reversedDirectionSourceServerArn', 'sourceServer_reversedDirectionSourceServerArn' - For EC2-originated Source Servers which have been failed over and then
+-- failed back, this value will mean the ARN of the Source Server on the
+-- opposite replication direction.
+--
+-- 'sourceCloudProperties', 'sourceServer_sourceCloudProperties' - Source cloud properties of the Source Server.
+--
+-- 'sourceProperties', 'sourceServer_sourceProperties' - The source properties of the Source Server.
+--
+-- 'sourceServerID', 'sourceServer_sourceServerID' - The ID of the Source Server.
+--
+-- 'stagingArea', 'sourceServer_stagingArea' - The staging area of the source server.
+--
+-- 'tags', 'sourceServer_tags' - The tags associated with the Source Server.
+newSourceServer ::
+  SourceServer
+newSourceServer =
+  SourceServer'
+    { arn = Prelude.Nothing,
+      dataReplicationInfo = Prelude.Nothing,
+      lastLaunchResult = Prelude.Nothing,
+      lifeCycle = Prelude.Nothing,
+      recoveryInstanceId = Prelude.Nothing,
+      replicationDirection = Prelude.Nothing,
+      reversedDirectionSourceServerArn = Prelude.Nothing,
+      sourceCloudProperties = Prelude.Nothing,
+      sourceProperties = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      stagingArea = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the Source Server.
+sourceServer_arn :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_arn = Lens.lens (\SourceServer' {arn} -> arn) (\s@SourceServer' {} a -> s {arn = a} :: SourceServer)
+
+-- | The Data Replication Info of the Source Server.
+sourceServer_dataReplicationInfo :: Lens.Lens' SourceServer (Prelude.Maybe DataReplicationInfo)
+sourceServer_dataReplicationInfo = Lens.lens (\SourceServer' {dataReplicationInfo} -> dataReplicationInfo) (\s@SourceServer' {} a -> s {dataReplicationInfo = a} :: SourceServer)
+
+-- | The status of the last recovery launch of this Source Server.
+sourceServer_lastLaunchResult :: Lens.Lens' SourceServer (Prelude.Maybe LastLaunchResult)
+sourceServer_lastLaunchResult = Lens.lens (\SourceServer' {lastLaunchResult} -> lastLaunchResult) (\s@SourceServer' {} a -> s {lastLaunchResult = a} :: SourceServer)
+
+-- | The lifecycle information of this Source Server.
+sourceServer_lifeCycle :: Lens.Lens' SourceServer (Prelude.Maybe LifeCycle)
+sourceServer_lifeCycle = Lens.lens (\SourceServer' {lifeCycle} -> lifeCycle) (\s@SourceServer' {} a -> s {lifeCycle = a} :: SourceServer)
+
+-- | The ID of the Recovery Instance associated with this Source Server.
+sourceServer_recoveryInstanceId :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_recoveryInstanceId = Lens.lens (\SourceServer' {recoveryInstanceId} -> recoveryInstanceId) (\s@SourceServer' {} a -> s {recoveryInstanceId = a} :: SourceServer)
+
+-- | Replication direction of the Source Server.
+sourceServer_replicationDirection :: Lens.Lens' SourceServer (Prelude.Maybe ReplicationDirection)
+sourceServer_replicationDirection = Lens.lens (\SourceServer' {replicationDirection} -> replicationDirection) (\s@SourceServer' {} a -> s {replicationDirection = a} :: SourceServer)
+
+-- | For EC2-originated Source Servers which have been failed over and then
+-- failed back, this value will mean the ARN of the Source Server on the
+-- opposite replication direction.
+sourceServer_reversedDirectionSourceServerArn :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_reversedDirectionSourceServerArn = Lens.lens (\SourceServer' {reversedDirectionSourceServerArn} -> reversedDirectionSourceServerArn) (\s@SourceServer' {} a -> s {reversedDirectionSourceServerArn = a} :: SourceServer)
+
+-- | Source cloud properties of the Source Server.
+sourceServer_sourceCloudProperties :: Lens.Lens' SourceServer (Prelude.Maybe SourceCloudProperties)
+sourceServer_sourceCloudProperties = Lens.lens (\SourceServer' {sourceCloudProperties} -> sourceCloudProperties) (\s@SourceServer' {} a -> s {sourceCloudProperties = a} :: SourceServer)
+
+-- | The source properties of the Source Server.
+sourceServer_sourceProperties :: Lens.Lens' SourceServer (Prelude.Maybe SourceProperties)
+sourceServer_sourceProperties = Lens.lens (\SourceServer' {sourceProperties} -> sourceProperties) (\s@SourceServer' {} a -> s {sourceProperties = a} :: SourceServer)
+
+-- | The ID of the Source Server.
+sourceServer_sourceServerID :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_sourceServerID = Lens.lens (\SourceServer' {sourceServerID} -> sourceServerID) (\s@SourceServer' {} a -> s {sourceServerID = a} :: SourceServer)
+
+-- | The staging area of the source server.
+sourceServer_stagingArea :: Lens.Lens' SourceServer (Prelude.Maybe StagingArea)
+sourceServer_stagingArea = Lens.lens (\SourceServer' {stagingArea} -> stagingArea) (\s@SourceServer' {} a -> s {stagingArea = a} :: SourceServer)
+
+-- | The tags associated with the Source Server.
+sourceServer_tags :: Lens.Lens' SourceServer (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+sourceServer_tags = Lens.lens (\SourceServer' {tags} -> tags) (\s@SourceServer' {} a -> s {tags = a} :: SourceServer) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+instance Data.FromJSON SourceServer where
+  parseJSON =
+    Data.withObject
+      "SourceServer"
+      ( \x ->
+          SourceServer'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dataReplicationInfo")
+            Prelude.<*> (x Data..:? "lastLaunchResult")
+            Prelude.<*> (x Data..:? "lifeCycle")
+            Prelude.<*> (x Data..:? "recoveryInstanceId")
+            Prelude.<*> (x Data..:? "replicationDirection")
+            Prelude.<*> (x Data..:? "reversedDirectionSourceServerArn")
+            Prelude.<*> (x Data..:? "sourceCloudProperties")
+            Prelude.<*> (x Data..:? "sourceProperties")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "stagingArea")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SourceServer where
+  hashWithSalt _salt SourceServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dataReplicationInfo
+      `Prelude.hashWithSalt` lastLaunchResult
+      `Prelude.hashWithSalt` lifeCycle
+      `Prelude.hashWithSalt` recoveryInstanceId
+      `Prelude.hashWithSalt` replicationDirection
+      `Prelude.hashWithSalt` reversedDirectionSourceServerArn
+      `Prelude.hashWithSalt` sourceCloudProperties
+      `Prelude.hashWithSalt` sourceProperties
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` stagingArea
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData SourceServer where
+  rnf SourceServer' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dataReplicationInfo
+      `Prelude.seq` Prelude.rnf lastLaunchResult
+      `Prelude.seq` Prelude.rnf lifeCycle
+      `Prelude.seq` Prelude.rnf recoveryInstanceId
+      `Prelude.seq` Prelude.rnf replicationDirection
+      `Prelude.seq` Prelude.rnf reversedDirectionSourceServerArn
+      `Prelude.seq` Prelude.rnf sourceCloudProperties
+      `Prelude.seq` Prelude.rnf sourceProperties
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf stagingArea
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/DrS/Types/StagingArea.hs b/gen/Amazonka/DrS/Types/StagingArea.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/StagingArea.hs
@@ -0,0 +1,139 @@
+{-# 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.DrS.Types.StagingArea
+-- 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.DrS.Types.StagingArea where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types.ExtensionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Staging information related to source server.
+--
+-- /See:/ 'newStagingArea' smart constructor.
+data StagingArea = StagingArea'
+  { -- | Shows an error message that occurred when DRS tried to access the
+    -- staging source server. In this case StagingArea$status will have value
+    -- EXTENSION_ERROR
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Account ID of the account to which source server belongs. If this source
+    -- server is extended - shows Account ID of staging source server.
+    stagingAccountID :: Prelude.Maybe Prelude.Text,
+    -- | Arn of the staging source server if this source server is extended
+    stagingSourceServerArn :: Prelude.Maybe Prelude.Text,
+    -- | Status of Source server extension. Possible values: (a) NOT_EXTENDED -
+    -- This is a source server that is replicating in the current account. (b)
+    -- EXTENDED - Source server is extended from a staging source server. In
+    -- this case, the value of stagingSourceServerArn is pointing to the Arn of
+    -- the source server in the staging account. (c) EXTENSION_ERROR - Some
+    -- issue occurred when accessing staging source server. In this case,
+    -- errorMessage field will contain an error message that explains what
+    -- happened.
+    status :: Prelude.Maybe ExtensionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StagingArea' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorMessage', 'stagingArea_errorMessage' - Shows an error message that occurred when DRS tried to access the
+-- staging source server. In this case StagingArea$status will have value
+-- EXTENSION_ERROR
+--
+-- 'stagingAccountID', 'stagingArea_stagingAccountID' - Account ID of the account to which source server belongs. If this source
+-- server is extended - shows Account ID of staging source server.
+--
+-- 'stagingSourceServerArn', 'stagingArea_stagingSourceServerArn' - Arn of the staging source server if this source server is extended
+--
+-- 'status', 'stagingArea_status' - Status of Source server extension. Possible values: (a) NOT_EXTENDED -
+-- This is a source server that is replicating in the current account. (b)
+-- EXTENDED - Source server is extended from a staging source server. In
+-- this case, the value of stagingSourceServerArn is pointing to the Arn of
+-- the source server in the staging account. (c) EXTENSION_ERROR - Some
+-- issue occurred when accessing staging source server. In this case,
+-- errorMessage field will contain an error message that explains what
+-- happened.
+newStagingArea ::
+  StagingArea
+newStagingArea =
+  StagingArea'
+    { errorMessage = Prelude.Nothing,
+      stagingAccountID = Prelude.Nothing,
+      stagingSourceServerArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Shows an error message that occurred when DRS tried to access the
+-- staging source server. In this case StagingArea$status will have value
+-- EXTENSION_ERROR
+stagingArea_errorMessage :: Lens.Lens' StagingArea (Prelude.Maybe Prelude.Text)
+stagingArea_errorMessage = Lens.lens (\StagingArea' {errorMessage} -> errorMessage) (\s@StagingArea' {} a -> s {errorMessage = a} :: StagingArea)
+
+-- | Account ID of the account to which source server belongs. If this source
+-- server is extended - shows Account ID of staging source server.
+stagingArea_stagingAccountID :: Lens.Lens' StagingArea (Prelude.Maybe Prelude.Text)
+stagingArea_stagingAccountID = Lens.lens (\StagingArea' {stagingAccountID} -> stagingAccountID) (\s@StagingArea' {} a -> s {stagingAccountID = a} :: StagingArea)
+
+-- | Arn of the staging source server if this source server is extended
+stagingArea_stagingSourceServerArn :: Lens.Lens' StagingArea (Prelude.Maybe Prelude.Text)
+stagingArea_stagingSourceServerArn = Lens.lens (\StagingArea' {stagingSourceServerArn} -> stagingSourceServerArn) (\s@StagingArea' {} a -> s {stagingSourceServerArn = a} :: StagingArea)
+
+-- | Status of Source server extension. Possible values: (a) NOT_EXTENDED -
+-- This is a source server that is replicating in the current account. (b)
+-- EXTENDED - Source server is extended from a staging source server. In
+-- this case, the value of stagingSourceServerArn is pointing to the Arn of
+-- the source server in the staging account. (c) EXTENSION_ERROR - Some
+-- issue occurred when accessing staging source server. In this case,
+-- errorMessage field will contain an error message that explains what
+-- happened.
+stagingArea_status :: Lens.Lens' StagingArea (Prelude.Maybe ExtensionStatus)
+stagingArea_status = Lens.lens (\StagingArea' {status} -> status) (\s@StagingArea' {} a -> s {status = a} :: StagingArea)
+
+instance Data.FromJSON StagingArea where
+  parseJSON =
+    Data.withObject
+      "StagingArea"
+      ( \x ->
+          StagingArea'
+            Prelude.<$> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "stagingAccountID")
+            Prelude.<*> (x Data..:? "stagingSourceServerArn")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable StagingArea where
+  hashWithSalt _salt StagingArea' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` stagingAccountID
+      `Prelude.hashWithSalt` stagingSourceServerArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData StagingArea where
+  rnf StagingArea' {..} =
+    Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf stagingAccountID
+      `Prelude.seq` Prelude.rnf stagingSourceServerArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/DrS/Types/StagingSourceServer.hs b/gen/Amazonka/DrS/Types/StagingSourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/StagingSourceServer.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.StagingSourceServer
+-- 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.DrS.Types.StagingSourceServer 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
+
+-- | Source server in staging account that extended source server connected
+-- to.
+--
+-- /See:/ 'newStagingSourceServer' smart constructor.
+data StagingSourceServer = StagingSourceServer'
+  { -- | The ARN of the source server.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Hostname of staging source server.
+    hostname :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags associated with the staging source server.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StagingSourceServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stagingSourceServer_arn' - The ARN of the source server.
+--
+-- 'hostname', 'stagingSourceServer_hostname' - Hostname of staging source server.
+--
+-- 'tags', 'stagingSourceServer_tags' - A list of tags associated with the staging source server.
+newStagingSourceServer ::
+  StagingSourceServer
+newStagingSourceServer =
+  StagingSourceServer'
+    { arn = Prelude.Nothing,
+      hostname = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the source server.
+stagingSourceServer_arn :: Lens.Lens' StagingSourceServer (Prelude.Maybe Prelude.Text)
+stagingSourceServer_arn = Lens.lens (\StagingSourceServer' {arn} -> arn) (\s@StagingSourceServer' {} a -> s {arn = a} :: StagingSourceServer)
+
+-- | Hostname of staging source server.
+stagingSourceServer_hostname :: Lens.Lens' StagingSourceServer (Prelude.Maybe Prelude.Text)
+stagingSourceServer_hostname = Lens.lens (\StagingSourceServer' {hostname} -> hostname) (\s@StagingSourceServer' {} a -> s {hostname = a} :: StagingSourceServer)
+
+-- | A list of tags associated with the staging source server.
+stagingSourceServer_tags :: Lens.Lens' StagingSourceServer (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+stagingSourceServer_tags = Lens.lens (\StagingSourceServer' {tags} -> tags) (\s@StagingSourceServer' {} a -> s {tags = a} :: StagingSourceServer) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+instance Data.FromJSON StagingSourceServer where
+  parseJSON =
+    Data.withObject
+      "StagingSourceServer"
+      ( \x ->
+          StagingSourceServer'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "hostname")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable StagingSourceServer where
+  hashWithSalt _salt StagingSourceServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` hostname
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData StagingSourceServer where
+  rnf StagingSourceServer' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf hostname
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/DrS/Types/StartRecoveryRequestSourceServer.hs b/gen/Amazonka/DrS/Types/StartRecoveryRequestSourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/StartRecoveryRequestSourceServer.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.StartRecoveryRequestSourceServer
+-- 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.DrS.Types.StartRecoveryRequestSourceServer 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
+
+-- | An object representing the Source Server to recover.
+--
+-- /See:/ 'newStartRecoveryRequestSourceServer' smart constructor.
+data StartRecoveryRequestSourceServer = StartRecoveryRequestSourceServer'
+  { -- | The ID of a Recovery Snapshot we want to recover from. Omit this field
+    -- to launch from the latest data by taking an on-demand snapshot.
+    recoverySnapshotID :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Source Server you want to recover.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartRecoveryRequestSourceServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'recoverySnapshotID', 'startRecoveryRequestSourceServer_recoverySnapshotID' - The ID of a Recovery Snapshot we want to recover from. Omit this field
+-- to launch from the latest data by taking an on-demand snapshot.
+--
+-- 'sourceServerID', 'startRecoveryRequestSourceServer_sourceServerID' - The ID of the Source Server you want to recover.
+newStartRecoveryRequestSourceServer ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  StartRecoveryRequestSourceServer
+newStartRecoveryRequestSourceServer pSourceServerID_ =
+  StartRecoveryRequestSourceServer'
+    { recoverySnapshotID =
+        Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | The ID of a Recovery Snapshot we want to recover from. Omit this field
+-- to launch from the latest data by taking an on-demand snapshot.
+startRecoveryRequestSourceServer_recoverySnapshotID :: Lens.Lens' StartRecoveryRequestSourceServer (Prelude.Maybe Prelude.Text)
+startRecoveryRequestSourceServer_recoverySnapshotID = Lens.lens (\StartRecoveryRequestSourceServer' {recoverySnapshotID} -> recoverySnapshotID) (\s@StartRecoveryRequestSourceServer' {} a -> s {recoverySnapshotID = a} :: StartRecoveryRequestSourceServer)
+
+-- | The ID of the Source Server you want to recover.
+startRecoveryRequestSourceServer_sourceServerID :: Lens.Lens' StartRecoveryRequestSourceServer Prelude.Text
+startRecoveryRequestSourceServer_sourceServerID = Lens.lens (\StartRecoveryRequestSourceServer' {sourceServerID} -> sourceServerID) (\s@StartRecoveryRequestSourceServer' {} a -> s {sourceServerID = a} :: StartRecoveryRequestSourceServer)
+
+instance
+  Prelude.Hashable
+    StartRecoveryRequestSourceServer
+  where
+  hashWithSalt
+    _salt
+    StartRecoveryRequestSourceServer' {..} =
+      _salt
+        `Prelude.hashWithSalt` recoverySnapshotID
+        `Prelude.hashWithSalt` sourceServerID
+
+instance
+  Prelude.NFData
+    StartRecoveryRequestSourceServer
+  where
+  rnf StartRecoveryRequestSourceServer' {..} =
+    Prelude.rnf recoverySnapshotID
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToJSON StartRecoveryRequestSourceServer where
+  toJSON StartRecoveryRequestSourceServer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("recoverySnapshotID" Data..=)
+              Prelude.<$> recoverySnapshotID,
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
diff --git a/gen/Amazonka/DrS/Types/TargetInstanceTypeRightSizingMethod.hs b/gen/Amazonka/DrS/Types/TargetInstanceTypeRightSizingMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/Types/TargetInstanceTypeRightSizingMethod.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.Types.TargetInstanceTypeRightSizingMethod
+-- 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.DrS.Types.TargetInstanceTypeRightSizingMethod
+  ( TargetInstanceTypeRightSizingMethod
+      ( ..,
+        TargetInstanceTypeRightSizingMethod_BASIC,
+        TargetInstanceTypeRightSizingMethod_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TargetInstanceTypeRightSizingMethod = TargetInstanceTypeRightSizingMethod'
+  { fromTargetInstanceTypeRightSizingMethod ::
+      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 TargetInstanceTypeRightSizingMethod_BASIC :: TargetInstanceTypeRightSizingMethod
+pattern TargetInstanceTypeRightSizingMethod_BASIC = TargetInstanceTypeRightSizingMethod' "BASIC"
+
+pattern TargetInstanceTypeRightSizingMethod_NONE :: TargetInstanceTypeRightSizingMethod
+pattern TargetInstanceTypeRightSizingMethod_NONE = TargetInstanceTypeRightSizingMethod' "NONE"
+
+{-# COMPLETE
+  TargetInstanceTypeRightSizingMethod_BASIC,
+  TargetInstanceTypeRightSizingMethod_NONE,
+  TargetInstanceTypeRightSizingMethod'
+  #-}
diff --git a/gen/Amazonka/DrS/UntagResource.hs b/gen/Amazonka/DrS/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/UntagResource.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.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)
+--
+-- Deletes the specified set of tags from the specified set of Elastic
+-- Disaster Recovery resources.
+module Amazonka.DrS.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * 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 Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | ARN of the resource for which tags are to be removed.
+    resourceArn :: Prelude.Text,
+    -- | Array of tags to be removed.
+    tagKeys :: Data.Sensitive [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - ARN of the resource for which tags are to be removed.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - Array of tags to be removed.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | ARN of the resource for which tags are to be removed.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | Array of tags to be removed.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "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/DrS/UpdateFailbackReplicationConfiguration.hs b/gen/Amazonka/DrS/UpdateFailbackReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/UpdateFailbackReplicationConfiguration.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.UpdateFailbackReplicationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allows you to update the failback replication configuration of a
+-- Recovery Instance by ID.
+module Amazonka.DrS.UpdateFailbackReplicationConfiguration
+  ( -- * Creating a Request
+    UpdateFailbackReplicationConfiguration (..),
+    newUpdateFailbackReplicationConfiguration,
+
+    -- * Request Lenses
+    updateFailbackReplicationConfiguration_bandwidthThrottling,
+    updateFailbackReplicationConfiguration_name,
+    updateFailbackReplicationConfiguration_usePrivateIP,
+    updateFailbackReplicationConfiguration_recoveryInstanceID,
+
+    -- * Destructuring the Response
+    UpdateFailbackReplicationConfigurationResponse (..),
+    newUpdateFailbackReplicationConfigurationResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateFailbackReplicationConfiguration' smart constructor.
+data UpdateFailbackReplicationConfiguration = UpdateFailbackReplicationConfiguration'
+  { -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Recovery Instance in Mbps.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the Failback Replication Configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Whether to use Private IP for the failback replication of the Recovery
+    -- Instance.
+    usePrivateIP :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Recovery Instance.
+    recoveryInstanceID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFailbackReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bandwidthThrottling', 'updateFailbackReplicationConfiguration_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Recovery Instance in Mbps.
+--
+-- 'name', 'updateFailbackReplicationConfiguration_name' - The name of the Failback Replication Configuration.
+--
+-- 'usePrivateIP', 'updateFailbackReplicationConfiguration_usePrivateIP' - Whether to use Private IP for the failback replication of the Recovery
+-- Instance.
+--
+-- 'recoveryInstanceID', 'updateFailbackReplicationConfiguration_recoveryInstanceID' - The ID of the Recovery Instance.
+newUpdateFailbackReplicationConfiguration ::
+  -- | 'recoveryInstanceID'
+  Prelude.Text ->
+  UpdateFailbackReplicationConfiguration
+newUpdateFailbackReplicationConfiguration
+  pRecoveryInstanceID_ =
+    UpdateFailbackReplicationConfiguration'
+      { bandwidthThrottling =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        usePrivateIP = Prelude.Nothing,
+        recoveryInstanceID =
+          pRecoveryInstanceID_
+      }
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Recovery Instance in Mbps.
+updateFailbackReplicationConfiguration_bandwidthThrottling :: Lens.Lens' UpdateFailbackReplicationConfiguration (Prelude.Maybe Prelude.Natural)
+updateFailbackReplicationConfiguration_bandwidthThrottling = Lens.lens (\UpdateFailbackReplicationConfiguration' {bandwidthThrottling} -> bandwidthThrottling) (\s@UpdateFailbackReplicationConfiguration' {} a -> s {bandwidthThrottling = a} :: UpdateFailbackReplicationConfiguration)
+
+-- | The name of the Failback Replication Configuration.
+updateFailbackReplicationConfiguration_name :: Lens.Lens' UpdateFailbackReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateFailbackReplicationConfiguration_name = Lens.lens (\UpdateFailbackReplicationConfiguration' {name} -> name) (\s@UpdateFailbackReplicationConfiguration' {} a -> s {name = a} :: UpdateFailbackReplicationConfiguration)
+
+-- | Whether to use Private IP for the failback replication of the Recovery
+-- Instance.
+updateFailbackReplicationConfiguration_usePrivateIP :: Lens.Lens' UpdateFailbackReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateFailbackReplicationConfiguration_usePrivateIP = Lens.lens (\UpdateFailbackReplicationConfiguration' {usePrivateIP} -> usePrivateIP) (\s@UpdateFailbackReplicationConfiguration' {} a -> s {usePrivateIP = a} :: UpdateFailbackReplicationConfiguration)
+
+-- | The ID of the Recovery Instance.
+updateFailbackReplicationConfiguration_recoveryInstanceID :: Lens.Lens' UpdateFailbackReplicationConfiguration Prelude.Text
+updateFailbackReplicationConfiguration_recoveryInstanceID = Lens.lens (\UpdateFailbackReplicationConfiguration' {recoveryInstanceID} -> recoveryInstanceID) (\s@UpdateFailbackReplicationConfiguration' {} a -> s {recoveryInstanceID = a} :: UpdateFailbackReplicationConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateFailbackReplicationConfiguration
+  where
+  type
+    AWSResponse
+      UpdateFailbackReplicationConfiguration =
+      UpdateFailbackReplicationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      UpdateFailbackReplicationConfigurationResponse'
+
+instance
+  Prelude.Hashable
+    UpdateFailbackReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateFailbackReplicationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` bandwidthThrottling
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` usePrivateIP
+        `Prelude.hashWithSalt` recoveryInstanceID
+
+instance
+  Prelude.NFData
+    UpdateFailbackReplicationConfiguration
+  where
+  rnf UpdateFailbackReplicationConfiguration' {..} =
+    Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf usePrivateIP
+      `Prelude.seq` Prelude.rnf recoveryInstanceID
+
+instance
+  Data.ToHeaders
+    UpdateFailbackReplicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateFailbackReplicationConfiguration
+  where
+  toJSON UpdateFailbackReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bandwidthThrottling" Data..=)
+              Prelude.<$> bandwidthThrottling,
+            ("name" Data..=) Prelude.<$> name,
+            ("usePrivateIP" Data..=) Prelude.<$> usePrivateIP,
+            Prelude.Just
+              ("recoveryInstanceID" Data..= recoveryInstanceID)
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateFailbackReplicationConfiguration
+  where
+  toPath =
+    Prelude.const
+      "/UpdateFailbackReplicationConfiguration"
+
+instance
+  Data.ToQuery
+    UpdateFailbackReplicationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFailbackReplicationConfigurationResponse' smart constructor.
+data UpdateFailbackReplicationConfigurationResponse = UpdateFailbackReplicationConfigurationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFailbackReplicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateFailbackReplicationConfigurationResponse ::
+  UpdateFailbackReplicationConfigurationResponse
+newUpdateFailbackReplicationConfigurationResponse =
+  UpdateFailbackReplicationConfigurationResponse'
+
+instance
+  Prelude.NFData
+    UpdateFailbackReplicationConfigurationResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/DrS/UpdateLaunchConfiguration.hs b/gen/Amazonka/DrS/UpdateLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/UpdateLaunchConfiguration.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DrS.UpdateLaunchConfiguration
+-- 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 LaunchConfiguration by Source Server ID.
+module Amazonka.DrS.UpdateLaunchConfiguration
+  ( -- * Creating a Request
+    UpdateLaunchConfiguration (..),
+    newUpdateLaunchConfiguration,
+
+    -- * Request Lenses
+    updateLaunchConfiguration_copyPrivateIp,
+    updateLaunchConfiguration_copyTags,
+    updateLaunchConfiguration_launchDisposition,
+    updateLaunchConfiguration_licensing,
+    updateLaunchConfiguration_name,
+    updateLaunchConfiguration_targetInstanceTypeRightSizingMethod,
+    updateLaunchConfiguration_sourceServerID,
+
+    -- * Destructuring the Response
+    LaunchConfiguration (..),
+    newLaunchConfiguration,
+
+    -- * Response Lenses
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_name,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLaunchConfiguration' smart constructor.
+data UpdateLaunchConfiguration = UpdateLaunchConfiguration'
+  { -- | Whether we should copy the Private IP of the Source Server to the
+    -- Recovery Instance.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Whether we want to copy the tags of the Source Server to the EC2 machine
+    -- of the Recovery Instance.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | The state of the Recovery Instance in EC2 after the recovery operation.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    -- | The licensing configuration to be used for this launch configuration.
+    licensing :: Prelude.Maybe Licensing,
+    -- | The name of the launch configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Whether Elastic Disaster Recovery should try to automatically choose the
+    -- instance type that best matches the OS, CPU, and RAM of your Source
+    -- Server.
+    targetInstanceTypeRightSizingMethod :: Prelude.Maybe TargetInstanceTypeRightSizingMethod,
+    -- | The ID of the Source Server that we want to retrieve a Launch
+    -- Configuration for.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'copyPrivateIp', 'updateLaunchConfiguration_copyPrivateIp' - Whether we should copy the Private IP of the Source Server to the
+-- Recovery Instance.
+--
+-- 'copyTags', 'updateLaunchConfiguration_copyTags' - Whether we want to copy the tags of the Source Server to the EC2 machine
+-- of the Recovery Instance.
+--
+-- 'launchDisposition', 'updateLaunchConfiguration_launchDisposition' - The state of the Recovery Instance in EC2 after the recovery operation.
+--
+-- 'licensing', 'updateLaunchConfiguration_licensing' - The licensing configuration to be used for this launch configuration.
+--
+-- 'name', 'updateLaunchConfiguration_name' - The name of the launch configuration.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'updateLaunchConfiguration_targetInstanceTypeRightSizingMethod' - Whether Elastic Disaster Recovery should try to automatically choose the
+-- instance type that best matches the OS, CPU, and RAM of your Source
+-- Server.
+--
+-- 'sourceServerID', 'updateLaunchConfiguration_sourceServerID' - The ID of the Source Server that we want to retrieve a Launch
+-- Configuration for.
+newUpdateLaunchConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  UpdateLaunchConfiguration
+newUpdateLaunchConfiguration pSourceServerID_ =
+  UpdateLaunchConfiguration'
+    { copyPrivateIp =
+        Prelude.Nothing,
+      copyTags = Prelude.Nothing,
+      launchDisposition = Prelude.Nothing,
+      licensing = Prelude.Nothing,
+      name = Prelude.Nothing,
+      targetInstanceTypeRightSizingMethod =
+        Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | Whether we should copy the Private IP of the Source Server to the
+-- Recovery Instance.
+updateLaunchConfiguration_copyPrivateIp :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+updateLaunchConfiguration_copyPrivateIp = Lens.lens (\UpdateLaunchConfiguration' {copyPrivateIp} -> copyPrivateIp) (\s@UpdateLaunchConfiguration' {} a -> s {copyPrivateIp = a} :: UpdateLaunchConfiguration)
+
+-- | Whether we want to copy the tags of the Source Server to the EC2 machine
+-- of the Recovery Instance.
+updateLaunchConfiguration_copyTags :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+updateLaunchConfiguration_copyTags = Lens.lens (\UpdateLaunchConfiguration' {copyTags} -> copyTags) (\s@UpdateLaunchConfiguration' {} a -> s {copyTags = a} :: UpdateLaunchConfiguration)
+
+-- | The state of the Recovery Instance in EC2 after the recovery operation.
+updateLaunchConfiguration_launchDisposition :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe LaunchDisposition)
+updateLaunchConfiguration_launchDisposition = Lens.lens (\UpdateLaunchConfiguration' {launchDisposition} -> launchDisposition) (\s@UpdateLaunchConfiguration' {} a -> s {launchDisposition = a} :: UpdateLaunchConfiguration)
+
+-- | The licensing configuration to be used for this launch configuration.
+updateLaunchConfiguration_licensing :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Licensing)
+updateLaunchConfiguration_licensing = Lens.lens (\UpdateLaunchConfiguration' {licensing} -> licensing) (\s@UpdateLaunchConfiguration' {} a -> s {licensing = a} :: UpdateLaunchConfiguration)
+
+-- | The name of the launch configuration.
+updateLaunchConfiguration_name :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Text)
+updateLaunchConfiguration_name = Lens.lens (\UpdateLaunchConfiguration' {name} -> name) (\s@UpdateLaunchConfiguration' {} a -> s {name = a} :: UpdateLaunchConfiguration)
+
+-- | Whether Elastic Disaster Recovery should try to automatically choose the
+-- instance type that best matches the OS, CPU, and RAM of your Source
+-- Server.
+updateLaunchConfiguration_targetInstanceTypeRightSizingMethod :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe TargetInstanceTypeRightSizingMethod)
+updateLaunchConfiguration_targetInstanceTypeRightSizingMethod = Lens.lens (\UpdateLaunchConfiguration' {targetInstanceTypeRightSizingMethod} -> targetInstanceTypeRightSizingMethod) (\s@UpdateLaunchConfiguration' {} a -> s {targetInstanceTypeRightSizingMethod = a} :: UpdateLaunchConfiguration)
+
+-- | The ID of the Source Server that we want to retrieve a Launch
+-- Configuration for.
+updateLaunchConfiguration_sourceServerID :: Lens.Lens' UpdateLaunchConfiguration Prelude.Text
+updateLaunchConfiguration_sourceServerID = Lens.lens (\UpdateLaunchConfiguration' {sourceServerID} -> sourceServerID) (\s@UpdateLaunchConfiguration' {} a -> s {sourceServerID = a} :: UpdateLaunchConfiguration)
+
+instance Core.AWSRequest UpdateLaunchConfiguration where
+  type
+    AWSResponse UpdateLaunchConfiguration =
+      LaunchConfiguration
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateLaunchConfiguration where
+  hashWithSalt _salt UpdateLaunchConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` copyPrivateIp
+      `Prelude.hashWithSalt` copyTags
+      `Prelude.hashWithSalt` launchDisposition
+      `Prelude.hashWithSalt` licensing
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData UpdateLaunchConfiguration where
+  rnf UpdateLaunchConfiguration' {..} =
+    Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf targetInstanceTypeRightSizingMethod
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToHeaders UpdateLaunchConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLaunchConfiguration where
+  toJSON UpdateLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("copyPrivateIp" Data..=) Prelude.<$> copyPrivateIp,
+            ("copyTags" Data..=) Prelude.<$> copyTags,
+            ("launchDisposition" Data..=)
+              Prelude.<$> launchDisposition,
+            ("licensing" Data..=) Prelude.<$> licensing,
+            ("name" Data..=) Prelude.<$> name,
+            ("targetInstanceTypeRightSizingMethod" Data..=)
+              Prelude.<$> targetInstanceTypeRightSizingMethod,
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath UpdateLaunchConfiguration where
+  toPath = Prelude.const "/UpdateLaunchConfiguration"
+
+instance Data.ToQuery UpdateLaunchConfiguration where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/UpdateReplicationConfiguration.hs b/gen/Amazonka/DrS/UpdateReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/UpdateReplicationConfiguration.hs
@@ -0,0 +1,383 @@
+{-# 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.DrS.UpdateReplicationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allows you to update a ReplicationConfiguration by Source Server ID.
+module Amazonka.DrS.UpdateReplicationConfiguration
+  ( -- * Creating a Request
+    UpdateReplicationConfiguration (..),
+    newUpdateReplicationConfiguration,
+
+    -- * Request Lenses
+    updateReplicationConfiguration_associateDefaultSecurityGroup,
+    updateReplicationConfiguration_bandwidthThrottling,
+    updateReplicationConfiguration_createPublicIP,
+    updateReplicationConfiguration_dataPlaneRouting,
+    updateReplicationConfiguration_defaultLargeStagingDiskType,
+    updateReplicationConfiguration_ebsEncryption,
+    updateReplicationConfiguration_ebsEncryptionKeyArn,
+    updateReplicationConfiguration_name,
+    updateReplicationConfiguration_pitPolicy,
+    updateReplicationConfiguration_replicatedDisks,
+    updateReplicationConfiguration_replicationServerInstanceType,
+    updateReplicationConfiguration_replicationServersSecurityGroupsIDs,
+    updateReplicationConfiguration_stagingAreaSubnetId,
+    updateReplicationConfiguration_stagingAreaTags,
+    updateReplicationConfiguration_useDedicatedReplicationServer,
+    updateReplicationConfiguration_sourceServerID,
+
+    -- * Destructuring the Response
+    ReplicationConfiguration (..),
+    newReplicationConfiguration,
+
+    -- * Response Lenses
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_pitPolicy,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateReplicationConfiguration' smart constructor.
+data UpdateReplicationConfiguration = UpdateReplicationConfiguration'
+  { -- | Whether to associate the default Elastic Disaster Recovery Security
+    -- group with the Replication Configuration.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Source Server in Mbps.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to create a Public IP for the Recovery Instance by default.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | The data plane routing mechanism that will be used for replication.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | The Staging Disk EBS volume type to be used during replication.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | The type of EBS encryption to be used during replication.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | The ARN of the EBS encryption key to be used during replication.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Replication Configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Point in time (PIT) policy to manage snapshots taken during
+    -- replication.
+    pitPolicy :: Prelude.Maybe (Prelude.NonEmpty PITPolicyRule),
+    -- | The configuration of the disks of the Source Server to be replicated.
+    replicatedDisks :: Prelude.Maybe [ReplicationConfigurationReplicatedDisk],
+    -- | The instance type to be used for the replication server.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | The security group IDs that will be used by the replication server.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | The subnet to be used by the replication staging area.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | A set of tags to be associated with all resources created in the
+    -- replication staging area: EC2 replication server, EBS volumes, EBS
+    -- snapshots, etc.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Whether to use a dedicated Replication Server in the replication staging
+    -- area.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Source Server for this Replication Configuration.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associateDefaultSecurityGroup', 'updateReplicationConfiguration_associateDefaultSecurityGroup' - Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration.
+--
+-- 'bandwidthThrottling', 'updateReplicationConfiguration_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+--
+-- 'createPublicIP', 'updateReplicationConfiguration_createPublicIP' - Whether to create a Public IP for the Recovery Instance by default.
+--
+-- 'dataPlaneRouting', 'updateReplicationConfiguration_dataPlaneRouting' - The data plane routing mechanism that will be used for replication.
+--
+-- 'defaultLargeStagingDiskType', 'updateReplicationConfiguration_defaultLargeStagingDiskType' - The Staging Disk EBS volume type to be used during replication.
+--
+-- 'ebsEncryption', 'updateReplicationConfiguration_ebsEncryption' - The type of EBS encryption to be used during replication.
+--
+-- 'ebsEncryptionKeyArn', 'updateReplicationConfiguration_ebsEncryptionKeyArn' - The ARN of the EBS encryption key to be used during replication.
+--
+-- 'name', 'updateReplicationConfiguration_name' - The name of the Replication Configuration.
+--
+-- 'pitPolicy', 'updateReplicationConfiguration_pitPolicy' - The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+--
+-- 'replicatedDisks', 'updateReplicationConfiguration_replicatedDisks' - The configuration of the disks of the Source Server to be replicated.
+--
+-- 'replicationServerInstanceType', 'updateReplicationConfiguration_replicationServerInstanceType' - The instance type to be used for the replication server.
+--
+-- 'replicationServersSecurityGroupsIDs', 'updateReplicationConfiguration_replicationServersSecurityGroupsIDs' - The security group IDs that will be used by the replication server.
+--
+-- 'stagingAreaSubnetId', 'updateReplicationConfiguration_stagingAreaSubnetId' - The subnet to be used by the replication staging area.
+--
+-- 'stagingAreaTags', 'updateReplicationConfiguration_stagingAreaTags' - A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+--
+-- 'useDedicatedReplicationServer', 'updateReplicationConfiguration_useDedicatedReplicationServer' - Whether to use a dedicated Replication Server in the replication staging
+-- area.
+--
+-- 'sourceServerID', 'updateReplicationConfiguration_sourceServerID' - The ID of the Source Server for this Replication Configuration.
+newUpdateReplicationConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  UpdateReplicationConfiguration
+newUpdateReplicationConfiguration pSourceServerID_ =
+  UpdateReplicationConfiguration'
+    { associateDefaultSecurityGroup =
+        Prelude.Nothing,
+      bandwidthThrottling = Prelude.Nothing,
+      createPublicIP = Prelude.Nothing,
+      dataPlaneRouting = Prelude.Nothing,
+      defaultLargeStagingDiskType =
+        Prelude.Nothing,
+      ebsEncryption = Prelude.Nothing,
+      ebsEncryptionKeyArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      pitPolicy = Prelude.Nothing,
+      replicatedDisks = Prelude.Nothing,
+      replicationServerInstanceType =
+        Prelude.Nothing,
+      replicationServersSecurityGroupsIDs =
+        Prelude.Nothing,
+      stagingAreaSubnetId = Prelude.Nothing,
+      stagingAreaTags = Prelude.Nothing,
+      useDedicatedReplicationServer =
+        Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration.
+updateReplicationConfiguration_associateDefaultSecurityGroup :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateReplicationConfiguration_associateDefaultSecurityGroup = Lens.lens (\UpdateReplicationConfiguration' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@UpdateReplicationConfiguration' {} a -> s {associateDefaultSecurityGroup = a} :: UpdateReplicationConfiguration)
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+updateReplicationConfiguration_bandwidthThrottling :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Natural)
+updateReplicationConfiguration_bandwidthThrottling = Lens.lens (\UpdateReplicationConfiguration' {bandwidthThrottling} -> bandwidthThrottling) (\s@UpdateReplicationConfiguration' {} a -> s {bandwidthThrottling = a} :: UpdateReplicationConfiguration)
+
+-- | Whether to create a Public IP for the Recovery Instance by default.
+updateReplicationConfiguration_createPublicIP :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateReplicationConfiguration_createPublicIP = Lens.lens (\UpdateReplicationConfiguration' {createPublicIP} -> createPublicIP) (\s@UpdateReplicationConfiguration' {} a -> s {createPublicIP = a} :: UpdateReplicationConfiguration)
+
+-- | The data plane routing mechanism that will be used for replication.
+updateReplicationConfiguration_dataPlaneRouting :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+updateReplicationConfiguration_dataPlaneRouting = Lens.lens (\UpdateReplicationConfiguration' {dataPlaneRouting} -> dataPlaneRouting) (\s@UpdateReplicationConfiguration' {} a -> s {dataPlaneRouting = a} :: UpdateReplicationConfiguration)
+
+-- | The Staging Disk EBS volume type to be used during replication.
+updateReplicationConfiguration_defaultLargeStagingDiskType :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+updateReplicationConfiguration_defaultLargeStagingDiskType = Lens.lens (\UpdateReplicationConfiguration' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@UpdateReplicationConfiguration' {} a -> s {defaultLargeStagingDiskType = a} :: UpdateReplicationConfiguration)
+
+-- | The type of EBS encryption to be used during replication.
+updateReplicationConfiguration_ebsEncryption :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+updateReplicationConfiguration_ebsEncryption = Lens.lens (\UpdateReplicationConfiguration' {ebsEncryption} -> ebsEncryption) (\s@UpdateReplicationConfiguration' {} a -> s {ebsEncryption = a} :: UpdateReplicationConfiguration)
+
+-- | The ARN of the EBS encryption key to be used during replication.
+updateReplicationConfiguration_ebsEncryptionKeyArn :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_ebsEncryptionKeyArn = Lens.lens (\UpdateReplicationConfiguration' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@UpdateReplicationConfiguration' {} a -> s {ebsEncryptionKeyArn = a} :: UpdateReplicationConfiguration)
+
+-- | The name of the Replication Configuration.
+updateReplicationConfiguration_name :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_name = Lens.lens (\UpdateReplicationConfiguration' {name} -> name) (\s@UpdateReplicationConfiguration' {} a -> s {name = a} :: UpdateReplicationConfiguration)
+
+-- | The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+updateReplicationConfiguration_pitPolicy :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe (Prelude.NonEmpty PITPolicyRule))
+updateReplicationConfiguration_pitPolicy = Lens.lens (\UpdateReplicationConfiguration' {pitPolicy} -> pitPolicy) (\s@UpdateReplicationConfiguration' {} a -> s {pitPolicy = a} :: UpdateReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration of the disks of the Source Server to be replicated.
+updateReplicationConfiguration_replicatedDisks :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe [ReplicationConfigurationReplicatedDisk])
+updateReplicationConfiguration_replicatedDisks = Lens.lens (\UpdateReplicationConfiguration' {replicatedDisks} -> replicatedDisks) (\s@UpdateReplicationConfiguration' {} a -> s {replicatedDisks = a} :: UpdateReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type to be used for the replication server.
+updateReplicationConfiguration_replicationServerInstanceType :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_replicationServerInstanceType = Lens.lens (\UpdateReplicationConfiguration' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@UpdateReplicationConfiguration' {} a -> s {replicationServerInstanceType = a} :: UpdateReplicationConfiguration)
+
+-- | The security group IDs that will be used by the replication server.
+updateReplicationConfiguration_replicationServersSecurityGroupsIDs :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe [Prelude.Text])
+updateReplicationConfiguration_replicationServersSecurityGroupsIDs = Lens.lens (\UpdateReplicationConfiguration' {replicationServersSecurityGroupsIDs} -> replicationServersSecurityGroupsIDs) (\s@UpdateReplicationConfiguration' {} a -> s {replicationServersSecurityGroupsIDs = a} :: UpdateReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnet to be used by the replication staging area.
+updateReplicationConfiguration_stagingAreaSubnetId :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_stagingAreaSubnetId = Lens.lens (\UpdateReplicationConfiguration' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@UpdateReplicationConfiguration' {} a -> s {stagingAreaSubnetId = a} :: UpdateReplicationConfiguration)
+
+-- | A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+updateReplicationConfiguration_stagingAreaTags :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateReplicationConfiguration_stagingAreaTags = Lens.lens (\UpdateReplicationConfiguration' {stagingAreaTags} -> stagingAreaTags) (\s@UpdateReplicationConfiguration' {} a -> s {stagingAreaTags = a} :: UpdateReplicationConfiguration) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Whether to use a dedicated Replication Server in the replication staging
+-- area.
+updateReplicationConfiguration_useDedicatedReplicationServer :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateReplicationConfiguration_useDedicatedReplicationServer = Lens.lens (\UpdateReplicationConfiguration' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@UpdateReplicationConfiguration' {} a -> s {useDedicatedReplicationServer = a} :: UpdateReplicationConfiguration)
+
+-- | The ID of the Source Server for this Replication Configuration.
+updateReplicationConfiguration_sourceServerID :: Lens.Lens' UpdateReplicationConfiguration Prelude.Text
+updateReplicationConfiguration_sourceServerID = Lens.lens (\UpdateReplicationConfiguration' {sourceServerID} -> sourceServerID) (\s@UpdateReplicationConfiguration' {} a -> s {sourceServerID = a} :: UpdateReplicationConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateReplicationConfiguration
+  where
+  type
+    AWSResponse UpdateReplicationConfiguration =
+      ReplicationConfiguration
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance
+  Prelude.Hashable
+    UpdateReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateReplicationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` associateDefaultSecurityGroup
+        `Prelude.hashWithSalt` bandwidthThrottling
+        `Prelude.hashWithSalt` createPublicIP
+        `Prelude.hashWithSalt` dataPlaneRouting
+        `Prelude.hashWithSalt` defaultLargeStagingDiskType
+        `Prelude.hashWithSalt` ebsEncryption
+        `Prelude.hashWithSalt` ebsEncryptionKeyArn
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` pitPolicy
+        `Prelude.hashWithSalt` replicatedDisks
+        `Prelude.hashWithSalt` replicationServerInstanceType
+        `Prelude.hashWithSalt` replicationServersSecurityGroupsIDs
+        `Prelude.hashWithSalt` stagingAreaSubnetId
+        `Prelude.hashWithSalt` stagingAreaTags
+        `Prelude.hashWithSalt` useDedicatedReplicationServer
+        `Prelude.hashWithSalt` sourceServerID
+
+instance
+  Prelude.NFData
+    UpdateReplicationConfiguration
+  where
+  rnf UpdateReplicationConfiguration' {..} =
+    Prelude.rnf associateDefaultSecurityGroup
+      `Prelude.seq` Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf createPublicIP
+      `Prelude.seq` Prelude.rnf dataPlaneRouting
+      `Prelude.seq` Prelude.rnf defaultLargeStagingDiskType
+      `Prelude.seq` Prelude.rnf ebsEncryption
+      `Prelude.seq` Prelude.rnf ebsEncryptionKeyArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf pitPolicy
+      `Prelude.seq` Prelude.rnf replicatedDisks
+      `Prelude.seq` Prelude.rnf replicationServerInstanceType
+      `Prelude.seq` Prelude.rnf
+        replicationServersSecurityGroupsIDs
+      `Prelude.seq` Prelude.rnf stagingAreaSubnetId
+      `Prelude.seq` Prelude.rnf stagingAreaTags
+      `Prelude.seq` Prelude.rnf
+        useDedicatedReplicationServer
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance
+  Data.ToHeaders
+    UpdateReplicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateReplicationConfiguration where
+  toJSON UpdateReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associateDefaultSecurityGroup" Data..=)
+              Prelude.<$> associateDefaultSecurityGroup,
+            ("bandwidthThrottling" Data..=)
+              Prelude.<$> bandwidthThrottling,
+            ("createPublicIP" Data..=)
+              Prelude.<$> createPublicIP,
+            ("dataPlaneRouting" Data..=)
+              Prelude.<$> dataPlaneRouting,
+            ("defaultLargeStagingDiskType" Data..=)
+              Prelude.<$> defaultLargeStagingDiskType,
+            ("ebsEncryption" Data..=) Prelude.<$> ebsEncryption,
+            ("ebsEncryptionKeyArn" Data..=)
+              Prelude.<$> ebsEncryptionKeyArn,
+            ("name" Data..=) Prelude.<$> name,
+            ("pitPolicy" Data..=) Prelude.<$> pitPolicy,
+            ("replicatedDisks" Data..=)
+              Prelude.<$> replicatedDisks,
+            ("replicationServerInstanceType" Data..=)
+              Prelude.<$> replicationServerInstanceType,
+            ("replicationServersSecurityGroupsIDs" Data..=)
+              Prelude.<$> replicationServersSecurityGroupsIDs,
+            ("stagingAreaSubnetId" Data..=)
+              Prelude.<$> stagingAreaSubnetId,
+            ("stagingAreaTags" Data..=)
+              Prelude.<$> stagingAreaTags,
+            ("useDedicatedReplicationServer" Data..=)
+              Prelude.<$> useDedicatedReplicationServer,
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath UpdateReplicationConfiguration where
+  toPath =
+    Prelude.const "/UpdateReplicationConfiguration"
+
+instance Data.ToQuery UpdateReplicationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/UpdateReplicationConfigurationTemplate.hs b/gen/Amazonka/DrS/UpdateReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/UpdateReplicationConfigurationTemplate.hs
@@ -0,0 +1,387 @@
+{-# 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.DrS.UpdateReplicationConfigurationTemplate
+-- 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 ReplicationConfigurationTemplate by ID.
+module Amazonka.DrS.UpdateReplicationConfigurationTemplate
+  ( -- * Creating a Request
+    UpdateReplicationConfigurationTemplate (..),
+    newUpdateReplicationConfigurationTemplate,
+
+    -- * Request Lenses
+    updateReplicationConfigurationTemplate_arn,
+    updateReplicationConfigurationTemplate_associateDefaultSecurityGroup,
+    updateReplicationConfigurationTemplate_bandwidthThrottling,
+    updateReplicationConfigurationTemplate_createPublicIP,
+    updateReplicationConfigurationTemplate_dataPlaneRouting,
+    updateReplicationConfigurationTemplate_defaultLargeStagingDiskType,
+    updateReplicationConfigurationTemplate_ebsEncryption,
+    updateReplicationConfigurationTemplate_ebsEncryptionKeyArn,
+    updateReplicationConfigurationTemplate_pitPolicy,
+    updateReplicationConfigurationTemplate_replicationServerInstanceType,
+    updateReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    updateReplicationConfigurationTemplate_stagingAreaSubnetId,
+    updateReplicationConfigurationTemplate_stagingAreaTags,
+    updateReplicationConfigurationTemplate_useDedicatedReplicationServer,
+    updateReplicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- * Destructuring the Response
+    ReplicationConfigurationTemplate (..),
+    newReplicationConfigurationTemplate,
+
+    -- * Response Lenses
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_pitPolicy,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateReplicationConfigurationTemplate' smart constructor.
+data UpdateReplicationConfigurationTemplate = UpdateReplicationConfigurationTemplate'
+  { -- | The Replication Configuration Template ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Whether to associate the default Elastic Disaster Recovery Security
+    -- group with the Replication Configuration Template.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Configure bandwidth throttling for the outbound data transfer rate of
+    -- the Source Server in Mbps.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to create a Public IP for the Recovery Instance by default.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | The data plane routing mechanism that will be used for replication.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | The Staging Disk EBS volume type to be used during replication.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | The type of EBS encryption to be used during replication.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | The ARN of the EBS encryption key to be used during replication.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The Point in time (PIT) policy to manage snapshots taken during
+    -- replication.
+    pitPolicy :: Prelude.Maybe (Prelude.NonEmpty PITPolicyRule),
+    -- | The instance type to be used for the replication server.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | The security group IDs that will be used by the replication server.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | The subnet to be used by the replication staging area.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | A set of tags to be associated with all resources created in the
+    -- replication staging area: EC2 replication server, EBS volumes, EBS
+    -- snapshots, etc.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Whether to use a dedicated Replication Server in the replication staging
+    -- area.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool,
+    -- | The Replication Configuration Template ID.
+    replicationConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateReplicationConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateReplicationConfigurationTemplate_arn' - The Replication Configuration Template ARN.
+--
+-- 'associateDefaultSecurityGroup', 'updateReplicationConfigurationTemplate_associateDefaultSecurityGroup' - Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration Template.
+--
+-- 'bandwidthThrottling', 'updateReplicationConfigurationTemplate_bandwidthThrottling' - Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+--
+-- 'createPublicIP', 'updateReplicationConfigurationTemplate_createPublicIP' - Whether to create a Public IP for the Recovery Instance by default.
+--
+-- 'dataPlaneRouting', 'updateReplicationConfigurationTemplate_dataPlaneRouting' - The data plane routing mechanism that will be used for replication.
+--
+-- 'defaultLargeStagingDiskType', 'updateReplicationConfigurationTemplate_defaultLargeStagingDiskType' - The Staging Disk EBS volume type to be used during replication.
+--
+-- 'ebsEncryption', 'updateReplicationConfigurationTemplate_ebsEncryption' - The type of EBS encryption to be used during replication.
+--
+-- 'ebsEncryptionKeyArn', 'updateReplicationConfigurationTemplate_ebsEncryptionKeyArn' - The ARN of the EBS encryption key to be used during replication.
+--
+-- 'pitPolicy', 'updateReplicationConfigurationTemplate_pitPolicy' - The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+--
+-- 'replicationServerInstanceType', 'updateReplicationConfigurationTemplate_replicationServerInstanceType' - The instance type to be used for the replication server.
+--
+-- 'replicationServersSecurityGroupsIDs', 'updateReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - The security group IDs that will be used by the replication server.
+--
+-- 'stagingAreaSubnetId', 'updateReplicationConfigurationTemplate_stagingAreaSubnetId' - The subnet to be used by the replication staging area.
+--
+-- 'stagingAreaTags', 'updateReplicationConfigurationTemplate_stagingAreaTags' - A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+--
+-- 'useDedicatedReplicationServer', 'updateReplicationConfigurationTemplate_useDedicatedReplicationServer' - Whether to use a dedicated Replication Server in the replication staging
+-- area.
+--
+-- 'replicationConfigurationTemplateID', 'updateReplicationConfigurationTemplate_replicationConfigurationTemplateID' - The Replication Configuration Template ID.
+newUpdateReplicationConfigurationTemplate ::
+  -- | 'replicationConfigurationTemplateID'
+  Prelude.Text ->
+  UpdateReplicationConfigurationTemplate
+newUpdateReplicationConfigurationTemplate
+  pReplicationConfigurationTemplateID_ =
+    UpdateReplicationConfigurationTemplate'
+      { arn =
+          Prelude.Nothing,
+        associateDefaultSecurityGroup =
+          Prelude.Nothing,
+        bandwidthThrottling =
+          Prelude.Nothing,
+        createPublicIP = Prelude.Nothing,
+        dataPlaneRouting = Prelude.Nothing,
+        defaultLargeStagingDiskType =
+          Prelude.Nothing,
+        ebsEncryption = Prelude.Nothing,
+        ebsEncryptionKeyArn =
+          Prelude.Nothing,
+        pitPolicy = Prelude.Nothing,
+        replicationServerInstanceType =
+          Prelude.Nothing,
+        replicationServersSecurityGroupsIDs =
+          Prelude.Nothing,
+        stagingAreaSubnetId =
+          Prelude.Nothing,
+        stagingAreaTags = Prelude.Nothing,
+        useDedicatedReplicationServer =
+          Prelude.Nothing,
+        replicationConfigurationTemplateID =
+          pReplicationConfigurationTemplateID_
+      }
+
+-- | The Replication Configuration Template ARN.
+updateReplicationConfigurationTemplate_arn :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_arn = Lens.lens (\UpdateReplicationConfigurationTemplate' {arn} -> arn) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {arn = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Whether to associate the default Elastic Disaster Recovery Security
+-- group with the Replication Configuration Template.
+updateReplicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateReplicationConfigurationTemplate_associateDefaultSecurityGroup = Lens.lens (\UpdateReplicationConfigurationTemplate' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {associateDefaultSecurityGroup = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Configure bandwidth throttling for the outbound data transfer rate of
+-- the Source Server in Mbps.
+updateReplicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+updateReplicationConfigurationTemplate_bandwidthThrottling = Lens.lens (\UpdateReplicationConfigurationTemplate' {bandwidthThrottling} -> bandwidthThrottling) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {bandwidthThrottling = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Whether to create a Public IP for the Recovery Instance by default.
+updateReplicationConfigurationTemplate_createPublicIP :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateReplicationConfigurationTemplate_createPublicIP = Lens.lens (\UpdateReplicationConfigurationTemplate' {createPublicIP} -> createPublicIP) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {createPublicIP = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The data plane routing mechanism that will be used for replication.
+updateReplicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+updateReplicationConfigurationTemplate_dataPlaneRouting = Lens.lens (\UpdateReplicationConfigurationTemplate' {dataPlaneRouting} -> dataPlaneRouting) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {dataPlaneRouting = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The Staging Disk EBS volume type to be used during replication.
+updateReplicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+updateReplicationConfigurationTemplate_defaultLargeStagingDiskType = Lens.lens (\UpdateReplicationConfigurationTemplate' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {defaultLargeStagingDiskType = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The type of EBS encryption to be used during replication.
+updateReplicationConfigurationTemplate_ebsEncryption :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+updateReplicationConfigurationTemplate_ebsEncryption = Lens.lens (\UpdateReplicationConfigurationTemplate' {ebsEncryption} -> ebsEncryption) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {ebsEncryption = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The ARN of the EBS encryption key to be used during replication.
+updateReplicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_ebsEncryptionKeyArn = Lens.lens (\UpdateReplicationConfigurationTemplate' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {ebsEncryptionKeyArn = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The Point in time (PIT) policy to manage snapshots taken during
+-- replication.
+updateReplicationConfigurationTemplate_pitPolicy :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe (Prelude.NonEmpty PITPolicyRule))
+updateReplicationConfigurationTemplate_pitPolicy = Lens.lens (\UpdateReplicationConfigurationTemplate' {pitPolicy} -> pitPolicy) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {pitPolicy = a} :: UpdateReplicationConfigurationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type to be used for the replication server.
+updateReplicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_replicationServerInstanceType = Lens.lens (\UpdateReplicationConfigurationTemplate' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {replicationServerInstanceType = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The security group IDs that will be used by the replication server.
+updateReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe [Prelude.Text])
+updateReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs = Lens.lens (\UpdateReplicationConfigurationTemplate' {replicationServersSecurityGroupsIDs} -> replicationServersSecurityGroupsIDs) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {replicationServersSecurityGroupsIDs = a} :: UpdateReplicationConfigurationTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnet to be used by the replication staging area.
+updateReplicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_stagingAreaSubnetId = Lens.lens (\UpdateReplicationConfigurationTemplate' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {stagingAreaSubnetId = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | A set of tags to be associated with all resources created in the
+-- replication staging area: EC2 replication server, EBS volumes, EBS
+-- snapshots, etc.
+updateReplicationConfigurationTemplate_stagingAreaTags :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateReplicationConfigurationTemplate_stagingAreaTags = Lens.lens (\UpdateReplicationConfigurationTemplate' {stagingAreaTags} -> stagingAreaTags) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {stagingAreaTags = a} :: UpdateReplicationConfigurationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Whether to use a dedicated Replication Server in the replication staging
+-- area.
+updateReplicationConfigurationTemplate_useDedicatedReplicationServer :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateReplicationConfigurationTemplate_useDedicatedReplicationServer = Lens.lens (\UpdateReplicationConfigurationTemplate' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {useDedicatedReplicationServer = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | The Replication Configuration Template ID.
+updateReplicationConfigurationTemplate_replicationConfigurationTemplateID :: Lens.Lens' UpdateReplicationConfigurationTemplate Prelude.Text
+updateReplicationConfigurationTemplate_replicationConfigurationTemplateID = Lens.lens (\UpdateReplicationConfigurationTemplate' {replicationConfigurationTemplateID} -> replicationConfigurationTemplateID) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {replicationConfigurationTemplateID = a} :: UpdateReplicationConfigurationTemplate)
+
+instance
+  Core.AWSRequest
+    UpdateReplicationConfigurationTemplate
+  where
+  type
+    AWSResponse
+      UpdateReplicationConfigurationTemplate =
+      ReplicationConfigurationTemplate
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance
+  Prelude.Hashable
+    UpdateReplicationConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    UpdateReplicationConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` associateDefaultSecurityGroup
+        `Prelude.hashWithSalt` bandwidthThrottling
+        `Prelude.hashWithSalt` createPublicIP
+        `Prelude.hashWithSalt` dataPlaneRouting
+        `Prelude.hashWithSalt` defaultLargeStagingDiskType
+        `Prelude.hashWithSalt` ebsEncryption
+        `Prelude.hashWithSalt` ebsEncryptionKeyArn
+        `Prelude.hashWithSalt` pitPolicy
+        `Prelude.hashWithSalt` replicationServerInstanceType
+        `Prelude.hashWithSalt` replicationServersSecurityGroupsIDs
+        `Prelude.hashWithSalt` stagingAreaSubnetId
+        `Prelude.hashWithSalt` stagingAreaTags
+        `Prelude.hashWithSalt` useDedicatedReplicationServer
+        `Prelude.hashWithSalt` replicationConfigurationTemplateID
+
+instance
+  Prelude.NFData
+    UpdateReplicationConfigurationTemplate
+  where
+  rnf UpdateReplicationConfigurationTemplate' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf associateDefaultSecurityGroup
+      `Prelude.seq` Prelude.rnf bandwidthThrottling
+      `Prelude.seq` Prelude.rnf createPublicIP
+      `Prelude.seq` Prelude.rnf dataPlaneRouting
+      `Prelude.seq` Prelude.rnf defaultLargeStagingDiskType
+      `Prelude.seq` Prelude.rnf ebsEncryption
+      `Prelude.seq` Prelude.rnf ebsEncryptionKeyArn
+      `Prelude.seq` Prelude.rnf pitPolicy
+      `Prelude.seq` Prelude.rnf replicationServerInstanceType
+      `Prelude.seq` Prelude.rnf replicationServersSecurityGroupsIDs
+      `Prelude.seq` Prelude.rnf stagingAreaSubnetId
+      `Prelude.seq` Prelude.rnf stagingAreaTags
+      `Prelude.seq` Prelude.rnf useDedicatedReplicationServer
+      `Prelude.seq` Prelude.rnf
+        replicationConfigurationTemplateID
+
+instance
+  Data.ToHeaders
+    UpdateReplicationConfigurationTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateReplicationConfigurationTemplate
+  where
+  toJSON UpdateReplicationConfigurationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("arn" Data..=) Prelude.<$> arn,
+            ("associateDefaultSecurityGroup" Data..=)
+              Prelude.<$> associateDefaultSecurityGroup,
+            ("bandwidthThrottling" Data..=)
+              Prelude.<$> bandwidthThrottling,
+            ("createPublicIP" Data..=)
+              Prelude.<$> createPublicIP,
+            ("dataPlaneRouting" Data..=)
+              Prelude.<$> dataPlaneRouting,
+            ("defaultLargeStagingDiskType" Data..=)
+              Prelude.<$> defaultLargeStagingDiskType,
+            ("ebsEncryption" Data..=) Prelude.<$> ebsEncryption,
+            ("ebsEncryptionKeyArn" Data..=)
+              Prelude.<$> ebsEncryptionKeyArn,
+            ("pitPolicy" Data..=) Prelude.<$> pitPolicy,
+            ("replicationServerInstanceType" Data..=)
+              Prelude.<$> replicationServerInstanceType,
+            ("replicationServersSecurityGroupsIDs" Data..=)
+              Prelude.<$> replicationServersSecurityGroupsIDs,
+            ("stagingAreaSubnetId" Data..=)
+              Prelude.<$> stagingAreaSubnetId,
+            ("stagingAreaTags" Data..=)
+              Prelude.<$> stagingAreaTags,
+            ("useDedicatedReplicationServer" Data..=)
+              Prelude.<$> useDedicatedReplicationServer,
+            Prelude.Just
+              ( "replicationConfigurationTemplateID"
+                  Data..= replicationConfigurationTemplateID
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateReplicationConfigurationTemplate
+  where
+  toPath =
+    Prelude.const
+      "/UpdateReplicationConfigurationTemplate"
+
+instance
+  Data.ToQuery
+    UpdateReplicationConfigurationTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/DrS/Waiters.hs b/gen/Amazonka/DrS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DrS/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.DrS.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.DrS.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DrS.Lens
+import Amazonka.DrS.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.DrS
+import Test.Amazonka.DrS.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "DrS"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/DrS.hs b/test/Test/Amazonka/DrS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DrS.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.DrS
+-- 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.DrS
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/DrS/Internal.hs b/test/Test/Amazonka/DrS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DrS/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.DrS.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.DrS.Internal where
diff --git a/test/Test/Amazonka/Gen/DrS.hs b/test/Test/Amazonka/Gen/DrS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/DrS.hs
@@ -0,0 +1,738 @@
+{-# 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.DrS
+-- 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.DrS where
+
+import Amazonka.DrS
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.DrS.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateExtendedSourceServer $
+--             newCreateExtendedSourceServer
+--
+--         , requestCreateReplicationConfigurationTemplate $
+--             newCreateReplicationConfigurationTemplate
+--
+--         , requestDeleteJob $
+--             newDeleteJob
+--
+--         , requestDeleteRecoveryInstance $
+--             newDeleteRecoveryInstance
+--
+--         , requestDeleteReplicationConfigurationTemplate $
+--             newDeleteReplicationConfigurationTemplate
+--
+--         , requestDeleteSourceServer $
+--             newDeleteSourceServer
+--
+--         , requestDescribeJobLogItems $
+--             newDescribeJobLogItems
+--
+--         , requestDescribeJobs $
+--             newDescribeJobs
+--
+--         , requestDescribeRecoveryInstances $
+--             newDescribeRecoveryInstances
+--
+--         , requestDescribeRecoverySnapshots $
+--             newDescribeRecoverySnapshots
+--
+--         , requestDescribeReplicationConfigurationTemplates $
+--             newDescribeReplicationConfigurationTemplates
+--
+--         , requestDescribeSourceServers $
+--             newDescribeSourceServers
+--
+--         , requestDisconnectRecoveryInstance $
+--             newDisconnectRecoveryInstance
+--
+--         , requestDisconnectSourceServer $
+--             newDisconnectSourceServer
+--
+--         , requestGetFailbackReplicationConfiguration $
+--             newGetFailbackReplicationConfiguration
+--
+--         , requestGetLaunchConfiguration $
+--             newGetLaunchConfiguration
+--
+--         , requestGetReplicationConfiguration $
+--             newGetReplicationConfiguration
+--
+--         , requestInitializeService $
+--             newInitializeService
+--
+--         , requestListExtensibleSourceServers $
+--             newListExtensibleSourceServers
+--
+--         , requestListStagingAccounts $
+--             newListStagingAccounts
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestRetryDataReplication $
+--             newRetryDataReplication
+--
+--         , requestReverseReplication $
+--             newReverseReplication
+--
+--         , requestStartFailbackLaunch $
+--             newStartFailbackLaunch
+--
+--         , requestStartRecovery $
+--             newStartRecovery
+--
+--         , requestStartReplication $
+--             newStartReplication
+--
+--         , requestStopFailback $
+--             newStopFailback
+--
+--         , requestStopReplication $
+--             newStopReplication
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestTerminateRecoveryInstances $
+--             newTerminateRecoveryInstances
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateFailbackReplicationConfiguration $
+--             newUpdateFailbackReplicationConfiguration
+--
+--         , requestUpdateLaunchConfiguration $
+--             newUpdateLaunchConfiguration
+--
+--         , requestUpdateReplicationConfiguration $
+--             newUpdateReplicationConfiguration
+--
+--         , requestUpdateReplicationConfigurationTemplate $
+--             newUpdateReplicationConfigurationTemplate
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateExtendedSourceServer $
+--             newCreateExtendedSourceServerResponse
+--
+--         , responseCreateReplicationConfigurationTemplate $
+--             newReplicationConfigurationTemplate
+--
+--         , responseDeleteJob $
+--             newDeleteJobResponse
+--
+--         , responseDeleteRecoveryInstance $
+--             newDeleteRecoveryInstanceResponse
+--
+--         , responseDeleteReplicationConfigurationTemplate $
+--             newDeleteReplicationConfigurationTemplateResponse
+--
+--         , responseDeleteSourceServer $
+--             newDeleteSourceServerResponse
+--
+--         , responseDescribeJobLogItems $
+--             newDescribeJobLogItemsResponse
+--
+--         , responseDescribeJobs $
+--             newDescribeJobsResponse
+--
+--         , responseDescribeRecoveryInstances $
+--             newDescribeRecoveryInstancesResponse
+--
+--         , responseDescribeRecoverySnapshots $
+--             newDescribeRecoverySnapshotsResponse
+--
+--         , responseDescribeReplicationConfigurationTemplates $
+--             newDescribeReplicationConfigurationTemplatesResponse
+--
+--         , responseDescribeSourceServers $
+--             newDescribeSourceServersResponse
+--
+--         , responseDisconnectRecoveryInstance $
+--             newDisconnectRecoveryInstanceResponse
+--
+--         , responseDisconnectSourceServer $
+--             newSourceServer
+--
+--         , responseGetFailbackReplicationConfiguration $
+--             newGetFailbackReplicationConfigurationResponse
+--
+--         , responseGetLaunchConfiguration $
+--             newLaunchConfiguration
+--
+--         , responseGetReplicationConfiguration $
+--             newReplicationConfiguration
+--
+--         , responseInitializeService $
+--             newInitializeServiceResponse
+--
+--         , responseListExtensibleSourceServers $
+--             newListExtensibleSourceServersResponse
+--
+--         , responseListStagingAccounts $
+--             newListStagingAccountsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseRetryDataReplication $
+--             newSourceServer
+--
+--         , responseReverseReplication $
+--             newReverseReplicationResponse
+--
+--         , responseStartFailbackLaunch $
+--             newStartFailbackLaunchResponse
+--
+--         , responseStartRecovery $
+--             newStartRecoveryResponse
+--
+--         , responseStartReplication $
+--             newStartReplicationResponse
+--
+--         , responseStopFailback $
+--             newStopFailbackResponse
+--
+--         , responseStopReplication $
+--             newStopReplicationResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseTerminateRecoveryInstances $
+--             newTerminateRecoveryInstancesResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateFailbackReplicationConfiguration $
+--             newUpdateFailbackReplicationConfigurationResponse
+--
+--         , responseUpdateLaunchConfiguration $
+--             newLaunchConfiguration
+--
+--         , responseUpdateReplicationConfiguration $
+--             newReplicationConfiguration
+--
+--         , responseUpdateReplicationConfigurationTemplate $
+--             newReplicationConfigurationTemplate
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateExtendedSourceServer :: CreateExtendedSourceServer -> TestTree
+requestCreateExtendedSourceServer =
+  req
+    "CreateExtendedSourceServer"
+    "fixture/CreateExtendedSourceServer.yaml"
+
+requestCreateReplicationConfigurationTemplate :: CreateReplicationConfigurationTemplate -> TestTree
+requestCreateReplicationConfigurationTemplate =
+  req
+    "CreateReplicationConfigurationTemplate"
+    "fixture/CreateReplicationConfigurationTemplate.yaml"
+
+requestDeleteJob :: DeleteJob -> TestTree
+requestDeleteJob =
+  req
+    "DeleteJob"
+    "fixture/DeleteJob.yaml"
+
+requestDeleteRecoveryInstance :: DeleteRecoveryInstance -> TestTree
+requestDeleteRecoveryInstance =
+  req
+    "DeleteRecoveryInstance"
+    "fixture/DeleteRecoveryInstance.yaml"
+
+requestDeleteReplicationConfigurationTemplate :: DeleteReplicationConfigurationTemplate -> TestTree
+requestDeleteReplicationConfigurationTemplate =
+  req
+    "DeleteReplicationConfigurationTemplate"
+    "fixture/DeleteReplicationConfigurationTemplate.yaml"
+
+requestDeleteSourceServer :: DeleteSourceServer -> TestTree
+requestDeleteSourceServer =
+  req
+    "DeleteSourceServer"
+    "fixture/DeleteSourceServer.yaml"
+
+requestDescribeJobLogItems :: DescribeJobLogItems -> TestTree
+requestDescribeJobLogItems =
+  req
+    "DescribeJobLogItems"
+    "fixture/DescribeJobLogItems.yaml"
+
+requestDescribeJobs :: DescribeJobs -> TestTree
+requestDescribeJobs =
+  req
+    "DescribeJobs"
+    "fixture/DescribeJobs.yaml"
+
+requestDescribeRecoveryInstances :: DescribeRecoveryInstances -> TestTree
+requestDescribeRecoveryInstances =
+  req
+    "DescribeRecoveryInstances"
+    "fixture/DescribeRecoveryInstances.yaml"
+
+requestDescribeRecoverySnapshots :: DescribeRecoverySnapshots -> TestTree
+requestDescribeRecoverySnapshots =
+  req
+    "DescribeRecoverySnapshots"
+    "fixture/DescribeRecoverySnapshots.yaml"
+
+requestDescribeReplicationConfigurationTemplates :: DescribeReplicationConfigurationTemplates -> TestTree
+requestDescribeReplicationConfigurationTemplates =
+  req
+    "DescribeReplicationConfigurationTemplates"
+    "fixture/DescribeReplicationConfigurationTemplates.yaml"
+
+requestDescribeSourceServers :: DescribeSourceServers -> TestTree
+requestDescribeSourceServers =
+  req
+    "DescribeSourceServers"
+    "fixture/DescribeSourceServers.yaml"
+
+requestDisconnectRecoveryInstance :: DisconnectRecoveryInstance -> TestTree
+requestDisconnectRecoveryInstance =
+  req
+    "DisconnectRecoveryInstance"
+    "fixture/DisconnectRecoveryInstance.yaml"
+
+requestDisconnectSourceServer :: DisconnectSourceServer -> TestTree
+requestDisconnectSourceServer =
+  req
+    "DisconnectSourceServer"
+    "fixture/DisconnectSourceServer.yaml"
+
+requestGetFailbackReplicationConfiguration :: GetFailbackReplicationConfiguration -> TestTree
+requestGetFailbackReplicationConfiguration =
+  req
+    "GetFailbackReplicationConfiguration"
+    "fixture/GetFailbackReplicationConfiguration.yaml"
+
+requestGetLaunchConfiguration :: GetLaunchConfiguration -> TestTree
+requestGetLaunchConfiguration =
+  req
+    "GetLaunchConfiguration"
+    "fixture/GetLaunchConfiguration.yaml"
+
+requestGetReplicationConfiguration :: GetReplicationConfiguration -> TestTree
+requestGetReplicationConfiguration =
+  req
+    "GetReplicationConfiguration"
+    "fixture/GetReplicationConfiguration.yaml"
+
+requestInitializeService :: InitializeService -> TestTree
+requestInitializeService =
+  req
+    "InitializeService"
+    "fixture/InitializeService.yaml"
+
+requestListExtensibleSourceServers :: ListExtensibleSourceServers -> TestTree
+requestListExtensibleSourceServers =
+  req
+    "ListExtensibleSourceServers"
+    "fixture/ListExtensibleSourceServers.yaml"
+
+requestListStagingAccounts :: ListStagingAccounts -> TestTree
+requestListStagingAccounts =
+  req
+    "ListStagingAccounts"
+    "fixture/ListStagingAccounts.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestRetryDataReplication :: RetryDataReplication -> TestTree
+requestRetryDataReplication =
+  req
+    "RetryDataReplication"
+    "fixture/RetryDataReplication.yaml"
+
+requestReverseReplication :: ReverseReplication -> TestTree
+requestReverseReplication =
+  req
+    "ReverseReplication"
+    "fixture/ReverseReplication.yaml"
+
+requestStartFailbackLaunch :: StartFailbackLaunch -> TestTree
+requestStartFailbackLaunch =
+  req
+    "StartFailbackLaunch"
+    "fixture/StartFailbackLaunch.yaml"
+
+requestStartRecovery :: StartRecovery -> TestTree
+requestStartRecovery =
+  req
+    "StartRecovery"
+    "fixture/StartRecovery.yaml"
+
+requestStartReplication :: StartReplication -> TestTree
+requestStartReplication =
+  req
+    "StartReplication"
+    "fixture/StartReplication.yaml"
+
+requestStopFailback :: StopFailback -> TestTree
+requestStopFailback =
+  req
+    "StopFailback"
+    "fixture/StopFailback.yaml"
+
+requestStopReplication :: StopReplication -> TestTree
+requestStopReplication =
+  req
+    "StopReplication"
+    "fixture/StopReplication.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestTerminateRecoveryInstances :: TerminateRecoveryInstances -> TestTree
+requestTerminateRecoveryInstances =
+  req
+    "TerminateRecoveryInstances"
+    "fixture/TerminateRecoveryInstances.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateFailbackReplicationConfiguration :: UpdateFailbackReplicationConfiguration -> TestTree
+requestUpdateFailbackReplicationConfiguration =
+  req
+    "UpdateFailbackReplicationConfiguration"
+    "fixture/UpdateFailbackReplicationConfiguration.yaml"
+
+requestUpdateLaunchConfiguration :: UpdateLaunchConfiguration -> TestTree
+requestUpdateLaunchConfiguration =
+  req
+    "UpdateLaunchConfiguration"
+    "fixture/UpdateLaunchConfiguration.yaml"
+
+requestUpdateReplicationConfiguration :: UpdateReplicationConfiguration -> TestTree
+requestUpdateReplicationConfiguration =
+  req
+    "UpdateReplicationConfiguration"
+    "fixture/UpdateReplicationConfiguration.yaml"
+
+requestUpdateReplicationConfigurationTemplate :: UpdateReplicationConfigurationTemplate -> TestTree
+requestUpdateReplicationConfigurationTemplate =
+  req
+    "UpdateReplicationConfigurationTemplate"
+    "fixture/UpdateReplicationConfigurationTemplate.yaml"
+
+-- Responses
+
+responseCreateExtendedSourceServer :: CreateExtendedSourceServerResponse -> TestTree
+responseCreateExtendedSourceServer =
+  res
+    "CreateExtendedSourceServerResponse"
+    "fixture/CreateExtendedSourceServerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExtendedSourceServer)
+
+responseCreateReplicationConfigurationTemplate :: ReplicationConfigurationTemplate -> TestTree
+responseCreateReplicationConfigurationTemplate =
+  res
+    "CreateReplicationConfigurationTemplateResponse"
+    "fixture/CreateReplicationConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReplicationConfigurationTemplate)
+
+responseDeleteJob :: DeleteJobResponse -> TestTree
+responseDeleteJob =
+  res
+    "DeleteJobResponse"
+    "fixture/DeleteJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteJob)
+
+responseDeleteRecoveryInstance :: DeleteRecoveryInstanceResponse -> TestTree
+responseDeleteRecoveryInstance =
+  res
+    "DeleteRecoveryInstanceResponse"
+    "fixture/DeleteRecoveryInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRecoveryInstance)
+
+responseDeleteReplicationConfigurationTemplate :: DeleteReplicationConfigurationTemplateResponse -> TestTree
+responseDeleteReplicationConfigurationTemplate =
+  res
+    "DeleteReplicationConfigurationTemplateResponse"
+    "fixture/DeleteReplicationConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteReplicationConfigurationTemplate)
+
+responseDeleteSourceServer :: DeleteSourceServerResponse -> TestTree
+responseDeleteSourceServer =
+  res
+    "DeleteSourceServerResponse"
+    "fixture/DeleteSourceServerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSourceServer)
+
+responseDescribeJobLogItems :: DescribeJobLogItemsResponse -> TestTree
+responseDescribeJobLogItems =
+  res
+    "DescribeJobLogItemsResponse"
+    "fixture/DescribeJobLogItemsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeJobLogItems)
+
+responseDescribeJobs :: DescribeJobsResponse -> TestTree
+responseDescribeJobs =
+  res
+    "DescribeJobsResponse"
+    "fixture/DescribeJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeJobs)
+
+responseDescribeRecoveryInstances :: DescribeRecoveryInstancesResponse -> TestTree
+responseDescribeRecoveryInstances =
+  res
+    "DescribeRecoveryInstancesResponse"
+    "fixture/DescribeRecoveryInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRecoveryInstances)
+
+responseDescribeRecoverySnapshots :: DescribeRecoverySnapshotsResponse -> TestTree
+responseDescribeRecoverySnapshots =
+  res
+    "DescribeRecoverySnapshotsResponse"
+    "fixture/DescribeRecoverySnapshotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRecoverySnapshots)
+
+responseDescribeReplicationConfigurationTemplates :: DescribeReplicationConfigurationTemplatesResponse -> TestTree
+responseDescribeReplicationConfigurationTemplates =
+  res
+    "DescribeReplicationConfigurationTemplatesResponse"
+    "fixture/DescribeReplicationConfigurationTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReplicationConfigurationTemplates)
+
+responseDescribeSourceServers :: DescribeSourceServersResponse -> TestTree
+responseDescribeSourceServers =
+  res
+    "DescribeSourceServersResponse"
+    "fixture/DescribeSourceServersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSourceServers)
+
+responseDisconnectRecoveryInstance :: DisconnectRecoveryInstanceResponse -> TestTree
+responseDisconnectRecoveryInstance =
+  res
+    "DisconnectRecoveryInstanceResponse"
+    "fixture/DisconnectRecoveryInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisconnectRecoveryInstance)
+
+responseDisconnectSourceServer :: SourceServer -> TestTree
+responseDisconnectSourceServer =
+  res
+    "DisconnectSourceServerResponse"
+    "fixture/DisconnectSourceServerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisconnectSourceServer)
+
+responseGetFailbackReplicationConfiguration :: GetFailbackReplicationConfigurationResponse -> TestTree
+responseGetFailbackReplicationConfiguration =
+  res
+    "GetFailbackReplicationConfigurationResponse"
+    "fixture/GetFailbackReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFailbackReplicationConfiguration)
+
+responseGetLaunchConfiguration :: LaunchConfiguration -> TestTree
+responseGetLaunchConfiguration =
+  res
+    "GetLaunchConfigurationResponse"
+    "fixture/GetLaunchConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLaunchConfiguration)
+
+responseGetReplicationConfiguration :: ReplicationConfiguration -> TestTree
+responseGetReplicationConfiguration =
+  res
+    "GetReplicationConfigurationResponse"
+    "fixture/GetReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReplicationConfiguration)
+
+responseInitializeService :: InitializeServiceResponse -> TestTree
+responseInitializeService =
+  res
+    "InitializeServiceResponse"
+    "fixture/InitializeServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy InitializeService)
+
+responseListExtensibleSourceServers :: ListExtensibleSourceServersResponse -> TestTree
+responseListExtensibleSourceServers =
+  res
+    "ListExtensibleSourceServersResponse"
+    "fixture/ListExtensibleSourceServersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExtensibleSourceServers)
+
+responseListStagingAccounts :: ListStagingAccountsResponse -> TestTree
+responseListStagingAccounts =
+  res
+    "ListStagingAccountsResponse"
+    "fixture/ListStagingAccountsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStagingAccounts)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseRetryDataReplication :: SourceServer -> TestTree
+responseRetryDataReplication =
+  res
+    "RetryDataReplicationResponse"
+    "fixture/RetryDataReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RetryDataReplication)
+
+responseReverseReplication :: ReverseReplicationResponse -> TestTree
+responseReverseReplication =
+  res
+    "ReverseReplicationResponse"
+    "fixture/ReverseReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReverseReplication)
+
+responseStartFailbackLaunch :: StartFailbackLaunchResponse -> TestTree
+responseStartFailbackLaunch =
+  res
+    "StartFailbackLaunchResponse"
+    "fixture/StartFailbackLaunchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartFailbackLaunch)
+
+responseStartRecovery :: StartRecoveryResponse -> TestTree
+responseStartRecovery =
+  res
+    "StartRecoveryResponse"
+    "fixture/StartRecoveryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartRecovery)
+
+responseStartReplication :: StartReplicationResponse -> TestTree
+responseStartReplication =
+  res
+    "StartReplicationResponse"
+    "fixture/StartReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartReplication)
+
+responseStopFailback :: StopFailbackResponse -> TestTree
+responseStopFailback =
+  res
+    "StopFailbackResponse"
+    "fixture/StopFailbackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopFailback)
+
+responseStopReplication :: StopReplicationResponse -> TestTree
+responseStopReplication =
+  res
+    "StopReplicationResponse"
+    "fixture/StopReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopReplication)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseTerminateRecoveryInstances :: TerminateRecoveryInstancesResponse -> TestTree
+responseTerminateRecoveryInstances =
+  res
+    "TerminateRecoveryInstancesResponse"
+    "fixture/TerminateRecoveryInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TerminateRecoveryInstances)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateFailbackReplicationConfiguration :: UpdateFailbackReplicationConfigurationResponse -> TestTree
+responseUpdateFailbackReplicationConfiguration =
+  res
+    "UpdateFailbackReplicationConfigurationResponse"
+    "fixture/UpdateFailbackReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFailbackReplicationConfiguration)
+
+responseUpdateLaunchConfiguration :: LaunchConfiguration -> TestTree
+responseUpdateLaunchConfiguration =
+  res
+    "UpdateLaunchConfigurationResponse"
+    "fixture/UpdateLaunchConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLaunchConfiguration)
+
+responseUpdateReplicationConfiguration :: ReplicationConfiguration -> TestTree
+responseUpdateReplicationConfiguration =
+  res
+    "UpdateReplicationConfigurationResponse"
+    "fixture/UpdateReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateReplicationConfiguration)
+
+responseUpdateReplicationConfigurationTemplate :: ReplicationConfigurationTemplate -> TestTree
+responseUpdateReplicationConfigurationTemplate =
+  res
+    "UpdateReplicationConfigurationTemplateResponse"
+    "fixture/UpdateReplicationConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateReplicationConfigurationTemplate)
