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 Application Migration 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-mgn)
+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.MGN](http://hackage.haskell.org/package/amazonka-mgn/docs/Amazonka-MGN.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-mgn` 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-mgn.cabal b/amazonka-mgn.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-mgn.cabal
@@ -0,0 +1,219 @@
+cabal-version:      2.2
+name:               amazonka-mgn
+version:            2.0
+synopsis:           Amazon Application Migration 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.MGN.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.MGN" 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-mgn
+
+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.MGN
+    Amazonka.MGN.ArchiveApplication
+    Amazonka.MGN.ArchiveWave
+    Amazonka.MGN.AssociateApplications
+    Amazonka.MGN.AssociateSourceServers
+    Amazonka.MGN.ChangeServerLifeCycleState
+    Amazonka.MGN.CreateApplication
+    Amazonka.MGN.CreateLaunchConfigurationTemplate
+    Amazonka.MGN.CreateReplicationConfigurationTemplate
+    Amazonka.MGN.CreateWave
+    Amazonka.MGN.DeleteApplication
+    Amazonka.MGN.DeleteJob
+    Amazonka.MGN.DeleteLaunchConfigurationTemplate
+    Amazonka.MGN.DeleteReplicationConfigurationTemplate
+    Amazonka.MGN.DeleteSourceServer
+    Amazonka.MGN.DeleteVcenterClient
+    Amazonka.MGN.DeleteWave
+    Amazonka.MGN.DescribeJobLogItems
+    Amazonka.MGN.DescribeJobs
+    Amazonka.MGN.DescribeLaunchConfigurationTemplates
+    Amazonka.MGN.DescribeReplicationConfigurationTemplates
+    Amazonka.MGN.DescribeSourceServers
+    Amazonka.MGN.DescribeVcenterClients
+    Amazonka.MGN.DisassociateApplications
+    Amazonka.MGN.DisassociateSourceServers
+    Amazonka.MGN.DisconnectFromService
+    Amazonka.MGN.FinalizeCutover
+    Amazonka.MGN.GetLaunchConfiguration
+    Amazonka.MGN.GetReplicationConfiguration
+    Amazonka.MGN.InitializeService
+    Amazonka.MGN.Lens
+    Amazonka.MGN.ListApplications
+    Amazonka.MGN.ListSourceServerActions
+    Amazonka.MGN.ListTagsForResource
+    Amazonka.MGN.ListTemplateActions
+    Amazonka.MGN.ListWaves
+    Amazonka.MGN.MarkAsArchived
+    Amazonka.MGN.PutSourceServerAction
+    Amazonka.MGN.PutTemplateAction
+    Amazonka.MGN.RemoveSourceServerAction
+    Amazonka.MGN.RemoveTemplateAction
+    Amazonka.MGN.RetryDataReplication
+    Amazonka.MGN.StartCutover
+    Amazonka.MGN.StartReplication
+    Amazonka.MGN.StartTest
+    Amazonka.MGN.TagResource
+    Amazonka.MGN.TerminateTargetInstances
+    Amazonka.MGN.Types
+    Amazonka.MGN.Types.Application
+    Amazonka.MGN.Types.ApplicationAggregatedStatus
+    Amazonka.MGN.Types.ApplicationHealthStatus
+    Amazonka.MGN.Types.ApplicationProgressStatus
+    Amazonka.MGN.Types.BootMode
+    Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycle
+    Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycleState
+    Amazonka.MGN.Types.CPU
+    Amazonka.MGN.Types.DataReplicationError
+    Amazonka.MGN.Types.DataReplicationErrorString
+    Amazonka.MGN.Types.DataReplicationInfo
+    Amazonka.MGN.Types.DataReplicationInfoReplicatedDisk
+    Amazonka.MGN.Types.DataReplicationInitiation
+    Amazonka.MGN.Types.DataReplicationInitiationStep
+    Amazonka.MGN.Types.DataReplicationInitiationStepName
+    Amazonka.MGN.Types.DataReplicationInitiationStepStatus
+    Amazonka.MGN.Types.DataReplicationState
+    Amazonka.MGN.Types.DescribeJobsRequestFilters
+    Amazonka.MGN.Types.DescribeSourceServersRequestFilters
+    Amazonka.MGN.Types.Disk
+    Amazonka.MGN.Types.FirstBoot
+    Amazonka.MGN.Types.IdentificationHints
+    Amazonka.MGN.Types.InitiatedBy
+    Amazonka.MGN.Types.Job
+    Amazonka.MGN.Types.JobLog
+    Amazonka.MGN.Types.JobLogEvent
+    Amazonka.MGN.Types.JobLogEventData
+    Amazonka.MGN.Types.JobPostLaunchActionsLaunchStatus
+    Amazonka.MGN.Types.JobStatus
+    Amazonka.MGN.Types.JobType
+    Amazonka.MGN.Types.LaunchConfiguration
+    Amazonka.MGN.Types.LaunchConfigurationTemplate
+    Amazonka.MGN.Types.LaunchDisposition
+    Amazonka.MGN.Types.LaunchedInstance
+    Amazonka.MGN.Types.LaunchStatus
+    Amazonka.MGN.Types.LaunchTemplateDiskConf
+    Amazonka.MGN.Types.Licensing
+    Amazonka.MGN.Types.LifeCycle
+    Amazonka.MGN.Types.LifeCycleLastCutover
+    Amazonka.MGN.Types.LifeCycleLastCutoverFinalized
+    Amazonka.MGN.Types.LifeCycleLastCutoverInitiated
+    Amazonka.MGN.Types.LifeCycleLastCutoverReverted
+    Amazonka.MGN.Types.LifeCycleLastTest
+    Amazonka.MGN.Types.LifeCycleLastTestFinalized
+    Amazonka.MGN.Types.LifeCycleLastTestInitiated
+    Amazonka.MGN.Types.LifeCycleLastTestReverted
+    Amazonka.MGN.Types.LifeCycleState
+    Amazonka.MGN.Types.ListApplicationsRequestFilters
+    Amazonka.MGN.Types.ListWavesRequestFilters
+    Amazonka.MGN.Types.NetworkInterface
+    Amazonka.MGN.Types.OS
+    Amazonka.MGN.Types.ParticipatingServer
+    Amazonka.MGN.Types.PostLaunchActionExecutionStatus
+    Amazonka.MGN.Types.PostLaunchActions
+    Amazonka.MGN.Types.PostLaunchActionsDeploymentType
+    Amazonka.MGN.Types.PostLaunchActionsStatus
+    Amazonka.MGN.Types.ReplicationConfiguration
+    Amazonka.MGN.Types.ReplicationConfigurationDataPlaneRouting
+    Amazonka.MGN.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+    Amazonka.MGN.Types.ReplicationConfigurationEbsEncryption
+    Amazonka.MGN.Types.ReplicationConfigurationReplicatedDisk
+    Amazonka.MGN.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+    Amazonka.MGN.Types.ReplicationConfigurationTemplate
+    Amazonka.MGN.Types.ReplicationType
+    Amazonka.MGN.Types.SourceProperties
+    Amazonka.MGN.Types.SourceServer
+    Amazonka.MGN.Types.SourceServerActionDocument
+    Amazonka.MGN.Types.SourceServerActionsRequestFilters
+    Amazonka.MGN.Types.SsmDocument
+    Amazonka.MGN.Types.SsmDocumentType
+    Amazonka.MGN.Types.SsmParameterStoreParameter
+    Amazonka.MGN.Types.SsmParameterStoreParameterType
+    Amazonka.MGN.Types.TargetInstanceTypeRightSizingMethod
+    Amazonka.MGN.Types.TemplateActionDocument
+    Amazonka.MGN.Types.TemplateActionsRequestFilters
+    Amazonka.MGN.Types.VcenterClient
+    Amazonka.MGN.Types.VolumeType
+    Amazonka.MGN.Types.Wave
+    Amazonka.MGN.Types.WaveAggregatedStatus
+    Amazonka.MGN.Types.WaveHealthStatus
+    Amazonka.MGN.Types.WaveProgressStatus
+    Amazonka.MGN.UnarchiveApplication
+    Amazonka.MGN.UnarchiveWave
+    Amazonka.MGN.UntagResource
+    Amazonka.MGN.UpdateApplication
+    Amazonka.MGN.UpdateLaunchConfiguration
+    Amazonka.MGN.UpdateLaunchConfigurationTemplate
+    Amazonka.MGN.UpdateReplicationConfiguration
+    Amazonka.MGN.UpdateReplicationConfigurationTemplate
+    Amazonka.MGN.UpdateSourceServerReplicationType
+    Amazonka.MGN.UpdateWave
+    Amazonka.MGN.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-mgn-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.MGN
+    Test.Amazonka.MGN
+    Test.Amazonka.MGN.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-mgn
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/ArchiveApplication.yaml b/fixture/ArchiveApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ArchiveApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ArchiveApplicationResponse.proto b/fixture/ArchiveApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ArchiveApplicationResponse.proto
diff --git a/fixture/ArchiveWave.yaml b/fixture/ArchiveWave.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ArchiveWave.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ArchiveWaveResponse.proto b/fixture/ArchiveWaveResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ArchiveWaveResponse.proto
diff --git a/fixture/AssociateApplications.yaml b/fixture/AssociateApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/AssociateApplicationsResponse.proto b/fixture/AssociateApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateApplicationsResponse.proto
diff --git a/fixture/AssociateSourceServers.yaml b/fixture/AssociateSourceServers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateSourceServers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/AssociateSourceServersResponse.proto b/fixture/AssociateSourceServersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateSourceServersResponse.proto
diff --git a/fixture/ChangeServerLifeCycleState.yaml b/fixture/ChangeServerLifeCycleState.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ChangeServerLifeCycleState.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ChangeServerLifeCycleStateResponse.proto b/fixture/ChangeServerLifeCycleStateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ChangeServerLifeCycleStateResponse.proto
diff --git a/fixture/CreateApplication.yaml b/fixture/CreateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/CreateApplicationResponse.proto b/fixture/CreateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplicationResponse.proto
diff --git a/fixture/CreateLaunchConfigurationTemplate.yaml b/fixture/CreateLaunchConfigurationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchConfigurationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/CreateLaunchConfigurationTemplateResponse.proto b/fixture/CreateLaunchConfigurationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchConfigurationTemplateResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/CreateWave.yaml b/fixture/CreateWave.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWave.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/CreateWaveResponse.proto b/fixture/CreateWaveResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWaveResponse.proto
diff --git a/fixture/DeleteApplication.yaml b/fixture/DeleteApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DeleteApplicationResponse.proto b/fixture/DeleteApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DeleteLaunchConfigurationTemplate.yaml b/fixture/DeleteLaunchConfigurationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchConfigurationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DeleteLaunchConfigurationTemplateResponse.proto b/fixture/DeleteLaunchConfigurationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchConfigurationTemplateResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DeleteVcenterClient.yaml b/fixture/DeleteVcenterClient.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVcenterClient.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DeleteVcenterClientResponse.proto b/fixture/DeleteVcenterClientResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVcenterClientResponse.proto
diff --git a/fixture/DeleteWave.yaml b/fixture/DeleteWave.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWave.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DeleteWaveResponse.proto b/fixture/DeleteWaveResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWaveResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DescribeLaunchConfigurationTemplates.yaml b/fixture/DescribeLaunchConfigurationTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLaunchConfigurationTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DescribeLaunchConfigurationTemplatesResponse.proto b/fixture/DescribeLaunchConfigurationTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLaunchConfigurationTemplatesResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DescribeVcenterClients.yaml b/fixture/DescribeVcenterClients.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVcenterClients.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DescribeVcenterClientsResponse.proto b/fixture/DescribeVcenterClientsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVcenterClientsResponse.proto
diff --git a/fixture/DisassociateApplications.yaml b/fixture/DisassociateApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DisassociateApplicationsResponse.proto b/fixture/DisassociateApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateApplicationsResponse.proto
diff --git a/fixture/DisassociateSourceServers.yaml b/fixture/DisassociateSourceServers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateSourceServers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DisassociateSourceServersResponse.proto b/fixture/DisassociateSourceServersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateSourceServersResponse.proto
diff --git a/fixture/DisconnectFromService.yaml b/fixture/DisconnectFromService.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectFromService.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/DisconnectFromServiceResponse.proto b/fixture/DisconnectFromServiceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectFromServiceResponse.proto
diff --git a/fixture/FinalizeCutover.yaml b/fixture/FinalizeCutover.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/FinalizeCutover.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/FinalizeCutoverResponse.proto b/fixture/FinalizeCutoverResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/FinalizeCutoverResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ListApplications.yaml b/fixture/ListApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ListApplicationsResponse.proto b/fixture/ListApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplicationsResponse.proto
diff --git a/fixture/ListSourceServerActions.yaml b/fixture/ListSourceServerActions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSourceServerActions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ListSourceServerActionsResponse.proto b/fixture/ListSourceServerActionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSourceServerActionsResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ListTemplateActions.yaml b/fixture/ListTemplateActions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplateActions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ListTemplateActionsResponse.proto b/fixture/ListTemplateActionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplateActionsResponse.proto
diff --git a/fixture/ListWaves.yaml b/fixture/ListWaves.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWaves.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/ListWavesResponse.proto b/fixture/ListWavesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWavesResponse.proto
diff --git a/fixture/MarkAsArchived.yaml b/fixture/MarkAsArchived.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/MarkAsArchived.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/MarkAsArchivedResponse.proto b/fixture/MarkAsArchivedResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/MarkAsArchivedResponse.proto
diff --git a/fixture/PutSourceServerAction.yaml b/fixture/PutSourceServerAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutSourceServerAction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/PutSourceServerActionResponse.proto b/fixture/PutSourceServerActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutSourceServerActionResponse.proto
diff --git a/fixture/PutTemplateAction.yaml b/fixture/PutTemplateAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutTemplateAction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/PutTemplateActionResponse.proto b/fixture/PutTemplateActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutTemplateActionResponse.proto
diff --git a/fixture/RemoveSourceServerAction.yaml b/fixture/RemoveSourceServerAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveSourceServerAction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/RemoveSourceServerActionResponse.proto b/fixture/RemoveSourceServerActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveSourceServerActionResponse.proto
diff --git a/fixture/RemoveTemplateAction.yaml b/fixture/RemoveTemplateAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveTemplateAction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/RemoveTemplateActionResponse.proto b/fixture/RemoveTemplateActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveTemplateActionResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/StartCutover.yaml b/fixture/StartCutover.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartCutover.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/StartCutoverResponse.proto b/fixture/StartCutoverResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartCutoverResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/StartTest.yaml b/fixture/StartTest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartTest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/StartTestResponse.proto b/fixture/StartTestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartTestResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/TerminateTargetInstances.yaml b/fixture/TerminateTargetInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateTargetInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/TerminateTargetInstancesResponse.proto b/fixture/TerminateTargetInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateTargetInstancesResponse.proto
diff --git a/fixture/UnarchiveApplication.yaml b/fixture/UnarchiveApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UnarchiveApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UnarchiveApplicationResponse.proto b/fixture/UnarchiveApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UnarchiveApplicationResponse.proto
diff --git a/fixture/UnarchiveWave.yaml b/fixture/UnarchiveWave.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UnarchiveWave.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UnarchiveWaveResponse.proto b/fixture/UnarchiveWaveResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UnarchiveWaveResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UpdateApplication.yaml b/fixture/UpdateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UpdateApplicationResponse.proto b/fixture/UpdateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplicationResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UpdateLaunchConfigurationTemplate.yaml b/fixture/UpdateLaunchConfigurationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchConfigurationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UpdateLaunchConfigurationTemplateResponse.proto b/fixture/UpdateLaunchConfigurationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchConfigurationTemplateResponse.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/fixture/UpdateSourceServerReplicationType.yaml b/fixture/UpdateSourceServerReplicationType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSourceServerReplicationType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UpdateSourceServerReplicationTypeResponse.proto b/fixture/UpdateSourceServerReplicationTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSourceServerReplicationTypeResponse.proto
diff --git a/fixture/UpdateWave.yaml b/fixture/UpdateWave.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWave.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mgn/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mgn.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/UpdateWaveResponse.proto b/fixture/UpdateWaveResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWaveResponse.proto
diff --git a/gen/Amazonka/MGN.hs b/gen/Amazonka/MGN.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN.hs
@@ -0,0 +1,765 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MGN
+-- 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.
+--
+-- The Application Migration Service service.
+module Amazonka.MGN
+  ( -- * 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
+
+    -- ** ArchiveApplication
+    ArchiveApplication (ArchiveApplication'),
+    newArchiveApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** ArchiveWave
+    ArchiveWave (ArchiveWave'),
+    newArchiveWave,
+    Wave (Wave'),
+    newWave,
+
+    -- ** AssociateApplications
+    AssociateApplications (AssociateApplications'),
+    newAssociateApplications,
+    AssociateApplicationsResponse (AssociateApplicationsResponse'),
+    newAssociateApplicationsResponse,
+
+    -- ** AssociateSourceServers
+    AssociateSourceServers (AssociateSourceServers'),
+    newAssociateSourceServers,
+    AssociateSourceServersResponse (AssociateSourceServersResponse'),
+    newAssociateSourceServersResponse,
+
+    -- ** ChangeServerLifeCycleState
+    ChangeServerLifeCycleState (ChangeServerLifeCycleState'),
+    newChangeServerLifeCycleState,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** CreateApplication
+    CreateApplication (CreateApplication'),
+    newCreateApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** CreateLaunchConfigurationTemplate
+    CreateLaunchConfigurationTemplate (CreateLaunchConfigurationTemplate'),
+    newCreateLaunchConfigurationTemplate,
+    LaunchConfigurationTemplate (LaunchConfigurationTemplate'),
+    newLaunchConfigurationTemplate,
+
+    -- ** CreateReplicationConfigurationTemplate
+    CreateReplicationConfigurationTemplate (CreateReplicationConfigurationTemplate'),
+    newCreateReplicationConfigurationTemplate,
+    ReplicationConfigurationTemplate (ReplicationConfigurationTemplate'),
+    newReplicationConfigurationTemplate,
+
+    -- ** CreateWave
+    CreateWave (CreateWave'),
+    newCreateWave,
+    Wave (Wave'),
+    newWave,
+
+    -- ** DeleteApplication
+    DeleteApplication (DeleteApplication'),
+    newDeleteApplication,
+    DeleteApplicationResponse (DeleteApplicationResponse'),
+    newDeleteApplicationResponse,
+
+    -- ** DeleteJob
+    DeleteJob (DeleteJob'),
+    newDeleteJob,
+    DeleteJobResponse (DeleteJobResponse'),
+    newDeleteJobResponse,
+
+    -- ** DeleteLaunchConfigurationTemplate
+    DeleteLaunchConfigurationTemplate (DeleteLaunchConfigurationTemplate'),
+    newDeleteLaunchConfigurationTemplate,
+    DeleteLaunchConfigurationTemplateResponse (DeleteLaunchConfigurationTemplateResponse'),
+    newDeleteLaunchConfigurationTemplateResponse,
+
+    -- ** DeleteReplicationConfigurationTemplate
+    DeleteReplicationConfigurationTemplate (DeleteReplicationConfigurationTemplate'),
+    newDeleteReplicationConfigurationTemplate,
+    DeleteReplicationConfigurationTemplateResponse (DeleteReplicationConfigurationTemplateResponse'),
+    newDeleteReplicationConfigurationTemplateResponse,
+
+    -- ** DeleteSourceServer
+    DeleteSourceServer (DeleteSourceServer'),
+    newDeleteSourceServer,
+    DeleteSourceServerResponse (DeleteSourceServerResponse'),
+    newDeleteSourceServerResponse,
+
+    -- ** DeleteVcenterClient
+    DeleteVcenterClient (DeleteVcenterClient'),
+    newDeleteVcenterClient,
+    DeleteVcenterClientResponse (DeleteVcenterClientResponse'),
+    newDeleteVcenterClientResponse,
+
+    -- ** DeleteWave
+    DeleteWave (DeleteWave'),
+    newDeleteWave,
+    DeleteWaveResponse (DeleteWaveResponse'),
+    newDeleteWaveResponse,
+
+    -- ** DescribeJobLogItems (Paginated)
+    DescribeJobLogItems (DescribeJobLogItems'),
+    newDescribeJobLogItems,
+    DescribeJobLogItemsResponse (DescribeJobLogItemsResponse'),
+    newDescribeJobLogItemsResponse,
+
+    -- ** DescribeJobs (Paginated)
+    DescribeJobs (DescribeJobs'),
+    newDescribeJobs,
+    DescribeJobsResponse (DescribeJobsResponse'),
+    newDescribeJobsResponse,
+
+    -- ** DescribeLaunchConfigurationTemplates (Paginated)
+    DescribeLaunchConfigurationTemplates (DescribeLaunchConfigurationTemplates'),
+    newDescribeLaunchConfigurationTemplates,
+    DescribeLaunchConfigurationTemplatesResponse (DescribeLaunchConfigurationTemplatesResponse'),
+    newDescribeLaunchConfigurationTemplatesResponse,
+
+    -- ** DescribeReplicationConfigurationTemplates (Paginated)
+    DescribeReplicationConfigurationTemplates (DescribeReplicationConfigurationTemplates'),
+    newDescribeReplicationConfigurationTemplates,
+    DescribeReplicationConfigurationTemplatesResponse (DescribeReplicationConfigurationTemplatesResponse'),
+    newDescribeReplicationConfigurationTemplatesResponse,
+
+    -- ** DescribeSourceServers (Paginated)
+    DescribeSourceServers (DescribeSourceServers'),
+    newDescribeSourceServers,
+    DescribeSourceServersResponse (DescribeSourceServersResponse'),
+    newDescribeSourceServersResponse,
+
+    -- ** DescribeVcenterClients (Paginated)
+    DescribeVcenterClients (DescribeVcenterClients'),
+    newDescribeVcenterClients,
+    DescribeVcenterClientsResponse (DescribeVcenterClientsResponse'),
+    newDescribeVcenterClientsResponse,
+
+    -- ** DisassociateApplications
+    DisassociateApplications (DisassociateApplications'),
+    newDisassociateApplications,
+    DisassociateApplicationsResponse (DisassociateApplicationsResponse'),
+    newDisassociateApplicationsResponse,
+
+    -- ** DisassociateSourceServers
+    DisassociateSourceServers (DisassociateSourceServers'),
+    newDisassociateSourceServers,
+    DisassociateSourceServersResponse (DisassociateSourceServersResponse'),
+    newDisassociateSourceServersResponse,
+
+    -- ** DisconnectFromService
+    DisconnectFromService (DisconnectFromService'),
+    newDisconnectFromService,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** FinalizeCutover
+    FinalizeCutover (FinalizeCutover'),
+    newFinalizeCutover,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** GetLaunchConfiguration
+    GetLaunchConfiguration (GetLaunchConfiguration'),
+    newGetLaunchConfiguration,
+    LaunchConfiguration (LaunchConfiguration'),
+    newLaunchConfiguration,
+
+    -- ** GetReplicationConfiguration
+    GetReplicationConfiguration (GetReplicationConfiguration'),
+    newGetReplicationConfiguration,
+    ReplicationConfiguration (ReplicationConfiguration'),
+    newReplicationConfiguration,
+
+    -- ** InitializeService
+    InitializeService (InitializeService'),
+    newInitializeService,
+    InitializeServiceResponse (InitializeServiceResponse'),
+    newInitializeServiceResponse,
+
+    -- ** ListApplications (Paginated)
+    ListApplications (ListApplications'),
+    newListApplications,
+    ListApplicationsResponse (ListApplicationsResponse'),
+    newListApplicationsResponse,
+
+    -- ** ListSourceServerActions (Paginated)
+    ListSourceServerActions (ListSourceServerActions'),
+    newListSourceServerActions,
+    ListSourceServerActionsResponse (ListSourceServerActionsResponse'),
+    newListSourceServerActionsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListTemplateActions (Paginated)
+    ListTemplateActions (ListTemplateActions'),
+    newListTemplateActions,
+    ListTemplateActionsResponse (ListTemplateActionsResponse'),
+    newListTemplateActionsResponse,
+
+    -- ** ListWaves (Paginated)
+    ListWaves (ListWaves'),
+    newListWaves,
+    ListWavesResponse (ListWavesResponse'),
+    newListWavesResponse,
+
+    -- ** MarkAsArchived
+    MarkAsArchived (MarkAsArchived'),
+    newMarkAsArchived,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** PutSourceServerAction
+    PutSourceServerAction (PutSourceServerAction'),
+    newPutSourceServerAction,
+    SourceServerActionDocument (SourceServerActionDocument'),
+    newSourceServerActionDocument,
+
+    -- ** PutTemplateAction
+    PutTemplateAction (PutTemplateAction'),
+    newPutTemplateAction,
+    TemplateActionDocument (TemplateActionDocument'),
+    newTemplateActionDocument,
+
+    -- ** RemoveSourceServerAction
+    RemoveSourceServerAction (RemoveSourceServerAction'),
+    newRemoveSourceServerAction,
+    RemoveSourceServerActionResponse (RemoveSourceServerActionResponse'),
+    newRemoveSourceServerActionResponse,
+
+    -- ** RemoveTemplateAction
+    RemoveTemplateAction (RemoveTemplateAction'),
+    newRemoveTemplateAction,
+    RemoveTemplateActionResponse (RemoveTemplateActionResponse'),
+    newRemoveTemplateActionResponse,
+
+    -- ** RetryDataReplication
+    RetryDataReplication (RetryDataReplication'),
+    newRetryDataReplication,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** StartCutover
+    StartCutover (StartCutover'),
+    newStartCutover,
+    StartCutoverResponse (StartCutoverResponse'),
+    newStartCutoverResponse,
+
+    -- ** StartReplication
+    StartReplication (StartReplication'),
+    newStartReplication,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** StartTest
+    StartTest (StartTest'),
+    newStartTest,
+    StartTestResponse (StartTestResponse'),
+    newStartTestResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** TerminateTargetInstances
+    TerminateTargetInstances (TerminateTargetInstances'),
+    newTerminateTargetInstances,
+    TerminateTargetInstancesResponse (TerminateTargetInstancesResponse'),
+    newTerminateTargetInstancesResponse,
+
+    -- ** UnarchiveApplication
+    UnarchiveApplication (UnarchiveApplication'),
+    newUnarchiveApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** UnarchiveWave
+    UnarchiveWave (UnarchiveWave'),
+    newUnarchiveWave,
+    Wave (Wave'),
+    newWave,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApplication
+    UpdateApplication (UpdateApplication'),
+    newUpdateApplication,
+    Application (Application'),
+    newApplication,
+
+    -- ** UpdateLaunchConfiguration
+    UpdateLaunchConfiguration (UpdateLaunchConfiguration'),
+    newUpdateLaunchConfiguration,
+    LaunchConfiguration (LaunchConfiguration'),
+    newLaunchConfiguration,
+
+    -- ** UpdateLaunchConfigurationTemplate
+    UpdateLaunchConfigurationTemplate (UpdateLaunchConfigurationTemplate'),
+    newUpdateLaunchConfigurationTemplate,
+    LaunchConfigurationTemplate (LaunchConfigurationTemplate'),
+    newLaunchConfigurationTemplate,
+
+    -- ** UpdateReplicationConfiguration
+    UpdateReplicationConfiguration (UpdateReplicationConfiguration'),
+    newUpdateReplicationConfiguration,
+    ReplicationConfiguration (ReplicationConfiguration'),
+    newReplicationConfiguration,
+
+    -- ** UpdateReplicationConfigurationTemplate
+    UpdateReplicationConfigurationTemplate (UpdateReplicationConfigurationTemplate'),
+    newUpdateReplicationConfigurationTemplate,
+    ReplicationConfigurationTemplate (ReplicationConfigurationTemplate'),
+    newReplicationConfigurationTemplate,
+
+    -- ** UpdateSourceServerReplicationType
+    UpdateSourceServerReplicationType (UpdateSourceServerReplicationType'),
+    newUpdateSourceServerReplicationType,
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** UpdateWave
+    UpdateWave (UpdateWave'),
+    newUpdateWave,
+    Wave (Wave'),
+    newWave,
+
+    -- * Types
+
+    -- ** ApplicationHealthStatus
+    ApplicationHealthStatus (..),
+
+    -- ** ApplicationProgressStatus
+    ApplicationProgressStatus (..),
+
+    -- ** BootMode
+    BootMode (..),
+
+    -- ** ChangeServerLifeCycleStateSourceServerLifecycleState
+    ChangeServerLifeCycleStateSourceServerLifecycleState (..),
+
+    -- ** DataReplicationErrorString
+    DataReplicationErrorString (..),
+
+    -- ** DataReplicationInitiationStepName
+    DataReplicationInitiationStepName (..),
+
+    -- ** DataReplicationInitiationStepStatus
+    DataReplicationInitiationStepStatus (..),
+
+    -- ** DataReplicationState
+    DataReplicationState (..),
+
+    -- ** FirstBoot
+    FirstBoot (..),
+
+    -- ** InitiatedBy
+    InitiatedBy (..),
+
+    -- ** JobLogEvent
+    JobLogEvent (..),
+
+    -- ** JobStatus
+    JobStatus (..),
+
+    -- ** JobType
+    JobType (..),
+
+    -- ** LaunchDisposition
+    LaunchDisposition (..),
+
+    -- ** LaunchStatus
+    LaunchStatus (..),
+
+    -- ** LifeCycleState
+    LifeCycleState (..),
+
+    -- ** PostLaunchActionExecutionStatus
+    PostLaunchActionExecutionStatus (..),
+
+    -- ** PostLaunchActionsDeploymentType
+    PostLaunchActionsDeploymentType (..),
+
+    -- ** ReplicationConfigurationDataPlaneRouting
+    ReplicationConfigurationDataPlaneRouting (..),
+
+    -- ** ReplicationConfigurationDefaultLargeStagingDiskType
+    ReplicationConfigurationDefaultLargeStagingDiskType (..),
+
+    -- ** ReplicationConfigurationEbsEncryption
+    ReplicationConfigurationEbsEncryption (..),
+
+    -- ** ReplicationConfigurationReplicatedDiskStagingDiskType
+    ReplicationConfigurationReplicatedDiskStagingDiskType (..),
+
+    -- ** ReplicationType
+    ReplicationType (..),
+
+    -- ** SsmDocumentType
+    SsmDocumentType (..),
+
+    -- ** SsmParameterStoreParameterType
+    SsmParameterStoreParameterType (..),
+
+    -- ** TargetInstanceTypeRightSizingMethod
+    TargetInstanceTypeRightSizingMethod (..),
+
+    -- ** VolumeType
+    VolumeType (..),
+
+    -- ** WaveHealthStatus
+    WaveHealthStatus (..),
+
+    -- ** WaveProgressStatus
+    WaveProgressStatus (..),
+
+    -- ** Application
+    Application (Application'),
+    newApplication,
+
+    -- ** ApplicationAggregatedStatus
+    ApplicationAggregatedStatus (ApplicationAggregatedStatus'),
+    newApplicationAggregatedStatus,
+
+    -- ** CPU
+    CPU (CPU'),
+    newCPU,
+
+    -- ** ChangeServerLifeCycleStateSourceServerLifecycle
+    ChangeServerLifeCycleStateSourceServerLifecycle (ChangeServerLifeCycleStateSourceServerLifecycle'),
+    newChangeServerLifeCycleStateSourceServerLifecycle,
+
+    -- ** DataReplicationError
+    DataReplicationError (DataReplicationError'),
+    newDataReplicationError,
+
+    -- ** DataReplicationInfo
+    DataReplicationInfo (DataReplicationInfo'),
+    newDataReplicationInfo,
+
+    -- ** DataReplicationInfoReplicatedDisk
+    DataReplicationInfoReplicatedDisk (DataReplicationInfoReplicatedDisk'),
+    newDataReplicationInfoReplicatedDisk,
+
+    -- ** DataReplicationInitiation
+    DataReplicationInitiation (DataReplicationInitiation'),
+    newDataReplicationInitiation,
+
+    -- ** DataReplicationInitiationStep
+    DataReplicationInitiationStep (DataReplicationInitiationStep'),
+    newDataReplicationInitiationStep,
+
+    -- ** DescribeJobsRequestFilters
+    DescribeJobsRequestFilters (DescribeJobsRequestFilters'),
+    newDescribeJobsRequestFilters,
+
+    -- ** DescribeSourceServersRequestFilters
+    DescribeSourceServersRequestFilters (DescribeSourceServersRequestFilters'),
+    newDescribeSourceServersRequestFilters,
+
+    -- ** Disk
+    Disk (Disk'),
+    newDisk,
+
+    -- ** IdentificationHints
+    IdentificationHints (IdentificationHints'),
+    newIdentificationHints,
+
+    -- ** Job
+    Job (Job'),
+    newJob,
+
+    -- ** JobLog
+    JobLog (JobLog'),
+    newJobLog,
+
+    -- ** JobLogEventData
+    JobLogEventData (JobLogEventData'),
+    newJobLogEventData,
+
+    -- ** JobPostLaunchActionsLaunchStatus
+    JobPostLaunchActionsLaunchStatus (JobPostLaunchActionsLaunchStatus'),
+    newJobPostLaunchActionsLaunchStatus,
+
+    -- ** LaunchConfiguration
+    LaunchConfiguration (LaunchConfiguration'),
+    newLaunchConfiguration,
+
+    -- ** LaunchConfigurationTemplate
+    LaunchConfigurationTemplate (LaunchConfigurationTemplate'),
+    newLaunchConfigurationTemplate,
+
+    -- ** LaunchTemplateDiskConf
+    LaunchTemplateDiskConf (LaunchTemplateDiskConf'),
+    newLaunchTemplateDiskConf,
+
+    -- ** LaunchedInstance
+    LaunchedInstance (LaunchedInstance'),
+    newLaunchedInstance,
+
+    -- ** Licensing
+    Licensing (Licensing'),
+    newLicensing,
+
+    -- ** LifeCycle
+    LifeCycle (LifeCycle'),
+    newLifeCycle,
+
+    -- ** LifeCycleLastCutover
+    LifeCycleLastCutover (LifeCycleLastCutover'),
+    newLifeCycleLastCutover,
+
+    -- ** LifeCycleLastCutoverFinalized
+    LifeCycleLastCutoverFinalized (LifeCycleLastCutoverFinalized'),
+    newLifeCycleLastCutoverFinalized,
+
+    -- ** LifeCycleLastCutoverInitiated
+    LifeCycleLastCutoverInitiated (LifeCycleLastCutoverInitiated'),
+    newLifeCycleLastCutoverInitiated,
+
+    -- ** LifeCycleLastCutoverReverted
+    LifeCycleLastCutoverReverted (LifeCycleLastCutoverReverted'),
+    newLifeCycleLastCutoverReverted,
+
+    -- ** LifeCycleLastTest
+    LifeCycleLastTest (LifeCycleLastTest'),
+    newLifeCycleLastTest,
+
+    -- ** LifeCycleLastTestFinalized
+    LifeCycleLastTestFinalized (LifeCycleLastTestFinalized'),
+    newLifeCycleLastTestFinalized,
+
+    -- ** LifeCycleLastTestInitiated
+    LifeCycleLastTestInitiated (LifeCycleLastTestInitiated'),
+    newLifeCycleLastTestInitiated,
+
+    -- ** LifeCycleLastTestReverted
+    LifeCycleLastTestReverted (LifeCycleLastTestReverted'),
+    newLifeCycleLastTestReverted,
+
+    -- ** ListApplicationsRequestFilters
+    ListApplicationsRequestFilters (ListApplicationsRequestFilters'),
+    newListApplicationsRequestFilters,
+
+    -- ** ListWavesRequestFilters
+    ListWavesRequestFilters (ListWavesRequestFilters'),
+    newListWavesRequestFilters,
+
+    -- ** NetworkInterface
+    NetworkInterface (NetworkInterface'),
+    newNetworkInterface,
+
+    -- ** OS
+    OS (OS'),
+    newOS,
+
+    -- ** ParticipatingServer
+    ParticipatingServer (ParticipatingServer'),
+    newParticipatingServer,
+
+    -- ** PostLaunchActions
+    PostLaunchActions (PostLaunchActions'),
+    newPostLaunchActions,
+
+    -- ** PostLaunchActionsStatus
+    PostLaunchActionsStatus (PostLaunchActionsStatus'),
+    newPostLaunchActionsStatus,
+
+    -- ** ReplicationConfiguration
+    ReplicationConfiguration (ReplicationConfiguration'),
+    newReplicationConfiguration,
+
+    -- ** ReplicationConfigurationReplicatedDisk
+    ReplicationConfigurationReplicatedDisk (ReplicationConfigurationReplicatedDisk'),
+    newReplicationConfigurationReplicatedDisk,
+
+    -- ** ReplicationConfigurationTemplate
+    ReplicationConfigurationTemplate (ReplicationConfigurationTemplate'),
+    newReplicationConfigurationTemplate,
+
+    -- ** SourceProperties
+    SourceProperties (SourceProperties'),
+    newSourceProperties,
+
+    -- ** SourceServer
+    SourceServer (SourceServer'),
+    newSourceServer,
+
+    -- ** SourceServerActionDocument
+    SourceServerActionDocument (SourceServerActionDocument'),
+    newSourceServerActionDocument,
+
+    -- ** SourceServerActionsRequestFilters
+    SourceServerActionsRequestFilters (SourceServerActionsRequestFilters'),
+    newSourceServerActionsRequestFilters,
+
+    -- ** SsmDocument
+    SsmDocument (SsmDocument'),
+    newSsmDocument,
+
+    -- ** SsmParameterStoreParameter
+    SsmParameterStoreParameter (SsmParameterStoreParameter'),
+    newSsmParameterStoreParameter,
+
+    -- ** TemplateActionDocument
+    TemplateActionDocument (TemplateActionDocument'),
+    newTemplateActionDocument,
+
+    -- ** TemplateActionsRequestFilters
+    TemplateActionsRequestFilters (TemplateActionsRequestFilters'),
+    newTemplateActionsRequestFilters,
+
+    -- ** VcenterClient
+    VcenterClient (VcenterClient'),
+    newVcenterClient,
+
+    -- ** Wave
+    Wave (Wave'),
+    newWave,
+
+    -- ** WaveAggregatedStatus
+    WaveAggregatedStatus (WaveAggregatedStatus'),
+    newWaveAggregatedStatus,
+  )
+where
+
+import Amazonka.MGN.ArchiveApplication
+import Amazonka.MGN.ArchiveWave
+import Amazonka.MGN.AssociateApplications
+import Amazonka.MGN.AssociateSourceServers
+import Amazonka.MGN.ChangeServerLifeCycleState
+import Amazonka.MGN.CreateApplication
+import Amazonka.MGN.CreateLaunchConfigurationTemplate
+import Amazonka.MGN.CreateReplicationConfigurationTemplate
+import Amazonka.MGN.CreateWave
+import Amazonka.MGN.DeleteApplication
+import Amazonka.MGN.DeleteJob
+import Amazonka.MGN.DeleteLaunchConfigurationTemplate
+import Amazonka.MGN.DeleteReplicationConfigurationTemplate
+import Amazonka.MGN.DeleteSourceServer
+import Amazonka.MGN.DeleteVcenterClient
+import Amazonka.MGN.DeleteWave
+import Amazonka.MGN.DescribeJobLogItems
+import Amazonka.MGN.DescribeJobs
+import Amazonka.MGN.DescribeLaunchConfigurationTemplates
+import Amazonka.MGN.DescribeReplicationConfigurationTemplates
+import Amazonka.MGN.DescribeSourceServers
+import Amazonka.MGN.DescribeVcenterClients
+import Amazonka.MGN.DisassociateApplications
+import Amazonka.MGN.DisassociateSourceServers
+import Amazonka.MGN.DisconnectFromService
+import Amazonka.MGN.FinalizeCutover
+import Amazonka.MGN.GetLaunchConfiguration
+import Amazonka.MGN.GetReplicationConfiguration
+import Amazonka.MGN.InitializeService
+import Amazonka.MGN.Lens
+import Amazonka.MGN.ListApplications
+import Amazonka.MGN.ListSourceServerActions
+import Amazonka.MGN.ListTagsForResource
+import Amazonka.MGN.ListTemplateActions
+import Amazonka.MGN.ListWaves
+import Amazonka.MGN.MarkAsArchived
+import Amazonka.MGN.PutSourceServerAction
+import Amazonka.MGN.PutTemplateAction
+import Amazonka.MGN.RemoveSourceServerAction
+import Amazonka.MGN.RemoveTemplateAction
+import Amazonka.MGN.RetryDataReplication
+import Amazonka.MGN.StartCutover
+import Amazonka.MGN.StartReplication
+import Amazonka.MGN.StartTest
+import Amazonka.MGN.TagResource
+import Amazonka.MGN.TerminateTargetInstances
+import Amazonka.MGN.Types
+import Amazonka.MGN.UnarchiveApplication
+import Amazonka.MGN.UnarchiveWave
+import Amazonka.MGN.UntagResource
+import Amazonka.MGN.UpdateApplication
+import Amazonka.MGN.UpdateLaunchConfiguration
+import Amazonka.MGN.UpdateLaunchConfigurationTemplate
+import Amazonka.MGN.UpdateReplicationConfiguration
+import Amazonka.MGN.UpdateReplicationConfigurationTemplate
+import Amazonka.MGN.UpdateSourceServerReplicationType
+import Amazonka.MGN.UpdateWave
+import Amazonka.MGN.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 'MGN'.
+
+-- $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/MGN/ArchiveApplication.hs b/gen/Amazonka/MGN/ArchiveApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ArchiveApplication.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.ArchiveApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Archive application.
+module Amazonka.MGN.ArchiveApplication
+  ( -- * Creating a Request
+    ArchiveApplication (..),
+    newArchiveApplication,
+
+    -- * Request Lenses
+    archiveApplication_applicationID,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newArchiveApplication' smart constructor.
+data ArchiveApplication = ArchiveApplication'
+  { -- | Application ID.
+    applicationID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ArchiveApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationID', 'archiveApplication_applicationID' - Application ID.
+newArchiveApplication ::
+  -- | 'applicationID'
+  Prelude.Text ->
+  ArchiveApplication
+newArchiveApplication pApplicationID_ =
+  ArchiveApplication'
+    { applicationID =
+        pApplicationID_
+    }
+
+-- | Application ID.
+archiveApplication_applicationID :: Lens.Lens' ArchiveApplication Prelude.Text
+archiveApplication_applicationID = Lens.lens (\ArchiveApplication' {applicationID} -> applicationID) (\s@ArchiveApplication' {} a -> s {applicationID = a} :: ArchiveApplication)
+
+instance Core.AWSRequest ArchiveApplication where
+  type AWSResponse ArchiveApplication = Application
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable ArchiveApplication where
+  hashWithSalt _salt ArchiveApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationID
+
+instance Prelude.NFData ArchiveApplication where
+  rnf ArchiveApplication' {..} =
+    Prelude.rnf applicationID
+
+instance Data.ToHeaders ArchiveApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ArchiveApplication where
+  toJSON ArchiveApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationID" Data..= applicationID)
+          ]
+      )
+
+instance Data.ToPath ArchiveApplication where
+  toPath = Prelude.const "/ArchiveApplication"
+
+instance Data.ToQuery ArchiveApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/ArchiveWave.hs b/gen/Amazonka/MGN/ArchiveWave.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ArchiveWave.hs
@@ -0,0 +1,121 @@
+{-# 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.MGN.ArchiveWave
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Archive wave.
+module Amazonka.MGN.ArchiveWave
+  ( -- * Creating a Request
+    ArchiveWave (..),
+    newArchiveWave,
+
+    -- * Request Lenses
+    archiveWave_waveID,
+
+    -- * Destructuring the Response
+    Wave (..),
+    newWave,
+
+    -- * Response Lenses
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newArchiveWave' smart constructor.
+data ArchiveWave = ArchiveWave'
+  { -- | Wave ID.
+    waveID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ArchiveWave' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'waveID', 'archiveWave_waveID' - Wave ID.
+newArchiveWave ::
+  -- | 'waveID'
+  Prelude.Text ->
+  ArchiveWave
+newArchiveWave pWaveID_ =
+  ArchiveWave' {waveID = pWaveID_}
+
+-- | Wave ID.
+archiveWave_waveID :: Lens.Lens' ArchiveWave Prelude.Text
+archiveWave_waveID = Lens.lens (\ArchiveWave' {waveID} -> waveID) (\s@ArchiveWave' {} a -> s {waveID = a} :: ArchiveWave)
+
+instance Core.AWSRequest ArchiveWave where
+  type AWSResponse ArchiveWave = Wave
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable ArchiveWave where
+  hashWithSalt _salt ArchiveWave' {..} =
+    _salt `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData ArchiveWave where
+  rnf ArchiveWave' {..} = Prelude.rnf waveID
+
+instance Data.ToHeaders ArchiveWave where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ArchiveWave where
+  toJSON ArchiveWave' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("waveID" Data..= waveID)]
+      )
+
+instance Data.ToPath ArchiveWave where
+  toPath = Prelude.const "/ArchiveWave"
+
+instance Data.ToQuery ArchiveWave where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/AssociateApplications.hs b/gen/Amazonka/MGN/AssociateApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/AssociateApplications.hs
@@ -0,0 +1,174 @@
+{-# 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.MGN.AssociateApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate applications to wave.
+module Amazonka.MGN.AssociateApplications
+  ( -- * Creating a Request
+    AssociateApplications (..),
+    newAssociateApplications,
+
+    -- * Request Lenses
+    associateApplications_applicationIDs,
+    associateApplications_waveID,
+
+    -- * Destructuring the Response
+    AssociateApplicationsResponse (..),
+    newAssociateApplicationsResponse,
+
+    -- * Response Lenses
+    associateApplicationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateApplications' smart constructor.
+data AssociateApplications = AssociateApplications'
+  { -- | Application IDs list.
+    applicationIDs :: Prelude.NonEmpty Prelude.Text,
+    -- | Wave ID.
+    waveID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateApplications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationIDs', 'associateApplications_applicationIDs' - Application IDs list.
+--
+-- 'waveID', 'associateApplications_waveID' - Wave ID.
+newAssociateApplications ::
+  -- | 'applicationIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'waveID'
+  Prelude.Text ->
+  AssociateApplications
+newAssociateApplications pApplicationIDs_ pWaveID_ =
+  AssociateApplications'
+    { applicationIDs =
+        Lens.coerced Lens.# pApplicationIDs_,
+      waveID = pWaveID_
+    }
+
+-- | Application IDs list.
+associateApplications_applicationIDs :: Lens.Lens' AssociateApplications (Prelude.NonEmpty Prelude.Text)
+associateApplications_applicationIDs = Lens.lens (\AssociateApplications' {applicationIDs} -> applicationIDs) (\s@AssociateApplications' {} a -> s {applicationIDs = a} :: AssociateApplications) Prelude.. Lens.coerced
+
+-- | Wave ID.
+associateApplications_waveID :: Lens.Lens' AssociateApplications Prelude.Text
+associateApplications_waveID = Lens.lens (\AssociateApplications' {waveID} -> waveID) (\s@AssociateApplications' {} a -> s {waveID = a} :: AssociateApplications)
+
+instance Core.AWSRequest AssociateApplications where
+  type
+    AWSResponse AssociateApplications =
+      AssociateApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateApplicationsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateApplications where
+  hashWithSalt _salt AssociateApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationIDs
+      `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData AssociateApplications where
+  rnf AssociateApplications' {..} =
+    Prelude.rnf applicationIDs
+      `Prelude.seq` Prelude.rnf waveID
+
+instance Data.ToHeaders AssociateApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateApplications where
+  toJSON AssociateApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationIDs" Data..= applicationIDs),
+            Prelude.Just ("waveID" Data..= waveID)
+          ]
+      )
+
+instance Data.ToPath AssociateApplications where
+  toPath = Prelude.const "/AssociateApplications"
+
+instance Data.ToQuery AssociateApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateApplicationsResponse' smart constructor.
+data AssociateApplicationsResponse = AssociateApplicationsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateApplicationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateApplicationsResponse_httpStatus' - The response's http status code.
+newAssociateApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateApplicationsResponse
+newAssociateApplicationsResponse pHttpStatus_ =
+  AssociateApplicationsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateApplicationsResponse_httpStatus :: Lens.Lens' AssociateApplicationsResponse Prelude.Int
+associateApplicationsResponse_httpStatus = Lens.lens (\AssociateApplicationsResponse' {httpStatus} -> httpStatus) (\s@AssociateApplicationsResponse' {} a -> s {httpStatus = a} :: AssociateApplicationsResponse)
+
+instance Prelude.NFData AssociateApplicationsResponse where
+  rnf AssociateApplicationsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/AssociateSourceServers.hs b/gen/Amazonka/MGN/AssociateSourceServers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/AssociateSourceServers.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.AssociateSourceServers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate source servers to application.
+module Amazonka.MGN.AssociateSourceServers
+  ( -- * Creating a Request
+    AssociateSourceServers (..),
+    newAssociateSourceServers,
+
+    -- * Request Lenses
+    associateSourceServers_applicationID,
+    associateSourceServers_sourceServerIDs,
+
+    -- * Destructuring the Response
+    AssociateSourceServersResponse (..),
+    newAssociateSourceServersResponse,
+
+    -- * Response Lenses
+    associateSourceServersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateSourceServers' smart constructor.
+data AssociateSourceServers = AssociateSourceServers'
+  { -- | Application ID.
+    applicationID :: Prelude.Text,
+    -- | Source server IDs list.
+    sourceServerIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSourceServers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationID', 'associateSourceServers_applicationID' - Application ID.
+--
+-- 'sourceServerIDs', 'associateSourceServers_sourceServerIDs' - Source server IDs list.
+newAssociateSourceServers ::
+  -- | 'applicationID'
+  Prelude.Text ->
+  -- | 'sourceServerIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  AssociateSourceServers
+newAssociateSourceServers
+  pApplicationID_
+  pSourceServerIDs_ =
+    AssociateSourceServers'
+      { applicationID =
+          pApplicationID_,
+        sourceServerIDs =
+          Lens.coerced Lens.# pSourceServerIDs_
+      }
+
+-- | Application ID.
+associateSourceServers_applicationID :: Lens.Lens' AssociateSourceServers Prelude.Text
+associateSourceServers_applicationID = Lens.lens (\AssociateSourceServers' {applicationID} -> applicationID) (\s@AssociateSourceServers' {} a -> s {applicationID = a} :: AssociateSourceServers)
+
+-- | Source server IDs list.
+associateSourceServers_sourceServerIDs :: Lens.Lens' AssociateSourceServers (Prelude.NonEmpty Prelude.Text)
+associateSourceServers_sourceServerIDs = Lens.lens (\AssociateSourceServers' {sourceServerIDs} -> sourceServerIDs) (\s@AssociateSourceServers' {} a -> s {sourceServerIDs = a} :: AssociateSourceServers) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AssociateSourceServers where
+  type
+    AWSResponse AssociateSourceServers =
+      AssociateSourceServersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateSourceServersResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateSourceServers where
+  hashWithSalt _salt AssociateSourceServers' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationID
+      `Prelude.hashWithSalt` sourceServerIDs
+
+instance Prelude.NFData AssociateSourceServers where
+  rnf AssociateSourceServers' {..} =
+    Prelude.rnf applicationID
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance Data.ToHeaders AssociateSourceServers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateSourceServers where
+  toJSON AssociateSourceServers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationID" Data..= applicationID),
+            Prelude.Just
+              ("sourceServerIDs" Data..= sourceServerIDs)
+          ]
+      )
+
+instance Data.ToPath AssociateSourceServers where
+  toPath = Prelude.const "/AssociateSourceServers"
+
+instance Data.ToQuery AssociateSourceServers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateSourceServersResponse' smart constructor.
+data AssociateSourceServersResponse = AssociateSourceServersResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSourceServersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateSourceServersResponse_httpStatus' - The response's http status code.
+newAssociateSourceServersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateSourceServersResponse
+newAssociateSourceServersResponse pHttpStatus_ =
+  AssociateSourceServersResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateSourceServersResponse_httpStatus :: Lens.Lens' AssociateSourceServersResponse Prelude.Int
+associateSourceServersResponse_httpStatus = Lens.lens (\AssociateSourceServersResponse' {httpStatus} -> httpStatus) (\s@AssociateSourceServersResponse' {} a -> s {httpStatus = a} :: AssociateSourceServersResponse)
+
+instance
+  Prelude.NFData
+    AssociateSourceServersResponse
+  where
+  rnf AssociateSourceServersResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/ChangeServerLifeCycleState.hs b/gen/Amazonka/MGN/ChangeServerLifeCycleState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ChangeServerLifeCycleState.hs
@@ -0,0 +1,155 @@
+{-# 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.MGN.ChangeServerLifeCycleState
+-- 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 the user to set the SourceServer.LifeCycle.state property for
+-- specific Source Server IDs to one of the following: READY_FOR_TEST or
+-- READY_FOR_CUTOVER. This command only works if the Source Server is
+-- already launchable (dataReplicationInfo.lagDuration is not null.)
+module Amazonka.MGN.ChangeServerLifeCycleState
+  ( -- * Creating a Request
+    ChangeServerLifeCycleState (..),
+    newChangeServerLifeCycleState,
+
+    -- * Request Lenses
+    changeServerLifeCycleState_lifeCycle,
+    changeServerLifeCycleState_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newChangeServerLifeCycleState' smart constructor.
+data ChangeServerLifeCycleState = ChangeServerLifeCycleState'
+  { -- | The request to change the source server migration lifecycle state.
+    lifeCycle :: ChangeServerLifeCycleStateSourceServerLifecycle,
+    -- | The request to change the source server migration lifecycle state by
+    -- source server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ChangeServerLifeCycleState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lifeCycle', 'changeServerLifeCycleState_lifeCycle' - The request to change the source server migration lifecycle state.
+--
+-- 'sourceServerID', 'changeServerLifeCycleState_sourceServerID' - The request to change the source server migration lifecycle state by
+-- source server ID.
+newChangeServerLifeCycleState ::
+  -- | 'lifeCycle'
+  ChangeServerLifeCycleStateSourceServerLifecycle ->
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  ChangeServerLifeCycleState
+newChangeServerLifeCycleState
+  pLifeCycle_
+  pSourceServerID_ =
+    ChangeServerLifeCycleState'
+      { lifeCycle =
+          pLifeCycle_,
+        sourceServerID = pSourceServerID_
+      }
+
+-- | The request to change the source server migration lifecycle state.
+changeServerLifeCycleState_lifeCycle :: Lens.Lens' ChangeServerLifeCycleState ChangeServerLifeCycleStateSourceServerLifecycle
+changeServerLifeCycleState_lifeCycle = Lens.lens (\ChangeServerLifeCycleState' {lifeCycle} -> lifeCycle) (\s@ChangeServerLifeCycleState' {} a -> s {lifeCycle = a} :: ChangeServerLifeCycleState)
+
+-- | The request to change the source server migration lifecycle state by
+-- source server ID.
+changeServerLifeCycleState_sourceServerID :: Lens.Lens' ChangeServerLifeCycleState Prelude.Text
+changeServerLifeCycleState_sourceServerID = Lens.lens (\ChangeServerLifeCycleState' {sourceServerID} -> sourceServerID) (\s@ChangeServerLifeCycleState' {} a -> s {sourceServerID = a} :: ChangeServerLifeCycleState)
+
+instance Core.AWSRequest ChangeServerLifeCycleState where
+  type
+    AWSResponse ChangeServerLifeCycleState =
+      SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable ChangeServerLifeCycleState where
+  hashWithSalt _salt ChangeServerLifeCycleState' {..} =
+    _salt
+      `Prelude.hashWithSalt` lifeCycle
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData ChangeServerLifeCycleState where
+  rnf ChangeServerLifeCycleState' {..} =
+    Prelude.rnf lifeCycle
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToHeaders ChangeServerLifeCycleState where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ChangeServerLifeCycleState where
+  toJSON ChangeServerLifeCycleState' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("lifeCycle" Data..= lifeCycle),
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath ChangeServerLifeCycleState where
+  toPath = Prelude.const "/ChangeServerLifeCycleState"
+
+instance Data.ToQuery ChangeServerLifeCycleState where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/CreateApplication.hs b/gen/Amazonka/MGN/CreateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/CreateApplication.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.CreateApplication
+-- 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 application.
+module Amazonka.MGN.CreateApplication
+  ( -- * Creating a Request
+    CreateApplication (..),
+    newCreateApplication,
+
+    -- * Request Lenses
+    createApplication_description,
+    createApplication_tags,
+    createApplication_name,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateApplication' smart constructor.
+data CreateApplication = CreateApplication'
+  { -- | Application description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Application tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Application name.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createApplication_description' - Application description.
+--
+-- 'tags', 'createApplication_tags' - Application tags.
+--
+-- 'name', 'createApplication_name' - Application name.
+newCreateApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateApplication
+newCreateApplication pName_ =
+  CreateApplication'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Application description.
+createApplication_description :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_description = Lens.lens (\CreateApplication' {description} -> description) (\s@CreateApplication' {} a -> s {description = a} :: CreateApplication)
+
+-- | Application tags.
+createApplication_tags :: Lens.Lens' CreateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApplication_tags = Lens.lens (\CreateApplication' {tags} -> tags) (\s@CreateApplication' {} a -> s {tags = a} :: CreateApplication) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Application name.
+createApplication_name :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_name = Lens.lens (\CreateApplication' {name} -> name) (\s@CreateApplication' {} a -> s {name = a} :: CreateApplication)
+
+instance Core.AWSRequest CreateApplication where
+  type AWSResponse CreateApplication = Application
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateApplication where
+  hashWithSalt _salt CreateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateApplication where
+  rnf CreateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApplication where
+  toJSON CreateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateApplication where
+  toPath = Prelude.const "/CreateApplication"
+
+instance Data.ToQuery CreateApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/CreateLaunchConfigurationTemplate.hs b/gen/Amazonka/MGN/CreateLaunchConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/CreateLaunchConfigurationTemplate.hs
@@ -0,0 +1,341 @@
+{-# 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.MGN.CreateLaunchConfigurationTemplate
+-- 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 Launch Configuration Template.
+module Amazonka.MGN.CreateLaunchConfigurationTemplate
+  ( -- * Creating a Request
+    CreateLaunchConfigurationTemplate (..),
+    newCreateLaunchConfigurationTemplate,
+
+    -- * Request Lenses
+    createLaunchConfigurationTemplate_associatePublicIpAddress,
+    createLaunchConfigurationTemplate_bootMode,
+    createLaunchConfigurationTemplate_copyPrivateIp,
+    createLaunchConfigurationTemplate_copyTags,
+    createLaunchConfigurationTemplate_enableMapAutoTagging,
+    createLaunchConfigurationTemplate_largeVolumeConf,
+    createLaunchConfigurationTemplate_launchDisposition,
+    createLaunchConfigurationTemplate_licensing,
+    createLaunchConfigurationTemplate_mapAutoTaggingMpeID,
+    createLaunchConfigurationTemplate_postLaunchActions,
+    createLaunchConfigurationTemplate_smallVolumeConf,
+    createLaunchConfigurationTemplate_smallVolumeMaxSize,
+    createLaunchConfigurationTemplate_tags,
+    createLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+
+    -- * Destructuring the Response
+    LaunchConfigurationTemplate (..),
+    newLaunchConfigurationTemplate,
+
+    -- * Response Lenses
+    launchConfigurationTemplate_arn,
+    launchConfigurationTemplate_associatePublicIpAddress,
+    launchConfigurationTemplate_bootMode,
+    launchConfigurationTemplate_copyPrivateIp,
+    launchConfigurationTemplate_copyTags,
+    launchConfigurationTemplate_ec2LaunchTemplateID,
+    launchConfigurationTemplate_enableMapAutoTagging,
+    launchConfigurationTemplate_largeVolumeConf,
+    launchConfigurationTemplate_launchDisposition,
+    launchConfigurationTemplate_licensing,
+    launchConfigurationTemplate_mapAutoTaggingMpeID,
+    launchConfigurationTemplate_postLaunchActions,
+    launchConfigurationTemplate_smallVolumeConf,
+    launchConfigurationTemplate_smallVolumeMaxSize,
+    launchConfigurationTemplate_tags,
+    launchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_launchConfigurationTemplateID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLaunchConfigurationTemplate' smart constructor.
+data CreateLaunchConfigurationTemplate = CreateLaunchConfigurationTemplate'
+  { -- | Associate public Ip address.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Launch configuration template boot mode.
+    bootMode :: Prelude.Maybe BootMode,
+    -- | Copy private Ip.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Copy tags.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | Enable map auto tagging.
+    enableMapAutoTagging :: Prelude.Maybe Prelude.Bool,
+    -- | Large volume config.
+    largeVolumeConf :: Prelude.Maybe LaunchTemplateDiskConf,
+    -- | Launch disposition.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    licensing :: Prelude.Maybe Licensing,
+    -- | Launch configuration template map auto tagging MPE ID.
+    mapAutoTaggingMpeID :: Prelude.Maybe Prelude.Text,
+    -- | Launch configuration template post launch actions.
+    postLaunchActions :: Prelude.Maybe PostLaunchActions,
+    -- | Small volume config.
+    smallVolumeConf :: Prelude.Maybe LaunchTemplateDiskConf,
+    -- | Small volume maximum size.
+    smallVolumeMaxSize :: Prelude.Maybe Prelude.Natural,
+    -- | Request to associate tags during creation of a Launch Configuration
+    -- Template.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Target instance type right-sizing method.
+    targetInstanceTypeRightSizingMethod :: Prelude.Maybe TargetInstanceTypeRightSizingMethod
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatePublicIpAddress', 'createLaunchConfigurationTemplate_associatePublicIpAddress' - Associate public Ip address.
+--
+-- 'bootMode', 'createLaunchConfigurationTemplate_bootMode' - Launch configuration template boot mode.
+--
+-- 'copyPrivateIp', 'createLaunchConfigurationTemplate_copyPrivateIp' - Copy private Ip.
+--
+-- 'copyTags', 'createLaunchConfigurationTemplate_copyTags' - Copy tags.
+--
+-- 'enableMapAutoTagging', 'createLaunchConfigurationTemplate_enableMapAutoTagging' - Enable map auto tagging.
+--
+-- 'largeVolumeConf', 'createLaunchConfigurationTemplate_largeVolumeConf' - Large volume config.
+--
+-- 'launchDisposition', 'createLaunchConfigurationTemplate_launchDisposition' - Launch disposition.
+--
+-- 'licensing', 'createLaunchConfigurationTemplate_licensing' - Undocumented member.
+--
+-- 'mapAutoTaggingMpeID', 'createLaunchConfigurationTemplate_mapAutoTaggingMpeID' - Launch configuration template map auto tagging MPE ID.
+--
+-- 'postLaunchActions', 'createLaunchConfigurationTemplate_postLaunchActions' - Launch configuration template post launch actions.
+--
+-- 'smallVolumeConf', 'createLaunchConfigurationTemplate_smallVolumeConf' - Small volume config.
+--
+-- 'smallVolumeMaxSize', 'createLaunchConfigurationTemplate_smallVolumeMaxSize' - Small volume maximum size.
+--
+-- 'tags', 'createLaunchConfigurationTemplate_tags' - Request to associate tags during creation of a Launch Configuration
+-- Template.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'createLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod' - Target instance type right-sizing method.
+newCreateLaunchConfigurationTemplate ::
+  CreateLaunchConfigurationTemplate
+newCreateLaunchConfigurationTemplate =
+  CreateLaunchConfigurationTemplate'
+    { associatePublicIpAddress =
+        Prelude.Nothing,
+      bootMode = Prelude.Nothing,
+      copyPrivateIp = Prelude.Nothing,
+      copyTags = Prelude.Nothing,
+      enableMapAutoTagging = Prelude.Nothing,
+      largeVolumeConf = Prelude.Nothing,
+      launchDisposition = Prelude.Nothing,
+      licensing = Prelude.Nothing,
+      mapAutoTaggingMpeID = Prelude.Nothing,
+      postLaunchActions = Prelude.Nothing,
+      smallVolumeConf = Prelude.Nothing,
+      smallVolumeMaxSize = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      targetInstanceTypeRightSizingMethod =
+        Prelude.Nothing
+    }
+
+-- | Associate public Ip address.
+createLaunchConfigurationTemplate_associatePublicIpAddress :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+createLaunchConfigurationTemplate_associatePublicIpAddress = Lens.lens (\CreateLaunchConfigurationTemplate' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@CreateLaunchConfigurationTemplate' {} a -> s {associatePublicIpAddress = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Launch configuration template boot mode.
+createLaunchConfigurationTemplate_bootMode :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe BootMode)
+createLaunchConfigurationTemplate_bootMode = Lens.lens (\CreateLaunchConfigurationTemplate' {bootMode} -> bootMode) (\s@CreateLaunchConfigurationTemplate' {} a -> s {bootMode = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Copy private Ip.
+createLaunchConfigurationTemplate_copyPrivateIp :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+createLaunchConfigurationTemplate_copyPrivateIp = Lens.lens (\CreateLaunchConfigurationTemplate' {copyPrivateIp} -> copyPrivateIp) (\s@CreateLaunchConfigurationTemplate' {} a -> s {copyPrivateIp = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Copy tags.
+createLaunchConfigurationTemplate_copyTags :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+createLaunchConfigurationTemplate_copyTags = Lens.lens (\CreateLaunchConfigurationTemplate' {copyTags} -> copyTags) (\s@CreateLaunchConfigurationTemplate' {} a -> s {copyTags = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Enable map auto tagging.
+createLaunchConfigurationTemplate_enableMapAutoTagging :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+createLaunchConfigurationTemplate_enableMapAutoTagging = Lens.lens (\CreateLaunchConfigurationTemplate' {enableMapAutoTagging} -> enableMapAutoTagging) (\s@CreateLaunchConfigurationTemplate' {} a -> s {enableMapAutoTagging = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Large volume config.
+createLaunchConfigurationTemplate_largeVolumeConf :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe LaunchTemplateDiskConf)
+createLaunchConfigurationTemplate_largeVolumeConf = Lens.lens (\CreateLaunchConfigurationTemplate' {largeVolumeConf} -> largeVolumeConf) (\s@CreateLaunchConfigurationTemplate' {} a -> s {largeVolumeConf = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Launch disposition.
+createLaunchConfigurationTemplate_launchDisposition :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe LaunchDisposition)
+createLaunchConfigurationTemplate_launchDisposition = Lens.lens (\CreateLaunchConfigurationTemplate' {launchDisposition} -> launchDisposition) (\s@CreateLaunchConfigurationTemplate' {} a -> s {launchDisposition = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Undocumented member.
+createLaunchConfigurationTemplate_licensing :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Licensing)
+createLaunchConfigurationTemplate_licensing = Lens.lens (\CreateLaunchConfigurationTemplate' {licensing} -> licensing) (\s@CreateLaunchConfigurationTemplate' {} a -> s {licensing = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Launch configuration template map auto tagging MPE ID.
+createLaunchConfigurationTemplate_mapAutoTaggingMpeID :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Text)
+createLaunchConfigurationTemplate_mapAutoTaggingMpeID = Lens.lens (\CreateLaunchConfigurationTemplate' {mapAutoTaggingMpeID} -> mapAutoTaggingMpeID) (\s@CreateLaunchConfigurationTemplate' {} a -> s {mapAutoTaggingMpeID = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Launch configuration template post launch actions.
+createLaunchConfigurationTemplate_postLaunchActions :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe PostLaunchActions)
+createLaunchConfigurationTemplate_postLaunchActions = Lens.lens (\CreateLaunchConfigurationTemplate' {postLaunchActions} -> postLaunchActions) (\s@CreateLaunchConfigurationTemplate' {} a -> s {postLaunchActions = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Small volume config.
+createLaunchConfigurationTemplate_smallVolumeConf :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe LaunchTemplateDiskConf)
+createLaunchConfigurationTemplate_smallVolumeConf = Lens.lens (\CreateLaunchConfigurationTemplate' {smallVolumeConf} -> smallVolumeConf) (\s@CreateLaunchConfigurationTemplate' {} a -> s {smallVolumeConf = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Small volume maximum size.
+createLaunchConfigurationTemplate_smallVolumeMaxSize :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+createLaunchConfigurationTemplate_smallVolumeMaxSize = Lens.lens (\CreateLaunchConfigurationTemplate' {smallVolumeMaxSize} -> smallVolumeMaxSize) (\s@CreateLaunchConfigurationTemplate' {} a -> s {smallVolumeMaxSize = a} :: CreateLaunchConfigurationTemplate)
+
+-- | Request to associate tags during creation of a Launch Configuration
+-- Template.
+createLaunchConfigurationTemplate_tags :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createLaunchConfigurationTemplate_tags = Lens.lens (\CreateLaunchConfigurationTemplate' {tags} -> tags) (\s@CreateLaunchConfigurationTemplate' {} a -> s {tags = a} :: CreateLaunchConfigurationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Target instance type right-sizing method.
+createLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod :: Lens.Lens' CreateLaunchConfigurationTemplate (Prelude.Maybe TargetInstanceTypeRightSizingMethod)
+createLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod = Lens.lens (\CreateLaunchConfigurationTemplate' {targetInstanceTypeRightSizingMethod} -> targetInstanceTypeRightSizingMethod) (\s@CreateLaunchConfigurationTemplate' {} a -> s {targetInstanceTypeRightSizingMethod = a} :: CreateLaunchConfigurationTemplate)
+
+instance
+  Core.AWSRequest
+    CreateLaunchConfigurationTemplate
+  where
+  type
+    AWSResponse CreateLaunchConfigurationTemplate =
+      LaunchConfigurationTemplate
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance
+  Prelude.Hashable
+    CreateLaunchConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    CreateLaunchConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` associatePublicIpAddress
+        `Prelude.hashWithSalt` bootMode
+        `Prelude.hashWithSalt` copyPrivateIp
+        `Prelude.hashWithSalt` copyTags
+        `Prelude.hashWithSalt` enableMapAutoTagging
+        `Prelude.hashWithSalt` largeVolumeConf
+        `Prelude.hashWithSalt` launchDisposition
+        `Prelude.hashWithSalt` licensing
+        `Prelude.hashWithSalt` mapAutoTaggingMpeID
+        `Prelude.hashWithSalt` postLaunchActions
+        `Prelude.hashWithSalt` smallVolumeConf
+        `Prelude.hashWithSalt` smallVolumeMaxSize
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+
+instance
+  Prelude.NFData
+    CreateLaunchConfigurationTemplate
+  where
+  rnf CreateLaunchConfigurationTemplate' {..} =
+    Prelude.rnf associatePublicIpAddress
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf enableMapAutoTagging
+      `Prelude.seq` Prelude.rnf largeVolumeConf
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf mapAutoTaggingMpeID
+      `Prelude.seq` Prelude.rnf postLaunchActions
+      `Prelude.seq` Prelude.rnf smallVolumeConf
+      `Prelude.seq` Prelude.rnf smallVolumeMaxSize
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf
+        targetInstanceTypeRightSizingMethod
+
+instance
+  Data.ToHeaders
+    CreateLaunchConfigurationTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    CreateLaunchConfigurationTemplate
+  where
+  toJSON CreateLaunchConfigurationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associatePublicIpAddress" Data..=)
+              Prelude.<$> associatePublicIpAddress,
+            ("bootMode" Data..=) Prelude.<$> bootMode,
+            ("copyPrivateIp" Data..=) Prelude.<$> copyPrivateIp,
+            ("copyTags" Data..=) Prelude.<$> copyTags,
+            ("enableMapAutoTagging" Data..=)
+              Prelude.<$> enableMapAutoTagging,
+            ("largeVolumeConf" Data..=)
+              Prelude.<$> largeVolumeConf,
+            ("launchDisposition" Data..=)
+              Prelude.<$> launchDisposition,
+            ("licensing" Data..=) Prelude.<$> licensing,
+            ("mapAutoTaggingMpeID" Data..=)
+              Prelude.<$> mapAutoTaggingMpeID,
+            ("postLaunchActions" Data..=)
+              Prelude.<$> postLaunchActions,
+            ("smallVolumeConf" Data..=)
+              Prelude.<$> smallVolumeConf,
+            ("smallVolumeMaxSize" Data..=)
+              Prelude.<$> smallVolumeMaxSize,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("targetInstanceTypeRightSizingMethod" Data..=)
+              Prelude.<$> targetInstanceTypeRightSizingMethod
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateLaunchConfigurationTemplate
+  where
+  toPath =
+    Prelude.const "/CreateLaunchConfigurationTemplate"
+
+instance
+  Data.ToQuery
+    CreateLaunchConfigurationTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/CreateReplicationConfigurationTemplate.hs b/gen/Amazonka/MGN/CreateReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/CreateReplicationConfigurationTemplate.hs
@@ -0,0 +1,407 @@
+{-# 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.MGN.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.MGN.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_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_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.MGN.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'
+  { -- | Request to configure an EBS encryption key during Replication Settings
+    -- template creation.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Request to configure tags during Replication Settings template creation.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Request to associate the default Application Migration Service Security
+    -- group with the Replication Settings template.
+    associateDefaultSecurityGroup :: Prelude.Bool,
+    -- | Request to configure bandwidth throttling during Replication Settings
+    -- template creation.
+    bandwidthThrottling :: Prelude.Natural,
+    -- | Request to create Public IP during Replication Settings template
+    -- creation.
+    createPublicIP :: Prelude.Bool,
+    -- | Request to configure data plane routing during Replication Settings
+    -- template creation.
+    dataPlaneRouting :: ReplicationConfigurationDataPlaneRouting,
+    -- | Request to configure the default large staging disk EBS volume type
+    -- during Replication Settings template creation.
+    defaultLargeStagingDiskType :: ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | Request to configure EBS encryption during Replication Settings template
+    -- creation.
+    ebsEncryption :: ReplicationConfigurationEbsEncryption,
+    -- | Request to configure the Replication Server instance type during
+    -- Replication Settings template creation.
+    replicationServerInstanceType :: Prelude.Text,
+    -- | Request to configure the Replication Server Security group ID during
+    -- Replication Settings template creation.
+    replicationServersSecurityGroupsIDs :: [Prelude.Text],
+    -- | Request to configure the Staging Area subnet ID during Replication
+    -- Settings template creation.
+    stagingAreaSubnetId :: Prelude.Text,
+    -- | Request to configure Staging Area tags during Replication Settings
+    -- template creation.
+    stagingAreaTags :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Request to use Dedicated Replication Servers during Replication Settings
+    -- template creation.
+    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' - Request to configure an EBS encryption key during Replication Settings
+-- template creation.
+--
+-- 'tags', 'createReplicationConfigurationTemplate_tags' - Request to configure tags during Replication Settings template creation.
+--
+-- 'associateDefaultSecurityGroup', 'createReplicationConfigurationTemplate_associateDefaultSecurityGroup' - Request to associate the default Application Migration Service Security
+-- group with the Replication Settings template.
+--
+-- 'bandwidthThrottling', 'createReplicationConfigurationTemplate_bandwidthThrottling' - Request to configure bandwidth throttling during Replication Settings
+-- template creation.
+--
+-- 'createPublicIP', 'createReplicationConfigurationTemplate_createPublicIP' - Request to create Public IP during Replication Settings template
+-- creation.
+--
+-- 'dataPlaneRouting', 'createReplicationConfigurationTemplate_dataPlaneRouting' - Request to configure data plane routing during Replication Settings
+-- template creation.
+--
+-- 'defaultLargeStagingDiskType', 'createReplicationConfigurationTemplate_defaultLargeStagingDiskType' - Request to configure the default large staging disk EBS volume type
+-- during Replication Settings template creation.
+--
+-- 'ebsEncryption', 'createReplicationConfigurationTemplate_ebsEncryption' - Request to configure EBS encryption during Replication Settings template
+-- creation.
+--
+-- 'replicationServerInstanceType', 'createReplicationConfigurationTemplate_replicationServerInstanceType' - Request to configure the Replication Server instance type during
+-- Replication Settings template creation.
+--
+-- 'replicationServersSecurityGroupsIDs', 'createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - Request to configure the Replication Server Security group ID during
+-- Replication Settings template creation.
+--
+-- 'stagingAreaSubnetId', 'createReplicationConfigurationTemplate_stagingAreaSubnetId' - Request to configure the Staging Area subnet ID during Replication
+-- Settings template creation.
+--
+-- 'stagingAreaTags', 'createReplicationConfigurationTemplate_stagingAreaTags' - Request to configure Staging Area tags during Replication Settings
+-- template creation.
+--
+-- 'useDedicatedReplicationServer', 'createReplicationConfigurationTemplate_useDedicatedReplicationServer' - Request to use Dedicated Replication Servers during Replication Settings
+-- template creation.
+newCreateReplicationConfigurationTemplate ::
+  -- | 'associateDefaultSecurityGroup'
+  Prelude.Bool ->
+  -- | 'bandwidthThrottling'
+  Prelude.Natural ->
+  -- | 'createPublicIP'
+  Prelude.Bool ->
+  -- | 'dataPlaneRouting'
+  ReplicationConfigurationDataPlaneRouting ->
+  -- | 'defaultLargeStagingDiskType'
+  ReplicationConfigurationDefaultLargeStagingDiskType ->
+  -- | 'ebsEncryption'
+  ReplicationConfigurationEbsEncryption ->
+  -- | 'replicationServerInstanceType'
+  Prelude.Text ->
+  -- | 'stagingAreaSubnetId'
+  Prelude.Text ->
+  -- | 'useDedicatedReplicationServer'
+  Prelude.Bool ->
+  CreateReplicationConfigurationTemplate
+newCreateReplicationConfigurationTemplate
+  pAssociateDefaultSecurityGroup_
+  pBandwidthThrottling_
+  pCreatePublicIP_
+  pDataPlaneRouting_
+  pDefaultLargeStagingDiskType_
+  pEbsEncryption_
+  pReplicationServerInstanceType_
+  pStagingAreaSubnetId_
+  pUseDedicatedReplicationServer_ =
+    CreateReplicationConfigurationTemplate'
+      { ebsEncryptionKeyArn =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        associateDefaultSecurityGroup =
+          pAssociateDefaultSecurityGroup_,
+        bandwidthThrottling =
+          pBandwidthThrottling_,
+        createPublicIP = pCreatePublicIP_,
+        dataPlaneRouting =
+          pDataPlaneRouting_,
+        defaultLargeStagingDiskType =
+          pDefaultLargeStagingDiskType_,
+        ebsEncryption = pEbsEncryption_,
+        replicationServerInstanceType =
+          pReplicationServerInstanceType_,
+        replicationServersSecurityGroupsIDs =
+          Prelude.mempty,
+        stagingAreaSubnetId =
+          pStagingAreaSubnetId_,
+        stagingAreaTags = Prelude.mempty,
+        useDedicatedReplicationServer =
+          pUseDedicatedReplicationServer_
+      }
+
+-- | Request to configure an EBS encryption key during Replication Settings
+-- template creation.
+createReplicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' CreateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+createReplicationConfigurationTemplate_ebsEncryptionKeyArn = Lens.lens (\CreateReplicationConfigurationTemplate' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@CreateReplicationConfigurationTemplate' {} a -> s {ebsEncryptionKeyArn = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure tags during Replication Settings template creation.
+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)
+
+-- | Request to associate the default Application Migration Service Security
+-- group with the Replication Settings template.
+createReplicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
+createReplicationConfigurationTemplate_associateDefaultSecurityGroup = Lens.lens (\CreateReplicationConfigurationTemplate' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@CreateReplicationConfigurationTemplate' {} a -> s {associateDefaultSecurityGroup = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure bandwidth throttling during Replication Settings
+-- template creation.
+createReplicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Natural
+createReplicationConfigurationTemplate_bandwidthThrottling = Lens.lens (\CreateReplicationConfigurationTemplate' {bandwidthThrottling} -> bandwidthThrottling) (\s@CreateReplicationConfigurationTemplate' {} a -> s {bandwidthThrottling = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to create Public IP during Replication Settings template
+-- creation.
+createReplicationConfigurationTemplate_createPublicIP :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Bool
+createReplicationConfigurationTemplate_createPublicIP = Lens.lens (\CreateReplicationConfigurationTemplate' {createPublicIP} -> createPublicIP) (\s@CreateReplicationConfigurationTemplate' {} a -> s {createPublicIP = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure data plane routing during Replication Settings
+-- template creation.
+createReplicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationDataPlaneRouting
+createReplicationConfigurationTemplate_dataPlaneRouting = Lens.lens (\CreateReplicationConfigurationTemplate' {dataPlaneRouting} -> dataPlaneRouting) (\s@CreateReplicationConfigurationTemplate' {} a -> s {dataPlaneRouting = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure the default large staging disk EBS volume type
+-- during Replication Settings template creation.
+createReplicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationDefaultLargeStagingDiskType
+createReplicationConfigurationTemplate_defaultLargeStagingDiskType = Lens.lens (\CreateReplicationConfigurationTemplate' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@CreateReplicationConfigurationTemplate' {} a -> s {defaultLargeStagingDiskType = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure EBS encryption during Replication Settings template
+-- creation.
+createReplicationConfigurationTemplate_ebsEncryption :: Lens.Lens' CreateReplicationConfigurationTemplate ReplicationConfigurationEbsEncryption
+createReplicationConfigurationTemplate_ebsEncryption = Lens.lens (\CreateReplicationConfigurationTemplate' {ebsEncryption} -> ebsEncryption) (\s@CreateReplicationConfigurationTemplate' {} a -> s {ebsEncryption = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure the Replication Server instance type during
+-- Replication Settings template creation.
+createReplicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Text
+createReplicationConfigurationTemplate_replicationServerInstanceType = Lens.lens (\CreateReplicationConfigurationTemplate' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@CreateReplicationConfigurationTemplate' {} a -> s {replicationServerInstanceType = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure the Replication Server Security group ID during
+-- Replication Settings template creation.
+createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs :: Lens.Lens' CreateReplicationConfigurationTemplate [Prelude.Text]
+createReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs = Lens.lens (\CreateReplicationConfigurationTemplate' {replicationServersSecurityGroupsIDs} -> replicationServersSecurityGroupsIDs) (\s@CreateReplicationConfigurationTemplate' {} a -> s {replicationServersSecurityGroupsIDs = a} :: CreateReplicationConfigurationTemplate) Prelude.. Lens.coerced
+
+-- | Request to configure the Staging Area subnet ID during Replication
+-- Settings template creation.
+createReplicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' CreateReplicationConfigurationTemplate Prelude.Text
+createReplicationConfigurationTemplate_stagingAreaSubnetId = Lens.lens (\CreateReplicationConfigurationTemplate' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@CreateReplicationConfigurationTemplate' {} a -> s {stagingAreaSubnetId = a} :: CreateReplicationConfigurationTemplate)
+
+-- | Request to configure Staging Area tags during Replication Settings
+-- template creation.
+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
+
+-- | Request to use Dedicated Replication Servers during Replication Settings
+-- template creation.
+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` 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 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
+              ( "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/MGN/CreateWave.hs b/gen/Amazonka/MGN/CreateWave.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/CreateWave.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.CreateWave
+-- 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 wave.
+module Amazonka.MGN.CreateWave
+  ( -- * Creating a Request
+    CreateWave (..),
+    newCreateWave,
+
+    -- * Request Lenses
+    createWave_description,
+    createWave_tags,
+    createWave_name,
+
+    -- * Destructuring the Response
+    Wave (..),
+    newWave,
+
+    -- * Response Lenses
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWave' smart constructor.
+data CreateWave = CreateWave'
+  { -- | Wave description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Wave tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Wave name.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWave' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createWave_description' - Wave description.
+--
+-- 'tags', 'createWave_tags' - Wave tags.
+--
+-- 'name', 'createWave_name' - Wave name.
+newCreateWave ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateWave
+newCreateWave pName_ =
+  CreateWave'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Wave description.
+createWave_description :: Lens.Lens' CreateWave (Prelude.Maybe Prelude.Text)
+createWave_description = Lens.lens (\CreateWave' {description} -> description) (\s@CreateWave' {} a -> s {description = a} :: CreateWave)
+
+-- | Wave tags.
+createWave_tags :: Lens.Lens' CreateWave (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWave_tags = Lens.lens (\CreateWave' {tags} -> tags) (\s@CreateWave' {} a -> s {tags = a} :: CreateWave) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Wave name.
+createWave_name :: Lens.Lens' CreateWave Prelude.Text
+createWave_name = Lens.lens (\CreateWave' {name} -> name) (\s@CreateWave' {} a -> s {name = a} :: CreateWave)
+
+instance Core.AWSRequest CreateWave where
+  type AWSResponse CreateWave = Wave
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable CreateWave where
+  hashWithSalt _salt CreateWave' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateWave where
+  rnf CreateWave' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateWave where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWave where
+  toJSON CreateWave' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateWave where
+  toPath = Prelude.const "/CreateWave"
+
+instance Data.ToQuery CreateWave where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/DeleteApplication.hs b/gen/Amazonka/MGN/DeleteApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DeleteApplication.hs
@@ -0,0 +1,155 @@
+{-# 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.MGN.DeleteApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete application.
+module Amazonka.MGN.DeleteApplication
+  ( -- * Creating a Request
+    DeleteApplication (..),
+    newDeleteApplication,
+
+    -- * Request Lenses
+    deleteApplication_applicationID,
+
+    -- * Destructuring the Response
+    DeleteApplicationResponse (..),
+    newDeleteApplicationResponse,
+
+    -- * Response Lenses
+    deleteApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApplication' smart constructor.
+data DeleteApplication = DeleteApplication'
+  { -- | Application ID.
+    applicationID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationID', 'deleteApplication_applicationID' - Application ID.
+newDeleteApplication ::
+  -- | 'applicationID'
+  Prelude.Text ->
+  DeleteApplication
+newDeleteApplication pApplicationID_ =
+  DeleteApplication' {applicationID = pApplicationID_}
+
+-- | Application ID.
+deleteApplication_applicationID :: Lens.Lens' DeleteApplication Prelude.Text
+deleteApplication_applicationID = Lens.lens (\DeleteApplication' {applicationID} -> applicationID) (\s@DeleteApplication' {} a -> s {applicationID = a} :: DeleteApplication)
+
+instance Core.AWSRequest DeleteApplication where
+  type
+    AWSResponse DeleteApplication =
+      DeleteApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteApplication where
+  hashWithSalt _salt DeleteApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationID
+
+instance Prelude.NFData DeleteApplication where
+  rnf DeleteApplication' {..} =
+    Prelude.rnf applicationID
+
+instance Data.ToHeaders DeleteApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteApplication where
+  toJSON DeleteApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationID" Data..= applicationID)
+          ]
+      )
+
+instance Data.ToPath DeleteApplication where
+  toPath = Prelude.const "/DeleteApplication"
+
+instance Data.ToQuery DeleteApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApplicationResponse' smart constructor.
+data DeleteApplicationResponse = DeleteApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteApplicationResponse_httpStatus' - The response's http status code.
+newDeleteApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteApplicationResponse
+newDeleteApplicationResponse pHttpStatus_ =
+  DeleteApplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteApplicationResponse_httpStatus :: Lens.Lens' DeleteApplicationResponse Prelude.Int
+deleteApplicationResponse_httpStatus = Lens.lens (\DeleteApplicationResponse' {httpStatus} -> httpStatus) (\s@DeleteApplicationResponse' {} a -> s {httpStatus = a} :: DeleteApplicationResponse)
+
+instance Prelude.NFData DeleteApplicationResponse where
+  rnf DeleteApplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DeleteJob.hs b/gen/Amazonka/MGN/DeleteJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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.MGN.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'
+  { -- | Request to delete Job from service by Job ID.
+    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' - Request to delete Job from service by Job ID.
+newDeleteJob ::
+  -- | 'jobID'
+  Prelude.Text ->
+  DeleteJob
+newDeleteJob pJobID_ = DeleteJob' {jobID = pJobID_}
+
+-- | Request to delete Job from service by Job ID.
+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/MGN/DeleteLaunchConfigurationTemplate.hs b/gen/Amazonka/MGN/DeleteLaunchConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DeleteLaunchConfigurationTemplate.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.MGN.DeleteLaunchConfigurationTemplate
+-- 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 Launch Configuration Template by ID.
+module Amazonka.MGN.DeleteLaunchConfigurationTemplate
+  ( -- * Creating a Request
+    DeleteLaunchConfigurationTemplate (..),
+    newDeleteLaunchConfigurationTemplate,
+
+    -- * Request Lenses
+    deleteLaunchConfigurationTemplate_launchConfigurationTemplateID,
+
+    -- * Destructuring the Response
+    DeleteLaunchConfigurationTemplateResponse (..),
+    newDeleteLaunchConfigurationTemplateResponse,
+
+    -- * Response Lenses
+    deleteLaunchConfigurationTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLaunchConfigurationTemplate' smart constructor.
+data DeleteLaunchConfigurationTemplate = DeleteLaunchConfigurationTemplate'
+  { -- | ID of resource to be deleted.
+    launchConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchConfigurationTemplateID', 'deleteLaunchConfigurationTemplate_launchConfigurationTemplateID' - ID of resource to be deleted.
+newDeleteLaunchConfigurationTemplate ::
+  -- | 'launchConfigurationTemplateID'
+  Prelude.Text ->
+  DeleteLaunchConfigurationTemplate
+newDeleteLaunchConfigurationTemplate
+  pLaunchConfigurationTemplateID_ =
+    DeleteLaunchConfigurationTemplate'
+      { launchConfigurationTemplateID =
+          pLaunchConfigurationTemplateID_
+      }
+
+-- | ID of resource to be deleted.
+deleteLaunchConfigurationTemplate_launchConfigurationTemplateID :: Lens.Lens' DeleteLaunchConfigurationTemplate Prelude.Text
+deleteLaunchConfigurationTemplate_launchConfigurationTemplateID = Lens.lens (\DeleteLaunchConfigurationTemplate' {launchConfigurationTemplateID} -> launchConfigurationTemplateID) (\s@DeleteLaunchConfigurationTemplate' {} a -> s {launchConfigurationTemplateID = a} :: DeleteLaunchConfigurationTemplate)
+
+instance
+  Core.AWSRequest
+    DeleteLaunchConfigurationTemplate
+  where
+  type
+    AWSResponse DeleteLaunchConfigurationTemplate =
+      DeleteLaunchConfigurationTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteLaunchConfigurationTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteLaunchConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    DeleteLaunchConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchConfigurationTemplateID
+
+instance
+  Prelude.NFData
+    DeleteLaunchConfigurationTemplate
+  where
+  rnf DeleteLaunchConfigurationTemplate' {..} =
+    Prelude.rnf launchConfigurationTemplateID
+
+instance
+  Data.ToHeaders
+    DeleteLaunchConfigurationTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DeleteLaunchConfigurationTemplate
+  where
+  toJSON DeleteLaunchConfigurationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "launchConfigurationTemplateID"
+                  Data..= launchConfigurationTemplateID
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DeleteLaunchConfigurationTemplate
+  where
+  toPath =
+    Prelude.const "/DeleteLaunchConfigurationTemplate"
+
+instance
+  Data.ToQuery
+    DeleteLaunchConfigurationTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLaunchConfigurationTemplateResponse' smart constructor.
+data DeleteLaunchConfigurationTemplateResponse = DeleteLaunchConfigurationTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchConfigurationTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteLaunchConfigurationTemplateResponse_httpStatus' - The response's http status code.
+newDeleteLaunchConfigurationTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLaunchConfigurationTemplateResponse
+newDeleteLaunchConfigurationTemplateResponse
+  pHttpStatus_ =
+    DeleteLaunchConfigurationTemplateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteLaunchConfigurationTemplateResponse_httpStatus :: Lens.Lens' DeleteLaunchConfigurationTemplateResponse Prelude.Int
+deleteLaunchConfigurationTemplateResponse_httpStatus = Lens.lens (\DeleteLaunchConfigurationTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteLaunchConfigurationTemplateResponse' {} a -> s {httpStatus = a} :: DeleteLaunchConfigurationTemplateResponse)
+
+instance
+  Prelude.NFData
+    DeleteLaunchConfigurationTemplateResponse
+  where
+  rnf DeleteLaunchConfigurationTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DeleteReplicationConfigurationTemplate.hs b/gen/Amazonka/MGN/DeleteReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DeleteReplicationConfigurationTemplate.hs
@@ -0,0 +1,196 @@
+{-# 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.MGN.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.MGN.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.MGN.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'
+  { -- | Request to delete Replication Configuration Template from service by
+    -- Replication Configuration Template ID.
+    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' - Request to delete Replication Configuration Template from service by
+-- Replication Configuration Template ID.
+newDeleteReplicationConfigurationTemplate ::
+  -- | 'replicationConfigurationTemplateID'
+  Prelude.Text ->
+  DeleteReplicationConfigurationTemplate
+newDeleteReplicationConfigurationTemplate
+  pReplicationConfigurationTemplateID_ =
+    DeleteReplicationConfigurationTemplate'
+      { replicationConfigurationTemplateID =
+          pReplicationConfigurationTemplateID_
+      }
+
+-- | Request to delete Replication Configuration Template from service by
+-- Replication Configuration Template ID.
+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/MGN/DeleteSourceServer.hs b/gen/Amazonka/MGN/DeleteSourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DeleteSourceServer.hs
@@ -0,0 +1,158 @@
+{-# 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.MGN.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.
+module Amazonka.MGN.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.MGN.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'
+  { -- | Request to delete Source Server from service by Server ID.
+    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' - Request to delete Source Server from service by Server ID.
+newDeleteSourceServer ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  DeleteSourceServer
+newDeleteSourceServer pSourceServerID_ =
+  DeleteSourceServer'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | Request to delete Source Server from service by Server ID.
+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/MGN/DeleteVcenterClient.hs b/gen/Amazonka/MGN/DeleteVcenterClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DeleteVcenterClient.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.DeleteVcenterClient
+-- 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 given vCenter client by ID.
+module Amazonka.MGN.DeleteVcenterClient
+  ( -- * Creating a Request
+    DeleteVcenterClient (..),
+    newDeleteVcenterClient,
+
+    -- * Request Lenses
+    deleteVcenterClient_vcenterClientID,
+
+    -- * Destructuring the Response
+    DeleteVcenterClientResponse (..),
+    newDeleteVcenterClientResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVcenterClient' smart constructor.
+data DeleteVcenterClient = DeleteVcenterClient'
+  { -- | ID of resource to be deleted.
+    vcenterClientID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVcenterClient' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vcenterClientID', 'deleteVcenterClient_vcenterClientID' - ID of resource to be deleted.
+newDeleteVcenterClient ::
+  -- | 'vcenterClientID'
+  Prelude.Text ->
+  DeleteVcenterClient
+newDeleteVcenterClient pVcenterClientID_ =
+  DeleteVcenterClient'
+    { vcenterClientID =
+        pVcenterClientID_
+    }
+
+-- | ID of resource to be deleted.
+deleteVcenterClient_vcenterClientID :: Lens.Lens' DeleteVcenterClient Prelude.Text
+deleteVcenterClient_vcenterClientID = Lens.lens (\DeleteVcenterClient' {vcenterClientID} -> vcenterClientID) (\s@DeleteVcenterClient' {} a -> s {vcenterClientID = a} :: DeleteVcenterClient)
+
+instance Core.AWSRequest DeleteVcenterClient where
+  type
+    AWSResponse DeleteVcenterClient =
+      DeleteVcenterClientResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteVcenterClientResponse'
+
+instance Prelude.Hashable DeleteVcenterClient where
+  hashWithSalt _salt DeleteVcenterClient' {..} =
+    _salt `Prelude.hashWithSalt` vcenterClientID
+
+instance Prelude.NFData DeleteVcenterClient where
+  rnf DeleteVcenterClient' {..} =
+    Prelude.rnf vcenterClientID
+
+instance Data.ToHeaders DeleteVcenterClient where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteVcenterClient where
+  toJSON DeleteVcenterClient' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("vcenterClientID" Data..= vcenterClientID)
+          ]
+      )
+
+instance Data.ToPath DeleteVcenterClient where
+  toPath = Prelude.const "/DeleteVcenterClient"
+
+instance Data.ToQuery DeleteVcenterClient where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVcenterClientResponse' smart constructor.
+data DeleteVcenterClientResponse = DeleteVcenterClientResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVcenterClientResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteVcenterClientResponse ::
+  DeleteVcenterClientResponse
+newDeleteVcenterClientResponse =
+  DeleteVcenterClientResponse'
+
+instance Prelude.NFData DeleteVcenterClientResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/MGN/DeleteWave.hs b/gen/Amazonka/MGN/DeleteWave.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DeleteWave.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.MGN.DeleteWave
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete wave.
+module Amazonka.MGN.DeleteWave
+  ( -- * Creating a Request
+    DeleteWave (..),
+    newDeleteWave,
+
+    -- * Request Lenses
+    deleteWave_waveID,
+
+    -- * Destructuring the Response
+    DeleteWaveResponse (..),
+    newDeleteWaveResponse,
+
+    -- * Response Lenses
+    deleteWaveResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWave' smart constructor.
+data DeleteWave = DeleteWave'
+  { -- | Wave ID.
+    waveID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWave' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'waveID', 'deleteWave_waveID' - Wave ID.
+newDeleteWave ::
+  -- | 'waveID'
+  Prelude.Text ->
+  DeleteWave
+newDeleteWave pWaveID_ =
+  DeleteWave' {waveID = pWaveID_}
+
+-- | Wave ID.
+deleteWave_waveID :: Lens.Lens' DeleteWave Prelude.Text
+deleteWave_waveID = Lens.lens (\DeleteWave' {waveID} -> waveID) (\s@DeleteWave' {} a -> s {waveID = a} :: DeleteWave)
+
+instance Core.AWSRequest DeleteWave where
+  type AWSResponse DeleteWave = DeleteWaveResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWaveResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWave where
+  hashWithSalt _salt DeleteWave' {..} =
+    _salt `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData DeleteWave where
+  rnf DeleteWave' {..} = Prelude.rnf waveID
+
+instance Data.ToHeaders DeleteWave where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWave where
+  toJSON DeleteWave' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("waveID" Data..= waveID)]
+      )
+
+instance Data.ToPath DeleteWave where
+  toPath = Prelude.const "/DeleteWave"
+
+instance Data.ToQuery DeleteWave where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWaveResponse' smart constructor.
+data DeleteWaveResponse = DeleteWaveResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWaveResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteWaveResponse_httpStatus' - The response's http status code.
+newDeleteWaveResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWaveResponse
+newDeleteWaveResponse pHttpStatus_ =
+  DeleteWaveResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteWaveResponse_httpStatus :: Lens.Lens' DeleteWaveResponse Prelude.Int
+deleteWaveResponse_httpStatus = Lens.lens (\DeleteWaveResponse' {httpStatus} -> httpStatus) (\s@DeleteWaveResponse' {} a -> s {httpStatus = a} :: DeleteWaveResponse)
+
+instance Prelude.NFData DeleteWaveResponse where
+  rnf DeleteWaveResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DescribeJobLogItems.hs b/gen/Amazonka/MGN/DescribeJobLogItems.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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 detailed job log items with paging.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.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.MGN.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'
+  { -- | Request to describe Job log item maximum results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Request to describe Job log next token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Request to describe Job log job ID.
+    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' - Request to describe Job log item maximum results.
+--
+-- 'nextToken', 'describeJobLogItems_nextToken' - Request to describe Job log next token.
+--
+-- 'jobID', 'describeJobLogItems_jobID' - Request to describe Job log job ID.
+newDescribeJobLogItems ::
+  -- | 'jobID'
+  Prelude.Text ->
+  DescribeJobLogItems
+newDescribeJobLogItems pJobID_ =
+  DescribeJobLogItems'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      jobID = pJobID_
+    }
+
+-- | Request to describe Job log item maximum results.
+describeJobLogItems_maxResults :: Lens.Lens' DescribeJobLogItems (Prelude.Maybe Prelude.Natural)
+describeJobLogItems_maxResults = Lens.lens (\DescribeJobLogItems' {maxResults} -> maxResults) (\s@DescribeJobLogItems' {} a -> s {maxResults = a} :: DescribeJobLogItems)
+
+-- | Request to describe Job log next token.
+describeJobLogItems_nextToken :: Lens.Lens' DescribeJobLogItems (Prelude.Maybe Prelude.Text)
+describeJobLogItems_nextToken = Lens.lens (\DescribeJobLogItems' {nextToken} -> nextToken) (\s@DescribeJobLogItems' {} a -> s {nextToken = a} :: DescribeJobLogItems)
+
+-- | Request to describe Job log job ID.
+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'
+  { -- | Request to describe Job log response items.
+    items :: Prelude.Maybe [JobLog],
+    -- | Request to describe Job log response next token.
+    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' - Request to describe Job log response items.
+--
+-- 'nextToken', 'describeJobLogItemsResponse_nextToken' - Request to describe Job log response next token.
+--
+-- '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_
+    }
+
+-- | Request to describe Job log response 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
+
+-- | Request to describe Job log response next token.
+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/MGN/DescribeJobs.hs b/gen/Amazonka/MGN/DescribeJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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 toData filters
+-- to limit which jobs are returned. The response is sorted by
+-- creationDataTime - latest date first. Jobs are normally created by the
+-- StartTest, StartCutover, and TerminateTargetInstances 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.MGN.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.MGN.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'
+  { -- | Request to describe Job log filters.
+    filters :: Prelude.Maybe DescribeJobsRequestFilters,
+    -- | Request to describe job log items by max results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Request to describe job log items by next token.
+    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' - Request to describe Job log filters.
+--
+-- 'maxResults', 'describeJobs_maxResults' - Request to describe job log items by max results.
+--
+-- 'nextToken', 'describeJobs_nextToken' - Request to describe job log items by next token.
+newDescribeJobs ::
+  DescribeJobs
+newDescribeJobs =
+  DescribeJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Request to describe Job log filters.
+describeJobs_filters :: Lens.Lens' DescribeJobs (Prelude.Maybe DescribeJobsRequestFilters)
+describeJobs_filters = Lens.lens (\DescribeJobs' {filters} -> filters) (\s@DescribeJobs' {} a -> s {filters = a} :: DescribeJobs)
+
+-- | Request to describe job log items by max results.
+describeJobs_maxResults :: Lens.Lens' DescribeJobs (Prelude.Maybe Prelude.Natural)
+describeJobs_maxResults = Lens.lens (\DescribeJobs' {maxResults} -> maxResults) (\s@DescribeJobs' {} a -> s {maxResults = a} :: DescribeJobs)
+
+-- | Request to describe job log items by next token.
+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'
+  { -- | Request to describe Job log items.
+    items :: Prelude.Maybe [Job],
+    -- | Request to describe Job response by next token.
+    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' - Request to describe Job log items.
+--
+-- 'nextToken', 'describeJobsResponse_nextToken' - Request to describe Job response by next token.
+--
+-- '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_
+    }
+
+-- | Request to describe Job log items.
+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
+
+-- | Request to describe Job response by next token.
+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/MGN/DescribeLaunchConfigurationTemplates.hs b/gen/Amazonka/MGN/DescribeLaunchConfigurationTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DescribeLaunchConfigurationTemplates.hs
@@ -0,0 +1,273 @@
+{-# 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.MGN.DescribeLaunchConfigurationTemplates
+-- 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 Launch Configuration Templates, filtered by Launch
+-- Configuration Template IDs
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.DescribeLaunchConfigurationTemplates
+  ( -- * Creating a Request
+    DescribeLaunchConfigurationTemplates (..),
+    newDescribeLaunchConfigurationTemplates,
+
+    -- * Request Lenses
+    describeLaunchConfigurationTemplates_launchConfigurationTemplateIDs,
+    describeLaunchConfigurationTemplates_maxResults,
+    describeLaunchConfigurationTemplates_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLaunchConfigurationTemplatesResponse (..),
+    newDescribeLaunchConfigurationTemplatesResponse,
+
+    -- * Response Lenses
+    describeLaunchConfigurationTemplatesResponse_items,
+    describeLaunchConfigurationTemplatesResponse_nextToken,
+    describeLaunchConfigurationTemplatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLaunchConfigurationTemplates' smart constructor.
+data DescribeLaunchConfigurationTemplates = DescribeLaunchConfigurationTemplates'
+  { -- | Request to filter Launch Configuration Templates list by Launch
+    -- Configuration Template ID.
+    launchConfigurationTemplateIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Maximum results to be returned in DescribeLaunchConfigurationTemplates.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Next pagination token returned from
+    -- DescribeLaunchConfigurationTemplates.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLaunchConfigurationTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchConfigurationTemplateIDs', 'describeLaunchConfigurationTemplates_launchConfigurationTemplateIDs' - Request to filter Launch Configuration Templates list by Launch
+-- Configuration Template ID.
+--
+-- 'maxResults', 'describeLaunchConfigurationTemplates_maxResults' - Maximum results to be returned in DescribeLaunchConfigurationTemplates.
+--
+-- 'nextToken', 'describeLaunchConfigurationTemplates_nextToken' - Next pagination token returned from
+-- DescribeLaunchConfigurationTemplates.
+newDescribeLaunchConfigurationTemplates ::
+  DescribeLaunchConfigurationTemplates
+newDescribeLaunchConfigurationTemplates =
+  DescribeLaunchConfigurationTemplates'
+    { launchConfigurationTemplateIDs =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Request to filter Launch Configuration Templates list by Launch
+-- Configuration Template ID.
+describeLaunchConfigurationTemplates_launchConfigurationTemplateIDs :: Lens.Lens' DescribeLaunchConfigurationTemplates (Prelude.Maybe [Prelude.Text])
+describeLaunchConfigurationTemplates_launchConfigurationTemplateIDs = Lens.lens (\DescribeLaunchConfigurationTemplates' {launchConfigurationTemplateIDs} -> launchConfigurationTemplateIDs) (\s@DescribeLaunchConfigurationTemplates' {} a -> s {launchConfigurationTemplateIDs = a} :: DescribeLaunchConfigurationTemplates) Prelude.. Lens.mapping Lens.coerced
+
+-- | Maximum results to be returned in DescribeLaunchConfigurationTemplates.
+describeLaunchConfigurationTemplates_maxResults :: Lens.Lens' DescribeLaunchConfigurationTemplates (Prelude.Maybe Prelude.Natural)
+describeLaunchConfigurationTemplates_maxResults = Lens.lens (\DescribeLaunchConfigurationTemplates' {maxResults} -> maxResults) (\s@DescribeLaunchConfigurationTemplates' {} a -> s {maxResults = a} :: DescribeLaunchConfigurationTemplates)
+
+-- | Next pagination token returned from
+-- DescribeLaunchConfigurationTemplates.
+describeLaunchConfigurationTemplates_nextToken :: Lens.Lens' DescribeLaunchConfigurationTemplates (Prelude.Maybe Prelude.Text)
+describeLaunchConfigurationTemplates_nextToken = Lens.lens (\DescribeLaunchConfigurationTemplates' {nextToken} -> nextToken) (\s@DescribeLaunchConfigurationTemplates' {} a -> s {nextToken = a} :: DescribeLaunchConfigurationTemplates)
+
+instance
+  Core.AWSPager
+    DescribeLaunchConfigurationTemplates
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLaunchConfigurationTemplatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLaunchConfigurationTemplatesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLaunchConfigurationTemplates_nextToken
+          Lens..~ rs
+          Lens.^? describeLaunchConfigurationTemplatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLaunchConfigurationTemplates
+  where
+  type
+    AWSResponse DescribeLaunchConfigurationTemplates =
+      DescribeLaunchConfigurationTemplatesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLaunchConfigurationTemplatesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLaunchConfigurationTemplates
+  where
+  hashWithSalt
+    _salt
+    DescribeLaunchConfigurationTemplates' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchConfigurationTemplateIDs
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeLaunchConfigurationTemplates
+  where
+  rnf DescribeLaunchConfigurationTemplates' {..} =
+    Prelude.rnf launchConfigurationTemplateIDs
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeLaunchConfigurationTemplates
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeLaunchConfigurationTemplates
+  where
+  toJSON DescribeLaunchConfigurationTemplates' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("launchConfigurationTemplateIDs" Data..=)
+              Prelude.<$> launchConfigurationTemplateIDs,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeLaunchConfigurationTemplates
+  where
+  toPath =
+    Prelude.const
+      "/DescribeLaunchConfigurationTemplates"
+
+instance
+  Data.ToQuery
+    DescribeLaunchConfigurationTemplates
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLaunchConfigurationTemplatesResponse' smart constructor.
+data DescribeLaunchConfigurationTemplatesResponse = DescribeLaunchConfigurationTemplatesResponse'
+  { -- | List of items returned by DescribeLaunchConfigurationTemplates.
+    items :: Prelude.Maybe [LaunchConfigurationTemplate],
+    -- | Next pagination token returned from
+    -- DescribeLaunchConfigurationTemplates.
+    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 'DescribeLaunchConfigurationTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeLaunchConfigurationTemplatesResponse_items' - List of items returned by DescribeLaunchConfigurationTemplates.
+--
+-- 'nextToken', 'describeLaunchConfigurationTemplatesResponse_nextToken' - Next pagination token returned from
+-- DescribeLaunchConfigurationTemplates.
+--
+-- 'httpStatus', 'describeLaunchConfigurationTemplatesResponse_httpStatus' - The response's http status code.
+newDescribeLaunchConfigurationTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLaunchConfigurationTemplatesResponse
+newDescribeLaunchConfigurationTemplatesResponse
+  pHttpStatus_ =
+    DescribeLaunchConfigurationTemplatesResponse'
+      { items =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | List of items returned by DescribeLaunchConfigurationTemplates.
+describeLaunchConfigurationTemplatesResponse_items :: Lens.Lens' DescribeLaunchConfigurationTemplatesResponse (Prelude.Maybe [LaunchConfigurationTemplate])
+describeLaunchConfigurationTemplatesResponse_items = Lens.lens (\DescribeLaunchConfigurationTemplatesResponse' {items} -> items) (\s@DescribeLaunchConfigurationTemplatesResponse' {} a -> s {items = a} :: DescribeLaunchConfigurationTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Next pagination token returned from
+-- DescribeLaunchConfigurationTemplates.
+describeLaunchConfigurationTemplatesResponse_nextToken :: Lens.Lens' DescribeLaunchConfigurationTemplatesResponse (Prelude.Maybe Prelude.Text)
+describeLaunchConfigurationTemplatesResponse_nextToken = Lens.lens (\DescribeLaunchConfigurationTemplatesResponse' {nextToken} -> nextToken) (\s@DescribeLaunchConfigurationTemplatesResponse' {} a -> s {nextToken = a} :: DescribeLaunchConfigurationTemplatesResponse)
+
+-- | The response's http status code.
+describeLaunchConfigurationTemplatesResponse_httpStatus :: Lens.Lens' DescribeLaunchConfigurationTemplatesResponse Prelude.Int
+describeLaunchConfigurationTemplatesResponse_httpStatus = Lens.lens (\DescribeLaunchConfigurationTemplatesResponse' {httpStatus} -> httpStatus) (\s@DescribeLaunchConfigurationTemplatesResponse' {} a -> s {httpStatus = a} :: DescribeLaunchConfigurationTemplatesResponse)
+
+instance
+  Prelude.NFData
+    DescribeLaunchConfigurationTemplatesResponse
+  where
+  rnf DescribeLaunchConfigurationTemplatesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DescribeReplicationConfigurationTemplates.hs b/gen/Amazonka/MGN/DescribeReplicationConfigurationTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DescribeReplicationConfigurationTemplates.hs
@@ -0,0 +1,269 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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.MGN.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.MGN.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'
+  { -- | Request to describe Replication Configuration template by max results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Request to describe Replication Configuration template by next token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Request to describe Replication Configuration template by template IDs.
+    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' - Request to describe Replication Configuration template by max results.
+--
+-- 'nextToken', 'describeReplicationConfigurationTemplates_nextToken' - Request to describe Replication Configuration template by next token.
+--
+-- 'replicationConfigurationTemplateIDs', 'describeReplicationConfigurationTemplates_replicationConfigurationTemplateIDs' - Request to describe Replication Configuration template by template IDs.
+newDescribeReplicationConfigurationTemplates ::
+  DescribeReplicationConfigurationTemplates
+newDescribeReplicationConfigurationTemplates =
+  DescribeReplicationConfigurationTemplates'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      replicationConfigurationTemplateIDs =
+        Prelude.Nothing
+    }
+
+-- | Request to describe Replication Configuration template by max results.
+describeReplicationConfigurationTemplates_maxResults :: Lens.Lens' DescribeReplicationConfigurationTemplates (Prelude.Maybe Prelude.Natural)
+describeReplicationConfigurationTemplates_maxResults = Lens.lens (\DescribeReplicationConfigurationTemplates' {maxResults} -> maxResults) (\s@DescribeReplicationConfigurationTemplates' {} a -> s {maxResults = a} :: DescribeReplicationConfigurationTemplates)
+
+-- | Request to describe Replication Configuration template by next token.
+describeReplicationConfigurationTemplates_nextToken :: Lens.Lens' DescribeReplicationConfigurationTemplates (Prelude.Maybe Prelude.Text)
+describeReplicationConfigurationTemplates_nextToken = Lens.lens (\DescribeReplicationConfigurationTemplates' {nextToken} -> nextToken) (\s@DescribeReplicationConfigurationTemplates' {} a -> s {nextToken = a} :: DescribeReplicationConfigurationTemplates)
+
+-- | Request to describe Replication Configuration template by template IDs.
+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'
+  { -- | Request to describe Replication Configuration template by items.
+    items :: Prelude.Maybe [ReplicationConfigurationTemplate],
+    -- | Request to describe Replication Configuration template by next token.
+    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' - Request to describe Replication Configuration template by items.
+--
+-- 'nextToken', 'describeReplicationConfigurationTemplatesResponse_nextToken' - Request to describe Replication Configuration template by next token.
+--
+-- '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_
+      }
+
+-- | Request to describe Replication Configuration template by items.
+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
+
+-- | Request to describe Replication Configuration template by next token.
+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/MGN/DescribeSourceServers.hs b/gen/Amazonka/MGN/DescribeSourceServers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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)
+--
+-- Retrieves all SourceServers or multiple SourceServers by ID.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.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.MGN.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'
+  { -- | Request to filter Source Servers list.
+    filters :: Prelude.Maybe DescribeSourceServersRequestFilters,
+    -- | Request to filter Source Servers list by maximum results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Request to filter Source Servers list by next token.
+    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' - Request to filter Source Servers list.
+--
+-- 'maxResults', 'describeSourceServers_maxResults' - Request to filter Source Servers list by maximum results.
+--
+-- 'nextToken', 'describeSourceServers_nextToken' - Request to filter Source Servers list by next token.
+newDescribeSourceServers ::
+  DescribeSourceServers
+newDescribeSourceServers =
+  DescribeSourceServers'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Request to filter Source Servers list.
+describeSourceServers_filters :: Lens.Lens' DescribeSourceServers (Prelude.Maybe DescribeSourceServersRequestFilters)
+describeSourceServers_filters = Lens.lens (\DescribeSourceServers' {filters} -> filters) (\s@DescribeSourceServers' {} a -> s {filters = a} :: DescribeSourceServers)
+
+-- | Request to filter Source Servers list by maximum results.
+describeSourceServers_maxResults :: Lens.Lens' DescribeSourceServers (Prelude.Maybe Prelude.Natural)
+describeSourceServers_maxResults = Lens.lens (\DescribeSourceServers' {maxResults} -> maxResults) (\s@DescribeSourceServers' {} a -> s {maxResults = a} :: DescribeSourceServers)
+
+-- | Request to filter Source Servers list by next token.
+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'
+  { -- | Request to filter Source Servers list by item.
+    items :: Prelude.Maybe [SourceServer],
+    -- | Request to filter Source Servers next token.
+    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' - Request to filter Source Servers list by item.
+--
+-- 'nextToken', 'describeSourceServersResponse_nextToken' - Request to filter Source Servers next token.
+--
+-- '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_
+    }
+
+-- | Request to filter Source Servers list by item.
+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
+
+-- | Request to filter Source Servers next token.
+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/MGN/DescribeVcenterClients.hs b/gen/Amazonka/MGN/DescribeVcenterClients.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DescribeVcenterClients.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.MGN.DescribeVcenterClients
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the installed vCenter clients.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.DescribeVcenterClients
+  ( -- * Creating a Request
+    DescribeVcenterClients (..),
+    newDescribeVcenterClients,
+
+    -- * Request Lenses
+    describeVcenterClients_maxResults,
+    describeVcenterClients_nextToken,
+
+    -- * Destructuring the Response
+    DescribeVcenterClientsResponse (..),
+    newDescribeVcenterClientsResponse,
+
+    -- * Response Lenses
+    describeVcenterClientsResponse_items,
+    describeVcenterClientsResponse_nextToken,
+    describeVcenterClientsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVcenterClients' smart constructor.
+data DescribeVcenterClients = DescribeVcenterClients'
+  { -- | Maximum results to be returned in DescribeVcenterClients.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Next pagination token to be provided for DescribeVcenterClients.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVcenterClients' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeVcenterClients_maxResults' - Maximum results to be returned in DescribeVcenterClients.
+--
+-- 'nextToken', 'describeVcenterClients_nextToken' - Next pagination token to be provided for DescribeVcenterClients.
+newDescribeVcenterClients ::
+  DescribeVcenterClients
+newDescribeVcenterClients =
+  DescribeVcenterClients'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Maximum results to be returned in DescribeVcenterClients.
+describeVcenterClients_maxResults :: Lens.Lens' DescribeVcenterClients (Prelude.Maybe Prelude.Natural)
+describeVcenterClients_maxResults = Lens.lens (\DescribeVcenterClients' {maxResults} -> maxResults) (\s@DescribeVcenterClients' {} a -> s {maxResults = a} :: DescribeVcenterClients)
+
+-- | Next pagination token to be provided for DescribeVcenterClients.
+describeVcenterClients_nextToken :: Lens.Lens' DescribeVcenterClients (Prelude.Maybe Prelude.Text)
+describeVcenterClients_nextToken = Lens.lens (\DescribeVcenterClients' {nextToken} -> nextToken) (\s@DescribeVcenterClients' {} a -> s {nextToken = a} :: DescribeVcenterClients)
+
+instance Core.AWSPager DescribeVcenterClients where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVcenterClientsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVcenterClientsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVcenterClients_nextToken
+          Lens..~ rs
+          Lens.^? describeVcenterClientsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVcenterClients where
+  type
+    AWSResponse DescribeVcenterClients =
+      DescribeVcenterClientsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeVcenterClientsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVcenterClients where
+  hashWithSalt _salt DescribeVcenterClients' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeVcenterClients where
+  rnf DescribeVcenterClients' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeVcenterClients where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeVcenterClients where
+  toPath = Prelude.const "/DescribeVcenterClients"
+
+instance Data.ToQuery DescribeVcenterClients where
+  toQuery DescribeVcenterClients' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeVcenterClientsResponse' smart constructor.
+data DescribeVcenterClientsResponse = DescribeVcenterClientsResponse'
+  { -- | List of items returned by DescribeVcenterClients.
+    items :: Prelude.Maybe [VcenterClient],
+    -- | Next pagination token returned from DescribeVcenterClients.
+    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 'DescribeVcenterClientsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeVcenterClientsResponse_items' - List of items returned by DescribeVcenterClients.
+--
+-- 'nextToken', 'describeVcenterClientsResponse_nextToken' - Next pagination token returned from DescribeVcenterClients.
+--
+-- 'httpStatus', 'describeVcenterClientsResponse_httpStatus' - The response's http status code.
+newDescribeVcenterClientsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVcenterClientsResponse
+newDescribeVcenterClientsResponse pHttpStatus_ =
+  DescribeVcenterClientsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List of items returned by DescribeVcenterClients.
+describeVcenterClientsResponse_items :: Lens.Lens' DescribeVcenterClientsResponse (Prelude.Maybe [VcenterClient])
+describeVcenterClientsResponse_items = Lens.lens (\DescribeVcenterClientsResponse' {items} -> items) (\s@DescribeVcenterClientsResponse' {} a -> s {items = a} :: DescribeVcenterClientsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Next pagination token returned from DescribeVcenterClients.
+describeVcenterClientsResponse_nextToken :: Lens.Lens' DescribeVcenterClientsResponse (Prelude.Maybe Prelude.Text)
+describeVcenterClientsResponse_nextToken = Lens.lens (\DescribeVcenterClientsResponse' {nextToken} -> nextToken) (\s@DescribeVcenterClientsResponse' {} a -> s {nextToken = a} :: DescribeVcenterClientsResponse)
+
+-- | The response's http status code.
+describeVcenterClientsResponse_httpStatus :: Lens.Lens' DescribeVcenterClientsResponse Prelude.Int
+describeVcenterClientsResponse_httpStatus = Lens.lens (\DescribeVcenterClientsResponse' {httpStatus} -> httpStatus) (\s@DescribeVcenterClientsResponse' {} a -> s {httpStatus = a} :: DescribeVcenterClientsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVcenterClientsResponse
+  where
+  rnf DescribeVcenterClientsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DisassociateApplications.hs b/gen/Amazonka/MGN/DisassociateApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DisassociateApplications.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.MGN.DisassociateApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociate applications from wave.
+module Amazonka.MGN.DisassociateApplications
+  ( -- * Creating a Request
+    DisassociateApplications (..),
+    newDisassociateApplications,
+
+    -- * Request Lenses
+    disassociateApplications_applicationIDs,
+    disassociateApplications_waveID,
+
+    -- * Destructuring the Response
+    DisassociateApplicationsResponse (..),
+    newDisassociateApplicationsResponse,
+
+    -- * Response Lenses
+    disassociateApplicationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateApplications' smart constructor.
+data DisassociateApplications = DisassociateApplications'
+  { -- | Application IDs list.
+    applicationIDs :: Prelude.NonEmpty Prelude.Text,
+    -- | Wave ID.
+    waveID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateApplications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationIDs', 'disassociateApplications_applicationIDs' - Application IDs list.
+--
+-- 'waveID', 'disassociateApplications_waveID' - Wave ID.
+newDisassociateApplications ::
+  -- | 'applicationIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'waveID'
+  Prelude.Text ->
+  DisassociateApplications
+newDisassociateApplications pApplicationIDs_ pWaveID_ =
+  DisassociateApplications'
+    { applicationIDs =
+        Lens.coerced Lens.# pApplicationIDs_,
+      waveID = pWaveID_
+    }
+
+-- | Application IDs list.
+disassociateApplications_applicationIDs :: Lens.Lens' DisassociateApplications (Prelude.NonEmpty Prelude.Text)
+disassociateApplications_applicationIDs = Lens.lens (\DisassociateApplications' {applicationIDs} -> applicationIDs) (\s@DisassociateApplications' {} a -> s {applicationIDs = a} :: DisassociateApplications) Prelude.. Lens.coerced
+
+-- | Wave ID.
+disassociateApplications_waveID :: Lens.Lens' DisassociateApplications Prelude.Text
+disassociateApplications_waveID = Lens.lens (\DisassociateApplications' {waveID} -> waveID) (\s@DisassociateApplications' {} a -> s {waveID = a} :: DisassociateApplications)
+
+instance Core.AWSRequest DisassociateApplications where
+  type
+    AWSResponse DisassociateApplications =
+      DisassociateApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateApplicationsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateApplications where
+  hashWithSalt _salt DisassociateApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationIDs
+      `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData DisassociateApplications where
+  rnf DisassociateApplications' {..} =
+    Prelude.rnf applicationIDs
+      `Prelude.seq` Prelude.rnf waveID
+
+instance Data.ToHeaders DisassociateApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateApplications where
+  toJSON DisassociateApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationIDs" Data..= applicationIDs),
+            Prelude.Just ("waveID" Data..= waveID)
+          ]
+      )
+
+instance Data.ToPath DisassociateApplications where
+  toPath = Prelude.const "/DisassociateApplications"
+
+instance Data.ToQuery DisassociateApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateApplicationsResponse' smart constructor.
+data DisassociateApplicationsResponse = DisassociateApplicationsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateApplicationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateApplicationsResponse_httpStatus' - The response's http status code.
+newDisassociateApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateApplicationsResponse
+newDisassociateApplicationsResponse pHttpStatus_ =
+  DisassociateApplicationsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateApplicationsResponse_httpStatus :: Lens.Lens' DisassociateApplicationsResponse Prelude.Int
+disassociateApplicationsResponse_httpStatus = Lens.lens (\DisassociateApplicationsResponse' {httpStatus} -> httpStatus) (\s@DisassociateApplicationsResponse' {} a -> s {httpStatus = a} :: DisassociateApplicationsResponse)
+
+instance
+  Prelude.NFData
+    DisassociateApplicationsResponse
+  where
+  rnf DisassociateApplicationsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DisassociateSourceServers.hs b/gen/Amazonka/MGN/DisassociateSourceServers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DisassociateSourceServers.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.DisassociateSourceServers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociate source servers from application.
+module Amazonka.MGN.DisassociateSourceServers
+  ( -- * Creating a Request
+    DisassociateSourceServers (..),
+    newDisassociateSourceServers,
+
+    -- * Request Lenses
+    disassociateSourceServers_applicationID,
+    disassociateSourceServers_sourceServerIDs,
+
+    -- * Destructuring the Response
+    DisassociateSourceServersResponse (..),
+    newDisassociateSourceServersResponse,
+
+    -- * Response Lenses
+    disassociateSourceServersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateSourceServers' smart constructor.
+data DisassociateSourceServers = DisassociateSourceServers'
+  { -- | Application ID.
+    applicationID :: Prelude.Text,
+    -- | Source server IDs list.
+    sourceServerIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSourceServers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationID', 'disassociateSourceServers_applicationID' - Application ID.
+--
+-- 'sourceServerIDs', 'disassociateSourceServers_sourceServerIDs' - Source server IDs list.
+newDisassociateSourceServers ::
+  -- | 'applicationID'
+  Prelude.Text ->
+  -- | 'sourceServerIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  DisassociateSourceServers
+newDisassociateSourceServers
+  pApplicationID_
+  pSourceServerIDs_ =
+    DisassociateSourceServers'
+      { applicationID =
+          pApplicationID_,
+        sourceServerIDs =
+          Lens.coerced Lens.# pSourceServerIDs_
+      }
+
+-- | Application ID.
+disassociateSourceServers_applicationID :: Lens.Lens' DisassociateSourceServers Prelude.Text
+disassociateSourceServers_applicationID = Lens.lens (\DisassociateSourceServers' {applicationID} -> applicationID) (\s@DisassociateSourceServers' {} a -> s {applicationID = a} :: DisassociateSourceServers)
+
+-- | Source server IDs list.
+disassociateSourceServers_sourceServerIDs :: Lens.Lens' DisassociateSourceServers (Prelude.NonEmpty Prelude.Text)
+disassociateSourceServers_sourceServerIDs = Lens.lens (\DisassociateSourceServers' {sourceServerIDs} -> sourceServerIDs) (\s@DisassociateSourceServers' {} a -> s {sourceServerIDs = a} :: DisassociateSourceServers) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DisassociateSourceServers where
+  type
+    AWSResponse DisassociateSourceServers =
+      DisassociateSourceServersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateSourceServersResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateSourceServers where
+  hashWithSalt _salt DisassociateSourceServers' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationID
+      `Prelude.hashWithSalt` sourceServerIDs
+
+instance Prelude.NFData DisassociateSourceServers where
+  rnf DisassociateSourceServers' {..} =
+    Prelude.rnf applicationID
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance Data.ToHeaders DisassociateSourceServers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateSourceServers where
+  toJSON DisassociateSourceServers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationID" Data..= applicationID),
+            Prelude.Just
+              ("sourceServerIDs" Data..= sourceServerIDs)
+          ]
+      )
+
+instance Data.ToPath DisassociateSourceServers where
+  toPath = Prelude.const "/DisassociateSourceServers"
+
+instance Data.ToQuery DisassociateSourceServers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateSourceServersResponse' smart constructor.
+data DisassociateSourceServersResponse = DisassociateSourceServersResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSourceServersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateSourceServersResponse_httpStatus' - The response's http status code.
+newDisassociateSourceServersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateSourceServersResponse
+newDisassociateSourceServersResponse pHttpStatus_ =
+  DisassociateSourceServersResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateSourceServersResponse_httpStatus :: Lens.Lens' DisassociateSourceServersResponse Prelude.Int
+disassociateSourceServersResponse_httpStatus = Lens.lens (\DisassociateSourceServersResponse' {httpStatus} -> httpStatus) (\s@DisassociateSourceServersResponse' {} a -> s {httpStatus = a} :: DisassociateSourceServersResponse)
+
+instance
+  Prelude.NFData
+    DisassociateSourceServersResponse
+  where
+  rnf DisassociateSourceServersResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/DisconnectFromService.hs b/gen/Amazonka/MGN/DisconnectFromService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/DisconnectFromService.hs
@@ -0,0 +1,142 @@
+{-# 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.MGN.DisconnectFromService
+-- 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 specific Source Servers from Application Migration Service.
+-- Data replication is stopped immediately. All AWS resources created by
+-- Application Migration Service for enabling the replication of these
+-- source servers will be terminated \/ deleted within 90 minutes. Launched
+-- Test or Cutover instances will NOT be terminated. If the agent on the
+-- source server has not been prevented from communicating with the
+-- Application Migration Service 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.MGN.DisconnectFromService
+  ( -- * Creating a Request
+    DisconnectFromService (..),
+    newDisconnectFromService,
+
+    -- * Request Lenses
+    disconnectFromService_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisconnectFromService' smart constructor.
+data DisconnectFromService = DisconnectFromService'
+  { -- | Request to disconnect Source Server from service by Server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisconnectFromService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disconnectFromService_sourceServerID' - Request to disconnect Source Server from service by Server ID.
+newDisconnectFromService ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  DisconnectFromService
+newDisconnectFromService pSourceServerID_ =
+  DisconnectFromService'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | Request to disconnect Source Server from service by Server ID.
+disconnectFromService_sourceServerID :: Lens.Lens' DisconnectFromService Prelude.Text
+disconnectFromService_sourceServerID = Lens.lens (\DisconnectFromService' {sourceServerID} -> sourceServerID) (\s@DisconnectFromService' {} a -> s {sourceServerID = a} :: DisconnectFromService)
+
+instance Core.AWSRequest DisconnectFromService where
+  type AWSResponse DisconnectFromService = SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable DisconnectFromService where
+  hashWithSalt _salt DisconnectFromService' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData DisconnectFromService where
+  rnf DisconnectFromService' {..} =
+    Prelude.rnf sourceServerID
+
+instance Data.ToHeaders DisconnectFromService where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisconnectFromService where
+  toJSON DisconnectFromService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath DisconnectFromService where
+  toPath = Prelude.const "/DisconnectFromService"
+
+instance Data.ToQuery DisconnectFromService where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/FinalizeCutover.hs b/gen/Amazonka/MGN/FinalizeCutover.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/FinalizeCutover.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.MGN.FinalizeCutover
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Finalizes the cutover immediately for specific Source Servers. All AWS
+-- resources created by Application Migration Service for enabling the
+-- replication of these source servers will be terminated \/ deleted within
+-- 90 minutes. Launched Test or Cutover instances will NOT be terminated.
+-- The AWS Replication Agent will receive a command to uninstall itself
+-- (within 10 minutes). The following properties of the SourceServer will
+-- be changed immediately: dataReplicationInfo.dataReplicationState will be
+-- changed to DISCONNECTED; The SourceServer.lifeCycle.state will be
+-- changed to CUTOVER; The totalStorageBytes property fo each of
+-- dataReplicationInfo.replicatedDisks will be set to zero;
+-- dataReplicationInfo.lagDuration and dataReplicationInfo.lagDuration will
+-- be nullified.
+module Amazonka.MGN.FinalizeCutover
+  ( -- * Creating a Request
+    FinalizeCutover (..),
+    newFinalizeCutover,
+
+    -- * Request Lenses
+    finalizeCutover_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newFinalizeCutover' smart constructor.
+data FinalizeCutover = FinalizeCutover'
+  { -- | Request to finalize Cutover by Source Server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FinalizeCutover' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'finalizeCutover_sourceServerID' - Request to finalize Cutover by Source Server ID.
+newFinalizeCutover ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  FinalizeCutover
+newFinalizeCutover pSourceServerID_ =
+  FinalizeCutover' {sourceServerID = pSourceServerID_}
+
+-- | Request to finalize Cutover by Source Server ID.
+finalizeCutover_sourceServerID :: Lens.Lens' FinalizeCutover Prelude.Text
+finalizeCutover_sourceServerID = Lens.lens (\FinalizeCutover' {sourceServerID} -> sourceServerID) (\s@FinalizeCutover' {} a -> s {sourceServerID = a} :: FinalizeCutover)
+
+instance Core.AWSRequest FinalizeCutover where
+  type AWSResponse FinalizeCutover = SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable FinalizeCutover where
+  hashWithSalt _salt FinalizeCutover' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData FinalizeCutover where
+  rnf FinalizeCutover' {..} = Prelude.rnf sourceServerID
+
+instance Data.ToHeaders FinalizeCutover where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON FinalizeCutover where
+  toJSON FinalizeCutover' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath FinalizeCutover where
+  toPath = Prelude.const "/FinalizeCutover"
+
+instance Data.ToQuery FinalizeCutover where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/GetLaunchConfiguration.hs b/gen/Amazonka/MGN/GetLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/GetLaunchConfiguration.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.MGN.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)
+--
+-- Lists all LaunchConfigurations available, filtered by Source Server IDs.
+module Amazonka.MGN.GetLaunchConfiguration
+  ( -- * Creating a Request
+    GetLaunchConfiguration (..),
+    newGetLaunchConfiguration,
+
+    -- * Request Lenses
+    getLaunchConfiguration_sourceServerID,
+
+    -- * Destructuring the Response
+    LaunchConfiguration (..),
+    newLaunchConfiguration,
+
+    -- * Response Lenses
+    launchConfiguration_bootMode,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_enableMapAutoTagging,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_mapAutoTaggingMpeID,
+    launchConfiguration_name,
+    launchConfiguration_postLaunchActions,
+    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.MGN.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'
+  { -- | Request to get Launch Configuration information by Source Server ID.
+    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' - Request to get Launch Configuration information by Source Server ID.
+newGetLaunchConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  GetLaunchConfiguration
+newGetLaunchConfiguration pSourceServerID_ =
+  GetLaunchConfiguration'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | Request to get Launch Configuration information by Source Server ID.
+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/MGN/GetReplicationConfiguration.hs b/gen/Amazonka/MGN/GetReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/GetReplicationConfiguration.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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)
+--
+-- Lists all ReplicationConfigurations, filtered by Source Server ID.
+module Amazonka.MGN.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_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.MGN.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'
+  { -- | Request to get Replication Configuration by Source Server ID.
+    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' - Request to get Replication Configuration by Source Server ID.
+newGetReplicationConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  GetReplicationConfiguration
+newGetReplicationConfiguration pSourceServerID_ =
+  GetReplicationConfiguration'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | Request to get Replication Configuration by Source Server ID.
+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/MGN/InitializeService.hs b/gen/Amazonka/MGN/InitializeService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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 Application Migration Service.
+module Amazonka.MGN.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.MGN.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/MGN/Lens.hs b/gen/Amazonka/MGN/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Lens.hs
@@ -0,0 +1,1125 @@
+{-# 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.MGN.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.MGN.Lens
+  ( -- * Operations
+
+    -- ** ArchiveApplication
+    archiveApplication_applicationID,
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+
+    -- ** ArchiveWave
+    archiveWave_waveID,
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+
+    -- ** AssociateApplications
+    associateApplications_applicationIDs,
+    associateApplications_waveID,
+    associateApplicationsResponse_httpStatus,
+
+    -- ** AssociateSourceServers
+    associateSourceServers_applicationID,
+    associateSourceServers_sourceServerIDs,
+    associateSourceServersResponse_httpStatus,
+
+    -- ** ChangeServerLifeCycleState
+    changeServerLifeCycleState_lifeCycle,
+    changeServerLifeCycleState_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** CreateApplication
+    createApplication_description,
+    createApplication_tags,
+    createApplication_name,
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+
+    -- ** CreateLaunchConfigurationTemplate
+    createLaunchConfigurationTemplate_associatePublicIpAddress,
+    createLaunchConfigurationTemplate_bootMode,
+    createLaunchConfigurationTemplate_copyPrivateIp,
+    createLaunchConfigurationTemplate_copyTags,
+    createLaunchConfigurationTemplate_enableMapAutoTagging,
+    createLaunchConfigurationTemplate_largeVolumeConf,
+    createLaunchConfigurationTemplate_launchDisposition,
+    createLaunchConfigurationTemplate_licensing,
+    createLaunchConfigurationTemplate_mapAutoTaggingMpeID,
+    createLaunchConfigurationTemplate_postLaunchActions,
+    createLaunchConfigurationTemplate_smallVolumeConf,
+    createLaunchConfigurationTemplate_smallVolumeMaxSize,
+    createLaunchConfigurationTemplate_tags,
+    createLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_arn,
+    launchConfigurationTemplate_associatePublicIpAddress,
+    launchConfigurationTemplate_bootMode,
+    launchConfigurationTemplate_copyPrivateIp,
+    launchConfigurationTemplate_copyTags,
+    launchConfigurationTemplate_ec2LaunchTemplateID,
+    launchConfigurationTemplate_enableMapAutoTagging,
+    launchConfigurationTemplate_largeVolumeConf,
+    launchConfigurationTemplate_launchDisposition,
+    launchConfigurationTemplate_licensing,
+    launchConfigurationTemplate_mapAutoTaggingMpeID,
+    launchConfigurationTemplate_postLaunchActions,
+    launchConfigurationTemplate_smallVolumeConf,
+    launchConfigurationTemplate_smallVolumeMaxSize,
+    launchConfigurationTemplate_tags,
+    launchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_launchConfigurationTemplateID,
+
+    -- ** CreateReplicationConfigurationTemplate
+    createReplicationConfigurationTemplate_ebsEncryptionKeyArn,
+    createReplicationConfigurationTemplate_tags,
+    createReplicationConfigurationTemplate_associateDefaultSecurityGroup,
+    createReplicationConfigurationTemplate_bandwidthThrottling,
+    createReplicationConfigurationTemplate_createPublicIP,
+    createReplicationConfigurationTemplate_dataPlaneRouting,
+    createReplicationConfigurationTemplate_defaultLargeStagingDiskType,
+    createReplicationConfigurationTemplate_ebsEncryption,
+    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_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- ** CreateWave
+    createWave_description,
+    createWave_tags,
+    createWave_name,
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+
+    -- ** DeleteApplication
+    deleteApplication_applicationID,
+    deleteApplicationResponse_httpStatus,
+
+    -- ** DeleteJob
+    deleteJob_jobID,
+    deleteJobResponse_httpStatus,
+
+    -- ** DeleteLaunchConfigurationTemplate
+    deleteLaunchConfigurationTemplate_launchConfigurationTemplateID,
+    deleteLaunchConfigurationTemplateResponse_httpStatus,
+
+    -- ** DeleteReplicationConfigurationTemplate
+    deleteReplicationConfigurationTemplate_replicationConfigurationTemplateID,
+    deleteReplicationConfigurationTemplateResponse_httpStatus,
+
+    -- ** DeleteSourceServer
+    deleteSourceServer_sourceServerID,
+    deleteSourceServerResponse_httpStatus,
+
+    -- ** DeleteVcenterClient
+    deleteVcenterClient_vcenterClientID,
+
+    -- ** DeleteWave
+    deleteWave_waveID,
+    deleteWaveResponse_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,
+
+    -- ** DescribeLaunchConfigurationTemplates
+    describeLaunchConfigurationTemplates_launchConfigurationTemplateIDs,
+    describeLaunchConfigurationTemplates_maxResults,
+    describeLaunchConfigurationTemplates_nextToken,
+    describeLaunchConfigurationTemplatesResponse_items,
+    describeLaunchConfigurationTemplatesResponse_nextToken,
+    describeLaunchConfigurationTemplatesResponse_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,
+
+    -- ** DescribeVcenterClients
+    describeVcenterClients_maxResults,
+    describeVcenterClients_nextToken,
+    describeVcenterClientsResponse_items,
+    describeVcenterClientsResponse_nextToken,
+    describeVcenterClientsResponse_httpStatus,
+
+    -- ** DisassociateApplications
+    disassociateApplications_applicationIDs,
+    disassociateApplications_waveID,
+    disassociateApplicationsResponse_httpStatus,
+
+    -- ** DisassociateSourceServers
+    disassociateSourceServers_applicationID,
+    disassociateSourceServers_sourceServerIDs,
+    disassociateSourceServersResponse_httpStatus,
+
+    -- ** DisconnectFromService
+    disconnectFromService_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** FinalizeCutover
+    finalizeCutover_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** GetLaunchConfiguration
+    getLaunchConfiguration_sourceServerID,
+    launchConfiguration_bootMode,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_enableMapAutoTagging,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_mapAutoTaggingMpeID,
+    launchConfiguration_name,
+    launchConfiguration_postLaunchActions,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- ** GetReplicationConfiguration
+    getReplicationConfiguration_sourceServerID,
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- ** InitializeService
+    initializeServiceResponse_httpStatus,
+
+    -- ** ListApplications
+    listApplications_filters,
+    listApplications_maxResults,
+    listApplications_nextToken,
+    listApplicationsResponse_items,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+
+    -- ** ListSourceServerActions
+    listSourceServerActions_filters,
+    listSourceServerActions_maxResults,
+    listSourceServerActions_nextToken,
+    listSourceServerActions_sourceServerID,
+    listSourceServerActionsResponse_items,
+    listSourceServerActionsResponse_nextToken,
+    listSourceServerActionsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListTemplateActions
+    listTemplateActions_filters,
+    listTemplateActions_maxResults,
+    listTemplateActions_nextToken,
+    listTemplateActions_launchConfigurationTemplateID,
+    listTemplateActionsResponse_items,
+    listTemplateActionsResponse_nextToken,
+    listTemplateActionsResponse_httpStatus,
+
+    -- ** ListWaves
+    listWaves_filters,
+    listWaves_maxResults,
+    listWaves_nextToken,
+    listWavesResponse_items,
+    listWavesResponse_nextToken,
+    listWavesResponse_httpStatus,
+
+    -- ** MarkAsArchived
+    markAsArchived_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** PutSourceServerAction
+    putSourceServerAction_active,
+    putSourceServerAction_documentVersion,
+    putSourceServerAction_mustSucceedForCutover,
+    putSourceServerAction_parameters,
+    putSourceServerAction_timeoutSeconds,
+    putSourceServerAction_actionID,
+    putSourceServerAction_actionName,
+    putSourceServerAction_documentIdentifier,
+    putSourceServerAction_order,
+    putSourceServerAction_sourceServerID,
+    sourceServerActionDocument_actionID,
+    sourceServerActionDocument_actionName,
+    sourceServerActionDocument_active,
+    sourceServerActionDocument_documentIdentifier,
+    sourceServerActionDocument_documentVersion,
+    sourceServerActionDocument_mustSucceedForCutover,
+    sourceServerActionDocument_order,
+    sourceServerActionDocument_parameters,
+    sourceServerActionDocument_timeoutSeconds,
+
+    -- ** PutTemplateAction
+    putTemplateAction_active,
+    putTemplateAction_documentVersion,
+    putTemplateAction_mustSucceedForCutover,
+    putTemplateAction_operatingSystem,
+    putTemplateAction_parameters,
+    putTemplateAction_timeoutSeconds,
+    putTemplateAction_actionID,
+    putTemplateAction_actionName,
+    putTemplateAction_documentIdentifier,
+    putTemplateAction_launchConfigurationTemplateID,
+    putTemplateAction_order,
+    templateActionDocument_actionID,
+    templateActionDocument_actionName,
+    templateActionDocument_active,
+    templateActionDocument_documentIdentifier,
+    templateActionDocument_documentVersion,
+    templateActionDocument_mustSucceedForCutover,
+    templateActionDocument_operatingSystem,
+    templateActionDocument_order,
+    templateActionDocument_parameters,
+    templateActionDocument_timeoutSeconds,
+
+    -- ** RemoveSourceServerAction
+    removeSourceServerAction_actionID,
+    removeSourceServerAction_sourceServerID,
+    removeSourceServerActionResponse_httpStatus,
+
+    -- ** RemoveTemplateAction
+    removeTemplateAction_actionID,
+    removeTemplateAction_launchConfigurationTemplateID,
+    removeTemplateActionResponse_httpStatus,
+
+    -- ** RetryDataReplication
+    retryDataReplication_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** StartCutover
+    startCutover_tags,
+    startCutover_sourceServerIDs,
+    startCutoverResponse_job,
+    startCutoverResponse_httpStatus,
+
+    -- ** StartReplication
+    startReplication_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** StartTest
+    startTest_tags,
+    startTest_sourceServerIDs,
+    startTestResponse_job,
+    startTestResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** TerminateTargetInstances
+    terminateTargetInstances_tags,
+    terminateTargetInstances_sourceServerIDs,
+    terminateTargetInstancesResponse_job,
+    terminateTargetInstancesResponse_httpStatus,
+
+    -- ** UnarchiveApplication
+    unarchiveApplication_applicationID,
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+
+    -- ** UnarchiveWave
+    unarchiveWave_waveID,
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- ** UpdateApplication
+    updateApplication_description,
+    updateApplication_name,
+    updateApplication_applicationID,
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+
+    -- ** UpdateLaunchConfiguration
+    updateLaunchConfiguration_bootMode,
+    updateLaunchConfiguration_copyPrivateIp,
+    updateLaunchConfiguration_copyTags,
+    updateLaunchConfiguration_enableMapAutoTagging,
+    updateLaunchConfiguration_launchDisposition,
+    updateLaunchConfiguration_licensing,
+    updateLaunchConfiguration_mapAutoTaggingMpeID,
+    updateLaunchConfiguration_name,
+    updateLaunchConfiguration_postLaunchActions,
+    updateLaunchConfiguration_targetInstanceTypeRightSizingMethod,
+    updateLaunchConfiguration_sourceServerID,
+    launchConfiguration_bootMode,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_enableMapAutoTagging,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_mapAutoTaggingMpeID,
+    launchConfiguration_name,
+    launchConfiguration_postLaunchActions,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- ** UpdateLaunchConfigurationTemplate
+    updateLaunchConfigurationTemplate_associatePublicIpAddress,
+    updateLaunchConfigurationTemplate_bootMode,
+    updateLaunchConfigurationTemplate_copyPrivateIp,
+    updateLaunchConfigurationTemplate_copyTags,
+    updateLaunchConfigurationTemplate_enableMapAutoTagging,
+    updateLaunchConfigurationTemplate_largeVolumeConf,
+    updateLaunchConfigurationTemplate_launchDisposition,
+    updateLaunchConfigurationTemplate_licensing,
+    updateLaunchConfigurationTemplate_mapAutoTaggingMpeID,
+    updateLaunchConfigurationTemplate_postLaunchActions,
+    updateLaunchConfigurationTemplate_smallVolumeConf,
+    updateLaunchConfigurationTemplate_smallVolumeMaxSize,
+    updateLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    updateLaunchConfigurationTemplate_launchConfigurationTemplateID,
+    launchConfigurationTemplate_arn,
+    launchConfigurationTemplate_associatePublicIpAddress,
+    launchConfigurationTemplate_bootMode,
+    launchConfigurationTemplate_copyPrivateIp,
+    launchConfigurationTemplate_copyTags,
+    launchConfigurationTemplate_ec2LaunchTemplateID,
+    launchConfigurationTemplate_enableMapAutoTagging,
+    launchConfigurationTemplate_largeVolumeConf,
+    launchConfigurationTemplate_launchDisposition,
+    launchConfigurationTemplate_licensing,
+    launchConfigurationTemplate_mapAutoTaggingMpeID,
+    launchConfigurationTemplate_postLaunchActions,
+    launchConfigurationTemplate_smallVolumeConf,
+    launchConfigurationTemplate_smallVolumeMaxSize,
+    launchConfigurationTemplate_tags,
+    launchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_launchConfigurationTemplateID,
+
+    -- ** UpdateReplicationConfiguration
+    updateReplicationConfiguration_associateDefaultSecurityGroup,
+    updateReplicationConfiguration_bandwidthThrottling,
+    updateReplicationConfiguration_createPublicIP,
+    updateReplicationConfiguration_dataPlaneRouting,
+    updateReplicationConfiguration_defaultLargeStagingDiskType,
+    updateReplicationConfiguration_ebsEncryption,
+    updateReplicationConfiguration_ebsEncryptionKeyArn,
+    updateReplicationConfiguration_name,
+    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_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_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_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- ** UpdateSourceServerReplicationType
+    updateSourceServerReplicationType_replicationType,
+    updateSourceServerReplicationType_sourceServerID,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** UpdateWave
+    updateWave_description,
+    updateWave_name,
+    updateWave_waveID,
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+
+    -- * Types
+
+    -- ** Application
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+
+    -- ** ApplicationAggregatedStatus
+    applicationAggregatedStatus_healthStatus,
+    applicationAggregatedStatus_lastUpdateDateTime,
+    applicationAggregatedStatus_progressStatus,
+    applicationAggregatedStatus_totalSourceServers,
+
+    -- ** CPU
+    cpu_cores,
+    cpu_modelName,
+
+    -- ** ChangeServerLifeCycleStateSourceServerLifecycle
+    changeServerLifeCycleStateSourceServerLifecycle_state,
+
+    -- ** DataReplicationError
+    dataReplicationError_error,
+    dataReplicationError_rawError,
+
+    -- ** DataReplicationInfo
+    dataReplicationInfo_dataReplicationError,
+    dataReplicationInfo_dataReplicationInitiation,
+    dataReplicationInfo_dataReplicationState,
+    dataReplicationInfo_etaDateTime,
+    dataReplicationInfo_lagDuration,
+    dataReplicationInfo_lastSnapshotDateTime,
+    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,
+
+    -- ** DescribeSourceServersRequestFilters
+    describeSourceServersRequestFilters_applicationIDs,
+    describeSourceServersRequestFilters_isArchived,
+    describeSourceServersRequestFilters_lifeCycleStates,
+    describeSourceServersRequestFilters_replicationTypes,
+    describeSourceServersRequestFilters_sourceServerIDs,
+
+    -- ** Disk
+    disk_bytes,
+    disk_deviceName,
+
+    -- ** IdentificationHints
+    identificationHints_awsInstanceID,
+    identificationHints_fqdn,
+    identificationHints_hostname,
+    identificationHints_vmPath,
+    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_conversionServerID,
+    jobLogEventData_rawError,
+    jobLogEventData_sourceServerID,
+    jobLogEventData_targetInstanceID,
+
+    -- ** JobPostLaunchActionsLaunchStatus
+    jobPostLaunchActionsLaunchStatus_executionID,
+    jobPostLaunchActionsLaunchStatus_executionStatus,
+    jobPostLaunchActionsLaunchStatus_failureReason,
+    jobPostLaunchActionsLaunchStatus_ssmDocument,
+    jobPostLaunchActionsLaunchStatus_ssmDocumentType,
+
+    -- ** LaunchConfiguration
+    launchConfiguration_bootMode,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_enableMapAutoTagging,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_mapAutoTaggingMpeID,
+    launchConfiguration_name,
+    launchConfiguration_postLaunchActions,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- ** LaunchConfigurationTemplate
+    launchConfigurationTemplate_arn,
+    launchConfigurationTemplate_associatePublicIpAddress,
+    launchConfigurationTemplate_bootMode,
+    launchConfigurationTemplate_copyPrivateIp,
+    launchConfigurationTemplate_copyTags,
+    launchConfigurationTemplate_ec2LaunchTemplateID,
+    launchConfigurationTemplate_enableMapAutoTagging,
+    launchConfigurationTemplate_largeVolumeConf,
+    launchConfigurationTemplate_launchDisposition,
+    launchConfigurationTemplate_licensing,
+    launchConfigurationTemplate_mapAutoTaggingMpeID,
+    launchConfigurationTemplate_postLaunchActions,
+    launchConfigurationTemplate_smallVolumeConf,
+    launchConfigurationTemplate_smallVolumeMaxSize,
+    launchConfigurationTemplate_tags,
+    launchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_launchConfigurationTemplateID,
+
+    -- ** LaunchTemplateDiskConf
+    launchTemplateDiskConf_iops,
+    launchTemplateDiskConf_throughput,
+    launchTemplateDiskConf_volumeType,
+
+    -- ** LaunchedInstance
+    launchedInstance_ec2InstanceID,
+    launchedInstance_firstBoot,
+    launchedInstance_jobID,
+
+    -- ** Licensing
+    licensing_osByol,
+
+    -- ** LifeCycle
+    lifeCycle_addedToServiceDateTime,
+    lifeCycle_elapsedReplicationDuration,
+    lifeCycle_firstByteDateTime,
+    lifeCycle_lastCutover,
+    lifeCycle_lastSeenByServiceDateTime,
+    lifeCycle_lastTest,
+    lifeCycle_state,
+
+    -- ** LifeCycleLastCutover
+    lifeCycleLastCutover_finalized,
+    lifeCycleLastCutover_initiated,
+    lifeCycleLastCutover_reverted,
+
+    -- ** LifeCycleLastCutoverFinalized
+    lifeCycleLastCutoverFinalized_apiCallDateTime,
+
+    -- ** LifeCycleLastCutoverInitiated
+    lifeCycleLastCutoverInitiated_apiCallDateTime,
+    lifeCycleLastCutoverInitiated_jobID,
+
+    -- ** LifeCycleLastCutoverReverted
+    lifeCycleLastCutoverReverted_apiCallDateTime,
+
+    -- ** LifeCycleLastTest
+    lifeCycleLastTest_finalized,
+    lifeCycleLastTest_initiated,
+    lifeCycleLastTest_reverted,
+
+    -- ** LifeCycleLastTestFinalized
+    lifeCycleLastTestFinalized_apiCallDateTime,
+
+    -- ** LifeCycleLastTestInitiated
+    lifeCycleLastTestInitiated_apiCallDateTime,
+    lifeCycleLastTestInitiated_jobID,
+
+    -- ** LifeCycleLastTestReverted
+    lifeCycleLastTestReverted_apiCallDateTime,
+
+    -- ** ListApplicationsRequestFilters
+    listApplicationsRequestFilters_applicationIDs,
+    listApplicationsRequestFilters_isArchived,
+    listApplicationsRequestFilters_waveIDs,
+
+    -- ** ListWavesRequestFilters
+    listWavesRequestFilters_isArchived,
+    listWavesRequestFilters_waveIDs,
+
+    -- ** NetworkInterface
+    networkInterface_ips,
+    networkInterface_isPrimary,
+    networkInterface_macAddress,
+
+    -- ** OS
+    os_fullString,
+
+    -- ** ParticipatingServer
+    participatingServer_launchStatus,
+    participatingServer_launchedEc2InstanceID,
+    participatingServer_postLaunchActionsStatus,
+    participatingServer_sourceServerID,
+
+    -- ** PostLaunchActions
+    postLaunchActions_cloudWatchLogGroupName,
+    postLaunchActions_deployment,
+    postLaunchActions_s3LogBucket,
+    postLaunchActions_s3OutputKeyPrefix,
+    postLaunchActions_ssmDocuments,
+
+    -- ** PostLaunchActionsStatus
+    postLaunchActionsStatus_postLaunchActionsLaunchStatusList,
+    postLaunchActionsStatus_ssmAgentDiscoveryDatetime,
+
+    -- ** ReplicationConfiguration
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- ** ReplicationConfigurationReplicatedDisk
+    replicationConfigurationReplicatedDisk_deviceName,
+    replicationConfigurationReplicatedDisk_iops,
+    replicationConfigurationReplicatedDisk_isBootDisk,
+    replicationConfigurationReplicatedDisk_stagingDiskType,
+    replicationConfigurationReplicatedDisk_throughput,
+
+    -- ** ReplicationConfigurationTemplate
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- ** SourceProperties
+    sourceProperties_cpus,
+    sourceProperties_disks,
+    sourceProperties_identificationHints,
+    sourceProperties_lastUpdatedDateTime,
+    sourceProperties_networkInterfaces,
+    sourceProperties_os,
+    sourceProperties_ramBytes,
+    sourceProperties_recommendedInstanceType,
+
+    -- ** SourceServer
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- ** SourceServerActionDocument
+    sourceServerActionDocument_actionID,
+    sourceServerActionDocument_actionName,
+    sourceServerActionDocument_active,
+    sourceServerActionDocument_documentIdentifier,
+    sourceServerActionDocument_documentVersion,
+    sourceServerActionDocument_mustSucceedForCutover,
+    sourceServerActionDocument_order,
+    sourceServerActionDocument_parameters,
+    sourceServerActionDocument_timeoutSeconds,
+
+    -- ** SourceServerActionsRequestFilters
+    sourceServerActionsRequestFilters_actionIDs,
+
+    -- ** SsmDocument
+    ssmDocument_mustSucceedForCutover,
+    ssmDocument_parameters,
+    ssmDocument_timeoutSeconds,
+    ssmDocument_actionName,
+    ssmDocument_ssmDocumentName,
+
+    -- ** SsmParameterStoreParameter
+    ssmParameterStoreParameter_parameterName,
+    ssmParameterStoreParameter_parameterType,
+
+    -- ** TemplateActionDocument
+    templateActionDocument_actionID,
+    templateActionDocument_actionName,
+    templateActionDocument_active,
+    templateActionDocument_documentIdentifier,
+    templateActionDocument_documentVersion,
+    templateActionDocument_mustSucceedForCutover,
+    templateActionDocument_operatingSystem,
+    templateActionDocument_order,
+    templateActionDocument_parameters,
+    templateActionDocument_timeoutSeconds,
+
+    -- ** TemplateActionsRequestFilters
+    templateActionsRequestFilters_actionIDs,
+
+    -- ** VcenterClient
+    vcenterClient_arn,
+    vcenterClient_datacenterName,
+    vcenterClient_hostname,
+    vcenterClient_lastSeenDatetime,
+    vcenterClient_sourceServerTags,
+    vcenterClient_tags,
+    vcenterClient_vcenterClientID,
+    vcenterClient_vcenterUUID,
+
+    -- ** Wave
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+
+    -- ** WaveAggregatedStatus
+    waveAggregatedStatus_healthStatus,
+    waveAggregatedStatus_lastUpdateDateTime,
+    waveAggregatedStatus_progressStatus,
+    waveAggregatedStatus_replicationStartedDateTime,
+    waveAggregatedStatus_totalApplications,
+  )
+where
+
+import Amazonka.MGN.ArchiveApplication
+import Amazonka.MGN.ArchiveWave
+import Amazonka.MGN.AssociateApplications
+import Amazonka.MGN.AssociateSourceServers
+import Amazonka.MGN.ChangeServerLifeCycleState
+import Amazonka.MGN.CreateApplication
+import Amazonka.MGN.CreateLaunchConfigurationTemplate
+import Amazonka.MGN.CreateReplicationConfigurationTemplate
+import Amazonka.MGN.CreateWave
+import Amazonka.MGN.DeleteApplication
+import Amazonka.MGN.DeleteJob
+import Amazonka.MGN.DeleteLaunchConfigurationTemplate
+import Amazonka.MGN.DeleteReplicationConfigurationTemplate
+import Amazonka.MGN.DeleteSourceServer
+import Amazonka.MGN.DeleteVcenterClient
+import Amazonka.MGN.DeleteWave
+import Amazonka.MGN.DescribeJobLogItems
+import Amazonka.MGN.DescribeJobs
+import Amazonka.MGN.DescribeLaunchConfigurationTemplates
+import Amazonka.MGN.DescribeReplicationConfigurationTemplates
+import Amazonka.MGN.DescribeSourceServers
+import Amazonka.MGN.DescribeVcenterClients
+import Amazonka.MGN.DisassociateApplications
+import Amazonka.MGN.DisassociateSourceServers
+import Amazonka.MGN.DisconnectFromService
+import Amazonka.MGN.FinalizeCutover
+import Amazonka.MGN.GetLaunchConfiguration
+import Amazonka.MGN.GetReplicationConfiguration
+import Amazonka.MGN.InitializeService
+import Amazonka.MGN.ListApplications
+import Amazonka.MGN.ListSourceServerActions
+import Amazonka.MGN.ListTagsForResource
+import Amazonka.MGN.ListTemplateActions
+import Amazonka.MGN.ListWaves
+import Amazonka.MGN.MarkAsArchived
+import Amazonka.MGN.PutSourceServerAction
+import Amazonka.MGN.PutTemplateAction
+import Amazonka.MGN.RemoveSourceServerAction
+import Amazonka.MGN.RemoveTemplateAction
+import Amazonka.MGN.RetryDataReplication
+import Amazonka.MGN.StartCutover
+import Amazonka.MGN.StartReplication
+import Amazonka.MGN.StartTest
+import Amazonka.MGN.TagResource
+import Amazonka.MGN.TerminateTargetInstances
+import Amazonka.MGN.Types.Application
+import Amazonka.MGN.Types.ApplicationAggregatedStatus
+import Amazonka.MGN.Types.CPU
+import Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycle
+import Amazonka.MGN.Types.DataReplicationError
+import Amazonka.MGN.Types.DataReplicationInfo
+import Amazonka.MGN.Types.DataReplicationInfoReplicatedDisk
+import Amazonka.MGN.Types.DataReplicationInitiation
+import Amazonka.MGN.Types.DataReplicationInitiationStep
+import Amazonka.MGN.Types.DescribeJobsRequestFilters
+import Amazonka.MGN.Types.DescribeSourceServersRequestFilters
+import Amazonka.MGN.Types.Disk
+import Amazonka.MGN.Types.IdentificationHints
+import Amazonka.MGN.Types.Job
+import Amazonka.MGN.Types.JobLog
+import Amazonka.MGN.Types.JobLogEventData
+import Amazonka.MGN.Types.JobPostLaunchActionsLaunchStatus
+import Amazonka.MGN.Types.LaunchConfiguration
+import Amazonka.MGN.Types.LaunchConfigurationTemplate
+import Amazonka.MGN.Types.LaunchTemplateDiskConf
+import Amazonka.MGN.Types.LaunchedInstance
+import Amazonka.MGN.Types.Licensing
+import Amazonka.MGN.Types.LifeCycle
+import Amazonka.MGN.Types.LifeCycleLastCutover
+import Amazonka.MGN.Types.LifeCycleLastCutoverFinalized
+import Amazonka.MGN.Types.LifeCycleLastCutoverInitiated
+import Amazonka.MGN.Types.LifeCycleLastCutoverReverted
+import Amazonka.MGN.Types.LifeCycleLastTest
+import Amazonka.MGN.Types.LifeCycleLastTestFinalized
+import Amazonka.MGN.Types.LifeCycleLastTestInitiated
+import Amazonka.MGN.Types.LifeCycleLastTestReverted
+import Amazonka.MGN.Types.ListApplicationsRequestFilters
+import Amazonka.MGN.Types.ListWavesRequestFilters
+import Amazonka.MGN.Types.NetworkInterface
+import Amazonka.MGN.Types.OS
+import Amazonka.MGN.Types.ParticipatingServer
+import Amazonka.MGN.Types.PostLaunchActions
+import Amazonka.MGN.Types.PostLaunchActionsStatus
+import Amazonka.MGN.Types.ReplicationConfiguration
+import Amazonka.MGN.Types.ReplicationConfigurationReplicatedDisk
+import Amazonka.MGN.Types.ReplicationConfigurationTemplate
+import Amazonka.MGN.Types.SourceProperties
+import Amazonka.MGN.Types.SourceServer
+import Amazonka.MGN.Types.SourceServerActionDocument
+import Amazonka.MGN.Types.SourceServerActionsRequestFilters
+import Amazonka.MGN.Types.SsmDocument
+import Amazonka.MGN.Types.SsmParameterStoreParameter
+import Amazonka.MGN.Types.TemplateActionDocument
+import Amazonka.MGN.Types.TemplateActionsRequestFilters
+import Amazonka.MGN.Types.VcenterClient
+import Amazonka.MGN.Types.Wave
+import Amazonka.MGN.Types.WaveAggregatedStatus
+import Amazonka.MGN.UnarchiveApplication
+import Amazonka.MGN.UnarchiveWave
+import Amazonka.MGN.UntagResource
+import Amazonka.MGN.UpdateApplication
+import Amazonka.MGN.UpdateLaunchConfiguration
+import Amazonka.MGN.UpdateLaunchConfigurationTemplate
+import Amazonka.MGN.UpdateReplicationConfiguration
+import Amazonka.MGN.UpdateReplicationConfigurationTemplate
+import Amazonka.MGN.UpdateSourceServerReplicationType
+import Amazonka.MGN.UpdateWave
diff --git a/gen/Amazonka/MGN/ListApplications.hs b/gen/Amazonka/MGN/ListApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ListApplications.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.ListApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves all applications or multiple applications by ID.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.ListApplications
+  ( -- * Creating a Request
+    ListApplications (..),
+    newListApplications,
+
+    -- * Request Lenses
+    listApplications_filters,
+    listApplications_maxResults,
+    listApplications_nextToken,
+
+    -- * Destructuring the Response
+    ListApplicationsResponse (..),
+    newListApplicationsResponse,
+
+    -- * Response Lenses
+    listApplicationsResponse_items,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListApplications' smart constructor.
+data ListApplications = ListApplications'
+  { -- | Applications list filters.
+    filters :: Prelude.Maybe ListApplicationsRequestFilters,
+    -- | Maximum results to return when listing applications.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Request next token.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listApplications_filters' - Applications list filters.
+--
+-- 'maxResults', 'listApplications_maxResults' - Maximum results to return when listing applications.
+--
+-- 'nextToken', 'listApplications_nextToken' - Request next token.
+newListApplications ::
+  ListApplications
+newListApplications =
+  ListApplications'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Applications list filters.
+listApplications_filters :: Lens.Lens' ListApplications (Prelude.Maybe ListApplicationsRequestFilters)
+listApplications_filters = Lens.lens (\ListApplications' {filters} -> filters) (\s@ListApplications' {} a -> s {filters = a} :: ListApplications)
+
+-- | Maximum results to return when listing applications.
+listApplications_maxResults :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Natural)
+listApplications_maxResults = Lens.lens (\ListApplications' {maxResults} -> maxResults) (\s@ListApplications' {} a -> s {maxResults = a} :: ListApplications)
+
+-- | Request next token.
+listApplications_nextToken :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Text)
+listApplications_nextToken = Lens.lens (\ListApplications' {nextToken} -> nextToken) (\s@ListApplications' {} a -> s {nextToken = a} :: ListApplications)
+
+instance Core.AWSPager ListApplications where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listApplicationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listApplicationsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listApplications_nextToken
+          Lens..~ rs
+          Lens.^? listApplicationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListApplications where
+  type
+    AWSResponse ListApplications =
+      ListApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListApplicationsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListApplications where
+  hashWithSalt _salt ListApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApplications where
+  rnf ListApplications' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListApplications where
+  toJSON ListApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListApplications where
+  toPath = Prelude.const "/ListApplications"
+
+instance Data.ToQuery ListApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListApplicationsResponse' smart constructor.
+data ListApplicationsResponse = ListApplicationsResponse'
+  { -- | Applications list.
+    items :: Prelude.Maybe [Application],
+    -- | Response next token.
+    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 'ListApplicationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listApplicationsResponse_items' - Applications list.
+--
+-- 'nextToken', 'listApplicationsResponse_nextToken' - Response next token.
+--
+-- 'httpStatus', 'listApplicationsResponse_httpStatus' - The response's http status code.
+newListApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListApplicationsResponse
+newListApplicationsResponse pHttpStatus_ =
+  ListApplicationsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Applications list.
+listApplicationsResponse_items :: Lens.Lens' ListApplicationsResponse (Prelude.Maybe [Application])
+listApplicationsResponse_items = Lens.lens (\ListApplicationsResponse' {items} -> items) (\s@ListApplicationsResponse' {} a -> s {items = a} :: ListApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Response next token.
+listApplicationsResponse_nextToken :: Lens.Lens' ListApplicationsResponse (Prelude.Maybe Prelude.Text)
+listApplicationsResponse_nextToken = Lens.lens (\ListApplicationsResponse' {nextToken} -> nextToken) (\s@ListApplicationsResponse' {} a -> s {nextToken = a} :: ListApplicationsResponse)
+
+-- | The response's http status code.
+listApplicationsResponse_httpStatus :: Lens.Lens' ListApplicationsResponse Prelude.Int
+listApplicationsResponse_httpStatus = Lens.lens (\ListApplicationsResponse' {httpStatus} -> httpStatus) (\s@ListApplicationsResponse' {} a -> s {httpStatus = a} :: ListApplicationsResponse)
+
+instance Prelude.NFData ListApplicationsResponse where
+  rnf ListApplicationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/ListSourceServerActions.hs b/gen/Amazonka/MGN/ListSourceServerActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ListSourceServerActions.hs
@@ -0,0 +1,260 @@
+{-# 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.MGN.ListSourceServerActions
+-- 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 source server post migration custom actions.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.ListSourceServerActions
+  ( -- * Creating a Request
+    ListSourceServerActions (..),
+    newListSourceServerActions,
+
+    -- * Request Lenses
+    listSourceServerActions_filters,
+    listSourceServerActions_maxResults,
+    listSourceServerActions_nextToken,
+    listSourceServerActions_sourceServerID,
+
+    -- * Destructuring the Response
+    ListSourceServerActionsResponse (..),
+    newListSourceServerActionsResponse,
+
+    -- * Response Lenses
+    listSourceServerActionsResponse_items,
+    listSourceServerActionsResponse_nextToken,
+    listSourceServerActionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSourceServerActions' smart constructor.
+data ListSourceServerActions = ListSourceServerActions'
+  { -- | Filters to apply when listing source server post migration custom
+    -- actions.
+    filters :: Prelude.Maybe SourceServerActionsRequestFilters,
+    -- | Maximum amount of items to return when listing source server post
+    -- migration custom actions.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Next token to use when listing source server post migration custom
+    -- actions.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Source server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSourceServerActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSourceServerActions_filters' - Filters to apply when listing source server post migration custom
+-- actions.
+--
+-- 'maxResults', 'listSourceServerActions_maxResults' - Maximum amount of items to return when listing source server post
+-- migration custom actions.
+--
+-- 'nextToken', 'listSourceServerActions_nextToken' - Next token to use when listing source server post migration custom
+-- actions.
+--
+-- 'sourceServerID', 'listSourceServerActions_sourceServerID' - Source server ID.
+newListSourceServerActions ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  ListSourceServerActions
+newListSourceServerActions pSourceServerID_ =
+  ListSourceServerActions'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | Filters to apply when listing source server post migration custom
+-- actions.
+listSourceServerActions_filters :: Lens.Lens' ListSourceServerActions (Prelude.Maybe SourceServerActionsRequestFilters)
+listSourceServerActions_filters = Lens.lens (\ListSourceServerActions' {filters} -> filters) (\s@ListSourceServerActions' {} a -> s {filters = a} :: ListSourceServerActions)
+
+-- | Maximum amount of items to return when listing source server post
+-- migration custom actions.
+listSourceServerActions_maxResults :: Lens.Lens' ListSourceServerActions (Prelude.Maybe Prelude.Natural)
+listSourceServerActions_maxResults = Lens.lens (\ListSourceServerActions' {maxResults} -> maxResults) (\s@ListSourceServerActions' {} a -> s {maxResults = a} :: ListSourceServerActions)
+
+-- | Next token to use when listing source server post migration custom
+-- actions.
+listSourceServerActions_nextToken :: Lens.Lens' ListSourceServerActions (Prelude.Maybe Prelude.Text)
+listSourceServerActions_nextToken = Lens.lens (\ListSourceServerActions' {nextToken} -> nextToken) (\s@ListSourceServerActions' {} a -> s {nextToken = a} :: ListSourceServerActions)
+
+-- | Source server ID.
+listSourceServerActions_sourceServerID :: Lens.Lens' ListSourceServerActions Prelude.Text
+listSourceServerActions_sourceServerID = Lens.lens (\ListSourceServerActions' {sourceServerID} -> sourceServerID) (\s@ListSourceServerActions' {} a -> s {sourceServerID = a} :: ListSourceServerActions)
+
+instance Core.AWSPager ListSourceServerActions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSourceServerActionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSourceServerActionsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSourceServerActions_nextToken
+          Lens..~ rs
+          Lens.^? listSourceServerActionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSourceServerActions where
+  type
+    AWSResponse ListSourceServerActions =
+      ListSourceServerActionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSourceServerActionsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSourceServerActions where
+  hashWithSalt _salt ListSourceServerActions' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData ListSourceServerActions where
+  rnf ListSourceServerActions' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToHeaders ListSourceServerActions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSourceServerActions where
+  toJSON ListSourceServerActions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath ListSourceServerActions where
+  toPath = Prelude.const "/ListSourceServerActions"
+
+instance Data.ToQuery ListSourceServerActions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSourceServerActionsResponse' smart constructor.
+data ListSourceServerActionsResponse = ListSourceServerActionsResponse'
+  { -- | List of source server post migration custom actions.
+    items :: Prelude.Maybe [SourceServerActionDocument],
+    -- | Next token returned when listing source server post migration custom
+    -- actions.
+    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 'ListSourceServerActionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSourceServerActionsResponse_items' - List of source server post migration custom actions.
+--
+-- 'nextToken', 'listSourceServerActionsResponse_nextToken' - Next token returned when listing source server post migration custom
+-- actions.
+--
+-- 'httpStatus', 'listSourceServerActionsResponse_httpStatus' - The response's http status code.
+newListSourceServerActionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSourceServerActionsResponse
+newListSourceServerActionsResponse pHttpStatus_ =
+  ListSourceServerActionsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List of source server post migration custom actions.
+listSourceServerActionsResponse_items :: Lens.Lens' ListSourceServerActionsResponse (Prelude.Maybe [SourceServerActionDocument])
+listSourceServerActionsResponse_items = Lens.lens (\ListSourceServerActionsResponse' {items} -> items) (\s@ListSourceServerActionsResponse' {} a -> s {items = a} :: ListSourceServerActionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Next token returned when listing source server post migration custom
+-- actions.
+listSourceServerActionsResponse_nextToken :: Lens.Lens' ListSourceServerActionsResponse (Prelude.Maybe Prelude.Text)
+listSourceServerActionsResponse_nextToken = Lens.lens (\ListSourceServerActionsResponse' {nextToken} -> nextToken) (\s@ListSourceServerActionsResponse' {} a -> s {nextToken = a} :: ListSourceServerActionsResponse)
+
+-- | The response's http status code.
+listSourceServerActionsResponse_httpStatus :: Lens.Lens' ListSourceServerActionsResponse Prelude.Int
+listSourceServerActionsResponse_httpStatus = Lens.lens (\ListSourceServerActionsResponse' {httpStatus} -> httpStatus) (\s@ListSourceServerActionsResponse' {} a -> s {httpStatus = a} :: ListSourceServerActionsResponse)
+
+instance
+  Prelude.NFData
+    ListSourceServerActionsResponse
+  where
+  rnf ListSourceServerActionsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/ListTagsForResource.hs b/gen/Amazonka/MGN/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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 Application Migration Service resources.
+module Amazonka.MGN.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.MGN.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'
+  { -- | List tags for resource request by ARN.
+    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' - List tags for resource request by ARN.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | List tags for resource request by ARN.
+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'
+  { -- | List tags for resource response.
+    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' - List tags for resource response.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List tags for resource response.
+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/MGN/ListTemplateActions.hs b/gen/Amazonka/MGN/ListTemplateActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ListTemplateActions.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.ListTemplateActions
+-- 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 template post migration custom actions.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.ListTemplateActions
+  ( -- * Creating a Request
+    ListTemplateActions (..),
+    newListTemplateActions,
+
+    -- * Request Lenses
+    listTemplateActions_filters,
+    listTemplateActions_maxResults,
+    listTemplateActions_nextToken,
+    listTemplateActions_launchConfigurationTemplateID,
+
+    -- * Destructuring the Response
+    ListTemplateActionsResponse (..),
+    newListTemplateActionsResponse,
+
+    -- * Response Lenses
+    listTemplateActionsResponse_items,
+    listTemplateActionsResponse_nextToken,
+    listTemplateActionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTemplateActions' smart constructor.
+data ListTemplateActions = ListTemplateActions'
+  { -- | Filters to apply when listing template post migration custom actions.
+    filters :: Prelude.Maybe TemplateActionsRequestFilters,
+    -- | Maximum amount of items to return when listing template post migration
+    -- custom actions.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Next token to use when listing template post migration custom actions.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Launch configuration template ID.
+    launchConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplateActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplateActions_filters' - Filters to apply when listing template post migration custom actions.
+--
+-- 'maxResults', 'listTemplateActions_maxResults' - Maximum amount of items to return when listing template post migration
+-- custom actions.
+--
+-- 'nextToken', 'listTemplateActions_nextToken' - Next token to use when listing template post migration custom actions.
+--
+-- 'launchConfigurationTemplateID', 'listTemplateActions_launchConfigurationTemplateID' - Launch configuration template ID.
+newListTemplateActions ::
+  -- | 'launchConfigurationTemplateID'
+  Prelude.Text ->
+  ListTemplateActions
+newListTemplateActions
+  pLaunchConfigurationTemplateID_ =
+    ListTemplateActions'
+      { filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        launchConfigurationTemplateID =
+          pLaunchConfigurationTemplateID_
+      }
+
+-- | Filters to apply when listing template post migration custom actions.
+listTemplateActions_filters :: Lens.Lens' ListTemplateActions (Prelude.Maybe TemplateActionsRequestFilters)
+listTemplateActions_filters = Lens.lens (\ListTemplateActions' {filters} -> filters) (\s@ListTemplateActions' {} a -> s {filters = a} :: ListTemplateActions)
+
+-- | Maximum amount of items to return when listing template post migration
+-- custom actions.
+listTemplateActions_maxResults :: Lens.Lens' ListTemplateActions (Prelude.Maybe Prelude.Natural)
+listTemplateActions_maxResults = Lens.lens (\ListTemplateActions' {maxResults} -> maxResults) (\s@ListTemplateActions' {} a -> s {maxResults = a} :: ListTemplateActions)
+
+-- | Next token to use when listing template post migration custom actions.
+listTemplateActions_nextToken :: Lens.Lens' ListTemplateActions (Prelude.Maybe Prelude.Text)
+listTemplateActions_nextToken = Lens.lens (\ListTemplateActions' {nextToken} -> nextToken) (\s@ListTemplateActions' {} a -> s {nextToken = a} :: ListTemplateActions)
+
+-- | Launch configuration template ID.
+listTemplateActions_launchConfigurationTemplateID :: Lens.Lens' ListTemplateActions Prelude.Text
+listTemplateActions_launchConfigurationTemplateID = Lens.lens (\ListTemplateActions' {launchConfigurationTemplateID} -> launchConfigurationTemplateID) (\s@ListTemplateActions' {} a -> s {launchConfigurationTemplateID = a} :: ListTemplateActions)
+
+instance Core.AWSPager ListTemplateActions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTemplateActionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listTemplateActionsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTemplateActions_nextToken
+          Lens..~ rs
+          Lens.^? listTemplateActionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTemplateActions where
+  type
+    AWSResponse ListTemplateActions =
+      ListTemplateActionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTemplateActionsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTemplateActions where
+  hashWithSalt _salt ListTemplateActions' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` launchConfigurationTemplateID
+
+instance Prelude.NFData ListTemplateActions where
+  rnf ListTemplateActions' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf launchConfigurationTemplateID
+
+instance Data.ToHeaders ListTemplateActions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTemplateActions where
+  toJSON ListTemplateActions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ( "launchConfigurationTemplateID"
+                  Data..= launchConfigurationTemplateID
+              )
+          ]
+      )
+
+instance Data.ToPath ListTemplateActions where
+  toPath = Prelude.const "/ListTemplateActions"
+
+instance Data.ToQuery ListTemplateActions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTemplateActionsResponse' smart constructor.
+data ListTemplateActionsResponse = ListTemplateActionsResponse'
+  { -- | List of template post migration custom actions.
+    items :: Prelude.Maybe [TemplateActionDocument],
+    -- | Next token returned when listing template post migration custom actions.
+    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 'ListTemplateActionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplateActionsResponse_items' - List of template post migration custom actions.
+--
+-- 'nextToken', 'listTemplateActionsResponse_nextToken' - Next token returned when listing template post migration custom actions.
+--
+-- 'httpStatus', 'listTemplateActionsResponse_httpStatus' - The response's http status code.
+newListTemplateActionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTemplateActionsResponse
+newListTemplateActionsResponse pHttpStatus_ =
+  ListTemplateActionsResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List of template post migration custom actions.
+listTemplateActionsResponse_items :: Lens.Lens' ListTemplateActionsResponse (Prelude.Maybe [TemplateActionDocument])
+listTemplateActionsResponse_items = Lens.lens (\ListTemplateActionsResponse' {items} -> items) (\s@ListTemplateActionsResponse' {} a -> s {items = a} :: ListTemplateActionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Next token returned when listing template post migration custom actions.
+listTemplateActionsResponse_nextToken :: Lens.Lens' ListTemplateActionsResponse (Prelude.Maybe Prelude.Text)
+listTemplateActionsResponse_nextToken = Lens.lens (\ListTemplateActionsResponse' {nextToken} -> nextToken) (\s@ListTemplateActionsResponse' {} a -> s {nextToken = a} :: ListTemplateActionsResponse)
+
+-- | The response's http status code.
+listTemplateActionsResponse_httpStatus :: Lens.Lens' ListTemplateActionsResponse Prelude.Int
+listTemplateActionsResponse_httpStatus = Lens.lens (\ListTemplateActionsResponse' {httpStatus} -> httpStatus) (\s@ListTemplateActionsResponse' {} a -> s {httpStatus = a} :: ListTemplateActionsResponse)
+
+instance Prelude.NFData ListTemplateActionsResponse where
+  rnf ListTemplateActionsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/ListWaves.hs b/gen/Amazonka/MGN/ListWaves.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/ListWaves.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.ListWaves
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves all waves or multiple waves by ID.
+--
+-- This operation returns paginated results.
+module Amazonka.MGN.ListWaves
+  ( -- * Creating a Request
+    ListWaves (..),
+    newListWaves,
+
+    -- * Request Lenses
+    listWaves_filters,
+    listWaves_maxResults,
+    listWaves_nextToken,
+
+    -- * Destructuring the Response
+    ListWavesResponse (..),
+    newListWavesResponse,
+
+    -- * Response Lenses
+    listWavesResponse_items,
+    listWavesResponse_nextToken,
+    listWavesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWaves' smart constructor.
+data ListWaves = ListWaves'
+  { -- | Waves list filters.
+    filters :: Prelude.Maybe ListWavesRequestFilters,
+    -- | Maximum results to return when listing waves.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Request next token.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWaves' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listWaves_filters' - Waves list filters.
+--
+-- 'maxResults', 'listWaves_maxResults' - Maximum results to return when listing waves.
+--
+-- 'nextToken', 'listWaves_nextToken' - Request next token.
+newListWaves ::
+  ListWaves
+newListWaves =
+  ListWaves'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Waves list filters.
+listWaves_filters :: Lens.Lens' ListWaves (Prelude.Maybe ListWavesRequestFilters)
+listWaves_filters = Lens.lens (\ListWaves' {filters} -> filters) (\s@ListWaves' {} a -> s {filters = a} :: ListWaves)
+
+-- | Maximum results to return when listing waves.
+listWaves_maxResults :: Lens.Lens' ListWaves (Prelude.Maybe Prelude.Natural)
+listWaves_maxResults = Lens.lens (\ListWaves' {maxResults} -> maxResults) (\s@ListWaves' {} a -> s {maxResults = a} :: ListWaves)
+
+-- | Request next token.
+listWaves_nextToken :: Lens.Lens' ListWaves (Prelude.Maybe Prelude.Text)
+listWaves_nextToken = Lens.lens (\ListWaves' {nextToken} -> nextToken) (\s@ListWaves' {} a -> s {nextToken = a} :: ListWaves)
+
+instance Core.AWSPager ListWaves where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWavesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWavesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWaves_nextToken
+          Lens..~ rs
+          Lens.^? listWavesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWaves where
+  type AWSResponse ListWaves = ListWavesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWavesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWaves where
+  hashWithSalt _salt ListWaves' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWaves where
+  rnf ListWaves' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWaves where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWaves where
+  toJSON ListWaves' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWaves where
+  toPath = Prelude.const "/ListWaves"
+
+instance Data.ToQuery ListWaves where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWavesResponse' smart constructor.
+data ListWavesResponse = ListWavesResponse'
+  { -- | Waves list.
+    items :: Prelude.Maybe [Wave],
+    -- | Response next token.
+    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 'ListWavesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listWavesResponse_items' - Waves list.
+--
+-- 'nextToken', 'listWavesResponse_nextToken' - Response next token.
+--
+-- 'httpStatus', 'listWavesResponse_httpStatus' - The response's http status code.
+newListWavesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWavesResponse
+newListWavesResponse pHttpStatus_ =
+  ListWavesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Waves list.
+listWavesResponse_items :: Lens.Lens' ListWavesResponse (Prelude.Maybe [Wave])
+listWavesResponse_items = Lens.lens (\ListWavesResponse' {items} -> items) (\s@ListWavesResponse' {} a -> s {items = a} :: ListWavesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Response next token.
+listWavesResponse_nextToken :: Lens.Lens' ListWavesResponse (Prelude.Maybe Prelude.Text)
+listWavesResponse_nextToken = Lens.lens (\ListWavesResponse' {nextToken} -> nextToken) (\s@ListWavesResponse' {} a -> s {nextToken = a} :: ListWavesResponse)
+
+-- | The response's http status code.
+listWavesResponse_httpStatus :: Lens.Lens' ListWavesResponse Prelude.Int
+listWavesResponse_httpStatus = Lens.lens (\ListWavesResponse' {httpStatus} -> httpStatus) (\s@ListWavesResponse' {} a -> s {httpStatus = a} :: ListWavesResponse)
+
+instance Prelude.NFData ListWavesResponse where
+  rnf ListWavesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/MarkAsArchived.hs b/gen/Amazonka/MGN/MarkAsArchived.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/MarkAsArchived.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.MarkAsArchived
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Archives specific Source Servers by setting the SourceServer.isArchived
+-- property to true for specified SourceServers by ID. This command only
+-- works for SourceServers with a lifecycle. state which equals
+-- DISCONNECTED or CUTOVER.
+module Amazonka.MGN.MarkAsArchived
+  ( -- * Creating a Request
+    MarkAsArchived (..),
+    newMarkAsArchived,
+
+    -- * Request Lenses
+    markAsArchived_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newMarkAsArchived' smart constructor.
+data MarkAsArchived = MarkAsArchived'
+  { -- | Mark as archived by Source Server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MarkAsArchived' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'markAsArchived_sourceServerID' - Mark as archived by Source Server ID.
+newMarkAsArchived ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  MarkAsArchived
+newMarkAsArchived pSourceServerID_ =
+  MarkAsArchived' {sourceServerID = pSourceServerID_}
+
+-- | Mark as archived by Source Server ID.
+markAsArchived_sourceServerID :: Lens.Lens' MarkAsArchived Prelude.Text
+markAsArchived_sourceServerID = Lens.lens (\MarkAsArchived' {sourceServerID} -> sourceServerID) (\s@MarkAsArchived' {} a -> s {sourceServerID = a} :: MarkAsArchived)
+
+instance Core.AWSRequest MarkAsArchived where
+  type AWSResponse MarkAsArchived = SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable MarkAsArchived where
+  hashWithSalt _salt MarkAsArchived' {..} =
+    _salt `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData MarkAsArchived where
+  rnf MarkAsArchived' {..} = Prelude.rnf sourceServerID
+
+instance Data.ToHeaders MarkAsArchived where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON MarkAsArchived where
+  toJSON MarkAsArchived' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath MarkAsArchived where
+  toPath = Prelude.const "/MarkAsArchived"
+
+instance Data.ToQuery MarkAsArchived where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/PutSourceServerAction.hs b/gen/Amazonka/MGN/PutSourceServerAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/PutSourceServerAction.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.PutSourceServerAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Put source server post migration custom action.
+module Amazonka.MGN.PutSourceServerAction
+  ( -- * Creating a Request
+    PutSourceServerAction (..),
+    newPutSourceServerAction,
+
+    -- * Request Lenses
+    putSourceServerAction_active,
+    putSourceServerAction_documentVersion,
+    putSourceServerAction_mustSucceedForCutover,
+    putSourceServerAction_parameters,
+    putSourceServerAction_timeoutSeconds,
+    putSourceServerAction_actionID,
+    putSourceServerAction_actionName,
+    putSourceServerAction_documentIdentifier,
+    putSourceServerAction_order,
+    putSourceServerAction_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServerActionDocument (..),
+    newSourceServerActionDocument,
+
+    -- * Response Lenses
+    sourceServerActionDocument_actionID,
+    sourceServerActionDocument_actionName,
+    sourceServerActionDocument_active,
+    sourceServerActionDocument_documentIdentifier,
+    sourceServerActionDocument_documentVersion,
+    sourceServerActionDocument_mustSucceedForCutover,
+    sourceServerActionDocument_order,
+    sourceServerActionDocument_parameters,
+    sourceServerActionDocument_timeoutSeconds,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutSourceServerAction' smart constructor.
+data PutSourceServerAction = PutSourceServerAction'
+  { -- | Source server post migration custom action active status.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | Source server post migration custom action document version.
+    documentVersion :: Prelude.Maybe Prelude.Text,
+    -- | Source server post migration custom action must succeed for cutover.
+    mustSucceedForCutover :: Prelude.Maybe Prelude.Bool,
+    -- | Source server post migration custom action parameters.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]),
+    -- | Source server post migration custom action timeout in seconds.
+    timeoutSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | Source server post migration custom action ID.
+    actionID :: Prelude.Text,
+    -- | Source server post migration custom action name.
+    actionName :: Prelude.Text,
+    -- | Source server post migration custom action document identifier.
+    documentIdentifier :: Prelude.Text,
+    -- | Source server post migration custom action order.
+    order :: Prelude.Natural,
+    -- | Source server ID.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSourceServerAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'active', 'putSourceServerAction_active' - Source server post migration custom action active status.
+--
+-- 'documentVersion', 'putSourceServerAction_documentVersion' - Source server post migration custom action document version.
+--
+-- 'mustSucceedForCutover', 'putSourceServerAction_mustSucceedForCutover' - Source server post migration custom action must succeed for cutover.
+--
+-- 'parameters', 'putSourceServerAction_parameters' - Source server post migration custom action parameters.
+--
+-- 'timeoutSeconds', 'putSourceServerAction_timeoutSeconds' - Source server post migration custom action timeout in seconds.
+--
+-- 'actionID', 'putSourceServerAction_actionID' - Source server post migration custom action ID.
+--
+-- 'actionName', 'putSourceServerAction_actionName' - Source server post migration custom action name.
+--
+-- 'documentIdentifier', 'putSourceServerAction_documentIdentifier' - Source server post migration custom action document identifier.
+--
+-- 'order', 'putSourceServerAction_order' - Source server post migration custom action order.
+--
+-- 'sourceServerID', 'putSourceServerAction_sourceServerID' - Source server ID.
+newPutSourceServerAction ::
+  -- | 'actionID'
+  Prelude.Text ->
+  -- | 'actionName'
+  Prelude.Text ->
+  -- | 'documentIdentifier'
+  Prelude.Text ->
+  -- | 'order'
+  Prelude.Natural ->
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  PutSourceServerAction
+newPutSourceServerAction
+  pActionID_
+  pActionName_
+  pDocumentIdentifier_
+  pOrder_
+  pSourceServerID_ =
+    PutSourceServerAction'
+      { active = Prelude.Nothing,
+        documentVersion = Prelude.Nothing,
+        mustSucceedForCutover = Prelude.Nothing,
+        parameters = Prelude.Nothing,
+        timeoutSeconds = Prelude.Nothing,
+        actionID = pActionID_,
+        actionName = pActionName_,
+        documentIdentifier = pDocumentIdentifier_,
+        order = pOrder_,
+        sourceServerID = pSourceServerID_
+      }
+
+-- | Source server post migration custom action active status.
+putSourceServerAction_active :: Lens.Lens' PutSourceServerAction (Prelude.Maybe Prelude.Bool)
+putSourceServerAction_active = Lens.lens (\PutSourceServerAction' {active} -> active) (\s@PutSourceServerAction' {} a -> s {active = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action document version.
+putSourceServerAction_documentVersion :: Lens.Lens' PutSourceServerAction (Prelude.Maybe Prelude.Text)
+putSourceServerAction_documentVersion = Lens.lens (\PutSourceServerAction' {documentVersion} -> documentVersion) (\s@PutSourceServerAction' {} a -> s {documentVersion = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action must succeed for cutover.
+putSourceServerAction_mustSucceedForCutover :: Lens.Lens' PutSourceServerAction (Prelude.Maybe Prelude.Bool)
+putSourceServerAction_mustSucceedForCutover = Lens.lens (\PutSourceServerAction' {mustSucceedForCutover} -> mustSucceedForCutover) (\s@PutSourceServerAction' {} a -> s {mustSucceedForCutover = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action parameters.
+putSourceServerAction_parameters :: Lens.Lens' PutSourceServerAction (Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]))
+putSourceServerAction_parameters = Lens.lens (\PutSourceServerAction' {parameters} -> parameters) (\s@PutSourceServerAction' {} a -> s {parameters = a} :: PutSourceServerAction) Prelude.. Lens.mapping Lens.coerced
+
+-- | Source server post migration custom action timeout in seconds.
+putSourceServerAction_timeoutSeconds :: Lens.Lens' PutSourceServerAction (Prelude.Maybe Prelude.Natural)
+putSourceServerAction_timeoutSeconds = Lens.lens (\PutSourceServerAction' {timeoutSeconds} -> timeoutSeconds) (\s@PutSourceServerAction' {} a -> s {timeoutSeconds = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action ID.
+putSourceServerAction_actionID :: Lens.Lens' PutSourceServerAction Prelude.Text
+putSourceServerAction_actionID = Lens.lens (\PutSourceServerAction' {actionID} -> actionID) (\s@PutSourceServerAction' {} a -> s {actionID = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action name.
+putSourceServerAction_actionName :: Lens.Lens' PutSourceServerAction Prelude.Text
+putSourceServerAction_actionName = Lens.lens (\PutSourceServerAction' {actionName} -> actionName) (\s@PutSourceServerAction' {} a -> s {actionName = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action document identifier.
+putSourceServerAction_documentIdentifier :: Lens.Lens' PutSourceServerAction Prelude.Text
+putSourceServerAction_documentIdentifier = Lens.lens (\PutSourceServerAction' {documentIdentifier} -> documentIdentifier) (\s@PutSourceServerAction' {} a -> s {documentIdentifier = a} :: PutSourceServerAction)
+
+-- | Source server post migration custom action order.
+putSourceServerAction_order :: Lens.Lens' PutSourceServerAction Prelude.Natural
+putSourceServerAction_order = Lens.lens (\PutSourceServerAction' {order} -> order) (\s@PutSourceServerAction' {} a -> s {order = a} :: PutSourceServerAction)
+
+-- | Source server ID.
+putSourceServerAction_sourceServerID :: Lens.Lens' PutSourceServerAction Prelude.Text
+putSourceServerAction_sourceServerID = Lens.lens (\PutSourceServerAction' {sourceServerID} -> sourceServerID) (\s@PutSourceServerAction' {} a -> s {sourceServerID = a} :: PutSourceServerAction)
+
+instance Core.AWSRequest PutSourceServerAction where
+  type
+    AWSResponse PutSourceServerAction =
+      SourceServerActionDocument
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable PutSourceServerAction where
+  hashWithSalt _salt PutSourceServerAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` documentVersion
+      `Prelude.hashWithSalt` mustSucceedForCutover
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` timeoutSeconds
+      `Prelude.hashWithSalt` actionID
+      `Prelude.hashWithSalt` actionName
+      `Prelude.hashWithSalt` documentIdentifier
+      `Prelude.hashWithSalt` order
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData PutSourceServerAction where
+  rnf PutSourceServerAction' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf documentVersion
+      `Prelude.seq` Prelude.rnf mustSucceedForCutover
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf timeoutSeconds
+      `Prelude.seq` Prelude.rnf actionID
+      `Prelude.seq` Prelude.rnf actionName
+      `Prelude.seq` Prelude.rnf documentIdentifier
+      `Prelude.seq` Prelude.rnf order
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToHeaders PutSourceServerAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutSourceServerAction where
+  toJSON PutSourceServerAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("active" Data..=) Prelude.<$> active,
+            ("documentVersion" Data..=)
+              Prelude.<$> documentVersion,
+            ("mustSucceedForCutover" Data..=)
+              Prelude.<$> mustSucceedForCutover,
+            ("parameters" Data..=) Prelude.<$> parameters,
+            ("timeoutSeconds" Data..=)
+              Prelude.<$> timeoutSeconds,
+            Prelude.Just ("actionID" Data..= actionID),
+            Prelude.Just ("actionName" Data..= actionName),
+            Prelude.Just
+              ("documentIdentifier" Data..= documentIdentifier),
+            Prelude.Just ("order" Data..= order),
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath PutSourceServerAction where
+  toPath = Prelude.const "/PutSourceServerAction"
+
+instance Data.ToQuery PutSourceServerAction where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/PutTemplateAction.hs b/gen/Amazonka/MGN/PutTemplateAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/PutTemplateAction.hs
@@ -0,0 +1,284 @@
+{-# 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.MGN.PutTemplateAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Put template post migration custom action.
+module Amazonka.MGN.PutTemplateAction
+  ( -- * Creating a Request
+    PutTemplateAction (..),
+    newPutTemplateAction,
+
+    -- * Request Lenses
+    putTemplateAction_active,
+    putTemplateAction_documentVersion,
+    putTemplateAction_mustSucceedForCutover,
+    putTemplateAction_operatingSystem,
+    putTemplateAction_parameters,
+    putTemplateAction_timeoutSeconds,
+    putTemplateAction_actionID,
+    putTemplateAction_actionName,
+    putTemplateAction_documentIdentifier,
+    putTemplateAction_launchConfigurationTemplateID,
+    putTemplateAction_order,
+
+    -- * Destructuring the Response
+    TemplateActionDocument (..),
+    newTemplateActionDocument,
+
+    -- * Response Lenses
+    templateActionDocument_actionID,
+    templateActionDocument_actionName,
+    templateActionDocument_active,
+    templateActionDocument_documentIdentifier,
+    templateActionDocument_documentVersion,
+    templateActionDocument_mustSucceedForCutover,
+    templateActionDocument_operatingSystem,
+    templateActionDocument_order,
+    templateActionDocument_parameters,
+    templateActionDocument_timeoutSeconds,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutTemplateAction' smart constructor.
+data PutTemplateAction = PutTemplateAction'
+  { -- | Template post migration custom action active status.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | Template post migration custom action document version.
+    documentVersion :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action must succeed for cutover.
+    mustSucceedForCutover :: Prelude.Maybe Prelude.Bool,
+    -- | Operating system eligible for this template post migration custom
+    -- action.
+    operatingSystem :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action parameters.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]),
+    -- | Template post migration custom action timeout in seconds.
+    timeoutSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | Template post migration custom action ID.
+    actionID :: Prelude.Text,
+    -- | Template post migration custom action name.
+    actionName :: Prelude.Text,
+    -- | Template post migration custom action document identifier.
+    documentIdentifier :: Prelude.Text,
+    -- | Launch configuration template ID.
+    launchConfigurationTemplateID :: Prelude.Text,
+    -- | Template post migration custom action order.
+    order :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutTemplateAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'active', 'putTemplateAction_active' - Template post migration custom action active status.
+--
+-- 'documentVersion', 'putTemplateAction_documentVersion' - Template post migration custom action document version.
+--
+-- 'mustSucceedForCutover', 'putTemplateAction_mustSucceedForCutover' - Template post migration custom action must succeed for cutover.
+--
+-- 'operatingSystem', 'putTemplateAction_operatingSystem' - Operating system eligible for this template post migration custom
+-- action.
+--
+-- 'parameters', 'putTemplateAction_parameters' - Template post migration custom action parameters.
+--
+-- 'timeoutSeconds', 'putTemplateAction_timeoutSeconds' - Template post migration custom action timeout in seconds.
+--
+-- 'actionID', 'putTemplateAction_actionID' - Template post migration custom action ID.
+--
+-- 'actionName', 'putTemplateAction_actionName' - Template post migration custom action name.
+--
+-- 'documentIdentifier', 'putTemplateAction_documentIdentifier' - Template post migration custom action document identifier.
+--
+-- 'launchConfigurationTemplateID', 'putTemplateAction_launchConfigurationTemplateID' - Launch configuration template ID.
+--
+-- 'order', 'putTemplateAction_order' - Template post migration custom action order.
+newPutTemplateAction ::
+  -- | 'actionID'
+  Prelude.Text ->
+  -- | 'actionName'
+  Prelude.Text ->
+  -- | 'documentIdentifier'
+  Prelude.Text ->
+  -- | 'launchConfigurationTemplateID'
+  Prelude.Text ->
+  -- | 'order'
+  Prelude.Natural ->
+  PutTemplateAction
+newPutTemplateAction
+  pActionID_
+  pActionName_
+  pDocumentIdentifier_
+  pLaunchConfigurationTemplateID_
+  pOrder_ =
+    PutTemplateAction'
+      { active = Prelude.Nothing,
+        documentVersion = Prelude.Nothing,
+        mustSucceedForCutover = Prelude.Nothing,
+        operatingSystem = Prelude.Nothing,
+        parameters = Prelude.Nothing,
+        timeoutSeconds = Prelude.Nothing,
+        actionID = pActionID_,
+        actionName = pActionName_,
+        documentIdentifier = pDocumentIdentifier_,
+        launchConfigurationTemplateID =
+          pLaunchConfigurationTemplateID_,
+        order = pOrder_
+      }
+
+-- | Template post migration custom action active status.
+putTemplateAction_active :: Lens.Lens' PutTemplateAction (Prelude.Maybe Prelude.Bool)
+putTemplateAction_active = Lens.lens (\PutTemplateAction' {active} -> active) (\s@PutTemplateAction' {} a -> s {active = a} :: PutTemplateAction)
+
+-- | Template post migration custom action document version.
+putTemplateAction_documentVersion :: Lens.Lens' PutTemplateAction (Prelude.Maybe Prelude.Text)
+putTemplateAction_documentVersion = Lens.lens (\PutTemplateAction' {documentVersion} -> documentVersion) (\s@PutTemplateAction' {} a -> s {documentVersion = a} :: PutTemplateAction)
+
+-- | Template post migration custom action must succeed for cutover.
+putTemplateAction_mustSucceedForCutover :: Lens.Lens' PutTemplateAction (Prelude.Maybe Prelude.Bool)
+putTemplateAction_mustSucceedForCutover = Lens.lens (\PutTemplateAction' {mustSucceedForCutover} -> mustSucceedForCutover) (\s@PutTemplateAction' {} a -> s {mustSucceedForCutover = a} :: PutTemplateAction)
+
+-- | Operating system eligible for this template post migration custom
+-- action.
+putTemplateAction_operatingSystem :: Lens.Lens' PutTemplateAction (Prelude.Maybe Prelude.Text)
+putTemplateAction_operatingSystem = Lens.lens (\PutTemplateAction' {operatingSystem} -> operatingSystem) (\s@PutTemplateAction' {} a -> s {operatingSystem = a} :: PutTemplateAction)
+
+-- | Template post migration custom action parameters.
+putTemplateAction_parameters :: Lens.Lens' PutTemplateAction (Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]))
+putTemplateAction_parameters = Lens.lens (\PutTemplateAction' {parameters} -> parameters) (\s@PutTemplateAction' {} a -> s {parameters = a} :: PutTemplateAction) Prelude.. Lens.mapping Lens.coerced
+
+-- | Template post migration custom action timeout in seconds.
+putTemplateAction_timeoutSeconds :: Lens.Lens' PutTemplateAction (Prelude.Maybe Prelude.Natural)
+putTemplateAction_timeoutSeconds = Lens.lens (\PutTemplateAction' {timeoutSeconds} -> timeoutSeconds) (\s@PutTemplateAction' {} a -> s {timeoutSeconds = a} :: PutTemplateAction)
+
+-- | Template post migration custom action ID.
+putTemplateAction_actionID :: Lens.Lens' PutTemplateAction Prelude.Text
+putTemplateAction_actionID = Lens.lens (\PutTemplateAction' {actionID} -> actionID) (\s@PutTemplateAction' {} a -> s {actionID = a} :: PutTemplateAction)
+
+-- | Template post migration custom action name.
+putTemplateAction_actionName :: Lens.Lens' PutTemplateAction Prelude.Text
+putTemplateAction_actionName = Lens.lens (\PutTemplateAction' {actionName} -> actionName) (\s@PutTemplateAction' {} a -> s {actionName = a} :: PutTemplateAction)
+
+-- | Template post migration custom action document identifier.
+putTemplateAction_documentIdentifier :: Lens.Lens' PutTemplateAction Prelude.Text
+putTemplateAction_documentIdentifier = Lens.lens (\PutTemplateAction' {documentIdentifier} -> documentIdentifier) (\s@PutTemplateAction' {} a -> s {documentIdentifier = a} :: PutTemplateAction)
+
+-- | Launch configuration template ID.
+putTemplateAction_launchConfigurationTemplateID :: Lens.Lens' PutTemplateAction Prelude.Text
+putTemplateAction_launchConfigurationTemplateID = Lens.lens (\PutTemplateAction' {launchConfigurationTemplateID} -> launchConfigurationTemplateID) (\s@PutTemplateAction' {} a -> s {launchConfigurationTemplateID = a} :: PutTemplateAction)
+
+-- | Template post migration custom action order.
+putTemplateAction_order :: Lens.Lens' PutTemplateAction Prelude.Natural
+putTemplateAction_order = Lens.lens (\PutTemplateAction' {order} -> order) (\s@PutTemplateAction' {} a -> s {order = a} :: PutTemplateAction)
+
+instance Core.AWSRequest PutTemplateAction where
+  type
+    AWSResponse PutTemplateAction =
+      TemplateActionDocument
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable PutTemplateAction where
+  hashWithSalt _salt PutTemplateAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` documentVersion
+      `Prelude.hashWithSalt` mustSucceedForCutover
+      `Prelude.hashWithSalt` operatingSystem
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` timeoutSeconds
+      `Prelude.hashWithSalt` actionID
+      `Prelude.hashWithSalt` actionName
+      `Prelude.hashWithSalt` documentIdentifier
+      `Prelude.hashWithSalt` launchConfigurationTemplateID
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData PutTemplateAction where
+  rnf PutTemplateAction' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf documentVersion
+      `Prelude.seq` Prelude.rnf mustSucceedForCutover
+      `Prelude.seq` Prelude.rnf operatingSystem
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf timeoutSeconds
+      `Prelude.seq` Prelude.rnf actionID
+      `Prelude.seq` Prelude.rnf actionName
+      `Prelude.seq` Prelude.rnf documentIdentifier
+      `Prelude.seq` Prelude.rnf launchConfigurationTemplateID
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToHeaders PutTemplateAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutTemplateAction where
+  toJSON PutTemplateAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("active" Data..=) Prelude.<$> active,
+            ("documentVersion" Data..=)
+              Prelude.<$> documentVersion,
+            ("mustSucceedForCutover" Data..=)
+              Prelude.<$> mustSucceedForCutover,
+            ("operatingSystem" Data..=)
+              Prelude.<$> operatingSystem,
+            ("parameters" Data..=) Prelude.<$> parameters,
+            ("timeoutSeconds" Data..=)
+              Prelude.<$> timeoutSeconds,
+            Prelude.Just ("actionID" Data..= actionID),
+            Prelude.Just ("actionName" Data..= actionName),
+            Prelude.Just
+              ("documentIdentifier" Data..= documentIdentifier),
+            Prelude.Just
+              ( "launchConfigurationTemplateID"
+                  Data..= launchConfigurationTemplateID
+              ),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
+
+instance Data.ToPath PutTemplateAction where
+  toPath = Prelude.const "/PutTemplateAction"
+
+instance Data.ToQuery PutTemplateAction where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/RemoveSourceServerAction.hs b/gen/Amazonka/MGN/RemoveSourceServerAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/RemoveSourceServerAction.hs
@@ -0,0 +1,178 @@
+{-# 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.MGN.RemoveSourceServerAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove source server post migration custom action.
+module Amazonka.MGN.RemoveSourceServerAction
+  ( -- * Creating a Request
+    RemoveSourceServerAction (..),
+    newRemoveSourceServerAction,
+
+    -- * Request Lenses
+    removeSourceServerAction_actionID,
+    removeSourceServerAction_sourceServerID,
+
+    -- * Destructuring the Response
+    RemoveSourceServerActionResponse (..),
+    newRemoveSourceServerActionResponse,
+
+    -- * Response Lenses
+    removeSourceServerActionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveSourceServerAction' smart constructor.
+data RemoveSourceServerAction = RemoveSourceServerAction'
+  { -- | Source server post migration custom action ID to remove.
+    actionID :: Prelude.Text,
+    -- | Source server ID of the post migration custom action to remove.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveSourceServerAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionID', 'removeSourceServerAction_actionID' - Source server post migration custom action ID to remove.
+--
+-- 'sourceServerID', 'removeSourceServerAction_sourceServerID' - Source server ID of the post migration custom action to remove.
+newRemoveSourceServerAction ::
+  -- | 'actionID'
+  Prelude.Text ->
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  RemoveSourceServerAction
+newRemoveSourceServerAction
+  pActionID_
+  pSourceServerID_ =
+    RemoveSourceServerAction'
+      { actionID = pActionID_,
+        sourceServerID = pSourceServerID_
+      }
+
+-- | Source server post migration custom action ID to remove.
+removeSourceServerAction_actionID :: Lens.Lens' RemoveSourceServerAction Prelude.Text
+removeSourceServerAction_actionID = Lens.lens (\RemoveSourceServerAction' {actionID} -> actionID) (\s@RemoveSourceServerAction' {} a -> s {actionID = a} :: RemoveSourceServerAction)
+
+-- | Source server ID of the post migration custom action to remove.
+removeSourceServerAction_sourceServerID :: Lens.Lens' RemoveSourceServerAction Prelude.Text
+removeSourceServerAction_sourceServerID = Lens.lens (\RemoveSourceServerAction' {sourceServerID} -> sourceServerID) (\s@RemoveSourceServerAction' {} a -> s {sourceServerID = a} :: RemoveSourceServerAction)
+
+instance Core.AWSRequest RemoveSourceServerAction where
+  type
+    AWSResponse RemoveSourceServerAction =
+      RemoveSourceServerActionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RemoveSourceServerActionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveSourceServerAction where
+  hashWithSalt _salt RemoveSourceServerAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionID
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData RemoveSourceServerAction where
+  rnf RemoveSourceServerAction' {..} =
+    Prelude.rnf actionID
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance Data.ToHeaders RemoveSourceServerAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RemoveSourceServerAction where
+  toJSON RemoveSourceServerAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("actionID" Data..= actionID),
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance Data.ToPath RemoveSourceServerAction where
+  toPath = Prelude.const "/RemoveSourceServerAction"
+
+instance Data.ToQuery RemoveSourceServerAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveSourceServerActionResponse' smart constructor.
+data RemoveSourceServerActionResponse = RemoveSourceServerActionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveSourceServerActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'removeSourceServerActionResponse_httpStatus' - The response's http status code.
+newRemoveSourceServerActionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveSourceServerActionResponse
+newRemoveSourceServerActionResponse pHttpStatus_ =
+  RemoveSourceServerActionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+removeSourceServerActionResponse_httpStatus :: Lens.Lens' RemoveSourceServerActionResponse Prelude.Int
+removeSourceServerActionResponse_httpStatus = Lens.lens (\RemoveSourceServerActionResponse' {httpStatus} -> httpStatus) (\s@RemoveSourceServerActionResponse' {} a -> s {httpStatus = a} :: RemoveSourceServerActionResponse)
+
+instance
+  Prelude.NFData
+    RemoveSourceServerActionResponse
+  where
+  rnf RemoveSourceServerActionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/RemoveTemplateAction.hs b/gen/Amazonka/MGN/RemoveTemplateAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/RemoveTemplateAction.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.RemoveTemplateAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove template post migration custom action.
+module Amazonka.MGN.RemoveTemplateAction
+  ( -- * Creating a Request
+    RemoveTemplateAction (..),
+    newRemoveTemplateAction,
+
+    -- * Request Lenses
+    removeTemplateAction_actionID,
+    removeTemplateAction_launchConfigurationTemplateID,
+
+    -- * Destructuring the Response
+    RemoveTemplateActionResponse (..),
+    newRemoveTemplateActionResponse,
+
+    -- * Response Lenses
+    removeTemplateActionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveTemplateAction' smart constructor.
+data RemoveTemplateAction = RemoveTemplateAction'
+  { -- | Template post migration custom action ID to remove.
+    actionID :: Prelude.Text,
+    -- | Launch configuration template ID of the post migration custom action to
+    -- remove.
+    launchConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveTemplateAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionID', 'removeTemplateAction_actionID' - Template post migration custom action ID to remove.
+--
+-- 'launchConfigurationTemplateID', 'removeTemplateAction_launchConfigurationTemplateID' - Launch configuration template ID of the post migration custom action to
+-- remove.
+newRemoveTemplateAction ::
+  -- | 'actionID'
+  Prelude.Text ->
+  -- | 'launchConfigurationTemplateID'
+  Prelude.Text ->
+  RemoveTemplateAction
+newRemoveTemplateAction
+  pActionID_
+  pLaunchConfigurationTemplateID_ =
+    RemoveTemplateAction'
+      { actionID = pActionID_,
+        launchConfigurationTemplateID =
+          pLaunchConfigurationTemplateID_
+      }
+
+-- | Template post migration custom action ID to remove.
+removeTemplateAction_actionID :: Lens.Lens' RemoveTemplateAction Prelude.Text
+removeTemplateAction_actionID = Lens.lens (\RemoveTemplateAction' {actionID} -> actionID) (\s@RemoveTemplateAction' {} a -> s {actionID = a} :: RemoveTemplateAction)
+
+-- | Launch configuration template ID of the post migration custom action to
+-- remove.
+removeTemplateAction_launchConfigurationTemplateID :: Lens.Lens' RemoveTemplateAction Prelude.Text
+removeTemplateAction_launchConfigurationTemplateID = Lens.lens (\RemoveTemplateAction' {launchConfigurationTemplateID} -> launchConfigurationTemplateID) (\s@RemoveTemplateAction' {} a -> s {launchConfigurationTemplateID = a} :: RemoveTemplateAction)
+
+instance Core.AWSRequest RemoveTemplateAction where
+  type
+    AWSResponse RemoveTemplateAction =
+      RemoveTemplateActionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RemoveTemplateActionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveTemplateAction where
+  hashWithSalt _salt RemoveTemplateAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionID
+      `Prelude.hashWithSalt` launchConfigurationTemplateID
+
+instance Prelude.NFData RemoveTemplateAction where
+  rnf RemoveTemplateAction' {..} =
+    Prelude.rnf actionID
+      `Prelude.seq` Prelude.rnf launchConfigurationTemplateID
+
+instance Data.ToHeaders RemoveTemplateAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RemoveTemplateAction where
+  toJSON RemoveTemplateAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("actionID" Data..= actionID),
+            Prelude.Just
+              ( "launchConfigurationTemplateID"
+                  Data..= launchConfigurationTemplateID
+              )
+          ]
+      )
+
+instance Data.ToPath RemoveTemplateAction where
+  toPath = Prelude.const "/RemoveTemplateAction"
+
+instance Data.ToQuery RemoveTemplateAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveTemplateActionResponse' smart constructor.
+data RemoveTemplateActionResponse = RemoveTemplateActionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveTemplateActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'removeTemplateActionResponse_httpStatus' - The response's http status code.
+newRemoveTemplateActionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveTemplateActionResponse
+newRemoveTemplateActionResponse pHttpStatus_ =
+  RemoveTemplateActionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+removeTemplateActionResponse_httpStatus :: Lens.Lens' RemoveTemplateActionResponse Prelude.Int
+removeTemplateActionResponse_httpStatus = Lens.lens (\RemoveTemplateActionResponse' {httpStatus} -> httpStatus) (\s@RemoveTemplateActionResponse' {} a -> s {httpStatus = a} :: RemoveTemplateActionResponse)
+
+instance Prelude.NFData RemoveTemplateActionResponse where
+  rnf RemoveTemplateActionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/RetryDataReplication.hs b/gen/Amazonka/MGN/RetryDataReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/RetryDataReplication.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.MGN.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 specified SourceServer IDs, regardless of when
+-- the previous initiation started. This command will not work if the
+-- SourceServer is not stalled or is in a DISCONNECTED or STOPPED state.
+module Amazonka.MGN.RetryDataReplication
+  ( -- * Creating a Request
+    RetryDataReplication (..),
+    newRetryDataReplication,
+
+    -- * Request Lenses
+    retryDataReplication_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.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'
+  { -- | Retry data replication for Source Server ID.
+    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' - Retry data replication for Source Server ID.
+newRetryDataReplication ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  RetryDataReplication
+newRetryDataReplication pSourceServerID_ =
+  RetryDataReplication'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | Retry data replication for Source Server ID.
+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/MGN/StartCutover.hs b/gen/Amazonka/MGN/StartCutover.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/StartCutover.hs
@@ -0,0 +1,183 @@
+{-# 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.MGN.StartCutover
+-- 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 a Cutover Instance for specific Source Servers. This command
+-- starts a LAUNCH job whose initiatedBy property is StartCutover and
+-- changes the SourceServer.lifeCycle.state property to CUTTING_OVER.
+module Amazonka.MGN.StartCutover
+  ( -- * Creating a Request
+    StartCutover (..),
+    newStartCutover,
+
+    -- * Request Lenses
+    startCutover_tags,
+    startCutover_sourceServerIDs,
+
+    -- * Destructuring the Response
+    StartCutoverResponse (..),
+    newStartCutoverResponse,
+
+    -- * Response Lenses
+    startCutoverResponse_job,
+    startCutoverResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartCutover' smart constructor.
+data StartCutover = StartCutover'
+  { -- | Start Cutover by Tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Start Cutover by Source Server IDs.
+    sourceServerIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartCutover' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startCutover_tags' - Start Cutover by Tags.
+--
+-- 'sourceServerIDs', 'startCutover_sourceServerIDs' - Start Cutover by Source Server IDs.
+newStartCutover ::
+  -- | 'sourceServerIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  StartCutover
+newStartCutover pSourceServerIDs_ =
+  StartCutover'
+    { tags = Prelude.Nothing,
+      sourceServerIDs =
+        Lens.coerced Lens.# pSourceServerIDs_
+    }
+
+-- | Start Cutover by Tags.
+startCutover_tags :: Lens.Lens' StartCutover (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startCutover_tags = Lens.lens (\StartCutover' {tags} -> tags) (\s@StartCutover' {} a -> s {tags = a} :: StartCutover) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Start Cutover by Source Server IDs.
+startCutover_sourceServerIDs :: Lens.Lens' StartCutover (Prelude.NonEmpty Prelude.Text)
+startCutover_sourceServerIDs = Lens.lens (\StartCutover' {sourceServerIDs} -> sourceServerIDs) (\s@StartCutover' {} a -> s {sourceServerIDs = a} :: StartCutover) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartCutover where
+  type AWSResponse StartCutover = StartCutoverResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartCutoverResponse'
+            Prelude.<$> (x Data..?> "job")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartCutover where
+  hashWithSalt _salt StartCutover' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceServerIDs
+
+instance Prelude.NFData StartCutover where
+  rnf StartCutover' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance Data.ToHeaders StartCutover where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartCutover where
+  toJSON StartCutover' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("sourceServerIDs" Data..= sourceServerIDs)
+          ]
+      )
+
+instance Data.ToPath StartCutover where
+  toPath = Prelude.const "/StartCutover"
+
+instance Data.ToQuery StartCutover where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartCutoverResponse' smart constructor.
+data StartCutoverResponse = StartCutoverResponse'
+  { -- | Start Cutover Job response.
+    job :: Prelude.Maybe Job,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartCutoverResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startCutoverResponse_job' - Start Cutover Job response.
+--
+-- 'httpStatus', 'startCutoverResponse_httpStatus' - The response's http status code.
+newStartCutoverResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartCutoverResponse
+newStartCutoverResponse pHttpStatus_ =
+  StartCutoverResponse'
+    { job = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Start Cutover Job response.
+startCutoverResponse_job :: Lens.Lens' StartCutoverResponse (Prelude.Maybe Job)
+startCutoverResponse_job = Lens.lens (\StartCutoverResponse' {job} -> job) (\s@StartCutoverResponse' {} a -> s {job = a} :: StartCutoverResponse)
+
+-- | The response's http status code.
+startCutoverResponse_httpStatus :: Lens.Lens' StartCutoverResponse Prelude.Int
+startCutoverResponse_httpStatus = Lens.lens (\StartCutoverResponse' {httpStatus} -> httpStatus) (\s@StartCutoverResponse' {} a -> s {httpStatus = a} :: StartCutoverResponse)
+
+instance Prelude.NFData StartCutoverResponse where
+  rnf StartCutoverResponse' {..} =
+    Prelude.rnf job
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/StartReplication.hs b/gen/Amazonka/MGN/StartReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/StartReplication.hs
@@ -0,0 +1,129 @@
+{-# 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.MGN.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 SNAPSHOT_SHIPPING agents.
+module Amazonka.MGN.StartReplication
+  ( -- * Creating a Request
+    StartReplication (..),
+    newStartReplication,
+
+    -- * Request Lenses
+    startReplication_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.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'
+  { -- | ID of source server on which to start replication.
+    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' - ID of source server on which to start replication.
+newStartReplication ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  StartReplication
+newStartReplication pSourceServerID_ =
+  StartReplication'
+    { sourceServerID =
+        pSourceServerID_
+    }
+
+-- | ID of source server on which to start replication.
+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 = SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+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
diff --git a/gen/Amazonka/MGN/StartTest.hs b/gen/Amazonka/MGN/StartTest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/StartTest.hs
@@ -0,0 +1,183 @@
+{-# 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.MGN.StartTest
+-- 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 a Test Instance for specific Source Servers. This command
+-- starts a LAUNCH job whose initiatedBy property is StartTest and changes
+-- the SourceServer.lifeCycle.state property to TESTING.
+module Amazonka.MGN.StartTest
+  ( -- * Creating a Request
+    StartTest (..),
+    newStartTest,
+
+    -- * Request Lenses
+    startTest_tags,
+    startTest_sourceServerIDs,
+
+    -- * Destructuring the Response
+    StartTestResponse (..),
+    newStartTestResponse,
+
+    -- * Response Lenses
+    startTestResponse_job,
+    startTestResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartTest' smart constructor.
+data StartTest = StartTest'
+  { -- | Start Test by Tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Start Test for Source Server IDs.
+    sourceServerIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartTest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startTest_tags' - Start Test by Tags.
+--
+-- 'sourceServerIDs', 'startTest_sourceServerIDs' - Start Test for Source Server IDs.
+newStartTest ::
+  -- | 'sourceServerIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  StartTest
+newStartTest pSourceServerIDs_ =
+  StartTest'
+    { tags = Prelude.Nothing,
+      sourceServerIDs =
+        Lens.coerced Lens.# pSourceServerIDs_
+    }
+
+-- | Start Test by Tags.
+startTest_tags :: Lens.Lens' StartTest (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startTest_tags = Lens.lens (\StartTest' {tags} -> tags) (\s@StartTest' {} a -> s {tags = a} :: StartTest) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Start Test for Source Server IDs.
+startTest_sourceServerIDs :: Lens.Lens' StartTest (Prelude.NonEmpty Prelude.Text)
+startTest_sourceServerIDs = Lens.lens (\StartTest' {sourceServerIDs} -> sourceServerIDs) (\s@StartTest' {} a -> s {sourceServerIDs = a} :: StartTest) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartTest where
+  type AWSResponse StartTest = StartTestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartTestResponse'
+            Prelude.<$> (x Data..?> "job")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartTest where
+  hashWithSalt _salt StartTest' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceServerIDs
+
+instance Prelude.NFData StartTest where
+  rnf StartTest' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance Data.ToHeaders StartTest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartTest where
+  toJSON StartTest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("sourceServerIDs" Data..= sourceServerIDs)
+          ]
+      )
+
+instance Data.ToPath StartTest where
+  toPath = Prelude.const "/StartTest"
+
+instance Data.ToQuery StartTest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartTestResponse' smart constructor.
+data StartTestResponse = StartTestResponse'
+  { -- | Start Test Job response.
+    job :: Prelude.Maybe Job,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartTestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startTestResponse_job' - Start Test Job response.
+--
+-- 'httpStatus', 'startTestResponse_httpStatus' - The response's http status code.
+newStartTestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartTestResponse
+newStartTestResponse pHttpStatus_ =
+  StartTestResponse'
+    { job = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Start Test Job response.
+startTestResponse_job :: Lens.Lens' StartTestResponse (Prelude.Maybe Job)
+startTestResponse_job = Lens.lens (\StartTestResponse' {job} -> job) (\s@StartTestResponse' {} a -> s {job = a} :: StartTestResponse)
+
+-- | The response's http status code.
+startTestResponse_httpStatus :: Lens.Lens' StartTestResponse Prelude.Int
+startTestResponse_httpStatus = Lens.lens (\StartTestResponse' {httpStatus} -> httpStatus) (\s@StartTestResponse' {} a -> s {httpStatus = a} :: StartTestResponse)
+
+instance Prelude.NFData StartTestResponse where
+  rnf StartTestResponse' {..} =
+    Prelude.rnf job
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/TagResource.hs b/gen/Amazonka/MGN/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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 Application
+-- Migration Service 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.MGN.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.MGN.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'
+  { -- | Tag resource by ARN.
+    resourceArn :: Prelude.Text,
+    -- | Tag resource by Tags.
+    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' - Tag resource by ARN.
+--
+-- 'tags', 'tagResource_tags' - Tag resource by Tags.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | Tag resource by ARN.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Tag resource by Tags.
+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/MGN/TerminateTargetInstances.hs b/gen/Amazonka/MGN/TerminateTargetInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/TerminateTargetInstances.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.MGN.TerminateTargetInstances
+-- 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 a job that terminates specific launched EC2 Test and Cutover
+-- instances. This command will not work for any Source Server with a
+-- lifecycle.state of TESTING, CUTTING_OVER, or CUTOVER.
+module Amazonka.MGN.TerminateTargetInstances
+  ( -- * Creating a Request
+    TerminateTargetInstances (..),
+    newTerminateTargetInstances,
+
+    -- * Request Lenses
+    terminateTargetInstances_tags,
+    terminateTargetInstances_sourceServerIDs,
+
+    -- * Destructuring the Response
+    TerminateTargetInstancesResponse (..),
+    newTerminateTargetInstancesResponse,
+
+    -- * Response Lenses
+    terminateTargetInstancesResponse_job,
+    terminateTargetInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTerminateTargetInstances' smart constructor.
+data TerminateTargetInstances = TerminateTargetInstances'
+  { -- | Terminate Target instance by Tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Terminate Target instance by Source Server IDs.
+    sourceServerIDs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateTargetInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'terminateTargetInstances_tags' - Terminate Target instance by Tags.
+--
+-- 'sourceServerIDs', 'terminateTargetInstances_sourceServerIDs' - Terminate Target instance by Source Server IDs.
+newTerminateTargetInstances ::
+  -- | 'sourceServerIDs'
+  Prelude.NonEmpty Prelude.Text ->
+  TerminateTargetInstances
+newTerminateTargetInstances pSourceServerIDs_ =
+  TerminateTargetInstances'
+    { tags = Prelude.Nothing,
+      sourceServerIDs =
+        Lens.coerced Lens.# pSourceServerIDs_
+    }
+
+-- | Terminate Target instance by Tags.
+terminateTargetInstances_tags :: Lens.Lens' TerminateTargetInstances (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+terminateTargetInstances_tags = Lens.lens (\TerminateTargetInstances' {tags} -> tags) (\s@TerminateTargetInstances' {} a -> s {tags = a} :: TerminateTargetInstances) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Terminate Target instance by Source Server IDs.
+terminateTargetInstances_sourceServerIDs :: Lens.Lens' TerminateTargetInstances (Prelude.NonEmpty Prelude.Text)
+terminateTargetInstances_sourceServerIDs = Lens.lens (\TerminateTargetInstances' {sourceServerIDs} -> sourceServerIDs) (\s@TerminateTargetInstances' {} a -> s {sourceServerIDs = a} :: TerminateTargetInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TerminateTargetInstances where
+  type
+    AWSResponse TerminateTargetInstances =
+      TerminateTargetInstancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TerminateTargetInstancesResponse'
+            Prelude.<$> (x Data..?> "job")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TerminateTargetInstances where
+  hashWithSalt _salt TerminateTargetInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` sourceServerIDs
+
+instance Prelude.NFData TerminateTargetInstances where
+  rnf TerminateTargetInstances' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance Data.ToHeaders TerminateTargetInstances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TerminateTargetInstances where
+  toJSON TerminateTargetInstances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("sourceServerIDs" Data..= sourceServerIDs)
+          ]
+      )
+
+instance Data.ToPath TerminateTargetInstances where
+  toPath = Prelude.const "/TerminateTargetInstances"
+
+instance Data.ToQuery TerminateTargetInstances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTerminateTargetInstancesResponse' smart constructor.
+data TerminateTargetInstancesResponse = TerminateTargetInstancesResponse'
+  { -- | Terminate Target instance Job response.
+    job :: Prelude.Maybe Job,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateTargetInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'terminateTargetInstancesResponse_job' - Terminate Target instance Job response.
+--
+-- 'httpStatus', 'terminateTargetInstancesResponse_httpStatus' - The response's http status code.
+newTerminateTargetInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TerminateTargetInstancesResponse
+newTerminateTargetInstancesResponse pHttpStatus_ =
+  TerminateTargetInstancesResponse'
+    { job =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Terminate Target instance Job response.
+terminateTargetInstancesResponse_job :: Lens.Lens' TerminateTargetInstancesResponse (Prelude.Maybe Job)
+terminateTargetInstancesResponse_job = Lens.lens (\TerminateTargetInstancesResponse' {job} -> job) (\s@TerminateTargetInstancesResponse' {} a -> s {job = a} :: TerminateTargetInstancesResponse)
+
+-- | The response's http status code.
+terminateTargetInstancesResponse_httpStatus :: Lens.Lens' TerminateTargetInstancesResponse Prelude.Int
+terminateTargetInstancesResponse_httpStatus = Lens.lens (\TerminateTargetInstancesResponse' {httpStatus} -> httpStatus) (\s@TerminateTargetInstancesResponse' {} a -> s {httpStatus = a} :: TerminateTargetInstancesResponse)
+
+instance
+  Prelude.NFData
+    TerminateTargetInstancesResponse
+  where
+  rnf TerminateTargetInstancesResponse' {..} =
+    Prelude.rnf job
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MGN/Types.hs b/gen/Amazonka/MGN/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types.hs
@@ -0,0 +1,801 @@
+{-# 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.MGN.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.MGN.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _UninitializedAccountException,
+    _ValidationException,
+
+    -- * ApplicationHealthStatus
+    ApplicationHealthStatus (..),
+
+    -- * ApplicationProgressStatus
+    ApplicationProgressStatus (..),
+
+    -- * BootMode
+    BootMode (..),
+
+    -- * ChangeServerLifeCycleStateSourceServerLifecycleState
+    ChangeServerLifeCycleStateSourceServerLifecycleState (..),
+
+    -- * DataReplicationErrorString
+    DataReplicationErrorString (..),
+
+    -- * DataReplicationInitiationStepName
+    DataReplicationInitiationStepName (..),
+
+    -- * DataReplicationInitiationStepStatus
+    DataReplicationInitiationStepStatus (..),
+
+    -- * DataReplicationState
+    DataReplicationState (..),
+
+    -- * FirstBoot
+    FirstBoot (..),
+
+    -- * InitiatedBy
+    InitiatedBy (..),
+
+    -- * JobLogEvent
+    JobLogEvent (..),
+
+    -- * JobStatus
+    JobStatus (..),
+
+    -- * JobType
+    JobType (..),
+
+    -- * LaunchDisposition
+    LaunchDisposition (..),
+
+    -- * LaunchStatus
+    LaunchStatus (..),
+
+    -- * LifeCycleState
+    LifeCycleState (..),
+
+    -- * PostLaunchActionExecutionStatus
+    PostLaunchActionExecutionStatus (..),
+
+    -- * PostLaunchActionsDeploymentType
+    PostLaunchActionsDeploymentType (..),
+
+    -- * ReplicationConfigurationDataPlaneRouting
+    ReplicationConfigurationDataPlaneRouting (..),
+
+    -- * ReplicationConfigurationDefaultLargeStagingDiskType
+    ReplicationConfigurationDefaultLargeStagingDiskType (..),
+
+    -- * ReplicationConfigurationEbsEncryption
+    ReplicationConfigurationEbsEncryption (..),
+
+    -- * ReplicationConfigurationReplicatedDiskStagingDiskType
+    ReplicationConfigurationReplicatedDiskStagingDiskType (..),
+
+    -- * ReplicationType
+    ReplicationType (..),
+
+    -- * SsmDocumentType
+    SsmDocumentType (..),
+
+    -- * SsmParameterStoreParameterType
+    SsmParameterStoreParameterType (..),
+
+    -- * TargetInstanceTypeRightSizingMethod
+    TargetInstanceTypeRightSizingMethod (..),
+
+    -- * VolumeType
+    VolumeType (..),
+
+    -- * WaveHealthStatus
+    WaveHealthStatus (..),
+
+    -- * WaveProgressStatus
+    WaveProgressStatus (..),
+
+    -- * Application
+    Application (..),
+    newApplication,
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+
+    -- * ApplicationAggregatedStatus
+    ApplicationAggregatedStatus (..),
+    newApplicationAggregatedStatus,
+    applicationAggregatedStatus_healthStatus,
+    applicationAggregatedStatus_lastUpdateDateTime,
+    applicationAggregatedStatus_progressStatus,
+    applicationAggregatedStatus_totalSourceServers,
+
+    -- * CPU
+    CPU (..),
+    newCPU,
+    cpu_cores,
+    cpu_modelName,
+
+    -- * ChangeServerLifeCycleStateSourceServerLifecycle
+    ChangeServerLifeCycleStateSourceServerLifecycle (..),
+    newChangeServerLifeCycleStateSourceServerLifecycle,
+    changeServerLifeCycleStateSourceServerLifecycle_state,
+
+    -- * DataReplicationError
+    DataReplicationError (..),
+    newDataReplicationError,
+    dataReplicationError_error,
+    dataReplicationError_rawError,
+
+    -- * DataReplicationInfo
+    DataReplicationInfo (..),
+    newDataReplicationInfo,
+    dataReplicationInfo_dataReplicationError,
+    dataReplicationInfo_dataReplicationInitiation,
+    dataReplicationInfo_dataReplicationState,
+    dataReplicationInfo_etaDateTime,
+    dataReplicationInfo_lagDuration,
+    dataReplicationInfo_lastSnapshotDateTime,
+    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,
+
+    -- * DescribeSourceServersRequestFilters
+    DescribeSourceServersRequestFilters (..),
+    newDescribeSourceServersRequestFilters,
+    describeSourceServersRequestFilters_applicationIDs,
+    describeSourceServersRequestFilters_isArchived,
+    describeSourceServersRequestFilters_lifeCycleStates,
+    describeSourceServersRequestFilters_replicationTypes,
+    describeSourceServersRequestFilters_sourceServerIDs,
+
+    -- * Disk
+    Disk (..),
+    newDisk,
+    disk_bytes,
+    disk_deviceName,
+
+    -- * IdentificationHints
+    IdentificationHints (..),
+    newIdentificationHints,
+    identificationHints_awsInstanceID,
+    identificationHints_fqdn,
+    identificationHints_hostname,
+    identificationHints_vmPath,
+    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_conversionServerID,
+    jobLogEventData_rawError,
+    jobLogEventData_sourceServerID,
+    jobLogEventData_targetInstanceID,
+
+    -- * JobPostLaunchActionsLaunchStatus
+    JobPostLaunchActionsLaunchStatus (..),
+    newJobPostLaunchActionsLaunchStatus,
+    jobPostLaunchActionsLaunchStatus_executionID,
+    jobPostLaunchActionsLaunchStatus_executionStatus,
+    jobPostLaunchActionsLaunchStatus_failureReason,
+    jobPostLaunchActionsLaunchStatus_ssmDocument,
+    jobPostLaunchActionsLaunchStatus_ssmDocumentType,
+
+    -- * LaunchConfiguration
+    LaunchConfiguration (..),
+    newLaunchConfiguration,
+    launchConfiguration_bootMode,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_enableMapAutoTagging,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_mapAutoTaggingMpeID,
+    launchConfiguration_name,
+    launchConfiguration_postLaunchActions,
+    launchConfiguration_sourceServerID,
+    launchConfiguration_targetInstanceTypeRightSizingMethod,
+
+    -- * LaunchConfigurationTemplate
+    LaunchConfigurationTemplate (..),
+    newLaunchConfigurationTemplate,
+    launchConfigurationTemplate_arn,
+    launchConfigurationTemplate_associatePublicIpAddress,
+    launchConfigurationTemplate_bootMode,
+    launchConfigurationTemplate_copyPrivateIp,
+    launchConfigurationTemplate_copyTags,
+    launchConfigurationTemplate_ec2LaunchTemplateID,
+    launchConfigurationTemplate_enableMapAutoTagging,
+    launchConfigurationTemplate_largeVolumeConf,
+    launchConfigurationTemplate_launchDisposition,
+    launchConfigurationTemplate_licensing,
+    launchConfigurationTemplate_mapAutoTaggingMpeID,
+    launchConfigurationTemplate_postLaunchActions,
+    launchConfigurationTemplate_smallVolumeConf,
+    launchConfigurationTemplate_smallVolumeMaxSize,
+    launchConfigurationTemplate_tags,
+    launchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_launchConfigurationTemplateID,
+
+    -- * LaunchTemplateDiskConf
+    LaunchTemplateDiskConf (..),
+    newLaunchTemplateDiskConf,
+    launchTemplateDiskConf_iops,
+    launchTemplateDiskConf_throughput,
+    launchTemplateDiskConf_volumeType,
+
+    -- * LaunchedInstance
+    LaunchedInstance (..),
+    newLaunchedInstance,
+    launchedInstance_ec2InstanceID,
+    launchedInstance_firstBoot,
+    launchedInstance_jobID,
+
+    -- * Licensing
+    Licensing (..),
+    newLicensing,
+    licensing_osByol,
+
+    -- * LifeCycle
+    LifeCycle (..),
+    newLifeCycle,
+    lifeCycle_addedToServiceDateTime,
+    lifeCycle_elapsedReplicationDuration,
+    lifeCycle_firstByteDateTime,
+    lifeCycle_lastCutover,
+    lifeCycle_lastSeenByServiceDateTime,
+    lifeCycle_lastTest,
+    lifeCycle_state,
+
+    -- * LifeCycleLastCutover
+    LifeCycleLastCutover (..),
+    newLifeCycleLastCutover,
+    lifeCycleLastCutover_finalized,
+    lifeCycleLastCutover_initiated,
+    lifeCycleLastCutover_reverted,
+
+    -- * LifeCycleLastCutoverFinalized
+    LifeCycleLastCutoverFinalized (..),
+    newLifeCycleLastCutoverFinalized,
+    lifeCycleLastCutoverFinalized_apiCallDateTime,
+
+    -- * LifeCycleLastCutoverInitiated
+    LifeCycleLastCutoverInitiated (..),
+    newLifeCycleLastCutoverInitiated,
+    lifeCycleLastCutoverInitiated_apiCallDateTime,
+    lifeCycleLastCutoverInitiated_jobID,
+
+    -- * LifeCycleLastCutoverReverted
+    LifeCycleLastCutoverReverted (..),
+    newLifeCycleLastCutoverReverted,
+    lifeCycleLastCutoverReverted_apiCallDateTime,
+
+    -- * LifeCycleLastTest
+    LifeCycleLastTest (..),
+    newLifeCycleLastTest,
+    lifeCycleLastTest_finalized,
+    lifeCycleLastTest_initiated,
+    lifeCycleLastTest_reverted,
+
+    -- * LifeCycleLastTestFinalized
+    LifeCycleLastTestFinalized (..),
+    newLifeCycleLastTestFinalized,
+    lifeCycleLastTestFinalized_apiCallDateTime,
+
+    -- * LifeCycleLastTestInitiated
+    LifeCycleLastTestInitiated (..),
+    newLifeCycleLastTestInitiated,
+    lifeCycleLastTestInitiated_apiCallDateTime,
+    lifeCycleLastTestInitiated_jobID,
+
+    -- * LifeCycleLastTestReverted
+    LifeCycleLastTestReverted (..),
+    newLifeCycleLastTestReverted,
+    lifeCycleLastTestReverted_apiCallDateTime,
+
+    -- * ListApplicationsRequestFilters
+    ListApplicationsRequestFilters (..),
+    newListApplicationsRequestFilters,
+    listApplicationsRequestFilters_applicationIDs,
+    listApplicationsRequestFilters_isArchived,
+    listApplicationsRequestFilters_waveIDs,
+
+    -- * ListWavesRequestFilters
+    ListWavesRequestFilters (..),
+    newListWavesRequestFilters,
+    listWavesRequestFilters_isArchived,
+    listWavesRequestFilters_waveIDs,
+
+    -- * NetworkInterface
+    NetworkInterface (..),
+    newNetworkInterface,
+    networkInterface_ips,
+    networkInterface_isPrimary,
+    networkInterface_macAddress,
+
+    -- * OS
+    OS (..),
+    newOS,
+    os_fullString,
+
+    -- * ParticipatingServer
+    ParticipatingServer (..),
+    newParticipatingServer,
+    participatingServer_launchStatus,
+    participatingServer_launchedEc2InstanceID,
+    participatingServer_postLaunchActionsStatus,
+    participatingServer_sourceServerID,
+
+    -- * PostLaunchActions
+    PostLaunchActions (..),
+    newPostLaunchActions,
+    postLaunchActions_cloudWatchLogGroupName,
+    postLaunchActions_deployment,
+    postLaunchActions_s3LogBucket,
+    postLaunchActions_s3OutputKeyPrefix,
+    postLaunchActions_ssmDocuments,
+
+    -- * PostLaunchActionsStatus
+    PostLaunchActionsStatus (..),
+    newPostLaunchActionsStatus,
+    postLaunchActionsStatus_postLaunchActionsLaunchStatusList,
+    postLaunchActionsStatus_ssmAgentDiscoveryDatetime,
+
+    -- * ReplicationConfiguration
+    ReplicationConfiguration (..),
+    newReplicationConfiguration,
+    replicationConfiguration_associateDefaultSecurityGroup,
+    replicationConfiguration_bandwidthThrottling,
+    replicationConfiguration_createPublicIP,
+    replicationConfiguration_dataPlaneRouting,
+    replicationConfiguration_defaultLargeStagingDiskType,
+    replicationConfiguration_ebsEncryption,
+    replicationConfiguration_ebsEncryptionKeyArn,
+    replicationConfiguration_name,
+    replicationConfiguration_replicatedDisks,
+    replicationConfiguration_replicationServerInstanceType,
+    replicationConfiguration_replicationServersSecurityGroupsIDs,
+    replicationConfiguration_sourceServerID,
+    replicationConfiguration_stagingAreaSubnetId,
+    replicationConfiguration_stagingAreaTags,
+    replicationConfiguration_useDedicatedReplicationServer,
+
+    -- * ReplicationConfigurationReplicatedDisk
+    ReplicationConfigurationReplicatedDisk (..),
+    newReplicationConfigurationReplicatedDisk,
+    replicationConfigurationReplicatedDisk_deviceName,
+    replicationConfigurationReplicatedDisk_iops,
+    replicationConfigurationReplicatedDisk_isBootDisk,
+    replicationConfigurationReplicatedDisk_stagingDiskType,
+    replicationConfigurationReplicatedDisk_throughput,
+
+    -- * ReplicationConfigurationTemplate
+    ReplicationConfigurationTemplate (..),
+    newReplicationConfigurationTemplate,
+    replicationConfigurationTemplate_arn,
+    replicationConfigurationTemplate_associateDefaultSecurityGroup,
+    replicationConfigurationTemplate_bandwidthThrottling,
+    replicationConfigurationTemplate_createPublicIP,
+    replicationConfigurationTemplate_dataPlaneRouting,
+    replicationConfigurationTemplate_defaultLargeStagingDiskType,
+    replicationConfigurationTemplate_ebsEncryption,
+    replicationConfigurationTemplate_ebsEncryptionKeyArn,
+    replicationConfigurationTemplate_replicationServerInstanceType,
+    replicationConfigurationTemplate_replicationServersSecurityGroupsIDs,
+    replicationConfigurationTemplate_stagingAreaSubnetId,
+    replicationConfigurationTemplate_stagingAreaTags,
+    replicationConfigurationTemplate_tags,
+    replicationConfigurationTemplate_useDedicatedReplicationServer,
+    replicationConfigurationTemplate_replicationConfigurationTemplateID,
+
+    -- * SourceProperties
+    SourceProperties (..),
+    newSourceProperties,
+    sourceProperties_cpus,
+    sourceProperties_disks,
+    sourceProperties_identificationHints,
+    sourceProperties_lastUpdatedDateTime,
+    sourceProperties_networkInterfaces,
+    sourceProperties_os,
+    sourceProperties_ramBytes,
+    sourceProperties_recommendedInstanceType,
+
+    -- * SourceServer
+    SourceServer (..),
+    newSourceServer,
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+
+    -- * SourceServerActionDocument
+    SourceServerActionDocument (..),
+    newSourceServerActionDocument,
+    sourceServerActionDocument_actionID,
+    sourceServerActionDocument_actionName,
+    sourceServerActionDocument_active,
+    sourceServerActionDocument_documentIdentifier,
+    sourceServerActionDocument_documentVersion,
+    sourceServerActionDocument_mustSucceedForCutover,
+    sourceServerActionDocument_order,
+    sourceServerActionDocument_parameters,
+    sourceServerActionDocument_timeoutSeconds,
+
+    -- * SourceServerActionsRequestFilters
+    SourceServerActionsRequestFilters (..),
+    newSourceServerActionsRequestFilters,
+    sourceServerActionsRequestFilters_actionIDs,
+
+    -- * SsmDocument
+    SsmDocument (..),
+    newSsmDocument,
+    ssmDocument_mustSucceedForCutover,
+    ssmDocument_parameters,
+    ssmDocument_timeoutSeconds,
+    ssmDocument_actionName,
+    ssmDocument_ssmDocumentName,
+
+    -- * SsmParameterStoreParameter
+    SsmParameterStoreParameter (..),
+    newSsmParameterStoreParameter,
+    ssmParameterStoreParameter_parameterName,
+    ssmParameterStoreParameter_parameterType,
+
+    -- * TemplateActionDocument
+    TemplateActionDocument (..),
+    newTemplateActionDocument,
+    templateActionDocument_actionID,
+    templateActionDocument_actionName,
+    templateActionDocument_active,
+    templateActionDocument_documentIdentifier,
+    templateActionDocument_documentVersion,
+    templateActionDocument_mustSucceedForCutover,
+    templateActionDocument_operatingSystem,
+    templateActionDocument_order,
+    templateActionDocument_parameters,
+    templateActionDocument_timeoutSeconds,
+
+    -- * TemplateActionsRequestFilters
+    TemplateActionsRequestFilters (..),
+    newTemplateActionsRequestFilters,
+    templateActionsRequestFilters_actionIDs,
+
+    -- * VcenterClient
+    VcenterClient (..),
+    newVcenterClient,
+    vcenterClient_arn,
+    vcenterClient_datacenterName,
+    vcenterClient_hostname,
+    vcenterClient_lastSeenDatetime,
+    vcenterClient_sourceServerTags,
+    vcenterClient_tags,
+    vcenterClient_vcenterClientID,
+    vcenterClient_vcenterUUID,
+
+    -- * Wave
+    Wave (..),
+    newWave,
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+
+    -- * WaveAggregatedStatus
+    WaveAggregatedStatus (..),
+    newWaveAggregatedStatus,
+    waveAggregatedStatus_healthStatus,
+    waveAggregatedStatus_lastUpdateDateTime,
+    waveAggregatedStatus_progressStatus,
+    waveAggregatedStatus_replicationStartedDateTime,
+    waveAggregatedStatus_totalApplications,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MGN.Types.Application
+import Amazonka.MGN.Types.ApplicationAggregatedStatus
+import Amazonka.MGN.Types.ApplicationHealthStatus
+import Amazonka.MGN.Types.ApplicationProgressStatus
+import Amazonka.MGN.Types.BootMode
+import Amazonka.MGN.Types.CPU
+import Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycle
+import Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycleState
+import Amazonka.MGN.Types.DataReplicationError
+import Amazonka.MGN.Types.DataReplicationErrorString
+import Amazonka.MGN.Types.DataReplicationInfo
+import Amazonka.MGN.Types.DataReplicationInfoReplicatedDisk
+import Amazonka.MGN.Types.DataReplicationInitiation
+import Amazonka.MGN.Types.DataReplicationInitiationStep
+import Amazonka.MGN.Types.DataReplicationInitiationStepName
+import Amazonka.MGN.Types.DataReplicationInitiationStepStatus
+import Amazonka.MGN.Types.DataReplicationState
+import Amazonka.MGN.Types.DescribeJobsRequestFilters
+import Amazonka.MGN.Types.DescribeSourceServersRequestFilters
+import Amazonka.MGN.Types.Disk
+import Amazonka.MGN.Types.FirstBoot
+import Amazonka.MGN.Types.IdentificationHints
+import Amazonka.MGN.Types.InitiatedBy
+import Amazonka.MGN.Types.Job
+import Amazonka.MGN.Types.JobLog
+import Amazonka.MGN.Types.JobLogEvent
+import Amazonka.MGN.Types.JobLogEventData
+import Amazonka.MGN.Types.JobPostLaunchActionsLaunchStatus
+import Amazonka.MGN.Types.JobStatus
+import Amazonka.MGN.Types.JobType
+import Amazonka.MGN.Types.LaunchConfiguration
+import Amazonka.MGN.Types.LaunchConfigurationTemplate
+import Amazonka.MGN.Types.LaunchDisposition
+import Amazonka.MGN.Types.LaunchStatus
+import Amazonka.MGN.Types.LaunchTemplateDiskConf
+import Amazonka.MGN.Types.LaunchedInstance
+import Amazonka.MGN.Types.Licensing
+import Amazonka.MGN.Types.LifeCycle
+import Amazonka.MGN.Types.LifeCycleLastCutover
+import Amazonka.MGN.Types.LifeCycleLastCutoverFinalized
+import Amazonka.MGN.Types.LifeCycleLastCutoverInitiated
+import Amazonka.MGN.Types.LifeCycleLastCutoverReverted
+import Amazonka.MGN.Types.LifeCycleLastTest
+import Amazonka.MGN.Types.LifeCycleLastTestFinalized
+import Amazonka.MGN.Types.LifeCycleLastTestInitiated
+import Amazonka.MGN.Types.LifeCycleLastTestReverted
+import Amazonka.MGN.Types.LifeCycleState
+import Amazonka.MGN.Types.ListApplicationsRequestFilters
+import Amazonka.MGN.Types.ListWavesRequestFilters
+import Amazonka.MGN.Types.NetworkInterface
+import Amazonka.MGN.Types.OS
+import Amazonka.MGN.Types.ParticipatingServer
+import Amazonka.MGN.Types.PostLaunchActionExecutionStatus
+import Amazonka.MGN.Types.PostLaunchActions
+import Amazonka.MGN.Types.PostLaunchActionsDeploymentType
+import Amazonka.MGN.Types.PostLaunchActionsStatus
+import Amazonka.MGN.Types.ReplicationConfiguration
+import Amazonka.MGN.Types.ReplicationConfigurationDataPlaneRouting
+import Amazonka.MGN.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+import Amazonka.MGN.Types.ReplicationConfigurationEbsEncryption
+import Amazonka.MGN.Types.ReplicationConfigurationReplicatedDisk
+import Amazonka.MGN.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+import Amazonka.MGN.Types.ReplicationConfigurationTemplate
+import Amazonka.MGN.Types.ReplicationType
+import Amazonka.MGN.Types.SourceProperties
+import Amazonka.MGN.Types.SourceServer
+import Amazonka.MGN.Types.SourceServerActionDocument
+import Amazonka.MGN.Types.SourceServerActionsRequestFilters
+import Amazonka.MGN.Types.SsmDocument
+import Amazonka.MGN.Types.SsmDocumentType
+import Amazonka.MGN.Types.SsmParameterStoreParameter
+import Amazonka.MGN.Types.SsmParameterStoreParameterType
+import Amazonka.MGN.Types.TargetInstanceTypeRightSizingMethod
+import Amazonka.MGN.Types.TemplateActionDocument
+import Amazonka.MGN.Types.TemplateActionsRequestFilters
+import Amazonka.MGN.Types.VcenterClient
+import Amazonka.MGN.Types.VolumeType
+import Amazonka.MGN.Types.Wave
+import Amazonka.MGN.Types.WaveAggregatedStatus
+import Amazonka.MGN.Types.WaveHealthStatus
+import Amazonka.MGN.Types.WaveProgressStatus
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-02-26@ of the Amazon Application Migration Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MGN",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "mgn",
+      Core.signingName = "mgn",
+      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 "MGN",
+      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
+
+-- | Operating denied due to a file permission or access check error.
+_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 server encountered an unexpected condition that prevented it from
+-- fulfilling the request.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | Resource not found exception.
+_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
+
+-- | Reached throttling quota exception.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | Uninitialized account exception.
+_UninitializedAccountException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UninitializedAccountException =
+  Core._MatchServiceError
+    defaultService
+    "UninitializedAccountException"
+    Prelude.. Core.hasStatus 400
+
+-- | Validate exception.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/MGN/Types/Application.hs b/gen/Amazonka/MGN/Types/Application.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/Application.hs
@@ -0,0 +1,180 @@
+{-# 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.MGN.Types.Application
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.Application where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.ApplicationAggregatedStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newApplication' smart constructor.
+data Application = Application'
+  { -- | Application aggregated status.
+    applicationAggregatedStatus :: Prelude.Maybe ApplicationAggregatedStatus,
+    -- | Application ID.
+    applicationID :: Prelude.Maybe Prelude.Text,
+    -- | Application ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Application creation dateTime.
+    creationDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Application description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Application archival status.
+    isArchived :: Prelude.Maybe Prelude.Bool,
+    -- | Application last modified dateTime.
+    lastModifiedDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Application name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Application tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Application wave ID.
+    waveID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Application' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationAggregatedStatus', 'application_applicationAggregatedStatus' - Application aggregated status.
+--
+-- 'applicationID', 'application_applicationID' - Application ID.
+--
+-- 'arn', 'application_arn' - Application ARN.
+--
+-- 'creationDateTime', 'application_creationDateTime' - Application creation dateTime.
+--
+-- 'description', 'application_description' - Application description.
+--
+-- 'isArchived', 'application_isArchived' - Application archival status.
+--
+-- 'lastModifiedDateTime', 'application_lastModifiedDateTime' - Application last modified dateTime.
+--
+-- 'name', 'application_name' - Application name.
+--
+-- 'tags', 'application_tags' - Application tags.
+--
+-- 'waveID', 'application_waveID' - Application wave ID.
+newApplication ::
+  Application
+newApplication =
+  Application'
+    { applicationAggregatedStatus =
+        Prelude.Nothing,
+      applicationID = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      isArchived = Prelude.Nothing,
+      lastModifiedDateTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      waveID = Prelude.Nothing
+    }
+
+-- | Application aggregated status.
+application_applicationAggregatedStatus :: Lens.Lens' Application (Prelude.Maybe ApplicationAggregatedStatus)
+application_applicationAggregatedStatus = Lens.lens (\Application' {applicationAggregatedStatus} -> applicationAggregatedStatus) (\s@Application' {} a -> s {applicationAggregatedStatus = a} :: Application)
+
+-- | Application ID.
+application_applicationID :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_applicationID = Lens.lens (\Application' {applicationID} -> applicationID) (\s@Application' {} a -> s {applicationID = a} :: Application)
+
+-- | Application ARN.
+application_arn :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_arn = Lens.lens (\Application' {arn} -> arn) (\s@Application' {} a -> s {arn = a} :: Application)
+
+-- | Application creation dateTime.
+application_creationDateTime :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_creationDateTime = Lens.lens (\Application' {creationDateTime} -> creationDateTime) (\s@Application' {} a -> s {creationDateTime = a} :: Application)
+
+-- | Application description.
+application_description :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_description = Lens.lens (\Application' {description} -> description) (\s@Application' {} a -> s {description = a} :: Application)
+
+-- | Application archival status.
+application_isArchived :: Lens.Lens' Application (Prelude.Maybe Prelude.Bool)
+application_isArchived = Lens.lens (\Application' {isArchived} -> isArchived) (\s@Application' {} a -> s {isArchived = a} :: Application)
+
+-- | Application last modified dateTime.
+application_lastModifiedDateTime :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_lastModifiedDateTime = Lens.lens (\Application' {lastModifiedDateTime} -> lastModifiedDateTime) (\s@Application' {} a -> s {lastModifiedDateTime = a} :: Application)
+
+-- | Application name.
+application_name :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_name = Lens.lens (\Application' {name} -> name) (\s@Application' {} a -> s {name = a} :: Application)
+
+-- | Application tags.
+application_tags :: Lens.Lens' Application (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+application_tags = Lens.lens (\Application' {tags} -> tags) (\s@Application' {} a -> s {tags = a} :: Application) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Application wave ID.
+application_waveID :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_waveID = Lens.lens (\Application' {waveID} -> waveID) (\s@Application' {} a -> s {waveID = a} :: Application)
+
+instance Data.FromJSON Application where
+  parseJSON =
+    Data.withObject
+      "Application"
+      ( \x ->
+          Application'
+            Prelude.<$> (x Data..:? "applicationAggregatedStatus")
+            Prelude.<*> (x Data..:? "applicationID")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "isArchived")
+            Prelude.<*> (x Data..:? "lastModifiedDateTime")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "waveID")
+      )
+
+instance Prelude.Hashable Application where
+  hashWithSalt _salt Application' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationAggregatedStatus
+      `Prelude.hashWithSalt` applicationID
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` isArchived
+      `Prelude.hashWithSalt` lastModifiedDateTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData Application where
+  rnf Application' {..} =
+    Prelude.rnf applicationAggregatedStatus
+      `Prelude.seq` Prelude.rnf applicationID
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf isArchived
+      `Prelude.seq` Prelude.rnf lastModifiedDateTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf waveID
diff --git a/gen/Amazonka/MGN/Types/ApplicationAggregatedStatus.hs b/gen/Amazonka/MGN/Types/ApplicationAggregatedStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ApplicationAggregatedStatus.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.ApplicationAggregatedStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ApplicationAggregatedStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.ApplicationHealthStatus
+import Amazonka.MGN.Types.ApplicationProgressStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Application aggregated status.
+--
+-- /See:/ 'newApplicationAggregatedStatus' smart constructor.
+data ApplicationAggregatedStatus = ApplicationAggregatedStatus'
+  { -- | Application aggregated status health status.
+    healthStatus :: Prelude.Maybe ApplicationHealthStatus,
+    -- | Application aggregated status last update dateTime.
+    lastUpdateDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Application aggregated status progress status.
+    progressStatus :: Prelude.Maybe ApplicationProgressStatus,
+    -- | Application aggregated status total source servers amount.
+    totalSourceServers :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationAggregatedStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'healthStatus', 'applicationAggregatedStatus_healthStatus' - Application aggregated status health status.
+--
+-- 'lastUpdateDateTime', 'applicationAggregatedStatus_lastUpdateDateTime' - Application aggregated status last update dateTime.
+--
+-- 'progressStatus', 'applicationAggregatedStatus_progressStatus' - Application aggregated status progress status.
+--
+-- 'totalSourceServers', 'applicationAggregatedStatus_totalSourceServers' - Application aggregated status total source servers amount.
+newApplicationAggregatedStatus ::
+  ApplicationAggregatedStatus
+newApplicationAggregatedStatus =
+  ApplicationAggregatedStatus'
+    { healthStatus =
+        Prelude.Nothing,
+      lastUpdateDateTime = Prelude.Nothing,
+      progressStatus = Prelude.Nothing,
+      totalSourceServers = Prelude.Nothing
+    }
+
+-- | Application aggregated status health status.
+applicationAggregatedStatus_healthStatus :: Lens.Lens' ApplicationAggregatedStatus (Prelude.Maybe ApplicationHealthStatus)
+applicationAggregatedStatus_healthStatus = Lens.lens (\ApplicationAggregatedStatus' {healthStatus} -> healthStatus) (\s@ApplicationAggregatedStatus' {} a -> s {healthStatus = a} :: ApplicationAggregatedStatus)
+
+-- | Application aggregated status last update dateTime.
+applicationAggregatedStatus_lastUpdateDateTime :: Lens.Lens' ApplicationAggregatedStatus (Prelude.Maybe Prelude.Text)
+applicationAggregatedStatus_lastUpdateDateTime = Lens.lens (\ApplicationAggregatedStatus' {lastUpdateDateTime} -> lastUpdateDateTime) (\s@ApplicationAggregatedStatus' {} a -> s {lastUpdateDateTime = a} :: ApplicationAggregatedStatus)
+
+-- | Application aggregated status progress status.
+applicationAggregatedStatus_progressStatus :: Lens.Lens' ApplicationAggregatedStatus (Prelude.Maybe ApplicationProgressStatus)
+applicationAggregatedStatus_progressStatus = Lens.lens (\ApplicationAggregatedStatus' {progressStatus} -> progressStatus) (\s@ApplicationAggregatedStatus' {} a -> s {progressStatus = a} :: ApplicationAggregatedStatus)
+
+-- | Application aggregated status total source servers amount.
+applicationAggregatedStatus_totalSourceServers :: Lens.Lens' ApplicationAggregatedStatus (Prelude.Maybe Prelude.Natural)
+applicationAggregatedStatus_totalSourceServers = Lens.lens (\ApplicationAggregatedStatus' {totalSourceServers} -> totalSourceServers) (\s@ApplicationAggregatedStatus' {} a -> s {totalSourceServers = a} :: ApplicationAggregatedStatus)
+
+instance Data.FromJSON ApplicationAggregatedStatus where
+  parseJSON =
+    Data.withObject
+      "ApplicationAggregatedStatus"
+      ( \x ->
+          ApplicationAggregatedStatus'
+            Prelude.<$> (x Data..:? "healthStatus")
+            Prelude.<*> (x Data..:? "lastUpdateDateTime")
+            Prelude.<*> (x Data..:? "progressStatus")
+            Prelude.<*> (x Data..:? "totalSourceServers")
+      )
+
+instance Prelude.Hashable ApplicationAggregatedStatus where
+  hashWithSalt _salt ApplicationAggregatedStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` healthStatus
+      `Prelude.hashWithSalt` lastUpdateDateTime
+      `Prelude.hashWithSalt` progressStatus
+      `Prelude.hashWithSalt` totalSourceServers
+
+instance Prelude.NFData ApplicationAggregatedStatus where
+  rnf ApplicationAggregatedStatus' {..} =
+    Prelude.rnf healthStatus
+      `Prelude.seq` Prelude.rnf lastUpdateDateTime
+      `Prelude.seq` Prelude.rnf progressStatus
+      `Prelude.seq` Prelude.rnf totalSourceServers
diff --git a/gen/Amazonka/MGN/Types/ApplicationHealthStatus.hs b/gen/Amazonka/MGN/Types/ApplicationHealthStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ApplicationHealthStatus.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.MGN.Types.ApplicationHealthStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ApplicationHealthStatus
+  ( ApplicationHealthStatus
+      ( ..,
+        ApplicationHealthStatus_ERROR,
+        ApplicationHealthStatus_HEALTHY,
+        ApplicationHealthStatus_LAGGING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationHealthStatus = ApplicationHealthStatus'
+  { fromApplicationHealthStatus ::
+      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 ApplicationHealthStatus_ERROR :: ApplicationHealthStatus
+pattern ApplicationHealthStatus_ERROR = ApplicationHealthStatus' "ERROR"
+
+pattern ApplicationHealthStatus_HEALTHY :: ApplicationHealthStatus
+pattern ApplicationHealthStatus_HEALTHY = ApplicationHealthStatus' "HEALTHY"
+
+pattern ApplicationHealthStatus_LAGGING :: ApplicationHealthStatus
+pattern ApplicationHealthStatus_LAGGING = ApplicationHealthStatus' "LAGGING"
+
+{-# COMPLETE
+  ApplicationHealthStatus_ERROR,
+  ApplicationHealthStatus_HEALTHY,
+  ApplicationHealthStatus_LAGGING,
+  ApplicationHealthStatus'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/ApplicationProgressStatus.hs b/gen/Amazonka/MGN/Types/ApplicationProgressStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ApplicationProgressStatus.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.MGN.Types.ApplicationProgressStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ApplicationProgressStatus
+  ( ApplicationProgressStatus
+      ( ..,
+        ApplicationProgressStatus_COMPLETED,
+        ApplicationProgressStatus_IN_PROGRESS,
+        ApplicationProgressStatus_NOT_STARTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationProgressStatus = ApplicationProgressStatus'
+  { fromApplicationProgressStatus ::
+      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 ApplicationProgressStatus_COMPLETED :: ApplicationProgressStatus
+pattern ApplicationProgressStatus_COMPLETED = ApplicationProgressStatus' "COMPLETED"
+
+pattern ApplicationProgressStatus_IN_PROGRESS :: ApplicationProgressStatus
+pattern ApplicationProgressStatus_IN_PROGRESS = ApplicationProgressStatus' "IN_PROGRESS"
+
+pattern ApplicationProgressStatus_NOT_STARTED :: ApplicationProgressStatus
+pattern ApplicationProgressStatus_NOT_STARTED = ApplicationProgressStatus' "NOT_STARTED"
+
+{-# COMPLETE
+  ApplicationProgressStatus_COMPLETED,
+  ApplicationProgressStatus_IN_PROGRESS,
+  ApplicationProgressStatus_NOT_STARTED,
+  ApplicationProgressStatus'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/BootMode.hs b/gen/Amazonka/MGN/Types/BootMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/BootMode.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.MGN.Types.BootMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.BootMode
+  ( BootMode
+      ( ..,
+        BootMode_LEGACY_BIOS,
+        BootMode_UEFI
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BootMode = BootMode'
+  { fromBootMode ::
+      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 BootMode_LEGACY_BIOS :: BootMode
+pattern BootMode_LEGACY_BIOS = BootMode' "LEGACY_BIOS"
+
+pattern BootMode_UEFI :: BootMode
+pattern BootMode_UEFI = BootMode' "UEFI"
+
+{-# COMPLETE
+  BootMode_LEGACY_BIOS,
+  BootMode_UEFI,
+  BootMode'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/CPU.hs b/gen/Amazonka/MGN/Types/CPU.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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
+
+-- | Source server CPU information.
+--
+-- /See:/ 'newCPU' smart constructor.
+data CPU = CPU'
+  { -- | The number of CPU cores on the source server.
+    cores :: Prelude.Maybe Prelude.Natural,
+    -- | The source server\'s CPU model name.
+    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 on the source server.
+--
+-- 'modelName', 'cpu_modelName' - The source server\'s CPU model name.
+newCPU ::
+  CPU
+newCPU =
+  CPU'
+    { cores = Prelude.Nothing,
+      modelName = Prelude.Nothing
+    }
+
+-- | The number of CPU cores on the source server.
+cpu_cores :: Lens.Lens' CPU (Prelude.Maybe Prelude.Natural)
+cpu_cores = Lens.lens (\CPU' {cores} -> cores) (\s@CPU' {} a -> s {cores = a} :: CPU)
+
+-- | The source server\'s CPU model name.
+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/MGN/Types/ChangeServerLifeCycleStateSourceServerLifecycle.hs b/gen/Amazonka/MGN/Types/ChangeServerLifeCycleStateSourceServerLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ChangeServerLifeCycleStateSourceServerLifecycle.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycle where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycleState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The request to change the source server migration lifecycle state.
+--
+-- /See:/ 'newChangeServerLifeCycleStateSourceServerLifecycle' smart constructor.
+data ChangeServerLifeCycleStateSourceServerLifecycle = ChangeServerLifeCycleStateSourceServerLifecycle'
+  { -- | The request to change the source server migration lifecycle state.
+    state :: ChangeServerLifeCycleStateSourceServerLifecycleState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ChangeServerLifeCycleStateSourceServerLifecycle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'changeServerLifeCycleStateSourceServerLifecycle_state' - The request to change the source server migration lifecycle state.
+newChangeServerLifeCycleStateSourceServerLifecycle ::
+  -- | 'state'
+  ChangeServerLifeCycleStateSourceServerLifecycleState ->
+  ChangeServerLifeCycleStateSourceServerLifecycle
+newChangeServerLifeCycleStateSourceServerLifecycle
+  pState_ =
+    ChangeServerLifeCycleStateSourceServerLifecycle'
+      { state =
+          pState_
+      }
+
+-- | The request to change the source server migration lifecycle state.
+changeServerLifeCycleStateSourceServerLifecycle_state :: Lens.Lens' ChangeServerLifeCycleStateSourceServerLifecycle ChangeServerLifeCycleStateSourceServerLifecycleState
+changeServerLifeCycleStateSourceServerLifecycle_state = Lens.lens (\ChangeServerLifeCycleStateSourceServerLifecycle' {state} -> state) (\s@ChangeServerLifeCycleStateSourceServerLifecycle' {} a -> s {state = a} :: ChangeServerLifeCycleStateSourceServerLifecycle)
+
+instance
+  Prelude.Hashable
+    ChangeServerLifeCycleStateSourceServerLifecycle
+  where
+  hashWithSalt
+    _salt
+    ChangeServerLifeCycleStateSourceServerLifecycle' {..} =
+      _salt `Prelude.hashWithSalt` state
+
+instance
+  Prelude.NFData
+    ChangeServerLifeCycleStateSourceServerLifecycle
+  where
+  rnf
+    ChangeServerLifeCycleStateSourceServerLifecycle' {..} =
+      Prelude.rnf state
+
+instance
+  Data.ToJSON
+    ChangeServerLifeCycleStateSourceServerLifecycle
+  where
+  toJSON
+    ChangeServerLifeCycleStateSourceServerLifecycle' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [Prelude.Just ("state" Data..= state)]
+        )
diff --git a/gen/Amazonka/MGN/Types/ChangeServerLifeCycleStateSourceServerLifecycleState.hs b/gen/Amazonka/MGN/Types/ChangeServerLifeCycleStateSourceServerLifecycleState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ChangeServerLifeCycleStateSourceServerLifecycleState.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.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycleState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ChangeServerLifeCycleStateSourceServerLifecycleState
+  ( ChangeServerLifeCycleStateSourceServerLifecycleState
+      ( ..,
+        ChangeServerLifeCycleStateSourceServerLifecycleState_CUTOVER,
+        ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_CUTOVER,
+        ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_TEST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ChangeServerLifeCycleStateSourceServerLifecycleState = ChangeServerLifeCycleStateSourceServerLifecycleState'
+  { fromChangeServerLifeCycleStateSourceServerLifecycleState ::
+      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 ChangeServerLifeCycleStateSourceServerLifecycleState_CUTOVER :: ChangeServerLifeCycleStateSourceServerLifecycleState
+pattern ChangeServerLifeCycleStateSourceServerLifecycleState_CUTOVER = ChangeServerLifeCycleStateSourceServerLifecycleState' "CUTOVER"
+
+pattern ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_CUTOVER :: ChangeServerLifeCycleStateSourceServerLifecycleState
+pattern ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_CUTOVER = ChangeServerLifeCycleStateSourceServerLifecycleState' "READY_FOR_CUTOVER"
+
+pattern ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_TEST :: ChangeServerLifeCycleStateSourceServerLifecycleState
+pattern ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_TEST = ChangeServerLifeCycleStateSourceServerLifecycleState' "READY_FOR_TEST"
+
+{-# COMPLETE
+  ChangeServerLifeCycleStateSourceServerLifecycleState_CUTOVER,
+  ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_CUTOVER,
+  ChangeServerLifeCycleStateSourceServerLifecycleState_READY_FOR_TEST,
+  ChangeServerLifeCycleStateSourceServerLifecycleState'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/DataReplicationError.hs b/gen/Amazonka/MGN/Types/DataReplicationError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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.MGN.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/MGN/Types/DataReplicationErrorString.hs b/gen/Amazonka/MGN/Types/DataReplicationErrorString.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/DataReplicationErrorString.hs
@@ -0,0 +1,141 @@
+{-# 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.MGN.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.MGN.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_LAST_SNAPSHOT_JOB_FAILED,
+        DataReplicationErrorString_NOT_CONVERGING,
+        DataReplicationErrorString_SNAPSHOTS_FAILURE,
+        DataReplicationErrorString_UNSTABLE_NETWORK,
+        DataReplicationErrorString_UNSUPPORTED_VM_CONFIGURATION
+      ),
+  )
+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_LAST_SNAPSHOT_JOB_FAILED :: DataReplicationErrorString
+pattern DataReplicationErrorString_LAST_SNAPSHOT_JOB_FAILED = DataReplicationErrorString' "LAST_SNAPSHOT_JOB_FAILED"
+
+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"
+
+pattern DataReplicationErrorString_UNSUPPORTED_VM_CONFIGURATION :: DataReplicationErrorString
+pattern DataReplicationErrorString_UNSUPPORTED_VM_CONFIGURATION = DataReplicationErrorString' "UNSUPPORTED_VM_CONFIGURATION"
+
+{-# 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_LAST_SNAPSHOT_JOB_FAILED,
+  DataReplicationErrorString_NOT_CONVERGING,
+  DataReplicationErrorString_SNAPSHOTS_FAILURE,
+  DataReplicationErrorString_UNSTABLE_NETWORK,
+  DataReplicationErrorString_UNSUPPORTED_VM_CONFIGURATION,
+  DataReplicationErrorString'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/DataReplicationInfo.hs b/gen/Amazonka/MGN/Types/DataReplicationInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/DataReplicationInfo.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.MGN.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.MGN.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.MGN.Types.DataReplicationError
+import Amazonka.MGN.Types.DataReplicationInfoReplicatedDisk
+import Amazonka.MGN.Types.DataReplicationInitiation
+import Amazonka.MGN.Types.DataReplicationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Request data replication info.
+--
+-- /See:/ 'newDataReplicationInfo' smart constructor.
+data DataReplicationInfo = DataReplicationInfo'
+  { -- | Error in obtaining data replication info.
+    dataReplicationError :: Prelude.Maybe DataReplicationError,
+    -- | Request to query whether data replication has been initiated.
+    dataReplicationInitiation :: Prelude.Maybe DataReplicationInitiation,
+    -- | Request to query the data replication state.
+    dataReplicationState :: Prelude.Maybe DataReplicationState,
+    -- | Request to query the time when data replication will be complete.
+    etaDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Request to query data replication lag duration.
+    lagDuration :: Prelude.Maybe Prelude.Text,
+    -- | Request to query data replication last snapshot time.
+    lastSnapshotDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Request to query disks 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 obtaining data replication info.
+--
+-- 'dataReplicationInitiation', 'dataReplicationInfo_dataReplicationInitiation' - Request to query whether data replication has been initiated.
+--
+-- 'dataReplicationState', 'dataReplicationInfo_dataReplicationState' - Request to query the data replication state.
+--
+-- 'etaDateTime', 'dataReplicationInfo_etaDateTime' - Request to query the time when data replication will be complete.
+--
+-- 'lagDuration', 'dataReplicationInfo_lagDuration' - Request to query data replication lag duration.
+--
+-- 'lastSnapshotDateTime', 'dataReplicationInfo_lastSnapshotDateTime' - Request to query data replication last snapshot time.
+--
+-- 'replicatedDisks', 'dataReplicationInfo_replicatedDisks' - Request to query disks replicated.
+newDataReplicationInfo ::
+  DataReplicationInfo
+newDataReplicationInfo =
+  DataReplicationInfo'
+    { dataReplicationError =
+        Prelude.Nothing,
+      dataReplicationInitiation = Prelude.Nothing,
+      dataReplicationState = Prelude.Nothing,
+      etaDateTime = Prelude.Nothing,
+      lagDuration = Prelude.Nothing,
+      lastSnapshotDateTime = Prelude.Nothing,
+      replicatedDisks = Prelude.Nothing
+    }
+
+-- | Error in obtaining data replication info.
+dataReplicationInfo_dataReplicationError :: Lens.Lens' DataReplicationInfo (Prelude.Maybe DataReplicationError)
+dataReplicationInfo_dataReplicationError = Lens.lens (\DataReplicationInfo' {dataReplicationError} -> dataReplicationError) (\s@DataReplicationInfo' {} a -> s {dataReplicationError = a} :: DataReplicationInfo)
+
+-- | Request to query whether 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)
+
+-- | Request to query the data replication state.
+dataReplicationInfo_dataReplicationState :: Lens.Lens' DataReplicationInfo (Prelude.Maybe DataReplicationState)
+dataReplicationInfo_dataReplicationState = Lens.lens (\DataReplicationInfo' {dataReplicationState} -> dataReplicationState) (\s@DataReplicationInfo' {} a -> s {dataReplicationState = a} :: DataReplicationInfo)
+
+-- | Request to query the time when data replication will be complete.
+dataReplicationInfo_etaDateTime :: Lens.Lens' DataReplicationInfo (Prelude.Maybe Prelude.Text)
+dataReplicationInfo_etaDateTime = Lens.lens (\DataReplicationInfo' {etaDateTime} -> etaDateTime) (\s@DataReplicationInfo' {} a -> s {etaDateTime = a} :: DataReplicationInfo)
+
+-- | Request to query 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)
+
+-- | Request to query data replication last snapshot time.
+dataReplicationInfo_lastSnapshotDateTime :: Lens.Lens' DataReplicationInfo (Prelude.Maybe Prelude.Text)
+dataReplicationInfo_lastSnapshotDateTime = Lens.lens (\DataReplicationInfo' {lastSnapshotDateTime} -> lastSnapshotDateTime) (\s@DataReplicationInfo' {} a -> s {lastSnapshotDateTime = a} :: DataReplicationInfo)
+
+-- | Request to query disks 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..:? "lastSnapshotDateTime")
+            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` lastSnapshotDateTime
+      `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 lastSnapshotDateTime
+      `Prelude.seq` Prelude.rnf replicatedDisks
diff --git a/gen/Amazonka/MGN/Types/DataReplicationInfoReplicatedDisk.hs b/gen/Amazonka/MGN/Types/DataReplicationInfoReplicatedDisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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
+
+-- | Request to query disks replicated.
+--
+-- /See:/ 'newDataReplicationInfoReplicatedDisk' smart constructor.
+data DataReplicationInfoReplicatedDisk = DataReplicationInfoReplicatedDisk'
+  { -- | Request to query data replication backlog size in bytes.
+    backloggedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | Request to query device name.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Request to query amount of data replicated in bytes.
+    replicatedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | Request to query amount of data rescanned in bytes.
+    rescannedStorageBytes :: Prelude.Maybe Prelude.Natural,
+    -- | Request to query total amount of data 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' - Request to query data replication backlog size in bytes.
+--
+-- 'deviceName', 'dataReplicationInfoReplicatedDisk_deviceName' - Request to query device name.
+--
+-- 'replicatedStorageBytes', 'dataReplicationInfoReplicatedDisk_replicatedStorageBytes' - Request to query amount of data replicated in bytes.
+--
+-- 'rescannedStorageBytes', 'dataReplicationInfoReplicatedDisk_rescannedStorageBytes' - Request to query amount of data rescanned in bytes.
+--
+-- 'totalStorageBytes', 'dataReplicationInfoReplicatedDisk_totalStorageBytes' - Request to query total amount of data replicated in bytes.
+newDataReplicationInfoReplicatedDisk ::
+  DataReplicationInfoReplicatedDisk
+newDataReplicationInfoReplicatedDisk =
+  DataReplicationInfoReplicatedDisk'
+    { backloggedStorageBytes =
+        Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      replicatedStorageBytes = Prelude.Nothing,
+      rescannedStorageBytes = Prelude.Nothing,
+      totalStorageBytes = Prelude.Nothing
+    }
+
+-- | Request to query data replication backlog size 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)
+
+-- | Request to query device name.
+dataReplicationInfoReplicatedDisk_deviceName :: Lens.Lens' DataReplicationInfoReplicatedDisk (Prelude.Maybe Prelude.Text)
+dataReplicationInfoReplicatedDisk_deviceName = Lens.lens (\DataReplicationInfoReplicatedDisk' {deviceName} -> deviceName) (\s@DataReplicationInfoReplicatedDisk' {} a -> s {deviceName = a} :: DataReplicationInfoReplicatedDisk)
+
+-- | Request to query amount of data replicated 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)
+
+-- | Request to query amount of data 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)
+
+-- | Request to query total amount of data 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/MGN/Types/DataReplicationInitiation.hs b/gen/Amazonka/MGN/Types/DataReplicationInitiation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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.MGN.Types.DataReplicationInitiationStep
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data replication initiation.
+--
+-- /See:/ 'newDataReplicationInitiation' smart constructor.
+data DataReplicationInitiation = DataReplicationInitiation'
+  { -- | Request to query next data initiation date and time.
+    nextAttemptDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Request to query data initiation start date and time.
+    startDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Request to query data initiation steps.
+    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' - Request to query next data initiation date and time.
+--
+-- 'startDateTime', 'dataReplicationInitiation_startDateTime' - Request to query data initiation start date and time.
+--
+-- 'steps', 'dataReplicationInitiation_steps' - Request to query data initiation steps.
+newDataReplicationInitiation ::
+  DataReplicationInitiation
+newDataReplicationInitiation =
+  DataReplicationInitiation'
+    { nextAttemptDateTime =
+        Prelude.Nothing,
+      startDateTime = Prelude.Nothing,
+      steps = Prelude.Nothing
+    }
+
+-- | Request to query next data initiation date and time.
+dataReplicationInitiation_nextAttemptDateTime :: Lens.Lens' DataReplicationInitiation (Prelude.Maybe Prelude.Text)
+dataReplicationInitiation_nextAttemptDateTime = Lens.lens (\DataReplicationInitiation' {nextAttemptDateTime} -> nextAttemptDateTime) (\s@DataReplicationInitiation' {} a -> s {nextAttemptDateTime = a} :: DataReplicationInitiation)
+
+-- | Request to query data initiation start date and time.
+dataReplicationInitiation_startDateTime :: Lens.Lens' DataReplicationInitiation (Prelude.Maybe Prelude.Text)
+dataReplicationInitiation_startDateTime = Lens.lens (\DataReplicationInitiation' {startDateTime} -> startDateTime) (\s@DataReplicationInitiation' {} a -> s {startDateTime = a} :: DataReplicationInitiation)
+
+-- | Request to query data initiation steps.
+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/MGN/Types/DataReplicationInitiationStep.hs b/gen/Amazonka/MGN/Types/DataReplicationInitiationStep.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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.MGN.Types.DataReplicationInitiationStepName
+import Amazonka.MGN.Types.DataReplicationInitiationStepStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data replication initiation step.
+--
+-- /See:/ 'newDataReplicationInitiationStep' smart constructor.
+data DataReplicationInitiationStep = DataReplicationInitiationStep'
+  { -- | Request to query data initiation step name.
+    name :: Prelude.Maybe DataReplicationInitiationStepName,
+    -- | Request to query data initiation status.
+    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' - Request to query data initiation step name.
+--
+-- 'status', 'dataReplicationInitiationStep_status' - Request to query data initiation status.
+newDataReplicationInitiationStep ::
+  DataReplicationInitiationStep
+newDataReplicationInitiationStep =
+  DataReplicationInitiationStep'
+    { name =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Request to query data initiation step name.
+dataReplicationInitiationStep_name :: Lens.Lens' DataReplicationInitiationStep (Prelude.Maybe DataReplicationInitiationStepName)
+dataReplicationInitiationStep_name = Lens.lens (\DataReplicationInitiationStep' {name} -> name) (\s@DataReplicationInitiationStep' {} a -> s {name = a} :: DataReplicationInitiationStep)
+
+-- | Request to query data initiation status.
+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/MGN/Types/DataReplicationInitiationStepName.hs b/gen/Amazonka/MGN/Types/DataReplicationInitiationStepName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/DataReplicationInitiationStepStatus.hs b/gen/Amazonka/MGN/Types/DataReplicationInitiationStepStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/DataReplicationState.hs b/gen/Amazonka/MGN/Types/DataReplicationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/DataReplicationState.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.MGN.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.MGN.Types.DataReplicationState
+  ( DataReplicationState
+      ( ..,
+        DataReplicationState_BACKLOG,
+        DataReplicationState_CONTINUOUS,
+        DataReplicationState_CREATING_SNAPSHOT,
+        DataReplicationState_DISCONNECTED,
+        DataReplicationState_INITIAL_SYNC,
+        DataReplicationState_INITIATING,
+        DataReplicationState_PAUSED,
+        DataReplicationState_PENDING_SNAPSHOT_SHIPPING,
+        DataReplicationState_RESCAN,
+        DataReplicationState_SHIPPING_SNAPSHOT,
+        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_PENDING_SNAPSHOT_SHIPPING :: DataReplicationState
+pattern DataReplicationState_PENDING_SNAPSHOT_SHIPPING = DataReplicationState' "PENDING_SNAPSHOT_SHIPPING"
+
+pattern DataReplicationState_RESCAN :: DataReplicationState
+pattern DataReplicationState_RESCAN = DataReplicationState' "RESCAN"
+
+pattern DataReplicationState_SHIPPING_SNAPSHOT :: DataReplicationState
+pattern DataReplicationState_SHIPPING_SNAPSHOT = DataReplicationState' "SHIPPING_SNAPSHOT"
+
+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_PENDING_SNAPSHOT_SHIPPING,
+  DataReplicationState_RESCAN,
+  DataReplicationState_SHIPPING_SNAPSHOT,
+  DataReplicationState_STALLED,
+  DataReplicationState_STOPPED,
+  DataReplicationState'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/DescribeJobsRequestFilters.hs b/gen/Amazonka/MGN/Types/DescribeJobsRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/DescribeJobsRequestFilters.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.MGN.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.MGN.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
+
+-- | Request to describe Job log filters.
+--
+-- /See:/ 'newDescribeJobsRequestFilters' smart constructor.
+data DescribeJobsRequestFilters = DescribeJobsRequestFilters'
+  { -- | Request to describe Job log filters by date.
+    fromDate :: Prelude.Maybe Prelude.Text,
+    -- | Request to describe Job log filters by job ID.
+    jobIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Request to describe job log items by last date.
+    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' - Request to describe Job log filters by date.
+--
+-- 'jobIDs', 'describeJobsRequestFilters_jobIDs' - Request to describe Job log filters by job ID.
+--
+-- 'toDate', 'describeJobsRequestFilters_toDate' - Request to describe job log items by last date.
+newDescribeJobsRequestFilters ::
+  DescribeJobsRequestFilters
+newDescribeJobsRequestFilters =
+  DescribeJobsRequestFilters'
+    { fromDate =
+        Prelude.Nothing,
+      jobIDs = Prelude.Nothing,
+      toDate = Prelude.Nothing
+    }
+
+-- | Request to describe Job log filters by date.
+describeJobsRequestFilters_fromDate :: Lens.Lens' DescribeJobsRequestFilters (Prelude.Maybe Prelude.Text)
+describeJobsRequestFilters_fromDate = Lens.lens (\DescribeJobsRequestFilters' {fromDate} -> fromDate) (\s@DescribeJobsRequestFilters' {} a -> s {fromDate = a} :: DescribeJobsRequestFilters)
+
+-- | Request to describe Job log filters by job ID.
+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
+
+-- | Request to describe job log items by last date.
+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/MGN/Types/DescribeSourceServersRequestFilters.hs b/gen/Amazonka/MGN/Types/DescribeSourceServersRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/DescribeSourceServersRequestFilters.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.MGN.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.MGN.Types.DescribeSourceServersRequestFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.LifeCycleState
+import Amazonka.MGN.Types.ReplicationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Request to filter Source Servers list.
+--
+-- /See:/ 'newDescribeSourceServersRequestFilters' smart constructor.
+data DescribeSourceServersRequestFilters = DescribeSourceServersRequestFilters'
+  { -- | Request to filter Source Servers list by application IDs.
+    applicationIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Request to filter Source Servers list by archived.
+    isArchived :: Prelude.Maybe Prelude.Bool,
+    -- | Request to filter Source Servers list by life cycle states.
+    lifeCycleStates :: Prelude.Maybe [LifeCycleState],
+    -- | Request to filter Source Servers list by replication type.
+    replicationTypes :: Prelude.Maybe [ReplicationType],
+    -- | Request to filter Source Servers list by Source Server ID.
+    sourceServerIDs :: 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:
+--
+-- 'applicationIDs', 'describeSourceServersRequestFilters_applicationIDs' - Request to filter Source Servers list by application IDs.
+--
+-- 'isArchived', 'describeSourceServersRequestFilters_isArchived' - Request to filter Source Servers list by archived.
+--
+-- 'lifeCycleStates', 'describeSourceServersRequestFilters_lifeCycleStates' - Request to filter Source Servers list by life cycle states.
+--
+-- 'replicationTypes', 'describeSourceServersRequestFilters_replicationTypes' - Request to filter Source Servers list by replication type.
+--
+-- 'sourceServerIDs', 'describeSourceServersRequestFilters_sourceServerIDs' - Request to filter Source Servers list by Source Server ID.
+newDescribeSourceServersRequestFilters ::
+  DescribeSourceServersRequestFilters
+newDescribeSourceServersRequestFilters =
+  DescribeSourceServersRequestFilters'
+    { applicationIDs =
+        Prelude.Nothing,
+      isArchived = Prelude.Nothing,
+      lifeCycleStates = Prelude.Nothing,
+      replicationTypes = Prelude.Nothing,
+      sourceServerIDs = Prelude.Nothing
+    }
+
+-- | Request to filter Source Servers list by application IDs.
+describeSourceServersRequestFilters_applicationIDs :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe [Prelude.Text])
+describeSourceServersRequestFilters_applicationIDs = Lens.lens (\DescribeSourceServersRequestFilters' {applicationIDs} -> applicationIDs) (\s@DescribeSourceServersRequestFilters' {} a -> s {applicationIDs = a} :: DescribeSourceServersRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | Request to filter Source Servers list by archived.
+describeSourceServersRequestFilters_isArchived :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe Prelude.Bool)
+describeSourceServersRequestFilters_isArchived = Lens.lens (\DescribeSourceServersRequestFilters' {isArchived} -> isArchived) (\s@DescribeSourceServersRequestFilters' {} a -> s {isArchived = a} :: DescribeSourceServersRequestFilters)
+
+-- | Request to filter Source Servers list by life cycle states.
+describeSourceServersRequestFilters_lifeCycleStates :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe [LifeCycleState])
+describeSourceServersRequestFilters_lifeCycleStates = Lens.lens (\DescribeSourceServersRequestFilters' {lifeCycleStates} -> lifeCycleStates) (\s@DescribeSourceServersRequestFilters' {} a -> s {lifeCycleStates = a} :: DescribeSourceServersRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | Request to filter Source Servers list by replication type.
+describeSourceServersRequestFilters_replicationTypes :: Lens.Lens' DescribeSourceServersRequestFilters (Prelude.Maybe [ReplicationType])
+describeSourceServersRequestFilters_replicationTypes = Lens.lens (\DescribeSourceServersRequestFilters' {replicationTypes} -> replicationTypes) (\s@DescribeSourceServersRequestFilters' {} a -> s {replicationTypes = a} :: DescribeSourceServersRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | Request to filter Source Servers list by Source Server ID.
+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
+
+instance
+  Prelude.Hashable
+    DescribeSourceServersRequestFilters
+  where
+  hashWithSalt
+    _salt
+    DescribeSourceServersRequestFilters' {..} =
+      _salt
+        `Prelude.hashWithSalt` applicationIDs
+        `Prelude.hashWithSalt` isArchived
+        `Prelude.hashWithSalt` lifeCycleStates
+        `Prelude.hashWithSalt` replicationTypes
+        `Prelude.hashWithSalt` sourceServerIDs
+
+instance
+  Prelude.NFData
+    DescribeSourceServersRequestFilters
+  where
+  rnf DescribeSourceServersRequestFilters' {..} =
+    Prelude.rnf applicationIDs
+      `Prelude.seq` Prelude.rnf isArchived
+      `Prelude.seq` Prelude.rnf lifeCycleStates
+      `Prelude.seq` Prelude.rnf replicationTypes
+      `Prelude.seq` Prelude.rnf sourceServerIDs
+
+instance
+  Data.ToJSON
+    DescribeSourceServersRequestFilters
+  where
+  toJSON DescribeSourceServersRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationIDs" Data..=)
+              Prelude.<$> applicationIDs,
+            ("isArchived" Data..=) Prelude.<$> isArchived,
+            ("lifeCycleStates" Data..=)
+              Prelude.<$> lifeCycleStates,
+            ("replicationTypes" Data..=)
+              Prelude.<$> replicationTypes,
+            ("sourceServerIDs" Data..=)
+              Prelude.<$> sourceServerIDs
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/Disk.hs b/gen/Amazonka/MGN/Types/Disk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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
+
+-- | The disk identifier.
+--
+-- /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/MGN/Types/FirstBoot.hs b/gen/Amazonka/MGN/Types/FirstBoot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/FirstBoot.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.MGN.Types.FirstBoot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.FirstBoot
+  ( FirstBoot
+      ( ..,
+        FirstBoot_STOPPED,
+        FirstBoot_SUCCEEDED,
+        FirstBoot_UNKNOWN,
+        FirstBoot_WAITING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FirstBoot = FirstBoot'
+  { fromFirstBoot ::
+      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 FirstBoot_STOPPED :: FirstBoot
+pattern FirstBoot_STOPPED = FirstBoot' "STOPPED"
+
+pattern FirstBoot_SUCCEEDED :: FirstBoot
+pattern FirstBoot_SUCCEEDED = FirstBoot' "SUCCEEDED"
+
+pattern FirstBoot_UNKNOWN :: FirstBoot
+pattern FirstBoot_UNKNOWN = FirstBoot' "UNKNOWN"
+
+pattern FirstBoot_WAITING :: FirstBoot
+pattern FirstBoot_WAITING = FirstBoot' "WAITING"
+
+{-# COMPLETE
+  FirstBoot_STOPPED,
+  FirstBoot_SUCCEEDED,
+  FirstBoot_UNKNOWN,
+  FirstBoot_WAITING,
+  FirstBoot'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/IdentificationHints.hs b/gen/Amazonka/MGN/Types/IdentificationHints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/IdentificationHints.hs
@@ -0,0 +1,121 @@
+{-# 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.MGN.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.MGN.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
+
+-- | Identification hints.
+--
+-- /See:/ 'newIdentificationHints' smart constructor.
+data IdentificationHints = IdentificationHints'
+  { -- | AWS Instance ID identification hint.
+    awsInstanceID :: Prelude.Maybe Prelude.Text,
+    -- | FQDN address identification hint.
+    fqdn :: Prelude.Maybe Prelude.Text,
+    -- | Hostname identification hint.
+    hostname :: Prelude.Maybe Prelude.Text,
+    -- | vCenter VM path identification hint.
+    vmPath :: Prelude.Maybe Prelude.Text,
+    -- | vmWare UUID 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' - FQDN address identification hint.
+--
+-- 'hostname', 'identificationHints_hostname' - Hostname identification hint.
+--
+-- 'vmPath', 'identificationHints_vmPath' - vCenter VM path identification hint.
+--
+-- 'vmWareUuid', 'identificationHints_vmWareUuid' - vmWare UUID identification hint.
+newIdentificationHints ::
+  IdentificationHints
+newIdentificationHints =
+  IdentificationHints'
+    { awsInstanceID =
+        Prelude.Nothing,
+      fqdn = Prelude.Nothing,
+      hostname = Prelude.Nothing,
+      vmPath = 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)
+
+-- | FQDN address 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_vmPath :: Lens.Lens' IdentificationHints (Prelude.Maybe Prelude.Text)
+identificationHints_vmPath = Lens.lens (\IdentificationHints' {vmPath} -> vmPath) (\s@IdentificationHints' {} a -> s {vmPath = a} :: IdentificationHints)
+
+-- | vmWare UUID 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..:? "vmPath")
+            Prelude.<*> (x Data..:? "vmWareUuid")
+      )
+
+instance Prelude.Hashable IdentificationHints where
+  hashWithSalt _salt IdentificationHints' {..} =
+    _salt
+      `Prelude.hashWithSalt` awsInstanceID
+      `Prelude.hashWithSalt` fqdn
+      `Prelude.hashWithSalt` hostname
+      `Prelude.hashWithSalt` vmPath
+      `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 vmPath
+      `Prelude.seq` Prelude.rnf vmWareUuid
diff --git a/gen/Amazonka/MGN/Types/InitiatedBy.hs b/gen/Amazonka/MGN/Types/InitiatedBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/InitiatedBy.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.MGN.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.MGN.Types.InitiatedBy
+  ( InitiatedBy
+      ( ..,
+        InitiatedBy_DIAGNOSTIC,
+        InitiatedBy_START_CUTOVER,
+        InitiatedBy_START_TEST,
+        InitiatedBy_TERMINATE
+      ),
+  )
+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_START_CUTOVER :: InitiatedBy
+pattern InitiatedBy_START_CUTOVER = InitiatedBy' "START_CUTOVER"
+
+pattern InitiatedBy_START_TEST :: InitiatedBy
+pattern InitiatedBy_START_TEST = InitiatedBy' "START_TEST"
+
+pattern InitiatedBy_TERMINATE :: InitiatedBy
+pattern InitiatedBy_TERMINATE = InitiatedBy' "TERMINATE"
+
+{-# COMPLETE
+  InitiatedBy_DIAGNOSTIC,
+  InitiatedBy_START_CUTOVER,
+  InitiatedBy_START_TEST,
+  InitiatedBy_TERMINATE,
+  InitiatedBy'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/Job.hs b/gen/Amazonka/MGN/Types/Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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.MGN.Types.InitiatedBy
+import Amazonka.MGN.Types.JobStatus
+import Amazonka.MGN.Types.JobType
+import Amazonka.MGN.Types.ParticipatingServer
+import qualified Amazonka.Prelude as Prelude
+
+-- | Job.
+--
+-- /See:/ 'newJob' smart constructor.
+data Job = Job'
+  { -- | the ARN of the specific Job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Job creation time.
+    creationDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Job end time.
+    endDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Job initiated by field.
+    initiatedBy :: Prelude.Maybe InitiatedBy,
+    -- | Servers participating in a specific Job.
+    participatingServers :: Prelude.Maybe [ParticipatingServer],
+    -- | Job status.
+    status :: Prelude.Maybe JobStatus,
+    -- | Tags associated with specific Job.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Job type.
+    type' :: Prelude.Maybe JobType,
+    -- | Job ID.
+    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 the specific Job.
+--
+-- 'creationDateTime', 'job_creationDateTime' - Job creation time.
+--
+-- 'endDateTime', 'job_endDateTime' - Job end time.
+--
+-- 'initiatedBy', 'job_initiatedBy' - Job initiated by field.
+--
+-- 'participatingServers', 'job_participatingServers' - Servers participating in a specific Job.
+--
+-- 'status', 'job_status' - Job status.
+--
+-- 'tags', 'job_tags' - Tags associated with specific Job.
+--
+-- 'type'', 'job_type' - Job type.
+--
+-- 'jobID', 'job_jobID' - Job ID.
+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 the specific Job.
+job_arn :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_arn = Lens.lens (\Job' {arn} -> arn) (\s@Job' {} a -> s {arn = a} :: Job)
+
+-- | Job creation time.
+job_creationDateTime :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_creationDateTime = Lens.lens (\Job' {creationDateTime} -> creationDateTime) (\s@Job' {} a -> s {creationDateTime = a} :: Job)
+
+-- | Job end time.
+job_endDateTime :: Lens.Lens' Job (Prelude.Maybe Prelude.Text)
+job_endDateTime = Lens.lens (\Job' {endDateTime} -> endDateTime) (\s@Job' {} a -> s {endDateTime = a} :: Job)
+
+-- | Job initiated by field.
+job_initiatedBy :: Lens.Lens' Job (Prelude.Maybe InitiatedBy)
+job_initiatedBy = Lens.lens (\Job' {initiatedBy} -> initiatedBy) (\s@Job' {} a -> s {initiatedBy = a} :: Job)
+
+-- | Servers participating in a specific Job.
+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
+
+-- | Job status.
+job_status :: Lens.Lens' Job (Prelude.Maybe JobStatus)
+job_status = Lens.lens (\Job' {status} -> status) (\s@Job' {} a -> s {status = a} :: Job)
+
+-- | Tags associated with specific 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)
+
+-- | Job type.
+job_type :: Lens.Lens' Job (Prelude.Maybe JobType)
+job_type = Lens.lens (\Job' {type'} -> type') (\s@Job' {} a -> s {type' = a} :: Job)
+
+-- | Job ID.
+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/MGN/Types/JobLog.hs b/gen/Amazonka/MGN/Types/JobLog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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.MGN.Types.JobLogEvent
+import Amazonka.MGN.Types.JobLogEventData
+import qualified Amazonka.Prelude as Prelude
+
+-- | Job log.
+--
+-- /See:/ 'newJobLog' smart constructor.
+data JobLog = JobLog'
+  { -- | Job log event.
+    event :: Prelude.Maybe JobLogEvent,
+    -- | Job event data
+    eventData :: Prelude.Maybe JobLogEventData,
+    -- | Job log event date and time.
+    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' - Job log event.
+--
+-- 'eventData', 'jobLog_eventData' - Job event data
+--
+-- 'logDateTime', 'jobLog_logDateTime' - Job log event date and time.
+newJobLog ::
+  JobLog
+newJobLog =
+  JobLog'
+    { event = Prelude.Nothing,
+      eventData = Prelude.Nothing,
+      logDateTime = Prelude.Nothing
+    }
+
+-- | Job log event.
+jobLog_event :: Lens.Lens' JobLog (Prelude.Maybe JobLogEvent)
+jobLog_event = Lens.lens (\JobLog' {event} -> event) (\s@JobLog' {} a -> s {event = a} :: JobLog)
+
+-- | Job event data
+jobLog_eventData :: Lens.Lens' JobLog (Prelude.Maybe JobLogEventData)
+jobLog_eventData = Lens.lens (\JobLog' {eventData} -> eventData) (\s@JobLog' {} a -> s {eventData = a} :: JobLog)
+
+-- | Job log event date and time.
+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/MGN/Types/JobLogEvent.hs b/gen/Amazonka/MGN/Types/JobLogEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/JobLogEvent.hs
@@ -0,0 +1,141 @@
+{-# 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.MGN.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.MGN.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
+      ),
+  )
+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"
+
+{-# 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'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/JobLogEventData.hs b/gen/Amazonka/MGN/Types/JobLogEventData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/JobLogEventData.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.MGN.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.MGN.Types.JobLogEventData 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
+
+-- | Job log data
+--
+-- /See:/ 'newJobLogEventData' smart constructor.
+data JobLogEventData = JobLogEventData'
+  { -- | Job Event conversion Server ID.
+    conversionServerID :: Prelude.Maybe Prelude.Text,
+    -- | Job error.
+    rawError :: Prelude.Maybe Prelude.Text,
+    -- | Job Event Source Server ID.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | Job Event Target instance ID.
+    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:
+--
+-- 'conversionServerID', 'jobLogEventData_conversionServerID' - Job Event conversion Server ID.
+--
+-- 'rawError', 'jobLogEventData_rawError' - Job error.
+--
+-- 'sourceServerID', 'jobLogEventData_sourceServerID' - Job Event Source Server ID.
+--
+-- 'targetInstanceID', 'jobLogEventData_targetInstanceID' - Job Event Target instance ID.
+newJobLogEventData ::
+  JobLogEventData
+newJobLogEventData =
+  JobLogEventData'
+    { conversionServerID =
+        Prelude.Nothing,
+      rawError = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      targetInstanceID = Prelude.Nothing
+    }
+
+-- | Job Event conversion Server ID.
+jobLogEventData_conversionServerID :: Lens.Lens' JobLogEventData (Prelude.Maybe Prelude.Text)
+jobLogEventData_conversionServerID = Lens.lens (\JobLogEventData' {conversionServerID} -> conversionServerID) (\s@JobLogEventData' {} a -> s {conversionServerID = a} :: JobLogEventData)
+
+-- | 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)
+
+-- | Job Event Source Server ID.
+jobLogEventData_sourceServerID :: Lens.Lens' JobLogEventData (Prelude.Maybe Prelude.Text)
+jobLogEventData_sourceServerID = Lens.lens (\JobLogEventData' {sourceServerID} -> sourceServerID) (\s@JobLogEventData' {} a -> s {sourceServerID = a} :: JobLogEventData)
+
+-- | Job Event Target instance ID.
+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..:? "conversionServerID")
+            Prelude.<*> (x Data..:? "rawError")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "targetInstanceID")
+      )
+
+instance Prelude.Hashable JobLogEventData where
+  hashWithSalt _salt JobLogEventData' {..} =
+    _salt
+      `Prelude.hashWithSalt` conversionServerID
+      `Prelude.hashWithSalt` rawError
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` targetInstanceID
+
+instance Prelude.NFData JobLogEventData where
+  rnf JobLogEventData' {..} =
+    Prelude.rnf conversionServerID
+      `Prelude.seq` Prelude.rnf rawError
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf targetInstanceID
diff --git a/gen/Amazonka/MGN/Types/JobPostLaunchActionsLaunchStatus.hs b/gen/Amazonka/MGN/Types/JobPostLaunchActionsLaunchStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/JobPostLaunchActionsLaunchStatus.hs
@@ -0,0 +1,138 @@
+{-# 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.MGN.Types.JobPostLaunchActionsLaunchStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.JobPostLaunchActionsLaunchStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.PostLaunchActionExecutionStatus
+import Amazonka.MGN.Types.SsmDocument
+import Amazonka.MGN.Types.SsmDocumentType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Launch Status of the Job Post Launch Actions.
+--
+-- /See:/ 'newJobPostLaunchActionsLaunchStatus' smart constructor.
+data JobPostLaunchActionsLaunchStatus = JobPostLaunchActionsLaunchStatus'
+  { -- | AWS Systems Manager Document\'s execution ID of the of the Job Post
+    -- Launch Actions.
+    executionID :: Prelude.Maybe Prelude.Text,
+    -- | AWS Systems Manager Document\'s execution status.
+    executionStatus :: Prelude.Maybe PostLaunchActionExecutionStatus,
+    -- | AWS Systems Manager Document\'s failure reason.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | AWS Systems Manager\'s Document of the of the Job Post Launch Actions.
+    ssmDocument :: Prelude.Maybe SsmDocument,
+    -- | AWS Systems Manager Document type.
+    ssmDocumentType :: Prelude.Maybe SsmDocumentType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobPostLaunchActionsLaunchStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionID', 'jobPostLaunchActionsLaunchStatus_executionID' - AWS Systems Manager Document\'s execution ID of the of the Job Post
+-- Launch Actions.
+--
+-- 'executionStatus', 'jobPostLaunchActionsLaunchStatus_executionStatus' - AWS Systems Manager Document\'s execution status.
+--
+-- 'failureReason', 'jobPostLaunchActionsLaunchStatus_failureReason' - AWS Systems Manager Document\'s failure reason.
+--
+-- 'ssmDocument', 'jobPostLaunchActionsLaunchStatus_ssmDocument' - AWS Systems Manager\'s Document of the of the Job Post Launch Actions.
+--
+-- 'ssmDocumentType', 'jobPostLaunchActionsLaunchStatus_ssmDocumentType' - AWS Systems Manager Document type.
+newJobPostLaunchActionsLaunchStatus ::
+  JobPostLaunchActionsLaunchStatus
+newJobPostLaunchActionsLaunchStatus =
+  JobPostLaunchActionsLaunchStatus'
+    { executionID =
+        Prelude.Nothing,
+      executionStatus = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      ssmDocument = Prelude.Nothing,
+      ssmDocumentType = Prelude.Nothing
+    }
+
+-- | AWS Systems Manager Document\'s execution ID of the of the Job Post
+-- Launch Actions.
+jobPostLaunchActionsLaunchStatus_executionID :: Lens.Lens' JobPostLaunchActionsLaunchStatus (Prelude.Maybe Prelude.Text)
+jobPostLaunchActionsLaunchStatus_executionID = Lens.lens (\JobPostLaunchActionsLaunchStatus' {executionID} -> executionID) (\s@JobPostLaunchActionsLaunchStatus' {} a -> s {executionID = a} :: JobPostLaunchActionsLaunchStatus)
+
+-- | AWS Systems Manager Document\'s execution status.
+jobPostLaunchActionsLaunchStatus_executionStatus :: Lens.Lens' JobPostLaunchActionsLaunchStatus (Prelude.Maybe PostLaunchActionExecutionStatus)
+jobPostLaunchActionsLaunchStatus_executionStatus = Lens.lens (\JobPostLaunchActionsLaunchStatus' {executionStatus} -> executionStatus) (\s@JobPostLaunchActionsLaunchStatus' {} a -> s {executionStatus = a} :: JobPostLaunchActionsLaunchStatus)
+
+-- | AWS Systems Manager Document\'s failure reason.
+jobPostLaunchActionsLaunchStatus_failureReason :: Lens.Lens' JobPostLaunchActionsLaunchStatus (Prelude.Maybe Prelude.Text)
+jobPostLaunchActionsLaunchStatus_failureReason = Lens.lens (\JobPostLaunchActionsLaunchStatus' {failureReason} -> failureReason) (\s@JobPostLaunchActionsLaunchStatus' {} a -> s {failureReason = a} :: JobPostLaunchActionsLaunchStatus)
+
+-- | AWS Systems Manager\'s Document of the of the Job Post Launch Actions.
+jobPostLaunchActionsLaunchStatus_ssmDocument :: Lens.Lens' JobPostLaunchActionsLaunchStatus (Prelude.Maybe SsmDocument)
+jobPostLaunchActionsLaunchStatus_ssmDocument = Lens.lens (\JobPostLaunchActionsLaunchStatus' {ssmDocument} -> ssmDocument) (\s@JobPostLaunchActionsLaunchStatus' {} a -> s {ssmDocument = a} :: JobPostLaunchActionsLaunchStatus)
+
+-- | AWS Systems Manager Document type.
+jobPostLaunchActionsLaunchStatus_ssmDocumentType :: Lens.Lens' JobPostLaunchActionsLaunchStatus (Prelude.Maybe SsmDocumentType)
+jobPostLaunchActionsLaunchStatus_ssmDocumentType = Lens.lens (\JobPostLaunchActionsLaunchStatus' {ssmDocumentType} -> ssmDocumentType) (\s@JobPostLaunchActionsLaunchStatus' {} a -> s {ssmDocumentType = a} :: JobPostLaunchActionsLaunchStatus)
+
+instance
+  Data.FromJSON
+    JobPostLaunchActionsLaunchStatus
+  where
+  parseJSON =
+    Data.withObject
+      "JobPostLaunchActionsLaunchStatus"
+      ( \x ->
+          JobPostLaunchActionsLaunchStatus'
+            Prelude.<$> (x Data..:? "executionID")
+            Prelude.<*> (x Data..:? "executionStatus")
+            Prelude.<*> (x Data..:? "failureReason")
+            Prelude.<*> (x Data..:? "ssmDocument")
+            Prelude.<*> (x Data..:? "ssmDocumentType")
+      )
+
+instance
+  Prelude.Hashable
+    JobPostLaunchActionsLaunchStatus
+  where
+  hashWithSalt
+    _salt
+    JobPostLaunchActionsLaunchStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` executionID
+        `Prelude.hashWithSalt` executionStatus
+        `Prelude.hashWithSalt` failureReason
+        `Prelude.hashWithSalt` ssmDocument
+        `Prelude.hashWithSalt` ssmDocumentType
+
+instance
+  Prelude.NFData
+    JobPostLaunchActionsLaunchStatus
+  where
+  rnf JobPostLaunchActionsLaunchStatus' {..} =
+    Prelude.rnf executionID
+      `Prelude.seq` Prelude.rnf executionStatus
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf ssmDocument
+      `Prelude.seq` Prelude.rnf ssmDocumentType
diff --git a/gen/Amazonka/MGN/Types/JobStatus.hs b/gen/Amazonka/MGN/Types/JobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/JobType.hs b/gen/Amazonka/MGN/Types/JobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/JobType.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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.MGN.Types.JobType
+  ( JobType
+      ( ..,
+        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_LAUNCH :: JobType
+pattern JobType_LAUNCH = JobType' "LAUNCH"
+
+pattern JobType_TERMINATE :: JobType
+pattern JobType_TERMINATE = JobType' "TERMINATE"
+
+{-# COMPLETE
+  JobType_LAUNCH,
+  JobType_TERMINATE,
+  JobType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/LaunchConfiguration.hs b/gen/Amazonka/MGN/Types/LaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LaunchConfiguration.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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.MGN.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.MGN.Types.BootMode
+import Amazonka.MGN.Types.LaunchDisposition
+import Amazonka.MGN.Types.Licensing
+import Amazonka.MGN.Types.PostLaunchActions
+import Amazonka.MGN.Types.TargetInstanceTypeRightSizingMethod
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newLaunchConfiguration' smart constructor.
+data LaunchConfiguration = LaunchConfiguration'
+  { -- | Launch configuration boot mode.
+    bootMode :: Prelude.Maybe BootMode,
+    -- | Copy Private IP during Launch Configuration.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Copy Tags during Launch Configuration.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | Launch configuration EC2 Launch template ID.
+    ec2LaunchTemplateID :: Prelude.Maybe Prelude.Text,
+    -- | Enable map auto tagging.
+    enableMapAutoTagging :: Prelude.Maybe Prelude.Bool,
+    -- | Launch disposition for launch configuration.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    -- | Launch configuration OS licensing.
+    licensing :: Prelude.Maybe Licensing,
+    -- | Map auto tagging MPE ID.
+    mapAutoTaggingMpeID :: Prelude.Maybe Prelude.Text,
+    -- | Launch configuration name.
+    name :: Prelude.Maybe Prelude.Text,
+    postLaunchActions :: Prelude.Maybe PostLaunchActions,
+    -- | Launch configuration Source Server ID.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | Launch configuration Target instance type right sizing method.
+    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:
+--
+-- 'bootMode', 'launchConfiguration_bootMode' - Launch configuration boot mode.
+--
+-- 'copyPrivateIp', 'launchConfiguration_copyPrivateIp' - Copy Private IP during Launch Configuration.
+--
+-- 'copyTags', 'launchConfiguration_copyTags' - Copy Tags during Launch Configuration.
+--
+-- 'ec2LaunchTemplateID', 'launchConfiguration_ec2LaunchTemplateID' - Launch configuration EC2 Launch template ID.
+--
+-- 'enableMapAutoTagging', 'launchConfiguration_enableMapAutoTagging' - Enable map auto tagging.
+--
+-- 'launchDisposition', 'launchConfiguration_launchDisposition' - Launch disposition for launch configuration.
+--
+-- 'licensing', 'launchConfiguration_licensing' - Launch configuration OS licensing.
+--
+-- 'mapAutoTaggingMpeID', 'launchConfiguration_mapAutoTaggingMpeID' - Map auto tagging MPE ID.
+--
+-- 'name', 'launchConfiguration_name' - Launch configuration name.
+--
+-- 'postLaunchActions', 'launchConfiguration_postLaunchActions' - Undocumented member.
+--
+-- 'sourceServerID', 'launchConfiguration_sourceServerID' - Launch configuration Source Server ID.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'launchConfiguration_targetInstanceTypeRightSizingMethod' - Launch configuration Target instance type right sizing method.
+newLaunchConfiguration ::
+  LaunchConfiguration
+newLaunchConfiguration =
+  LaunchConfiguration'
+    { bootMode = Prelude.Nothing,
+      copyPrivateIp = Prelude.Nothing,
+      copyTags = Prelude.Nothing,
+      ec2LaunchTemplateID = Prelude.Nothing,
+      enableMapAutoTagging = Prelude.Nothing,
+      launchDisposition = Prelude.Nothing,
+      licensing = Prelude.Nothing,
+      mapAutoTaggingMpeID = Prelude.Nothing,
+      name = Prelude.Nothing,
+      postLaunchActions = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      targetInstanceTypeRightSizingMethod =
+        Prelude.Nothing
+    }
+
+-- | Launch configuration boot mode.
+launchConfiguration_bootMode :: Lens.Lens' LaunchConfiguration (Prelude.Maybe BootMode)
+launchConfiguration_bootMode = Lens.lens (\LaunchConfiguration' {bootMode} -> bootMode) (\s@LaunchConfiguration' {} a -> s {bootMode = a} :: LaunchConfiguration)
+
+-- | Copy Private IP during Launch Configuration.
+launchConfiguration_copyPrivateIp :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Bool)
+launchConfiguration_copyPrivateIp = Lens.lens (\LaunchConfiguration' {copyPrivateIp} -> copyPrivateIp) (\s@LaunchConfiguration' {} a -> s {copyPrivateIp = a} :: LaunchConfiguration)
+
+-- | Copy Tags during Launch Configuration.
+launchConfiguration_copyTags :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Bool)
+launchConfiguration_copyTags = Lens.lens (\LaunchConfiguration' {copyTags} -> copyTags) (\s@LaunchConfiguration' {} a -> s {copyTags = a} :: LaunchConfiguration)
+
+-- | Launch configuration EC2 Launch template ID.
+launchConfiguration_ec2LaunchTemplateID :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_ec2LaunchTemplateID = Lens.lens (\LaunchConfiguration' {ec2LaunchTemplateID} -> ec2LaunchTemplateID) (\s@LaunchConfiguration' {} a -> s {ec2LaunchTemplateID = a} :: LaunchConfiguration)
+
+-- | Enable map auto tagging.
+launchConfiguration_enableMapAutoTagging :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Bool)
+launchConfiguration_enableMapAutoTagging = Lens.lens (\LaunchConfiguration' {enableMapAutoTagging} -> enableMapAutoTagging) (\s@LaunchConfiguration' {} a -> s {enableMapAutoTagging = a} :: LaunchConfiguration)
+
+-- | Launch disposition for launch configuration.
+launchConfiguration_launchDisposition :: Lens.Lens' LaunchConfiguration (Prelude.Maybe LaunchDisposition)
+launchConfiguration_launchDisposition = Lens.lens (\LaunchConfiguration' {launchDisposition} -> launchDisposition) (\s@LaunchConfiguration' {} a -> s {launchDisposition = a} :: LaunchConfiguration)
+
+-- | Launch configuration OS licensing.
+launchConfiguration_licensing :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Licensing)
+launchConfiguration_licensing = Lens.lens (\LaunchConfiguration' {licensing} -> licensing) (\s@LaunchConfiguration' {} a -> s {licensing = a} :: LaunchConfiguration)
+
+-- | Map auto tagging MPE ID.
+launchConfiguration_mapAutoTaggingMpeID :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_mapAutoTaggingMpeID = Lens.lens (\LaunchConfiguration' {mapAutoTaggingMpeID} -> mapAutoTaggingMpeID) (\s@LaunchConfiguration' {} a -> s {mapAutoTaggingMpeID = a} :: LaunchConfiguration)
+
+-- | Launch configuration name.
+launchConfiguration_name :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_name = Lens.lens (\LaunchConfiguration' {name} -> name) (\s@LaunchConfiguration' {} a -> s {name = a} :: LaunchConfiguration)
+
+-- | Undocumented member.
+launchConfiguration_postLaunchActions :: Lens.Lens' LaunchConfiguration (Prelude.Maybe PostLaunchActions)
+launchConfiguration_postLaunchActions = Lens.lens (\LaunchConfiguration' {postLaunchActions} -> postLaunchActions) (\s@LaunchConfiguration' {} a -> s {postLaunchActions = a} :: LaunchConfiguration)
+
+-- | Launch configuration Source Server ID.
+launchConfiguration_sourceServerID :: Lens.Lens' LaunchConfiguration (Prelude.Maybe Prelude.Text)
+launchConfiguration_sourceServerID = Lens.lens (\LaunchConfiguration' {sourceServerID} -> sourceServerID) (\s@LaunchConfiguration' {} a -> s {sourceServerID = a} :: LaunchConfiguration)
+
+-- | Launch configuration Target instance type right sizing method.
+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..:? "bootMode")
+            Prelude.<*> (x Data..:? "copyPrivateIp")
+            Prelude.<*> (x Data..:? "copyTags")
+            Prelude.<*> (x Data..:? "ec2LaunchTemplateID")
+            Prelude.<*> (x Data..:? "enableMapAutoTagging")
+            Prelude.<*> (x Data..:? "launchDisposition")
+            Prelude.<*> (x Data..:? "licensing")
+            Prelude.<*> (x Data..:? "mapAutoTaggingMpeID")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "postLaunchActions")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "targetInstanceTypeRightSizingMethod")
+      )
+
+instance Prelude.Hashable LaunchConfiguration where
+  hashWithSalt _salt LaunchConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` copyPrivateIp
+      `Prelude.hashWithSalt` copyTags
+      `Prelude.hashWithSalt` ec2LaunchTemplateID
+      `Prelude.hashWithSalt` enableMapAutoTagging
+      `Prelude.hashWithSalt` launchDisposition
+      `Prelude.hashWithSalt` licensing
+      `Prelude.hashWithSalt` mapAutoTaggingMpeID
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` postLaunchActions
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+
+instance Prelude.NFData LaunchConfiguration where
+  rnf LaunchConfiguration' {..} =
+    Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf ec2LaunchTemplateID
+      `Prelude.seq` Prelude.rnf enableMapAutoTagging
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf mapAutoTaggingMpeID
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf postLaunchActions
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf
+        targetInstanceTypeRightSizingMethod
diff --git a/gen/Amazonka/MGN/Types/LaunchConfigurationTemplate.hs b/gen/Amazonka/MGN/Types/LaunchConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LaunchConfigurationTemplate.hs
@@ -0,0 +1,274 @@
+{-# 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.MGN.Types.LaunchConfigurationTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LaunchConfigurationTemplate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.BootMode
+import Amazonka.MGN.Types.LaunchDisposition
+import Amazonka.MGN.Types.LaunchTemplateDiskConf
+import Amazonka.MGN.Types.Licensing
+import Amazonka.MGN.Types.PostLaunchActions
+import Amazonka.MGN.Types.TargetInstanceTypeRightSizingMethod
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newLaunchConfigurationTemplate' smart constructor.
+data LaunchConfigurationTemplate = LaunchConfigurationTemplate'
+  { -- | ARN of the Launch Configuration Template.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Associate public Ip address.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Launch configuration template boot mode.
+    bootMode :: Prelude.Maybe BootMode,
+    -- | Copy private Ip.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Copy tags.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | EC2 launch template ID.
+    ec2LaunchTemplateID :: Prelude.Maybe Prelude.Text,
+    -- | Enable map auto tagging.
+    enableMapAutoTagging :: Prelude.Maybe Prelude.Bool,
+    -- | Large volume config.
+    largeVolumeConf :: Prelude.Maybe LaunchTemplateDiskConf,
+    -- | Launch disposition.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    licensing :: Prelude.Maybe Licensing,
+    -- | Launch configuration template map auto tagging MPE ID.
+    mapAutoTaggingMpeID :: Prelude.Maybe Prelude.Text,
+    -- | Post Launch Actions of the Launch Configuration Template.
+    postLaunchActions :: Prelude.Maybe PostLaunchActions,
+    -- | Small volume config.
+    smallVolumeConf :: Prelude.Maybe LaunchTemplateDiskConf,
+    -- | Small volume maximum size.
+    smallVolumeMaxSize :: Prelude.Maybe Prelude.Natural,
+    -- | Tags of the Launch Configuration Template.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Target instance type right-sizing method.
+    targetInstanceTypeRightSizingMethod :: Prelude.Maybe TargetInstanceTypeRightSizingMethod,
+    -- | ID of the Launch Configuration Template.
+    launchConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'launchConfigurationTemplate_arn' - ARN of the Launch Configuration Template.
+--
+-- 'associatePublicIpAddress', 'launchConfigurationTemplate_associatePublicIpAddress' - Associate public Ip address.
+--
+-- 'bootMode', 'launchConfigurationTemplate_bootMode' - Launch configuration template boot mode.
+--
+-- 'copyPrivateIp', 'launchConfigurationTemplate_copyPrivateIp' - Copy private Ip.
+--
+-- 'copyTags', 'launchConfigurationTemplate_copyTags' - Copy tags.
+--
+-- 'ec2LaunchTemplateID', 'launchConfigurationTemplate_ec2LaunchTemplateID' - EC2 launch template ID.
+--
+-- 'enableMapAutoTagging', 'launchConfigurationTemplate_enableMapAutoTagging' - Enable map auto tagging.
+--
+-- 'largeVolumeConf', 'launchConfigurationTemplate_largeVolumeConf' - Large volume config.
+--
+-- 'launchDisposition', 'launchConfigurationTemplate_launchDisposition' - Launch disposition.
+--
+-- 'licensing', 'launchConfigurationTemplate_licensing' - Undocumented member.
+--
+-- 'mapAutoTaggingMpeID', 'launchConfigurationTemplate_mapAutoTaggingMpeID' - Launch configuration template map auto tagging MPE ID.
+--
+-- 'postLaunchActions', 'launchConfigurationTemplate_postLaunchActions' - Post Launch Actions of the Launch Configuration Template.
+--
+-- 'smallVolumeConf', 'launchConfigurationTemplate_smallVolumeConf' - Small volume config.
+--
+-- 'smallVolumeMaxSize', 'launchConfigurationTemplate_smallVolumeMaxSize' - Small volume maximum size.
+--
+-- 'tags', 'launchConfigurationTemplate_tags' - Tags of the Launch Configuration Template.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'launchConfigurationTemplate_targetInstanceTypeRightSizingMethod' - Target instance type right-sizing method.
+--
+-- 'launchConfigurationTemplateID', 'launchConfigurationTemplate_launchConfigurationTemplateID' - ID of the Launch Configuration Template.
+newLaunchConfigurationTemplate ::
+  -- | 'launchConfigurationTemplateID'
+  Prelude.Text ->
+  LaunchConfigurationTemplate
+newLaunchConfigurationTemplate
+  pLaunchConfigurationTemplateID_ =
+    LaunchConfigurationTemplate'
+      { arn = Prelude.Nothing,
+        associatePublicIpAddress = Prelude.Nothing,
+        bootMode = Prelude.Nothing,
+        copyPrivateIp = Prelude.Nothing,
+        copyTags = Prelude.Nothing,
+        ec2LaunchTemplateID = Prelude.Nothing,
+        enableMapAutoTagging = Prelude.Nothing,
+        largeVolumeConf = Prelude.Nothing,
+        launchDisposition = Prelude.Nothing,
+        licensing = Prelude.Nothing,
+        mapAutoTaggingMpeID = Prelude.Nothing,
+        postLaunchActions = Prelude.Nothing,
+        smallVolumeConf = Prelude.Nothing,
+        smallVolumeMaxSize = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        targetInstanceTypeRightSizingMethod =
+          Prelude.Nothing,
+        launchConfigurationTemplateID =
+          pLaunchConfigurationTemplateID_
+      }
+
+-- | ARN of the Launch Configuration Template.
+launchConfigurationTemplate_arn :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Text)
+launchConfigurationTemplate_arn = Lens.lens (\LaunchConfigurationTemplate' {arn} -> arn) (\s@LaunchConfigurationTemplate' {} a -> s {arn = a} :: LaunchConfigurationTemplate)
+
+-- | Associate public Ip address.
+launchConfigurationTemplate_associatePublicIpAddress :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+launchConfigurationTemplate_associatePublicIpAddress = Lens.lens (\LaunchConfigurationTemplate' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@LaunchConfigurationTemplate' {} a -> s {associatePublicIpAddress = a} :: LaunchConfigurationTemplate)
+
+-- | Launch configuration template boot mode.
+launchConfigurationTemplate_bootMode :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe BootMode)
+launchConfigurationTemplate_bootMode = Lens.lens (\LaunchConfigurationTemplate' {bootMode} -> bootMode) (\s@LaunchConfigurationTemplate' {} a -> s {bootMode = a} :: LaunchConfigurationTemplate)
+
+-- | Copy private Ip.
+launchConfigurationTemplate_copyPrivateIp :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+launchConfigurationTemplate_copyPrivateIp = Lens.lens (\LaunchConfigurationTemplate' {copyPrivateIp} -> copyPrivateIp) (\s@LaunchConfigurationTemplate' {} a -> s {copyPrivateIp = a} :: LaunchConfigurationTemplate)
+
+-- | Copy tags.
+launchConfigurationTemplate_copyTags :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+launchConfigurationTemplate_copyTags = Lens.lens (\LaunchConfigurationTemplate' {copyTags} -> copyTags) (\s@LaunchConfigurationTemplate' {} a -> s {copyTags = a} :: LaunchConfigurationTemplate)
+
+-- | EC2 launch template ID.
+launchConfigurationTemplate_ec2LaunchTemplateID :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Text)
+launchConfigurationTemplate_ec2LaunchTemplateID = Lens.lens (\LaunchConfigurationTemplate' {ec2LaunchTemplateID} -> ec2LaunchTemplateID) (\s@LaunchConfigurationTemplate' {} a -> s {ec2LaunchTemplateID = a} :: LaunchConfigurationTemplate)
+
+-- | Enable map auto tagging.
+launchConfigurationTemplate_enableMapAutoTagging :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+launchConfigurationTemplate_enableMapAutoTagging = Lens.lens (\LaunchConfigurationTemplate' {enableMapAutoTagging} -> enableMapAutoTagging) (\s@LaunchConfigurationTemplate' {} a -> s {enableMapAutoTagging = a} :: LaunchConfigurationTemplate)
+
+-- | Large volume config.
+launchConfigurationTemplate_largeVolumeConf :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe LaunchTemplateDiskConf)
+launchConfigurationTemplate_largeVolumeConf = Lens.lens (\LaunchConfigurationTemplate' {largeVolumeConf} -> largeVolumeConf) (\s@LaunchConfigurationTemplate' {} a -> s {largeVolumeConf = a} :: LaunchConfigurationTemplate)
+
+-- | Launch disposition.
+launchConfigurationTemplate_launchDisposition :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe LaunchDisposition)
+launchConfigurationTemplate_launchDisposition = Lens.lens (\LaunchConfigurationTemplate' {launchDisposition} -> launchDisposition) (\s@LaunchConfigurationTemplate' {} a -> s {launchDisposition = a} :: LaunchConfigurationTemplate)
+
+-- | Undocumented member.
+launchConfigurationTemplate_licensing :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Licensing)
+launchConfigurationTemplate_licensing = Lens.lens (\LaunchConfigurationTemplate' {licensing} -> licensing) (\s@LaunchConfigurationTemplate' {} a -> s {licensing = a} :: LaunchConfigurationTemplate)
+
+-- | Launch configuration template map auto tagging MPE ID.
+launchConfigurationTemplate_mapAutoTaggingMpeID :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Text)
+launchConfigurationTemplate_mapAutoTaggingMpeID = Lens.lens (\LaunchConfigurationTemplate' {mapAutoTaggingMpeID} -> mapAutoTaggingMpeID) (\s@LaunchConfigurationTemplate' {} a -> s {mapAutoTaggingMpeID = a} :: LaunchConfigurationTemplate)
+
+-- | Post Launch Actions of the Launch Configuration Template.
+launchConfigurationTemplate_postLaunchActions :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe PostLaunchActions)
+launchConfigurationTemplate_postLaunchActions = Lens.lens (\LaunchConfigurationTemplate' {postLaunchActions} -> postLaunchActions) (\s@LaunchConfigurationTemplate' {} a -> s {postLaunchActions = a} :: LaunchConfigurationTemplate)
+
+-- | Small volume config.
+launchConfigurationTemplate_smallVolumeConf :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe LaunchTemplateDiskConf)
+launchConfigurationTemplate_smallVolumeConf = Lens.lens (\LaunchConfigurationTemplate' {smallVolumeConf} -> smallVolumeConf) (\s@LaunchConfigurationTemplate' {} a -> s {smallVolumeConf = a} :: LaunchConfigurationTemplate)
+
+-- | Small volume maximum size.
+launchConfigurationTemplate_smallVolumeMaxSize :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+launchConfigurationTemplate_smallVolumeMaxSize = Lens.lens (\LaunchConfigurationTemplate' {smallVolumeMaxSize} -> smallVolumeMaxSize) (\s@LaunchConfigurationTemplate' {} a -> s {smallVolumeMaxSize = a} :: LaunchConfigurationTemplate)
+
+-- | Tags of the Launch Configuration Template.
+launchConfigurationTemplate_tags :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+launchConfigurationTemplate_tags = Lens.lens (\LaunchConfigurationTemplate' {tags} -> tags) (\s@LaunchConfigurationTemplate' {} a -> s {tags = a} :: LaunchConfigurationTemplate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Target instance type right-sizing method.
+launchConfigurationTemplate_targetInstanceTypeRightSizingMethod :: Lens.Lens' LaunchConfigurationTemplate (Prelude.Maybe TargetInstanceTypeRightSizingMethod)
+launchConfigurationTemplate_targetInstanceTypeRightSizingMethod = Lens.lens (\LaunchConfigurationTemplate' {targetInstanceTypeRightSizingMethod} -> targetInstanceTypeRightSizingMethod) (\s@LaunchConfigurationTemplate' {} a -> s {targetInstanceTypeRightSizingMethod = a} :: LaunchConfigurationTemplate)
+
+-- | ID of the Launch Configuration Template.
+launchConfigurationTemplate_launchConfigurationTemplateID :: Lens.Lens' LaunchConfigurationTemplate Prelude.Text
+launchConfigurationTemplate_launchConfigurationTemplateID = Lens.lens (\LaunchConfigurationTemplate' {launchConfigurationTemplateID} -> launchConfigurationTemplateID) (\s@LaunchConfigurationTemplate' {} a -> s {launchConfigurationTemplateID = a} :: LaunchConfigurationTemplate)
+
+instance Data.FromJSON LaunchConfigurationTemplate where
+  parseJSON =
+    Data.withObject
+      "LaunchConfigurationTemplate"
+      ( \x ->
+          LaunchConfigurationTemplate'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "associatePublicIpAddress")
+            Prelude.<*> (x Data..:? "bootMode")
+            Prelude.<*> (x Data..:? "copyPrivateIp")
+            Prelude.<*> (x Data..:? "copyTags")
+            Prelude.<*> (x Data..:? "ec2LaunchTemplateID")
+            Prelude.<*> (x Data..:? "enableMapAutoTagging")
+            Prelude.<*> (x Data..:? "largeVolumeConf")
+            Prelude.<*> (x Data..:? "launchDisposition")
+            Prelude.<*> (x Data..:? "licensing")
+            Prelude.<*> (x Data..:? "mapAutoTaggingMpeID")
+            Prelude.<*> (x Data..:? "postLaunchActions")
+            Prelude.<*> (x Data..:? "smallVolumeConf")
+            Prelude.<*> (x Data..:? "smallVolumeMaxSize")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "targetInstanceTypeRightSizingMethod")
+            Prelude.<*> (x Data..: "launchConfigurationTemplateID")
+      )
+
+instance Prelude.Hashable LaunchConfigurationTemplate where
+  hashWithSalt _salt LaunchConfigurationTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` associatePublicIpAddress
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` copyPrivateIp
+      `Prelude.hashWithSalt` copyTags
+      `Prelude.hashWithSalt` ec2LaunchTemplateID
+      `Prelude.hashWithSalt` enableMapAutoTagging
+      `Prelude.hashWithSalt` largeVolumeConf
+      `Prelude.hashWithSalt` launchDisposition
+      `Prelude.hashWithSalt` licensing
+      `Prelude.hashWithSalt` mapAutoTaggingMpeID
+      `Prelude.hashWithSalt` postLaunchActions
+      `Prelude.hashWithSalt` smallVolumeConf
+      `Prelude.hashWithSalt` smallVolumeMaxSize
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+      `Prelude.hashWithSalt` launchConfigurationTemplateID
+
+instance Prelude.NFData LaunchConfigurationTemplate where
+  rnf LaunchConfigurationTemplate' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf associatePublicIpAddress
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf ec2LaunchTemplateID
+      `Prelude.seq` Prelude.rnf enableMapAutoTagging
+      `Prelude.seq` Prelude.rnf largeVolumeConf
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf mapAutoTaggingMpeID
+      `Prelude.seq` Prelude.rnf postLaunchActions
+      `Prelude.seq` Prelude.rnf smallVolumeConf
+      `Prelude.seq` Prelude.rnf smallVolumeMaxSize
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf
+        targetInstanceTypeRightSizingMethod
+      `Prelude.seq` Prelude.rnf
+        launchConfigurationTemplateID
diff --git a/gen/Amazonka/MGN/Types/LaunchDisposition.hs b/gen/Amazonka/MGN/Types/LaunchDisposition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/LaunchStatus.hs b/gen/Amazonka/MGN/Types/LaunchStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/LaunchTemplateDiskConf.hs b/gen/Amazonka/MGN/Types/LaunchTemplateDiskConf.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LaunchTemplateDiskConf.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.LaunchTemplateDiskConf
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LaunchTemplateDiskConf where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.VolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Launch template disk configuration.
+--
+-- /See:/ 'newLaunchTemplateDiskConf' smart constructor.
+data LaunchTemplateDiskConf = LaunchTemplateDiskConf'
+  { -- | Launch template disk iops configuration.
+    iops :: Prelude.Maybe Prelude.Natural,
+    -- | Launch template disk throughput configuration.
+    throughput :: Prelude.Maybe Prelude.Natural,
+    -- | Launch template disk volume type configuration.
+    volumeType :: Prelude.Maybe VolumeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateDiskConf' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iops', 'launchTemplateDiskConf_iops' - Launch template disk iops configuration.
+--
+-- 'throughput', 'launchTemplateDiskConf_throughput' - Launch template disk throughput configuration.
+--
+-- 'volumeType', 'launchTemplateDiskConf_volumeType' - Launch template disk volume type configuration.
+newLaunchTemplateDiskConf ::
+  LaunchTemplateDiskConf
+newLaunchTemplateDiskConf =
+  LaunchTemplateDiskConf'
+    { iops = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeType = Prelude.Nothing
+    }
+
+-- | Launch template disk iops configuration.
+launchTemplateDiskConf_iops :: Lens.Lens' LaunchTemplateDiskConf (Prelude.Maybe Prelude.Natural)
+launchTemplateDiskConf_iops = Lens.lens (\LaunchTemplateDiskConf' {iops} -> iops) (\s@LaunchTemplateDiskConf' {} a -> s {iops = a} :: LaunchTemplateDiskConf)
+
+-- | Launch template disk throughput configuration.
+launchTemplateDiskConf_throughput :: Lens.Lens' LaunchTemplateDiskConf (Prelude.Maybe Prelude.Natural)
+launchTemplateDiskConf_throughput = Lens.lens (\LaunchTemplateDiskConf' {throughput} -> throughput) (\s@LaunchTemplateDiskConf' {} a -> s {throughput = a} :: LaunchTemplateDiskConf)
+
+-- | Launch template disk volume type configuration.
+launchTemplateDiskConf_volumeType :: Lens.Lens' LaunchTemplateDiskConf (Prelude.Maybe VolumeType)
+launchTemplateDiskConf_volumeType = Lens.lens (\LaunchTemplateDiskConf' {volumeType} -> volumeType) (\s@LaunchTemplateDiskConf' {} a -> s {volumeType = a} :: LaunchTemplateDiskConf)
+
+instance Data.FromJSON LaunchTemplateDiskConf where
+  parseJSON =
+    Data.withObject
+      "LaunchTemplateDiskConf"
+      ( \x ->
+          LaunchTemplateDiskConf'
+            Prelude.<$> (x Data..:? "iops")
+            Prelude.<*> (x Data..:? "throughput")
+            Prelude.<*> (x Data..:? "volumeType")
+      )
+
+instance Prelude.Hashable LaunchTemplateDiskConf where
+  hashWithSalt _salt LaunchTemplateDiskConf' {..} =
+    _salt
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` throughput
+      `Prelude.hashWithSalt` volumeType
+
+instance Prelude.NFData LaunchTemplateDiskConf where
+  rnf LaunchTemplateDiskConf' {..} =
+    Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeType
+
+instance Data.ToJSON LaunchTemplateDiskConf where
+  toJSON LaunchTemplateDiskConf' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("iops" Data..=) Prelude.<$> iops,
+            ("throughput" Data..=) Prelude.<$> throughput,
+            ("volumeType" Data..=) Prelude.<$> volumeType
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/LaunchedInstance.hs b/gen/Amazonka/MGN/Types/LaunchedInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LaunchedInstance.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.MGN.Types.LaunchedInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LaunchedInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.FirstBoot
+import qualified Amazonka.Prelude as Prelude
+
+-- | Launched instance.
+--
+-- /See:/ 'newLaunchedInstance' smart constructor.
+data LaunchedInstance = LaunchedInstance'
+  { -- | Launched instance EC2 ID.
+    ec2InstanceID :: Prelude.Maybe Prelude.Text,
+    -- | Launched instance first boot.
+    firstBoot :: Prelude.Maybe FirstBoot,
+    -- | Launched instance Job ID.
+    jobID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchedInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ec2InstanceID', 'launchedInstance_ec2InstanceID' - Launched instance EC2 ID.
+--
+-- 'firstBoot', 'launchedInstance_firstBoot' - Launched instance first boot.
+--
+-- 'jobID', 'launchedInstance_jobID' - Launched instance Job ID.
+newLaunchedInstance ::
+  LaunchedInstance
+newLaunchedInstance =
+  LaunchedInstance'
+    { ec2InstanceID = Prelude.Nothing,
+      firstBoot = Prelude.Nothing,
+      jobID = Prelude.Nothing
+    }
+
+-- | Launched instance EC2 ID.
+launchedInstance_ec2InstanceID :: Lens.Lens' LaunchedInstance (Prelude.Maybe Prelude.Text)
+launchedInstance_ec2InstanceID = Lens.lens (\LaunchedInstance' {ec2InstanceID} -> ec2InstanceID) (\s@LaunchedInstance' {} a -> s {ec2InstanceID = a} :: LaunchedInstance)
+
+-- | Launched instance first boot.
+launchedInstance_firstBoot :: Lens.Lens' LaunchedInstance (Prelude.Maybe FirstBoot)
+launchedInstance_firstBoot = Lens.lens (\LaunchedInstance' {firstBoot} -> firstBoot) (\s@LaunchedInstance' {} a -> s {firstBoot = a} :: LaunchedInstance)
+
+-- | Launched instance Job ID.
+launchedInstance_jobID :: Lens.Lens' LaunchedInstance (Prelude.Maybe Prelude.Text)
+launchedInstance_jobID = Lens.lens (\LaunchedInstance' {jobID} -> jobID) (\s@LaunchedInstance' {} a -> s {jobID = a} :: LaunchedInstance)
+
+instance Data.FromJSON LaunchedInstance where
+  parseJSON =
+    Data.withObject
+      "LaunchedInstance"
+      ( \x ->
+          LaunchedInstance'
+            Prelude.<$> (x Data..:? "ec2InstanceID")
+            Prelude.<*> (x Data..:? "firstBoot")
+            Prelude.<*> (x Data..:? "jobID")
+      )
+
+instance Prelude.Hashable LaunchedInstance where
+  hashWithSalt _salt LaunchedInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` ec2InstanceID
+      `Prelude.hashWithSalt` firstBoot
+      `Prelude.hashWithSalt` jobID
+
+instance Prelude.NFData LaunchedInstance where
+  rnf LaunchedInstance' {..} =
+    Prelude.rnf ec2InstanceID
+      `Prelude.seq` Prelude.rnf firstBoot
+      `Prelude.seq` Prelude.rnf jobID
diff --git a/gen/Amazonka/MGN/Types/Licensing.hs b/gen/Amazonka/MGN/Types/Licensing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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
+
+-- | Configure Licensing.
+--
+-- /See:/ 'newLicensing' smart constructor.
+data Licensing = Licensing'
+  { -- | Configure BYOL OS licensing.
+    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' - Configure BYOL OS licensing.
+newLicensing ::
+  Licensing
+newLicensing = Licensing' {osByol = Prelude.Nothing}
+
+-- | Configure BYOL OS licensing.
+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/MGN/Types/LifeCycle.hs b/gen/Amazonka/MGN/Types/LifeCycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycle.hs
@@ -0,0 +1,148 @@
+{-# 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.MGN.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.MGN.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.MGN.Types.LifeCycleLastCutover
+import Amazonka.MGN.Types.LifeCycleLastTest
+import Amazonka.MGN.Types.LifeCycleState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Lifecycle.
+--
+-- /See:/ 'newLifeCycle' smart constructor.
+data LifeCycle = LifeCycle'
+  { -- | Lifecycle added to service data and time.
+    addedToServiceDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Lifecycle elapsed time and duration.
+    elapsedReplicationDuration :: Prelude.Maybe Prelude.Text,
+    -- | Lifecycle replication initiation date and time.
+    firstByteDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Lifecycle last Cutover.
+    lastCutover :: Prelude.Maybe LifeCycleLastCutover,
+    -- | Lifecycle last seen date and time.
+    lastSeenByServiceDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Lifecycle last Test.
+    lastTest :: Prelude.Maybe LifeCycleLastTest,
+    -- | Lifecycle state.
+    state :: Prelude.Maybe LifeCycleState
+  }
+  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' - Lifecycle added to service data and time.
+--
+-- 'elapsedReplicationDuration', 'lifeCycle_elapsedReplicationDuration' - Lifecycle elapsed time and duration.
+--
+-- 'firstByteDateTime', 'lifeCycle_firstByteDateTime' - Lifecycle replication initiation date and time.
+--
+-- 'lastCutover', 'lifeCycle_lastCutover' - Lifecycle last Cutover.
+--
+-- 'lastSeenByServiceDateTime', 'lifeCycle_lastSeenByServiceDateTime' - Lifecycle last seen date and time.
+--
+-- 'lastTest', 'lifeCycle_lastTest' - Lifecycle last Test.
+--
+-- 'state', 'lifeCycle_state' - Lifecycle state.
+newLifeCycle ::
+  LifeCycle
+newLifeCycle =
+  LifeCycle'
+    { addedToServiceDateTime =
+        Prelude.Nothing,
+      elapsedReplicationDuration = Prelude.Nothing,
+      firstByteDateTime = Prelude.Nothing,
+      lastCutover = Prelude.Nothing,
+      lastSeenByServiceDateTime = Prelude.Nothing,
+      lastTest = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | Lifecycle added to service data and time.
+lifeCycle_addedToServiceDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_addedToServiceDateTime = Lens.lens (\LifeCycle' {addedToServiceDateTime} -> addedToServiceDateTime) (\s@LifeCycle' {} a -> s {addedToServiceDateTime = a} :: LifeCycle)
+
+-- | Lifecycle elapsed time and duration.
+lifeCycle_elapsedReplicationDuration :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_elapsedReplicationDuration = Lens.lens (\LifeCycle' {elapsedReplicationDuration} -> elapsedReplicationDuration) (\s@LifeCycle' {} a -> s {elapsedReplicationDuration = a} :: LifeCycle)
+
+-- | Lifecycle replication initiation date and time.
+lifeCycle_firstByteDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_firstByteDateTime = Lens.lens (\LifeCycle' {firstByteDateTime} -> firstByteDateTime) (\s@LifeCycle' {} a -> s {firstByteDateTime = a} :: LifeCycle)
+
+-- | Lifecycle last Cutover.
+lifeCycle_lastCutover :: Lens.Lens' LifeCycle (Prelude.Maybe LifeCycleLastCutover)
+lifeCycle_lastCutover = Lens.lens (\LifeCycle' {lastCutover} -> lastCutover) (\s@LifeCycle' {} a -> s {lastCutover = a} :: LifeCycle)
+
+-- | Lifecycle last seen date and time.
+lifeCycle_lastSeenByServiceDateTime :: Lens.Lens' LifeCycle (Prelude.Maybe Prelude.Text)
+lifeCycle_lastSeenByServiceDateTime = Lens.lens (\LifeCycle' {lastSeenByServiceDateTime} -> lastSeenByServiceDateTime) (\s@LifeCycle' {} a -> s {lastSeenByServiceDateTime = a} :: LifeCycle)
+
+-- | Lifecycle last Test.
+lifeCycle_lastTest :: Lens.Lens' LifeCycle (Prelude.Maybe LifeCycleLastTest)
+lifeCycle_lastTest = Lens.lens (\LifeCycle' {lastTest} -> lastTest) (\s@LifeCycle' {} a -> s {lastTest = a} :: LifeCycle)
+
+-- | Lifecycle state.
+lifeCycle_state :: Lens.Lens' LifeCycle (Prelude.Maybe LifeCycleState)
+lifeCycle_state = Lens.lens (\LifeCycle' {state} -> state) (\s@LifeCycle' {} a -> s {state = 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..:? "lastCutover")
+            Prelude.<*> (x Data..:? "lastSeenByServiceDateTime")
+            Prelude.<*> (x Data..:? "lastTest")
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance Prelude.Hashable LifeCycle where
+  hashWithSalt _salt LifeCycle' {..} =
+    _salt
+      `Prelude.hashWithSalt` addedToServiceDateTime
+      `Prelude.hashWithSalt` elapsedReplicationDuration
+      `Prelude.hashWithSalt` firstByteDateTime
+      `Prelude.hashWithSalt` lastCutover
+      `Prelude.hashWithSalt` lastSeenByServiceDateTime
+      `Prelude.hashWithSalt` lastTest
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData LifeCycle where
+  rnf LifeCycle' {..} =
+    Prelude.rnf addedToServiceDateTime
+      `Prelude.seq` Prelude.rnf elapsedReplicationDuration
+      `Prelude.seq` Prelude.rnf firstByteDateTime
+      `Prelude.seq` Prelude.rnf lastCutover
+      `Prelude.seq` Prelude.rnf lastSeenByServiceDateTime
+      `Prelude.seq` Prelude.rnf lastTest
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastCutover.hs b/gen/Amazonka/MGN/Types/LifeCycleLastCutover.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastCutover.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.MGN.Types.LifeCycleLastCutover
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastCutover where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.LifeCycleLastCutoverFinalized
+import Amazonka.MGN.Types.LifeCycleLastCutoverInitiated
+import Amazonka.MGN.Types.LifeCycleLastCutoverReverted
+import qualified Amazonka.Prelude as Prelude
+
+-- | Lifecycle last Cutover .
+--
+-- /See:/ 'newLifeCycleLastCutover' smart constructor.
+data LifeCycleLastCutover = LifeCycleLastCutover'
+  { -- | Lifecycle Cutover finalized date and time.
+    finalized :: Prelude.Maybe LifeCycleLastCutoverFinalized,
+    -- | Lifecycle last Cutover initiated.
+    initiated :: Prelude.Maybe LifeCycleLastCutoverInitiated,
+    -- | Lifecycle last Cutover reverted.
+    reverted :: Prelude.Maybe LifeCycleLastCutoverReverted
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastCutover' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'finalized', 'lifeCycleLastCutover_finalized' - Lifecycle Cutover finalized date and time.
+--
+-- 'initiated', 'lifeCycleLastCutover_initiated' - Lifecycle last Cutover initiated.
+--
+-- 'reverted', 'lifeCycleLastCutover_reverted' - Lifecycle last Cutover reverted.
+newLifeCycleLastCutover ::
+  LifeCycleLastCutover
+newLifeCycleLastCutover =
+  LifeCycleLastCutover'
+    { finalized = Prelude.Nothing,
+      initiated = Prelude.Nothing,
+      reverted = Prelude.Nothing
+    }
+
+-- | Lifecycle Cutover finalized date and time.
+lifeCycleLastCutover_finalized :: Lens.Lens' LifeCycleLastCutover (Prelude.Maybe LifeCycleLastCutoverFinalized)
+lifeCycleLastCutover_finalized = Lens.lens (\LifeCycleLastCutover' {finalized} -> finalized) (\s@LifeCycleLastCutover' {} a -> s {finalized = a} :: LifeCycleLastCutover)
+
+-- | Lifecycle last Cutover initiated.
+lifeCycleLastCutover_initiated :: Lens.Lens' LifeCycleLastCutover (Prelude.Maybe LifeCycleLastCutoverInitiated)
+lifeCycleLastCutover_initiated = Lens.lens (\LifeCycleLastCutover' {initiated} -> initiated) (\s@LifeCycleLastCutover' {} a -> s {initiated = a} :: LifeCycleLastCutover)
+
+-- | Lifecycle last Cutover reverted.
+lifeCycleLastCutover_reverted :: Lens.Lens' LifeCycleLastCutover (Prelude.Maybe LifeCycleLastCutoverReverted)
+lifeCycleLastCutover_reverted = Lens.lens (\LifeCycleLastCutover' {reverted} -> reverted) (\s@LifeCycleLastCutover' {} a -> s {reverted = a} :: LifeCycleLastCutover)
+
+instance Data.FromJSON LifeCycleLastCutover where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastCutover"
+      ( \x ->
+          LifeCycleLastCutover'
+            Prelude.<$> (x Data..:? "finalized")
+            Prelude.<*> (x Data..:? "initiated")
+            Prelude.<*> (x Data..:? "reverted")
+      )
+
+instance Prelude.Hashable LifeCycleLastCutover where
+  hashWithSalt _salt LifeCycleLastCutover' {..} =
+    _salt
+      `Prelude.hashWithSalt` finalized
+      `Prelude.hashWithSalt` initiated
+      `Prelude.hashWithSalt` reverted
+
+instance Prelude.NFData LifeCycleLastCutover where
+  rnf LifeCycleLastCutover' {..} =
+    Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf initiated
+      `Prelude.seq` Prelude.rnf reverted
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastCutoverFinalized.hs b/gen/Amazonka/MGN/Types/LifeCycleLastCutoverFinalized.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastCutoverFinalized.hs
@@ -0,0 +1,75 @@
+{-# 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.MGN.Types.LifeCycleLastCutoverFinalized
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastCutoverFinalized 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
+
+-- | Lifecycle Cutover finalized
+--
+-- /See:/ 'newLifeCycleLastCutoverFinalized' smart constructor.
+data LifeCycleLastCutoverFinalized = LifeCycleLastCutoverFinalized'
+  { -- | Lifecycle Cutover finalized date and time.
+    apiCallDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastCutoverFinalized' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lifeCycleLastCutoverFinalized_apiCallDateTime' - Lifecycle Cutover finalized date and time.
+newLifeCycleLastCutoverFinalized ::
+  LifeCycleLastCutoverFinalized
+newLifeCycleLastCutoverFinalized =
+  LifeCycleLastCutoverFinalized'
+    { apiCallDateTime =
+        Prelude.Nothing
+    }
+
+-- | Lifecycle Cutover finalized date and time.
+lifeCycleLastCutoverFinalized_apiCallDateTime :: Lens.Lens' LifeCycleLastCutoverFinalized (Prelude.Maybe Prelude.Text)
+lifeCycleLastCutoverFinalized_apiCallDateTime = Lens.lens (\LifeCycleLastCutoverFinalized' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastCutoverFinalized' {} a -> s {apiCallDateTime = a} :: LifeCycleLastCutoverFinalized)
+
+instance Data.FromJSON LifeCycleLastCutoverFinalized where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastCutoverFinalized"
+      ( \x ->
+          LifeCycleLastCutoverFinalized'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+      )
+
+instance
+  Prelude.Hashable
+    LifeCycleLastCutoverFinalized
+  where
+  hashWithSalt _salt LifeCycleLastCutoverFinalized' {..} =
+    _salt `Prelude.hashWithSalt` apiCallDateTime
+
+instance Prelude.NFData LifeCycleLastCutoverFinalized where
+  rnf LifeCycleLastCutoverFinalized' {..} =
+    Prelude.rnf apiCallDateTime
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastCutoverInitiated.hs b/gen/Amazonka/MGN/Types/LifeCycleLastCutoverInitiated.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastCutoverInitiated.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.LifeCycleLastCutoverInitiated
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastCutoverInitiated 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
+
+-- | Lifecycle last Cutover initiated.
+--
+-- /See:/ 'newLifeCycleLastCutoverInitiated' smart constructor.
+data LifeCycleLastCutoverInitiated = LifeCycleLastCutoverInitiated'
+  { apiCallDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Lifecycle last Cutover initiated by Job ID.
+    jobID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastCutoverInitiated' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lifeCycleLastCutoverInitiated_apiCallDateTime' -
+--
+-- 'jobID', 'lifeCycleLastCutoverInitiated_jobID' - Lifecycle last Cutover initiated by Job ID.
+newLifeCycleLastCutoverInitiated ::
+  LifeCycleLastCutoverInitiated
+newLifeCycleLastCutoverInitiated =
+  LifeCycleLastCutoverInitiated'
+    { apiCallDateTime =
+        Prelude.Nothing,
+      jobID = Prelude.Nothing
+    }
+
+lifeCycleLastCutoverInitiated_apiCallDateTime :: Lens.Lens' LifeCycleLastCutoverInitiated (Prelude.Maybe Prelude.Text)
+lifeCycleLastCutoverInitiated_apiCallDateTime = Lens.lens (\LifeCycleLastCutoverInitiated' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastCutoverInitiated' {} a -> s {apiCallDateTime = a} :: LifeCycleLastCutoverInitiated)
+
+-- | Lifecycle last Cutover initiated by Job ID.
+lifeCycleLastCutoverInitiated_jobID :: Lens.Lens' LifeCycleLastCutoverInitiated (Prelude.Maybe Prelude.Text)
+lifeCycleLastCutoverInitiated_jobID = Lens.lens (\LifeCycleLastCutoverInitiated' {jobID} -> jobID) (\s@LifeCycleLastCutoverInitiated' {} a -> s {jobID = a} :: LifeCycleLastCutoverInitiated)
+
+instance Data.FromJSON LifeCycleLastCutoverInitiated where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastCutoverInitiated"
+      ( \x ->
+          LifeCycleLastCutoverInitiated'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+            Prelude.<*> (x Data..:? "jobID")
+      )
+
+instance
+  Prelude.Hashable
+    LifeCycleLastCutoverInitiated
+  where
+  hashWithSalt _salt LifeCycleLastCutoverInitiated' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiCallDateTime
+      `Prelude.hashWithSalt` jobID
+
+instance Prelude.NFData LifeCycleLastCutoverInitiated where
+  rnf LifeCycleLastCutoverInitiated' {..} =
+    Prelude.rnf apiCallDateTime
+      `Prelude.seq` Prelude.rnf jobID
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastCutoverReverted.hs b/gen/Amazonka/MGN/Types/LifeCycleLastCutoverReverted.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastCutoverReverted.hs
@@ -0,0 +1,75 @@
+{-# 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.MGN.Types.LifeCycleLastCutoverReverted
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastCutoverReverted 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
+
+-- | Lifecycle last Cutover reverted.
+--
+-- /See:/ 'newLifeCycleLastCutoverReverted' smart constructor.
+data LifeCycleLastCutoverReverted = LifeCycleLastCutoverReverted'
+  { -- | Lifecycle last Cutover reverted API call date time.
+    apiCallDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastCutoverReverted' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lifeCycleLastCutoverReverted_apiCallDateTime' - Lifecycle last Cutover reverted API call date time.
+newLifeCycleLastCutoverReverted ::
+  LifeCycleLastCutoverReverted
+newLifeCycleLastCutoverReverted =
+  LifeCycleLastCutoverReverted'
+    { apiCallDateTime =
+        Prelude.Nothing
+    }
+
+-- | Lifecycle last Cutover reverted API call date time.
+lifeCycleLastCutoverReverted_apiCallDateTime :: Lens.Lens' LifeCycleLastCutoverReverted (Prelude.Maybe Prelude.Text)
+lifeCycleLastCutoverReverted_apiCallDateTime = Lens.lens (\LifeCycleLastCutoverReverted' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastCutoverReverted' {} a -> s {apiCallDateTime = a} :: LifeCycleLastCutoverReverted)
+
+instance Data.FromJSON LifeCycleLastCutoverReverted where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastCutoverReverted"
+      ( \x ->
+          LifeCycleLastCutoverReverted'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+      )
+
+instance
+  Prelude.Hashable
+    LifeCycleLastCutoverReverted
+  where
+  hashWithSalt _salt LifeCycleLastCutoverReverted' {..} =
+    _salt `Prelude.hashWithSalt` apiCallDateTime
+
+instance Prelude.NFData LifeCycleLastCutoverReverted where
+  rnf LifeCycleLastCutoverReverted' {..} =
+    Prelude.rnf apiCallDateTime
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastTest.hs b/gen/Amazonka/MGN/Types/LifeCycleLastTest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastTest.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.MGN.Types.LifeCycleLastTest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastTest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.LifeCycleLastTestFinalized
+import Amazonka.MGN.Types.LifeCycleLastTestInitiated
+import Amazonka.MGN.Types.LifeCycleLastTestReverted
+import qualified Amazonka.Prelude as Prelude
+
+-- | Lifecycle last Test.
+--
+-- /See:/ 'newLifeCycleLastTest' smart constructor.
+data LifeCycleLastTest = LifeCycleLastTest'
+  { -- | Lifecycle last Test finalized.
+    finalized :: Prelude.Maybe LifeCycleLastTestFinalized,
+    -- | Lifecycle last Test initiated.
+    initiated :: Prelude.Maybe LifeCycleLastTestInitiated,
+    -- | Lifecycle last Test reverted.
+    reverted :: Prelude.Maybe LifeCycleLastTestReverted
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastTest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'finalized', 'lifeCycleLastTest_finalized' - Lifecycle last Test finalized.
+--
+-- 'initiated', 'lifeCycleLastTest_initiated' - Lifecycle last Test initiated.
+--
+-- 'reverted', 'lifeCycleLastTest_reverted' - Lifecycle last Test reverted.
+newLifeCycleLastTest ::
+  LifeCycleLastTest
+newLifeCycleLastTest =
+  LifeCycleLastTest'
+    { finalized = Prelude.Nothing,
+      initiated = Prelude.Nothing,
+      reverted = Prelude.Nothing
+    }
+
+-- | Lifecycle last Test finalized.
+lifeCycleLastTest_finalized :: Lens.Lens' LifeCycleLastTest (Prelude.Maybe LifeCycleLastTestFinalized)
+lifeCycleLastTest_finalized = Lens.lens (\LifeCycleLastTest' {finalized} -> finalized) (\s@LifeCycleLastTest' {} a -> s {finalized = a} :: LifeCycleLastTest)
+
+-- | Lifecycle last Test initiated.
+lifeCycleLastTest_initiated :: Lens.Lens' LifeCycleLastTest (Prelude.Maybe LifeCycleLastTestInitiated)
+lifeCycleLastTest_initiated = Lens.lens (\LifeCycleLastTest' {initiated} -> initiated) (\s@LifeCycleLastTest' {} a -> s {initiated = a} :: LifeCycleLastTest)
+
+-- | Lifecycle last Test reverted.
+lifeCycleLastTest_reverted :: Lens.Lens' LifeCycleLastTest (Prelude.Maybe LifeCycleLastTestReverted)
+lifeCycleLastTest_reverted = Lens.lens (\LifeCycleLastTest' {reverted} -> reverted) (\s@LifeCycleLastTest' {} a -> s {reverted = a} :: LifeCycleLastTest)
+
+instance Data.FromJSON LifeCycleLastTest where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastTest"
+      ( \x ->
+          LifeCycleLastTest'
+            Prelude.<$> (x Data..:? "finalized")
+            Prelude.<*> (x Data..:? "initiated")
+            Prelude.<*> (x Data..:? "reverted")
+      )
+
+instance Prelude.Hashable LifeCycleLastTest where
+  hashWithSalt _salt LifeCycleLastTest' {..} =
+    _salt
+      `Prelude.hashWithSalt` finalized
+      `Prelude.hashWithSalt` initiated
+      `Prelude.hashWithSalt` reverted
+
+instance Prelude.NFData LifeCycleLastTest where
+  rnf LifeCycleLastTest' {..} =
+    Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf initiated
+      `Prelude.seq` Prelude.rnf reverted
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastTestFinalized.hs b/gen/Amazonka/MGN/Types/LifeCycleLastTestFinalized.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastTestFinalized.hs
@@ -0,0 +1,72 @@
+{-# 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.MGN.Types.LifeCycleLastTestFinalized
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastTestFinalized 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
+
+-- | Lifecycle last Test finalized.
+--
+-- /See:/ 'newLifeCycleLastTestFinalized' smart constructor.
+data LifeCycleLastTestFinalized = LifeCycleLastTestFinalized'
+  { -- | Lifecycle Test failed API call date and time.
+    apiCallDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastTestFinalized' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lifeCycleLastTestFinalized_apiCallDateTime' - Lifecycle Test failed API call date and time.
+newLifeCycleLastTestFinalized ::
+  LifeCycleLastTestFinalized
+newLifeCycleLastTestFinalized =
+  LifeCycleLastTestFinalized'
+    { apiCallDateTime =
+        Prelude.Nothing
+    }
+
+-- | Lifecycle Test failed API call date and time.
+lifeCycleLastTestFinalized_apiCallDateTime :: Lens.Lens' LifeCycleLastTestFinalized (Prelude.Maybe Prelude.Text)
+lifeCycleLastTestFinalized_apiCallDateTime = Lens.lens (\LifeCycleLastTestFinalized' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastTestFinalized' {} a -> s {apiCallDateTime = a} :: LifeCycleLastTestFinalized)
+
+instance Data.FromJSON LifeCycleLastTestFinalized where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastTestFinalized"
+      ( \x ->
+          LifeCycleLastTestFinalized'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+      )
+
+instance Prelude.Hashable LifeCycleLastTestFinalized where
+  hashWithSalt _salt LifeCycleLastTestFinalized' {..} =
+    _salt `Prelude.hashWithSalt` apiCallDateTime
+
+instance Prelude.NFData LifeCycleLastTestFinalized where
+  rnf LifeCycleLastTestFinalized' {..} =
+    Prelude.rnf apiCallDateTime
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastTestInitiated.hs b/gen/Amazonka/MGN/Types/LifeCycleLastTestInitiated.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastTestInitiated.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.MGN.Types.LifeCycleLastTestInitiated
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastTestInitiated 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
+
+-- | Lifecycle last Test initiated.
+--
+-- /See:/ 'newLifeCycleLastTestInitiated' smart constructor.
+data LifeCycleLastTestInitiated = LifeCycleLastTestInitiated'
+  { -- | Lifecycle last Test initiated API call date and time.
+    apiCallDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Lifecycle last Test initiated Job ID.
+    jobID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastTestInitiated' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lifeCycleLastTestInitiated_apiCallDateTime' - Lifecycle last Test initiated API call date and time.
+--
+-- 'jobID', 'lifeCycleLastTestInitiated_jobID' - Lifecycle last Test initiated Job ID.
+newLifeCycleLastTestInitiated ::
+  LifeCycleLastTestInitiated
+newLifeCycleLastTestInitiated =
+  LifeCycleLastTestInitiated'
+    { apiCallDateTime =
+        Prelude.Nothing,
+      jobID = Prelude.Nothing
+    }
+
+-- | Lifecycle last Test initiated API call date and time.
+lifeCycleLastTestInitiated_apiCallDateTime :: Lens.Lens' LifeCycleLastTestInitiated (Prelude.Maybe Prelude.Text)
+lifeCycleLastTestInitiated_apiCallDateTime = Lens.lens (\LifeCycleLastTestInitiated' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastTestInitiated' {} a -> s {apiCallDateTime = a} :: LifeCycleLastTestInitiated)
+
+-- | Lifecycle last Test initiated Job ID.
+lifeCycleLastTestInitiated_jobID :: Lens.Lens' LifeCycleLastTestInitiated (Prelude.Maybe Prelude.Text)
+lifeCycleLastTestInitiated_jobID = Lens.lens (\LifeCycleLastTestInitiated' {jobID} -> jobID) (\s@LifeCycleLastTestInitiated' {} a -> s {jobID = a} :: LifeCycleLastTestInitiated)
+
+instance Data.FromJSON LifeCycleLastTestInitiated where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastTestInitiated"
+      ( \x ->
+          LifeCycleLastTestInitiated'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+            Prelude.<*> (x Data..:? "jobID")
+      )
+
+instance Prelude.Hashable LifeCycleLastTestInitiated where
+  hashWithSalt _salt LifeCycleLastTestInitiated' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiCallDateTime
+      `Prelude.hashWithSalt` jobID
+
+instance Prelude.NFData LifeCycleLastTestInitiated where
+  rnf LifeCycleLastTestInitiated' {..} =
+    Prelude.rnf apiCallDateTime
+      `Prelude.seq` Prelude.rnf jobID
diff --git a/gen/Amazonka/MGN/Types/LifeCycleLastTestReverted.hs b/gen/Amazonka/MGN/Types/LifeCycleLastTestReverted.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleLastTestReverted.hs
@@ -0,0 +1,72 @@
+{-# 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.MGN.Types.LifeCycleLastTestReverted
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleLastTestReverted 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
+
+-- | Lifecycle last Test reverted.
+--
+-- /See:/ 'newLifeCycleLastTestReverted' smart constructor.
+data LifeCycleLastTestReverted = LifeCycleLastTestReverted'
+  { -- | Lifecycle last Test reverted API call date and time.
+    apiCallDateTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LifeCycleLastTestReverted' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lifeCycleLastTestReverted_apiCallDateTime' - Lifecycle last Test reverted API call date and time.
+newLifeCycleLastTestReverted ::
+  LifeCycleLastTestReverted
+newLifeCycleLastTestReverted =
+  LifeCycleLastTestReverted'
+    { apiCallDateTime =
+        Prelude.Nothing
+    }
+
+-- | Lifecycle last Test reverted API call date and time.
+lifeCycleLastTestReverted_apiCallDateTime :: Lens.Lens' LifeCycleLastTestReverted (Prelude.Maybe Prelude.Text)
+lifeCycleLastTestReverted_apiCallDateTime = Lens.lens (\LifeCycleLastTestReverted' {apiCallDateTime} -> apiCallDateTime) (\s@LifeCycleLastTestReverted' {} a -> s {apiCallDateTime = a} :: LifeCycleLastTestReverted)
+
+instance Data.FromJSON LifeCycleLastTestReverted where
+  parseJSON =
+    Data.withObject
+      "LifeCycleLastTestReverted"
+      ( \x ->
+          LifeCycleLastTestReverted'
+            Prelude.<$> (x Data..:? "apiCallDateTime")
+      )
+
+instance Prelude.Hashable LifeCycleLastTestReverted where
+  hashWithSalt _salt LifeCycleLastTestReverted' {..} =
+    _salt `Prelude.hashWithSalt` apiCallDateTime
+
+instance Prelude.NFData LifeCycleLastTestReverted where
+  rnf LifeCycleLastTestReverted' {..} =
+    Prelude.rnf apiCallDateTime
diff --git a/gen/Amazonka/MGN/Types/LifeCycleState.hs b/gen/Amazonka/MGN/Types/LifeCycleState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/LifeCycleState.hs
@@ -0,0 +1,106 @@
+{-# 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.MGN.Types.LifeCycleState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.LifeCycleState
+  ( LifeCycleState
+      ( ..,
+        LifeCycleState_CUTOVER,
+        LifeCycleState_CUTTING_OVER,
+        LifeCycleState_DISCONNECTED,
+        LifeCycleState_DISCOVERED,
+        LifeCycleState_NOT_READY,
+        LifeCycleState_READY_FOR_CUTOVER,
+        LifeCycleState_READY_FOR_TEST,
+        LifeCycleState_STOPPED,
+        LifeCycleState_TESTING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LifeCycleState = LifeCycleState'
+  { fromLifeCycleState ::
+      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 LifeCycleState_CUTOVER :: LifeCycleState
+pattern LifeCycleState_CUTOVER = LifeCycleState' "CUTOVER"
+
+pattern LifeCycleState_CUTTING_OVER :: LifeCycleState
+pattern LifeCycleState_CUTTING_OVER = LifeCycleState' "CUTTING_OVER"
+
+pattern LifeCycleState_DISCONNECTED :: LifeCycleState
+pattern LifeCycleState_DISCONNECTED = LifeCycleState' "DISCONNECTED"
+
+pattern LifeCycleState_DISCOVERED :: LifeCycleState
+pattern LifeCycleState_DISCOVERED = LifeCycleState' "DISCOVERED"
+
+pattern LifeCycleState_NOT_READY :: LifeCycleState
+pattern LifeCycleState_NOT_READY = LifeCycleState' "NOT_READY"
+
+pattern LifeCycleState_READY_FOR_CUTOVER :: LifeCycleState
+pattern LifeCycleState_READY_FOR_CUTOVER = LifeCycleState' "READY_FOR_CUTOVER"
+
+pattern LifeCycleState_READY_FOR_TEST :: LifeCycleState
+pattern LifeCycleState_READY_FOR_TEST = LifeCycleState' "READY_FOR_TEST"
+
+pattern LifeCycleState_STOPPED :: LifeCycleState
+pattern LifeCycleState_STOPPED = LifeCycleState' "STOPPED"
+
+pattern LifeCycleState_TESTING :: LifeCycleState
+pattern LifeCycleState_TESTING = LifeCycleState' "TESTING"
+
+{-# COMPLETE
+  LifeCycleState_CUTOVER,
+  LifeCycleState_CUTTING_OVER,
+  LifeCycleState_DISCONNECTED,
+  LifeCycleState_DISCOVERED,
+  LifeCycleState_NOT_READY,
+  LifeCycleState_READY_FOR_CUTOVER,
+  LifeCycleState_READY_FOR_TEST,
+  LifeCycleState_STOPPED,
+  LifeCycleState_TESTING,
+  LifeCycleState'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/ListApplicationsRequestFilters.hs b/gen/Amazonka/MGN/Types/ListApplicationsRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ListApplicationsRequestFilters.hs
@@ -0,0 +1,105 @@
+{-# 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.MGN.Types.ListApplicationsRequestFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ListApplicationsRequestFilters 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
+
+-- | Applications list filters.
+--
+-- /See:/ 'newListApplicationsRequestFilters' smart constructor.
+data ListApplicationsRequestFilters = ListApplicationsRequestFilters'
+  { -- | Filter applications list by application ID.
+    applicationIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Filter applications list by archival status.
+    isArchived :: Prelude.Maybe Prelude.Bool,
+    -- | Filter applications list by wave ID.
+    waveIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplicationsRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationIDs', 'listApplicationsRequestFilters_applicationIDs' - Filter applications list by application ID.
+--
+-- 'isArchived', 'listApplicationsRequestFilters_isArchived' - Filter applications list by archival status.
+--
+-- 'waveIDs', 'listApplicationsRequestFilters_waveIDs' - Filter applications list by wave ID.
+newListApplicationsRequestFilters ::
+  ListApplicationsRequestFilters
+newListApplicationsRequestFilters =
+  ListApplicationsRequestFilters'
+    { applicationIDs =
+        Prelude.Nothing,
+      isArchived = Prelude.Nothing,
+      waveIDs = Prelude.Nothing
+    }
+
+-- | Filter applications list by application ID.
+listApplicationsRequestFilters_applicationIDs :: Lens.Lens' ListApplicationsRequestFilters (Prelude.Maybe [Prelude.Text])
+listApplicationsRequestFilters_applicationIDs = Lens.lens (\ListApplicationsRequestFilters' {applicationIDs} -> applicationIDs) (\s@ListApplicationsRequestFilters' {} a -> s {applicationIDs = a} :: ListApplicationsRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | Filter applications list by archival status.
+listApplicationsRequestFilters_isArchived :: Lens.Lens' ListApplicationsRequestFilters (Prelude.Maybe Prelude.Bool)
+listApplicationsRequestFilters_isArchived = Lens.lens (\ListApplicationsRequestFilters' {isArchived} -> isArchived) (\s@ListApplicationsRequestFilters' {} a -> s {isArchived = a} :: ListApplicationsRequestFilters)
+
+-- | Filter applications list by wave ID.
+listApplicationsRequestFilters_waveIDs :: Lens.Lens' ListApplicationsRequestFilters (Prelude.Maybe [Prelude.Text])
+listApplicationsRequestFilters_waveIDs = Lens.lens (\ListApplicationsRequestFilters' {waveIDs} -> waveIDs) (\s@ListApplicationsRequestFilters' {} a -> s {waveIDs = a} :: ListApplicationsRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    ListApplicationsRequestFilters
+  where
+  hashWithSalt
+    _salt
+    ListApplicationsRequestFilters' {..} =
+      _salt
+        `Prelude.hashWithSalt` applicationIDs
+        `Prelude.hashWithSalt` isArchived
+        `Prelude.hashWithSalt` waveIDs
+
+instance
+  Prelude.NFData
+    ListApplicationsRequestFilters
+  where
+  rnf ListApplicationsRequestFilters' {..} =
+    Prelude.rnf applicationIDs
+      `Prelude.seq` Prelude.rnf isArchived
+      `Prelude.seq` Prelude.rnf waveIDs
+
+instance Data.ToJSON ListApplicationsRequestFilters where
+  toJSON ListApplicationsRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationIDs" Data..=)
+              Prelude.<$> applicationIDs,
+            ("isArchived" Data..=) Prelude.<$> isArchived,
+            ("waveIDs" Data..=) Prelude.<$> waveIDs
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/ListWavesRequestFilters.hs b/gen/Amazonka/MGN/Types/ListWavesRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ListWavesRequestFilters.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.MGN.Types.ListWavesRequestFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ListWavesRequestFilters 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
+
+-- | Waves list filters.
+--
+-- /See:/ 'newListWavesRequestFilters' smart constructor.
+data ListWavesRequestFilters = ListWavesRequestFilters'
+  { -- | Filter waves list by archival status.
+    isArchived :: Prelude.Maybe Prelude.Bool,
+    -- | Filter waves list by wave ID.
+    waveIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWavesRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isArchived', 'listWavesRequestFilters_isArchived' - Filter waves list by archival status.
+--
+-- 'waveIDs', 'listWavesRequestFilters_waveIDs' - Filter waves list by wave ID.
+newListWavesRequestFilters ::
+  ListWavesRequestFilters
+newListWavesRequestFilters =
+  ListWavesRequestFilters'
+    { isArchived =
+        Prelude.Nothing,
+      waveIDs = Prelude.Nothing
+    }
+
+-- | Filter waves list by archival status.
+listWavesRequestFilters_isArchived :: Lens.Lens' ListWavesRequestFilters (Prelude.Maybe Prelude.Bool)
+listWavesRequestFilters_isArchived = Lens.lens (\ListWavesRequestFilters' {isArchived} -> isArchived) (\s@ListWavesRequestFilters' {} a -> s {isArchived = a} :: ListWavesRequestFilters)
+
+-- | Filter waves list by wave ID.
+listWavesRequestFilters_waveIDs :: Lens.Lens' ListWavesRequestFilters (Prelude.Maybe [Prelude.Text])
+listWavesRequestFilters_waveIDs = Lens.lens (\ListWavesRequestFilters' {waveIDs} -> waveIDs) (\s@ListWavesRequestFilters' {} a -> s {waveIDs = a} :: ListWavesRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable ListWavesRequestFilters where
+  hashWithSalt _salt ListWavesRequestFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` isArchived
+      `Prelude.hashWithSalt` waveIDs
+
+instance Prelude.NFData ListWavesRequestFilters where
+  rnf ListWavesRequestFilters' {..} =
+    Prelude.rnf isArchived
+      `Prelude.seq` Prelude.rnf waveIDs
+
+instance Data.ToJSON ListWavesRequestFilters where
+  toJSON ListWavesRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("isArchived" Data..=) Prelude.<$> isArchived,
+            ("waveIDs" Data..=) Prelude.<$> waveIDs
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/NetworkInterface.hs b/gen/Amazonka/MGN/Types/NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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],
+    -- | Network interface primary IP.
+    isPrimary :: Prelude.Maybe Prelude.Bool,
+    -- | Network interface Mac address.
+    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' - Network interface primary IP.
+--
+-- 'macAddress', 'networkInterface_macAddress' - Network interface Mac address.
+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
+
+-- | Network interface primary IP.
+networkInterface_isPrimary :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Bool)
+networkInterface_isPrimary = Lens.lens (\NetworkInterface' {isPrimary} -> isPrimary) (\s@NetworkInterface' {} a -> s {isPrimary = a} :: NetworkInterface)
+
+-- | Network interface Mac address.
+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/MGN/Types/OS.hs b/gen/Amazonka/MGN/Types/OS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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'
+  { -- | OS full string.
+    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' - OS full string.
+newOS ::
+  OS
+newOS = OS' {fullString = Prelude.Nothing}
+
+-- | OS full string.
+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/MGN/Types/ParticipatingServer.hs b/gen/Amazonka/MGN/Types/ParticipatingServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ParticipatingServer.hs
@@ -0,0 +1,113 @@
+{-# 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.MGN.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.MGN.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.MGN.Types.LaunchStatus
+import Amazonka.MGN.Types.PostLaunchActionsStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Server participating in Job.
+--
+-- /See:/ 'newParticipatingServer' smart constructor.
+data ParticipatingServer = ParticipatingServer'
+  { -- | Participating server launch status.
+    launchStatus :: Prelude.Maybe LaunchStatus,
+    -- | Participating server\'s launched ec2 instance ID.
+    launchedEc2InstanceID :: Prelude.Maybe Prelude.Text,
+    -- | Participating server\'s Post Launch Actions Status.
+    postLaunchActionsStatus :: Prelude.Maybe PostLaunchActionsStatus,
+    -- | Participating server Source Server ID.
+    sourceServerID :: 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' - Participating server launch status.
+--
+-- 'launchedEc2InstanceID', 'participatingServer_launchedEc2InstanceID' - Participating server\'s launched ec2 instance ID.
+--
+-- 'postLaunchActionsStatus', 'participatingServer_postLaunchActionsStatus' - Participating server\'s Post Launch Actions Status.
+--
+-- 'sourceServerID', 'participatingServer_sourceServerID' - Participating server Source Server ID.
+newParticipatingServer ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  ParticipatingServer
+newParticipatingServer pSourceServerID_ =
+  ParticipatingServer'
+    { launchStatus =
+        Prelude.Nothing,
+      launchedEc2InstanceID = Prelude.Nothing,
+      postLaunchActionsStatus = Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | Participating server launch status.
+participatingServer_launchStatus :: Lens.Lens' ParticipatingServer (Prelude.Maybe LaunchStatus)
+participatingServer_launchStatus = Lens.lens (\ParticipatingServer' {launchStatus} -> launchStatus) (\s@ParticipatingServer' {} a -> s {launchStatus = a} :: ParticipatingServer)
+
+-- | Participating server\'s launched ec2 instance ID.
+participatingServer_launchedEc2InstanceID :: Lens.Lens' ParticipatingServer (Prelude.Maybe Prelude.Text)
+participatingServer_launchedEc2InstanceID = Lens.lens (\ParticipatingServer' {launchedEc2InstanceID} -> launchedEc2InstanceID) (\s@ParticipatingServer' {} a -> s {launchedEc2InstanceID = a} :: ParticipatingServer)
+
+-- | Participating server\'s Post Launch Actions Status.
+participatingServer_postLaunchActionsStatus :: Lens.Lens' ParticipatingServer (Prelude.Maybe PostLaunchActionsStatus)
+participatingServer_postLaunchActionsStatus = Lens.lens (\ParticipatingServer' {postLaunchActionsStatus} -> postLaunchActionsStatus) (\s@ParticipatingServer' {} a -> s {postLaunchActionsStatus = a} :: ParticipatingServer)
+
+-- | Participating server Source Server ID.
+participatingServer_sourceServerID :: Lens.Lens' ParticipatingServer 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..:? "launchedEc2InstanceID")
+            Prelude.<*> (x Data..:? "postLaunchActionsStatus")
+            Prelude.<*> (x Data..: "sourceServerID")
+      )
+
+instance Prelude.Hashable ParticipatingServer where
+  hashWithSalt _salt ParticipatingServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchStatus
+      `Prelude.hashWithSalt` launchedEc2InstanceID
+      `Prelude.hashWithSalt` postLaunchActionsStatus
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData ParticipatingServer where
+  rnf ParticipatingServer' {..} =
+    Prelude.rnf launchStatus
+      `Prelude.seq` Prelude.rnf launchedEc2InstanceID
+      `Prelude.seq` Prelude.rnf postLaunchActionsStatus
+      `Prelude.seq` Prelude.rnf sourceServerID
diff --git a/gen/Amazonka/MGN/Types/PostLaunchActionExecutionStatus.hs b/gen/Amazonka/MGN/Types/PostLaunchActionExecutionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/PostLaunchActionExecutionStatus.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.MGN.Types.PostLaunchActionExecutionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.PostLaunchActionExecutionStatus
+  ( PostLaunchActionExecutionStatus
+      ( ..,
+        PostLaunchActionExecutionStatus_FAILED,
+        PostLaunchActionExecutionStatus_IN_PROGRESS,
+        PostLaunchActionExecutionStatus_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PostLaunchActionExecutionStatus = PostLaunchActionExecutionStatus'
+  { fromPostLaunchActionExecutionStatus ::
+      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 PostLaunchActionExecutionStatus_FAILED :: PostLaunchActionExecutionStatus
+pattern PostLaunchActionExecutionStatus_FAILED = PostLaunchActionExecutionStatus' "FAILED"
+
+pattern PostLaunchActionExecutionStatus_IN_PROGRESS :: PostLaunchActionExecutionStatus
+pattern PostLaunchActionExecutionStatus_IN_PROGRESS = PostLaunchActionExecutionStatus' "IN_PROGRESS"
+
+pattern PostLaunchActionExecutionStatus_SUCCESS :: PostLaunchActionExecutionStatus
+pattern PostLaunchActionExecutionStatus_SUCCESS = PostLaunchActionExecutionStatus' "SUCCESS"
+
+{-# COMPLETE
+  PostLaunchActionExecutionStatus_FAILED,
+  PostLaunchActionExecutionStatus_IN_PROGRESS,
+  PostLaunchActionExecutionStatus_SUCCESS,
+  PostLaunchActionExecutionStatus'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/PostLaunchActions.hs b/gen/Amazonka/MGN/Types/PostLaunchActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/PostLaunchActions.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.MGN.Types.PostLaunchActions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.PostLaunchActions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.PostLaunchActionsDeploymentType
+import Amazonka.MGN.Types.SsmDocument
+import qualified Amazonka.Prelude as Prelude
+
+-- | Post Launch Actions to executed on the Test or Cutover instance.
+--
+-- /See:/ 'newPostLaunchActions' smart constructor.
+data PostLaunchActions = PostLaunchActions'
+  { -- | AWS Systems Manager Command\'s CloudWatch log group name.
+    cloudWatchLogGroupName :: Prelude.Maybe Prelude.Text,
+    -- | Deployment type in which AWS Systems Manager Documents will be executed.
+    deployment :: Prelude.Maybe PostLaunchActionsDeploymentType,
+    -- | AWS Systems Manager Command\'s logs S3 log bucket.
+    s3LogBucket :: Prelude.Maybe Prelude.Text,
+    -- | AWS Systems Manager Command\'s logs S3 output key prefix.
+    s3OutputKeyPrefix :: Prelude.Maybe Prelude.Text,
+    -- | AWS Systems Manager Documents.
+    ssmDocuments :: Prelude.Maybe [SsmDocument]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PostLaunchActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogGroupName', 'postLaunchActions_cloudWatchLogGroupName' - AWS Systems Manager Command\'s CloudWatch log group name.
+--
+-- 'deployment', 'postLaunchActions_deployment' - Deployment type in which AWS Systems Manager Documents will be executed.
+--
+-- 's3LogBucket', 'postLaunchActions_s3LogBucket' - AWS Systems Manager Command\'s logs S3 log bucket.
+--
+-- 's3OutputKeyPrefix', 'postLaunchActions_s3OutputKeyPrefix' - AWS Systems Manager Command\'s logs S3 output key prefix.
+--
+-- 'ssmDocuments', 'postLaunchActions_ssmDocuments' - AWS Systems Manager Documents.
+newPostLaunchActions ::
+  PostLaunchActions
+newPostLaunchActions =
+  PostLaunchActions'
+    { cloudWatchLogGroupName =
+        Prelude.Nothing,
+      deployment = Prelude.Nothing,
+      s3LogBucket = Prelude.Nothing,
+      s3OutputKeyPrefix = Prelude.Nothing,
+      ssmDocuments = Prelude.Nothing
+    }
+
+-- | AWS Systems Manager Command\'s CloudWatch log group name.
+postLaunchActions_cloudWatchLogGroupName :: Lens.Lens' PostLaunchActions (Prelude.Maybe Prelude.Text)
+postLaunchActions_cloudWatchLogGroupName = Lens.lens (\PostLaunchActions' {cloudWatchLogGroupName} -> cloudWatchLogGroupName) (\s@PostLaunchActions' {} a -> s {cloudWatchLogGroupName = a} :: PostLaunchActions)
+
+-- | Deployment type in which AWS Systems Manager Documents will be executed.
+postLaunchActions_deployment :: Lens.Lens' PostLaunchActions (Prelude.Maybe PostLaunchActionsDeploymentType)
+postLaunchActions_deployment = Lens.lens (\PostLaunchActions' {deployment} -> deployment) (\s@PostLaunchActions' {} a -> s {deployment = a} :: PostLaunchActions)
+
+-- | AWS Systems Manager Command\'s logs S3 log bucket.
+postLaunchActions_s3LogBucket :: Lens.Lens' PostLaunchActions (Prelude.Maybe Prelude.Text)
+postLaunchActions_s3LogBucket = Lens.lens (\PostLaunchActions' {s3LogBucket} -> s3LogBucket) (\s@PostLaunchActions' {} a -> s {s3LogBucket = a} :: PostLaunchActions)
+
+-- | AWS Systems Manager Command\'s logs S3 output key prefix.
+postLaunchActions_s3OutputKeyPrefix :: Lens.Lens' PostLaunchActions (Prelude.Maybe Prelude.Text)
+postLaunchActions_s3OutputKeyPrefix = Lens.lens (\PostLaunchActions' {s3OutputKeyPrefix} -> s3OutputKeyPrefix) (\s@PostLaunchActions' {} a -> s {s3OutputKeyPrefix = a} :: PostLaunchActions)
+
+-- | AWS Systems Manager Documents.
+postLaunchActions_ssmDocuments :: Lens.Lens' PostLaunchActions (Prelude.Maybe [SsmDocument])
+postLaunchActions_ssmDocuments = Lens.lens (\PostLaunchActions' {ssmDocuments} -> ssmDocuments) (\s@PostLaunchActions' {} a -> s {ssmDocuments = a} :: PostLaunchActions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PostLaunchActions where
+  parseJSON =
+    Data.withObject
+      "PostLaunchActions"
+      ( \x ->
+          PostLaunchActions'
+            Prelude.<$> (x Data..:? "cloudWatchLogGroupName")
+            Prelude.<*> (x Data..:? "deployment")
+            Prelude.<*> (x Data..:? "s3LogBucket")
+            Prelude.<*> (x Data..:? "s3OutputKeyPrefix")
+            Prelude.<*> (x Data..:? "ssmDocuments" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable PostLaunchActions where
+  hashWithSalt _salt PostLaunchActions' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogGroupName
+      `Prelude.hashWithSalt` deployment
+      `Prelude.hashWithSalt` s3LogBucket
+      `Prelude.hashWithSalt` s3OutputKeyPrefix
+      `Prelude.hashWithSalt` ssmDocuments
+
+instance Prelude.NFData PostLaunchActions where
+  rnf PostLaunchActions' {..} =
+    Prelude.rnf cloudWatchLogGroupName
+      `Prelude.seq` Prelude.rnf deployment
+      `Prelude.seq` Prelude.rnf s3LogBucket
+      `Prelude.seq` Prelude.rnf s3OutputKeyPrefix
+      `Prelude.seq` Prelude.rnf ssmDocuments
+
+instance Data.ToJSON PostLaunchActions where
+  toJSON PostLaunchActions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cloudWatchLogGroupName" Data..=)
+              Prelude.<$> cloudWatchLogGroupName,
+            ("deployment" Data..=) Prelude.<$> deployment,
+            ("s3LogBucket" Data..=) Prelude.<$> s3LogBucket,
+            ("s3OutputKeyPrefix" Data..=)
+              Prelude.<$> s3OutputKeyPrefix,
+            ("ssmDocuments" Data..=) Prelude.<$> ssmDocuments
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/PostLaunchActionsDeploymentType.hs b/gen/Amazonka/MGN/Types/PostLaunchActionsDeploymentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/PostLaunchActionsDeploymentType.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.MGN.Types.PostLaunchActionsDeploymentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.PostLaunchActionsDeploymentType
+  ( PostLaunchActionsDeploymentType
+      ( ..,
+        PostLaunchActionsDeploymentType_CUTOVER_ONLY,
+        PostLaunchActionsDeploymentType_TEST_AND_CUTOVER,
+        PostLaunchActionsDeploymentType_TEST_ONLY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PostLaunchActionsDeploymentType = PostLaunchActionsDeploymentType'
+  { fromPostLaunchActionsDeploymentType ::
+      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 PostLaunchActionsDeploymentType_CUTOVER_ONLY :: PostLaunchActionsDeploymentType
+pattern PostLaunchActionsDeploymentType_CUTOVER_ONLY = PostLaunchActionsDeploymentType' "CUTOVER_ONLY"
+
+pattern PostLaunchActionsDeploymentType_TEST_AND_CUTOVER :: PostLaunchActionsDeploymentType
+pattern PostLaunchActionsDeploymentType_TEST_AND_CUTOVER = PostLaunchActionsDeploymentType' "TEST_AND_CUTOVER"
+
+pattern PostLaunchActionsDeploymentType_TEST_ONLY :: PostLaunchActionsDeploymentType
+pattern PostLaunchActionsDeploymentType_TEST_ONLY = PostLaunchActionsDeploymentType' "TEST_ONLY"
+
+{-# COMPLETE
+  PostLaunchActionsDeploymentType_CUTOVER_ONLY,
+  PostLaunchActionsDeploymentType_TEST_AND_CUTOVER,
+  PostLaunchActionsDeploymentType_TEST_ONLY,
+  PostLaunchActionsDeploymentType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/PostLaunchActionsStatus.hs b/gen/Amazonka/MGN/Types/PostLaunchActionsStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/PostLaunchActionsStatus.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.PostLaunchActionsStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.PostLaunchActionsStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.JobPostLaunchActionsLaunchStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Status of the Post Launch Actions running on the Test or Cutover
+-- instance.
+--
+-- /See:/ 'newPostLaunchActionsStatus' smart constructor.
+data PostLaunchActionsStatus = PostLaunchActionsStatus'
+  { -- | List of Post Launch Action status.
+    postLaunchActionsLaunchStatusList :: Prelude.Maybe [JobPostLaunchActionsLaunchStatus],
+    -- | Time where the AWS Systems Manager was detected as running on the Test
+    -- or Cutover instance.
+    ssmAgentDiscoveryDatetime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PostLaunchActionsStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'postLaunchActionsLaunchStatusList', 'postLaunchActionsStatus_postLaunchActionsLaunchStatusList' - List of Post Launch Action status.
+--
+-- 'ssmAgentDiscoveryDatetime', 'postLaunchActionsStatus_ssmAgentDiscoveryDatetime' - Time where the AWS Systems Manager was detected as running on the Test
+-- or Cutover instance.
+newPostLaunchActionsStatus ::
+  PostLaunchActionsStatus
+newPostLaunchActionsStatus =
+  PostLaunchActionsStatus'
+    { postLaunchActionsLaunchStatusList =
+        Prelude.Nothing,
+      ssmAgentDiscoveryDatetime = Prelude.Nothing
+    }
+
+-- | List of Post Launch Action status.
+postLaunchActionsStatus_postLaunchActionsLaunchStatusList :: Lens.Lens' PostLaunchActionsStatus (Prelude.Maybe [JobPostLaunchActionsLaunchStatus])
+postLaunchActionsStatus_postLaunchActionsLaunchStatusList = Lens.lens (\PostLaunchActionsStatus' {postLaunchActionsLaunchStatusList} -> postLaunchActionsLaunchStatusList) (\s@PostLaunchActionsStatus' {} a -> s {postLaunchActionsLaunchStatusList = a} :: PostLaunchActionsStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | Time where the AWS Systems Manager was detected as running on the Test
+-- or Cutover instance.
+postLaunchActionsStatus_ssmAgentDiscoveryDatetime :: Lens.Lens' PostLaunchActionsStatus (Prelude.Maybe Prelude.Text)
+postLaunchActionsStatus_ssmAgentDiscoveryDatetime = Lens.lens (\PostLaunchActionsStatus' {ssmAgentDiscoveryDatetime} -> ssmAgentDiscoveryDatetime) (\s@PostLaunchActionsStatus' {} a -> s {ssmAgentDiscoveryDatetime = a} :: PostLaunchActionsStatus)
+
+instance Data.FromJSON PostLaunchActionsStatus where
+  parseJSON =
+    Data.withObject
+      "PostLaunchActionsStatus"
+      ( \x ->
+          PostLaunchActionsStatus'
+            Prelude.<$> ( x
+                            Data..:? "postLaunchActionsLaunchStatusList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ssmAgentDiscoveryDatetime")
+      )
+
+instance Prelude.Hashable PostLaunchActionsStatus where
+  hashWithSalt _salt PostLaunchActionsStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` postLaunchActionsLaunchStatusList
+      `Prelude.hashWithSalt` ssmAgentDiscoveryDatetime
+
+instance Prelude.NFData PostLaunchActionsStatus where
+  rnf PostLaunchActionsStatus' {..} =
+    Prelude.rnf postLaunchActionsLaunchStatusList
+      `Prelude.seq` Prelude.rnf ssmAgentDiscoveryDatetime
diff --git a/gen/Amazonka/MGN/Types/ReplicationConfiguration.hs b/gen/Amazonka/MGN/Types/ReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ReplicationConfiguration.hs
@@ -0,0 +1,257 @@
+{-# 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.MGN.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.MGN.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.MGN.Types.ReplicationConfigurationDataPlaneRouting
+import Amazonka.MGN.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+import Amazonka.MGN.Types.ReplicationConfigurationEbsEncryption
+import Amazonka.MGN.Types.ReplicationConfigurationReplicatedDisk
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newReplicationConfiguration' smart constructor.
+data ReplicationConfiguration = ReplicationConfiguration'
+  { -- | Replication Configuration associate default Application Migration
+    -- Service Security Group.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Replication Configuration set bandwidth throttling.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Replication Configuration create Public IP.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | Replication Configuration data plane routing.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | Replication Configuration use default large Staging Disks.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | Replication Configuration EBS encryption.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | Replication Configuration EBS encryption key ARN.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration replicated disks.
+    replicatedDisks :: Prelude.Maybe [ReplicationConfigurationReplicatedDisk],
+    -- | Replication Configuration Replication Server instance type.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration Replication Server Security Group IDs.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Replication Configuration Source Server ID.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration Staging Area subnet ID.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration Staging Area tags.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Replication Configuration use Dedicated Replication Server.
+    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' - Replication Configuration associate default Application Migration
+-- Service Security Group.
+--
+-- 'bandwidthThrottling', 'replicationConfiguration_bandwidthThrottling' - Replication Configuration set bandwidth throttling.
+--
+-- 'createPublicIP', 'replicationConfiguration_createPublicIP' - Replication Configuration create Public IP.
+--
+-- 'dataPlaneRouting', 'replicationConfiguration_dataPlaneRouting' - Replication Configuration data plane routing.
+--
+-- 'defaultLargeStagingDiskType', 'replicationConfiguration_defaultLargeStagingDiskType' - Replication Configuration use default large Staging Disks.
+--
+-- 'ebsEncryption', 'replicationConfiguration_ebsEncryption' - Replication Configuration EBS encryption.
+--
+-- 'ebsEncryptionKeyArn', 'replicationConfiguration_ebsEncryptionKeyArn' - Replication Configuration EBS encryption key ARN.
+--
+-- 'name', 'replicationConfiguration_name' - Replication Configuration name.
+--
+-- 'replicatedDisks', 'replicationConfiguration_replicatedDisks' - Replication Configuration replicated disks.
+--
+-- 'replicationServerInstanceType', 'replicationConfiguration_replicationServerInstanceType' - Replication Configuration Replication Server instance type.
+--
+-- 'replicationServersSecurityGroupsIDs', 'replicationConfiguration_replicationServersSecurityGroupsIDs' - Replication Configuration Replication Server Security Group IDs.
+--
+-- 'sourceServerID', 'replicationConfiguration_sourceServerID' - Replication Configuration Source Server ID.
+--
+-- 'stagingAreaSubnetId', 'replicationConfiguration_stagingAreaSubnetId' - Replication Configuration Staging Area subnet ID.
+--
+-- 'stagingAreaTags', 'replicationConfiguration_stagingAreaTags' - Replication Configuration Staging Area tags.
+--
+-- 'useDedicatedReplicationServer', 'replicationConfiguration_useDedicatedReplicationServer' - Replication Configuration use Dedicated Replication Server.
+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,
+      replicatedDisks = Prelude.Nothing,
+      replicationServerInstanceType = Prelude.Nothing,
+      replicationServersSecurityGroupsIDs =
+        Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      stagingAreaSubnetId = Prelude.Nothing,
+      stagingAreaTags = Prelude.Nothing,
+      useDedicatedReplicationServer = Prelude.Nothing
+    }
+
+-- | Replication Configuration associate default Application Migration
+-- Service Security Group.
+replicationConfiguration_associateDefaultSecurityGroup :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+replicationConfiguration_associateDefaultSecurityGroup = Lens.lens (\ReplicationConfiguration' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@ReplicationConfiguration' {} a -> s {associateDefaultSecurityGroup = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration set bandwidth throttling.
+replicationConfiguration_bandwidthThrottling :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Natural)
+replicationConfiguration_bandwidthThrottling = Lens.lens (\ReplicationConfiguration' {bandwidthThrottling} -> bandwidthThrottling) (\s@ReplicationConfiguration' {} a -> s {bandwidthThrottling = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration create Public IP.
+replicationConfiguration_createPublicIP :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+replicationConfiguration_createPublicIP = Lens.lens (\ReplicationConfiguration' {createPublicIP} -> createPublicIP) (\s@ReplicationConfiguration' {} a -> s {createPublicIP = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration data plane routing.
+replicationConfiguration_dataPlaneRouting :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+replicationConfiguration_dataPlaneRouting = Lens.lens (\ReplicationConfiguration' {dataPlaneRouting} -> dataPlaneRouting) (\s@ReplicationConfiguration' {} a -> s {dataPlaneRouting = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration use default large Staging Disks.
+replicationConfiguration_defaultLargeStagingDiskType :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+replicationConfiguration_defaultLargeStagingDiskType = Lens.lens (\ReplicationConfiguration' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@ReplicationConfiguration' {} a -> s {defaultLargeStagingDiskType = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration EBS encryption.
+replicationConfiguration_ebsEncryption :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+replicationConfiguration_ebsEncryption = Lens.lens (\ReplicationConfiguration' {ebsEncryption} -> ebsEncryption) (\s@ReplicationConfiguration' {} a -> s {ebsEncryption = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration EBS encryption key ARN.
+replicationConfiguration_ebsEncryptionKeyArn :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_ebsEncryptionKeyArn = Lens.lens (\ReplicationConfiguration' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@ReplicationConfiguration' {} a -> s {ebsEncryptionKeyArn = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration name.
+replicationConfiguration_name :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_name = Lens.lens (\ReplicationConfiguration' {name} -> name) (\s@ReplicationConfiguration' {} a -> s {name = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration replicated disks.
+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
+
+-- | Replication Configuration Replication Server instance type.
+replicationConfiguration_replicationServerInstanceType :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_replicationServerInstanceType = Lens.lens (\ReplicationConfiguration' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@ReplicationConfiguration' {} a -> s {replicationServerInstanceType = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration Replication Server Security Group IDs.
+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
+
+-- | Replication Configuration Source Server ID.
+replicationConfiguration_sourceServerID :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_sourceServerID = Lens.lens (\ReplicationConfiguration' {sourceServerID} -> sourceServerID) (\s@ReplicationConfiguration' {} a -> s {sourceServerID = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration Staging Area subnet ID.
+replicationConfiguration_stagingAreaSubnetId :: Lens.Lens' ReplicationConfiguration (Prelude.Maybe Prelude.Text)
+replicationConfiguration_stagingAreaSubnetId = Lens.lens (\ReplicationConfiguration' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@ReplicationConfiguration' {} a -> s {stagingAreaSubnetId = a} :: ReplicationConfiguration)
+
+-- | Replication Configuration Staging Area tags.
+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)
+
+-- | Replication Configuration use Dedicated Replication Server.
+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..:? "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` 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 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/MGN/Types/ReplicationConfigurationDataPlaneRouting.hs b/gen/Amazonka/MGN/Types/ReplicationConfigurationDataPlaneRouting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/ReplicationConfigurationDefaultLargeStagingDiskType.hs b/gen/Amazonka/MGN/Types/ReplicationConfigurationDefaultLargeStagingDiskType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ReplicationConfigurationDefaultLargeStagingDiskType.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.MGN.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.MGN.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+  ( ReplicationConfigurationDefaultLargeStagingDiskType
+      ( ..,
+        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_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_GP2,
+  ReplicationConfigurationDefaultLargeStagingDiskType_GP3,
+  ReplicationConfigurationDefaultLargeStagingDiskType_ST1,
+  ReplicationConfigurationDefaultLargeStagingDiskType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/ReplicationConfigurationEbsEncryption.hs b/gen/Amazonka/MGN/Types/ReplicationConfigurationEbsEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/ReplicationConfigurationReplicatedDisk.hs b/gen/Amazonka/MGN/Types/ReplicationConfigurationReplicatedDisk.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ReplicationConfigurationReplicatedDisk.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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.MGN.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.MGN.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Replication Configuration replicated disk.
+--
+-- /See:/ 'newReplicationConfigurationReplicatedDisk' smart constructor.
+data ReplicationConfigurationReplicatedDisk = ReplicationConfigurationReplicatedDisk'
+  { -- | Replication Configuration replicated disk device name.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration replicated disk IOPs.
+    iops :: Prelude.Maybe Prelude.Natural,
+    -- | Replication Configuration replicated disk boot disk.
+    isBootDisk :: Prelude.Maybe Prelude.Bool,
+    -- | Replication Configuration replicated disk staging disk type.
+    stagingDiskType :: Prelude.Maybe ReplicationConfigurationReplicatedDiskStagingDiskType,
+    -- | Replication Configuration replicated disk throughput.
+    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' - Replication Configuration replicated disk device name.
+--
+-- 'iops', 'replicationConfigurationReplicatedDisk_iops' - Replication Configuration replicated disk IOPs.
+--
+-- 'isBootDisk', 'replicationConfigurationReplicatedDisk_isBootDisk' - Replication Configuration replicated disk boot disk.
+--
+-- 'stagingDiskType', 'replicationConfigurationReplicatedDisk_stagingDiskType' - Replication Configuration replicated disk staging disk type.
+--
+-- 'throughput', 'replicationConfigurationReplicatedDisk_throughput' - Replication Configuration replicated disk throughput.
+newReplicationConfigurationReplicatedDisk ::
+  ReplicationConfigurationReplicatedDisk
+newReplicationConfigurationReplicatedDisk =
+  ReplicationConfigurationReplicatedDisk'
+    { deviceName =
+        Prelude.Nothing,
+      iops = Prelude.Nothing,
+      isBootDisk = Prelude.Nothing,
+      stagingDiskType = Prelude.Nothing,
+      throughput = Prelude.Nothing
+    }
+
+-- | Replication Configuration replicated disk device name.
+replicationConfigurationReplicatedDisk_deviceName :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Text)
+replicationConfigurationReplicatedDisk_deviceName = Lens.lens (\ReplicationConfigurationReplicatedDisk' {deviceName} -> deviceName) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {deviceName = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | Replication Configuration replicated disk IOPs.
+replicationConfigurationReplicatedDisk_iops :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Natural)
+replicationConfigurationReplicatedDisk_iops = Lens.lens (\ReplicationConfigurationReplicatedDisk' {iops} -> iops) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {iops = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | Replication Configuration replicated disk boot disk.
+replicationConfigurationReplicatedDisk_isBootDisk :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe Prelude.Bool)
+replicationConfigurationReplicatedDisk_isBootDisk = Lens.lens (\ReplicationConfigurationReplicatedDisk' {isBootDisk} -> isBootDisk) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {isBootDisk = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | Replication Configuration replicated disk staging disk type.
+replicationConfigurationReplicatedDisk_stagingDiskType :: Lens.Lens' ReplicationConfigurationReplicatedDisk (Prelude.Maybe ReplicationConfigurationReplicatedDiskStagingDiskType)
+replicationConfigurationReplicatedDisk_stagingDiskType = Lens.lens (\ReplicationConfigurationReplicatedDisk' {stagingDiskType} -> stagingDiskType) (\s@ReplicationConfigurationReplicatedDisk' {} a -> s {stagingDiskType = a} :: ReplicationConfigurationReplicatedDisk)
+
+-- | Replication Configuration replicated disk throughput.
+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..:? "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` 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 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,
+            ("stagingDiskType" Data..=)
+              Prelude.<$> stagingDiskType,
+            ("throughput" Data..=) Prelude.<$> throughput
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/ReplicationConfigurationReplicatedDiskStagingDiskType.hs b/gen/Amazonka/MGN/Types/ReplicationConfigurationReplicatedDiskStagingDiskType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ReplicationConfigurationReplicatedDiskStagingDiskType.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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.MGN.Types.ReplicationConfigurationReplicatedDiskStagingDiskType
+  ( ReplicationConfigurationReplicatedDiskStagingDiskType
+      ( ..,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_AUTO,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_GP2,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_GP3,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_IO1,
+        ReplicationConfigurationReplicatedDiskStagingDiskType_IO2,
+        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_IO2 :: ReplicationConfigurationReplicatedDiskStagingDiskType
+pattern ReplicationConfigurationReplicatedDiskStagingDiskType_IO2 = ReplicationConfigurationReplicatedDiskStagingDiskType' "IO2"
+
+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_IO2,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_SC1,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_ST1,
+  ReplicationConfigurationReplicatedDiskStagingDiskType_STANDARD,
+  ReplicationConfigurationReplicatedDiskStagingDiskType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/ReplicationConfigurationTemplate.hs b/gen/Amazonka/MGN/Types/ReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ReplicationConfigurationTemplate.hs
@@ -0,0 +1,272 @@
+{-# 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.MGN.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.MGN.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.MGN.Types.ReplicationConfigurationDataPlaneRouting
+import Amazonka.MGN.Types.ReplicationConfigurationDefaultLargeStagingDiskType
+import Amazonka.MGN.Types.ReplicationConfigurationEbsEncryption
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newReplicationConfigurationTemplate' smart constructor.
+data ReplicationConfigurationTemplate = ReplicationConfigurationTemplate'
+  { -- | Replication Configuration template ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration template associate default Application
+    -- Migration Service Security group.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Replication Configuration template bandwidth throttling.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Replication Configuration template create Public IP.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | Replication Configuration template data plane routing.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | Replication Configuration template use default large Staging Disk type.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | Replication Configuration template EBS encryption.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | Replication Configuration template EBS encryption key ARN.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration template server instance type.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration template server Security Groups IDs.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Replication Configuration template Staging Area subnet ID.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | Replication Configuration template Staging Area Tags.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Replication Configuration template Tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Replication Configuration template use Dedicated Replication Server.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool,
+    -- | 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' - Replication Configuration template ARN.
+--
+-- 'associateDefaultSecurityGroup', 'replicationConfigurationTemplate_associateDefaultSecurityGroup' - Replication Configuration template associate default Application
+-- Migration Service Security group.
+--
+-- 'bandwidthThrottling', 'replicationConfigurationTemplate_bandwidthThrottling' - Replication Configuration template bandwidth throttling.
+--
+-- 'createPublicIP', 'replicationConfigurationTemplate_createPublicIP' - Replication Configuration template create Public IP.
+--
+-- 'dataPlaneRouting', 'replicationConfigurationTemplate_dataPlaneRouting' - Replication Configuration template data plane routing.
+--
+-- 'defaultLargeStagingDiskType', 'replicationConfigurationTemplate_defaultLargeStagingDiskType' - Replication Configuration template use default large Staging Disk type.
+--
+-- 'ebsEncryption', 'replicationConfigurationTemplate_ebsEncryption' - Replication Configuration template EBS encryption.
+--
+-- 'ebsEncryptionKeyArn', 'replicationConfigurationTemplate_ebsEncryptionKeyArn' - Replication Configuration template EBS encryption key ARN.
+--
+-- 'replicationServerInstanceType', 'replicationConfigurationTemplate_replicationServerInstanceType' - Replication Configuration template server instance type.
+--
+-- 'replicationServersSecurityGroupsIDs', 'replicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - Replication Configuration template server Security Groups IDs.
+--
+-- 'stagingAreaSubnetId', 'replicationConfigurationTemplate_stagingAreaSubnetId' - Replication Configuration template Staging Area subnet ID.
+--
+-- 'stagingAreaTags', 'replicationConfigurationTemplate_stagingAreaTags' - Replication Configuration template Staging Area Tags.
+--
+-- 'tags', 'replicationConfigurationTemplate_tags' - Replication Configuration template Tags.
+--
+-- 'useDedicatedReplicationServer', 'replicationConfigurationTemplate_useDedicatedReplicationServer' - Replication Configuration template use Dedicated Replication Server.
+--
+-- 'replicationConfigurationTemplateID', 'replicationConfigurationTemplate_replicationConfigurationTemplateID' - 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,
+        replicationServerInstanceType =
+          Prelude.Nothing,
+        replicationServersSecurityGroupsIDs =
+          Prelude.Nothing,
+        stagingAreaSubnetId = Prelude.Nothing,
+        stagingAreaTags = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        useDedicatedReplicationServer =
+          Prelude.Nothing,
+        replicationConfigurationTemplateID =
+          pReplicationConfigurationTemplateID_
+      }
+
+-- | 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)
+
+-- | Replication Configuration template associate default Application
+-- Migration Service Security group.
+replicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+replicationConfigurationTemplate_associateDefaultSecurityGroup = Lens.lens (\ReplicationConfigurationTemplate' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@ReplicationConfigurationTemplate' {} a -> s {associateDefaultSecurityGroup = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template bandwidth throttling.
+replicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+replicationConfigurationTemplate_bandwidthThrottling = Lens.lens (\ReplicationConfigurationTemplate' {bandwidthThrottling} -> bandwidthThrottling) (\s@ReplicationConfigurationTemplate' {} a -> s {bandwidthThrottling = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template create Public IP.
+replicationConfigurationTemplate_createPublicIP :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+replicationConfigurationTemplate_createPublicIP = Lens.lens (\ReplicationConfigurationTemplate' {createPublicIP} -> createPublicIP) (\s@ReplicationConfigurationTemplate' {} a -> s {createPublicIP = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template data plane routing.
+replicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+replicationConfigurationTemplate_dataPlaneRouting = Lens.lens (\ReplicationConfigurationTemplate' {dataPlaneRouting} -> dataPlaneRouting) (\s@ReplicationConfigurationTemplate' {} a -> s {dataPlaneRouting = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template use default large Staging Disk type.
+replicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+replicationConfigurationTemplate_defaultLargeStagingDiskType = Lens.lens (\ReplicationConfigurationTemplate' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@ReplicationConfigurationTemplate' {} a -> s {defaultLargeStagingDiskType = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template EBS encryption.
+replicationConfigurationTemplate_ebsEncryption :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+replicationConfigurationTemplate_ebsEncryption = Lens.lens (\ReplicationConfigurationTemplate' {ebsEncryption} -> ebsEncryption) (\s@ReplicationConfigurationTemplate' {} a -> s {ebsEncryption = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template EBS encryption key ARN.
+replicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_ebsEncryptionKeyArn = Lens.lens (\ReplicationConfigurationTemplate' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@ReplicationConfigurationTemplate' {} a -> s {ebsEncryptionKeyArn = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template server instance type.
+replicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_replicationServerInstanceType = Lens.lens (\ReplicationConfigurationTemplate' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@ReplicationConfigurationTemplate' {} a -> s {replicationServerInstanceType = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template server Security Groups IDs.
+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
+
+-- | Replication Configuration template Staging Area subnet ID.
+replicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+replicationConfigurationTemplate_stagingAreaSubnetId = Lens.lens (\ReplicationConfigurationTemplate' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@ReplicationConfigurationTemplate' {} a -> s {stagingAreaSubnetId = a} :: ReplicationConfigurationTemplate)
+
+-- | Replication Configuration template Staging Area Tags.
+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)
+
+-- | Replication Configuration template Tags.
+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)
+
+-- | Replication Configuration template use Dedicated Replication Server.
+replicationConfigurationTemplate_useDedicatedReplicationServer :: Lens.Lens' ReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+replicationConfigurationTemplate_useDedicatedReplicationServer = Lens.lens (\ReplicationConfigurationTemplate' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@ReplicationConfigurationTemplate' {} a -> s {useDedicatedReplicationServer = a} :: ReplicationConfigurationTemplate)
+
+-- | 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..:? "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` 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 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/MGN/Types/ReplicationType.hs b/gen/Amazonka/MGN/Types/ReplicationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/ReplicationType.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.MGN.Types.ReplicationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.ReplicationType
+  ( ReplicationType
+      ( ..,
+        ReplicationType_AGENT_BASED,
+        ReplicationType_SNAPSHOT_SHIPPING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationType = ReplicationType'
+  { fromReplicationType ::
+      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 ReplicationType_AGENT_BASED :: ReplicationType
+pattern ReplicationType_AGENT_BASED = ReplicationType' "AGENT_BASED"
+
+pattern ReplicationType_SNAPSHOT_SHIPPING :: ReplicationType
+pattern ReplicationType_SNAPSHOT_SHIPPING = ReplicationType' "SNAPSHOT_SHIPPING"
+
+{-# COMPLETE
+  ReplicationType_AGENT_BASED,
+  ReplicationType_SNAPSHOT_SHIPPING,
+  ReplicationType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/SourceProperties.hs b/gen/Amazonka/MGN/Types/SourceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SourceProperties.hs
@@ -0,0 +1,164 @@
+{-# 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.MGN.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.MGN.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.MGN.Types.CPU
+import Amazonka.MGN.Types.Disk
+import Amazonka.MGN.Types.IdentificationHints
+import Amazonka.MGN.Types.NetworkInterface
+import Amazonka.MGN.Types.OS
+import qualified Amazonka.Prelude as Prelude
+
+-- | Source server properties.
+--
+-- /See:/ 'newSourceProperties' smart constructor.
+data SourceProperties = SourceProperties'
+  { -- | Source Server CPUs.
+    cpus :: Prelude.Maybe [CPU],
+    -- | Source Server disks.
+    disks :: Prelude.Maybe [Disk],
+    -- | Source server identification hints.
+    identificationHints :: Prelude.Maybe IdentificationHints,
+    -- | Source server last update date and time.
+    lastUpdatedDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Source server network interfaces.
+    networkInterfaces :: Prelude.Maybe [NetworkInterface],
+    -- | Source server OS.
+    os :: Prelude.Maybe OS,
+    -- | Source server RAM in bytes.
+    ramBytes :: Prelude.Maybe Prelude.Natural,
+    -- | Source server recommended instance type.
+    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' - Source Server CPUs.
+--
+-- 'disks', 'sourceProperties_disks' - Source Server disks.
+--
+-- 'identificationHints', 'sourceProperties_identificationHints' - Source server identification hints.
+--
+-- 'lastUpdatedDateTime', 'sourceProperties_lastUpdatedDateTime' - Source server last update date and time.
+--
+-- 'networkInterfaces', 'sourceProperties_networkInterfaces' - Source server network interfaces.
+--
+-- 'os', 'sourceProperties_os' - Source server OS.
+--
+-- 'ramBytes', 'sourceProperties_ramBytes' - Source server RAM in bytes.
+--
+-- 'recommendedInstanceType', 'sourceProperties_recommendedInstanceType' - Source server recommended instance type.
+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
+    }
+
+-- | Source Server 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
+
+-- | Source Server 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
+
+-- | Source server identification hints.
+sourceProperties_identificationHints :: Lens.Lens' SourceProperties (Prelude.Maybe IdentificationHints)
+sourceProperties_identificationHints = Lens.lens (\SourceProperties' {identificationHints} -> identificationHints) (\s@SourceProperties' {} a -> s {identificationHints = a} :: SourceProperties)
+
+-- | Source server last update date and time.
+sourceProperties_lastUpdatedDateTime :: Lens.Lens' SourceProperties (Prelude.Maybe Prelude.Text)
+sourceProperties_lastUpdatedDateTime = Lens.lens (\SourceProperties' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@SourceProperties' {} a -> s {lastUpdatedDateTime = a} :: SourceProperties)
+
+-- | Source server 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
+
+-- | Source server OS.
+sourceProperties_os :: Lens.Lens' SourceProperties (Prelude.Maybe OS)
+sourceProperties_os = Lens.lens (\SourceProperties' {os} -> os) (\s@SourceProperties' {} a -> s {os = a} :: SourceProperties)
+
+-- | Source server 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)
+
+-- | Source server recommended instance type.
+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/MGN/Types/SourceServer.hs b/gen/Amazonka/MGN/Types/SourceServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SourceServer.hs
@@ -0,0 +1,195 @@
+{-# 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.MGN.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.MGN.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.MGN.Types.DataReplicationInfo
+import Amazonka.MGN.Types.LaunchedInstance
+import Amazonka.MGN.Types.LifeCycle
+import Amazonka.MGN.Types.ReplicationType
+import Amazonka.MGN.Types.SourceProperties
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newSourceServer' smart constructor.
+data SourceServer = SourceServer'
+  { -- | Source server application ID.
+    applicationID :: Prelude.Maybe Prelude.Text,
+    -- | Source server ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Source server data replication info.
+    dataReplicationInfo :: Prelude.Maybe DataReplicationInfo,
+    -- | Source server archived status.
+    isArchived :: Prelude.Maybe Prelude.Bool,
+    -- | Source server launched instance.
+    launchedInstance :: Prelude.Maybe LaunchedInstance,
+    -- | Source server lifecycle state.
+    lifeCycle :: Prelude.Maybe LifeCycle,
+    -- | Source server replication type.
+    replicationType :: Prelude.Maybe ReplicationType,
+    -- | Source server properties.
+    sourceProperties :: Prelude.Maybe SourceProperties,
+    -- | Source server ID.
+    sourceServerID :: Prelude.Maybe Prelude.Text,
+    -- | Source server Tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Source server vCenter client id.
+    vcenterClientID :: Prelude.Maybe 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:
+--
+-- 'applicationID', 'sourceServer_applicationID' - Source server application ID.
+--
+-- 'arn', 'sourceServer_arn' - Source server ARN.
+--
+-- 'dataReplicationInfo', 'sourceServer_dataReplicationInfo' - Source server data replication info.
+--
+-- 'isArchived', 'sourceServer_isArchived' - Source server archived status.
+--
+-- 'launchedInstance', 'sourceServer_launchedInstance' - Source server launched instance.
+--
+-- 'lifeCycle', 'sourceServer_lifeCycle' - Source server lifecycle state.
+--
+-- 'replicationType', 'sourceServer_replicationType' - Source server replication type.
+--
+-- 'sourceProperties', 'sourceServer_sourceProperties' - Source server properties.
+--
+-- 'sourceServerID', 'sourceServer_sourceServerID' - Source server ID.
+--
+-- 'tags', 'sourceServer_tags' - Source server Tags.
+--
+-- 'vcenterClientID', 'sourceServer_vcenterClientID' - Source server vCenter client id.
+newSourceServer ::
+  SourceServer
+newSourceServer =
+  SourceServer'
+    { applicationID = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      dataReplicationInfo = Prelude.Nothing,
+      isArchived = Prelude.Nothing,
+      launchedInstance = Prelude.Nothing,
+      lifeCycle = Prelude.Nothing,
+      replicationType = Prelude.Nothing,
+      sourceProperties = Prelude.Nothing,
+      sourceServerID = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vcenterClientID = Prelude.Nothing
+    }
+
+-- | Source server application ID.
+sourceServer_applicationID :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_applicationID = Lens.lens (\SourceServer' {applicationID} -> applicationID) (\s@SourceServer' {} a -> s {applicationID = a} :: SourceServer)
+
+-- | Source server ARN.
+sourceServer_arn :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_arn = Lens.lens (\SourceServer' {arn} -> arn) (\s@SourceServer' {} a -> s {arn = a} :: SourceServer)
+
+-- | Source server data replication info.
+sourceServer_dataReplicationInfo :: Lens.Lens' SourceServer (Prelude.Maybe DataReplicationInfo)
+sourceServer_dataReplicationInfo = Lens.lens (\SourceServer' {dataReplicationInfo} -> dataReplicationInfo) (\s@SourceServer' {} a -> s {dataReplicationInfo = a} :: SourceServer)
+
+-- | Source server archived status.
+sourceServer_isArchived :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Bool)
+sourceServer_isArchived = Lens.lens (\SourceServer' {isArchived} -> isArchived) (\s@SourceServer' {} a -> s {isArchived = a} :: SourceServer)
+
+-- | Source server launched instance.
+sourceServer_launchedInstance :: Lens.Lens' SourceServer (Prelude.Maybe LaunchedInstance)
+sourceServer_launchedInstance = Lens.lens (\SourceServer' {launchedInstance} -> launchedInstance) (\s@SourceServer' {} a -> s {launchedInstance = a} :: SourceServer)
+
+-- | Source server lifecycle state.
+sourceServer_lifeCycle :: Lens.Lens' SourceServer (Prelude.Maybe LifeCycle)
+sourceServer_lifeCycle = Lens.lens (\SourceServer' {lifeCycle} -> lifeCycle) (\s@SourceServer' {} a -> s {lifeCycle = a} :: SourceServer)
+
+-- | Source server replication type.
+sourceServer_replicationType :: Lens.Lens' SourceServer (Prelude.Maybe ReplicationType)
+sourceServer_replicationType = Lens.lens (\SourceServer' {replicationType} -> replicationType) (\s@SourceServer' {} a -> s {replicationType = a} :: SourceServer)
+
+-- | Source server properties.
+sourceServer_sourceProperties :: Lens.Lens' SourceServer (Prelude.Maybe SourceProperties)
+sourceServer_sourceProperties = Lens.lens (\SourceServer' {sourceProperties} -> sourceProperties) (\s@SourceServer' {} a -> s {sourceProperties = a} :: SourceServer)
+
+-- | Source server ID.
+sourceServer_sourceServerID :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_sourceServerID = Lens.lens (\SourceServer' {sourceServerID} -> sourceServerID) (\s@SourceServer' {} a -> s {sourceServerID = a} :: SourceServer)
+
+-- | Source server Tags.
+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)
+
+-- | Source server vCenter client id.
+sourceServer_vcenterClientID :: Lens.Lens' SourceServer (Prelude.Maybe Prelude.Text)
+sourceServer_vcenterClientID = Lens.lens (\SourceServer' {vcenterClientID} -> vcenterClientID) (\s@SourceServer' {} a -> s {vcenterClientID = a} :: SourceServer)
+
+instance Data.FromJSON SourceServer where
+  parseJSON =
+    Data.withObject
+      "SourceServer"
+      ( \x ->
+          SourceServer'
+            Prelude.<$> (x Data..:? "applicationID")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "dataReplicationInfo")
+            Prelude.<*> (x Data..:? "isArchived")
+            Prelude.<*> (x Data..:? "launchedInstance")
+            Prelude.<*> (x Data..:? "lifeCycle")
+            Prelude.<*> (x Data..:? "replicationType")
+            Prelude.<*> (x Data..:? "sourceProperties")
+            Prelude.<*> (x Data..:? "sourceServerID")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "vcenterClientID")
+      )
+
+instance Prelude.Hashable SourceServer where
+  hashWithSalt _salt SourceServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationID
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` dataReplicationInfo
+      `Prelude.hashWithSalt` isArchived
+      `Prelude.hashWithSalt` launchedInstance
+      `Prelude.hashWithSalt` lifeCycle
+      `Prelude.hashWithSalt` replicationType
+      `Prelude.hashWithSalt` sourceProperties
+      `Prelude.hashWithSalt` sourceServerID
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vcenterClientID
+
+instance Prelude.NFData SourceServer where
+  rnf SourceServer' {..} =
+    Prelude.rnf applicationID
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf dataReplicationInfo
+      `Prelude.seq` Prelude.rnf isArchived
+      `Prelude.seq` Prelude.rnf launchedInstance
+      `Prelude.seq` Prelude.rnf lifeCycle
+      `Prelude.seq` Prelude.rnf replicationType
+      `Prelude.seq` Prelude.rnf sourceProperties
+      `Prelude.seq` Prelude.rnf sourceServerID
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vcenterClientID
diff --git a/gen/Amazonka/MGN/Types/SourceServerActionDocument.hs b/gen/Amazonka/MGN/Types/SourceServerActionDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SourceServerActionDocument.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.SourceServerActionDocument
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.SourceServerActionDocument where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.SsmParameterStoreParameter
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newSourceServerActionDocument' smart constructor.
+data SourceServerActionDocument = SourceServerActionDocument'
+  { -- | Source server post migration custom action ID.
+    actionID :: Prelude.Maybe Prelude.Text,
+    -- | Source server post migration custom action name.
+    actionName :: Prelude.Maybe Prelude.Text,
+    -- | Source server post migration custom action active status.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | Source server post migration custom action document identifier.
+    documentIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | Source server post migration custom action document version.
+    documentVersion :: Prelude.Maybe Prelude.Text,
+    -- | Source server post migration custom action must succeed for cutover.
+    mustSucceedForCutover :: Prelude.Maybe Prelude.Bool,
+    -- | Source server post migration custom action order.
+    order :: Prelude.Maybe Prelude.Natural,
+    -- | Source server post migration custom action parameters.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]),
+    -- | Source server post migration custom action timeout in seconds.
+    timeoutSeconds :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceServerActionDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionID', 'sourceServerActionDocument_actionID' - Source server post migration custom action ID.
+--
+-- 'actionName', 'sourceServerActionDocument_actionName' - Source server post migration custom action name.
+--
+-- 'active', 'sourceServerActionDocument_active' - Source server post migration custom action active status.
+--
+-- 'documentIdentifier', 'sourceServerActionDocument_documentIdentifier' - Source server post migration custom action document identifier.
+--
+-- 'documentVersion', 'sourceServerActionDocument_documentVersion' - Source server post migration custom action document version.
+--
+-- 'mustSucceedForCutover', 'sourceServerActionDocument_mustSucceedForCutover' - Source server post migration custom action must succeed for cutover.
+--
+-- 'order', 'sourceServerActionDocument_order' - Source server post migration custom action order.
+--
+-- 'parameters', 'sourceServerActionDocument_parameters' - Source server post migration custom action parameters.
+--
+-- 'timeoutSeconds', 'sourceServerActionDocument_timeoutSeconds' - Source server post migration custom action timeout in seconds.
+newSourceServerActionDocument ::
+  SourceServerActionDocument
+newSourceServerActionDocument =
+  SourceServerActionDocument'
+    { actionID =
+        Prelude.Nothing,
+      actionName = Prelude.Nothing,
+      active = Prelude.Nothing,
+      documentIdentifier = Prelude.Nothing,
+      documentVersion = Prelude.Nothing,
+      mustSucceedForCutover = Prelude.Nothing,
+      order = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      timeoutSeconds = Prelude.Nothing
+    }
+
+-- | Source server post migration custom action ID.
+sourceServerActionDocument_actionID :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Text)
+sourceServerActionDocument_actionID = Lens.lens (\SourceServerActionDocument' {actionID} -> actionID) (\s@SourceServerActionDocument' {} a -> s {actionID = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action name.
+sourceServerActionDocument_actionName :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Text)
+sourceServerActionDocument_actionName = Lens.lens (\SourceServerActionDocument' {actionName} -> actionName) (\s@SourceServerActionDocument' {} a -> s {actionName = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action active status.
+sourceServerActionDocument_active :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Bool)
+sourceServerActionDocument_active = Lens.lens (\SourceServerActionDocument' {active} -> active) (\s@SourceServerActionDocument' {} a -> s {active = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action document identifier.
+sourceServerActionDocument_documentIdentifier :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Text)
+sourceServerActionDocument_documentIdentifier = Lens.lens (\SourceServerActionDocument' {documentIdentifier} -> documentIdentifier) (\s@SourceServerActionDocument' {} a -> s {documentIdentifier = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action document version.
+sourceServerActionDocument_documentVersion :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Text)
+sourceServerActionDocument_documentVersion = Lens.lens (\SourceServerActionDocument' {documentVersion} -> documentVersion) (\s@SourceServerActionDocument' {} a -> s {documentVersion = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action must succeed for cutover.
+sourceServerActionDocument_mustSucceedForCutover :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Bool)
+sourceServerActionDocument_mustSucceedForCutover = Lens.lens (\SourceServerActionDocument' {mustSucceedForCutover} -> mustSucceedForCutover) (\s@SourceServerActionDocument' {} a -> s {mustSucceedForCutover = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action order.
+sourceServerActionDocument_order :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Natural)
+sourceServerActionDocument_order = Lens.lens (\SourceServerActionDocument' {order} -> order) (\s@SourceServerActionDocument' {} a -> s {order = a} :: SourceServerActionDocument)
+
+-- | Source server post migration custom action parameters.
+sourceServerActionDocument_parameters :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]))
+sourceServerActionDocument_parameters = Lens.lens (\SourceServerActionDocument' {parameters} -> parameters) (\s@SourceServerActionDocument' {} a -> s {parameters = a} :: SourceServerActionDocument) Prelude.. Lens.mapping Lens.coerced
+
+-- | Source server post migration custom action timeout in seconds.
+sourceServerActionDocument_timeoutSeconds :: Lens.Lens' SourceServerActionDocument (Prelude.Maybe Prelude.Natural)
+sourceServerActionDocument_timeoutSeconds = Lens.lens (\SourceServerActionDocument' {timeoutSeconds} -> timeoutSeconds) (\s@SourceServerActionDocument' {} a -> s {timeoutSeconds = a} :: SourceServerActionDocument)
+
+instance Data.FromJSON SourceServerActionDocument where
+  parseJSON =
+    Data.withObject
+      "SourceServerActionDocument"
+      ( \x ->
+          SourceServerActionDocument'
+            Prelude.<$> (x Data..:? "actionID")
+            Prelude.<*> (x Data..:? "actionName")
+            Prelude.<*> (x Data..:? "active")
+            Prelude.<*> (x Data..:? "documentIdentifier")
+            Prelude.<*> (x Data..:? "documentVersion")
+            Prelude.<*> (x Data..:? "mustSucceedForCutover")
+            Prelude.<*> (x Data..:? "order")
+            Prelude.<*> (x Data..:? "parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "timeoutSeconds")
+      )
+
+instance Prelude.Hashable SourceServerActionDocument where
+  hashWithSalt _salt SourceServerActionDocument' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionID
+      `Prelude.hashWithSalt` actionName
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` documentIdentifier
+      `Prelude.hashWithSalt` documentVersion
+      `Prelude.hashWithSalt` mustSucceedForCutover
+      `Prelude.hashWithSalt` order
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` timeoutSeconds
+
+instance Prelude.NFData SourceServerActionDocument where
+  rnf SourceServerActionDocument' {..} =
+    Prelude.rnf actionID
+      `Prelude.seq` Prelude.rnf actionName
+      `Prelude.seq` Prelude.rnf active
+      `Prelude.seq` Prelude.rnf documentIdentifier
+      `Prelude.seq` Prelude.rnf documentVersion
+      `Prelude.seq` Prelude.rnf mustSucceedForCutover
+      `Prelude.seq` Prelude.rnf order
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf timeoutSeconds
diff --git a/gen/Amazonka/MGN/Types/SourceServerActionsRequestFilters.hs b/gen/Amazonka/MGN/Types/SourceServerActionsRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SourceServerActionsRequestFilters.hs
@@ -0,0 +1,81 @@
+{-# 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.MGN.Types.SourceServerActionsRequestFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.SourceServerActionsRequestFilters 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 post migration custom action filters.
+--
+-- /See:/ 'newSourceServerActionsRequestFilters' smart constructor.
+data SourceServerActionsRequestFilters = SourceServerActionsRequestFilters'
+  { -- | Action IDs to filter source server post migration custom actions by.
+    actionIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceServerActionsRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionIDs', 'sourceServerActionsRequestFilters_actionIDs' - Action IDs to filter source server post migration custom actions by.
+newSourceServerActionsRequestFilters ::
+  SourceServerActionsRequestFilters
+newSourceServerActionsRequestFilters =
+  SourceServerActionsRequestFilters'
+    { actionIDs =
+        Prelude.Nothing
+    }
+
+-- | Action IDs to filter source server post migration custom actions by.
+sourceServerActionsRequestFilters_actionIDs :: Lens.Lens' SourceServerActionsRequestFilters (Prelude.Maybe [Prelude.Text])
+sourceServerActionsRequestFilters_actionIDs = Lens.lens (\SourceServerActionsRequestFilters' {actionIDs} -> actionIDs) (\s@SourceServerActionsRequestFilters' {} a -> s {actionIDs = a} :: SourceServerActionsRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    SourceServerActionsRequestFilters
+  where
+  hashWithSalt
+    _salt
+    SourceServerActionsRequestFilters' {..} =
+      _salt `Prelude.hashWithSalt` actionIDs
+
+instance
+  Prelude.NFData
+    SourceServerActionsRequestFilters
+  where
+  rnf SourceServerActionsRequestFilters' {..} =
+    Prelude.rnf actionIDs
+
+instance
+  Data.ToJSON
+    SourceServerActionsRequestFilters
+  where
+  toJSON SourceServerActionsRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("actionIDs" Data..=) Prelude.<$> actionIDs]
+      )
diff --git a/gen/Amazonka/MGN/Types/SsmDocument.hs b/gen/Amazonka/MGN/Types/SsmDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SsmDocument.hs
@@ -0,0 +1,141 @@
+{-# 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.MGN.Types.SsmDocument
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.SsmDocument where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.SsmParameterStoreParameter
+import qualified Amazonka.Prelude as Prelude
+
+-- | AWS Systems Manager Document.
+--
+-- /See:/ 'newSsmDocument' smart constructor.
+data SsmDocument = SsmDocument'
+  { -- | If true, Cutover will not be enabled if the document has failed.
+    mustSucceedForCutover :: Prelude.Maybe Prelude.Bool,
+    -- | AWS Systems Manager Document parameters.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]),
+    -- | AWS Systems Manager Document timeout seconds.
+    timeoutSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | User-friendly name for the AWS Systems Manager Document.
+    actionName :: Prelude.Text,
+    -- | AWS Systems Manager Document name or full ARN.
+    ssmDocumentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SsmDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mustSucceedForCutover', 'ssmDocument_mustSucceedForCutover' - If true, Cutover will not be enabled if the document has failed.
+--
+-- 'parameters', 'ssmDocument_parameters' - AWS Systems Manager Document parameters.
+--
+-- 'timeoutSeconds', 'ssmDocument_timeoutSeconds' - AWS Systems Manager Document timeout seconds.
+--
+-- 'actionName', 'ssmDocument_actionName' - User-friendly name for the AWS Systems Manager Document.
+--
+-- 'ssmDocumentName', 'ssmDocument_ssmDocumentName' - AWS Systems Manager Document name or full ARN.
+newSsmDocument ::
+  -- | 'actionName'
+  Prelude.Text ->
+  -- | 'ssmDocumentName'
+  Prelude.Text ->
+  SsmDocument
+newSsmDocument pActionName_ pSsmDocumentName_ =
+  SsmDocument'
+    { mustSucceedForCutover =
+        Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      timeoutSeconds = Prelude.Nothing,
+      actionName = pActionName_,
+      ssmDocumentName = pSsmDocumentName_
+    }
+
+-- | If true, Cutover will not be enabled if the document has failed.
+ssmDocument_mustSucceedForCutover :: Lens.Lens' SsmDocument (Prelude.Maybe Prelude.Bool)
+ssmDocument_mustSucceedForCutover = Lens.lens (\SsmDocument' {mustSucceedForCutover} -> mustSucceedForCutover) (\s@SsmDocument' {} a -> s {mustSucceedForCutover = a} :: SsmDocument)
+
+-- | AWS Systems Manager Document parameters.
+ssmDocument_parameters :: Lens.Lens' SsmDocument (Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]))
+ssmDocument_parameters = Lens.lens (\SsmDocument' {parameters} -> parameters) (\s@SsmDocument' {} a -> s {parameters = a} :: SsmDocument) Prelude.. Lens.mapping Lens.coerced
+
+-- | AWS Systems Manager Document timeout seconds.
+ssmDocument_timeoutSeconds :: Lens.Lens' SsmDocument (Prelude.Maybe Prelude.Natural)
+ssmDocument_timeoutSeconds = Lens.lens (\SsmDocument' {timeoutSeconds} -> timeoutSeconds) (\s@SsmDocument' {} a -> s {timeoutSeconds = a} :: SsmDocument)
+
+-- | User-friendly name for the AWS Systems Manager Document.
+ssmDocument_actionName :: Lens.Lens' SsmDocument Prelude.Text
+ssmDocument_actionName = Lens.lens (\SsmDocument' {actionName} -> actionName) (\s@SsmDocument' {} a -> s {actionName = a} :: SsmDocument)
+
+-- | AWS Systems Manager Document name or full ARN.
+ssmDocument_ssmDocumentName :: Lens.Lens' SsmDocument Prelude.Text
+ssmDocument_ssmDocumentName = Lens.lens (\SsmDocument' {ssmDocumentName} -> ssmDocumentName) (\s@SsmDocument' {} a -> s {ssmDocumentName = a} :: SsmDocument)
+
+instance Data.FromJSON SsmDocument where
+  parseJSON =
+    Data.withObject
+      "SsmDocument"
+      ( \x ->
+          SsmDocument'
+            Prelude.<$> (x Data..:? "mustSucceedForCutover")
+            Prelude.<*> (x Data..:? "parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "timeoutSeconds")
+            Prelude.<*> (x Data..: "actionName")
+            Prelude.<*> (x Data..: "ssmDocumentName")
+      )
+
+instance Prelude.Hashable SsmDocument where
+  hashWithSalt _salt SsmDocument' {..} =
+    _salt
+      `Prelude.hashWithSalt` mustSucceedForCutover
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` timeoutSeconds
+      `Prelude.hashWithSalt` actionName
+      `Prelude.hashWithSalt` ssmDocumentName
+
+instance Prelude.NFData SsmDocument where
+  rnf SsmDocument' {..} =
+    Prelude.rnf mustSucceedForCutover
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf timeoutSeconds
+      `Prelude.seq` Prelude.rnf actionName
+      `Prelude.seq` Prelude.rnf ssmDocumentName
+
+instance Data.ToJSON SsmDocument where
+  toJSON SsmDocument' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("mustSucceedForCutover" Data..=)
+              Prelude.<$> mustSucceedForCutover,
+            ("parameters" Data..=) Prelude.<$> parameters,
+            ("timeoutSeconds" Data..=)
+              Prelude.<$> timeoutSeconds,
+            Prelude.Just ("actionName" Data..= actionName),
+            Prelude.Just
+              ("ssmDocumentName" Data..= ssmDocumentName)
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/SsmDocumentType.hs b/gen/Amazonka/MGN/Types/SsmDocumentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SsmDocumentType.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.MGN.Types.SsmDocumentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.SsmDocumentType
+  ( SsmDocumentType
+      ( ..,
+        SsmDocumentType_AUTOMATION,
+        SsmDocumentType_COMMAND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SsmDocumentType = SsmDocumentType'
+  { fromSsmDocumentType ::
+      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 SsmDocumentType_AUTOMATION :: SsmDocumentType
+pattern SsmDocumentType_AUTOMATION = SsmDocumentType' "AUTOMATION"
+
+pattern SsmDocumentType_COMMAND :: SsmDocumentType
+pattern SsmDocumentType_COMMAND = SsmDocumentType' "COMMAND"
+
+{-# COMPLETE
+  SsmDocumentType_AUTOMATION,
+  SsmDocumentType_COMMAND,
+  SsmDocumentType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/SsmParameterStoreParameter.hs b/gen/Amazonka/MGN/Types/SsmParameterStoreParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SsmParameterStoreParameter.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.MGN.Types.SsmParameterStoreParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.SsmParameterStoreParameter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.SsmParameterStoreParameterType
+import qualified Amazonka.Prelude as Prelude
+
+-- | AWS Systems Manager Parameter Store parameter.
+--
+-- /See:/ 'newSsmParameterStoreParameter' smart constructor.
+data SsmParameterStoreParameter = SsmParameterStoreParameter'
+  { -- | AWS Systems Manager Parameter Store parameter name.
+    parameterName :: Prelude.Text,
+    -- | AWS Systems Manager Parameter Store parameter type.
+    parameterType :: SsmParameterStoreParameterType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SsmParameterStoreParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'parameterName', 'ssmParameterStoreParameter_parameterName' - AWS Systems Manager Parameter Store parameter name.
+--
+-- 'parameterType', 'ssmParameterStoreParameter_parameterType' - AWS Systems Manager Parameter Store parameter type.
+newSsmParameterStoreParameter ::
+  -- | 'parameterName'
+  Prelude.Text ->
+  -- | 'parameterType'
+  SsmParameterStoreParameterType ->
+  SsmParameterStoreParameter
+newSsmParameterStoreParameter
+  pParameterName_
+  pParameterType_ =
+    SsmParameterStoreParameter'
+      { parameterName =
+          pParameterName_,
+        parameterType = pParameterType_
+      }
+
+-- | AWS Systems Manager Parameter Store parameter name.
+ssmParameterStoreParameter_parameterName :: Lens.Lens' SsmParameterStoreParameter Prelude.Text
+ssmParameterStoreParameter_parameterName = Lens.lens (\SsmParameterStoreParameter' {parameterName} -> parameterName) (\s@SsmParameterStoreParameter' {} a -> s {parameterName = a} :: SsmParameterStoreParameter)
+
+-- | AWS Systems Manager Parameter Store parameter type.
+ssmParameterStoreParameter_parameterType :: Lens.Lens' SsmParameterStoreParameter SsmParameterStoreParameterType
+ssmParameterStoreParameter_parameterType = Lens.lens (\SsmParameterStoreParameter' {parameterType} -> parameterType) (\s@SsmParameterStoreParameter' {} a -> s {parameterType = a} :: SsmParameterStoreParameter)
+
+instance Data.FromJSON SsmParameterStoreParameter where
+  parseJSON =
+    Data.withObject
+      "SsmParameterStoreParameter"
+      ( \x ->
+          SsmParameterStoreParameter'
+            Prelude.<$> (x Data..: "parameterName")
+            Prelude.<*> (x Data..: "parameterType")
+      )
+
+instance Prelude.Hashable SsmParameterStoreParameter where
+  hashWithSalt _salt SsmParameterStoreParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` parameterName
+      `Prelude.hashWithSalt` parameterType
+
+instance Prelude.NFData SsmParameterStoreParameter where
+  rnf SsmParameterStoreParameter' {..} =
+    Prelude.rnf parameterName
+      `Prelude.seq` Prelude.rnf parameterType
+
+instance Data.ToJSON SsmParameterStoreParameter where
+  toJSON SsmParameterStoreParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("parameterName" Data..= parameterName),
+            Prelude.Just
+              ("parameterType" Data..= parameterType)
+          ]
+      )
diff --git a/gen/Amazonka/MGN/Types/SsmParameterStoreParameterType.hs b/gen/Amazonka/MGN/Types/SsmParameterStoreParameterType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/SsmParameterStoreParameterType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.SsmParameterStoreParameterType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.SsmParameterStoreParameterType
+  ( SsmParameterStoreParameterType
+      ( ..,
+        SsmParameterStoreParameterType_STRING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SsmParameterStoreParameterType = SsmParameterStoreParameterType'
+  { fromSsmParameterStoreParameterType ::
+      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 SsmParameterStoreParameterType_STRING :: SsmParameterStoreParameterType
+pattern SsmParameterStoreParameterType_STRING = SsmParameterStoreParameterType' "STRING"
+
+{-# COMPLETE
+  SsmParameterStoreParameterType_STRING,
+  SsmParameterStoreParameterType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/TargetInstanceTypeRightSizingMethod.hs b/gen/Amazonka/MGN/Types/TargetInstanceTypeRightSizingMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.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/MGN/Types/TemplateActionDocument.hs b/gen/Amazonka/MGN/Types/TemplateActionDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/TemplateActionDocument.hs
@@ -0,0 +1,182 @@
+{-# 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.MGN.Types.TemplateActionDocument
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.TemplateActionDocument where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.SsmParameterStoreParameter
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newTemplateActionDocument' smart constructor.
+data TemplateActionDocument = TemplateActionDocument'
+  { -- | Template post migration custom action ID.
+    actionID :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action name.
+    actionName :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action active status.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | Template post migration custom action document identifier.
+    documentIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action document version.
+    documentVersion :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action must succeed for cutover.
+    mustSucceedForCutover :: Prelude.Maybe Prelude.Bool,
+    -- | Operating system eligible for this template post migration custom
+    -- action.
+    operatingSystem :: Prelude.Maybe Prelude.Text,
+    -- | Template post migration custom action order.
+    order :: Prelude.Maybe Prelude.Natural,
+    -- | Template post migration custom action parameters.
+    parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]),
+    -- | Template post migration custom action timeout in seconds.
+    timeoutSeconds :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateActionDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionID', 'templateActionDocument_actionID' - Template post migration custom action ID.
+--
+-- 'actionName', 'templateActionDocument_actionName' - Template post migration custom action name.
+--
+-- 'active', 'templateActionDocument_active' - Template post migration custom action active status.
+--
+-- 'documentIdentifier', 'templateActionDocument_documentIdentifier' - Template post migration custom action document identifier.
+--
+-- 'documentVersion', 'templateActionDocument_documentVersion' - Template post migration custom action document version.
+--
+-- 'mustSucceedForCutover', 'templateActionDocument_mustSucceedForCutover' - Template post migration custom action must succeed for cutover.
+--
+-- 'operatingSystem', 'templateActionDocument_operatingSystem' - Operating system eligible for this template post migration custom
+-- action.
+--
+-- 'order', 'templateActionDocument_order' - Template post migration custom action order.
+--
+-- 'parameters', 'templateActionDocument_parameters' - Template post migration custom action parameters.
+--
+-- 'timeoutSeconds', 'templateActionDocument_timeoutSeconds' - Template post migration custom action timeout in seconds.
+newTemplateActionDocument ::
+  TemplateActionDocument
+newTemplateActionDocument =
+  TemplateActionDocument'
+    { actionID = Prelude.Nothing,
+      actionName = Prelude.Nothing,
+      active = Prelude.Nothing,
+      documentIdentifier = Prelude.Nothing,
+      documentVersion = Prelude.Nothing,
+      mustSucceedForCutover = Prelude.Nothing,
+      operatingSystem = Prelude.Nothing,
+      order = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      timeoutSeconds = Prelude.Nothing
+    }
+
+-- | Template post migration custom action ID.
+templateActionDocument_actionID :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Text)
+templateActionDocument_actionID = Lens.lens (\TemplateActionDocument' {actionID} -> actionID) (\s@TemplateActionDocument' {} a -> s {actionID = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action name.
+templateActionDocument_actionName :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Text)
+templateActionDocument_actionName = Lens.lens (\TemplateActionDocument' {actionName} -> actionName) (\s@TemplateActionDocument' {} a -> s {actionName = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action active status.
+templateActionDocument_active :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Bool)
+templateActionDocument_active = Lens.lens (\TemplateActionDocument' {active} -> active) (\s@TemplateActionDocument' {} a -> s {active = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action document identifier.
+templateActionDocument_documentIdentifier :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Text)
+templateActionDocument_documentIdentifier = Lens.lens (\TemplateActionDocument' {documentIdentifier} -> documentIdentifier) (\s@TemplateActionDocument' {} a -> s {documentIdentifier = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action document version.
+templateActionDocument_documentVersion :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Text)
+templateActionDocument_documentVersion = Lens.lens (\TemplateActionDocument' {documentVersion} -> documentVersion) (\s@TemplateActionDocument' {} a -> s {documentVersion = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action must succeed for cutover.
+templateActionDocument_mustSucceedForCutover :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Bool)
+templateActionDocument_mustSucceedForCutover = Lens.lens (\TemplateActionDocument' {mustSucceedForCutover} -> mustSucceedForCutover) (\s@TemplateActionDocument' {} a -> s {mustSucceedForCutover = a} :: TemplateActionDocument)
+
+-- | Operating system eligible for this template post migration custom
+-- action.
+templateActionDocument_operatingSystem :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Text)
+templateActionDocument_operatingSystem = Lens.lens (\TemplateActionDocument' {operatingSystem} -> operatingSystem) (\s@TemplateActionDocument' {} a -> s {operatingSystem = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action order.
+templateActionDocument_order :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Natural)
+templateActionDocument_order = Lens.lens (\TemplateActionDocument' {order} -> order) (\s@TemplateActionDocument' {} a -> s {order = a} :: TemplateActionDocument)
+
+-- | Template post migration custom action parameters.
+templateActionDocument_parameters :: Lens.Lens' TemplateActionDocument (Prelude.Maybe (Prelude.HashMap Prelude.Text [SsmParameterStoreParameter]))
+templateActionDocument_parameters = Lens.lens (\TemplateActionDocument' {parameters} -> parameters) (\s@TemplateActionDocument' {} a -> s {parameters = a} :: TemplateActionDocument) Prelude.. Lens.mapping Lens.coerced
+
+-- | Template post migration custom action timeout in seconds.
+templateActionDocument_timeoutSeconds :: Lens.Lens' TemplateActionDocument (Prelude.Maybe Prelude.Natural)
+templateActionDocument_timeoutSeconds = Lens.lens (\TemplateActionDocument' {timeoutSeconds} -> timeoutSeconds) (\s@TemplateActionDocument' {} a -> s {timeoutSeconds = a} :: TemplateActionDocument)
+
+instance Data.FromJSON TemplateActionDocument where
+  parseJSON =
+    Data.withObject
+      "TemplateActionDocument"
+      ( \x ->
+          TemplateActionDocument'
+            Prelude.<$> (x Data..:? "actionID")
+            Prelude.<*> (x Data..:? "actionName")
+            Prelude.<*> (x Data..:? "active")
+            Prelude.<*> (x Data..:? "documentIdentifier")
+            Prelude.<*> (x Data..:? "documentVersion")
+            Prelude.<*> (x Data..:? "mustSucceedForCutover")
+            Prelude.<*> (x Data..:? "operatingSystem")
+            Prelude.<*> (x Data..:? "order")
+            Prelude.<*> (x Data..:? "parameters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "timeoutSeconds")
+      )
+
+instance Prelude.Hashable TemplateActionDocument where
+  hashWithSalt _salt TemplateActionDocument' {..} =
+    _salt
+      `Prelude.hashWithSalt` actionID
+      `Prelude.hashWithSalt` actionName
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` documentIdentifier
+      `Prelude.hashWithSalt` documentVersion
+      `Prelude.hashWithSalt` mustSucceedForCutover
+      `Prelude.hashWithSalt` operatingSystem
+      `Prelude.hashWithSalt` order
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` timeoutSeconds
+
+instance Prelude.NFData TemplateActionDocument where
+  rnf TemplateActionDocument' {..} =
+    Prelude.rnf actionID
+      `Prelude.seq` Prelude.rnf actionName
+      `Prelude.seq` Prelude.rnf active
+      `Prelude.seq` Prelude.rnf documentIdentifier
+      `Prelude.seq` Prelude.rnf documentVersion
+      `Prelude.seq` Prelude.rnf mustSucceedForCutover
+      `Prelude.seq` Prelude.rnf operatingSystem
+      `Prelude.seq` Prelude.rnf order
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf timeoutSeconds
diff --git a/gen/Amazonka/MGN/Types/TemplateActionsRequestFilters.hs b/gen/Amazonka/MGN/Types/TemplateActionsRequestFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/TemplateActionsRequestFilters.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.MGN.Types.TemplateActionsRequestFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.TemplateActionsRequestFilters 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
+
+-- | Template post migration custom action filters.
+--
+-- /See:/ 'newTemplateActionsRequestFilters' smart constructor.
+data TemplateActionsRequestFilters = TemplateActionsRequestFilters'
+  { -- | Action IDs to filter template post migration custom actions by.
+    actionIDs :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateActionsRequestFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actionIDs', 'templateActionsRequestFilters_actionIDs' - Action IDs to filter template post migration custom actions by.
+newTemplateActionsRequestFilters ::
+  TemplateActionsRequestFilters
+newTemplateActionsRequestFilters =
+  TemplateActionsRequestFilters'
+    { actionIDs =
+        Prelude.Nothing
+    }
+
+-- | Action IDs to filter template post migration custom actions by.
+templateActionsRequestFilters_actionIDs :: Lens.Lens' TemplateActionsRequestFilters (Prelude.Maybe [Prelude.Text])
+templateActionsRequestFilters_actionIDs = Lens.lens (\TemplateActionsRequestFilters' {actionIDs} -> actionIDs) (\s@TemplateActionsRequestFilters' {} a -> s {actionIDs = a} :: TemplateActionsRequestFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    TemplateActionsRequestFilters
+  where
+  hashWithSalt _salt TemplateActionsRequestFilters' {..} =
+    _salt `Prelude.hashWithSalt` actionIDs
+
+instance Prelude.NFData TemplateActionsRequestFilters where
+  rnf TemplateActionsRequestFilters' {..} =
+    Prelude.rnf actionIDs
+
+instance Data.ToJSON TemplateActionsRequestFilters where
+  toJSON TemplateActionsRequestFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("actionIDs" Data..=) Prelude.<$> actionIDs]
+      )
diff --git a/gen/Amazonka/MGN/Types/VcenterClient.hs b/gen/Amazonka/MGN/Types/VcenterClient.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/VcenterClient.hs
@@ -0,0 +1,159 @@
+{-# 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.MGN.Types.VcenterClient
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.VcenterClient 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
+
+-- | vCenter client.
+--
+-- /See:/ 'newVcenterClient' smart constructor.
+data VcenterClient = VcenterClient'
+  { -- | Arn of vCenter client.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Datacenter name of vCenter client.
+    datacenterName :: Prelude.Maybe Prelude.Text,
+    -- | Hostname of vCenter client .
+    hostname :: Prelude.Maybe Prelude.Text,
+    -- | Last seen time of vCenter client.
+    lastSeenDatetime :: Prelude.Maybe Prelude.Text,
+    -- | Tags for Source Server of vCenter client.
+    sourceServerTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Tags for vCenter client.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | ID of vCenter client.
+    vcenterClientID :: Prelude.Maybe Prelude.Text,
+    -- | Vcenter UUID of vCenter client.
+    vcenterUUID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VcenterClient' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'vcenterClient_arn' - Arn of vCenter client.
+--
+-- 'datacenterName', 'vcenterClient_datacenterName' - Datacenter name of vCenter client.
+--
+-- 'hostname', 'vcenterClient_hostname' - Hostname of vCenter client .
+--
+-- 'lastSeenDatetime', 'vcenterClient_lastSeenDatetime' - Last seen time of vCenter client.
+--
+-- 'sourceServerTags', 'vcenterClient_sourceServerTags' - Tags for Source Server of vCenter client.
+--
+-- 'tags', 'vcenterClient_tags' - Tags for vCenter client.
+--
+-- 'vcenterClientID', 'vcenterClient_vcenterClientID' - ID of vCenter client.
+--
+-- 'vcenterUUID', 'vcenterClient_vcenterUUID' - Vcenter UUID of vCenter client.
+newVcenterClient ::
+  VcenterClient
+newVcenterClient =
+  VcenterClient'
+    { arn = Prelude.Nothing,
+      datacenterName = Prelude.Nothing,
+      hostname = Prelude.Nothing,
+      lastSeenDatetime = Prelude.Nothing,
+      sourceServerTags = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vcenterClientID = Prelude.Nothing,
+      vcenterUUID = Prelude.Nothing
+    }
+
+-- | Arn of vCenter client.
+vcenterClient_arn :: Lens.Lens' VcenterClient (Prelude.Maybe Prelude.Text)
+vcenterClient_arn = Lens.lens (\VcenterClient' {arn} -> arn) (\s@VcenterClient' {} a -> s {arn = a} :: VcenterClient)
+
+-- | Datacenter name of vCenter client.
+vcenterClient_datacenterName :: Lens.Lens' VcenterClient (Prelude.Maybe Prelude.Text)
+vcenterClient_datacenterName = Lens.lens (\VcenterClient' {datacenterName} -> datacenterName) (\s@VcenterClient' {} a -> s {datacenterName = a} :: VcenterClient)
+
+-- | Hostname of vCenter client .
+vcenterClient_hostname :: Lens.Lens' VcenterClient (Prelude.Maybe Prelude.Text)
+vcenterClient_hostname = Lens.lens (\VcenterClient' {hostname} -> hostname) (\s@VcenterClient' {} a -> s {hostname = a} :: VcenterClient)
+
+-- | Last seen time of vCenter client.
+vcenterClient_lastSeenDatetime :: Lens.Lens' VcenterClient (Prelude.Maybe Prelude.Text)
+vcenterClient_lastSeenDatetime = Lens.lens (\VcenterClient' {lastSeenDatetime} -> lastSeenDatetime) (\s@VcenterClient' {} a -> s {lastSeenDatetime = a} :: VcenterClient)
+
+-- | Tags for Source Server of vCenter client.
+vcenterClient_sourceServerTags :: Lens.Lens' VcenterClient (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+vcenterClient_sourceServerTags = Lens.lens (\VcenterClient' {sourceServerTags} -> sourceServerTags) (\s@VcenterClient' {} a -> s {sourceServerTags = a} :: VcenterClient) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Tags for vCenter client.
+vcenterClient_tags :: Lens.Lens' VcenterClient (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+vcenterClient_tags = Lens.lens (\VcenterClient' {tags} -> tags) (\s@VcenterClient' {} a -> s {tags = a} :: VcenterClient) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | ID of vCenter client.
+vcenterClient_vcenterClientID :: Lens.Lens' VcenterClient (Prelude.Maybe Prelude.Text)
+vcenterClient_vcenterClientID = Lens.lens (\VcenterClient' {vcenterClientID} -> vcenterClientID) (\s@VcenterClient' {} a -> s {vcenterClientID = a} :: VcenterClient)
+
+-- | Vcenter UUID of vCenter client.
+vcenterClient_vcenterUUID :: Lens.Lens' VcenterClient (Prelude.Maybe Prelude.Text)
+vcenterClient_vcenterUUID = Lens.lens (\VcenterClient' {vcenterUUID} -> vcenterUUID) (\s@VcenterClient' {} a -> s {vcenterUUID = a} :: VcenterClient)
+
+instance Data.FromJSON VcenterClient where
+  parseJSON =
+    Data.withObject
+      "VcenterClient"
+      ( \x ->
+          VcenterClient'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "datacenterName")
+            Prelude.<*> (x Data..:? "hostname")
+            Prelude.<*> (x Data..:? "lastSeenDatetime")
+            Prelude.<*> ( x
+                            Data..:? "sourceServerTags"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "vcenterClientID")
+            Prelude.<*> (x Data..:? "vcenterUUID")
+      )
+
+instance Prelude.Hashable VcenterClient where
+  hashWithSalt _salt VcenterClient' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` datacenterName
+      `Prelude.hashWithSalt` hostname
+      `Prelude.hashWithSalt` lastSeenDatetime
+      `Prelude.hashWithSalt` sourceServerTags
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vcenterClientID
+      `Prelude.hashWithSalt` vcenterUUID
+
+instance Prelude.NFData VcenterClient where
+  rnf VcenterClient' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf datacenterName
+      `Prelude.seq` Prelude.rnf hostname
+      `Prelude.seq` Prelude.rnf lastSeenDatetime
+      `Prelude.seq` Prelude.rnf sourceServerTags
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vcenterClientID
+      `Prelude.seq` Prelude.rnf vcenterUUID
diff --git a/gen/Amazonka/MGN/Types/VolumeType.hs b/gen/Amazonka/MGN/Types/VolumeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/VolumeType.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.MGN.Types.VolumeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.VolumeType
+  ( VolumeType
+      ( ..,
+        VolumeType_Gp2,
+        VolumeType_Gp3,
+        VolumeType_Io1,
+        VolumeType_Io2,
+        VolumeType_Sc1,
+        VolumeType_St1,
+        VolumeType_Standard
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeType = VolumeType'
+  { fromVolumeType ::
+      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 VolumeType_Gp2 :: VolumeType
+pattern VolumeType_Gp2 = VolumeType' "gp2"
+
+pattern VolumeType_Gp3 :: VolumeType
+pattern VolumeType_Gp3 = VolumeType' "gp3"
+
+pattern VolumeType_Io1 :: VolumeType
+pattern VolumeType_Io1 = VolumeType' "io1"
+
+pattern VolumeType_Io2 :: VolumeType
+pattern VolumeType_Io2 = VolumeType' "io2"
+
+pattern VolumeType_Sc1 :: VolumeType
+pattern VolumeType_Sc1 = VolumeType' "sc1"
+
+pattern VolumeType_St1 :: VolumeType
+pattern VolumeType_St1 = VolumeType' "st1"
+
+pattern VolumeType_Standard :: VolumeType
+pattern VolumeType_Standard = VolumeType' "standard"
+
+{-# COMPLETE
+  VolumeType_Gp2,
+  VolumeType_Gp3,
+  VolumeType_Io1,
+  VolumeType_Io2,
+  VolumeType_Sc1,
+  VolumeType_St1,
+  VolumeType_Standard,
+  VolumeType'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/Wave.hs b/gen/Amazonka/MGN/Types/Wave.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/Wave.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.MGN.Types.Wave
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.Wave where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.WaveAggregatedStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newWave' smart constructor.
+data Wave = Wave'
+  { -- | Wave ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Wave creation dateTime.
+    creationDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Wave description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Wave archival status.
+    isArchived :: Prelude.Maybe Prelude.Bool,
+    -- | Wave last modified dateTime.
+    lastModifiedDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Wave name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Wave tags.
+    tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Wave aggregated status.
+    waveAggregatedStatus :: Prelude.Maybe WaveAggregatedStatus,
+    -- | Wave ID.
+    waveID :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Wave' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'wave_arn' - Wave ARN.
+--
+-- 'creationDateTime', 'wave_creationDateTime' - Wave creation dateTime.
+--
+-- 'description', 'wave_description' - Wave description.
+--
+-- 'isArchived', 'wave_isArchived' - Wave archival status.
+--
+-- 'lastModifiedDateTime', 'wave_lastModifiedDateTime' - Wave last modified dateTime.
+--
+-- 'name', 'wave_name' - Wave name.
+--
+-- 'tags', 'wave_tags' - Wave tags.
+--
+-- 'waveAggregatedStatus', 'wave_waveAggregatedStatus' - Wave aggregated status.
+--
+-- 'waveID', 'wave_waveID' - Wave ID.
+newWave ::
+  Wave
+newWave =
+  Wave'
+    { arn = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      isArchived = Prelude.Nothing,
+      lastModifiedDateTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      waveAggregatedStatus = Prelude.Nothing,
+      waveID = Prelude.Nothing
+    }
+
+-- | Wave ARN.
+wave_arn :: Lens.Lens' Wave (Prelude.Maybe Prelude.Text)
+wave_arn = Lens.lens (\Wave' {arn} -> arn) (\s@Wave' {} a -> s {arn = a} :: Wave)
+
+-- | Wave creation dateTime.
+wave_creationDateTime :: Lens.Lens' Wave (Prelude.Maybe Prelude.Text)
+wave_creationDateTime = Lens.lens (\Wave' {creationDateTime} -> creationDateTime) (\s@Wave' {} a -> s {creationDateTime = a} :: Wave)
+
+-- | Wave description.
+wave_description :: Lens.Lens' Wave (Prelude.Maybe Prelude.Text)
+wave_description = Lens.lens (\Wave' {description} -> description) (\s@Wave' {} a -> s {description = a} :: Wave)
+
+-- | Wave archival status.
+wave_isArchived :: Lens.Lens' Wave (Prelude.Maybe Prelude.Bool)
+wave_isArchived = Lens.lens (\Wave' {isArchived} -> isArchived) (\s@Wave' {} a -> s {isArchived = a} :: Wave)
+
+-- | Wave last modified dateTime.
+wave_lastModifiedDateTime :: Lens.Lens' Wave (Prelude.Maybe Prelude.Text)
+wave_lastModifiedDateTime = Lens.lens (\Wave' {lastModifiedDateTime} -> lastModifiedDateTime) (\s@Wave' {} a -> s {lastModifiedDateTime = a} :: Wave)
+
+-- | Wave name.
+wave_name :: Lens.Lens' Wave (Prelude.Maybe Prelude.Text)
+wave_name = Lens.lens (\Wave' {name} -> name) (\s@Wave' {} a -> s {name = a} :: Wave)
+
+-- | Wave tags.
+wave_tags :: Lens.Lens' Wave (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+wave_tags = Lens.lens (\Wave' {tags} -> tags) (\s@Wave' {} a -> s {tags = a} :: Wave) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Wave aggregated status.
+wave_waveAggregatedStatus :: Lens.Lens' Wave (Prelude.Maybe WaveAggregatedStatus)
+wave_waveAggregatedStatus = Lens.lens (\Wave' {waveAggregatedStatus} -> waveAggregatedStatus) (\s@Wave' {} a -> s {waveAggregatedStatus = a} :: Wave)
+
+-- | Wave ID.
+wave_waveID :: Lens.Lens' Wave (Prelude.Maybe Prelude.Text)
+wave_waveID = Lens.lens (\Wave' {waveID} -> waveID) (\s@Wave' {} a -> s {waveID = a} :: Wave)
+
+instance Data.FromJSON Wave where
+  parseJSON =
+    Data.withObject
+      "Wave"
+      ( \x ->
+          Wave'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "isArchived")
+            Prelude.<*> (x Data..:? "lastModifiedDateTime")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "waveAggregatedStatus")
+            Prelude.<*> (x Data..:? "waveID")
+      )
+
+instance Prelude.Hashable Wave where
+  hashWithSalt _salt Wave' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` isArchived
+      `Prelude.hashWithSalt` lastModifiedDateTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` waveAggregatedStatus
+      `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData Wave where
+  rnf Wave' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf isArchived
+      `Prelude.seq` Prelude.rnf lastModifiedDateTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf waveAggregatedStatus
+      `Prelude.seq` Prelude.rnf waveID
diff --git a/gen/Amazonka/MGN/Types/WaveAggregatedStatus.hs b/gen/Amazonka/MGN/Types/WaveAggregatedStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/WaveAggregatedStatus.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.Types.WaveAggregatedStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.WaveAggregatedStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types.WaveHealthStatus
+import Amazonka.MGN.Types.WaveProgressStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Wave aggregated status.
+--
+-- /See:/ 'newWaveAggregatedStatus' smart constructor.
+data WaveAggregatedStatus = WaveAggregatedStatus'
+  { -- | Wave aggregated status health status.
+    healthStatus :: Prelude.Maybe WaveHealthStatus,
+    -- | Wave aggregated status last update dateTime.
+    lastUpdateDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Wave aggregated status progress status.
+    progressStatus :: Prelude.Maybe WaveProgressStatus,
+    -- | DateTime marking when the first source server in the wave started
+    -- replication.
+    replicationStartedDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Wave aggregated status total applications amount.
+    totalApplications :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WaveAggregatedStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'healthStatus', 'waveAggregatedStatus_healthStatus' - Wave aggregated status health status.
+--
+-- 'lastUpdateDateTime', 'waveAggregatedStatus_lastUpdateDateTime' - Wave aggregated status last update dateTime.
+--
+-- 'progressStatus', 'waveAggregatedStatus_progressStatus' - Wave aggregated status progress status.
+--
+-- 'replicationStartedDateTime', 'waveAggregatedStatus_replicationStartedDateTime' - DateTime marking when the first source server in the wave started
+-- replication.
+--
+-- 'totalApplications', 'waveAggregatedStatus_totalApplications' - Wave aggregated status total applications amount.
+newWaveAggregatedStatus ::
+  WaveAggregatedStatus
+newWaveAggregatedStatus =
+  WaveAggregatedStatus'
+    { healthStatus =
+        Prelude.Nothing,
+      lastUpdateDateTime = Prelude.Nothing,
+      progressStatus = Prelude.Nothing,
+      replicationStartedDateTime = Prelude.Nothing,
+      totalApplications = Prelude.Nothing
+    }
+
+-- | Wave aggregated status health status.
+waveAggregatedStatus_healthStatus :: Lens.Lens' WaveAggregatedStatus (Prelude.Maybe WaveHealthStatus)
+waveAggregatedStatus_healthStatus = Lens.lens (\WaveAggregatedStatus' {healthStatus} -> healthStatus) (\s@WaveAggregatedStatus' {} a -> s {healthStatus = a} :: WaveAggregatedStatus)
+
+-- | Wave aggregated status last update dateTime.
+waveAggregatedStatus_lastUpdateDateTime :: Lens.Lens' WaveAggregatedStatus (Prelude.Maybe Prelude.Text)
+waveAggregatedStatus_lastUpdateDateTime = Lens.lens (\WaveAggregatedStatus' {lastUpdateDateTime} -> lastUpdateDateTime) (\s@WaveAggregatedStatus' {} a -> s {lastUpdateDateTime = a} :: WaveAggregatedStatus)
+
+-- | Wave aggregated status progress status.
+waveAggregatedStatus_progressStatus :: Lens.Lens' WaveAggregatedStatus (Prelude.Maybe WaveProgressStatus)
+waveAggregatedStatus_progressStatus = Lens.lens (\WaveAggregatedStatus' {progressStatus} -> progressStatus) (\s@WaveAggregatedStatus' {} a -> s {progressStatus = a} :: WaveAggregatedStatus)
+
+-- | DateTime marking when the first source server in the wave started
+-- replication.
+waveAggregatedStatus_replicationStartedDateTime :: Lens.Lens' WaveAggregatedStatus (Prelude.Maybe Prelude.Text)
+waveAggregatedStatus_replicationStartedDateTime = Lens.lens (\WaveAggregatedStatus' {replicationStartedDateTime} -> replicationStartedDateTime) (\s@WaveAggregatedStatus' {} a -> s {replicationStartedDateTime = a} :: WaveAggregatedStatus)
+
+-- | Wave aggregated status total applications amount.
+waveAggregatedStatus_totalApplications :: Lens.Lens' WaveAggregatedStatus (Prelude.Maybe Prelude.Natural)
+waveAggregatedStatus_totalApplications = Lens.lens (\WaveAggregatedStatus' {totalApplications} -> totalApplications) (\s@WaveAggregatedStatus' {} a -> s {totalApplications = a} :: WaveAggregatedStatus)
+
+instance Data.FromJSON WaveAggregatedStatus where
+  parseJSON =
+    Data.withObject
+      "WaveAggregatedStatus"
+      ( \x ->
+          WaveAggregatedStatus'
+            Prelude.<$> (x Data..:? "healthStatus")
+            Prelude.<*> (x Data..:? "lastUpdateDateTime")
+            Prelude.<*> (x Data..:? "progressStatus")
+            Prelude.<*> (x Data..:? "replicationStartedDateTime")
+            Prelude.<*> (x Data..:? "totalApplications")
+      )
+
+instance Prelude.Hashable WaveAggregatedStatus where
+  hashWithSalt _salt WaveAggregatedStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` healthStatus
+      `Prelude.hashWithSalt` lastUpdateDateTime
+      `Prelude.hashWithSalt` progressStatus
+      `Prelude.hashWithSalt` replicationStartedDateTime
+      `Prelude.hashWithSalt` totalApplications
+
+instance Prelude.NFData WaveAggregatedStatus where
+  rnf WaveAggregatedStatus' {..} =
+    Prelude.rnf healthStatus
+      `Prelude.seq` Prelude.rnf lastUpdateDateTime
+      `Prelude.seq` Prelude.rnf progressStatus
+      `Prelude.seq` Prelude.rnf replicationStartedDateTime
+      `Prelude.seq` Prelude.rnf totalApplications
diff --git a/gen/Amazonka/MGN/Types/WaveHealthStatus.hs b/gen/Amazonka/MGN/Types/WaveHealthStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/WaveHealthStatus.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.MGN.Types.WaveHealthStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.WaveHealthStatus
+  ( WaveHealthStatus
+      ( ..,
+        WaveHealthStatus_ERROR,
+        WaveHealthStatus_HEALTHY,
+        WaveHealthStatus_LAGGING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WaveHealthStatus = WaveHealthStatus'
+  { fromWaveHealthStatus ::
+      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 WaveHealthStatus_ERROR :: WaveHealthStatus
+pattern WaveHealthStatus_ERROR = WaveHealthStatus' "ERROR"
+
+pattern WaveHealthStatus_HEALTHY :: WaveHealthStatus
+pattern WaveHealthStatus_HEALTHY = WaveHealthStatus' "HEALTHY"
+
+pattern WaveHealthStatus_LAGGING :: WaveHealthStatus
+pattern WaveHealthStatus_LAGGING = WaveHealthStatus' "LAGGING"
+
+{-# COMPLETE
+  WaveHealthStatus_ERROR,
+  WaveHealthStatus_HEALTHY,
+  WaveHealthStatus_LAGGING,
+  WaveHealthStatus'
+  #-}
diff --git a/gen/Amazonka/MGN/Types/WaveProgressStatus.hs b/gen/Amazonka/MGN/Types/WaveProgressStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/Types/WaveProgressStatus.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.MGN.Types.WaveProgressStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.MGN.Types.WaveProgressStatus
+  ( WaveProgressStatus
+      ( ..,
+        WaveProgressStatus_COMPLETED,
+        WaveProgressStatus_IN_PROGRESS,
+        WaveProgressStatus_NOT_STARTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WaveProgressStatus = WaveProgressStatus'
+  { fromWaveProgressStatus ::
+      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 WaveProgressStatus_COMPLETED :: WaveProgressStatus
+pattern WaveProgressStatus_COMPLETED = WaveProgressStatus' "COMPLETED"
+
+pattern WaveProgressStatus_IN_PROGRESS :: WaveProgressStatus
+pattern WaveProgressStatus_IN_PROGRESS = WaveProgressStatus' "IN_PROGRESS"
+
+pattern WaveProgressStatus_NOT_STARTED :: WaveProgressStatus
+pattern WaveProgressStatus_NOT_STARTED = WaveProgressStatus' "NOT_STARTED"
+
+{-# COMPLETE
+  WaveProgressStatus_COMPLETED,
+  WaveProgressStatus_IN_PROGRESS,
+  WaveProgressStatus_NOT_STARTED,
+  WaveProgressStatus'
+  #-}
diff --git a/gen/Amazonka/MGN/UnarchiveApplication.hs b/gen/Amazonka/MGN/UnarchiveApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UnarchiveApplication.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.UnarchiveApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Unarchive application.
+module Amazonka.MGN.UnarchiveApplication
+  ( -- * Creating a Request
+    UnarchiveApplication (..),
+    newUnarchiveApplication,
+
+    -- * Request Lenses
+    unarchiveApplication_applicationID,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUnarchiveApplication' smart constructor.
+data UnarchiveApplication = UnarchiveApplication'
+  { -- | Application ID.
+    applicationID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnarchiveApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationID', 'unarchiveApplication_applicationID' - Application ID.
+newUnarchiveApplication ::
+  -- | 'applicationID'
+  Prelude.Text ->
+  UnarchiveApplication
+newUnarchiveApplication pApplicationID_ =
+  UnarchiveApplication'
+    { applicationID =
+        pApplicationID_
+    }
+
+-- | Application ID.
+unarchiveApplication_applicationID :: Lens.Lens' UnarchiveApplication Prelude.Text
+unarchiveApplication_applicationID = Lens.lens (\UnarchiveApplication' {applicationID} -> applicationID) (\s@UnarchiveApplication' {} a -> s {applicationID = a} :: UnarchiveApplication)
+
+instance Core.AWSRequest UnarchiveApplication where
+  type AWSResponse UnarchiveApplication = Application
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UnarchiveApplication where
+  hashWithSalt _salt UnarchiveApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationID
+
+instance Prelude.NFData UnarchiveApplication where
+  rnf UnarchiveApplication' {..} =
+    Prelude.rnf applicationID
+
+instance Data.ToHeaders UnarchiveApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UnarchiveApplication where
+  toJSON UnarchiveApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("applicationID" Data..= applicationID)
+          ]
+      )
+
+instance Data.ToPath UnarchiveApplication where
+  toPath = Prelude.const "/UnarchiveApplication"
+
+instance Data.ToQuery UnarchiveApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/UnarchiveWave.hs b/gen/Amazonka/MGN/UnarchiveWave.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UnarchiveWave.hs
@@ -0,0 +1,121 @@
+{-# 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.MGN.UnarchiveWave
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Unarchive wave.
+module Amazonka.MGN.UnarchiveWave
+  ( -- * Creating a Request
+    UnarchiveWave (..),
+    newUnarchiveWave,
+
+    -- * Request Lenses
+    unarchiveWave_waveID,
+
+    -- * Destructuring the Response
+    Wave (..),
+    newWave,
+
+    -- * Response Lenses
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUnarchiveWave' smart constructor.
+data UnarchiveWave = UnarchiveWave'
+  { -- | Wave ID.
+    waveID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnarchiveWave' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'waveID', 'unarchiveWave_waveID' - Wave ID.
+newUnarchiveWave ::
+  -- | 'waveID'
+  Prelude.Text ->
+  UnarchiveWave
+newUnarchiveWave pWaveID_ =
+  UnarchiveWave' {waveID = pWaveID_}
+
+-- | Wave ID.
+unarchiveWave_waveID :: Lens.Lens' UnarchiveWave Prelude.Text
+unarchiveWave_waveID = Lens.lens (\UnarchiveWave' {waveID} -> waveID) (\s@UnarchiveWave' {} a -> s {waveID = a} :: UnarchiveWave)
+
+instance Core.AWSRequest UnarchiveWave where
+  type AWSResponse UnarchiveWave = Wave
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UnarchiveWave where
+  hashWithSalt _salt UnarchiveWave' {..} =
+    _salt `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData UnarchiveWave where
+  rnf UnarchiveWave' {..} = Prelude.rnf waveID
+
+instance Data.ToHeaders UnarchiveWave where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UnarchiveWave where
+  toJSON UnarchiveWave' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("waveID" Data..= waveID)]
+      )
+
+instance Data.ToPath UnarchiveWave where
+  toPath = Prelude.const "/UnarchiveWave"
+
+instance Data.ToQuery UnarchiveWave where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/UntagResource.hs b/gen/Amazonka/MGN/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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 Application
+-- Migration Service resources.
+module Amazonka.MGN.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.MGN.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'
+  { -- | Untag resource by ARN.
+    resourceArn :: Prelude.Text,
+    -- | Untag resource by Keys.
+    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' - Untag resource by ARN.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - Untag resource by Keys.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | Untag resource by ARN.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | Untag resource by Keys.
+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/MGN/UpdateApplication.hs b/gen/Amazonka/MGN/UpdateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateApplication.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.UpdateApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update application.
+module Amazonka.MGN.UpdateApplication
+  ( -- * Creating a Request
+    UpdateApplication (..),
+    newUpdateApplication,
+
+    -- * Request Lenses
+    updateApplication_description,
+    updateApplication_name,
+    updateApplication_applicationID,
+
+    -- * Destructuring the Response
+    Application (..),
+    newApplication,
+
+    -- * Response Lenses
+    application_applicationAggregatedStatus,
+    application_applicationID,
+    application_arn,
+    application_creationDateTime,
+    application_description,
+    application_isArchived,
+    application_lastModifiedDateTime,
+    application_name,
+    application_tags,
+    application_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateApplication' smart constructor.
+data UpdateApplication = UpdateApplication'
+  { -- | Application description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Application name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Application ID.
+    applicationID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateApplication_description' - Application description.
+--
+-- 'name', 'updateApplication_name' - Application name.
+--
+-- 'applicationID', 'updateApplication_applicationID' - Application ID.
+newUpdateApplication ::
+  -- | 'applicationID'
+  Prelude.Text ->
+  UpdateApplication
+newUpdateApplication pApplicationID_ =
+  UpdateApplication'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      applicationID = pApplicationID_
+    }
+
+-- | Application description.
+updateApplication_description :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_description = Lens.lens (\UpdateApplication' {description} -> description) (\s@UpdateApplication' {} a -> s {description = a} :: UpdateApplication)
+
+-- | Application name.
+updateApplication_name :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_name = Lens.lens (\UpdateApplication' {name} -> name) (\s@UpdateApplication' {} a -> s {name = a} :: UpdateApplication)
+
+-- | Application ID.
+updateApplication_applicationID :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_applicationID = Lens.lens (\UpdateApplication' {applicationID} -> applicationID) (\s@UpdateApplication' {} a -> s {applicationID = a} :: UpdateApplication)
+
+instance Core.AWSRequest UpdateApplication where
+  type AWSResponse UpdateApplication = Application
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateApplication where
+  hashWithSalt _salt UpdateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` applicationID
+
+instance Prelude.NFData UpdateApplication where
+  rnf UpdateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf applicationID
+
+instance Data.ToHeaders UpdateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApplication where
+  toJSON UpdateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just
+              ("applicationID" Data..= applicationID)
+          ]
+      )
+
+instance Data.ToPath UpdateApplication where
+  toPath = Prelude.const "/UpdateApplication"
+
+instance Data.ToQuery UpdateApplication where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/UpdateLaunchConfiguration.hs b/gen/Amazonka/MGN/UpdateLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateLaunchConfiguration.hs
@@ -0,0 +1,268 @@
+{-# 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.MGN.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 multiple LaunchConfigurations by Source Server ID.
+module Amazonka.MGN.UpdateLaunchConfiguration
+  ( -- * Creating a Request
+    UpdateLaunchConfiguration (..),
+    newUpdateLaunchConfiguration,
+
+    -- * Request Lenses
+    updateLaunchConfiguration_bootMode,
+    updateLaunchConfiguration_copyPrivateIp,
+    updateLaunchConfiguration_copyTags,
+    updateLaunchConfiguration_enableMapAutoTagging,
+    updateLaunchConfiguration_launchDisposition,
+    updateLaunchConfiguration_licensing,
+    updateLaunchConfiguration_mapAutoTaggingMpeID,
+    updateLaunchConfiguration_name,
+    updateLaunchConfiguration_postLaunchActions,
+    updateLaunchConfiguration_targetInstanceTypeRightSizingMethod,
+    updateLaunchConfiguration_sourceServerID,
+
+    -- * Destructuring the Response
+    LaunchConfiguration (..),
+    newLaunchConfiguration,
+
+    -- * Response Lenses
+    launchConfiguration_bootMode,
+    launchConfiguration_copyPrivateIp,
+    launchConfiguration_copyTags,
+    launchConfiguration_ec2LaunchTemplateID,
+    launchConfiguration_enableMapAutoTagging,
+    launchConfiguration_launchDisposition,
+    launchConfiguration_licensing,
+    launchConfiguration_mapAutoTaggingMpeID,
+    launchConfiguration_name,
+    launchConfiguration_postLaunchActions,
+    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.MGN.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'
+  { -- | Update Launch configuration boot mode request.
+    bootMode :: Prelude.Maybe BootMode,
+    -- | Update Launch configuration copy Private IP request.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Update Launch configuration copy Tags request.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | Enable map auto tagging.
+    enableMapAutoTagging :: Prelude.Maybe Prelude.Bool,
+    -- | Update Launch configuration launch disposition request.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    -- | Update Launch configuration licensing request.
+    licensing :: Prelude.Maybe Licensing,
+    -- | Launch configuration map auto tagging MPE ID.
+    mapAutoTaggingMpeID :: Prelude.Maybe Prelude.Text,
+    -- | Update Launch configuration name request.
+    name :: Prelude.Maybe Prelude.Text,
+    postLaunchActions :: Prelude.Maybe PostLaunchActions,
+    -- | Update Launch configuration Target instance right sizing request.
+    targetInstanceTypeRightSizingMethod :: Prelude.Maybe TargetInstanceTypeRightSizingMethod,
+    -- | Update Launch configuration by Source Server ID request.
+    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:
+--
+-- 'bootMode', 'updateLaunchConfiguration_bootMode' - Update Launch configuration boot mode request.
+--
+-- 'copyPrivateIp', 'updateLaunchConfiguration_copyPrivateIp' - Update Launch configuration copy Private IP request.
+--
+-- 'copyTags', 'updateLaunchConfiguration_copyTags' - Update Launch configuration copy Tags request.
+--
+-- 'enableMapAutoTagging', 'updateLaunchConfiguration_enableMapAutoTagging' - Enable map auto tagging.
+--
+-- 'launchDisposition', 'updateLaunchConfiguration_launchDisposition' - Update Launch configuration launch disposition request.
+--
+-- 'licensing', 'updateLaunchConfiguration_licensing' - Update Launch configuration licensing request.
+--
+-- 'mapAutoTaggingMpeID', 'updateLaunchConfiguration_mapAutoTaggingMpeID' - Launch configuration map auto tagging MPE ID.
+--
+-- 'name', 'updateLaunchConfiguration_name' - Update Launch configuration name request.
+--
+-- 'postLaunchActions', 'updateLaunchConfiguration_postLaunchActions' - Undocumented member.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'updateLaunchConfiguration_targetInstanceTypeRightSizingMethod' - Update Launch configuration Target instance right sizing request.
+--
+-- 'sourceServerID', 'updateLaunchConfiguration_sourceServerID' - Update Launch configuration by Source Server ID request.
+newUpdateLaunchConfiguration ::
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  UpdateLaunchConfiguration
+newUpdateLaunchConfiguration pSourceServerID_ =
+  UpdateLaunchConfiguration'
+    { bootMode =
+        Prelude.Nothing,
+      copyPrivateIp = Prelude.Nothing,
+      copyTags = Prelude.Nothing,
+      enableMapAutoTagging = Prelude.Nothing,
+      launchDisposition = Prelude.Nothing,
+      licensing = Prelude.Nothing,
+      mapAutoTaggingMpeID = Prelude.Nothing,
+      name = Prelude.Nothing,
+      postLaunchActions = Prelude.Nothing,
+      targetInstanceTypeRightSizingMethod =
+        Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | Update Launch configuration boot mode request.
+updateLaunchConfiguration_bootMode :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe BootMode)
+updateLaunchConfiguration_bootMode = Lens.lens (\UpdateLaunchConfiguration' {bootMode} -> bootMode) (\s@UpdateLaunchConfiguration' {} a -> s {bootMode = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration copy Private IP request.
+updateLaunchConfiguration_copyPrivateIp :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+updateLaunchConfiguration_copyPrivateIp = Lens.lens (\UpdateLaunchConfiguration' {copyPrivateIp} -> copyPrivateIp) (\s@UpdateLaunchConfiguration' {} a -> s {copyPrivateIp = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration copy Tags request.
+updateLaunchConfiguration_copyTags :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+updateLaunchConfiguration_copyTags = Lens.lens (\UpdateLaunchConfiguration' {copyTags} -> copyTags) (\s@UpdateLaunchConfiguration' {} a -> s {copyTags = a} :: UpdateLaunchConfiguration)
+
+-- | Enable map auto tagging.
+updateLaunchConfiguration_enableMapAutoTagging :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+updateLaunchConfiguration_enableMapAutoTagging = Lens.lens (\UpdateLaunchConfiguration' {enableMapAutoTagging} -> enableMapAutoTagging) (\s@UpdateLaunchConfiguration' {} a -> s {enableMapAutoTagging = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration launch disposition request.
+updateLaunchConfiguration_launchDisposition :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe LaunchDisposition)
+updateLaunchConfiguration_launchDisposition = Lens.lens (\UpdateLaunchConfiguration' {launchDisposition} -> launchDisposition) (\s@UpdateLaunchConfiguration' {} a -> s {launchDisposition = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration licensing request.
+updateLaunchConfiguration_licensing :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Licensing)
+updateLaunchConfiguration_licensing = Lens.lens (\UpdateLaunchConfiguration' {licensing} -> licensing) (\s@UpdateLaunchConfiguration' {} a -> s {licensing = a} :: UpdateLaunchConfiguration)
+
+-- | Launch configuration map auto tagging MPE ID.
+updateLaunchConfiguration_mapAutoTaggingMpeID :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Text)
+updateLaunchConfiguration_mapAutoTaggingMpeID = Lens.lens (\UpdateLaunchConfiguration' {mapAutoTaggingMpeID} -> mapAutoTaggingMpeID) (\s@UpdateLaunchConfiguration' {} a -> s {mapAutoTaggingMpeID = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration name request.
+updateLaunchConfiguration_name :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe Prelude.Text)
+updateLaunchConfiguration_name = Lens.lens (\UpdateLaunchConfiguration' {name} -> name) (\s@UpdateLaunchConfiguration' {} a -> s {name = a} :: UpdateLaunchConfiguration)
+
+-- | Undocumented member.
+updateLaunchConfiguration_postLaunchActions :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe PostLaunchActions)
+updateLaunchConfiguration_postLaunchActions = Lens.lens (\UpdateLaunchConfiguration' {postLaunchActions} -> postLaunchActions) (\s@UpdateLaunchConfiguration' {} a -> s {postLaunchActions = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration Target instance right sizing request.
+updateLaunchConfiguration_targetInstanceTypeRightSizingMethod :: Lens.Lens' UpdateLaunchConfiguration (Prelude.Maybe TargetInstanceTypeRightSizingMethod)
+updateLaunchConfiguration_targetInstanceTypeRightSizingMethod = Lens.lens (\UpdateLaunchConfiguration' {targetInstanceTypeRightSizingMethod} -> targetInstanceTypeRightSizingMethod) (\s@UpdateLaunchConfiguration' {} a -> s {targetInstanceTypeRightSizingMethod = a} :: UpdateLaunchConfiguration)
+
+-- | Update Launch configuration by Source Server ID request.
+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` bootMode
+      `Prelude.hashWithSalt` copyPrivateIp
+      `Prelude.hashWithSalt` copyTags
+      `Prelude.hashWithSalt` enableMapAutoTagging
+      `Prelude.hashWithSalt` launchDisposition
+      `Prelude.hashWithSalt` licensing
+      `Prelude.hashWithSalt` mapAutoTaggingMpeID
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` postLaunchActions
+      `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+      `Prelude.hashWithSalt` sourceServerID
+
+instance Prelude.NFData UpdateLaunchConfiguration where
+  rnf UpdateLaunchConfiguration' {..} =
+    Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf enableMapAutoTagging
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf mapAutoTaggingMpeID
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf postLaunchActions
+      `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
+          [ ("bootMode" Data..=) Prelude.<$> bootMode,
+            ("copyPrivateIp" Data..=) Prelude.<$> copyPrivateIp,
+            ("copyTags" Data..=) Prelude.<$> copyTags,
+            ("enableMapAutoTagging" Data..=)
+              Prelude.<$> enableMapAutoTagging,
+            ("launchDisposition" Data..=)
+              Prelude.<$> launchDisposition,
+            ("licensing" Data..=) Prelude.<$> licensing,
+            ("mapAutoTaggingMpeID" Data..=)
+              Prelude.<$> mapAutoTaggingMpeID,
+            ("name" Data..=) Prelude.<$> name,
+            ("postLaunchActions" Data..=)
+              Prelude.<$> postLaunchActions,
+            ("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/MGN/UpdateLaunchConfigurationTemplate.hs b/gen/Amazonka/MGN/UpdateLaunchConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateLaunchConfigurationTemplate.hs
@@ -0,0 +1,345 @@
+{-# 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.MGN.UpdateLaunchConfigurationTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing Launch Configuration Template by ID.
+module Amazonka.MGN.UpdateLaunchConfigurationTemplate
+  ( -- * Creating a Request
+    UpdateLaunchConfigurationTemplate (..),
+    newUpdateLaunchConfigurationTemplate,
+
+    -- * Request Lenses
+    updateLaunchConfigurationTemplate_associatePublicIpAddress,
+    updateLaunchConfigurationTemplate_bootMode,
+    updateLaunchConfigurationTemplate_copyPrivateIp,
+    updateLaunchConfigurationTemplate_copyTags,
+    updateLaunchConfigurationTemplate_enableMapAutoTagging,
+    updateLaunchConfigurationTemplate_largeVolumeConf,
+    updateLaunchConfigurationTemplate_launchDisposition,
+    updateLaunchConfigurationTemplate_licensing,
+    updateLaunchConfigurationTemplate_mapAutoTaggingMpeID,
+    updateLaunchConfigurationTemplate_postLaunchActions,
+    updateLaunchConfigurationTemplate_smallVolumeConf,
+    updateLaunchConfigurationTemplate_smallVolumeMaxSize,
+    updateLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    updateLaunchConfigurationTemplate_launchConfigurationTemplateID,
+
+    -- * Destructuring the Response
+    LaunchConfigurationTemplate (..),
+    newLaunchConfigurationTemplate,
+
+    -- * Response Lenses
+    launchConfigurationTemplate_arn,
+    launchConfigurationTemplate_associatePublicIpAddress,
+    launchConfigurationTemplate_bootMode,
+    launchConfigurationTemplate_copyPrivateIp,
+    launchConfigurationTemplate_copyTags,
+    launchConfigurationTemplate_ec2LaunchTemplateID,
+    launchConfigurationTemplate_enableMapAutoTagging,
+    launchConfigurationTemplate_largeVolumeConf,
+    launchConfigurationTemplate_launchDisposition,
+    launchConfigurationTemplate_licensing,
+    launchConfigurationTemplate_mapAutoTaggingMpeID,
+    launchConfigurationTemplate_postLaunchActions,
+    launchConfigurationTemplate_smallVolumeConf,
+    launchConfigurationTemplate_smallVolumeMaxSize,
+    launchConfigurationTemplate_tags,
+    launchConfigurationTemplate_targetInstanceTypeRightSizingMethod,
+    launchConfigurationTemplate_launchConfigurationTemplateID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLaunchConfigurationTemplate' smart constructor.
+data UpdateLaunchConfigurationTemplate = UpdateLaunchConfigurationTemplate'
+  { -- | Associate public Ip address.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Launch configuration template boot mode.
+    bootMode :: Prelude.Maybe BootMode,
+    -- | Copy private Ip.
+    copyPrivateIp :: Prelude.Maybe Prelude.Bool,
+    -- | Copy tags.
+    copyTags :: Prelude.Maybe Prelude.Bool,
+    -- | Enable map auto tagging.
+    enableMapAutoTagging :: Prelude.Maybe Prelude.Bool,
+    -- | Large volume config.
+    largeVolumeConf :: Prelude.Maybe LaunchTemplateDiskConf,
+    -- | Launch disposition.
+    launchDisposition :: Prelude.Maybe LaunchDisposition,
+    licensing :: Prelude.Maybe Licensing,
+    -- | Launch configuration template map auto tagging MPE ID.
+    mapAutoTaggingMpeID :: Prelude.Maybe Prelude.Text,
+    -- | Post Launch Action to execute on the Test or Cutover instance.
+    postLaunchActions :: Prelude.Maybe PostLaunchActions,
+    -- | Small volume config.
+    smallVolumeConf :: Prelude.Maybe LaunchTemplateDiskConf,
+    -- | Small volume maximum size.
+    smallVolumeMaxSize :: Prelude.Maybe Prelude.Natural,
+    -- | Target instance type right-sizing method.
+    targetInstanceTypeRightSizingMethod :: Prelude.Maybe TargetInstanceTypeRightSizingMethod,
+    -- | Launch Configuration Template ID.
+    launchConfigurationTemplateID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLaunchConfigurationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatePublicIpAddress', 'updateLaunchConfigurationTemplate_associatePublicIpAddress' - Associate public Ip address.
+--
+-- 'bootMode', 'updateLaunchConfigurationTemplate_bootMode' - Launch configuration template boot mode.
+--
+-- 'copyPrivateIp', 'updateLaunchConfigurationTemplate_copyPrivateIp' - Copy private Ip.
+--
+-- 'copyTags', 'updateLaunchConfigurationTemplate_copyTags' - Copy tags.
+--
+-- 'enableMapAutoTagging', 'updateLaunchConfigurationTemplate_enableMapAutoTagging' - Enable map auto tagging.
+--
+-- 'largeVolumeConf', 'updateLaunchConfigurationTemplate_largeVolumeConf' - Large volume config.
+--
+-- 'launchDisposition', 'updateLaunchConfigurationTemplate_launchDisposition' - Launch disposition.
+--
+-- 'licensing', 'updateLaunchConfigurationTemplate_licensing' - Undocumented member.
+--
+-- 'mapAutoTaggingMpeID', 'updateLaunchConfigurationTemplate_mapAutoTaggingMpeID' - Launch configuration template map auto tagging MPE ID.
+--
+-- 'postLaunchActions', 'updateLaunchConfigurationTemplate_postLaunchActions' - Post Launch Action to execute on the Test or Cutover instance.
+--
+-- 'smallVolumeConf', 'updateLaunchConfigurationTemplate_smallVolumeConf' - Small volume config.
+--
+-- 'smallVolumeMaxSize', 'updateLaunchConfigurationTemplate_smallVolumeMaxSize' - Small volume maximum size.
+--
+-- 'targetInstanceTypeRightSizingMethod', 'updateLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod' - Target instance type right-sizing method.
+--
+-- 'launchConfigurationTemplateID', 'updateLaunchConfigurationTemplate_launchConfigurationTemplateID' - Launch Configuration Template ID.
+newUpdateLaunchConfigurationTemplate ::
+  -- | 'launchConfigurationTemplateID'
+  Prelude.Text ->
+  UpdateLaunchConfigurationTemplate
+newUpdateLaunchConfigurationTemplate
+  pLaunchConfigurationTemplateID_ =
+    UpdateLaunchConfigurationTemplate'
+      { associatePublicIpAddress =
+          Prelude.Nothing,
+        bootMode = Prelude.Nothing,
+        copyPrivateIp = Prelude.Nothing,
+        copyTags = Prelude.Nothing,
+        enableMapAutoTagging = Prelude.Nothing,
+        largeVolumeConf = Prelude.Nothing,
+        launchDisposition = Prelude.Nothing,
+        licensing = Prelude.Nothing,
+        mapAutoTaggingMpeID = Prelude.Nothing,
+        postLaunchActions = Prelude.Nothing,
+        smallVolumeConf = Prelude.Nothing,
+        smallVolumeMaxSize = Prelude.Nothing,
+        targetInstanceTypeRightSizingMethod =
+          Prelude.Nothing,
+        launchConfigurationTemplateID =
+          pLaunchConfigurationTemplateID_
+      }
+
+-- | Associate public Ip address.
+updateLaunchConfigurationTemplate_associatePublicIpAddress :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateLaunchConfigurationTemplate_associatePublicIpAddress = Lens.lens (\UpdateLaunchConfigurationTemplate' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {associatePublicIpAddress = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Launch configuration template boot mode.
+updateLaunchConfigurationTemplate_bootMode :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe BootMode)
+updateLaunchConfigurationTemplate_bootMode = Lens.lens (\UpdateLaunchConfigurationTemplate' {bootMode} -> bootMode) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {bootMode = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Copy private Ip.
+updateLaunchConfigurationTemplate_copyPrivateIp :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateLaunchConfigurationTemplate_copyPrivateIp = Lens.lens (\UpdateLaunchConfigurationTemplate' {copyPrivateIp} -> copyPrivateIp) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {copyPrivateIp = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Copy tags.
+updateLaunchConfigurationTemplate_copyTags :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateLaunchConfigurationTemplate_copyTags = Lens.lens (\UpdateLaunchConfigurationTemplate' {copyTags} -> copyTags) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {copyTags = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Enable map auto tagging.
+updateLaunchConfigurationTemplate_enableMapAutoTagging :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateLaunchConfigurationTemplate_enableMapAutoTagging = Lens.lens (\UpdateLaunchConfigurationTemplate' {enableMapAutoTagging} -> enableMapAutoTagging) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {enableMapAutoTagging = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Large volume config.
+updateLaunchConfigurationTemplate_largeVolumeConf :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe LaunchTemplateDiskConf)
+updateLaunchConfigurationTemplate_largeVolumeConf = Lens.lens (\UpdateLaunchConfigurationTemplate' {largeVolumeConf} -> largeVolumeConf) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {largeVolumeConf = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Launch disposition.
+updateLaunchConfigurationTemplate_launchDisposition :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe LaunchDisposition)
+updateLaunchConfigurationTemplate_launchDisposition = Lens.lens (\UpdateLaunchConfigurationTemplate' {launchDisposition} -> launchDisposition) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {launchDisposition = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Undocumented member.
+updateLaunchConfigurationTemplate_licensing :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Licensing)
+updateLaunchConfigurationTemplate_licensing = Lens.lens (\UpdateLaunchConfigurationTemplate' {licensing} -> licensing) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {licensing = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Launch configuration template map auto tagging MPE ID.
+updateLaunchConfigurationTemplate_mapAutoTaggingMpeID :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateLaunchConfigurationTemplate_mapAutoTaggingMpeID = Lens.lens (\UpdateLaunchConfigurationTemplate' {mapAutoTaggingMpeID} -> mapAutoTaggingMpeID) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {mapAutoTaggingMpeID = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Post Launch Action to execute on the Test or Cutover instance.
+updateLaunchConfigurationTemplate_postLaunchActions :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe PostLaunchActions)
+updateLaunchConfigurationTemplate_postLaunchActions = Lens.lens (\UpdateLaunchConfigurationTemplate' {postLaunchActions} -> postLaunchActions) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {postLaunchActions = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Small volume config.
+updateLaunchConfigurationTemplate_smallVolumeConf :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe LaunchTemplateDiskConf)
+updateLaunchConfigurationTemplate_smallVolumeConf = Lens.lens (\UpdateLaunchConfigurationTemplate' {smallVolumeConf} -> smallVolumeConf) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {smallVolumeConf = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Small volume maximum size.
+updateLaunchConfigurationTemplate_smallVolumeMaxSize :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+updateLaunchConfigurationTemplate_smallVolumeMaxSize = Lens.lens (\UpdateLaunchConfigurationTemplate' {smallVolumeMaxSize} -> smallVolumeMaxSize) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {smallVolumeMaxSize = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Target instance type right-sizing method.
+updateLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod :: Lens.Lens' UpdateLaunchConfigurationTemplate (Prelude.Maybe TargetInstanceTypeRightSizingMethod)
+updateLaunchConfigurationTemplate_targetInstanceTypeRightSizingMethod = Lens.lens (\UpdateLaunchConfigurationTemplate' {targetInstanceTypeRightSizingMethod} -> targetInstanceTypeRightSizingMethod) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {targetInstanceTypeRightSizingMethod = a} :: UpdateLaunchConfigurationTemplate)
+
+-- | Launch Configuration Template ID.
+updateLaunchConfigurationTemplate_launchConfigurationTemplateID :: Lens.Lens' UpdateLaunchConfigurationTemplate Prelude.Text
+updateLaunchConfigurationTemplate_launchConfigurationTemplateID = Lens.lens (\UpdateLaunchConfigurationTemplate' {launchConfigurationTemplateID} -> launchConfigurationTemplateID) (\s@UpdateLaunchConfigurationTemplate' {} a -> s {launchConfigurationTemplateID = a} :: UpdateLaunchConfigurationTemplate)
+
+instance
+  Core.AWSRequest
+    UpdateLaunchConfigurationTemplate
+  where
+  type
+    AWSResponse UpdateLaunchConfigurationTemplate =
+      LaunchConfigurationTemplate
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance
+  Prelude.Hashable
+    UpdateLaunchConfigurationTemplate
+  where
+  hashWithSalt
+    _salt
+    UpdateLaunchConfigurationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` associatePublicIpAddress
+        `Prelude.hashWithSalt` bootMode
+        `Prelude.hashWithSalt` copyPrivateIp
+        `Prelude.hashWithSalt` copyTags
+        `Prelude.hashWithSalt` enableMapAutoTagging
+        `Prelude.hashWithSalt` largeVolumeConf
+        `Prelude.hashWithSalt` launchDisposition
+        `Prelude.hashWithSalt` licensing
+        `Prelude.hashWithSalt` mapAutoTaggingMpeID
+        `Prelude.hashWithSalt` postLaunchActions
+        `Prelude.hashWithSalt` smallVolumeConf
+        `Prelude.hashWithSalt` smallVolumeMaxSize
+        `Prelude.hashWithSalt` targetInstanceTypeRightSizingMethod
+        `Prelude.hashWithSalt` launchConfigurationTemplateID
+
+instance
+  Prelude.NFData
+    UpdateLaunchConfigurationTemplate
+  where
+  rnf UpdateLaunchConfigurationTemplate' {..} =
+    Prelude.rnf associatePublicIpAddress
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf copyPrivateIp
+      `Prelude.seq` Prelude.rnf copyTags
+      `Prelude.seq` Prelude.rnf enableMapAutoTagging
+      `Prelude.seq` Prelude.rnf largeVolumeConf
+      `Prelude.seq` Prelude.rnf launchDisposition
+      `Prelude.seq` Prelude.rnf licensing
+      `Prelude.seq` Prelude.rnf mapAutoTaggingMpeID
+      `Prelude.seq` Prelude.rnf postLaunchActions
+      `Prelude.seq` Prelude.rnf smallVolumeConf
+      `Prelude.seq` Prelude.rnf smallVolumeMaxSize
+      `Prelude.seq` Prelude.rnf
+        targetInstanceTypeRightSizingMethod
+      `Prelude.seq` Prelude.rnf launchConfigurationTemplateID
+
+instance
+  Data.ToHeaders
+    UpdateLaunchConfigurationTemplate
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateLaunchConfigurationTemplate
+  where
+  toJSON UpdateLaunchConfigurationTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associatePublicIpAddress" Data..=)
+              Prelude.<$> associatePublicIpAddress,
+            ("bootMode" Data..=) Prelude.<$> bootMode,
+            ("copyPrivateIp" Data..=) Prelude.<$> copyPrivateIp,
+            ("copyTags" Data..=) Prelude.<$> copyTags,
+            ("enableMapAutoTagging" Data..=)
+              Prelude.<$> enableMapAutoTagging,
+            ("largeVolumeConf" Data..=)
+              Prelude.<$> largeVolumeConf,
+            ("launchDisposition" Data..=)
+              Prelude.<$> launchDisposition,
+            ("licensing" Data..=) Prelude.<$> licensing,
+            ("mapAutoTaggingMpeID" Data..=)
+              Prelude.<$> mapAutoTaggingMpeID,
+            ("postLaunchActions" Data..=)
+              Prelude.<$> postLaunchActions,
+            ("smallVolumeConf" Data..=)
+              Prelude.<$> smallVolumeConf,
+            ("smallVolumeMaxSize" Data..=)
+              Prelude.<$> smallVolumeMaxSize,
+            ("targetInstanceTypeRightSizingMethod" Data..=)
+              Prelude.<$> targetInstanceTypeRightSizingMethod,
+            Prelude.Just
+              ( "launchConfigurationTemplateID"
+                  Data..= launchConfigurationTemplateID
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateLaunchConfigurationTemplate
+  where
+  toPath =
+    Prelude.const "/UpdateLaunchConfigurationTemplate"
+
+instance
+  Data.ToQuery
+    UpdateLaunchConfigurationTemplate
+  where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/UpdateReplicationConfiguration.hs b/gen/Amazonka/MGN/UpdateReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateReplicationConfiguration.hs
@@ -0,0 +1,365 @@
+{-# 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.MGN.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 multiple ReplicationConfigurations by Source Server
+-- ID.
+module Amazonka.MGN.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_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_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.MGN.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'
+  { -- | Update replication configuration associate default Application Migration
+    -- Service Security group request.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Update replication configuration bandwidth throttling request.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Update replication configuration create Public IP request.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | Update replication configuration data plane routing request.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | Update replication configuration use default large Staging Disk type
+    -- request.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | Update replication configuration EBS encryption request.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | Update replication configuration EBS encryption key ARN request.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration name request.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration replicated disks request.
+    replicatedDisks :: Prelude.Maybe [ReplicationConfigurationReplicatedDisk],
+    -- | Update replication configuration Replication Server instance type
+    -- request.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration Replication Server Security Groups IDs
+    -- request.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Update replication configuration Staging Area subnet request.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration Staging Area Tags request.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Update replication configuration use dedicated Replication Server
+    -- request.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool,
+    -- | Update replication configuration Source Server ID request.
+    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' - Update replication configuration associate default Application Migration
+-- Service Security group request.
+--
+-- 'bandwidthThrottling', 'updateReplicationConfiguration_bandwidthThrottling' - Update replication configuration bandwidth throttling request.
+--
+-- 'createPublicIP', 'updateReplicationConfiguration_createPublicIP' - Update replication configuration create Public IP request.
+--
+-- 'dataPlaneRouting', 'updateReplicationConfiguration_dataPlaneRouting' - Update replication configuration data plane routing request.
+--
+-- 'defaultLargeStagingDiskType', 'updateReplicationConfiguration_defaultLargeStagingDiskType' - Update replication configuration use default large Staging Disk type
+-- request.
+--
+-- 'ebsEncryption', 'updateReplicationConfiguration_ebsEncryption' - Update replication configuration EBS encryption request.
+--
+-- 'ebsEncryptionKeyArn', 'updateReplicationConfiguration_ebsEncryptionKeyArn' - Update replication configuration EBS encryption key ARN request.
+--
+-- 'name', 'updateReplicationConfiguration_name' - Update replication configuration name request.
+--
+-- 'replicatedDisks', 'updateReplicationConfiguration_replicatedDisks' - Update replication configuration replicated disks request.
+--
+-- 'replicationServerInstanceType', 'updateReplicationConfiguration_replicationServerInstanceType' - Update replication configuration Replication Server instance type
+-- request.
+--
+-- 'replicationServersSecurityGroupsIDs', 'updateReplicationConfiguration_replicationServersSecurityGroupsIDs' - Update replication configuration Replication Server Security Groups IDs
+-- request.
+--
+-- 'stagingAreaSubnetId', 'updateReplicationConfiguration_stagingAreaSubnetId' - Update replication configuration Staging Area subnet request.
+--
+-- 'stagingAreaTags', 'updateReplicationConfiguration_stagingAreaTags' - Update replication configuration Staging Area Tags request.
+--
+-- 'useDedicatedReplicationServer', 'updateReplicationConfiguration_useDedicatedReplicationServer' - Update replication configuration use dedicated Replication Server
+-- request.
+--
+-- 'sourceServerID', 'updateReplicationConfiguration_sourceServerID' - Update replication configuration Source Server ID request.
+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,
+      replicatedDisks = Prelude.Nothing,
+      replicationServerInstanceType =
+        Prelude.Nothing,
+      replicationServersSecurityGroupsIDs =
+        Prelude.Nothing,
+      stagingAreaSubnetId = Prelude.Nothing,
+      stagingAreaTags = Prelude.Nothing,
+      useDedicatedReplicationServer =
+        Prelude.Nothing,
+      sourceServerID = pSourceServerID_
+    }
+
+-- | Update replication configuration associate default Application Migration
+-- Service Security group request.
+updateReplicationConfiguration_associateDefaultSecurityGroup :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateReplicationConfiguration_associateDefaultSecurityGroup = Lens.lens (\UpdateReplicationConfiguration' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@UpdateReplicationConfiguration' {} a -> s {associateDefaultSecurityGroup = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration bandwidth throttling request.
+updateReplicationConfiguration_bandwidthThrottling :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Natural)
+updateReplicationConfiguration_bandwidthThrottling = Lens.lens (\UpdateReplicationConfiguration' {bandwidthThrottling} -> bandwidthThrottling) (\s@UpdateReplicationConfiguration' {} a -> s {bandwidthThrottling = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration create Public IP request.
+updateReplicationConfiguration_createPublicIP :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateReplicationConfiguration_createPublicIP = Lens.lens (\UpdateReplicationConfiguration' {createPublicIP} -> createPublicIP) (\s@UpdateReplicationConfiguration' {} a -> s {createPublicIP = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration data plane routing request.
+updateReplicationConfiguration_dataPlaneRouting :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+updateReplicationConfiguration_dataPlaneRouting = Lens.lens (\UpdateReplicationConfiguration' {dataPlaneRouting} -> dataPlaneRouting) (\s@UpdateReplicationConfiguration' {} a -> s {dataPlaneRouting = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration use default large Staging Disk type
+-- request.
+updateReplicationConfiguration_defaultLargeStagingDiskType :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+updateReplicationConfiguration_defaultLargeStagingDiskType = Lens.lens (\UpdateReplicationConfiguration' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@UpdateReplicationConfiguration' {} a -> s {defaultLargeStagingDiskType = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration EBS encryption request.
+updateReplicationConfiguration_ebsEncryption :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+updateReplicationConfiguration_ebsEncryption = Lens.lens (\UpdateReplicationConfiguration' {ebsEncryption} -> ebsEncryption) (\s@UpdateReplicationConfiguration' {} a -> s {ebsEncryption = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration EBS encryption key ARN request.
+updateReplicationConfiguration_ebsEncryptionKeyArn :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_ebsEncryptionKeyArn = Lens.lens (\UpdateReplicationConfiguration' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@UpdateReplicationConfiguration' {} a -> s {ebsEncryptionKeyArn = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration name request.
+updateReplicationConfiguration_name :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_name = Lens.lens (\UpdateReplicationConfiguration' {name} -> name) (\s@UpdateReplicationConfiguration' {} a -> s {name = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration replicated disks request.
+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
+
+-- | Update replication configuration Replication Server instance type
+-- request.
+updateReplicationConfiguration_replicationServerInstanceType :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_replicationServerInstanceType = Lens.lens (\UpdateReplicationConfiguration' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@UpdateReplicationConfiguration' {} a -> s {replicationServerInstanceType = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration Replication Server Security Groups IDs
+-- request.
+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
+
+-- | Update replication configuration Staging Area subnet request.
+updateReplicationConfiguration_stagingAreaSubnetId :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Text)
+updateReplicationConfiguration_stagingAreaSubnetId = Lens.lens (\UpdateReplicationConfiguration' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@UpdateReplicationConfiguration' {} a -> s {stagingAreaSubnetId = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration Staging Area Tags request.
+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)
+
+-- | Update replication configuration use dedicated Replication Server
+-- request.
+updateReplicationConfiguration_useDedicatedReplicationServer :: Lens.Lens' UpdateReplicationConfiguration (Prelude.Maybe Prelude.Bool)
+updateReplicationConfiguration_useDedicatedReplicationServer = Lens.lens (\UpdateReplicationConfiguration' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@UpdateReplicationConfiguration' {} a -> s {useDedicatedReplicationServer = a} :: UpdateReplicationConfiguration)
+
+-- | Update replication configuration Source Server ID request.
+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` 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 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,
+            ("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/MGN/UpdateReplicationConfigurationTemplate.hs b/gen/Amazonka/MGN/UpdateReplicationConfigurationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateReplicationConfigurationTemplate.hs
@@ -0,0 +1,376 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.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 multiple ReplicationConfigurationTemplates by ID.
+module Amazonka.MGN.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_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_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.MGN.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'
+  { -- | Update replication configuration template ARN request.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration template associate default Application
+    -- Migration Service Security group request.
+    associateDefaultSecurityGroup :: Prelude.Maybe Prelude.Bool,
+    -- | Update replication configuration template bandwidth throttling request.
+    bandwidthThrottling :: Prelude.Maybe Prelude.Natural,
+    -- | Update replication configuration template create Public IP request.
+    createPublicIP :: Prelude.Maybe Prelude.Bool,
+    -- | Update replication configuration template data plane routing request.
+    dataPlaneRouting :: Prelude.Maybe ReplicationConfigurationDataPlaneRouting,
+    -- | Update replication configuration template use default large Staging Disk
+    -- type request.
+    defaultLargeStagingDiskType :: Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType,
+    -- | Update replication configuration template EBS encryption request.
+    ebsEncryption :: Prelude.Maybe ReplicationConfigurationEbsEncryption,
+    -- | Update replication configuration template EBS encryption key ARN
+    -- request.
+    ebsEncryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration template Replication Server instance
+    -- type request.
+    replicationServerInstanceType :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration template Replication Server Security
+    -- groups IDs request.
+    replicationServersSecurityGroupsIDs :: Prelude.Maybe [Prelude.Text],
+    -- | Update replication configuration template Staging Area subnet ID
+    -- request.
+    stagingAreaSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | Update replication configuration template Staging Area Tags request.
+    stagingAreaTags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Update replication configuration template use dedicated Replication
+    -- Server request.
+    useDedicatedReplicationServer :: Prelude.Maybe Prelude.Bool,
+    -- | Update replication configuration template template ID request.
+    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' - Update replication configuration template ARN request.
+--
+-- 'associateDefaultSecurityGroup', 'updateReplicationConfigurationTemplate_associateDefaultSecurityGroup' - Update replication configuration template associate default Application
+-- Migration Service Security group request.
+--
+-- 'bandwidthThrottling', 'updateReplicationConfigurationTemplate_bandwidthThrottling' - Update replication configuration template bandwidth throttling request.
+--
+-- 'createPublicIP', 'updateReplicationConfigurationTemplate_createPublicIP' - Update replication configuration template create Public IP request.
+--
+-- 'dataPlaneRouting', 'updateReplicationConfigurationTemplate_dataPlaneRouting' - Update replication configuration template data plane routing request.
+--
+-- 'defaultLargeStagingDiskType', 'updateReplicationConfigurationTemplate_defaultLargeStagingDiskType' - Update replication configuration template use default large Staging Disk
+-- type request.
+--
+-- 'ebsEncryption', 'updateReplicationConfigurationTemplate_ebsEncryption' - Update replication configuration template EBS encryption request.
+--
+-- 'ebsEncryptionKeyArn', 'updateReplicationConfigurationTemplate_ebsEncryptionKeyArn' - Update replication configuration template EBS encryption key ARN
+-- request.
+--
+-- 'replicationServerInstanceType', 'updateReplicationConfigurationTemplate_replicationServerInstanceType' - Update replication configuration template Replication Server instance
+-- type request.
+--
+-- 'replicationServersSecurityGroupsIDs', 'updateReplicationConfigurationTemplate_replicationServersSecurityGroupsIDs' - Update replication configuration template Replication Server Security
+-- groups IDs request.
+--
+-- 'stagingAreaSubnetId', 'updateReplicationConfigurationTemplate_stagingAreaSubnetId' - Update replication configuration template Staging Area subnet ID
+-- request.
+--
+-- 'stagingAreaTags', 'updateReplicationConfigurationTemplate_stagingAreaTags' - Update replication configuration template Staging Area Tags request.
+--
+-- 'useDedicatedReplicationServer', 'updateReplicationConfigurationTemplate_useDedicatedReplicationServer' - Update replication configuration template use dedicated Replication
+-- Server request.
+--
+-- 'replicationConfigurationTemplateID', 'updateReplicationConfigurationTemplate_replicationConfigurationTemplateID' - Update replication configuration template template ID request.
+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,
+        replicationServerInstanceType =
+          Prelude.Nothing,
+        replicationServersSecurityGroupsIDs =
+          Prelude.Nothing,
+        stagingAreaSubnetId =
+          Prelude.Nothing,
+        stagingAreaTags = Prelude.Nothing,
+        useDedicatedReplicationServer =
+          Prelude.Nothing,
+        replicationConfigurationTemplateID =
+          pReplicationConfigurationTemplateID_
+      }
+
+-- | Update replication configuration template ARN request.
+updateReplicationConfigurationTemplate_arn :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_arn = Lens.lens (\UpdateReplicationConfigurationTemplate' {arn} -> arn) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {arn = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template associate default Application
+-- Migration Service Security group request.
+updateReplicationConfigurationTemplate_associateDefaultSecurityGroup :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateReplicationConfigurationTemplate_associateDefaultSecurityGroup = Lens.lens (\UpdateReplicationConfigurationTemplate' {associateDefaultSecurityGroup} -> associateDefaultSecurityGroup) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {associateDefaultSecurityGroup = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template bandwidth throttling request.
+updateReplicationConfigurationTemplate_bandwidthThrottling :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Natural)
+updateReplicationConfigurationTemplate_bandwidthThrottling = Lens.lens (\UpdateReplicationConfigurationTemplate' {bandwidthThrottling} -> bandwidthThrottling) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {bandwidthThrottling = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template create Public IP request.
+updateReplicationConfigurationTemplate_createPublicIP :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateReplicationConfigurationTemplate_createPublicIP = Lens.lens (\UpdateReplicationConfigurationTemplate' {createPublicIP} -> createPublicIP) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {createPublicIP = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template data plane routing request.
+updateReplicationConfigurationTemplate_dataPlaneRouting :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDataPlaneRouting)
+updateReplicationConfigurationTemplate_dataPlaneRouting = Lens.lens (\UpdateReplicationConfigurationTemplate' {dataPlaneRouting} -> dataPlaneRouting) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {dataPlaneRouting = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template use default large Staging Disk
+-- type request.
+updateReplicationConfigurationTemplate_defaultLargeStagingDiskType :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationDefaultLargeStagingDiskType)
+updateReplicationConfigurationTemplate_defaultLargeStagingDiskType = Lens.lens (\UpdateReplicationConfigurationTemplate' {defaultLargeStagingDiskType} -> defaultLargeStagingDiskType) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {defaultLargeStagingDiskType = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template EBS encryption request.
+updateReplicationConfigurationTemplate_ebsEncryption :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe ReplicationConfigurationEbsEncryption)
+updateReplicationConfigurationTemplate_ebsEncryption = Lens.lens (\UpdateReplicationConfigurationTemplate' {ebsEncryption} -> ebsEncryption) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {ebsEncryption = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template EBS encryption key ARN
+-- request.
+updateReplicationConfigurationTemplate_ebsEncryptionKeyArn :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_ebsEncryptionKeyArn = Lens.lens (\UpdateReplicationConfigurationTemplate' {ebsEncryptionKeyArn} -> ebsEncryptionKeyArn) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {ebsEncryptionKeyArn = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template Replication Server instance
+-- type request.
+updateReplicationConfigurationTemplate_replicationServerInstanceType :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_replicationServerInstanceType = Lens.lens (\UpdateReplicationConfigurationTemplate' {replicationServerInstanceType} -> replicationServerInstanceType) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {replicationServerInstanceType = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template Replication Server Security
+-- groups IDs request.
+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
+
+-- | Update replication configuration template Staging Area subnet ID
+-- request.
+updateReplicationConfigurationTemplate_stagingAreaSubnetId :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Text)
+updateReplicationConfigurationTemplate_stagingAreaSubnetId = Lens.lens (\UpdateReplicationConfigurationTemplate' {stagingAreaSubnetId} -> stagingAreaSubnetId) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {stagingAreaSubnetId = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template Staging Area Tags request.
+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)
+
+-- | Update replication configuration template use dedicated Replication
+-- Server request.
+updateReplicationConfigurationTemplate_useDedicatedReplicationServer :: Lens.Lens' UpdateReplicationConfigurationTemplate (Prelude.Maybe Prelude.Bool)
+updateReplicationConfigurationTemplate_useDedicatedReplicationServer = Lens.lens (\UpdateReplicationConfigurationTemplate' {useDedicatedReplicationServer} -> useDedicatedReplicationServer) (\s@UpdateReplicationConfigurationTemplate' {} a -> s {useDedicatedReplicationServer = a} :: UpdateReplicationConfigurationTemplate)
+
+-- | Update replication configuration template template ID request.
+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` 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 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,
+            ("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/MGN/UpdateSourceServerReplicationType.hs b/gen/Amazonka/MGN/UpdateSourceServerReplicationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateSourceServerReplicationType.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.MGN.UpdateSourceServerReplicationType
+-- 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 change between the AGENT_BASED replication type and the
+-- SNAPSHOT_SHIPPING replication type.
+module Amazonka.MGN.UpdateSourceServerReplicationType
+  ( -- * Creating a Request
+    UpdateSourceServerReplicationType (..),
+    newUpdateSourceServerReplicationType,
+
+    -- * Request Lenses
+    updateSourceServerReplicationType_replicationType,
+    updateSourceServerReplicationType_sourceServerID,
+
+    -- * Destructuring the Response
+    SourceServer (..),
+    newSourceServer,
+
+    -- * Response Lenses
+    sourceServer_applicationID,
+    sourceServer_arn,
+    sourceServer_dataReplicationInfo,
+    sourceServer_isArchived,
+    sourceServer_launchedInstance,
+    sourceServer_lifeCycle,
+    sourceServer_replicationType,
+    sourceServer_sourceProperties,
+    sourceServer_sourceServerID,
+    sourceServer_tags,
+    sourceServer_vcenterClientID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSourceServerReplicationType' smart constructor.
+data UpdateSourceServerReplicationType = UpdateSourceServerReplicationType'
+  { -- | Replication type to which to update source server.
+    replicationType :: ReplicationType,
+    -- | ID of source server on which to update replication type.
+    sourceServerID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSourceServerReplicationType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicationType', 'updateSourceServerReplicationType_replicationType' - Replication type to which to update source server.
+--
+-- 'sourceServerID', 'updateSourceServerReplicationType_sourceServerID' - ID of source server on which to update replication type.
+newUpdateSourceServerReplicationType ::
+  -- | 'replicationType'
+  ReplicationType ->
+  -- | 'sourceServerID'
+  Prelude.Text ->
+  UpdateSourceServerReplicationType
+newUpdateSourceServerReplicationType
+  pReplicationType_
+  pSourceServerID_ =
+    UpdateSourceServerReplicationType'
+      { replicationType =
+          pReplicationType_,
+        sourceServerID = pSourceServerID_
+      }
+
+-- | Replication type to which to update source server.
+updateSourceServerReplicationType_replicationType :: Lens.Lens' UpdateSourceServerReplicationType ReplicationType
+updateSourceServerReplicationType_replicationType = Lens.lens (\UpdateSourceServerReplicationType' {replicationType} -> replicationType) (\s@UpdateSourceServerReplicationType' {} a -> s {replicationType = a} :: UpdateSourceServerReplicationType)
+
+-- | ID of source server on which to update replication type.
+updateSourceServerReplicationType_sourceServerID :: Lens.Lens' UpdateSourceServerReplicationType Prelude.Text
+updateSourceServerReplicationType_sourceServerID = Lens.lens (\UpdateSourceServerReplicationType' {sourceServerID} -> sourceServerID) (\s@UpdateSourceServerReplicationType' {} a -> s {sourceServerID = a} :: UpdateSourceServerReplicationType)
+
+instance
+  Core.AWSRequest
+    UpdateSourceServerReplicationType
+  where
+  type
+    AWSResponse UpdateSourceServerReplicationType =
+      SourceServer
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance
+  Prelude.Hashable
+    UpdateSourceServerReplicationType
+  where
+  hashWithSalt
+    _salt
+    UpdateSourceServerReplicationType' {..} =
+      _salt
+        `Prelude.hashWithSalt` replicationType
+        `Prelude.hashWithSalt` sourceServerID
+
+instance
+  Prelude.NFData
+    UpdateSourceServerReplicationType
+  where
+  rnf UpdateSourceServerReplicationType' {..} =
+    Prelude.rnf replicationType
+      `Prelude.seq` Prelude.rnf sourceServerID
+
+instance
+  Data.ToHeaders
+    UpdateSourceServerReplicationType
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    UpdateSourceServerReplicationType
+  where
+  toJSON UpdateSourceServerReplicationType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("replicationType" Data..= replicationType),
+            Prelude.Just
+              ("sourceServerID" Data..= sourceServerID)
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateSourceServerReplicationType
+  where
+  toPath =
+    Prelude.const "/UpdateSourceServerReplicationType"
+
+instance
+  Data.ToQuery
+    UpdateSourceServerReplicationType
+  where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/UpdateWave.hs b/gen/Amazonka/MGN/UpdateWave.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/UpdateWave.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MGN.UpdateWave
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update wave.
+module Amazonka.MGN.UpdateWave
+  ( -- * Creating a Request
+    UpdateWave (..),
+    newUpdateWave,
+
+    -- * Request Lenses
+    updateWave_description,
+    updateWave_name,
+    updateWave_waveID,
+
+    -- * Destructuring the Response
+    Wave (..),
+    newWave,
+
+    -- * Response Lenses
+    wave_arn,
+    wave_creationDateTime,
+    wave_description,
+    wave_isArchived,
+    wave_lastModifiedDateTime,
+    wave_name,
+    wave_tags,
+    wave_waveAggregatedStatus,
+    wave_waveID,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWave' smart constructor.
+data UpdateWave = UpdateWave'
+  { -- | Wave description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Wave name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Wave ID.
+    waveID :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWave' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateWave_description' - Wave description.
+--
+-- 'name', 'updateWave_name' - Wave name.
+--
+-- 'waveID', 'updateWave_waveID' - Wave ID.
+newUpdateWave ::
+  -- | 'waveID'
+  Prelude.Text ->
+  UpdateWave
+newUpdateWave pWaveID_ =
+  UpdateWave'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      waveID = pWaveID_
+    }
+
+-- | Wave description.
+updateWave_description :: Lens.Lens' UpdateWave (Prelude.Maybe Prelude.Text)
+updateWave_description = Lens.lens (\UpdateWave' {description} -> description) (\s@UpdateWave' {} a -> s {description = a} :: UpdateWave)
+
+-- | Wave name.
+updateWave_name :: Lens.Lens' UpdateWave (Prelude.Maybe Prelude.Text)
+updateWave_name = Lens.lens (\UpdateWave' {name} -> name) (\s@UpdateWave' {} a -> s {name = a} :: UpdateWave)
+
+-- | Wave ID.
+updateWave_waveID :: Lens.Lens' UpdateWave Prelude.Text
+updateWave_waveID = Lens.lens (\UpdateWave' {waveID} -> waveID) (\s@UpdateWave' {} a -> s {waveID = a} :: UpdateWave)
+
+instance Core.AWSRequest UpdateWave where
+  type AWSResponse UpdateWave = Wave
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      (\s h x -> Data.eitherParseJSON x)
+
+instance Prelude.Hashable UpdateWave where
+  hashWithSalt _salt UpdateWave' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` waveID
+
+instance Prelude.NFData UpdateWave where
+  rnf UpdateWave' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf waveID
+
+instance Data.ToHeaders UpdateWave where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWave where
+  toJSON UpdateWave' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("waveID" Data..= waveID)
+          ]
+      )
+
+instance Data.ToPath UpdateWave where
+  toPath = Prelude.const "/UpdateWave"
+
+instance Data.ToQuery UpdateWave where
+  toQuery = Prelude.const Prelude.mempty
diff --git a/gen/Amazonka/MGN/Waiters.hs b/gen/Amazonka/MGN/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MGN/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.MGN.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.MGN.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MGN.Lens
+import Amazonka.MGN.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.MGN
+import Test.Amazonka.MGN.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MGN"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MGN.hs b/test/Test/Amazonka/Gen/MGN.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MGN.hs
@@ -0,0 +1,1138 @@
+{-# 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.MGN
+-- Copyright   : (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.MGN where
+
+import Amazonka.MGN
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MGN.Internal
+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"
+--         [ requestArchiveApplication $
+--             newArchiveApplication
+--
+--         , requestArchiveWave $
+--             newArchiveWave
+--
+--         , requestAssociateApplications $
+--             newAssociateApplications
+--
+--         , requestAssociateSourceServers $
+--             newAssociateSourceServers
+--
+--         , requestChangeServerLifeCycleState $
+--             newChangeServerLifeCycleState
+--
+--         , requestCreateApplication $
+--             newCreateApplication
+--
+--         , requestCreateLaunchConfigurationTemplate $
+--             newCreateLaunchConfigurationTemplate
+--
+--         , requestCreateReplicationConfigurationTemplate $
+--             newCreateReplicationConfigurationTemplate
+--
+--         , requestCreateWave $
+--             newCreateWave
+--
+--         , requestDeleteApplication $
+--             newDeleteApplication
+--
+--         , requestDeleteJob $
+--             newDeleteJob
+--
+--         , requestDeleteLaunchConfigurationTemplate $
+--             newDeleteLaunchConfigurationTemplate
+--
+--         , requestDeleteReplicationConfigurationTemplate $
+--             newDeleteReplicationConfigurationTemplate
+--
+--         , requestDeleteSourceServer $
+--             newDeleteSourceServer
+--
+--         , requestDeleteVcenterClient $
+--             newDeleteVcenterClient
+--
+--         , requestDeleteWave $
+--             newDeleteWave
+--
+--         , requestDescribeJobLogItems $
+--             newDescribeJobLogItems
+--
+--         , requestDescribeJobs $
+--             newDescribeJobs
+--
+--         , requestDescribeLaunchConfigurationTemplates $
+--             newDescribeLaunchConfigurationTemplates
+--
+--         , requestDescribeReplicationConfigurationTemplates $
+--             newDescribeReplicationConfigurationTemplates
+--
+--         , requestDescribeSourceServers $
+--             newDescribeSourceServers
+--
+--         , requestDescribeVcenterClients $
+--             newDescribeVcenterClients
+--
+--         , requestDisassociateApplications $
+--             newDisassociateApplications
+--
+--         , requestDisassociateSourceServers $
+--             newDisassociateSourceServers
+--
+--         , requestDisconnectFromService $
+--             newDisconnectFromService
+--
+--         , requestFinalizeCutover $
+--             newFinalizeCutover
+--
+--         , requestGetLaunchConfiguration $
+--             newGetLaunchConfiguration
+--
+--         , requestGetReplicationConfiguration $
+--             newGetReplicationConfiguration
+--
+--         , requestInitializeService $
+--             newInitializeService
+--
+--         , requestListApplications $
+--             newListApplications
+--
+--         , requestListSourceServerActions $
+--             newListSourceServerActions
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListTemplateActions $
+--             newListTemplateActions
+--
+--         , requestListWaves $
+--             newListWaves
+--
+--         , requestMarkAsArchived $
+--             newMarkAsArchived
+--
+--         , requestPutSourceServerAction $
+--             newPutSourceServerAction
+--
+--         , requestPutTemplateAction $
+--             newPutTemplateAction
+--
+--         , requestRemoveSourceServerAction $
+--             newRemoveSourceServerAction
+--
+--         , requestRemoveTemplateAction $
+--             newRemoveTemplateAction
+--
+--         , requestRetryDataReplication $
+--             newRetryDataReplication
+--
+--         , requestStartCutover $
+--             newStartCutover
+--
+--         , requestStartReplication $
+--             newStartReplication
+--
+--         , requestStartTest $
+--             newStartTest
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestTerminateTargetInstances $
+--             newTerminateTargetInstances
+--
+--         , requestUnarchiveApplication $
+--             newUnarchiveApplication
+--
+--         , requestUnarchiveWave $
+--             newUnarchiveWave
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApplication $
+--             newUpdateApplication
+--
+--         , requestUpdateLaunchConfiguration $
+--             newUpdateLaunchConfiguration
+--
+--         , requestUpdateLaunchConfigurationTemplate $
+--             newUpdateLaunchConfigurationTemplate
+--
+--         , requestUpdateReplicationConfiguration $
+--             newUpdateReplicationConfiguration
+--
+--         , requestUpdateReplicationConfigurationTemplate $
+--             newUpdateReplicationConfigurationTemplate
+--
+--         , requestUpdateSourceServerReplicationType $
+--             newUpdateSourceServerReplicationType
+--
+--         , requestUpdateWave $
+--             newUpdateWave
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseArchiveApplication $
+--             newApplication
+--
+--         , responseArchiveWave $
+--             newWave
+--
+--         , responseAssociateApplications $
+--             newAssociateApplicationsResponse
+--
+--         , responseAssociateSourceServers $
+--             newAssociateSourceServersResponse
+--
+--         , responseChangeServerLifeCycleState $
+--             newSourceServer
+--
+--         , responseCreateApplication $
+--             newApplication
+--
+--         , responseCreateLaunchConfigurationTemplate $
+--             newLaunchConfigurationTemplate
+--
+--         , responseCreateReplicationConfigurationTemplate $
+--             newReplicationConfigurationTemplate
+--
+--         , responseCreateWave $
+--             newWave
+--
+--         , responseDeleteApplication $
+--             newDeleteApplicationResponse
+--
+--         , responseDeleteJob $
+--             newDeleteJobResponse
+--
+--         , responseDeleteLaunchConfigurationTemplate $
+--             newDeleteLaunchConfigurationTemplateResponse
+--
+--         , responseDeleteReplicationConfigurationTemplate $
+--             newDeleteReplicationConfigurationTemplateResponse
+--
+--         , responseDeleteSourceServer $
+--             newDeleteSourceServerResponse
+--
+--         , responseDeleteVcenterClient $
+--             newDeleteVcenterClientResponse
+--
+--         , responseDeleteWave $
+--             newDeleteWaveResponse
+--
+--         , responseDescribeJobLogItems $
+--             newDescribeJobLogItemsResponse
+--
+--         , responseDescribeJobs $
+--             newDescribeJobsResponse
+--
+--         , responseDescribeLaunchConfigurationTemplates $
+--             newDescribeLaunchConfigurationTemplatesResponse
+--
+--         , responseDescribeReplicationConfigurationTemplates $
+--             newDescribeReplicationConfigurationTemplatesResponse
+--
+--         , responseDescribeSourceServers $
+--             newDescribeSourceServersResponse
+--
+--         , responseDescribeVcenterClients $
+--             newDescribeVcenterClientsResponse
+--
+--         , responseDisassociateApplications $
+--             newDisassociateApplicationsResponse
+--
+--         , responseDisassociateSourceServers $
+--             newDisassociateSourceServersResponse
+--
+--         , responseDisconnectFromService $
+--             newSourceServer
+--
+--         , responseFinalizeCutover $
+--             newSourceServer
+--
+--         , responseGetLaunchConfiguration $
+--             newLaunchConfiguration
+--
+--         , responseGetReplicationConfiguration $
+--             newReplicationConfiguration
+--
+--         , responseInitializeService $
+--             newInitializeServiceResponse
+--
+--         , responseListApplications $
+--             newListApplicationsResponse
+--
+--         , responseListSourceServerActions $
+--             newListSourceServerActionsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListTemplateActions $
+--             newListTemplateActionsResponse
+--
+--         , responseListWaves $
+--             newListWavesResponse
+--
+--         , responseMarkAsArchived $
+--             newSourceServer
+--
+--         , responsePutSourceServerAction $
+--             newSourceServerActionDocument
+--
+--         , responsePutTemplateAction $
+--             newTemplateActionDocument
+--
+--         , responseRemoveSourceServerAction $
+--             newRemoveSourceServerActionResponse
+--
+--         , responseRemoveTemplateAction $
+--             newRemoveTemplateActionResponse
+--
+--         , responseRetryDataReplication $
+--             newSourceServer
+--
+--         , responseStartCutover $
+--             newStartCutoverResponse
+--
+--         , responseStartReplication $
+--             newSourceServer
+--
+--         , responseStartTest $
+--             newStartTestResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseTerminateTargetInstances $
+--             newTerminateTargetInstancesResponse
+--
+--         , responseUnarchiveApplication $
+--             newApplication
+--
+--         , responseUnarchiveWave $
+--             newWave
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApplication $
+--             newApplication
+--
+--         , responseUpdateLaunchConfiguration $
+--             newLaunchConfiguration
+--
+--         , responseUpdateLaunchConfigurationTemplate $
+--             newLaunchConfigurationTemplate
+--
+--         , responseUpdateReplicationConfiguration $
+--             newReplicationConfiguration
+--
+--         , responseUpdateReplicationConfigurationTemplate $
+--             newReplicationConfigurationTemplate
+--
+--         , responseUpdateSourceServerReplicationType $
+--             newSourceServer
+--
+--         , responseUpdateWave $
+--             newWave
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestArchiveApplication :: ArchiveApplication -> TestTree
+requestArchiveApplication =
+  req
+    "ArchiveApplication"
+    "fixture/ArchiveApplication.yaml"
+
+requestArchiveWave :: ArchiveWave -> TestTree
+requestArchiveWave =
+  req
+    "ArchiveWave"
+    "fixture/ArchiveWave.yaml"
+
+requestAssociateApplications :: AssociateApplications -> TestTree
+requestAssociateApplications =
+  req
+    "AssociateApplications"
+    "fixture/AssociateApplications.yaml"
+
+requestAssociateSourceServers :: AssociateSourceServers -> TestTree
+requestAssociateSourceServers =
+  req
+    "AssociateSourceServers"
+    "fixture/AssociateSourceServers.yaml"
+
+requestChangeServerLifeCycleState :: ChangeServerLifeCycleState -> TestTree
+requestChangeServerLifeCycleState =
+  req
+    "ChangeServerLifeCycleState"
+    "fixture/ChangeServerLifeCycleState.yaml"
+
+requestCreateApplication :: CreateApplication -> TestTree
+requestCreateApplication =
+  req
+    "CreateApplication"
+    "fixture/CreateApplication.yaml"
+
+requestCreateLaunchConfigurationTemplate :: CreateLaunchConfigurationTemplate -> TestTree
+requestCreateLaunchConfigurationTemplate =
+  req
+    "CreateLaunchConfigurationTemplate"
+    "fixture/CreateLaunchConfigurationTemplate.yaml"
+
+requestCreateReplicationConfigurationTemplate :: CreateReplicationConfigurationTemplate -> TestTree
+requestCreateReplicationConfigurationTemplate =
+  req
+    "CreateReplicationConfigurationTemplate"
+    "fixture/CreateReplicationConfigurationTemplate.yaml"
+
+requestCreateWave :: CreateWave -> TestTree
+requestCreateWave =
+  req
+    "CreateWave"
+    "fixture/CreateWave.yaml"
+
+requestDeleteApplication :: DeleteApplication -> TestTree
+requestDeleteApplication =
+  req
+    "DeleteApplication"
+    "fixture/DeleteApplication.yaml"
+
+requestDeleteJob :: DeleteJob -> TestTree
+requestDeleteJob =
+  req
+    "DeleteJob"
+    "fixture/DeleteJob.yaml"
+
+requestDeleteLaunchConfigurationTemplate :: DeleteLaunchConfigurationTemplate -> TestTree
+requestDeleteLaunchConfigurationTemplate =
+  req
+    "DeleteLaunchConfigurationTemplate"
+    "fixture/DeleteLaunchConfigurationTemplate.yaml"
+
+requestDeleteReplicationConfigurationTemplate :: DeleteReplicationConfigurationTemplate -> TestTree
+requestDeleteReplicationConfigurationTemplate =
+  req
+    "DeleteReplicationConfigurationTemplate"
+    "fixture/DeleteReplicationConfigurationTemplate.yaml"
+
+requestDeleteSourceServer :: DeleteSourceServer -> TestTree
+requestDeleteSourceServer =
+  req
+    "DeleteSourceServer"
+    "fixture/DeleteSourceServer.yaml"
+
+requestDeleteVcenterClient :: DeleteVcenterClient -> TestTree
+requestDeleteVcenterClient =
+  req
+    "DeleteVcenterClient"
+    "fixture/DeleteVcenterClient.yaml"
+
+requestDeleteWave :: DeleteWave -> TestTree
+requestDeleteWave =
+  req
+    "DeleteWave"
+    "fixture/DeleteWave.yaml"
+
+requestDescribeJobLogItems :: DescribeJobLogItems -> TestTree
+requestDescribeJobLogItems =
+  req
+    "DescribeJobLogItems"
+    "fixture/DescribeJobLogItems.yaml"
+
+requestDescribeJobs :: DescribeJobs -> TestTree
+requestDescribeJobs =
+  req
+    "DescribeJobs"
+    "fixture/DescribeJobs.yaml"
+
+requestDescribeLaunchConfigurationTemplates :: DescribeLaunchConfigurationTemplates -> TestTree
+requestDescribeLaunchConfigurationTemplates =
+  req
+    "DescribeLaunchConfigurationTemplates"
+    "fixture/DescribeLaunchConfigurationTemplates.yaml"
+
+requestDescribeReplicationConfigurationTemplates :: DescribeReplicationConfigurationTemplates -> TestTree
+requestDescribeReplicationConfigurationTemplates =
+  req
+    "DescribeReplicationConfigurationTemplates"
+    "fixture/DescribeReplicationConfigurationTemplates.yaml"
+
+requestDescribeSourceServers :: DescribeSourceServers -> TestTree
+requestDescribeSourceServers =
+  req
+    "DescribeSourceServers"
+    "fixture/DescribeSourceServers.yaml"
+
+requestDescribeVcenterClients :: DescribeVcenterClients -> TestTree
+requestDescribeVcenterClients =
+  req
+    "DescribeVcenterClients"
+    "fixture/DescribeVcenterClients.yaml"
+
+requestDisassociateApplications :: DisassociateApplications -> TestTree
+requestDisassociateApplications =
+  req
+    "DisassociateApplications"
+    "fixture/DisassociateApplications.yaml"
+
+requestDisassociateSourceServers :: DisassociateSourceServers -> TestTree
+requestDisassociateSourceServers =
+  req
+    "DisassociateSourceServers"
+    "fixture/DisassociateSourceServers.yaml"
+
+requestDisconnectFromService :: DisconnectFromService -> TestTree
+requestDisconnectFromService =
+  req
+    "DisconnectFromService"
+    "fixture/DisconnectFromService.yaml"
+
+requestFinalizeCutover :: FinalizeCutover -> TestTree
+requestFinalizeCutover =
+  req
+    "FinalizeCutover"
+    "fixture/FinalizeCutover.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"
+
+requestListApplications :: ListApplications -> TestTree
+requestListApplications =
+  req
+    "ListApplications"
+    "fixture/ListApplications.yaml"
+
+requestListSourceServerActions :: ListSourceServerActions -> TestTree
+requestListSourceServerActions =
+  req
+    "ListSourceServerActions"
+    "fixture/ListSourceServerActions.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListTemplateActions :: ListTemplateActions -> TestTree
+requestListTemplateActions =
+  req
+    "ListTemplateActions"
+    "fixture/ListTemplateActions.yaml"
+
+requestListWaves :: ListWaves -> TestTree
+requestListWaves =
+  req
+    "ListWaves"
+    "fixture/ListWaves.yaml"
+
+requestMarkAsArchived :: MarkAsArchived -> TestTree
+requestMarkAsArchived =
+  req
+    "MarkAsArchived"
+    "fixture/MarkAsArchived.yaml"
+
+requestPutSourceServerAction :: PutSourceServerAction -> TestTree
+requestPutSourceServerAction =
+  req
+    "PutSourceServerAction"
+    "fixture/PutSourceServerAction.yaml"
+
+requestPutTemplateAction :: PutTemplateAction -> TestTree
+requestPutTemplateAction =
+  req
+    "PutTemplateAction"
+    "fixture/PutTemplateAction.yaml"
+
+requestRemoveSourceServerAction :: RemoveSourceServerAction -> TestTree
+requestRemoveSourceServerAction =
+  req
+    "RemoveSourceServerAction"
+    "fixture/RemoveSourceServerAction.yaml"
+
+requestRemoveTemplateAction :: RemoveTemplateAction -> TestTree
+requestRemoveTemplateAction =
+  req
+    "RemoveTemplateAction"
+    "fixture/RemoveTemplateAction.yaml"
+
+requestRetryDataReplication :: RetryDataReplication -> TestTree
+requestRetryDataReplication =
+  req
+    "RetryDataReplication"
+    "fixture/RetryDataReplication.yaml"
+
+requestStartCutover :: StartCutover -> TestTree
+requestStartCutover =
+  req
+    "StartCutover"
+    "fixture/StartCutover.yaml"
+
+requestStartReplication :: StartReplication -> TestTree
+requestStartReplication =
+  req
+    "StartReplication"
+    "fixture/StartReplication.yaml"
+
+requestStartTest :: StartTest -> TestTree
+requestStartTest =
+  req
+    "StartTest"
+    "fixture/StartTest.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestTerminateTargetInstances :: TerminateTargetInstances -> TestTree
+requestTerminateTargetInstances =
+  req
+    "TerminateTargetInstances"
+    "fixture/TerminateTargetInstances.yaml"
+
+requestUnarchiveApplication :: UnarchiveApplication -> TestTree
+requestUnarchiveApplication =
+  req
+    "UnarchiveApplication"
+    "fixture/UnarchiveApplication.yaml"
+
+requestUnarchiveWave :: UnarchiveWave -> TestTree
+requestUnarchiveWave =
+  req
+    "UnarchiveWave"
+    "fixture/UnarchiveWave.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApplication :: UpdateApplication -> TestTree
+requestUpdateApplication =
+  req
+    "UpdateApplication"
+    "fixture/UpdateApplication.yaml"
+
+requestUpdateLaunchConfiguration :: UpdateLaunchConfiguration -> TestTree
+requestUpdateLaunchConfiguration =
+  req
+    "UpdateLaunchConfiguration"
+    "fixture/UpdateLaunchConfiguration.yaml"
+
+requestUpdateLaunchConfigurationTemplate :: UpdateLaunchConfigurationTemplate -> TestTree
+requestUpdateLaunchConfigurationTemplate =
+  req
+    "UpdateLaunchConfigurationTemplate"
+    "fixture/UpdateLaunchConfigurationTemplate.yaml"
+
+requestUpdateReplicationConfiguration :: UpdateReplicationConfiguration -> TestTree
+requestUpdateReplicationConfiguration =
+  req
+    "UpdateReplicationConfiguration"
+    "fixture/UpdateReplicationConfiguration.yaml"
+
+requestUpdateReplicationConfigurationTemplate :: UpdateReplicationConfigurationTemplate -> TestTree
+requestUpdateReplicationConfigurationTemplate =
+  req
+    "UpdateReplicationConfigurationTemplate"
+    "fixture/UpdateReplicationConfigurationTemplate.yaml"
+
+requestUpdateSourceServerReplicationType :: UpdateSourceServerReplicationType -> TestTree
+requestUpdateSourceServerReplicationType =
+  req
+    "UpdateSourceServerReplicationType"
+    "fixture/UpdateSourceServerReplicationType.yaml"
+
+requestUpdateWave :: UpdateWave -> TestTree
+requestUpdateWave =
+  req
+    "UpdateWave"
+    "fixture/UpdateWave.yaml"
+
+-- Responses
+
+responseArchiveApplication :: Application -> TestTree
+responseArchiveApplication =
+  res
+    "ArchiveApplicationResponse"
+    "fixture/ArchiveApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ArchiveApplication)
+
+responseArchiveWave :: Wave -> TestTree
+responseArchiveWave =
+  res
+    "ArchiveWaveResponse"
+    "fixture/ArchiveWaveResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ArchiveWave)
+
+responseAssociateApplications :: AssociateApplicationsResponse -> TestTree
+responseAssociateApplications =
+  res
+    "AssociateApplicationsResponse"
+    "fixture/AssociateApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateApplications)
+
+responseAssociateSourceServers :: AssociateSourceServersResponse -> TestTree
+responseAssociateSourceServers =
+  res
+    "AssociateSourceServersResponse"
+    "fixture/AssociateSourceServersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateSourceServers)
+
+responseChangeServerLifeCycleState :: SourceServer -> TestTree
+responseChangeServerLifeCycleState =
+  res
+    "ChangeServerLifeCycleStateResponse"
+    "fixture/ChangeServerLifeCycleStateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ChangeServerLifeCycleState)
+
+responseCreateApplication :: Application -> TestTree
+responseCreateApplication =
+  res
+    "CreateApplicationResponse"
+    "fixture/CreateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApplication)
+
+responseCreateLaunchConfigurationTemplate :: LaunchConfigurationTemplate -> TestTree
+responseCreateLaunchConfigurationTemplate =
+  res
+    "CreateLaunchConfigurationTemplateResponse"
+    "fixture/CreateLaunchConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLaunchConfigurationTemplate)
+
+responseCreateReplicationConfigurationTemplate :: ReplicationConfigurationTemplate -> TestTree
+responseCreateReplicationConfigurationTemplate =
+  res
+    "CreateReplicationConfigurationTemplateResponse"
+    "fixture/CreateReplicationConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReplicationConfigurationTemplate)
+
+responseCreateWave :: Wave -> TestTree
+responseCreateWave =
+  res
+    "CreateWaveResponse"
+    "fixture/CreateWaveResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWave)
+
+responseDeleteApplication :: DeleteApplicationResponse -> TestTree
+responseDeleteApplication =
+  res
+    "DeleteApplicationResponse"
+    "fixture/DeleteApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplication)
+
+responseDeleteJob :: DeleteJobResponse -> TestTree
+responseDeleteJob =
+  res
+    "DeleteJobResponse"
+    "fixture/DeleteJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteJob)
+
+responseDeleteLaunchConfigurationTemplate :: DeleteLaunchConfigurationTemplateResponse -> TestTree
+responseDeleteLaunchConfigurationTemplate =
+  res
+    "DeleteLaunchConfigurationTemplateResponse"
+    "fixture/DeleteLaunchConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLaunchConfigurationTemplate)
+
+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)
+
+responseDeleteVcenterClient :: DeleteVcenterClientResponse -> TestTree
+responseDeleteVcenterClient =
+  res
+    "DeleteVcenterClientResponse"
+    "fixture/DeleteVcenterClientResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVcenterClient)
+
+responseDeleteWave :: DeleteWaveResponse -> TestTree
+responseDeleteWave =
+  res
+    "DeleteWaveResponse"
+    "fixture/DeleteWaveResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWave)
+
+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)
+
+responseDescribeLaunchConfigurationTemplates :: DescribeLaunchConfigurationTemplatesResponse -> TestTree
+responseDescribeLaunchConfigurationTemplates =
+  res
+    "DescribeLaunchConfigurationTemplatesResponse"
+    "fixture/DescribeLaunchConfigurationTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLaunchConfigurationTemplates)
+
+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)
+
+responseDescribeVcenterClients :: DescribeVcenterClientsResponse -> TestTree
+responseDescribeVcenterClients =
+  res
+    "DescribeVcenterClientsResponse"
+    "fixture/DescribeVcenterClientsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVcenterClients)
+
+responseDisassociateApplications :: DisassociateApplicationsResponse -> TestTree
+responseDisassociateApplications =
+  res
+    "DisassociateApplicationsResponse"
+    "fixture/DisassociateApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateApplications)
+
+responseDisassociateSourceServers :: DisassociateSourceServersResponse -> TestTree
+responseDisassociateSourceServers =
+  res
+    "DisassociateSourceServersResponse"
+    "fixture/DisassociateSourceServersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateSourceServers)
+
+responseDisconnectFromService :: SourceServer -> TestTree
+responseDisconnectFromService =
+  res
+    "DisconnectFromServiceResponse"
+    "fixture/DisconnectFromServiceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisconnectFromService)
+
+responseFinalizeCutover :: SourceServer -> TestTree
+responseFinalizeCutover =
+  res
+    "FinalizeCutoverResponse"
+    "fixture/FinalizeCutoverResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy FinalizeCutover)
+
+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)
+
+responseListApplications :: ListApplicationsResponse -> TestTree
+responseListApplications =
+  res
+    "ListApplicationsResponse"
+    "fixture/ListApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApplications)
+
+responseListSourceServerActions :: ListSourceServerActionsResponse -> TestTree
+responseListSourceServerActions =
+  res
+    "ListSourceServerActionsResponse"
+    "fixture/ListSourceServerActionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSourceServerActions)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListTemplateActions :: ListTemplateActionsResponse -> TestTree
+responseListTemplateActions =
+  res
+    "ListTemplateActionsResponse"
+    "fixture/ListTemplateActionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTemplateActions)
+
+responseListWaves :: ListWavesResponse -> TestTree
+responseListWaves =
+  res
+    "ListWavesResponse"
+    "fixture/ListWavesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWaves)
+
+responseMarkAsArchived :: SourceServer -> TestTree
+responseMarkAsArchived =
+  res
+    "MarkAsArchivedResponse"
+    "fixture/MarkAsArchivedResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MarkAsArchived)
+
+responsePutSourceServerAction :: SourceServerActionDocument -> TestTree
+responsePutSourceServerAction =
+  res
+    "PutSourceServerActionResponse"
+    "fixture/PutSourceServerActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutSourceServerAction)
+
+responsePutTemplateAction :: TemplateActionDocument -> TestTree
+responsePutTemplateAction =
+  res
+    "PutTemplateActionResponse"
+    "fixture/PutTemplateActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutTemplateAction)
+
+responseRemoveSourceServerAction :: RemoveSourceServerActionResponse -> TestTree
+responseRemoveSourceServerAction =
+  res
+    "RemoveSourceServerActionResponse"
+    "fixture/RemoveSourceServerActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveSourceServerAction)
+
+responseRemoveTemplateAction :: RemoveTemplateActionResponse -> TestTree
+responseRemoveTemplateAction =
+  res
+    "RemoveTemplateActionResponse"
+    "fixture/RemoveTemplateActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveTemplateAction)
+
+responseRetryDataReplication :: SourceServer -> TestTree
+responseRetryDataReplication =
+  res
+    "RetryDataReplicationResponse"
+    "fixture/RetryDataReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RetryDataReplication)
+
+responseStartCutover :: StartCutoverResponse -> TestTree
+responseStartCutover =
+  res
+    "StartCutoverResponse"
+    "fixture/StartCutoverResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartCutover)
+
+responseStartReplication :: SourceServer -> TestTree
+responseStartReplication =
+  res
+    "StartReplicationResponse"
+    "fixture/StartReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartReplication)
+
+responseStartTest :: StartTestResponse -> TestTree
+responseStartTest =
+  res
+    "StartTestResponse"
+    "fixture/StartTestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartTest)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseTerminateTargetInstances :: TerminateTargetInstancesResponse -> TestTree
+responseTerminateTargetInstances =
+  res
+    "TerminateTargetInstancesResponse"
+    "fixture/TerminateTargetInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TerminateTargetInstances)
+
+responseUnarchiveApplication :: Application -> TestTree
+responseUnarchiveApplication =
+  res
+    "UnarchiveApplicationResponse"
+    "fixture/UnarchiveApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UnarchiveApplication)
+
+responseUnarchiveWave :: Wave -> TestTree
+responseUnarchiveWave =
+  res
+    "UnarchiveWaveResponse"
+    "fixture/UnarchiveWaveResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UnarchiveWave)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateApplication :: Application -> TestTree
+responseUpdateApplication =
+  res
+    "UpdateApplicationResponse"
+    "fixture/UpdateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApplication)
+
+responseUpdateLaunchConfiguration :: LaunchConfiguration -> TestTree
+responseUpdateLaunchConfiguration =
+  res
+    "UpdateLaunchConfigurationResponse"
+    "fixture/UpdateLaunchConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLaunchConfiguration)
+
+responseUpdateLaunchConfigurationTemplate :: LaunchConfigurationTemplate -> TestTree
+responseUpdateLaunchConfigurationTemplate =
+  res
+    "UpdateLaunchConfigurationTemplateResponse"
+    "fixture/UpdateLaunchConfigurationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLaunchConfigurationTemplate)
+
+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)
+
+responseUpdateSourceServerReplicationType :: SourceServer -> TestTree
+responseUpdateSourceServerReplicationType =
+  res
+    "UpdateSourceServerReplicationTypeResponse"
+    "fixture/UpdateSourceServerReplicationTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSourceServerReplicationType)
+
+responseUpdateWave :: Wave -> TestTree
+responseUpdateWave =
+  res
+    "UpdateWaveResponse"
+    "fixture/UpdateWaveResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWave)
diff --git a/test/Test/Amazonka/MGN.hs b/test/Test/Amazonka/MGN.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MGN.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MGN
+-- Copyright   : (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.MGN
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MGN/Internal.hs b/test/Test/Amazonka/MGN/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MGN/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MGN.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.MGN.Internal where
