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 MainframeModernization SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-04-28@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-m2)
+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.M2](http://hackage.haskell.org/package/amazonka-m2/docs/Amazonka-M2.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-m2` 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-m2.cabal b/amazonka-m2.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-m2.cabal
@@ -0,0 +1,161 @@
+cabal-version:      2.2
+name:               amazonka-m2
+version:            2.0
+synopsis:           Amazon MainframeModernization 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 @2021-04-28@ 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.M2.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.M2" 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-m2
+
+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.M2
+    Amazonka.M2.CancelBatchJobExecution
+    Amazonka.M2.CreateApplication
+    Amazonka.M2.CreateDataSetImportTask
+    Amazonka.M2.CreateDeployment
+    Amazonka.M2.CreateEnvironment
+    Amazonka.M2.DeleteApplication
+    Amazonka.M2.DeleteApplicationFromEnvironment
+    Amazonka.M2.DeleteEnvironment
+    Amazonka.M2.GetApplication
+    Amazonka.M2.GetApplicationVersion
+    Amazonka.M2.GetBatchJobExecution
+    Amazonka.M2.GetDataSetDetails
+    Amazonka.M2.GetDataSetImportTask
+    Amazonka.M2.GetDeployment
+    Amazonka.M2.GetEnvironment
+    Amazonka.M2.Lens
+    Amazonka.M2.ListApplications
+    Amazonka.M2.ListApplicationVersions
+    Amazonka.M2.ListBatchJobDefinitions
+    Amazonka.M2.ListBatchJobExecutions
+    Amazonka.M2.ListDataSetImportHistory
+    Amazonka.M2.ListDataSets
+    Amazonka.M2.ListDeployments
+    Amazonka.M2.ListEngineVersions
+    Amazonka.M2.ListEnvironments
+    Amazonka.M2.ListTagsForResource
+    Amazonka.M2.StartApplication
+    Amazonka.M2.StartBatchJob
+    Amazonka.M2.StopApplication
+    Amazonka.M2.TagResource
+    Amazonka.M2.Types
+    Amazonka.M2.Types.AlternateKey
+    Amazonka.M2.Types.ApplicationDeploymentLifecycle
+    Amazonka.M2.Types.ApplicationLifecycle
+    Amazonka.M2.Types.ApplicationSummary
+    Amazonka.M2.Types.ApplicationVersionLifecycle
+    Amazonka.M2.Types.ApplicationVersionSummary
+    Amazonka.M2.Types.BatchJobDefinition
+    Amazonka.M2.Types.BatchJobExecutionStatus
+    Amazonka.M2.Types.BatchJobExecutionSummary
+    Amazonka.M2.Types.BatchJobIdentifier
+    Amazonka.M2.Types.BatchJobType
+    Amazonka.M2.Types.DataSet
+    Amazonka.M2.Types.DatasetDetailOrgAttributes
+    Amazonka.M2.Types.DataSetImportConfig
+    Amazonka.M2.Types.DataSetImportItem
+    Amazonka.M2.Types.DataSetImportSummary
+    Amazonka.M2.Types.DataSetImportTask
+    Amazonka.M2.Types.DatasetOrgAttributes
+    Amazonka.M2.Types.DataSetSummary
+    Amazonka.M2.Types.DataSetTaskLifecycle
+    Amazonka.M2.Types.Definition
+    Amazonka.M2.Types.DeployedVersionSummary
+    Amazonka.M2.Types.DeploymentLifecycle
+    Amazonka.M2.Types.DeploymentSummary
+    Amazonka.M2.Types.EfsStorageConfiguration
+    Amazonka.M2.Types.EngineType
+    Amazonka.M2.Types.EngineVersionsSummary
+    Amazonka.M2.Types.EnvironmentLifecycle
+    Amazonka.M2.Types.EnvironmentSummary
+    Amazonka.M2.Types.ExternalLocation
+    Amazonka.M2.Types.FileBatchJobDefinition
+    Amazonka.M2.Types.FileBatchJobIdentifier
+    Amazonka.M2.Types.FsxStorageConfiguration
+    Amazonka.M2.Types.GdgAttributes
+    Amazonka.M2.Types.GdgDetailAttributes
+    Amazonka.M2.Types.HighAvailabilityConfig
+    Amazonka.M2.Types.LogGroupSummary
+    Amazonka.M2.Types.MaintenanceSchedule
+    Amazonka.M2.Types.PendingMaintenance
+    Amazonka.M2.Types.PrimaryKey
+    Amazonka.M2.Types.RecordLength
+    Amazonka.M2.Types.ScriptBatchJobDefinition
+    Amazonka.M2.Types.ScriptBatchJobIdentifier
+    Amazonka.M2.Types.StorageConfiguration
+    Amazonka.M2.Types.VsamAttributes
+    Amazonka.M2.Types.VsamDetailAttributes
+    Amazonka.M2.UntagResource
+    Amazonka.M2.UpdateApplication
+    Amazonka.M2.UpdateEnvironment
+    Amazonka.M2.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-m2-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.M2
+    Test.Amazonka.M2
+    Test.Amazonka.M2.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-m2
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelBatchJobExecution.yaml b/fixture/CancelBatchJobExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelBatchJobExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/CancelBatchJobExecutionResponse.proto b/fixture/CancelBatchJobExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelBatchJobExecutionResponse.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/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/CreateDataSetImportTask.yaml b/fixture/CreateDataSetImportTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSetImportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/CreateDataSetImportTaskResponse.proto b/fixture/CreateDataSetImportTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSetImportTaskResponse.proto
diff --git a/fixture/CreateDeployment.yaml b/fixture/CreateDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/CreateDeploymentResponse.proto b/fixture/CreateDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentResponse.proto
diff --git a/fixture/CreateEnvironment.yaml b/fixture/CreateEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/CreateEnvironmentResponse.proto b/fixture/CreateEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEnvironmentResponse.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: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/DeleteApplicationFromEnvironment.yaml b/fixture/DeleteApplicationFromEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationFromEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/DeleteApplicationFromEnvironmentResponse.proto b/fixture/DeleteApplicationFromEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationFromEnvironmentResponse.proto
diff --git a/fixture/DeleteApplicationResponse.proto b/fixture/DeleteApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationResponse.proto
diff --git a/fixture/DeleteEnvironment.yaml b/fixture/DeleteEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/DeleteEnvironmentResponse.proto b/fixture/DeleteEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEnvironmentResponse.proto
diff --git a/fixture/GetApplication.yaml b/fixture/GetApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetApplicationResponse.proto b/fixture/GetApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplicationResponse.proto
diff --git a/fixture/GetApplicationVersion.yaml b/fixture/GetApplicationVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplicationVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetApplicationVersionResponse.proto b/fixture/GetApplicationVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplicationVersionResponse.proto
diff --git a/fixture/GetBatchJobExecution.yaml b/fixture/GetBatchJobExecution.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBatchJobExecution.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetBatchJobExecutionResponse.proto b/fixture/GetBatchJobExecutionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBatchJobExecutionResponse.proto
diff --git a/fixture/GetDataSetDetails.yaml b/fixture/GetDataSetDetails.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSetDetails.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetDataSetDetailsResponse.proto b/fixture/GetDataSetDetailsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSetDetailsResponse.proto
diff --git a/fixture/GetDataSetImportTask.yaml b/fixture/GetDataSetImportTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSetImportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetDataSetImportTaskResponse.proto b/fixture/GetDataSetImportTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSetImportTaskResponse.proto
diff --git a/fixture/GetDeployment.yaml b/fixture/GetDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetDeploymentResponse.proto b/fixture/GetDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeploymentResponse.proto
diff --git a/fixture/GetEnvironment.yaml b/fixture/GetEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/GetEnvironmentResponse.proto b/fixture/GetEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEnvironmentResponse.proto
diff --git a/fixture/ListApplicationVersions.yaml b/fixture/ListApplicationVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplicationVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListApplicationVersionsResponse.proto b/fixture/ListApplicationVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplicationVersionsResponse.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: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListBatchJobDefinitions.yaml b/fixture/ListBatchJobDefinitions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBatchJobDefinitions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListBatchJobDefinitionsResponse.proto b/fixture/ListBatchJobDefinitionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBatchJobDefinitionsResponse.proto
diff --git a/fixture/ListBatchJobExecutions.yaml b/fixture/ListBatchJobExecutions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBatchJobExecutions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListBatchJobExecutionsResponse.proto b/fixture/ListBatchJobExecutionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBatchJobExecutionsResponse.proto
diff --git a/fixture/ListDataSetImportHistory.yaml b/fixture/ListDataSetImportHistory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSetImportHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListDataSetImportHistoryResponse.proto b/fixture/ListDataSetImportHistoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSetImportHistoryResponse.proto
diff --git a/fixture/ListDataSets.yaml b/fixture/ListDataSets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListDataSetsResponse.proto b/fixture/ListDataSetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSetsResponse.proto
diff --git a/fixture/ListDeployments.yaml b/fixture/ListDeployments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeployments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListDeploymentsResponse.proto b/fixture/ListDeploymentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeploymentsResponse.proto
diff --git a/fixture/ListEngineVersions.yaml b/fixture/ListEngineVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEngineVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListEngineVersionsResponse.proto b/fixture/ListEngineVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEngineVersionsResponse.proto
diff --git a/fixture/ListEnvironments.yaml b/fixture/ListEnvironments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEnvironments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/ListEnvironmentsResponse.proto b/fixture/ListEnvironmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEnvironmentsResponse.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/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/StartApplication.yaml b/fixture/StartApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/StartApplicationResponse.proto b/fixture/StartApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartApplicationResponse.proto
diff --git a/fixture/StartBatchJob.yaml b/fixture/StartBatchJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartBatchJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/StartBatchJobResponse.proto b/fixture/StartBatchJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartBatchJobResponse.proto
diff --git a/fixture/StopApplication.yaml b/fixture/StopApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/StopApplicationResponse.proto b/fixture/StopApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopApplicationResponse.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/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/UpdateEnvironment.yaml b/fixture/UpdateEnvironment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEnvironment.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/m2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  m2.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/UpdateEnvironmentResponse.proto b/fixture/UpdateEnvironmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEnvironmentResponse.proto
diff --git a/gen/Amazonka/M2.hs b/gen/Amazonka/M2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2.hs
@@ -0,0 +1,487 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.M2
+-- 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 @2021-04-28@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Web Services Mainframe Modernization provides tools and resources
+-- to help you plan and implement migration and modernization from
+-- mainframes to Amazon Web Services managed runtime environments. It
+-- provides tools for analyzing existing mainframe applications, developing
+-- or updating mainframe applications using COBOL or PL\/I, and
+-- implementing an automated pipeline for continuous integration and
+-- continuous delivery (CI\/CD) of the applications.
+module Amazonka.M2
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelBatchJobExecution
+    CancelBatchJobExecution (CancelBatchJobExecution'),
+    newCancelBatchJobExecution,
+    CancelBatchJobExecutionResponse (CancelBatchJobExecutionResponse'),
+    newCancelBatchJobExecutionResponse,
+
+    -- ** CreateApplication
+    CreateApplication (CreateApplication'),
+    newCreateApplication,
+    CreateApplicationResponse (CreateApplicationResponse'),
+    newCreateApplicationResponse,
+
+    -- ** CreateDataSetImportTask
+    CreateDataSetImportTask (CreateDataSetImportTask'),
+    newCreateDataSetImportTask,
+    CreateDataSetImportTaskResponse (CreateDataSetImportTaskResponse'),
+    newCreateDataSetImportTaskResponse,
+
+    -- ** CreateDeployment
+    CreateDeployment (CreateDeployment'),
+    newCreateDeployment,
+    CreateDeploymentResponse (CreateDeploymentResponse'),
+    newCreateDeploymentResponse,
+
+    -- ** CreateEnvironment
+    CreateEnvironment (CreateEnvironment'),
+    newCreateEnvironment,
+    CreateEnvironmentResponse (CreateEnvironmentResponse'),
+    newCreateEnvironmentResponse,
+
+    -- ** DeleteApplication
+    DeleteApplication (DeleteApplication'),
+    newDeleteApplication,
+    DeleteApplicationResponse (DeleteApplicationResponse'),
+    newDeleteApplicationResponse,
+
+    -- ** DeleteApplicationFromEnvironment
+    DeleteApplicationFromEnvironment (DeleteApplicationFromEnvironment'),
+    newDeleteApplicationFromEnvironment,
+    DeleteApplicationFromEnvironmentResponse (DeleteApplicationFromEnvironmentResponse'),
+    newDeleteApplicationFromEnvironmentResponse,
+
+    -- ** DeleteEnvironment
+    DeleteEnvironment (DeleteEnvironment'),
+    newDeleteEnvironment,
+    DeleteEnvironmentResponse (DeleteEnvironmentResponse'),
+    newDeleteEnvironmentResponse,
+
+    -- ** GetApplication
+    GetApplication (GetApplication'),
+    newGetApplication,
+    GetApplicationResponse (GetApplicationResponse'),
+    newGetApplicationResponse,
+
+    -- ** GetApplicationVersion
+    GetApplicationVersion (GetApplicationVersion'),
+    newGetApplicationVersion,
+    GetApplicationVersionResponse (GetApplicationVersionResponse'),
+    newGetApplicationVersionResponse,
+
+    -- ** GetBatchJobExecution
+    GetBatchJobExecution (GetBatchJobExecution'),
+    newGetBatchJobExecution,
+    GetBatchJobExecutionResponse (GetBatchJobExecutionResponse'),
+    newGetBatchJobExecutionResponse,
+
+    -- ** GetDataSetDetails
+    GetDataSetDetails (GetDataSetDetails'),
+    newGetDataSetDetails,
+    GetDataSetDetailsResponse (GetDataSetDetailsResponse'),
+    newGetDataSetDetailsResponse,
+
+    -- ** GetDataSetImportTask
+    GetDataSetImportTask (GetDataSetImportTask'),
+    newGetDataSetImportTask,
+    GetDataSetImportTaskResponse (GetDataSetImportTaskResponse'),
+    newGetDataSetImportTaskResponse,
+
+    -- ** GetDeployment
+    GetDeployment (GetDeployment'),
+    newGetDeployment,
+    GetDeploymentResponse (GetDeploymentResponse'),
+    newGetDeploymentResponse,
+
+    -- ** GetEnvironment
+    GetEnvironment (GetEnvironment'),
+    newGetEnvironment,
+    GetEnvironmentResponse (GetEnvironmentResponse'),
+    newGetEnvironmentResponse,
+
+    -- ** ListApplicationVersions (Paginated)
+    ListApplicationVersions (ListApplicationVersions'),
+    newListApplicationVersions,
+    ListApplicationVersionsResponse (ListApplicationVersionsResponse'),
+    newListApplicationVersionsResponse,
+
+    -- ** ListApplications (Paginated)
+    ListApplications (ListApplications'),
+    newListApplications,
+    ListApplicationsResponse (ListApplicationsResponse'),
+    newListApplicationsResponse,
+
+    -- ** ListBatchJobDefinitions (Paginated)
+    ListBatchJobDefinitions (ListBatchJobDefinitions'),
+    newListBatchJobDefinitions,
+    ListBatchJobDefinitionsResponse (ListBatchJobDefinitionsResponse'),
+    newListBatchJobDefinitionsResponse,
+
+    -- ** ListBatchJobExecutions (Paginated)
+    ListBatchJobExecutions (ListBatchJobExecutions'),
+    newListBatchJobExecutions,
+    ListBatchJobExecutionsResponse (ListBatchJobExecutionsResponse'),
+    newListBatchJobExecutionsResponse,
+
+    -- ** ListDataSetImportHistory (Paginated)
+    ListDataSetImportHistory (ListDataSetImportHistory'),
+    newListDataSetImportHistory,
+    ListDataSetImportHistoryResponse (ListDataSetImportHistoryResponse'),
+    newListDataSetImportHistoryResponse,
+
+    -- ** ListDataSets (Paginated)
+    ListDataSets (ListDataSets'),
+    newListDataSets,
+    ListDataSetsResponse (ListDataSetsResponse'),
+    newListDataSetsResponse,
+
+    -- ** ListDeployments (Paginated)
+    ListDeployments (ListDeployments'),
+    newListDeployments,
+    ListDeploymentsResponse (ListDeploymentsResponse'),
+    newListDeploymentsResponse,
+
+    -- ** ListEngineVersions (Paginated)
+    ListEngineVersions (ListEngineVersions'),
+    newListEngineVersions,
+    ListEngineVersionsResponse (ListEngineVersionsResponse'),
+    newListEngineVersionsResponse,
+
+    -- ** ListEnvironments (Paginated)
+    ListEnvironments (ListEnvironments'),
+    newListEnvironments,
+    ListEnvironmentsResponse (ListEnvironmentsResponse'),
+    newListEnvironmentsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartApplication
+    StartApplication (StartApplication'),
+    newStartApplication,
+    StartApplicationResponse (StartApplicationResponse'),
+    newStartApplicationResponse,
+
+    -- ** StartBatchJob
+    StartBatchJob (StartBatchJob'),
+    newStartBatchJob,
+    StartBatchJobResponse (StartBatchJobResponse'),
+    newStartBatchJobResponse,
+
+    -- ** StopApplication
+    StopApplication (StopApplication'),
+    newStopApplication,
+    StopApplicationResponse (StopApplicationResponse'),
+    newStopApplicationResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApplication
+    UpdateApplication (UpdateApplication'),
+    newUpdateApplication,
+    UpdateApplicationResponse (UpdateApplicationResponse'),
+    newUpdateApplicationResponse,
+
+    -- ** UpdateEnvironment
+    UpdateEnvironment (UpdateEnvironment'),
+    newUpdateEnvironment,
+    UpdateEnvironmentResponse (UpdateEnvironmentResponse'),
+    newUpdateEnvironmentResponse,
+
+    -- * Types
+
+    -- ** ApplicationDeploymentLifecycle
+    ApplicationDeploymentLifecycle (..),
+
+    -- ** ApplicationLifecycle
+    ApplicationLifecycle (..),
+
+    -- ** ApplicationVersionLifecycle
+    ApplicationVersionLifecycle (..),
+
+    -- ** BatchJobExecutionStatus
+    BatchJobExecutionStatus (..),
+
+    -- ** BatchJobType
+    BatchJobType (..),
+
+    -- ** DataSetTaskLifecycle
+    DataSetTaskLifecycle (..),
+
+    -- ** DeploymentLifecycle
+    DeploymentLifecycle (..),
+
+    -- ** EngineType
+    EngineType (..),
+
+    -- ** EnvironmentLifecycle
+    EnvironmentLifecycle (..),
+
+    -- ** AlternateKey
+    AlternateKey (AlternateKey'),
+    newAlternateKey,
+
+    -- ** ApplicationSummary
+    ApplicationSummary (ApplicationSummary'),
+    newApplicationSummary,
+
+    -- ** ApplicationVersionSummary
+    ApplicationVersionSummary (ApplicationVersionSummary'),
+    newApplicationVersionSummary,
+
+    -- ** BatchJobDefinition
+    BatchJobDefinition (BatchJobDefinition'),
+    newBatchJobDefinition,
+
+    -- ** BatchJobExecutionSummary
+    BatchJobExecutionSummary (BatchJobExecutionSummary'),
+    newBatchJobExecutionSummary,
+
+    -- ** BatchJobIdentifier
+    BatchJobIdentifier (BatchJobIdentifier'),
+    newBatchJobIdentifier,
+
+    -- ** DataSet
+    DataSet (DataSet'),
+    newDataSet,
+
+    -- ** DataSetImportConfig
+    DataSetImportConfig (DataSetImportConfig'),
+    newDataSetImportConfig,
+
+    -- ** DataSetImportItem
+    DataSetImportItem (DataSetImportItem'),
+    newDataSetImportItem,
+
+    -- ** DataSetImportSummary
+    DataSetImportSummary (DataSetImportSummary'),
+    newDataSetImportSummary,
+
+    -- ** DataSetImportTask
+    DataSetImportTask (DataSetImportTask'),
+    newDataSetImportTask,
+
+    -- ** DataSetSummary
+    DataSetSummary (DataSetSummary'),
+    newDataSetSummary,
+
+    -- ** DatasetDetailOrgAttributes
+    DatasetDetailOrgAttributes (DatasetDetailOrgAttributes'),
+    newDatasetDetailOrgAttributes,
+
+    -- ** DatasetOrgAttributes
+    DatasetOrgAttributes (DatasetOrgAttributes'),
+    newDatasetOrgAttributes,
+
+    -- ** Definition
+    Definition (Definition'),
+    newDefinition,
+
+    -- ** DeployedVersionSummary
+    DeployedVersionSummary (DeployedVersionSummary'),
+    newDeployedVersionSummary,
+
+    -- ** DeploymentSummary
+    DeploymentSummary (DeploymentSummary'),
+    newDeploymentSummary,
+
+    -- ** EfsStorageConfiguration
+    EfsStorageConfiguration (EfsStorageConfiguration'),
+    newEfsStorageConfiguration,
+
+    -- ** EngineVersionsSummary
+    EngineVersionsSummary (EngineVersionsSummary'),
+    newEngineVersionsSummary,
+
+    -- ** EnvironmentSummary
+    EnvironmentSummary (EnvironmentSummary'),
+    newEnvironmentSummary,
+
+    -- ** ExternalLocation
+    ExternalLocation (ExternalLocation'),
+    newExternalLocation,
+
+    -- ** FileBatchJobDefinition
+    FileBatchJobDefinition (FileBatchJobDefinition'),
+    newFileBatchJobDefinition,
+
+    -- ** FileBatchJobIdentifier
+    FileBatchJobIdentifier (FileBatchJobIdentifier'),
+    newFileBatchJobIdentifier,
+
+    -- ** FsxStorageConfiguration
+    FsxStorageConfiguration (FsxStorageConfiguration'),
+    newFsxStorageConfiguration,
+
+    -- ** GdgAttributes
+    GdgAttributes (GdgAttributes'),
+    newGdgAttributes,
+
+    -- ** GdgDetailAttributes
+    GdgDetailAttributes (GdgDetailAttributes'),
+    newGdgDetailAttributes,
+
+    -- ** HighAvailabilityConfig
+    HighAvailabilityConfig (HighAvailabilityConfig'),
+    newHighAvailabilityConfig,
+
+    -- ** LogGroupSummary
+    LogGroupSummary (LogGroupSummary'),
+    newLogGroupSummary,
+
+    -- ** MaintenanceSchedule
+    MaintenanceSchedule (MaintenanceSchedule'),
+    newMaintenanceSchedule,
+
+    -- ** PendingMaintenance
+    PendingMaintenance (PendingMaintenance'),
+    newPendingMaintenance,
+
+    -- ** PrimaryKey
+    PrimaryKey (PrimaryKey'),
+    newPrimaryKey,
+
+    -- ** RecordLength
+    RecordLength (RecordLength'),
+    newRecordLength,
+
+    -- ** ScriptBatchJobDefinition
+    ScriptBatchJobDefinition (ScriptBatchJobDefinition'),
+    newScriptBatchJobDefinition,
+
+    -- ** ScriptBatchJobIdentifier
+    ScriptBatchJobIdentifier (ScriptBatchJobIdentifier'),
+    newScriptBatchJobIdentifier,
+
+    -- ** StorageConfiguration
+    StorageConfiguration (StorageConfiguration'),
+    newStorageConfiguration,
+
+    -- ** VsamAttributes
+    VsamAttributes (VsamAttributes'),
+    newVsamAttributes,
+
+    -- ** VsamDetailAttributes
+    VsamDetailAttributes (VsamDetailAttributes'),
+    newVsamDetailAttributes,
+  )
+where
+
+import Amazonka.M2.CancelBatchJobExecution
+import Amazonka.M2.CreateApplication
+import Amazonka.M2.CreateDataSetImportTask
+import Amazonka.M2.CreateDeployment
+import Amazonka.M2.CreateEnvironment
+import Amazonka.M2.DeleteApplication
+import Amazonka.M2.DeleteApplicationFromEnvironment
+import Amazonka.M2.DeleteEnvironment
+import Amazonka.M2.GetApplication
+import Amazonka.M2.GetApplicationVersion
+import Amazonka.M2.GetBatchJobExecution
+import Amazonka.M2.GetDataSetDetails
+import Amazonka.M2.GetDataSetImportTask
+import Amazonka.M2.GetDeployment
+import Amazonka.M2.GetEnvironment
+import Amazonka.M2.Lens
+import Amazonka.M2.ListApplicationVersions
+import Amazonka.M2.ListApplications
+import Amazonka.M2.ListBatchJobDefinitions
+import Amazonka.M2.ListBatchJobExecutions
+import Amazonka.M2.ListDataSetImportHistory
+import Amazonka.M2.ListDataSets
+import Amazonka.M2.ListDeployments
+import Amazonka.M2.ListEngineVersions
+import Amazonka.M2.ListEnvironments
+import Amazonka.M2.ListTagsForResource
+import Amazonka.M2.StartApplication
+import Amazonka.M2.StartBatchJob
+import Amazonka.M2.StopApplication
+import Amazonka.M2.TagResource
+import Amazonka.M2.Types
+import Amazonka.M2.UntagResource
+import Amazonka.M2.UpdateApplication
+import Amazonka.M2.UpdateEnvironment
+import Amazonka.M2.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 'M2'.
+
+-- $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/M2/CancelBatchJobExecution.hs b/gen/Amazonka/M2/CancelBatchJobExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/CancelBatchJobExecution.hs
@@ -0,0 +1,179 @@
+{-# 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.M2.CancelBatchJobExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the running of a specific batch job execution.
+module Amazonka.M2.CancelBatchJobExecution
+  ( -- * Creating a Request
+    CancelBatchJobExecution (..),
+    newCancelBatchJobExecution,
+
+    -- * Request Lenses
+    cancelBatchJobExecution_applicationId,
+    cancelBatchJobExecution_executionId,
+
+    -- * Destructuring the Response
+    CancelBatchJobExecutionResponse (..),
+    newCancelBatchJobExecutionResponse,
+
+    -- * Response Lenses
+    cancelBatchJobExecutionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelBatchJobExecution' smart constructor.
+data CancelBatchJobExecution = CancelBatchJobExecution'
+  { -- | The unique identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier of the batch job execution.
+    executionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBatchJobExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelBatchJobExecution_applicationId' - The unique identifier of the application.
+--
+-- 'executionId', 'cancelBatchJobExecution_executionId' - The unique identifier of the batch job execution.
+newCancelBatchJobExecution ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'executionId'
+  Prelude.Text ->
+  CancelBatchJobExecution
+newCancelBatchJobExecution
+  pApplicationId_
+  pExecutionId_ =
+    CancelBatchJobExecution'
+      { applicationId =
+          pApplicationId_,
+        executionId = pExecutionId_
+      }
+
+-- | The unique identifier of the application.
+cancelBatchJobExecution_applicationId :: Lens.Lens' CancelBatchJobExecution Prelude.Text
+cancelBatchJobExecution_applicationId = Lens.lens (\CancelBatchJobExecution' {applicationId} -> applicationId) (\s@CancelBatchJobExecution' {} a -> s {applicationId = a} :: CancelBatchJobExecution)
+
+-- | The unique identifier of the batch job execution.
+cancelBatchJobExecution_executionId :: Lens.Lens' CancelBatchJobExecution Prelude.Text
+cancelBatchJobExecution_executionId = Lens.lens (\CancelBatchJobExecution' {executionId} -> executionId) (\s@CancelBatchJobExecution' {} a -> s {executionId = a} :: CancelBatchJobExecution)
+
+instance Core.AWSRequest CancelBatchJobExecution where
+  type
+    AWSResponse CancelBatchJobExecution =
+      CancelBatchJobExecutionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelBatchJobExecutionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelBatchJobExecution where
+  hashWithSalt _salt CancelBatchJobExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` executionId
+
+instance Prelude.NFData CancelBatchJobExecution where
+  rnf CancelBatchJobExecution' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf executionId
+
+instance Data.ToHeaders CancelBatchJobExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelBatchJobExecution where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath CancelBatchJobExecution where
+  toPath CancelBatchJobExecution' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/batch-job-executions/",
+        Data.toBS executionId,
+        "/cancel"
+      ]
+
+instance Data.ToQuery CancelBatchJobExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelBatchJobExecutionResponse' smart constructor.
+data CancelBatchJobExecutionResponse = CancelBatchJobExecutionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBatchJobExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelBatchJobExecutionResponse_httpStatus' - The response's http status code.
+newCancelBatchJobExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelBatchJobExecutionResponse
+newCancelBatchJobExecutionResponse pHttpStatus_ =
+  CancelBatchJobExecutionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelBatchJobExecutionResponse_httpStatus :: Lens.Lens' CancelBatchJobExecutionResponse Prelude.Int
+cancelBatchJobExecutionResponse_httpStatus = Lens.lens (\CancelBatchJobExecutionResponse' {httpStatus} -> httpStatus) (\s@CancelBatchJobExecutionResponse' {} a -> s {httpStatus = a} :: CancelBatchJobExecutionResponse)
+
+instance
+  Prelude.NFData
+    CancelBatchJobExecutionResponse
+  where
+  rnf CancelBatchJobExecutionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/CreateApplication.hs b/gen/Amazonka/M2/CreateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/CreateApplication.hs
@@ -0,0 +1,304 @@
+{-# 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.M2.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)
+--
+-- Creates a new application with given parameters. Requires an existing
+-- runtime environment and application definition file.
+module Amazonka.M2.CreateApplication
+  ( -- * Creating a Request
+    CreateApplication (..),
+    newCreateApplication,
+
+    -- * Request Lenses
+    createApplication_clientToken,
+    createApplication_description,
+    createApplication_kmsKeyId,
+    createApplication_tags,
+    createApplication_definition,
+    createApplication_engineType,
+    createApplication_name,
+
+    -- * Destructuring the Response
+    CreateApplicationResponse (..),
+    newCreateApplicationResponse,
+
+    -- * Response Lenses
+    createApplicationResponse_httpStatus,
+    createApplicationResponse_applicationArn,
+    createApplicationResponse_applicationId,
+    createApplicationResponse_applicationVersion,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.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'
+  { -- | Unique, case-sensitive identifier the service generates to ensure the
+    -- idempotency of the request to create an application. The service
+    -- generates the clientToken when the API call is triggered. The token
+    -- expires after one hour, so if you retry the API within this timeframe
+    -- with the same clientToken, you will get the same response. The service
+    -- also handles deleting the clientToken after it expires.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of a customer managed key.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags to apply to the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The application definition for this application. You can specify either
+    -- inline JSON or an S3 bucket location.
+    definition :: Definition,
+    -- | The type of the target platform for this application.
+    engineType :: EngineType,
+    -- | The unique identifier of the application.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, 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:
+--
+-- 'clientToken', 'createApplication_clientToken' - Unique, case-sensitive identifier the service generates to ensure the
+-- idempotency of the request to create an application. The service
+-- generates the clientToken when the API call is triggered. The token
+-- expires after one hour, so if you retry the API within this timeframe
+-- with the same clientToken, you will get the same response. The service
+-- also handles deleting the clientToken after it expires.
+--
+-- 'description', 'createApplication_description' - The description of the application.
+--
+-- 'kmsKeyId', 'createApplication_kmsKeyId' - The identifier of a customer managed key.
+--
+-- 'tags', 'createApplication_tags' - A list of tags to apply to the application.
+--
+-- 'definition', 'createApplication_definition' - The application definition for this application. You can specify either
+-- inline JSON or an S3 bucket location.
+--
+-- 'engineType', 'createApplication_engineType' - The type of the target platform for this application.
+--
+-- 'name', 'createApplication_name' - The unique identifier of the application.
+newCreateApplication ::
+  -- | 'definition'
+  Definition ->
+  -- | 'engineType'
+  EngineType ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateApplication
+newCreateApplication pDefinition_ pEngineType_ pName_ =
+  CreateApplication'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      definition = pDefinition_,
+      engineType = pEngineType_,
+      name = pName_
+    }
+
+-- | Unique, case-sensitive identifier the service generates to ensure the
+-- idempotency of the request to create an application. The service
+-- generates the clientToken when the API call is triggered. The token
+-- expires after one hour, so if you retry the API within this timeframe
+-- with the same clientToken, you will get the same response. The service
+-- also handles deleting the clientToken after it expires.
+createApplication_clientToken :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_clientToken = Lens.lens (\CreateApplication' {clientToken} -> clientToken) (\s@CreateApplication' {} a -> s {clientToken = a} :: CreateApplication)
+
+-- | The description of the application.
+createApplication_description :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_description = Lens.lens (\CreateApplication' {description} -> description) (\s@CreateApplication' {} a -> s {description = a} :: CreateApplication)
+
+-- | The identifier of a customer managed key.
+createApplication_kmsKeyId :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_kmsKeyId = Lens.lens (\CreateApplication' {kmsKeyId} -> kmsKeyId) (\s@CreateApplication' {} a -> s {kmsKeyId = a} :: CreateApplication)
+
+-- | A list of tags to apply to the application.
+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 Lens.coerced
+
+-- | The application definition for this application. You can specify either
+-- inline JSON or an S3 bucket location.
+createApplication_definition :: Lens.Lens' CreateApplication Definition
+createApplication_definition = Lens.lens (\CreateApplication' {definition} -> definition) (\s@CreateApplication' {} a -> s {definition = a} :: CreateApplication)
+
+-- | The type of the target platform for this application.
+createApplication_engineType :: Lens.Lens' CreateApplication EngineType
+createApplication_engineType = Lens.lens (\CreateApplication' {engineType} -> engineType) (\s@CreateApplication' {} a -> s {engineType = a} :: CreateApplication)
+
+-- | The unique identifier of the application.
+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 =
+      CreateApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationArn")
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "applicationVersion")
+      )
+
+instance Prelude.Hashable CreateApplication where
+  hashWithSalt _salt CreateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` definition
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateApplication where
+  rnf CreateApplication' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf definition
+      `Prelude.seq` Prelude.rnf engineType
+      `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
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("definition" Data..= definition),
+            Prelude.Just ("engineType" Data..= engineType),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateApplication where
+  toPath = Prelude.const "/applications"
+
+instance Data.ToQuery CreateApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateApplicationResponse' smart constructor.
+data CreateApplicationResponse = CreateApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application.
+    applicationArn :: Prelude.Text,
+    -- | The unique application identifier.
+    applicationId :: Prelude.Text,
+    -- | The version number of the application.
+    applicationVersion :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createApplicationResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationArn', 'createApplicationResponse_applicationArn' - The Amazon Resource Name (ARN) of the application.
+--
+-- 'applicationId', 'createApplicationResponse_applicationId' - The unique application identifier.
+--
+-- 'applicationVersion', 'createApplicationResponse_applicationVersion' - The version number of the application.
+newCreateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationArn'
+  Prelude.Text ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  CreateApplicationResponse
+newCreateApplicationResponse
+  pHttpStatus_
+  pApplicationArn_
+  pApplicationId_
+  pApplicationVersion_ =
+    CreateApplicationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        applicationArn = pApplicationArn_,
+        applicationId = pApplicationId_,
+        applicationVersion = pApplicationVersion_
+      }
+
+-- | The response's http status code.
+createApplicationResponse_httpStatus :: Lens.Lens' CreateApplicationResponse Prelude.Int
+createApplicationResponse_httpStatus = Lens.lens (\CreateApplicationResponse' {httpStatus} -> httpStatus) (\s@CreateApplicationResponse' {} a -> s {httpStatus = a} :: CreateApplicationResponse)
+
+-- | The Amazon Resource Name (ARN) of the application.
+createApplicationResponse_applicationArn :: Lens.Lens' CreateApplicationResponse Prelude.Text
+createApplicationResponse_applicationArn = Lens.lens (\CreateApplicationResponse' {applicationArn} -> applicationArn) (\s@CreateApplicationResponse' {} a -> s {applicationArn = a} :: CreateApplicationResponse)
+
+-- | The unique application identifier.
+createApplicationResponse_applicationId :: Lens.Lens' CreateApplicationResponse Prelude.Text
+createApplicationResponse_applicationId = Lens.lens (\CreateApplicationResponse' {applicationId} -> applicationId) (\s@CreateApplicationResponse' {} a -> s {applicationId = a} :: CreateApplicationResponse)
+
+-- | The version number of the application.
+createApplicationResponse_applicationVersion :: Lens.Lens' CreateApplicationResponse Prelude.Natural
+createApplicationResponse_applicationVersion = Lens.lens (\CreateApplicationResponse' {applicationVersion} -> applicationVersion) (\s@CreateApplicationResponse' {} a -> s {applicationVersion = a} :: CreateApplicationResponse)
+
+instance Prelude.NFData CreateApplicationResponse where
+  rnf CreateApplicationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf applicationVersion
diff --git a/gen/Amazonka/M2/CreateDataSetImportTask.hs b/gen/Amazonka/M2/CreateDataSetImportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/CreateDataSetImportTask.hs
@@ -0,0 +1,235 @@
+{-# 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.M2.CreateDataSetImportTask
+-- 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 data set import task for a specific application.
+module Amazonka.M2.CreateDataSetImportTask
+  ( -- * Creating a Request
+    CreateDataSetImportTask (..),
+    newCreateDataSetImportTask,
+
+    -- * Request Lenses
+    createDataSetImportTask_clientToken,
+    createDataSetImportTask_applicationId,
+    createDataSetImportTask_importConfig,
+
+    -- * Destructuring the Response
+    CreateDataSetImportTaskResponse (..),
+    newCreateDataSetImportTaskResponse,
+
+    -- * Response Lenses
+    createDataSetImportTaskResponse_httpStatus,
+    createDataSetImportTaskResponse_taskId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDataSetImportTask' smart constructor.
+data CreateDataSetImportTask = CreateDataSetImportTask'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request to create a data set import. The service generates the
+    -- clientToken when the API call is triggered. The token expires after one
+    -- hour, so if you retry the API within this timeframe with the same
+    -- clientToken, you will get the same response. The service also handles
+    -- deleting the clientToken after it expires.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the application for which you want to import
+    -- data sets.
+    applicationId :: Prelude.Text,
+    -- | The data set import task configuration.
+    importConfig :: DataSetImportConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataSetImportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createDataSetImportTask_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request to create a data set import. The service generates the
+-- clientToken when the API call is triggered. The token expires after one
+-- hour, so if you retry the API within this timeframe with the same
+-- clientToken, you will get the same response. The service also handles
+-- deleting the clientToken after it expires.
+--
+-- 'applicationId', 'createDataSetImportTask_applicationId' - The unique identifier of the application for which you want to import
+-- data sets.
+--
+-- 'importConfig', 'createDataSetImportTask_importConfig' - The data set import task configuration.
+newCreateDataSetImportTask ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'importConfig'
+  DataSetImportConfig ->
+  CreateDataSetImportTask
+newCreateDataSetImportTask
+  pApplicationId_
+  pImportConfig_ =
+    CreateDataSetImportTask'
+      { clientToken =
+          Prelude.Nothing,
+        applicationId = pApplicationId_,
+        importConfig = pImportConfig_
+      }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request to create a data set import. The service generates the
+-- clientToken when the API call is triggered. The token expires after one
+-- hour, so if you retry the API within this timeframe with the same
+-- clientToken, you will get the same response. The service also handles
+-- deleting the clientToken after it expires.
+createDataSetImportTask_clientToken :: Lens.Lens' CreateDataSetImportTask (Prelude.Maybe Prelude.Text)
+createDataSetImportTask_clientToken = Lens.lens (\CreateDataSetImportTask' {clientToken} -> clientToken) (\s@CreateDataSetImportTask' {} a -> s {clientToken = a} :: CreateDataSetImportTask)
+
+-- | The unique identifier of the application for which you want to import
+-- data sets.
+createDataSetImportTask_applicationId :: Lens.Lens' CreateDataSetImportTask Prelude.Text
+createDataSetImportTask_applicationId = Lens.lens (\CreateDataSetImportTask' {applicationId} -> applicationId) (\s@CreateDataSetImportTask' {} a -> s {applicationId = a} :: CreateDataSetImportTask)
+
+-- | The data set import task configuration.
+createDataSetImportTask_importConfig :: Lens.Lens' CreateDataSetImportTask DataSetImportConfig
+createDataSetImportTask_importConfig = Lens.lens (\CreateDataSetImportTask' {importConfig} -> importConfig) (\s@CreateDataSetImportTask' {} a -> s {importConfig = a} :: CreateDataSetImportTask)
+
+instance Core.AWSRequest CreateDataSetImportTask where
+  type
+    AWSResponse CreateDataSetImportTask =
+      CreateDataSetImportTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDataSetImportTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "taskId")
+      )
+
+instance Prelude.Hashable CreateDataSetImportTask where
+  hashWithSalt _salt CreateDataSetImportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` importConfig
+
+instance Prelude.NFData CreateDataSetImportTask where
+  rnf CreateDataSetImportTask' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf importConfig
+
+instance Data.ToHeaders CreateDataSetImportTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDataSetImportTask where
+  toJSON CreateDataSetImportTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("importConfig" Data..= importConfig)
+          ]
+      )
+
+instance Data.ToPath CreateDataSetImportTask where
+  toPath CreateDataSetImportTask' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/dataset-import-task"
+      ]
+
+instance Data.ToQuery CreateDataSetImportTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDataSetImportTaskResponse' smart constructor.
+data CreateDataSetImportTaskResponse = CreateDataSetImportTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The task identifier. This operation is asynchronous. Use this identifier
+    -- with the GetDataSetImportTask operation to obtain the status of this
+    -- task.
+    taskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataSetImportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDataSetImportTaskResponse_httpStatus' - The response's http status code.
+--
+-- 'taskId', 'createDataSetImportTaskResponse_taskId' - The task identifier. This operation is asynchronous. Use this identifier
+-- with the GetDataSetImportTask operation to obtain the status of this
+-- task.
+newCreateDataSetImportTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'taskId'
+  Prelude.Text ->
+  CreateDataSetImportTaskResponse
+newCreateDataSetImportTaskResponse
+  pHttpStatus_
+  pTaskId_ =
+    CreateDataSetImportTaskResponse'
+      { httpStatus =
+          pHttpStatus_,
+        taskId = pTaskId_
+      }
+
+-- | The response's http status code.
+createDataSetImportTaskResponse_httpStatus :: Lens.Lens' CreateDataSetImportTaskResponse Prelude.Int
+createDataSetImportTaskResponse_httpStatus = Lens.lens (\CreateDataSetImportTaskResponse' {httpStatus} -> httpStatus) (\s@CreateDataSetImportTaskResponse' {} a -> s {httpStatus = a} :: CreateDataSetImportTaskResponse)
+
+-- | The task identifier. This operation is asynchronous. Use this identifier
+-- with the GetDataSetImportTask operation to obtain the status of this
+-- task.
+createDataSetImportTaskResponse_taskId :: Lens.Lens' CreateDataSetImportTaskResponse Prelude.Text
+createDataSetImportTaskResponse_taskId = Lens.lens (\CreateDataSetImportTaskResponse' {taskId} -> taskId) (\s@CreateDataSetImportTaskResponse' {} a -> s {taskId = a} :: CreateDataSetImportTaskResponse)
+
+instance
+  Prelude.NFData
+    CreateDataSetImportTaskResponse
+  where
+  rnf CreateDataSetImportTaskResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf taskId
diff --git a/gen/Amazonka/M2/CreateDeployment.hs b/gen/Amazonka/M2/CreateDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/CreateDeployment.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.CreateDeployment
+-- 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 and starts a deployment to deploy an application into a runtime
+-- environment.
+module Amazonka.M2.CreateDeployment
+  ( -- * Creating a Request
+    CreateDeployment (..),
+    newCreateDeployment,
+
+    -- * Request Lenses
+    createDeployment_clientToken,
+    createDeployment_applicationId,
+    createDeployment_applicationVersion,
+    createDeployment_environmentId,
+
+    -- * Destructuring the Response
+    CreateDeploymentResponse (..),
+    newCreateDeploymentResponse,
+
+    -- * Response Lenses
+    createDeploymentResponse_httpStatus,
+    createDeploymentResponse_deploymentId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDeployment' smart constructor.
+data CreateDeployment = CreateDeployment'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request to create a deployment. The service generates the
+    -- clientToken when the API call is triggered. The token expires after one
+    -- hour, so if you retry the API within this timeframe with the same
+    -- clientToken, you will get the same response. The service also handles
+    -- deleting the clientToken after it expires.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The application identifier.
+    applicationId :: Prelude.Text,
+    -- | The version of the application to deploy.
+    applicationVersion :: Prelude.Natural,
+    -- | The identifier of the runtime environment where you want to deploy this
+    -- application.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createDeployment_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request to create a deployment. The service generates the
+-- clientToken when the API call is triggered. The token expires after one
+-- hour, so if you retry the API within this timeframe with the same
+-- clientToken, you will get the same response. The service also handles
+-- deleting the clientToken after it expires.
+--
+-- 'applicationId', 'createDeployment_applicationId' - The application identifier.
+--
+-- 'applicationVersion', 'createDeployment_applicationVersion' - The version of the application to deploy.
+--
+-- 'environmentId', 'createDeployment_environmentId' - The identifier of the runtime environment where you want to deploy this
+-- application.
+newCreateDeployment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  CreateDeployment
+newCreateDeployment
+  pApplicationId_
+  pApplicationVersion_
+  pEnvironmentId_ =
+    CreateDeployment'
+      { clientToken = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        applicationVersion = pApplicationVersion_,
+        environmentId = pEnvironmentId_
+      }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request to create a deployment. The service generates the
+-- clientToken when the API call is triggered. The token expires after one
+-- hour, so if you retry the API within this timeframe with the same
+-- clientToken, you will get the same response. The service also handles
+-- deleting the clientToken after it expires.
+createDeployment_clientToken :: Lens.Lens' CreateDeployment (Prelude.Maybe Prelude.Text)
+createDeployment_clientToken = Lens.lens (\CreateDeployment' {clientToken} -> clientToken) (\s@CreateDeployment' {} a -> s {clientToken = a} :: CreateDeployment)
+
+-- | The application identifier.
+createDeployment_applicationId :: Lens.Lens' CreateDeployment Prelude.Text
+createDeployment_applicationId = Lens.lens (\CreateDeployment' {applicationId} -> applicationId) (\s@CreateDeployment' {} a -> s {applicationId = a} :: CreateDeployment)
+
+-- | The version of the application to deploy.
+createDeployment_applicationVersion :: Lens.Lens' CreateDeployment Prelude.Natural
+createDeployment_applicationVersion = Lens.lens (\CreateDeployment' {applicationVersion} -> applicationVersion) (\s@CreateDeployment' {} a -> s {applicationVersion = a} :: CreateDeployment)
+
+-- | The identifier of the runtime environment where you want to deploy this
+-- application.
+createDeployment_environmentId :: Lens.Lens' CreateDeployment Prelude.Text
+createDeployment_environmentId = Lens.lens (\CreateDeployment' {environmentId} -> environmentId) (\s@CreateDeployment' {} a -> s {environmentId = a} :: CreateDeployment)
+
+instance Core.AWSRequest CreateDeployment where
+  type
+    AWSResponse CreateDeployment =
+      CreateDeploymentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDeploymentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "deploymentId")
+      )
+
+instance Prelude.Hashable CreateDeployment where
+  hashWithSalt _salt CreateDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData CreateDeployment where
+  rnf CreateDeployment' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders CreateDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDeployment where
+  toJSON CreateDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just
+              ("applicationVersion" Data..= applicationVersion),
+            Prelude.Just
+              ("environmentId" Data..= environmentId)
+          ]
+      )
+
+instance Data.ToPath CreateDeployment where
+  toPath CreateDeployment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/deployments"
+      ]
+
+instance Data.ToQuery CreateDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDeploymentResponse' smart constructor.
+data CreateDeploymentResponse = CreateDeploymentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of the deployment.
+    deploymentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDeploymentResponse_httpStatus' - The response's http status code.
+--
+-- 'deploymentId', 'createDeploymentResponse_deploymentId' - The unique identifier of the deployment.
+newCreateDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  CreateDeploymentResponse
+newCreateDeploymentResponse
+  pHttpStatus_
+  pDeploymentId_ =
+    CreateDeploymentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        deploymentId = pDeploymentId_
+      }
+
+-- | The response's http status code.
+createDeploymentResponse_httpStatus :: Lens.Lens' CreateDeploymentResponse Prelude.Int
+createDeploymentResponse_httpStatus = Lens.lens (\CreateDeploymentResponse' {httpStatus} -> httpStatus) (\s@CreateDeploymentResponse' {} a -> s {httpStatus = a} :: CreateDeploymentResponse)
+
+-- | The unique identifier of the deployment.
+createDeploymentResponse_deploymentId :: Lens.Lens' CreateDeploymentResponse Prelude.Text
+createDeploymentResponse_deploymentId = Lens.lens (\CreateDeploymentResponse' {deploymentId} -> deploymentId) (\s@CreateDeploymentResponse' {} a -> s {deploymentId = a} :: CreateDeploymentResponse)
+
+instance Prelude.NFData CreateDeploymentResponse where
+  rnf CreateDeploymentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf deploymentId
diff --git a/gen/Amazonka/M2/CreateEnvironment.hs b/gen/Amazonka/M2/CreateEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/CreateEnvironment.hs
@@ -0,0 +1,384 @@
+{-# 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.M2.CreateEnvironment
+-- 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 runtime environment for a given runtime engine.
+module Amazonka.M2.CreateEnvironment
+  ( -- * Creating a Request
+    CreateEnvironment (..),
+    newCreateEnvironment,
+
+    -- * Request Lenses
+    createEnvironment_clientToken,
+    createEnvironment_description,
+    createEnvironment_engineVersion,
+    createEnvironment_highAvailabilityConfig,
+    createEnvironment_kmsKeyId,
+    createEnvironment_preferredMaintenanceWindow,
+    createEnvironment_publiclyAccessible,
+    createEnvironment_securityGroupIds,
+    createEnvironment_storageConfigurations,
+    createEnvironment_subnetIds,
+    createEnvironment_tags,
+    createEnvironment_engineType,
+    createEnvironment_instanceType,
+    createEnvironment_name,
+
+    -- * Destructuring the Response
+    CreateEnvironmentResponse (..),
+    newCreateEnvironmentResponse,
+
+    -- * Response Lenses
+    createEnvironmentResponse_httpStatus,
+    createEnvironmentResponse_environmentId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateEnvironment' smart constructor.
+data CreateEnvironment = CreateEnvironment'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request to create an environment. The service generates the
+    -- clientToken when the API call is triggered. The token expires after one
+    -- hour, so if you retry the API within this timeframe with the same
+    -- clientToken, you will get the same response. The service also handles
+    -- deleting the clientToken after it expires.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the runtime environment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The version of the engine type for the runtime environment.
+    engineVersion :: Prelude.Maybe Prelude.Text,
+    -- | The details of a high availability configuration for this runtime
+    -- environment.
+    highAvailabilityConfig :: Prelude.Maybe HighAvailabilityConfig,
+    -- | The identifier of a customer managed key.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | Configures the maintenance window you want for the runtime environment.
+    -- If you do not provide a value, a random system-generated value will be
+    -- assigned.
+    preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the runtime environment is publicly accessible.
+    publiclyAccessible :: Prelude.Maybe Prelude.Bool,
+    -- | The list of security groups for the VPC associated with this runtime
+    -- environment.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Optional. The storage configurations for this runtime environment.
+    storageConfigurations :: Prelude.Maybe [StorageConfiguration],
+    -- | The list of subnets associated with the VPC for this runtime
+    -- environment.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The tags for the runtime environment.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The engine type for the runtime environment.
+    engineType :: EngineType,
+    -- | The type of instance for the runtime environment.
+    instanceType :: Prelude.Text,
+    -- | The name of the runtime environment. Must be unique within the account.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createEnvironment_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request to create an environment. The service generates the
+-- clientToken when the API call is triggered. The token expires after one
+-- hour, so if you retry the API within this timeframe with the same
+-- clientToken, you will get the same response. The service also handles
+-- deleting the clientToken after it expires.
+--
+-- 'description', 'createEnvironment_description' - The description of the runtime environment.
+--
+-- 'engineVersion', 'createEnvironment_engineVersion' - The version of the engine type for the runtime environment.
+--
+-- 'highAvailabilityConfig', 'createEnvironment_highAvailabilityConfig' - The details of a high availability configuration for this runtime
+-- environment.
+--
+-- 'kmsKeyId', 'createEnvironment_kmsKeyId' - The identifier of a customer managed key.
+--
+-- 'preferredMaintenanceWindow', 'createEnvironment_preferredMaintenanceWindow' - Configures the maintenance window you want for the runtime environment.
+-- If you do not provide a value, a random system-generated value will be
+-- assigned.
+--
+-- 'publiclyAccessible', 'createEnvironment_publiclyAccessible' - Specifies whether the runtime environment is publicly accessible.
+--
+-- 'securityGroupIds', 'createEnvironment_securityGroupIds' - The list of security groups for the VPC associated with this runtime
+-- environment.
+--
+-- 'storageConfigurations', 'createEnvironment_storageConfigurations' - Optional. The storage configurations for this runtime environment.
+--
+-- 'subnetIds', 'createEnvironment_subnetIds' - The list of subnets associated with the VPC for this runtime
+-- environment.
+--
+-- 'tags', 'createEnvironment_tags' - The tags for the runtime environment.
+--
+-- 'engineType', 'createEnvironment_engineType' - The engine type for the runtime environment.
+--
+-- 'instanceType', 'createEnvironment_instanceType' - The type of instance for the runtime environment.
+--
+-- 'name', 'createEnvironment_name' - The name of the runtime environment. Must be unique within the account.
+newCreateEnvironment ::
+  -- | 'engineType'
+  EngineType ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateEnvironment
+newCreateEnvironment
+  pEngineType_
+  pInstanceType_
+  pName_ =
+    CreateEnvironment'
+      { clientToken = Prelude.Nothing,
+        description = Prelude.Nothing,
+        engineVersion = Prelude.Nothing,
+        highAvailabilityConfig = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        preferredMaintenanceWindow = Prelude.Nothing,
+        publiclyAccessible = Prelude.Nothing,
+        securityGroupIds = Prelude.Nothing,
+        storageConfigurations = Prelude.Nothing,
+        subnetIds = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        engineType = pEngineType_,
+        instanceType = pInstanceType_,
+        name = pName_
+      }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request to create an environment. The service generates the
+-- clientToken when the API call is triggered. The token expires after one
+-- hour, so if you retry the API within this timeframe with the same
+-- clientToken, you will get the same response. The service also handles
+-- deleting the clientToken after it expires.
+createEnvironment_clientToken :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Text)
+createEnvironment_clientToken = Lens.lens (\CreateEnvironment' {clientToken} -> clientToken) (\s@CreateEnvironment' {} a -> s {clientToken = a} :: CreateEnvironment)
+
+-- | The description of the runtime environment.
+createEnvironment_description :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Text)
+createEnvironment_description = Lens.lens (\CreateEnvironment' {description} -> description) (\s@CreateEnvironment' {} a -> s {description = a} :: CreateEnvironment)
+
+-- | The version of the engine type for the runtime environment.
+createEnvironment_engineVersion :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Text)
+createEnvironment_engineVersion = Lens.lens (\CreateEnvironment' {engineVersion} -> engineVersion) (\s@CreateEnvironment' {} a -> s {engineVersion = a} :: CreateEnvironment)
+
+-- | The details of a high availability configuration for this runtime
+-- environment.
+createEnvironment_highAvailabilityConfig :: Lens.Lens' CreateEnvironment (Prelude.Maybe HighAvailabilityConfig)
+createEnvironment_highAvailabilityConfig = Lens.lens (\CreateEnvironment' {highAvailabilityConfig} -> highAvailabilityConfig) (\s@CreateEnvironment' {} a -> s {highAvailabilityConfig = a} :: CreateEnvironment)
+
+-- | The identifier of a customer managed key.
+createEnvironment_kmsKeyId :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Text)
+createEnvironment_kmsKeyId = Lens.lens (\CreateEnvironment' {kmsKeyId} -> kmsKeyId) (\s@CreateEnvironment' {} a -> s {kmsKeyId = a} :: CreateEnvironment)
+
+-- | Configures the maintenance window you want for the runtime environment.
+-- If you do not provide a value, a random system-generated value will be
+-- assigned.
+createEnvironment_preferredMaintenanceWindow :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Text)
+createEnvironment_preferredMaintenanceWindow = Lens.lens (\CreateEnvironment' {preferredMaintenanceWindow} -> preferredMaintenanceWindow) (\s@CreateEnvironment' {} a -> s {preferredMaintenanceWindow = a} :: CreateEnvironment)
+
+-- | Specifies whether the runtime environment is publicly accessible.
+createEnvironment_publiclyAccessible :: Lens.Lens' CreateEnvironment (Prelude.Maybe Prelude.Bool)
+createEnvironment_publiclyAccessible = Lens.lens (\CreateEnvironment' {publiclyAccessible} -> publiclyAccessible) (\s@CreateEnvironment' {} a -> s {publiclyAccessible = a} :: CreateEnvironment)
+
+-- | The list of security groups for the VPC associated with this runtime
+-- environment.
+createEnvironment_securityGroupIds :: Lens.Lens' CreateEnvironment (Prelude.Maybe [Prelude.Text])
+createEnvironment_securityGroupIds = Lens.lens (\CreateEnvironment' {securityGroupIds} -> securityGroupIds) (\s@CreateEnvironment' {} a -> s {securityGroupIds = a} :: CreateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | Optional. The storage configurations for this runtime environment.
+createEnvironment_storageConfigurations :: Lens.Lens' CreateEnvironment (Prelude.Maybe [StorageConfiguration])
+createEnvironment_storageConfigurations = Lens.lens (\CreateEnvironment' {storageConfigurations} -> storageConfigurations) (\s@CreateEnvironment' {} a -> s {storageConfigurations = a} :: CreateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of subnets associated with the VPC for this runtime
+-- environment.
+createEnvironment_subnetIds :: Lens.Lens' CreateEnvironment (Prelude.Maybe [Prelude.Text])
+createEnvironment_subnetIds = Lens.lens (\CreateEnvironment' {subnetIds} -> subnetIds) (\s@CreateEnvironment' {} a -> s {subnetIds = a} :: CreateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags for the runtime environment.
+createEnvironment_tags :: Lens.Lens' CreateEnvironment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createEnvironment_tags = Lens.lens (\CreateEnvironment' {tags} -> tags) (\s@CreateEnvironment' {} a -> s {tags = a} :: CreateEnvironment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The engine type for the runtime environment.
+createEnvironment_engineType :: Lens.Lens' CreateEnvironment EngineType
+createEnvironment_engineType = Lens.lens (\CreateEnvironment' {engineType} -> engineType) (\s@CreateEnvironment' {} a -> s {engineType = a} :: CreateEnvironment)
+
+-- | The type of instance for the runtime environment.
+createEnvironment_instanceType :: Lens.Lens' CreateEnvironment Prelude.Text
+createEnvironment_instanceType = Lens.lens (\CreateEnvironment' {instanceType} -> instanceType) (\s@CreateEnvironment' {} a -> s {instanceType = a} :: CreateEnvironment)
+
+-- | The name of the runtime environment. Must be unique within the account.
+createEnvironment_name :: Lens.Lens' CreateEnvironment Prelude.Text
+createEnvironment_name = Lens.lens (\CreateEnvironment' {name} -> name) (\s@CreateEnvironment' {} a -> s {name = a} :: CreateEnvironment)
+
+instance Core.AWSRequest CreateEnvironment where
+  type
+    AWSResponse CreateEnvironment =
+      CreateEnvironmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "environmentId")
+      )
+
+instance Prelude.Hashable CreateEnvironment where
+  hashWithSalt _salt CreateEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` engineVersion
+      `Prelude.hashWithSalt` highAvailabilityConfig
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` preferredMaintenanceWindow
+      `Prelude.hashWithSalt` publiclyAccessible
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` storageConfigurations
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateEnvironment where
+  rnf CreateEnvironment' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf engineVersion
+      `Prelude.seq` Prelude.rnf highAvailabilityConfig
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf preferredMaintenanceWindow
+      `Prelude.seq` Prelude.rnf publiclyAccessible
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf storageConfigurations
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEnvironment where
+  toJSON CreateEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("engineVersion" Data..=) Prelude.<$> engineVersion,
+            ("highAvailabilityConfig" Data..=)
+              Prelude.<$> highAvailabilityConfig,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("preferredMaintenanceWindow" Data..=)
+              Prelude.<$> preferredMaintenanceWindow,
+            ("publiclyAccessible" Data..=)
+              Prelude.<$> publiclyAccessible,
+            ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("storageConfigurations" Data..=)
+              Prelude.<$> storageConfigurations,
+            ("subnetIds" Data..=) Prelude.<$> subnetIds,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("engineType" Data..= engineType),
+            Prelude.Just ("instanceType" Data..= instanceType),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateEnvironment where
+  toPath = Prelude.const "/environments"
+
+instance Data.ToQuery CreateEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEnvironmentResponse' smart constructor.
+data CreateEnvironmentResponse = CreateEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of the runtime environment.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createEnvironmentResponse_httpStatus' - The response's http status code.
+--
+-- 'environmentId', 'createEnvironmentResponse_environmentId' - The unique identifier of the runtime environment.
+newCreateEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  CreateEnvironmentResponse
+newCreateEnvironmentResponse
+  pHttpStatus_
+  pEnvironmentId_ =
+    CreateEnvironmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        environmentId = pEnvironmentId_
+      }
+
+-- | The response's http status code.
+createEnvironmentResponse_httpStatus :: Lens.Lens' CreateEnvironmentResponse Prelude.Int
+createEnvironmentResponse_httpStatus = Lens.lens (\CreateEnvironmentResponse' {httpStatus} -> httpStatus) (\s@CreateEnvironmentResponse' {} a -> s {httpStatus = a} :: CreateEnvironmentResponse)
+
+-- | The unique identifier of the runtime environment.
+createEnvironmentResponse_environmentId :: Lens.Lens' CreateEnvironmentResponse Prelude.Text
+createEnvironmentResponse_environmentId = Lens.lens (\CreateEnvironmentResponse' {environmentId} -> environmentId) (\s@CreateEnvironmentResponse' {} a -> s {environmentId = a} :: CreateEnvironmentResponse)
+
+instance Prelude.NFData CreateEnvironmentResponse where
+  rnf CreateEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf environmentId
diff --git a/gen/Amazonka/M2/DeleteApplication.hs b/gen/Amazonka/M2/DeleteApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/DeleteApplication.hs
@@ -0,0 +1,148 @@
+{-# 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.M2.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)
+--
+-- Deletes a specific application. You cannot delete a running application.
+module Amazonka.M2.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.M2.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'
+  { -- | The unique identifier of the application you want to delete.
+    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' - The unique identifier of the application you want to delete.
+newDeleteApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  DeleteApplication
+newDeleteApplication pApplicationId_ =
+  DeleteApplication' {applicationId = pApplicationId_}
+
+-- | The unique identifier of the application you want to delete.
+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.delete (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.ToPath DeleteApplication where
+  toPath DeleteApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId]
+
+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/M2/DeleteApplicationFromEnvironment.hs b/gen/Amazonka/M2/DeleteApplicationFromEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/DeleteApplicationFromEnvironment.hs
@@ -0,0 +1,200 @@
+{-# 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.M2.DeleteApplicationFromEnvironment
+-- 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 specific application from the specific runtime environment
+-- where it was previously deployed. You cannot delete a runtime
+-- environment using DeleteEnvironment if any application has ever been
+-- deployed to it. This API removes the association of the application with
+-- the runtime environment so you can delete the environment smoothly.
+module Amazonka.M2.DeleteApplicationFromEnvironment
+  ( -- * Creating a Request
+    DeleteApplicationFromEnvironment (..),
+    newDeleteApplicationFromEnvironment,
+
+    -- * Request Lenses
+    deleteApplicationFromEnvironment_applicationId,
+    deleteApplicationFromEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    DeleteApplicationFromEnvironmentResponse (..),
+    newDeleteApplicationFromEnvironmentResponse,
+
+    -- * Response Lenses
+    deleteApplicationFromEnvironmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApplicationFromEnvironment' smart constructor.
+data DeleteApplicationFromEnvironment = DeleteApplicationFromEnvironment'
+  { -- | The unique identifier of the application you want to delete.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier of the runtime environment where the application
+    -- was previously deployed.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplicationFromEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteApplicationFromEnvironment_applicationId' - The unique identifier of the application you want to delete.
+--
+-- 'environmentId', 'deleteApplicationFromEnvironment_environmentId' - The unique identifier of the runtime environment where the application
+-- was previously deployed.
+newDeleteApplicationFromEnvironment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  DeleteApplicationFromEnvironment
+newDeleteApplicationFromEnvironment
+  pApplicationId_
+  pEnvironmentId_ =
+    DeleteApplicationFromEnvironment'
+      { applicationId =
+          pApplicationId_,
+        environmentId = pEnvironmentId_
+      }
+
+-- | The unique identifier of the application you want to delete.
+deleteApplicationFromEnvironment_applicationId :: Lens.Lens' DeleteApplicationFromEnvironment Prelude.Text
+deleteApplicationFromEnvironment_applicationId = Lens.lens (\DeleteApplicationFromEnvironment' {applicationId} -> applicationId) (\s@DeleteApplicationFromEnvironment' {} a -> s {applicationId = a} :: DeleteApplicationFromEnvironment)
+
+-- | The unique identifier of the runtime environment where the application
+-- was previously deployed.
+deleteApplicationFromEnvironment_environmentId :: Lens.Lens' DeleteApplicationFromEnvironment Prelude.Text
+deleteApplicationFromEnvironment_environmentId = Lens.lens (\DeleteApplicationFromEnvironment' {environmentId} -> environmentId) (\s@DeleteApplicationFromEnvironment' {} a -> s {environmentId = a} :: DeleteApplicationFromEnvironment)
+
+instance
+  Core.AWSRequest
+    DeleteApplicationFromEnvironment
+  where
+  type
+    AWSResponse DeleteApplicationFromEnvironment =
+      DeleteApplicationFromEnvironmentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteApplicationFromEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteApplicationFromEnvironment
+  where
+  hashWithSalt
+    _salt
+    DeleteApplicationFromEnvironment' {..} =
+      _salt
+        `Prelude.hashWithSalt` applicationId
+        `Prelude.hashWithSalt` environmentId
+
+instance
+  Prelude.NFData
+    DeleteApplicationFromEnvironment
+  where
+  rnf DeleteApplicationFromEnvironment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance
+  Data.ToHeaders
+    DeleteApplicationFromEnvironment
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteApplicationFromEnvironment where
+  toPath DeleteApplicationFromEnvironment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/environment/",
+        Data.toBS environmentId
+      ]
+
+instance
+  Data.ToQuery
+    DeleteApplicationFromEnvironment
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApplicationFromEnvironmentResponse' smart constructor.
+data DeleteApplicationFromEnvironmentResponse = DeleteApplicationFromEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplicationFromEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteApplicationFromEnvironmentResponse_httpStatus' - The response's http status code.
+newDeleteApplicationFromEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteApplicationFromEnvironmentResponse
+newDeleteApplicationFromEnvironmentResponse
+  pHttpStatus_ =
+    DeleteApplicationFromEnvironmentResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteApplicationFromEnvironmentResponse_httpStatus :: Lens.Lens' DeleteApplicationFromEnvironmentResponse Prelude.Int
+deleteApplicationFromEnvironmentResponse_httpStatus = Lens.lens (\DeleteApplicationFromEnvironmentResponse' {httpStatus} -> httpStatus) (\s@DeleteApplicationFromEnvironmentResponse' {} a -> s {httpStatus = a} :: DeleteApplicationFromEnvironmentResponse)
+
+instance
+  Prelude.NFData
+    DeleteApplicationFromEnvironmentResponse
+  where
+  rnf DeleteApplicationFromEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/DeleteEnvironment.hs b/gen/Amazonka/M2/DeleteEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/DeleteEnvironment.hs
@@ -0,0 +1,150 @@
+{-# 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.M2.DeleteEnvironment
+-- 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 specific runtime environment. The environment cannot contain
+-- deployed applications. If it does, you must delete those applications
+-- before you delete the environment.
+module Amazonka.M2.DeleteEnvironment
+  ( -- * Creating a Request
+    DeleteEnvironment (..),
+    newDeleteEnvironment,
+
+    -- * Request Lenses
+    deleteEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    DeleteEnvironmentResponse (..),
+    newDeleteEnvironmentResponse,
+
+    -- * Response Lenses
+    deleteEnvironmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEnvironment' smart constructor.
+data DeleteEnvironment = DeleteEnvironment'
+  { -- | The unique identifier of the runtime environment you want to delete.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'deleteEnvironment_environmentId' - The unique identifier of the runtime environment you want to delete.
+newDeleteEnvironment ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  DeleteEnvironment
+newDeleteEnvironment pEnvironmentId_ =
+  DeleteEnvironment' {environmentId = pEnvironmentId_}
+
+-- | The unique identifier of the runtime environment you want to delete.
+deleteEnvironment_environmentId :: Lens.Lens' DeleteEnvironment Prelude.Text
+deleteEnvironment_environmentId = Lens.lens (\DeleteEnvironment' {environmentId} -> environmentId) (\s@DeleteEnvironment' {} a -> s {environmentId = a} :: DeleteEnvironment)
+
+instance Core.AWSRequest DeleteEnvironment where
+  type
+    AWSResponse DeleteEnvironment =
+      DeleteEnvironmentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEnvironment where
+  hashWithSalt _salt DeleteEnvironment' {..} =
+    _salt `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData DeleteEnvironment where
+  rnf DeleteEnvironment' {..} =
+    Prelude.rnf environmentId
+
+instance Data.ToHeaders DeleteEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEnvironment where
+  toPath DeleteEnvironment' {..} =
+    Prelude.mconcat
+      ["/environments/", Data.toBS environmentId]
+
+instance Data.ToQuery DeleteEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEnvironmentResponse' smart constructor.
+data DeleteEnvironmentResponse = DeleteEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEnvironmentResponse_httpStatus' - The response's http status code.
+newDeleteEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEnvironmentResponse
+newDeleteEnvironmentResponse pHttpStatus_ =
+  DeleteEnvironmentResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEnvironmentResponse_httpStatus :: Lens.Lens' DeleteEnvironmentResponse Prelude.Int
+deleteEnvironmentResponse_httpStatus = Lens.lens (\DeleteEnvironmentResponse' {httpStatus} -> httpStatus) (\s@DeleteEnvironmentResponse' {} a -> s {httpStatus = a} :: DeleteEnvironmentResponse)
+
+instance Prelude.NFData DeleteEnvironmentResponse where
+  rnf DeleteEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/GetApplication.hs b/gen/Amazonka/M2/GetApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetApplication.hs
@@ -0,0 +1,430 @@
+{-# 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.M2.GetApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the details of a specific application.
+module Amazonka.M2.GetApplication
+  ( -- * Creating a Request
+    GetApplication (..),
+    newGetApplication,
+
+    -- * Request Lenses
+    getApplication_applicationId,
+
+    -- * Destructuring the Response
+    GetApplicationResponse (..),
+    newGetApplicationResponse,
+
+    -- * Response Lenses
+    getApplicationResponse_deployedVersion,
+    getApplicationResponse_description,
+    getApplicationResponse_environmentId,
+    getApplicationResponse_kmsKeyId,
+    getApplicationResponse_lastStartTime,
+    getApplicationResponse_listenerArns,
+    getApplicationResponse_listenerPorts,
+    getApplicationResponse_loadBalancerDnsName,
+    getApplicationResponse_logGroups,
+    getApplicationResponse_statusReason,
+    getApplicationResponse_tags,
+    getApplicationResponse_targetGroupArns,
+    getApplicationResponse_httpStatus,
+    getApplicationResponse_applicationArn,
+    getApplicationResponse_applicationId,
+    getApplicationResponse_creationTime,
+    getApplicationResponse_engineType,
+    getApplicationResponse_latestVersion,
+    getApplicationResponse_name,
+    getApplicationResponse_status,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApplication' smart constructor.
+data GetApplication = GetApplication'
+  { -- | The identifier of the application.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getApplication_applicationId' - The identifier of the application.
+newGetApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  GetApplication
+newGetApplication pApplicationId_ =
+  GetApplication' {applicationId = pApplicationId_}
+
+-- | The identifier of the application.
+getApplication_applicationId :: Lens.Lens' GetApplication Prelude.Text
+getApplication_applicationId = Lens.lens (\GetApplication' {applicationId} -> applicationId) (\s@GetApplication' {} a -> s {applicationId = a} :: GetApplication)
+
+instance Core.AWSRequest GetApplication where
+  type
+    AWSResponse GetApplication =
+      GetApplicationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApplicationResponse'
+            Prelude.<$> (x Data..?> "deployedVersion")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "environmentId")
+            Prelude.<*> (x Data..?> "kmsKeyId")
+            Prelude.<*> (x Data..?> "lastStartTime")
+            Prelude.<*> (x Data..?> "listenerArns")
+            Prelude.<*> (x Data..?> "listenerPorts")
+            Prelude.<*> (x Data..?> "loadBalancerDnsName")
+            Prelude.<*> (x Data..?> "logGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "statusReason")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "targetGroupArns")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationArn")
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "engineType")
+            Prelude.<*> (x Data..:> "latestVersion")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance Prelude.Hashable GetApplication where
+  hashWithSalt _salt GetApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData GetApplication where
+  rnf GetApplication' {..} = Prelude.rnf applicationId
+
+instance Data.ToHeaders GetApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApplication where
+  toPath GetApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId]
+
+instance Data.ToQuery GetApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetApplicationResponse' smart constructor.
+data GetApplicationResponse = GetApplicationResponse'
+  { -- | The version of the application that is deployed.
+    deployedVersion :: Prelude.Maybe DeployedVersionSummary,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the runtime environment where you want to deploy the
+    -- application.
+    environmentId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of a customer managed key.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when you last started the application. Null until the
+    -- application runs for the first time.
+    lastStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) for the network load balancer listener
+    -- created in your Amazon Web Services account. Amazon Web Services
+    -- Mainframe Modernization creates this listener for you the first time you
+    -- deploy an application.
+    listenerArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The port associated with the network load balancer listener created in
+    -- your Amazon Web Services account.
+    listenerPorts :: Prelude.Maybe (Prelude.NonEmpty Prelude.Int),
+    -- | The public DNS name of the load balancer created in your Amazon Web
+    -- Services account.
+    loadBalancerDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The list of log summaries. Each log summary includes the log type as
+    -- well as the log group identifier. These are CloudWatch logs. Amazon Web
+    -- Services Mainframe Modernization pushes the application log to
+    -- CloudWatch under the customer\'s account.
+    logGroups :: Prelude.Maybe [LogGroupSummary],
+    -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags associated with the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Returns the Amazon Resource Names (ARNs) of the target groups that are
+    -- attached to the network load balancer.
+    targetGroupArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the application.
+    applicationArn :: Prelude.Text,
+    -- | The identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The timestamp when this application was created.
+    creationTime :: Data.POSIX,
+    -- | The type of the target platform for the application.
+    engineType :: EngineType,
+    -- | The latest version of the application.
+    latestVersion :: ApplicationVersionSummary,
+    -- | The unique identifier of the application.
+    name :: Prelude.Text,
+    -- | The status of the application.
+    status :: ApplicationLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deployedVersion', 'getApplicationResponse_deployedVersion' - The version of the application that is deployed.
+--
+-- 'description', 'getApplicationResponse_description' - The description of the application.
+--
+-- 'environmentId', 'getApplicationResponse_environmentId' - The identifier of the runtime environment where you want to deploy the
+-- application.
+--
+-- 'kmsKeyId', 'getApplicationResponse_kmsKeyId' - The identifier of a customer managed key.
+--
+-- 'lastStartTime', 'getApplicationResponse_lastStartTime' - The timestamp when you last started the application. Null until the
+-- application runs for the first time.
+--
+-- 'listenerArns', 'getApplicationResponse_listenerArns' - The Amazon Resource Name (ARN) for the network load balancer listener
+-- created in your Amazon Web Services account. Amazon Web Services
+-- Mainframe Modernization creates this listener for you the first time you
+-- deploy an application.
+--
+-- 'listenerPorts', 'getApplicationResponse_listenerPorts' - The port associated with the network load balancer listener created in
+-- your Amazon Web Services account.
+--
+-- 'loadBalancerDnsName', 'getApplicationResponse_loadBalancerDnsName' - The public DNS name of the load balancer created in your Amazon Web
+-- Services account.
+--
+-- 'logGroups', 'getApplicationResponse_logGroups' - The list of log summaries. Each log summary includes the log type as
+-- well as the log group identifier. These are CloudWatch logs. Amazon Web
+-- Services Mainframe Modernization pushes the application log to
+-- CloudWatch under the customer\'s account.
+--
+-- 'statusReason', 'getApplicationResponse_statusReason' - The reason for the reported status.
+--
+-- 'tags', 'getApplicationResponse_tags' - A list of tags associated with the application.
+--
+-- 'targetGroupArns', 'getApplicationResponse_targetGroupArns' - Returns the Amazon Resource Names (ARNs) of the target groups that are
+-- attached to the network load balancer.
+--
+-- 'httpStatus', 'getApplicationResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationArn', 'getApplicationResponse_applicationArn' - The Amazon Resource Name (ARN) of the application.
+--
+-- 'applicationId', 'getApplicationResponse_applicationId' - The identifier of the application.
+--
+-- 'creationTime', 'getApplicationResponse_creationTime' - The timestamp when this application was created.
+--
+-- 'engineType', 'getApplicationResponse_engineType' - The type of the target platform for the application.
+--
+-- 'latestVersion', 'getApplicationResponse_latestVersion' - The latest version of the application.
+--
+-- 'name', 'getApplicationResponse_name' - The unique identifier of the application.
+--
+-- 'status', 'getApplicationResponse_status' - The status of the application.
+newGetApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationArn'
+  Prelude.Text ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'engineType'
+  EngineType ->
+  -- | 'latestVersion'
+  ApplicationVersionSummary ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  ApplicationLifecycle ->
+  GetApplicationResponse
+newGetApplicationResponse
+  pHttpStatus_
+  pApplicationArn_
+  pApplicationId_
+  pCreationTime_
+  pEngineType_
+  pLatestVersion_
+  pName_
+  pStatus_ =
+    GetApplicationResponse'
+      { deployedVersion =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        environmentId = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        lastStartTime = Prelude.Nothing,
+        listenerArns = Prelude.Nothing,
+        listenerPorts = Prelude.Nothing,
+        loadBalancerDnsName = Prelude.Nothing,
+        logGroups = Prelude.Nothing,
+        statusReason = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        targetGroupArns = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        applicationArn = pApplicationArn_,
+        applicationId = pApplicationId_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        engineType = pEngineType_,
+        latestVersion = pLatestVersion_,
+        name = pName_,
+        status = pStatus_
+      }
+
+-- | The version of the application that is deployed.
+getApplicationResponse_deployedVersion :: Lens.Lens' GetApplicationResponse (Prelude.Maybe DeployedVersionSummary)
+getApplicationResponse_deployedVersion = Lens.lens (\GetApplicationResponse' {deployedVersion} -> deployedVersion) (\s@GetApplicationResponse' {} a -> s {deployedVersion = a} :: GetApplicationResponse)
+
+-- | The description of the application.
+getApplicationResponse_description :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_description = Lens.lens (\GetApplicationResponse' {description} -> description) (\s@GetApplicationResponse' {} a -> s {description = a} :: GetApplicationResponse)
+
+-- | The identifier of the runtime environment where you want to deploy the
+-- application.
+getApplicationResponse_environmentId :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_environmentId = Lens.lens (\GetApplicationResponse' {environmentId} -> environmentId) (\s@GetApplicationResponse' {} a -> s {environmentId = a} :: GetApplicationResponse)
+
+-- | The identifier of a customer managed key.
+getApplicationResponse_kmsKeyId :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_kmsKeyId = Lens.lens (\GetApplicationResponse' {kmsKeyId} -> kmsKeyId) (\s@GetApplicationResponse' {} a -> s {kmsKeyId = a} :: GetApplicationResponse)
+
+-- | The timestamp when you last started the application. Null until the
+-- application runs for the first time.
+getApplicationResponse_lastStartTime :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+getApplicationResponse_lastStartTime = Lens.lens (\GetApplicationResponse' {lastStartTime} -> lastStartTime) (\s@GetApplicationResponse' {} a -> s {lastStartTime = a} :: GetApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) for the network load balancer listener
+-- created in your Amazon Web Services account. Amazon Web Services
+-- Mainframe Modernization creates this listener for you the first time you
+-- deploy an application.
+getApplicationResponse_listenerArns :: Lens.Lens' GetApplicationResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getApplicationResponse_listenerArns = Lens.lens (\GetApplicationResponse' {listenerArns} -> listenerArns) (\s@GetApplicationResponse' {} a -> s {listenerArns = a} :: GetApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The port associated with the network load balancer listener created in
+-- your Amazon Web Services account.
+getApplicationResponse_listenerPorts :: Lens.Lens' GetApplicationResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Int))
+getApplicationResponse_listenerPorts = Lens.lens (\GetApplicationResponse' {listenerPorts} -> listenerPorts) (\s@GetApplicationResponse' {} a -> s {listenerPorts = a} :: GetApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The public DNS name of the load balancer created in your Amazon Web
+-- Services account.
+getApplicationResponse_loadBalancerDnsName :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_loadBalancerDnsName = Lens.lens (\GetApplicationResponse' {loadBalancerDnsName} -> loadBalancerDnsName) (\s@GetApplicationResponse' {} a -> s {loadBalancerDnsName = a} :: GetApplicationResponse)
+
+-- | The list of log summaries. Each log summary includes the log type as
+-- well as the log group identifier. These are CloudWatch logs. Amazon Web
+-- Services Mainframe Modernization pushes the application log to
+-- CloudWatch under the customer\'s account.
+getApplicationResponse_logGroups :: Lens.Lens' GetApplicationResponse (Prelude.Maybe [LogGroupSummary])
+getApplicationResponse_logGroups = Lens.lens (\GetApplicationResponse' {logGroups} -> logGroups) (\s@GetApplicationResponse' {} a -> s {logGroups = a} :: GetApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The reason for the reported status.
+getApplicationResponse_statusReason :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_statusReason = Lens.lens (\GetApplicationResponse' {statusReason} -> statusReason) (\s@GetApplicationResponse' {} a -> s {statusReason = a} :: GetApplicationResponse)
+
+-- | A list of tags associated with the application.
+getApplicationResponse_tags :: Lens.Lens' GetApplicationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getApplicationResponse_tags = Lens.lens (\GetApplicationResponse' {tags} -> tags) (\s@GetApplicationResponse' {} a -> s {tags = a} :: GetApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Returns the Amazon Resource Names (ARNs) of the target groups that are
+-- attached to the network load balancer.
+getApplicationResponse_targetGroupArns :: Lens.Lens' GetApplicationResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getApplicationResponse_targetGroupArns = Lens.lens (\GetApplicationResponse' {targetGroupArns} -> targetGroupArns) (\s@GetApplicationResponse' {} a -> s {targetGroupArns = a} :: GetApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getApplicationResponse_httpStatus :: Lens.Lens' GetApplicationResponse Prelude.Int
+getApplicationResponse_httpStatus = Lens.lens (\GetApplicationResponse' {httpStatus} -> httpStatus) (\s@GetApplicationResponse' {} a -> s {httpStatus = a} :: GetApplicationResponse)
+
+-- | The Amazon Resource Name (ARN) of the application.
+getApplicationResponse_applicationArn :: Lens.Lens' GetApplicationResponse Prelude.Text
+getApplicationResponse_applicationArn = Lens.lens (\GetApplicationResponse' {applicationArn} -> applicationArn) (\s@GetApplicationResponse' {} a -> s {applicationArn = a} :: GetApplicationResponse)
+
+-- | The identifier of the application.
+getApplicationResponse_applicationId :: Lens.Lens' GetApplicationResponse Prelude.Text
+getApplicationResponse_applicationId = Lens.lens (\GetApplicationResponse' {applicationId} -> applicationId) (\s@GetApplicationResponse' {} a -> s {applicationId = a} :: GetApplicationResponse)
+
+-- | The timestamp when this application was created.
+getApplicationResponse_creationTime :: Lens.Lens' GetApplicationResponse Prelude.UTCTime
+getApplicationResponse_creationTime = Lens.lens (\GetApplicationResponse' {creationTime} -> creationTime) (\s@GetApplicationResponse' {} a -> s {creationTime = a} :: GetApplicationResponse) Prelude.. Data._Time
+
+-- | The type of the target platform for the application.
+getApplicationResponse_engineType :: Lens.Lens' GetApplicationResponse EngineType
+getApplicationResponse_engineType = Lens.lens (\GetApplicationResponse' {engineType} -> engineType) (\s@GetApplicationResponse' {} a -> s {engineType = a} :: GetApplicationResponse)
+
+-- | The latest version of the application.
+getApplicationResponse_latestVersion :: Lens.Lens' GetApplicationResponse ApplicationVersionSummary
+getApplicationResponse_latestVersion = Lens.lens (\GetApplicationResponse' {latestVersion} -> latestVersion) (\s@GetApplicationResponse' {} a -> s {latestVersion = a} :: GetApplicationResponse)
+
+-- | The unique identifier of the application.
+getApplicationResponse_name :: Lens.Lens' GetApplicationResponse Prelude.Text
+getApplicationResponse_name = Lens.lens (\GetApplicationResponse' {name} -> name) (\s@GetApplicationResponse' {} a -> s {name = a} :: GetApplicationResponse)
+
+-- | The status of the application.
+getApplicationResponse_status :: Lens.Lens' GetApplicationResponse ApplicationLifecycle
+getApplicationResponse_status = Lens.lens (\GetApplicationResponse' {status} -> status) (\s@GetApplicationResponse' {} a -> s {status = a} :: GetApplicationResponse)
+
+instance Prelude.NFData GetApplicationResponse where
+  rnf GetApplicationResponse' {..} =
+    Prelude.rnf deployedVersion
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf lastStartTime
+      `Prelude.seq` Prelude.rnf listenerArns
+      `Prelude.seq` Prelude.rnf listenerPorts
+      `Prelude.seq` Prelude.rnf loadBalancerDnsName
+      `Prelude.seq` Prelude.rnf logGroups
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf targetGroupArns
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf latestVersion
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/GetApplicationVersion.hs b/gen/Amazonka/M2/GetApplicationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetApplicationVersion.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.GetApplicationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns details about a specific version of a specific application.
+module Amazonka.M2.GetApplicationVersion
+  ( -- * Creating a Request
+    GetApplicationVersion (..),
+    newGetApplicationVersion,
+
+    -- * Request Lenses
+    getApplicationVersion_applicationId,
+    getApplicationVersion_applicationVersion,
+
+    -- * Destructuring the Response
+    GetApplicationVersionResponse (..),
+    newGetApplicationVersionResponse,
+
+    -- * Response Lenses
+    getApplicationVersionResponse_description,
+    getApplicationVersionResponse_statusReason,
+    getApplicationVersionResponse_httpStatus,
+    getApplicationVersionResponse_applicationVersion,
+    getApplicationVersionResponse_creationTime,
+    getApplicationVersionResponse_definitionContent,
+    getApplicationVersionResponse_name,
+    getApplicationVersionResponse_status,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApplicationVersion' smart constructor.
+data GetApplicationVersion = GetApplicationVersion'
+  { -- | The unique identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The specific version of the application.
+    applicationVersion :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplicationVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getApplicationVersion_applicationId' - The unique identifier of the application.
+--
+-- 'applicationVersion', 'getApplicationVersion_applicationVersion' - The specific version of the application.
+newGetApplicationVersion ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  GetApplicationVersion
+newGetApplicationVersion
+  pApplicationId_
+  pApplicationVersion_ =
+    GetApplicationVersion'
+      { applicationId =
+          pApplicationId_,
+        applicationVersion = pApplicationVersion_
+      }
+
+-- | The unique identifier of the application.
+getApplicationVersion_applicationId :: Lens.Lens' GetApplicationVersion Prelude.Text
+getApplicationVersion_applicationId = Lens.lens (\GetApplicationVersion' {applicationId} -> applicationId) (\s@GetApplicationVersion' {} a -> s {applicationId = a} :: GetApplicationVersion)
+
+-- | The specific version of the application.
+getApplicationVersion_applicationVersion :: Lens.Lens' GetApplicationVersion Prelude.Natural
+getApplicationVersion_applicationVersion = Lens.lens (\GetApplicationVersion' {applicationVersion} -> applicationVersion) (\s@GetApplicationVersion' {} a -> s {applicationVersion = a} :: GetApplicationVersion)
+
+instance Core.AWSRequest GetApplicationVersion where
+  type
+    AWSResponse GetApplicationVersion =
+      GetApplicationVersionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApplicationVersionResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "statusReason")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationVersion")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "definitionContent")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance Prelude.Hashable GetApplicationVersion where
+  hashWithSalt _salt GetApplicationVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` applicationVersion
+
+instance Prelude.NFData GetApplicationVersion where
+  rnf GetApplicationVersion' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf applicationVersion
+
+instance Data.ToHeaders GetApplicationVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApplicationVersion where
+  toPath GetApplicationVersion' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/versions/",
+        Data.toBS applicationVersion
+      ]
+
+instance Data.ToQuery GetApplicationVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetApplicationVersionResponse' smart constructor.
+data GetApplicationVersionResponse = GetApplicationVersionResponse'
+  { -- | The application description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The specific version of the application.
+    applicationVersion :: Prelude.Natural,
+    -- | The timestamp when the application version was created.
+    creationTime :: Data.POSIX,
+    -- | The content of the application definition. This is a JSON object that
+    -- contains the resource configuration and definitions that identify an
+    -- application.
+    definitionContent :: Prelude.Text,
+    -- | The name of the application version.
+    name :: Prelude.Text,
+    -- | The status of the application version.
+    status :: ApplicationVersionLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplicationVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getApplicationVersionResponse_description' - The application description.
+--
+-- 'statusReason', 'getApplicationVersionResponse_statusReason' - The reason for the reported status.
+--
+-- 'httpStatus', 'getApplicationVersionResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationVersion', 'getApplicationVersionResponse_applicationVersion' - The specific version of the application.
+--
+-- 'creationTime', 'getApplicationVersionResponse_creationTime' - The timestamp when the application version was created.
+--
+-- 'definitionContent', 'getApplicationVersionResponse_definitionContent' - The content of the application definition. This is a JSON object that
+-- contains the resource configuration and definitions that identify an
+-- application.
+--
+-- 'name', 'getApplicationVersionResponse_name' - The name of the application version.
+--
+-- 'status', 'getApplicationVersionResponse_status' - The status of the application version.
+newGetApplicationVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'definitionContent'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  ApplicationVersionLifecycle ->
+  GetApplicationVersionResponse
+newGetApplicationVersionResponse
+  pHttpStatus_
+  pApplicationVersion_
+  pCreationTime_
+  pDefinitionContent_
+  pName_
+  pStatus_ =
+    GetApplicationVersionResponse'
+      { description =
+          Prelude.Nothing,
+        statusReason = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        applicationVersion = pApplicationVersion_,
+        creationTime =
+          Data._Time Lens.# pCreationTime_,
+        definitionContent = pDefinitionContent_,
+        name = pName_,
+        status = pStatus_
+      }
+
+-- | The application description.
+getApplicationVersionResponse_description :: Lens.Lens' GetApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+getApplicationVersionResponse_description = Lens.lens (\GetApplicationVersionResponse' {description} -> description) (\s@GetApplicationVersionResponse' {} a -> s {description = a} :: GetApplicationVersionResponse)
+
+-- | The reason for the reported status.
+getApplicationVersionResponse_statusReason :: Lens.Lens' GetApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+getApplicationVersionResponse_statusReason = Lens.lens (\GetApplicationVersionResponse' {statusReason} -> statusReason) (\s@GetApplicationVersionResponse' {} a -> s {statusReason = a} :: GetApplicationVersionResponse)
+
+-- | The response's http status code.
+getApplicationVersionResponse_httpStatus :: Lens.Lens' GetApplicationVersionResponse Prelude.Int
+getApplicationVersionResponse_httpStatus = Lens.lens (\GetApplicationVersionResponse' {httpStatus} -> httpStatus) (\s@GetApplicationVersionResponse' {} a -> s {httpStatus = a} :: GetApplicationVersionResponse)
+
+-- | The specific version of the application.
+getApplicationVersionResponse_applicationVersion :: Lens.Lens' GetApplicationVersionResponse Prelude.Natural
+getApplicationVersionResponse_applicationVersion = Lens.lens (\GetApplicationVersionResponse' {applicationVersion} -> applicationVersion) (\s@GetApplicationVersionResponse' {} a -> s {applicationVersion = a} :: GetApplicationVersionResponse)
+
+-- | The timestamp when the application version was created.
+getApplicationVersionResponse_creationTime :: Lens.Lens' GetApplicationVersionResponse Prelude.UTCTime
+getApplicationVersionResponse_creationTime = Lens.lens (\GetApplicationVersionResponse' {creationTime} -> creationTime) (\s@GetApplicationVersionResponse' {} a -> s {creationTime = a} :: GetApplicationVersionResponse) Prelude.. Data._Time
+
+-- | The content of the application definition. This is a JSON object that
+-- contains the resource configuration and definitions that identify an
+-- application.
+getApplicationVersionResponse_definitionContent :: Lens.Lens' GetApplicationVersionResponse Prelude.Text
+getApplicationVersionResponse_definitionContent = Lens.lens (\GetApplicationVersionResponse' {definitionContent} -> definitionContent) (\s@GetApplicationVersionResponse' {} a -> s {definitionContent = a} :: GetApplicationVersionResponse)
+
+-- | The name of the application version.
+getApplicationVersionResponse_name :: Lens.Lens' GetApplicationVersionResponse Prelude.Text
+getApplicationVersionResponse_name = Lens.lens (\GetApplicationVersionResponse' {name} -> name) (\s@GetApplicationVersionResponse' {} a -> s {name = a} :: GetApplicationVersionResponse)
+
+-- | The status of the application version.
+getApplicationVersionResponse_status :: Lens.Lens' GetApplicationVersionResponse ApplicationVersionLifecycle
+getApplicationVersionResponse_status = Lens.lens (\GetApplicationVersionResponse' {status} -> status) (\s@GetApplicationVersionResponse' {} a -> s {status = a} :: GetApplicationVersionResponse)
+
+instance Prelude.NFData GetApplicationVersionResponse where
+  rnf GetApplicationVersionResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf definitionContent
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/GetBatchJobExecution.hs b/gen/Amazonka/M2/GetBatchJobExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetBatchJobExecution.hs
@@ -0,0 +1,304 @@
+{-# 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.M2.GetBatchJobExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the details of a specific batch job execution for a specific
+-- application.
+module Amazonka.M2.GetBatchJobExecution
+  ( -- * Creating a Request
+    GetBatchJobExecution (..),
+    newGetBatchJobExecution,
+
+    -- * Request Lenses
+    getBatchJobExecution_applicationId,
+    getBatchJobExecution_executionId,
+
+    -- * Destructuring the Response
+    GetBatchJobExecutionResponse (..),
+    newGetBatchJobExecutionResponse,
+
+    -- * Response Lenses
+    getBatchJobExecutionResponse_endTime,
+    getBatchJobExecutionResponse_jobId,
+    getBatchJobExecutionResponse_jobName,
+    getBatchJobExecutionResponse_jobType,
+    getBatchJobExecutionResponse_jobUser,
+    getBatchJobExecutionResponse_statusReason,
+    getBatchJobExecutionResponse_httpStatus,
+    getBatchJobExecutionResponse_applicationId,
+    getBatchJobExecutionResponse_executionId,
+    getBatchJobExecutionResponse_startTime,
+    getBatchJobExecutionResponse_status,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetBatchJobExecution' smart constructor.
+data GetBatchJobExecution = GetBatchJobExecution'
+  { -- | The identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier of the batch job execution.
+    executionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBatchJobExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getBatchJobExecution_applicationId' - The identifier of the application.
+--
+-- 'executionId', 'getBatchJobExecution_executionId' - The unique identifier of the batch job execution.
+newGetBatchJobExecution ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'executionId'
+  Prelude.Text ->
+  GetBatchJobExecution
+newGetBatchJobExecution pApplicationId_ pExecutionId_ =
+  GetBatchJobExecution'
+    { applicationId =
+        pApplicationId_,
+      executionId = pExecutionId_
+    }
+
+-- | The identifier of the application.
+getBatchJobExecution_applicationId :: Lens.Lens' GetBatchJobExecution Prelude.Text
+getBatchJobExecution_applicationId = Lens.lens (\GetBatchJobExecution' {applicationId} -> applicationId) (\s@GetBatchJobExecution' {} a -> s {applicationId = a} :: GetBatchJobExecution)
+
+-- | The unique identifier of the batch job execution.
+getBatchJobExecution_executionId :: Lens.Lens' GetBatchJobExecution Prelude.Text
+getBatchJobExecution_executionId = Lens.lens (\GetBatchJobExecution' {executionId} -> executionId) (\s@GetBatchJobExecution' {} a -> s {executionId = a} :: GetBatchJobExecution)
+
+instance Core.AWSRequest GetBatchJobExecution where
+  type
+    AWSResponse GetBatchJobExecution =
+      GetBatchJobExecutionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBatchJobExecutionResponse'
+            Prelude.<$> (x Data..?> "endTime")
+            Prelude.<*> (x Data..?> "jobId")
+            Prelude.<*> (x Data..?> "jobName")
+            Prelude.<*> (x Data..?> "jobType")
+            Prelude.<*> (x Data..?> "jobUser")
+            Prelude.<*> (x Data..?> "statusReason")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "executionId")
+            Prelude.<*> (x Data..:> "startTime")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance Prelude.Hashable GetBatchJobExecution where
+  hashWithSalt _salt GetBatchJobExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` executionId
+
+instance Prelude.NFData GetBatchJobExecution where
+  rnf GetBatchJobExecution' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf executionId
+
+instance Data.ToHeaders GetBatchJobExecution where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetBatchJobExecution where
+  toPath GetBatchJobExecution' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/batch-job-executions/",
+        Data.toBS executionId
+      ]
+
+instance Data.ToQuery GetBatchJobExecution where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetBatchJobExecutionResponse' smart constructor.
+data GetBatchJobExecutionResponse = GetBatchJobExecutionResponse'
+  { -- | The timestamp when the batch job execution ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier for this batch job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The name of this batch job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | The type of job.
+    jobType :: Prelude.Maybe BatchJobType,
+    -- | The user for the job.
+    jobUser :: Prelude.Maybe Prelude.Text,
+    -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier for this batch job execution.
+    executionId :: Prelude.Text,
+    -- | The timestamp when the batch job execution started.
+    startTime :: Data.POSIX,
+    -- | The status of the batch job execution.
+    status :: BatchJobExecutionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBatchJobExecutionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'getBatchJobExecutionResponse_endTime' - The timestamp when the batch job execution ended.
+--
+-- 'jobId', 'getBatchJobExecutionResponse_jobId' - The unique identifier for this batch job.
+--
+-- 'jobName', 'getBatchJobExecutionResponse_jobName' - The name of this batch job.
+--
+-- 'jobType', 'getBatchJobExecutionResponse_jobType' - The type of job.
+--
+-- 'jobUser', 'getBatchJobExecutionResponse_jobUser' - The user for the job.
+--
+-- 'statusReason', 'getBatchJobExecutionResponse_statusReason' - The reason for the reported status.
+--
+-- 'httpStatus', 'getBatchJobExecutionResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationId', 'getBatchJobExecutionResponse_applicationId' - The identifier of the application.
+--
+-- 'executionId', 'getBatchJobExecutionResponse_executionId' - The unique identifier for this batch job execution.
+--
+-- 'startTime', 'getBatchJobExecutionResponse_startTime' - The timestamp when the batch job execution started.
+--
+-- 'status', 'getBatchJobExecutionResponse_status' - The status of the batch job execution.
+newGetBatchJobExecutionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'executionId'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'status'
+  BatchJobExecutionStatus ->
+  GetBatchJobExecutionResponse
+newGetBatchJobExecutionResponse
+  pHttpStatus_
+  pApplicationId_
+  pExecutionId_
+  pStartTime_
+  pStatus_ =
+    GetBatchJobExecutionResponse'
+      { endTime =
+          Prelude.Nothing,
+        jobId = Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        jobType = Prelude.Nothing,
+        jobUser = Prelude.Nothing,
+        statusReason = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        applicationId = pApplicationId_,
+        executionId = pExecutionId_,
+        startTime = Data._Time Lens.# pStartTime_,
+        status = pStatus_
+      }
+
+-- | The timestamp when the batch job execution ended.
+getBatchJobExecutionResponse_endTime :: Lens.Lens' GetBatchJobExecutionResponse (Prelude.Maybe Prelude.UTCTime)
+getBatchJobExecutionResponse_endTime = Lens.lens (\GetBatchJobExecutionResponse' {endTime} -> endTime) (\s@GetBatchJobExecutionResponse' {} a -> s {endTime = a} :: GetBatchJobExecutionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for this batch job.
+getBatchJobExecutionResponse_jobId :: Lens.Lens' GetBatchJobExecutionResponse (Prelude.Maybe Prelude.Text)
+getBatchJobExecutionResponse_jobId = Lens.lens (\GetBatchJobExecutionResponse' {jobId} -> jobId) (\s@GetBatchJobExecutionResponse' {} a -> s {jobId = a} :: GetBatchJobExecutionResponse)
+
+-- | The name of this batch job.
+getBatchJobExecutionResponse_jobName :: Lens.Lens' GetBatchJobExecutionResponse (Prelude.Maybe Prelude.Text)
+getBatchJobExecutionResponse_jobName = Lens.lens (\GetBatchJobExecutionResponse' {jobName} -> jobName) (\s@GetBatchJobExecutionResponse' {} a -> s {jobName = a} :: GetBatchJobExecutionResponse)
+
+-- | The type of job.
+getBatchJobExecutionResponse_jobType :: Lens.Lens' GetBatchJobExecutionResponse (Prelude.Maybe BatchJobType)
+getBatchJobExecutionResponse_jobType = Lens.lens (\GetBatchJobExecutionResponse' {jobType} -> jobType) (\s@GetBatchJobExecutionResponse' {} a -> s {jobType = a} :: GetBatchJobExecutionResponse)
+
+-- | The user for the job.
+getBatchJobExecutionResponse_jobUser :: Lens.Lens' GetBatchJobExecutionResponse (Prelude.Maybe Prelude.Text)
+getBatchJobExecutionResponse_jobUser = Lens.lens (\GetBatchJobExecutionResponse' {jobUser} -> jobUser) (\s@GetBatchJobExecutionResponse' {} a -> s {jobUser = a} :: GetBatchJobExecutionResponse)
+
+-- | The reason for the reported status.
+getBatchJobExecutionResponse_statusReason :: Lens.Lens' GetBatchJobExecutionResponse (Prelude.Maybe Prelude.Text)
+getBatchJobExecutionResponse_statusReason = Lens.lens (\GetBatchJobExecutionResponse' {statusReason} -> statusReason) (\s@GetBatchJobExecutionResponse' {} a -> s {statusReason = a} :: GetBatchJobExecutionResponse)
+
+-- | The response's http status code.
+getBatchJobExecutionResponse_httpStatus :: Lens.Lens' GetBatchJobExecutionResponse Prelude.Int
+getBatchJobExecutionResponse_httpStatus = Lens.lens (\GetBatchJobExecutionResponse' {httpStatus} -> httpStatus) (\s@GetBatchJobExecutionResponse' {} a -> s {httpStatus = a} :: GetBatchJobExecutionResponse)
+
+-- | The identifier of the application.
+getBatchJobExecutionResponse_applicationId :: Lens.Lens' GetBatchJobExecutionResponse Prelude.Text
+getBatchJobExecutionResponse_applicationId = Lens.lens (\GetBatchJobExecutionResponse' {applicationId} -> applicationId) (\s@GetBatchJobExecutionResponse' {} a -> s {applicationId = a} :: GetBatchJobExecutionResponse)
+
+-- | The unique identifier for this batch job execution.
+getBatchJobExecutionResponse_executionId :: Lens.Lens' GetBatchJobExecutionResponse Prelude.Text
+getBatchJobExecutionResponse_executionId = Lens.lens (\GetBatchJobExecutionResponse' {executionId} -> executionId) (\s@GetBatchJobExecutionResponse' {} a -> s {executionId = a} :: GetBatchJobExecutionResponse)
+
+-- | The timestamp when the batch job execution started.
+getBatchJobExecutionResponse_startTime :: Lens.Lens' GetBatchJobExecutionResponse Prelude.UTCTime
+getBatchJobExecutionResponse_startTime = Lens.lens (\GetBatchJobExecutionResponse' {startTime} -> startTime) (\s@GetBatchJobExecutionResponse' {} a -> s {startTime = a} :: GetBatchJobExecutionResponse) Prelude.. Data._Time
+
+-- | The status of the batch job execution.
+getBatchJobExecutionResponse_status :: Lens.Lens' GetBatchJobExecutionResponse BatchJobExecutionStatus
+getBatchJobExecutionResponse_status = Lens.lens (\GetBatchJobExecutionResponse' {status} -> status) (\s@GetBatchJobExecutionResponse' {} a -> s {status = a} :: GetBatchJobExecutionResponse)
+
+instance Prelude.NFData GetBatchJobExecutionResponse where
+  rnf GetBatchJobExecutionResponse' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf jobUser
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf executionId
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/GetDataSetDetails.hs b/gen/Amazonka/M2/GetDataSetDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetDataSetDetails.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.GetDataSetDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the details of a specific data set.
+module Amazonka.M2.GetDataSetDetails
+  ( -- * Creating a Request
+    GetDataSetDetails (..),
+    newGetDataSetDetails,
+
+    -- * Request Lenses
+    getDataSetDetails_applicationId,
+    getDataSetDetails_dataSetName,
+
+    -- * Destructuring the Response
+    GetDataSetDetailsResponse (..),
+    newGetDataSetDetailsResponse,
+
+    -- * Response Lenses
+    getDataSetDetailsResponse_blocksize,
+    getDataSetDetailsResponse_creationTime,
+    getDataSetDetailsResponse_dataSetOrg,
+    getDataSetDetailsResponse_lastReferencedTime,
+    getDataSetDetailsResponse_lastUpdatedTime,
+    getDataSetDetailsResponse_location,
+    getDataSetDetailsResponse_recordLength,
+    getDataSetDetailsResponse_httpStatus,
+    getDataSetDetailsResponse_dataSetName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDataSetDetails' smart constructor.
+data GetDataSetDetails = GetDataSetDetails'
+  { -- | The unique identifier of the application that this data set is
+    -- associated with.
+    applicationId :: Prelude.Text,
+    -- | The name of the data set.
+    dataSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataSetDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDataSetDetails_applicationId' - The unique identifier of the application that this data set is
+-- associated with.
+--
+-- 'dataSetName', 'getDataSetDetails_dataSetName' - The name of the data set.
+newGetDataSetDetails ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'dataSetName'
+  Prelude.Text ->
+  GetDataSetDetails
+newGetDataSetDetails pApplicationId_ pDataSetName_ =
+  GetDataSetDetails'
+    { applicationId = pApplicationId_,
+      dataSetName = pDataSetName_
+    }
+
+-- | The unique identifier of the application that this data set is
+-- associated with.
+getDataSetDetails_applicationId :: Lens.Lens' GetDataSetDetails Prelude.Text
+getDataSetDetails_applicationId = Lens.lens (\GetDataSetDetails' {applicationId} -> applicationId) (\s@GetDataSetDetails' {} a -> s {applicationId = a} :: GetDataSetDetails)
+
+-- | The name of the data set.
+getDataSetDetails_dataSetName :: Lens.Lens' GetDataSetDetails Prelude.Text
+getDataSetDetails_dataSetName = Lens.lens (\GetDataSetDetails' {dataSetName} -> dataSetName) (\s@GetDataSetDetails' {} a -> s {dataSetName = a} :: GetDataSetDetails)
+
+instance Core.AWSRequest GetDataSetDetails where
+  type
+    AWSResponse GetDataSetDetails =
+      GetDataSetDetailsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDataSetDetailsResponse'
+            Prelude.<$> (x Data..?> "blocksize")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "dataSetOrg")
+            Prelude.<*> (x Data..?> "lastReferencedTime")
+            Prelude.<*> (x Data..?> "lastUpdatedTime")
+            Prelude.<*> (x Data..?> "location")
+            Prelude.<*> (x Data..?> "recordLength")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "dataSetName")
+      )
+
+instance Prelude.Hashable GetDataSetDetails where
+  hashWithSalt _salt GetDataSetDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` dataSetName
+
+instance Prelude.NFData GetDataSetDetails where
+  rnf GetDataSetDetails' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf dataSetName
+
+instance Data.ToHeaders GetDataSetDetails where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDataSetDetails where
+  toPath GetDataSetDetails' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/datasets/",
+        Data.toBS dataSetName
+      ]
+
+instance Data.ToQuery GetDataSetDetails where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDataSetDetailsResponse' smart constructor.
+data GetDataSetDetailsResponse = GetDataSetDetailsResponse'
+  { -- | The size of the block on disk.
+    blocksize :: Prelude.Maybe Prelude.Int,
+    -- | The timestamp when the data set was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The type of data set. The only supported value is VSAM.
+    dataSetOrg :: Prelude.Maybe DatasetDetailOrgAttributes,
+    -- | The last time the data set was referenced.
+    lastReferencedTime :: Prelude.Maybe Data.POSIX,
+    -- | The last time the data set was updated.
+    lastUpdatedTime :: Prelude.Maybe Data.POSIX,
+    -- | The location where the data set is stored.
+    location :: Prelude.Maybe Prelude.Text,
+    -- | The length of records in the data set.
+    recordLength :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the data set.
+    dataSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataSetDetailsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blocksize', 'getDataSetDetailsResponse_blocksize' - The size of the block on disk.
+--
+-- 'creationTime', 'getDataSetDetailsResponse_creationTime' - The timestamp when the data set was created.
+--
+-- 'dataSetOrg', 'getDataSetDetailsResponse_dataSetOrg' - The type of data set. The only supported value is VSAM.
+--
+-- 'lastReferencedTime', 'getDataSetDetailsResponse_lastReferencedTime' - The last time the data set was referenced.
+--
+-- 'lastUpdatedTime', 'getDataSetDetailsResponse_lastUpdatedTime' - The last time the data set was updated.
+--
+-- 'location', 'getDataSetDetailsResponse_location' - The location where the data set is stored.
+--
+-- 'recordLength', 'getDataSetDetailsResponse_recordLength' - The length of records in the data set.
+--
+-- 'httpStatus', 'getDataSetDetailsResponse_httpStatus' - The response's http status code.
+--
+-- 'dataSetName', 'getDataSetDetailsResponse_dataSetName' - The name of the data set.
+newGetDataSetDetailsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'dataSetName'
+  Prelude.Text ->
+  GetDataSetDetailsResponse
+newGetDataSetDetailsResponse
+  pHttpStatus_
+  pDataSetName_ =
+    GetDataSetDetailsResponse'
+      { blocksize =
+          Prelude.Nothing,
+        creationTime = Prelude.Nothing,
+        dataSetOrg = Prelude.Nothing,
+        lastReferencedTime = Prelude.Nothing,
+        lastUpdatedTime = Prelude.Nothing,
+        location = Prelude.Nothing,
+        recordLength = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        dataSetName = pDataSetName_
+      }
+
+-- | The size of the block on disk.
+getDataSetDetailsResponse_blocksize :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe Prelude.Int)
+getDataSetDetailsResponse_blocksize = Lens.lens (\GetDataSetDetailsResponse' {blocksize} -> blocksize) (\s@GetDataSetDetailsResponse' {} a -> s {blocksize = a} :: GetDataSetDetailsResponse)
+
+-- | The timestamp when the data set was created.
+getDataSetDetailsResponse_creationTime :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe Prelude.UTCTime)
+getDataSetDetailsResponse_creationTime = Lens.lens (\GetDataSetDetailsResponse' {creationTime} -> creationTime) (\s@GetDataSetDetailsResponse' {} a -> s {creationTime = a} :: GetDataSetDetailsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The type of data set. The only supported value is VSAM.
+getDataSetDetailsResponse_dataSetOrg :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe DatasetDetailOrgAttributes)
+getDataSetDetailsResponse_dataSetOrg = Lens.lens (\GetDataSetDetailsResponse' {dataSetOrg} -> dataSetOrg) (\s@GetDataSetDetailsResponse' {} a -> s {dataSetOrg = a} :: GetDataSetDetailsResponse)
+
+-- | The last time the data set was referenced.
+getDataSetDetailsResponse_lastReferencedTime :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe Prelude.UTCTime)
+getDataSetDetailsResponse_lastReferencedTime = Lens.lens (\GetDataSetDetailsResponse' {lastReferencedTime} -> lastReferencedTime) (\s@GetDataSetDetailsResponse' {} a -> s {lastReferencedTime = a} :: GetDataSetDetailsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The last time the data set was updated.
+getDataSetDetailsResponse_lastUpdatedTime :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe Prelude.UTCTime)
+getDataSetDetailsResponse_lastUpdatedTime = Lens.lens (\GetDataSetDetailsResponse' {lastUpdatedTime} -> lastUpdatedTime) (\s@GetDataSetDetailsResponse' {} a -> s {lastUpdatedTime = a} :: GetDataSetDetailsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The location where the data set is stored.
+getDataSetDetailsResponse_location :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe Prelude.Text)
+getDataSetDetailsResponse_location = Lens.lens (\GetDataSetDetailsResponse' {location} -> location) (\s@GetDataSetDetailsResponse' {} a -> s {location = a} :: GetDataSetDetailsResponse)
+
+-- | The length of records in the data set.
+getDataSetDetailsResponse_recordLength :: Lens.Lens' GetDataSetDetailsResponse (Prelude.Maybe Prelude.Int)
+getDataSetDetailsResponse_recordLength = Lens.lens (\GetDataSetDetailsResponse' {recordLength} -> recordLength) (\s@GetDataSetDetailsResponse' {} a -> s {recordLength = a} :: GetDataSetDetailsResponse)
+
+-- | The response's http status code.
+getDataSetDetailsResponse_httpStatus :: Lens.Lens' GetDataSetDetailsResponse Prelude.Int
+getDataSetDetailsResponse_httpStatus = Lens.lens (\GetDataSetDetailsResponse' {httpStatus} -> httpStatus) (\s@GetDataSetDetailsResponse' {} a -> s {httpStatus = a} :: GetDataSetDetailsResponse)
+
+-- | The name of the data set.
+getDataSetDetailsResponse_dataSetName :: Lens.Lens' GetDataSetDetailsResponse Prelude.Text
+getDataSetDetailsResponse_dataSetName = Lens.lens (\GetDataSetDetailsResponse' {dataSetName} -> dataSetName) (\s@GetDataSetDetailsResponse' {} a -> s {dataSetName = a} :: GetDataSetDetailsResponse)
+
+instance Prelude.NFData GetDataSetDetailsResponse where
+  rnf GetDataSetDetailsResponse' {..} =
+    Prelude.rnf blocksize
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataSetOrg
+      `Prelude.seq` Prelude.rnf lastReferencedTime
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf location
+      `Prelude.seq` Prelude.rnf recordLength
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dataSetName
diff --git a/gen/Amazonka/M2/GetDataSetImportTask.hs b/gen/Amazonka/M2/GetDataSetImportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetDataSetImportTask.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.GetDataSetImportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the status of a data set import task initiated with the
+-- CreateDataSetImportTask operation.
+module Amazonka.M2.GetDataSetImportTask
+  ( -- * Creating a Request
+    GetDataSetImportTask (..),
+    newGetDataSetImportTask,
+
+    -- * Request Lenses
+    getDataSetImportTask_applicationId,
+    getDataSetImportTask_taskId,
+
+    -- * Destructuring the Response
+    GetDataSetImportTaskResponse (..),
+    newGetDataSetImportTaskResponse,
+
+    -- * Response Lenses
+    getDataSetImportTaskResponse_summary,
+    getDataSetImportTaskResponse_httpStatus,
+    getDataSetImportTaskResponse_status,
+    getDataSetImportTaskResponse_taskId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDataSetImportTask' smart constructor.
+data GetDataSetImportTask = GetDataSetImportTask'
+  { -- | The application identifier.
+    applicationId :: Prelude.Text,
+    -- | The task identifier returned by the CreateDataSetImportTask operation.
+    taskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataSetImportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDataSetImportTask_applicationId' - The application identifier.
+--
+-- 'taskId', 'getDataSetImportTask_taskId' - The task identifier returned by the CreateDataSetImportTask operation.
+newGetDataSetImportTask ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'taskId'
+  Prelude.Text ->
+  GetDataSetImportTask
+newGetDataSetImportTask pApplicationId_ pTaskId_ =
+  GetDataSetImportTask'
+    { applicationId =
+        pApplicationId_,
+      taskId = pTaskId_
+    }
+
+-- | The application identifier.
+getDataSetImportTask_applicationId :: Lens.Lens' GetDataSetImportTask Prelude.Text
+getDataSetImportTask_applicationId = Lens.lens (\GetDataSetImportTask' {applicationId} -> applicationId) (\s@GetDataSetImportTask' {} a -> s {applicationId = a} :: GetDataSetImportTask)
+
+-- | The task identifier returned by the CreateDataSetImportTask operation.
+getDataSetImportTask_taskId :: Lens.Lens' GetDataSetImportTask Prelude.Text
+getDataSetImportTask_taskId = Lens.lens (\GetDataSetImportTask' {taskId} -> taskId) (\s@GetDataSetImportTask' {} a -> s {taskId = a} :: GetDataSetImportTask)
+
+instance Core.AWSRequest GetDataSetImportTask where
+  type
+    AWSResponse GetDataSetImportTask =
+      GetDataSetImportTaskResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDataSetImportTaskResponse'
+            Prelude.<$> (x Data..?> "summary")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "status")
+            Prelude.<*> (x Data..:> "taskId")
+      )
+
+instance Prelude.Hashable GetDataSetImportTask where
+  hashWithSalt _salt GetDataSetImportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` taskId
+
+instance Prelude.NFData GetDataSetImportTask where
+  rnf GetDataSetImportTask' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf taskId
+
+instance Data.ToHeaders GetDataSetImportTask where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDataSetImportTask where
+  toPath GetDataSetImportTask' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/dataset-import-tasks/",
+        Data.toBS taskId
+      ]
+
+instance Data.ToQuery GetDataSetImportTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDataSetImportTaskResponse' smart constructor.
+data GetDataSetImportTaskResponse = GetDataSetImportTaskResponse'
+  { -- | A summary of the status of the task.
+    summary :: Prelude.Maybe DataSetImportSummary,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The status of the task.
+    status :: DataSetTaskLifecycle,
+    -- | The task identifier.
+    taskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataSetImportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'summary', 'getDataSetImportTaskResponse_summary' - A summary of the status of the task.
+--
+-- 'httpStatus', 'getDataSetImportTaskResponse_httpStatus' - The response's http status code.
+--
+-- 'status', 'getDataSetImportTaskResponse_status' - The status of the task.
+--
+-- 'taskId', 'getDataSetImportTaskResponse_taskId' - The task identifier.
+newGetDataSetImportTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'status'
+  DataSetTaskLifecycle ->
+  -- | 'taskId'
+  Prelude.Text ->
+  GetDataSetImportTaskResponse
+newGetDataSetImportTaskResponse
+  pHttpStatus_
+  pStatus_
+  pTaskId_ =
+    GetDataSetImportTaskResponse'
+      { summary =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        status = pStatus_,
+        taskId = pTaskId_
+      }
+
+-- | A summary of the status of the task.
+getDataSetImportTaskResponse_summary :: Lens.Lens' GetDataSetImportTaskResponse (Prelude.Maybe DataSetImportSummary)
+getDataSetImportTaskResponse_summary = Lens.lens (\GetDataSetImportTaskResponse' {summary} -> summary) (\s@GetDataSetImportTaskResponse' {} a -> s {summary = a} :: GetDataSetImportTaskResponse)
+
+-- | The response's http status code.
+getDataSetImportTaskResponse_httpStatus :: Lens.Lens' GetDataSetImportTaskResponse Prelude.Int
+getDataSetImportTaskResponse_httpStatus = Lens.lens (\GetDataSetImportTaskResponse' {httpStatus} -> httpStatus) (\s@GetDataSetImportTaskResponse' {} a -> s {httpStatus = a} :: GetDataSetImportTaskResponse)
+
+-- | The status of the task.
+getDataSetImportTaskResponse_status :: Lens.Lens' GetDataSetImportTaskResponse DataSetTaskLifecycle
+getDataSetImportTaskResponse_status = Lens.lens (\GetDataSetImportTaskResponse' {status} -> status) (\s@GetDataSetImportTaskResponse' {} a -> s {status = a} :: GetDataSetImportTaskResponse)
+
+-- | The task identifier.
+getDataSetImportTaskResponse_taskId :: Lens.Lens' GetDataSetImportTaskResponse Prelude.Text
+getDataSetImportTaskResponse_taskId = Lens.lens (\GetDataSetImportTaskResponse' {taskId} -> taskId) (\s@GetDataSetImportTaskResponse' {} a -> s {taskId = a} :: GetDataSetImportTaskResponse)
+
+instance Prelude.NFData GetDataSetImportTaskResponse where
+  rnf GetDataSetImportTaskResponse' {..} =
+    Prelude.rnf summary
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskId
diff --git a/gen/Amazonka/M2/GetDeployment.hs b/gen/Amazonka/M2/GetDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetDeployment.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.M2.GetDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets details of a specific deployment with a given deployment
+-- identifier.
+module Amazonka.M2.GetDeployment
+  ( -- * Creating a Request
+    GetDeployment (..),
+    newGetDeployment,
+
+    -- * Request Lenses
+    getDeployment_applicationId,
+    getDeployment_deploymentId,
+
+    -- * Destructuring the Response
+    GetDeploymentResponse (..),
+    newGetDeploymentResponse,
+
+    -- * Response Lenses
+    getDeploymentResponse_statusReason,
+    getDeploymentResponse_httpStatus,
+    getDeploymentResponse_applicationId,
+    getDeploymentResponse_applicationVersion,
+    getDeploymentResponse_creationTime,
+    getDeploymentResponse_deploymentId,
+    getDeploymentResponse_environmentId,
+    getDeploymentResponse_status,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeployment' smart constructor.
+data GetDeployment = GetDeployment'
+  { -- | The unique identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier for the deployment.
+    deploymentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDeployment_applicationId' - The unique identifier of the application.
+--
+-- 'deploymentId', 'getDeployment_deploymentId' - The unique identifier for the deployment.
+newGetDeployment ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  GetDeployment
+newGetDeployment pApplicationId_ pDeploymentId_ =
+  GetDeployment'
+    { applicationId = pApplicationId_,
+      deploymentId = pDeploymentId_
+    }
+
+-- | The unique identifier of the application.
+getDeployment_applicationId :: Lens.Lens' GetDeployment Prelude.Text
+getDeployment_applicationId = Lens.lens (\GetDeployment' {applicationId} -> applicationId) (\s@GetDeployment' {} a -> s {applicationId = a} :: GetDeployment)
+
+-- | The unique identifier for the deployment.
+getDeployment_deploymentId :: Lens.Lens' GetDeployment Prelude.Text
+getDeployment_deploymentId = Lens.lens (\GetDeployment' {deploymentId} -> deploymentId) (\s@GetDeployment' {} a -> s {deploymentId = a} :: GetDeployment)
+
+instance Core.AWSRequest GetDeployment where
+  type
+    AWSResponse GetDeployment =
+      GetDeploymentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeploymentResponse'
+            Prelude.<$> (x Data..?> "statusReason")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "applicationVersion")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "deploymentId")
+            Prelude.<*> (x Data..:> "environmentId")
+            Prelude.<*> (x Data..:> "status")
+      )
+
+instance Prelude.Hashable GetDeployment where
+  hashWithSalt _salt GetDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` deploymentId
+
+instance Prelude.NFData GetDeployment where
+  rnf GetDeployment' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf deploymentId
+
+instance Data.ToHeaders GetDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDeployment where
+  toPath GetDeployment' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/deployments/",
+        Data.toBS deploymentId
+      ]
+
+instance Data.ToQuery GetDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDeploymentResponse' smart constructor.
+data GetDeploymentResponse = GetDeploymentResponse'
+  { -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The application version.
+    applicationVersion :: Prelude.Natural,
+    -- | The timestamp when the deployment was created.
+    creationTime :: Data.POSIX,
+    -- | The unique identifier of the deployment.
+    deploymentId :: Prelude.Text,
+    -- | The unique identifier of the runtime environment.
+    environmentId :: Prelude.Text,
+    -- | The status of the deployment.
+    status :: DeploymentLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statusReason', 'getDeploymentResponse_statusReason' - The reason for the reported status.
+--
+-- 'httpStatus', 'getDeploymentResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationId', 'getDeploymentResponse_applicationId' - The unique identifier of the application.
+--
+-- 'applicationVersion', 'getDeploymentResponse_applicationVersion' - The application version.
+--
+-- 'creationTime', 'getDeploymentResponse_creationTime' - The timestamp when the deployment was created.
+--
+-- 'deploymentId', 'getDeploymentResponse_deploymentId' - The unique identifier of the deployment.
+--
+-- 'environmentId', 'getDeploymentResponse_environmentId' - The unique identifier of the runtime environment.
+--
+-- 'status', 'getDeploymentResponse_status' - The status of the deployment.
+newGetDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'status'
+  DeploymentLifecycle ->
+  GetDeploymentResponse
+newGetDeploymentResponse
+  pHttpStatus_
+  pApplicationId_
+  pApplicationVersion_
+  pCreationTime_
+  pDeploymentId_
+  pEnvironmentId_
+  pStatus_ =
+    GetDeploymentResponse'
+      { statusReason =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        applicationId = pApplicationId_,
+        applicationVersion = pApplicationVersion_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        deploymentId = pDeploymentId_,
+        environmentId = pEnvironmentId_,
+        status = pStatus_
+      }
+
+-- | The reason for the reported status.
+getDeploymentResponse_statusReason :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe Prelude.Text)
+getDeploymentResponse_statusReason = Lens.lens (\GetDeploymentResponse' {statusReason} -> statusReason) (\s@GetDeploymentResponse' {} a -> s {statusReason = a} :: GetDeploymentResponse)
+
+-- | The response's http status code.
+getDeploymentResponse_httpStatus :: Lens.Lens' GetDeploymentResponse Prelude.Int
+getDeploymentResponse_httpStatus = Lens.lens (\GetDeploymentResponse' {httpStatus} -> httpStatus) (\s@GetDeploymentResponse' {} a -> s {httpStatus = a} :: GetDeploymentResponse)
+
+-- | The unique identifier of the application.
+getDeploymentResponse_applicationId :: Lens.Lens' GetDeploymentResponse Prelude.Text
+getDeploymentResponse_applicationId = Lens.lens (\GetDeploymentResponse' {applicationId} -> applicationId) (\s@GetDeploymentResponse' {} a -> s {applicationId = a} :: GetDeploymentResponse)
+
+-- | The application version.
+getDeploymentResponse_applicationVersion :: Lens.Lens' GetDeploymentResponse Prelude.Natural
+getDeploymentResponse_applicationVersion = Lens.lens (\GetDeploymentResponse' {applicationVersion} -> applicationVersion) (\s@GetDeploymentResponse' {} a -> s {applicationVersion = a} :: GetDeploymentResponse)
+
+-- | The timestamp when the deployment was created.
+getDeploymentResponse_creationTime :: Lens.Lens' GetDeploymentResponse Prelude.UTCTime
+getDeploymentResponse_creationTime = Lens.lens (\GetDeploymentResponse' {creationTime} -> creationTime) (\s@GetDeploymentResponse' {} a -> s {creationTime = a} :: GetDeploymentResponse) Prelude.. Data._Time
+
+-- | The unique identifier of the deployment.
+getDeploymentResponse_deploymentId :: Lens.Lens' GetDeploymentResponse Prelude.Text
+getDeploymentResponse_deploymentId = Lens.lens (\GetDeploymentResponse' {deploymentId} -> deploymentId) (\s@GetDeploymentResponse' {} a -> s {deploymentId = a} :: GetDeploymentResponse)
+
+-- | The unique identifier of the runtime environment.
+getDeploymentResponse_environmentId :: Lens.Lens' GetDeploymentResponse Prelude.Text
+getDeploymentResponse_environmentId = Lens.lens (\GetDeploymentResponse' {environmentId} -> environmentId) (\s@GetDeploymentResponse' {} a -> s {environmentId = a} :: GetDeploymentResponse)
+
+-- | The status of the deployment.
+getDeploymentResponse_status :: Lens.Lens' GetDeploymentResponse DeploymentLifecycle
+getDeploymentResponse_status = Lens.lens (\GetDeploymentResponse' {status} -> status) (\s@GetDeploymentResponse' {} a -> s {status = a} :: GetDeploymentResponse)
+
+instance Prelude.NFData GetDeploymentResponse where
+  rnf GetDeploymentResponse' {..} =
+    Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/GetEnvironment.hs b/gen/Amazonka/M2/GetEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/GetEnvironment.hs
@@ -0,0 +1,475 @@
+{-# 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.M2.GetEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a specific runtime environment.
+module Amazonka.M2.GetEnvironment
+  ( -- * Creating a Request
+    GetEnvironment (..),
+    newGetEnvironment,
+
+    -- * Request Lenses
+    getEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    GetEnvironmentResponse (..),
+    newGetEnvironmentResponse,
+
+    -- * Response Lenses
+    getEnvironmentResponse_actualCapacity,
+    getEnvironmentResponse_description,
+    getEnvironmentResponse_highAvailabilityConfig,
+    getEnvironmentResponse_kmsKeyId,
+    getEnvironmentResponse_loadBalancerArn,
+    getEnvironmentResponse_pendingMaintenance,
+    getEnvironmentResponse_preferredMaintenanceWindow,
+    getEnvironmentResponse_publiclyAccessible,
+    getEnvironmentResponse_statusReason,
+    getEnvironmentResponse_storageConfigurations,
+    getEnvironmentResponse_tags,
+    getEnvironmentResponse_httpStatus,
+    getEnvironmentResponse_creationTime,
+    getEnvironmentResponse_engineType,
+    getEnvironmentResponse_engineVersion,
+    getEnvironmentResponse_environmentArn,
+    getEnvironmentResponse_environmentId,
+    getEnvironmentResponse_instanceType,
+    getEnvironmentResponse_name,
+    getEnvironmentResponse_securityGroupIds,
+    getEnvironmentResponse_status,
+    getEnvironmentResponse_subnetIds,
+    getEnvironmentResponse_vpcId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEnvironment' smart constructor.
+data GetEnvironment = GetEnvironment'
+  { -- | The unique identifier of the runtime environment.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'getEnvironment_environmentId' - The unique identifier of the runtime environment.
+newGetEnvironment ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  GetEnvironment
+newGetEnvironment pEnvironmentId_ =
+  GetEnvironment' {environmentId = pEnvironmentId_}
+
+-- | The unique identifier of the runtime environment.
+getEnvironment_environmentId :: Lens.Lens' GetEnvironment Prelude.Text
+getEnvironment_environmentId = Lens.lens (\GetEnvironment' {environmentId} -> environmentId) (\s@GetEnvironment' {} a -> s {environmentId = a} :: GetEnvironment)
+
+instance Core.AWSRequest GetEnvironment where
+  type
+    AWSResponse GetEnvironment =
+      GetEnvironmentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEnvironmentResponse'
+            Prelude.<$> (x Data..?> "actualCapacity")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "highAvailabilityConfig")
+            Prelude.<*> (x Data..?> "kmsKeyId")
+            Prelude.<*> (x Data..?> "loadBalancerArn")
+            Prelude.<*> (x Data..?> "pendingMaintenance")
+            Prelude.<*> (x Data..?> "preferredMaintenanceWindow")
+            Prelude.<*> (x Data..?> "publiclyAccessible")
+            Prelude.<*> (x Data..?> "statusReason")
+            Prelude.<*> ( x
+                            Data..?> "storageConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "engineType")
+            Prelude.<*> (x Data..:> "engineVersion")
+            Prelude.<*> (x Data..:> "environmentArn")
+            Prelude.<*> (x Data..:> "environmentId")
+            Prelude.<*> (x Data..:> "instanceType")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> ( x
+                            Data..?> "securityGroupIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:> "status")
+            Prelude.<*> (x Data..?> "subnetIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "vpcId")
+      )
+
+instance Prelude.Hashable GetEnvironment where
+  hashWithSalt _salt GetEnvironment' {..} =
+    _salt `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData GetEnvironment where
+  rnf GetEnvironment' {..} = Prelude.rnf environmentId
+
+instance Data.ToHeaders GetEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEnvironment where
+  toPath GetEnvironment' {..} =
+    Prelude.mconcat
+      ["/environments/", Data.toBS environmentId]
+
+instance Data.ToQuery GetEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEnvironmentResponse' smart constructor.
+data GetEnvironmentResponse = GetEnvironmentResponse'
+  { -- | The number of instances included in the runtime environment. A
+    -- standalone runtime environment has a maxiumum of one instance.
+    -- Currently, a high availability runtime environment has a maximum of two
+    -- instances.
+    actualCapacity :: Prelude.Maybe Prelude.Natural,
+    -- | The description of the runtime environment.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The desired capacity of the high availability configuration for the
+    -- runtime environment.
+    highAvailabilityConfig :: Prelude.Maybe HighAvailabilityConfig,
+    -- | The identifier of a customer managed key.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the load balancer used with the
+    -- runtime environment.
+    loadBalancerArn :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the pending maintenance scheduled on this environment.
+    pendingMaintenance :: Prelude.Maybe PendingMaintenance,
+    -- | Configures the maintenance window you want for the runtime environment.
+    -- If you do not provide a value, a random system-generated value will be
+    -- assigned.
+    preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
+    -- | Whether applications running in this runtime environment are publicly
+    -- accessible.
+    publiclyAccessible :: Prelude.Maybe Prelude.Bool,
+    -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The storage configurations defined for the runtime environment.
+    storageConfigurations :: Prelude.Maybe [StorageConfiguration],
+    -- | The tags defined for this runtime environment.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp when the runtime environment was created.
+    creationTime :: Data.POSIX,
+    -- | The target platform for the runtime environment.
+    engineType :: EngineType,
+    -- | The version of the runtime engine.
+    engineVersion :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the runtime environment.
+    environmentArn :: Prelude.Text,
+    -- | The unique identifier of the runtime environment.
+    environmentId :: Prelude.Text,
+    -- | The type of instance underlying the runtime environment.
+    instanceType :: Prelude.Text,
+    -- | The name of the runtime environment. Must be unique within the account.
+    name :: Prelude.Text,
+    -- | The unique identifiers of the security groups assigned to this runtime
+    -- environment.
+    securityGroupIds :: [Prelude.Text],
+    -- | The status of the runtime environment.
+    status :: EnvironmentLifecycle,
+    -- | The unique identifiers of the subnets assigned to this runtime
+    -- environment.
+    subnetIds :: [Prelude.Text],
+    -- | The unique identifier for the VPC used with this runtime environment.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actualCapacity', 'getEnvironmentResponse_actualCapacity' - The number of instances included in the runtime environment. A
+-- standalone runtime environment has a maxiumum of one instance.
+-- Currently, a high availability runtime environment has a maximum of two
+-- instances.
+--
+-- 'description', 'getEnvironmentResponse_description' - The description of the runtime environment.
+--
+-- 'highAvailabilityConfig', 'getEnvironmentResponse_highAvailabilityConfig' - The desired capacity of the high availability configuration for the
+-- runtime environment.
+--
+-- 'kmsKeyId', 'getEnvironmentResponse_kmsKeyId' - The identifier of a customer managed key.
+--
+-- 'loadBalancerArn', 'getEnvironmentResponse_loadBalancerArn' - The Amazon Resource Name (ARN) for the load balancer used with the
+-- runtime environment.
+--
+-- 'pendingMaintenance', 'getEnvironmentResponse_pendingMaintenance' - Indicates the pending maintenance scheduled on this environment.
+--
+-- 'preferredMaintenanceWindow', 'getEnvironmentResponse_preferredMaintenanceWindow' - Configures the maintenance window you want for the runtime environment.
+-- If you do not provide a value, a random system-generated value will be
+-- assigned.
+--
+-- 'publiclyAccessible', 'getEnvironmentResponse_publiclyAccessible' - Whether applications running in this runtime environment are publicly
+-- accessible.
+--
+-- 'statusReason', 'getEnvironmentResponse_statusReason' - The reason for the reported status.
+--
+-- 'storageConfigurations', 'getEnvironmentResponse_storageConfigurations' - The storage configurations defined for the runtime environment.
+--
+-- 'tags', 'getEnvironmentResponse_tags' - The tags defined for this runtime environment.
+--
+-- 'httpStatus', 'getEnvironmentResponse_httpStatus' - The response's http status code.
+--
+-- 'creationTime', 'getEnvironmentResponse_creationTime' - The timestamp when the runtime environment was created.
+--
+-- 'engineType', 'getEnvironmentResponse_engineType' - The target platform for the runtime environment.
+--
+-- 'engineVersion', 'getEnvironmentResponse_engineVersion' - The version of the runtime engine.
+--
+-- 'environmentArn', 'getEnvironmentResponse_environmentArn' - The Amazon Resource Name (ARN) of the runtime environment.
+--
+-- 'environmentId', 'getEnvironmentResponse_environmentId' - The unique identifier of the runtime environment.
+--
+-- 'instanceType', 'getEnvironmentResponse_instanceType' - The type of instance underlying the runtime environment.
+--
+-- 'name', 'getEnvironmentResponse_name' - The name of the runtime environment. Must be unique within the account.
+--
+-- 'securityGroupIds', 'getEnvironmentResponse_securityGroupIds' - The unique identifiers of the security groups assigned to this runtime
+-- environment.
+--
+-- 'status', 'getEnvironmentResponse_status' - The status of the runtime environment.
+--
+-- 'subnetIds', 'getEnvironmentResponse_subnetIds' - The unique identifiers of the subnets assigned to this runtime
+-- environment.
+--
+-- 'vpcId', 'getEnvironmentResponse_vpcId' - The unique identifier for the VPC used with this runtime environment.
+newGetEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'engineType'
+  EngineType ->
+  -- | 'engineVersion'
+  Prelude.Text ->
+  -- | 'environmentArn'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  EnvironmentLifecycle ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  GetEnvironmentResponse
+newGetEnvironmentResponse
+  pHttpStatus_
+  pCreationTime_
+  pEngineType_
+  pEngineVersion_
+  pEnvironmentArn_
+  pEnvironmentId_
+  pInstanceType_
+  pName_
+  pStatus_
+  pVpcId_ =
+    GetEnvironmentResponse'
+      { actualCapacity =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        highAvailabilityConfig = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        loadBalancerArn = Prelude.Nothing,
+        pendingMaintenance = Prelude.Nothing,
+        preferredMaintenanceWindow = Prelude.Nothing,
+        publiclyAccessible = Prelude.Nothing,
+        statusReason = Prelude.Nothing,
+        storageConfigurations = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        engineType = pEngineType_,
+        engineVersion = pEngineVersion_,
+        environmentArn = pEnvironmentArn_,
+        environmentId = pEnvironmentId_,
+        instanceType = pInstanceType_,
+        name = pName_,
+        securityGroupIds = Prelude.mempty,
+        status = pStatus_,
+        subnetIds = Prelude.mempty,
+        vpcId = pVpcId_
+      }
+
+-- | The number of instances included in the runtime environment. A
+-- standalone runtime environment has a maxiumum of one instance.
+-- Currently, a high availability runtime environment has a maximum of two
+-- instances.
+getEnvironmentResponse_actualCapacity :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Natural)
+getEnvironmentResponse_actualCapacity = Lens.lens (\GetEnvironmentResponse' {actualCapacity} -> actualCapacity) (\s@GetEnvironmentResponse' {} a -> s {actualCapacity = a} :: GetEnvironmentResponse)
+
+-- | The description of the runtime environment.
+getEnvironmentResponse_description :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Text)
+getEnvironmentResponse_description = Lens.lens (\GetEnvironmentResponse' {description} -> description) (\s@GetEnvironmentResponse' {} a -> s {description = a} :: GetEnvironmentResponse)
+
+-- | The desired capacity of the high availability configuration for the
+-- runtime environment.
+getEnvironmentResponse_highAvailabilityConfig :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe HighAvailabilityConfig)
+getEnvironmentResponse_highAvailabilityConfig = Lens.lens (\GetEnvironmentResponse' {highAvailabilityConfig} -> highAvailabilityConfig) (\s@GetEnvironmentResponse' {} a -> s {highAvailabilityConfig = a} :: GetEnvironmentResponse)
+
+-- | The identifier of a customer managed key.
+getEnvironmentResponse_kmsKeyId :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Text)
+getEnvironmentResponse_kmsKeyId = Lens.lens (\GetEnvironmentResponse' {kmsKeyId} -> kmsKeyId) (\s@GetEnvironmentResponse' {} a -> s {kmsKeyId = a} :: GetEnvironmentResponse)
+
+-- | The Amazon Resource Name (ARN) for the load balancer used with the
+-- runtime environment.
+getEnvironmentResponse_loadBalancerArn :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Text)
+getEnvironmentResponse_loadBalancerArn = Lens.lens (\GetEnvironmentResponse' {loadBalancerArn} -> loadBalancerArn) (\s@GetEnvironmentResponse' {} a -> s {loadBalancerArn = a} :: GetEnvironmentResponse)
+
+-- | Indicates the pending maintenance scheduled on this environment.
+getEnvironmentResponse_pendingMaintenance :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe PendingMaintenance)
+getEnvironmentResponse_pendingMaintenance = Lens.lens (\GetEnvironmentResponse' {pendingMaintenance} -> pendingMaintenance) (\s@GetEnvironmentResponse' {} a -> s {pendingMaintenance = a} :: GetEnvironmentResponse)
+
+-- | Configures the maintenance window you want for the runtime environment.
+-- If you do not provide a value, a random system-generated value will be
+-- assigned.
+getEnvironmentResponse_preferredMaintenanceWindow :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Text)
+getEnvironmentResponse_preferredMaintenanceWindow = Lens.lens (\GetEnvironmentResponse' {preferredMaintenanceWindow} -> preferredMaintenanceWindow) (\s@GetEnvironmentResponse' {} a -> s {preferredMaintenanceWindow = a} :: GetEnvironmentResponse)
+
+-- | Whether applications running in this runtime environment are publicly
+-- accessible.
+getEnvironmentResponse_publiclyAccessible :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Bool)
+getEnvironmentResponse_publiclyAccessible = Lens.lens (\GetEnvironmentResponse' {publiclyAccessible} -> publiclyAccessible) (\s@GetEnvironmentResponse' {} a -> s {publiclyAccessible = a} :: GetEnvironmentResponse)
+
+-- | The reason for the reported status.
+getEnvironmentResponse_statusReason :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe Prelude.Text)
+getEnvironmentResponse_statusReason = Lens.lens (\GetEnvironmentResponse' {statusReason} -> statusReason) (\s@GetEnvironmentResponse' {} a -> s {statusReason = a} :: GetEnvironmentResponse)
+
+-- | The storage configurations defined for the runtime environment.
+getEnvironmentResponse_storageConfigurations :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe [StorageConfiguration])
+getEnvironmentResponse_storageConfigurations = Lens.lens (\GetEnvironmentResponse' {storageConfigurations} -> storageConfigurations) (\s@GetEnvironmentResponse' {} a -> s {storageConfigurations = a} :: GetEnvironmentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags defined for this runtime environment.
+getEnvironmentResponse_tags :: Lens.Lens' GetEnvironmentResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getEnvironmentResponse_tags = Lens.lens (\GetEnvironmentResponse' {tags} -> tags) (\s@GetEnvironmentResponse' {} a -> s {tags = a} :: GetEnvironmentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getEnvironmentResponse_httpStatus :: Lens.Lens' GetEnvironmentResponse Prelude.Int
+getEnvironmentResponse_httpStatus = Lens.lens (\GetEnvironmentResponse' {httpStatus} -> httpStatus) (\s@GetEnvironmentResponse' {} a -> s {httpStatus = a} :: GetEnvironmentResponse)
+
+-- | The timestamp when the runtime environment was created.
+getEnvironmentResponse_creationTime :: Lens.Lens' GetEnvironmentResponse Prelude.UTCTime
+getEnvironmentResponse_creationTime = Lens.lens (\GetEnvironmentResponse' {creationTime} -> creationTime) (\s@GetEnvironmentResponse' {} a -> s {creationTime = a} :: GetEnvironmentResponse) Prelude.. Data._Time
+
+-- | The target platform for the runtime environment.
+getEnvironmentResponse_engineType :: Lens.Lens' GetEnvironmentResponse EngineType
+getEnvironmentResponse_engineType = Lens.lens (\GetEnvironmentResponse' {engineType} -> engineType) (\s@GetEnvironmentResponse' {} a -> s {engineType = a} :: GetEnvironmentResponse)
+
+-- | The version of the runtime engine.
+getEnvironmentResponse_engineVersion :: Lens.Lens' GetEnvironmentResponse Prelude.Text
+getEnvironmentResponse_engineVersion = Lens.lens (\GetEnvironmentResponse' {engineVersion} -> engineVersion) (\s@GetEnvironmentResponse' {} a -> s {engineVersion = a} :: GetEnvironmentResponse)
+
+-- | The Amazon Resource Name (ARN) of the runtime environment.
+getEnvironmentResponse_environmentArn :: Lens.Lens' GetEnvironmentResponse Prelude.Text
+getEnvironmentResponse_environmentArn = Lens.lens (\GetEnvironmentResponse' {environmentArn} -> environmentArn) (\s@GetEnvironmentResponse' {} a -> s {environmentArn = a} :: GetEnvironmentResponse)
+
+-- | The unique identifier of the runtime environment.
+getEnvironmentResponse_environmentId :: Lens.Lens' GetEnvironmentResponse Prelude.Text
+getEnvironmentResponse_environmentId = Lens.lens (\GetEnvironmentResponse' {environmentId} -> environmentId) (\s@GetEnvironmentResponse' {} a -> s {environmentId = a} :: GetEnvironmentResponse)
+
+-- | The type of instance underlying the runtime environment.
+getEnvironmentResponse_instanceType :: Lens.Lens' GetEnvironmentResponse Prelude.Text
+getEnvironmentResponse_instanceType = Lens.lens (\GetEnvironmentResponse' {instanceType} -> instanceType) (\s@GetEnvironmentResponse' {} a -> s {instanceType = a} :: GetEnvironmentResponse)
+
+-- | The name of the runtime environment. Must be unique within the account.
+getEnvironmentResponse_name :: Lens.Lens' GetEnvironmentResponse Prelude.Text
+getEnvironmentResponse_name = Lens.lens (\GetEnvironmentResponse' {name} -> name) (\s@GetEnvironmentResponse' {} a -> s {name = a} :: GetEnvironmentResponse)
+
+-- | The unique identifiers of the security groups assigned to this runtime
+-- environment.
+getEnvironmentResponse_securityGroupIds :: Lens.Lens' GetEnvironmentResponse [Prelude.Text]
+getEnvironmentResponse_securityGroupIds = Lens.lens (\GetEnvironmentResponse' {securityGroupIds} -> securityGroupIds) (\s@GetEnvironmentResponse' {} a -> s {securityGroupIds = a} :: GetEnvironmentResponse) Prelude.. Lens.coerced
+
+-- | The status of the runtime environment.
+getEnvironmentResponse_status :: Lens.Lens' GetEnvironmentResponse EnvironmentLifecycle
+getEnvironmentResponse_status = Lens.lens (\GetEnvironmentResponse' {status} -> status) (\s@GetEnvironmentResponse' {} a -> s {status = a} :: GetEnvironmentResponse)
+
+-- | The unique identifiers of the subnets assigned to this runtime
+-- environment.
+getEnvironmentResponse_subnetIds :: Lens.Lens' GetEnvironmentResponse [Prelude.Text]
+getEnvironmentResponse_subnetIds = Lens.lens (\GetEnvironmentResponse' {subnetIds} -> subnetIds) (\s@GetEnvironmentResponse' {} a -> s {subnetIds = a} :: GetEnvironmentResponse) Prelude.. Lens.coerced
+
+-- | The unique identifier for the VPC used with this runtime environment.
+getEnvironmentResponse_vpcId :: Lens.Lens' GetEnvironmentResponse Prelude.Text
+getEnvironmentResponse_vpcId = Lens.lens (\GetEnvironmentResponse' {vpcId} -> vpcId) (\s@GetEnvironmentResponse' {} a -> s {vpcId = a} :: GetEnvironmentResponse)
+
+instance Prelude.NFData GetEnvironmentResponse where
+  rnf GetEnvironmentResponse' {..} =
+    Prelude.rnf actualCapacity
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf highAvailabilityConfig
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf loadBalancerArn
+      `Prelude.seq` Prelude.rnf pendingMaintenance
+      `Prelude.seq` Prelude.rnf preferredMaintenanceWindow
+      `Prelude.seq` Prelude.rnf publiclyAccessible
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf storageConfigurations
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf engineVersion
+      `Prelude.seq` Prelude.rnf environmentArn
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/M2/Lens.hs b/gen/Amazonka/M2/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Lens.hs
@@ -0,0 +1,587 @@
+{-# 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.M2.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.M2.Lens
+  ( -- * Operations
+
+    -- ** CancelBatchJobExecution
+    cancelBatchJobExecution_applicationId,
+    cancelBatchJobExecution_executionId,
+    cancelBatchJobExecutionResponse_httpStatus,
+
+    -- ** CreateApplication
+    createApplication_clientToken,
+    createApplication_description,
+    createApplication_kmsKeyId,
+    createApplication_tags,
+    createApplication_definition,
+    createApplication_engineType,
+    createApplication_name,
+    createApplicationResponse_httpStatus,
+    createApplicationResponse_applicationArn,
+    createApplicationResponse_applicationId,
+    createApplicationResponse_applicationVersion,
+
+    -- ** CreateDataSetImportTask
+    createDataSetImportTask_clientToken,
+    createDataSetImportTask_applicationId,
+    createDataSetImportTask_importConfig,
+    createDataSetImportTaskResponse_httpStatus,
+    createDataSetImportTaskResponse_taskId,
+
+    -- ** CreateDeployment
+    createDeployment_clientToken,
+    createDeployment_applicationId,
+    createDeployment_applicationVersion,
+    createDeployment_environmentId,
+    createDeploymentResponse_httpStatus,
+    createDeploymentResponse_deploymentId,
+
+    -- ** CreateEnvironment
+    createEnvironment_clientToken,
+    createEnvironment_description,
+    createEnvironment_engineVersion,
+    createEnvironment_highAvailabilityConfig,
+    createEnvironment_kmsKeyId,
+    createEnvironment_preferredMaintenanceWindow,
+    createEnvironment_publiclyAccessible,
+    createEnvironment_securityGroupIds,
+    createEnvironment_storageConfigurations,
+    createEnvironment_subnetIds,
+    createEnvironment_tags,
+    createEnvironment_engineType,
+    createEnvironment_instanceType,
+    createEnvironment_name,
+    createEnvironmentResponse_httpStatus,
+    createEnvironmentResponse_environmentId,
+
+    -- ** DeleteApplication
+    deleteApplication_applicationId,
+    deleteApplicationResponse_httpStatus,
+
+    -- ** DeleteApplicationFromEnvironment
+    deleteApplicationFromEnvironment_applicationId,
+    deleteApplicationFromEnvironment_environmentId,
+    deleteApplicationFromEnvironmentResponse_httpStatus,
+
+    -- ** DeleteEnvironment
+    deleteEnvironment_environmentId,
+    deleteEnvironmentResponse_httpStatus,
+
+    -- ** GetApplication
+    getApplication_applicationId,
+    getApplicationResponse_deployedVersion,
+    getApplicationResponse_description,
+    getApplicationResponse_environmentId,
+    getApplicationResponse_kmsKeyId,
+    getApplicationResponse_lastStartTime,
+    getApplicationResponse_listenerArns,
+    getApplicationResponse_listenerPorts,
+    getApplicationResponse_loadBalancerDnsName,
+    getApplicationResponse_logGroups,
+    getApplicationResponse_statusReason,
+    getApplicationResponse_tags,
+    getApplicationResponse_targetGroupArns,
+    getApplicationResponse_httpStatus,
+    getApplicationResponse_applicationArn,
+    getApplicationResponse_applicationId,
+    getApplicationResponse_creationTime,
+    getApplicationResponse_engineType,
+    getApplicationResponse_latestVersion,
+    getApplicationResponse_name,
+    getApplicationResponse_status,
+
+    -- ** GetApplicationVersion
+    getApplicationVersion_applicationId,
+    getApplicationVersion_applicationVersion,
+    getApplicationVersionResponse_description,
+    getApplicationVersionResponse_statusReason,
+    getApplicationVersionResponse_httpStatus,
+    getApplicationVersionResponse_applicationVersion,
+    getApplicationVersionResponse_creationTime,
+    getApplicationVersionResponse_definitionContent,
+    getApplicationVersionResponse_name,
+    getApplicationVersionResponse_status,
+
+    -- ** GetBatchJobExecution
+    getBatchJobExecution_applicationId,
+    getBatchJobExecution_executionId,
+    getBatchJobExecutionResponse_endTime,
+    getBatchJobExecutionResponse_jobId,
+    getBatchJobExecutionResponse_jobName,
+    getBatchJobExecutionResponse_jobType,
+    getBatchJobExecutionResponse_jobUser,
+    getBatchJobExecutionResponse_statusReason,
+    getBatchJobExecutionResponse_httpStatus,
+    getBatchJobExecutionResponse_applicationId,
+    getBatchJobExecutionResponse_executionId,
+    getBatchJobExecutionResponse_startTime,
+    getBatchJobExecutionResponse_status,
+
+    -- ** GetDataSetDetails
+    getDataSetDetails_applicationId,
+    getDataSetDetails_dataSetName,
+    getDataSetDetailsResponse_blocksize,
+    getDataSetDetailsResponse_creationTime,
+    getDataSetDetailsResponse_dataSetOrg,
+    getDataSetDetailsResponse_lastReferencedTime,
+    getDataSetDetailsResponse_lastUpdatedTime,
+    getDataSetDetailsResponse_location,
+    getDataSetDetailsResponse_recordLength,
+    getDataSetDetailsResponse_httpStatus,
+    getDataSetDetailsResponse_dataSetName,
+
+    -- ** GetDataSetImportTask
+    getDataSetImportTask_applicationId,
+    getDataSetImportTask_taskId,
+    getDataSetImportTaskResponse_summary,
+    getDataSetImportTaskResponse_httpStatus,
+    getDataSetImportTaskResponse_status,
+    getDataSetImportTaskResponse_taskId,
+
+    -- ** GetDeployment
+    getDeployment_applicationId,
+    getDeployment_deploymentId,
+    getDeploymentResponse_statusReason,
+    getDeploymentResponse_httpStatus,
+    getDeploymentResponse_applicationId,
+    getDeploymentResponse_applicationVersion,
+    getDeploymentResponse_creationTime,
+    getDeploymentResponse_deploymentId,
+    getDeploymentResponse_environmentId,
+    getDeploymentResponse_status,
+
+    -- ** GetEnvironment
+    getEnvironment_environmentId,
+    getEnvironmentResponse_actualCapacity,
+    getEnvironmentResponse_description,
+    getEnvironmentResponse_highAvailabilityConfig,
+    getEnvironmentResponse_kmsKeyId,
+    getEnvironmentResponse_loadBalancerArn,
+    getEnvironmentResponse_pendingMaintenance,
+    getEnvironmentResponse_preferredMaintenanceWindow,
+    getEnvironmentResponse_publiclyAccessible,
+    getEnvironmentResponse_statusReason,
+    getEnvironmentResponse_storageConfigurations,
+    getEnvironmentResponse_tags,
+    getEnvironmentResponse_httpStatus,
+    getEnvironmentResponse_creationTime,
+    getEnvironmentResponse_engineType,
+    getEnvironmentResponse_engineVersion,
+    getEnvironmentResponse_environmentArn,
+    getEnvironmentResponse_environmentId,
+    getEnvironmentResponse_instanceType,
+    getEnvironmentResponse_name,
+    getEnvironmentResponse_securityGroupIds,
+    getEnvironmentResponse_status,
+    getEnvironmentResponse_subnetIds,
+    getEnvironmentResponse_vpcId,
+
+    -- ** ListApplicationVersions
+    listApplicationVersions_maxResults,
+    listApplicationVersions_nextToken,
+    listApplicationVersions_applicationId,
+    listApplicationVersionsResponse_nextToken,
+    listApplicationVersionsResponse_httpStatus,
+    listApplicationVersionsResponse_applicationVersions,
+
+    -- ** ListApplications
+    listApplications_environmentId,
+    listApplications_maxResults,
+    listApplications_names,
+    listApplications_nextToken,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+    listApplicationsResponse_applications,
+
+    -- ** ListBatchJobDefinitions
+    listBatchJobDefinitions_maxResults,
+    listBatchJobDefinitions_nextToken,
+    listBatchJobDefinitions_prefix,
+    listBatchJobDefinitions_applicationId,
+    listBatchJobDefinitionsResponse_nextToken,
+    listBatchJobDefinitionsResponse_httpStatus,
+    listBatchJobDefinitionsResponse_batchJobDefinitions,
+
+    -- ** ListBatchJobExecutions
+    listBatchJobExecutions_executionIds,
+    listBatchJobExecutions_jobName,
+    listBatchJobExecutions_maxResults,
+    listBatchJobExecutions_nextToken,
+    listBatchJobExecutions_startedAfter,
+    listBatchJobExecutions_startedBefore,
+    listBatchJobExecutions_status,
+    listBatchJobExecutions_applicationId,
+    listBatchJobExecutionsResponse_nextToken,
+    listBatchJobExecutionsResponse_httpStatus,
+    listBatchJobExecutionsResponse_batchJobExecutions,
+
+    -- ** ListDataSetImportHistory
+    listDataSetImportHistory_maxResults,
+    listDataSetImportHistory_nextToken,
+    listDataSetImportHistory_applicationId,
+    listDataSetImportHistoryResponse_nextToken,
+    listDataSetImportHistoryResponse_httpStatus,
+    listDataSetImportHistoryResponse_dataSetImportTasks,
+
+    -- ** ListDataSets
+    listDataSets_maxResults,
+    listDataSets_nextToken,
+    listDataSets_prefix,
+    listDataSets_applicationId,
+    listDataSetsResponse_nextToken,
+    listDataSetsResponse_httpStatus,
+    listDataSetsResponse_dataSets,
+
+    -- ** ListDeployments
+    listDeployments_maxResults,
+    listDeployments_nextToken,
+    listDeployments_applicationId,
+    listDeploymentsResponse_nextToken,
+    listDeploymentsResponse_httpStatus,
+    listDeploymentsResponse_deployments,
+
+    -- ** ListEngineVersions
+    listEngineVersions_engineType,
+    listEngineVersions_maxResults,
+    listEngineVersions_nextToken,
+    listEngineVersionsResponse_nextToken,
+    listEngineVersionsResponse_httpStatus,
+    listEngineVersionsResponse_engineVersions,
+
+    -- ** ListEnvironments
+    listEnvironments_engineType,
+    listEnvironments_maxResults,
+    listEnvironments_names,
+    listEnvironments_nextToken,
+    listEnvironmentsResponse_nextToken,
+    listEnvironmentsResponse_httpStatus,
+    listEnvironmentsResponse_environments,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_httpStatus,
+    listTagsForResourceResponse_tags,
+
+    -- ** StartApplication
+    startApplication_applicationId,
+    startApplicationResponse_httpStatus,
+
+    -- ** StartBatchJob
+    startBatchJob_jobParams,
+    startBatchJob_applicationId,
+    startBatchJob_batchJobIdentifier,
+    startBatchJobResponse_httpStatus,
+    startBatchJobResponse_executionId,
+
+    -- ** StopApplication
+    stopApplication_forceStop,
+    stopApplication_applicationId,
+    stopApplicationResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateApplication
+    updateApplication_definition,
+    updateApplication_description,
+    updateApplication_applicationId,
+    updateApplication_currentApplicationVersion,
+    updateApplicationResponse_httpStatus,
+    updateApplicationResponse_applicationVersion,
+
+    -- ** UpdateEnvironment
+    updateEnvironment_applyDuringMaintenanceWindow,
+    updateEnvironment_desiredCapacity,
+    updateEnvironment_engineVersion,
+    updateEnvironment_instanceType,
+    updateEnvironment_preferredMaintenanceWindow,
+    updateEnvironment_environmentId,
+    updateEnvironmentResponse_httpStatus,
+    updateEnvironmentResponse_environmentId,
+
+    -- * Types
+
+    -- ** AlternateKey
+    alternateKey_allowDuplicates,
+    alternateKey_name,
+    alternateKey_length,
+    alternateKey_offset,
+
+    -- ** ApplicationSummary
+    applicationSummary_deploymentStatus,
+    applicationSummary_description,
+    applicationSummary_environmentId,
+    applicationSummary_lastStartTime,
+    applicationSummary_versionStatus,
+    applicationSummary_applicationArn,
+    applicationSummary_applicationId,
+    applicationSummary_applicationVersion,
+    applicationSummary_creationTime,
+    applicationSummary_engineType,
+    applicationSummary_name,
+    applicationSummary_status,
+
+    -- ** ApplicationVersionSummary
+    applicationVersionSummary_statusReason,
+    applicationVersionSummary_applicationVersion,
+    applicationVersionSummary_creationTime,
+    applicationVersionSummary_status,
+
+    -- ** BatchJobDefinition
+    batchJobDefinition_fileBatchJobDefinition,
+    batchJobDefinition_scriptBatchJobDefinition,
+
+    -- ** BatchJobExecutionSummary
+    batchJobExecutionSummary_endTime,
+    batchJobExecutionSummary_jobId,
+    batchJobExecutionSummary_jobName,
+    batchJobExecutionSummary_jobType,
+    batchJobExecutionSummary_applicationId,
+    batchJobExecutionSummary_executionId,
+    batchJobExecutionSummary_startTime,
+    batchJobExecutionSummary_status,
+
+    -- ** BatchJobIdentifier
+    batchJobIdentifier_fileBatchJobIdentifier,
+    batchJobIdentifier_scriptBatchJobIdentifier,
+
+    -- ** DataSet
+    dataSet_relativePath,
+    dataSet_storageType,
+    dataSet_datasetName,
+    dataSet_datasetOrg,
+    dataSet_recordLength,
+
+    -- ** DataSetImportConfig
+    dataSetImportConfig_dataSets,
+    dataSetImportConfig_s3Location,
+
+    -- ** DataSetImportItem
+    dataSetImportItem_dataSet,
+    dataSetImportItem_externalLocation,
+
+    -- ** DataSetImportSummary
+    dataSetImportSummary_failed,
+    dataSetImportSummary_inProgress,
+    dataSetImportSummary_pending,
+    dataSetImportSummary_succeeded,
+    dataSetImportSummary_total,
+
+    -- ** DataSetImportTask
+    dataSetImportTask_status,
+    dataSetImportTask_summary,
+    dataSetImportTask_taskId,
+
+    -- ** DataSetSummary
+    dataSetSummary_creationTime,
+    dataSetSummary_dataSetOrg,
+    dataSetSummary_format,
+    dataSetSummary_lastReferencedTime,
+    dataSetSummary_lastUpdatedTime,
+    dataSetSummary_dataSetName,
+
+    -- ** DatasetDetailOrgAttributes
+    datasetDetailOrgAttributes_gdg,
+    datasetDetailOrgAttributes_vsam,
+
+    -- ** DatasetOrgAttributes
+    datasetOrgAttributes_gdg,
+    datasetOrgAttributes_vsam,
+
+    -- ** Definition
+    definition_content,
+    definition_s3Location,
+
+    -- ** DeployedVersionSummary
+    deployedVersionSummary_statusReason,
+    deployedVersionSummary_applicationVersion,
+    deployedVersionSummary_status,
+
+    -- ** DeploymentSummary
+    deploymentSummary_statusReason,
+    deploymentSummary_applicationId,
+    deploymentSummary_applicationVersion,
+    deploymentSummary_creationTime,
+    deploymentSummary_deploymentId,
+    deploymentSummary_environmentId,
+    deploymentSummary_status,
+
+    -- ** EfsStorageConfiguration
+    efsStorageConfiguration_fileSystemId,
+    efsStorageConfiguration_mountPoint,
+
+    -- ** EngineVersionsSummary
+    engineVersionsSummary_engineType,
+    engineVersionsSummary_engineVersion,
+
+    -- ** EnvironmentSummary
+    environmentSummary_creationTime,
+    environmentSummary_engineType,
+    environmentSummary_engineVersion,
+    environmentSummary_environmentArn,
+    environmentSummary_environmentId,
+    environmentSummary_instanceType,
+    environmentSummary_name,
+    environmentSummary_status,
+
+    -- ** ExternalLocation
+    externalLocation_s3Location,
+
+    -- ** FileBatchJobDefinition
+    fileBatchJobDefinition_folderPath,
+    fileBatchJobDefinition_fileName,
+
+    -- ** FileBatchJobIdentifier
+    fileBatchJobIdentifier_folderPath,
+    fileBatchJobIdentifier_fileName,
+
+    -- ** FsxStorageConfiguration
+    fsxStorageConfiguration_fileSystemId,
+    fsxStorageConfiguration_mountPoint,
+
+    -- ** GdgAttributes
+    gdgAttributes_limit,
+    gdgAttributes_rollDisposition,
+
+    -- ** GdgDetailAttributes
+    gdgDetailAttributes_limit,
+    gdgDetailAttributes_rollDisposition,
+
+    -- ** HighAvailabilityConfig
+    highAvailabilityConfig_desiredCapacity,
+
+    -- ** LogGroupSummary
+    logGroupSummary_logGroupName,
+    logGroupSummary_logType,
+
+    -- ** MaintenanceSchedule
+    maintenanceSchedule_endTime,
+    maintenanceSchedule_startTime,
+
+    -- ** PendingMaintenance
+    pendingMaintenance_engineVersion,
+    pendingMaintenance_schedule,
+
+    -- ** PrimaryKey
+    primaryKey_name,
+    primaryKey_length,
+    primaryKey_offset,
+
+    -- ** RecordLength
+    recordLength_max,
+    recordLength_min,
+
+    -- ** ScriptBatchJobDefinition
+    scriptBatchJobDefinition_scriptName,
+
+    -- ** ScriptBatchJobIdentifier
+    scriptBatchJobIdentifier_scriptName,
+
+    -- ** StorageConfiguration
+    storageConfiguration_efs,
+    storageConfiguration_fsx,
+
+    -- ** VsamAttributes
+    vsamAttributes_alternateKeys,
+    vsamAttributes_compressed,
+    vsamAttributes_encoding,
+    vsamAttributes_primaryKey,
+    vsamAttributes_format,
+
+    -- ** VsamDetailAttributes
+    vsamDetailAttributes_alternateKeys,
+    vsamDetailAttributes_cacheAtStartup,
+    vsamDetailAttributes_compressed,
+    vsamDetailAttributes_encoding,
+    vsamDetailAttributes_primaryKey,
+    vsamDetailAttributes_recordFormat,
+  )
+where
+
+import Amazonka.M2.CancelBatchJobExecution
+import Amazonka.M2.CreateApplication
+import Amazonka.M2.CreateDataSetImportTask
+import Amazonka.M2.CreateDeployment
+import Amazonka.M2.CreateEnvironment
+import Amazonka.M2.DeleteApplication
+import Amazonka.M2.DeleteApplicationFromEnvironment
+import Amazonka.M2.DeleteEnvironment
+import Amazonka.M2.GetApplication
+import Amazonka.M2.GetApplicationVersion
+import Amazonka.M2.GetBatchJobExecution
+import Amazonka.M2.GetDataSetDetails
+import Amazonka.M2.GetDataSetImportTask
+import Amazonka.M2.GetDeployment
+import Amazonka.M2.GetEnvironment
+import Amazonka.M2.ListApplicationVersions
+import Amazonka.M2.ListApplications
+import Amazonka.M2.ListBatchJobDefinitions
+import Amazonka.M2.ListBatchJobExecutions
+import Amazonka.M2.ListDataSetImportHistory
+import Amazonka.M2.ListDataSets
+import Amazonka.M2.ListDeployments
+import Amazonka.M2.ListEngineVersions
+import Amazonka.M2.ListEnvironments
+import Amazonka.M2.ListTagsForResource
+import Amazonka.M2.StartApplication
+import Amazonka.M2.StartBatchJob
+import Amazonka.M2.StopApplication
+import Amazonka.M2.TagResource
+import Amazonka.M2.Types.AlternateKey
+import Amazonka.M2.Types.ApplicationSummary
+import Amazonka.M2.Types.ApplicationVersionSummary
+import Amazonka.M2.Types.BatchJobDefinition
+import Amazonka.M2.Types.BatchJobExecutionSummary
+import Amazonka.M2.Types.BatchJobIdentifier
+import Amazonka.M2.Types.DataSet
+import Amazonka.M2.Types.DataSetImportConfig
+import Amazonka.M2.Types.DataSetImportItem
+import Amazonka.M2.Types.DataSetImportSummary
+import Amazonka.M2.Types.DataSetImportTask
+import Amazonka.M2.Types.DataSetSummary
+import Amazonka.M2.Types.DatasetDetailOrgAttributes
+import Amazonka.M2.Types.DatasetOrgAttributes
+import Amazonka.M2.Types.Definition
+import Amazonka.M2.Types.DeployedVersionSummary
+import Amazonka.M2.Types.DeploymentSummary
+import Amazonka.M2.Types.EfsStorageConfiguration
+import Amazonka.M2.Types.EngineVersionsSummary
+import Amazonka.M2.Types.EnvironmentSummary
+import Amazonka.M2.Types.ExternalLocation
+import Amazonka.M2.Types.FileBatchJobDefinition
+import Amazonka.M2.Types.FileBatchJobIdentifier
+import Amazonka.M2.Types.FsxStorageConfiguration
+import Amazonka.M2.Types.GdgAttributes
+import Amazonka.M2.Types.GdgDetailAttributes
+import Amazonka.M2.Types.HighAvailabilityConfig
+import Amazonka.M2.Types.LogGroupSummary
+import Amazonka.M2.Types.MaintenanceSchedule
+import Amazonka.M2.Types.PendingMaintenance
+import Amazonka.M2.Types.PrimaryKey
+import Amazonka.M2.Types.RecordLength
+import Amazonka.M2.Types.ScriptBatchJobDefinition
+import Amazonka.M2.Types.ScriptBatchJobIdentifier
+import Amazonka.M2.Types.StorageConfiguration
+import Amazonka.M2.Types.VsamAttributes
+import Amazonka.M2.Types.VsamDetailAttributes
+import Amazonka.M2.UntagResource
+import Amazonka.M2.UpdateApplication
+import Amazonka.M2.UpdateEnvironment
diff --git a/gen/Amazonka/M2/ListApplicationVersions.hs b/gen/Amazonka/M2/ListApplicationVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListApplicationVersions.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.ListApplicationVersions
+-- 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 application versions for a specific application.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListApplicationVersions
+  ( -- * Creating a Request
+    ListApplicationVersions (..),
+    newListApplicationVersions,
+
+    -- * Request Lenses
+    listApplicationVersions_maxResults,
+    listApplicationVersions_nextToken,
+    listApplicationVersions_applicationId,
+
+    -- * Destructuring the Response
+    ListApplicationVersionsResponse (..),
+    newListApplicationVersionsResponse,
+
+    -- * Response Lenses
+    listApplicationVersionsResponse_nextToken,
+    listApplicationVersionsResponse_httpStatus,
+    listApplicationVersionsResponse_applicationVersions,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListApplicationVersions' smart constructor.
+data ListApplicationVersions = ListApplicationVersions'
+  { -- | The maximum number of application versions to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token returned from a previous call to this operation. This
+    -- specifies the next item to return. To return to the beginning of the
+    -- list, exclude this parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the application.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplicationVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listApplicationVersions_maxResults' - The maximum number of application versions to return.
+--
+-- 'nextToken', 'listApplicationVersions_nextToken' - A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+--
+-- 'applicationId', 'listApplicationVersions_applicationId' - The unique identifier of the application.
+newListApplicationVersions ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListApplicationVersions
+newListApplicationVersions pApplicationId_ =
+  ListApplicationVersions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of application versions to return.
+listApplicationVersions_maxResults :: Lens.Lens' ListApplicationVersions (Prelude.Maybe Prelude.Natural)
+listApplicationVersions_maxResults = Lens.lens (\ListApplicationVersions' {maxResults} -> maxResults) (\s@ListApplicationVersions' {} a -> s {maxResults = a} :: ListApplicationVersions)
+
+-- | A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+listApplicationVersions_nextToken :: Lens.Lens' ListApplicationVersions (Prelude.Maybe Prelude.Text)
+listApplicationVersions_nextToken = Lens.lens (\ListApplicationVersions' {nextToken} -> nextToken) (\s@ListApplicationVersions' {} a -> s {nextToken = a} :: ListApplicationVersions)
+
+-- | The unique identifier of the application.
+listApplicationVersions_applicationId :: Lens.Lens' ListApplicationVersions Prelude.Text
+listApplicationVersions_applicationId = Lens.lens (\ListApplicationVersions' {applicationId} -> applicationId) (\s@ListApplicationVersions' {} a -> s {applicationId = a} :: ListApplicationVersions)
+
+instance Core.AWSPager ListApplicationVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listApplicationVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listApplicationVersionsResponse_applicationVersions
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listApplicationVersions_nextToken
+          Lens..~ rs
+          Lens.^? listApplicationVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListApplicationVersions where
+  type
+    AWSResponse ListApplicationVersions =
+      ListApplicationVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListApplicationVersionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "applicationVersions"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListApplicationVersions where
+  hashWithSalt _salt ListApplicationVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListApplicationVersions where
+  rnf ListApplicationVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListApplicationVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListApplicationVersions where
+  toPath ListApplicationVersions' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/versions"
+      ]
+
+instance Data.ToQuery ListApplicationVersions where
+  toQuery ListApplicationVersions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListApplicationVersionsResponse' smart constructor.
+data ListApplicationVersionsResponse = ListApplicationVersionsResponse'
+  { -- | If there are more items to return, this contains a token that is passed
+    -- to a subsequent call to this operation to retrieve the next set of
+    -- items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of application versions.
+    applicationVersions :: [ApplicationVersionSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplicationVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listApplicationVersionsResponse_nextToken' - If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+--
+-- 'httpStatus', 'listApplicationVersionsResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationVersions', 'listApplicationVersionsResponse_applicationVersions' - The list of application versions.
+newListApplicationVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListApplicationVersionsResponse
+newListApplicationVersionsResponse pHttpStatus_ =
+  ListApplicationVersionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      applicationVersions = Prelude.mempty
+    }
+
+-- | If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+listApplicationVersionsResponse_nextToken :: Lens.Lens' ListApplicationVersionsResponse (Prelude.Maybe Prelude.Text)
+listApplicationVersionsResponse_nextToken = Lens.lens (\ListApplicationVersionsResponse' {nextToken} -> nextToken) (\s@ListApplicationVersionsResponse' {} a -> s {nextToken = a} :: ListApplicationVersionsResponse)
+
+-- | The response's http status code.
+listApplicationVersionsResponse_httpStatus :: Lens.Lens' ListApplicationVersionsResponse Prelude.Int
+listApplicationVersionsResponse_httpStatus = Lens.lens (\ListApplicationVersionsResponse' {httpStatus} -> httpStatus) (\s@ListApplicationVersionsResponse' {} a -> s {httpStatus = a} :: ListApplicationVersionsResponse)
+
+-- | The list of application versions.
+listApplicationVersionsResponse_applicationVersions :: Lens.Lens' ListApplicationVersionsResponse [ApplicationVersionSummary]
+listApplicationVersionsResponse_applicationVersions = Lens.lens (\ListApplicationVersionsResponse' {applicationVersions} -> applicationVersions) (\s@ListApplicationVersionsResponse' {} a -> s {applicationVersions = a} :: ListApplicationVersionsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListApplicationVersionsResponse
+  where
+  rnf ListApplicationVersionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationVersions
diff --git a/gen/Amazonka/M2/ListApplications.hs b/gen/Amazonka/M2/ListApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListApplications.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.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)
+--
+-- Lists the applications associated with a specific Amazon Web Services
+-- account. You can provide the unique identifier of a specific runtime
+-- environment in a query parameter to see all applications associated with
+-- that environment.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListApplications
+  ( -- * Creating a Request
+    ListApplications (..),
+    newListApplications,
+
+    -- * Request Lenses
+    listApplications_environmentId,
+    listApplications_maxResults,
+    listApplications_names,
+    listApplications_nextToken,
+
+    -- * Destructuring the Response
+    ListApplicationsResponse (..),
+    newListApplicationsResponse,
+
+    -- * Response Lenses
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+    listApplicationsResponse_applications,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.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'
+  { -- | The unique identifier of the runtime environment where the applications
+    -- are deployed.
+    environmentId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of applications to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The names of the applications.
+    names :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A pagination token to control the number of applications displayed in
+    -- the list.
+    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:
+--
+-- 'environmentId', 'listApplications_environmentId' - The unique identifier of the runtime environment where the applications
+-- are deployed.
+--
+-- 'maxResults', 'listApplications_maxResults' - The maximum number of applications to return.
+--
+-- 'names', 'listApplications_names' - The names of the applications.
+--
+-- 'nextToken', 'listApplications_nextToken' - A pagination token to control the number of applications displayed in
+-- the list.
+newListApplications ::
+  ListApplications
+newListApplications =
+  ListApplications'
+    { environmentId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      names = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The unique identifier of the runtime environment where the applications
+-- are deployed.
+listApplications_environmentId :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Text)
+listApplications_environmentId = Lens.lens (\ListApplications' {environmentId} -> environmentId) (\s@ListApplications' {} a -> s {environmentId = a} :: ListApplications)
+
+-- | The maximum number of applications to return.
+listApplications_maxResults :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Natural)
+listApplications_maxResults = Lens.lens (\ListApplications' {maxResults} -> maxResults) (\s@ListApplications' {} a -> s {maxResults = a} :: ListApplications)
+
+-- | The names of the applications.
+listApplications_names :: Lens.Lens' ListApplications (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+listApplications_names = Lens.lens (\ListApplications' {names} -> names) (\s@ListApplications' {} a -> s {names = a} :: ListApplications) Prelude.. Lens.mapping Lens.coerced
+
+-- | A pagination token to control the number of applications displayed in
+-- the list.
+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_applications) =
+        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.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListApplicationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "applications" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListApplications where
+  hashWithSalt _salt ListApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` names
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApplications where
+  rnf ListApplications' {..} =
+    Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf names
+      `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.ToPath ListApplications where
+  toPath = Prelude.const "/applications"
+
+instance Data.ToQuery ListApplications where
+  toQuery ListApplications' {..} =
+    Prelude.mconcat
+      [ "environmentId" Data.=: environmentId,
+        "maxResults" Data.=: maxResults,
+        "names"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> names),
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListApplicationsResponse' smart constructor.
+data ListApplicationsResponse = ListApplicationsResponse'
+  { -- | A pagination token that\'s returned when the response doesn\'t contain
+    -- all applications.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Returns a list of summary details for all the applications in a runtime
+    -- environment.
+    applications :: [ApplicationSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, 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:
+--
+-- 'nextToken', 'listApplicationsResponse_nextToken' - A pagination token that\'s returned when the response doesn\'t contain
+-- all applications.
+--
+-- 'httpStatus', 'listApplicationsResponse_httpStatus' - The response's http status code.
+--
+-- 'applications', 'listApplicationsResponse_applications' - Returns a list of summary details for all the applications in a runtime
+-- environment.
+newListApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListApplicationsResponse
+newListApplicationsResponse pHttpStatus_ =
+  ListApplicationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      applications = Prelude.mempty
+    }
+
+-- | A pagination token that\'s returned when the response doesn\'t contain
+-- all applications.
+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)
+
+-- | Returns a list of summary details for all the applications in a runtime
+-- environment.
+listApplicationsResponse_applications :: Lens.Lens' ListApplicationsResponse [ApplicationSummary]
+listApplicationsResponse_applications = Lens.lens (\ListApplicationsResponse' {applications} -> applications) (\s@ListApplicationsResponse' {} a -> s {applications = a} :: ListApplicationsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListApplicationsResponse where
+  rnf ListApplicationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applications
diff --git a/gen/Amazonka/M2/ListBatchJobDefinitions.hs b/gen/Amazonka/M2/ListBatchJobDefinitions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListBatchJobDefinitions.hs
@@ -0,0 +1,266 @@
+{-# 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.M2.ListBatchJobDefinitions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the available batch job definitions based on the batch job
+-- resources uploaded during the application creation. You can use the
+-- batch job definitions in the list to start a batch job.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListBatchJobDefinitions
+  ( -- * Creating a Request
+    ListBatchJobDefinitions (..),
+    newListBatchJobDefinitions,
+
+    -- * Request Lenses
+    listBatchJobDefinitions_maxResults,
+    listBatchJobDefinitions_nextToken,
+    listBatchJobDefinitions_prefix,
+    listBatchJobDefinitions_applicationId,
+
+    -- * Destructuring the Response
+    ListBatchJobDefinitionsResponse (..),
+    newListBatchJobDefinitionsResponse,
+
+    -- * Response Lenses
+    listBatchJobDefinitionsResponse_nextToken,
+    listBatchJobDefinitionsResponse_httpStatus,
+    listBatchJobDefinitionsResponse_batchJobDefinitions,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBatchJobDefinitions' smart constructor.
+data ListBatchJobDefinitions = ListBatchJobDefinitions'
+  { -- | The maximum number of batch job definitions to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token returned from a previous call to this operation. This
+    -- specifies the next item to return. To return to the beginning of the
+    -- list, exclude this parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | If the batch job definition is a FileBatchJobDefinition, the prefix
+    -- allows you to search on the file names of FileBatchJobDefinitions.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the application.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBatchJobDefinitions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listBatchJobDefinitions_maxResults' - The maximum number of batch job definitions to return.
+--
+-- 'nextToken', 'listBatchJobDefinitions_nextToken' - A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+--
+-- 'prefix', 'listBatchJobDefinitions_prefix' - If the batch job definition is a FileBatchJobDefinition, the prefix
+-- allows you to search on the file names of FileBatchJobDefinitions.
+--
+-- 'applicationId', 'listBatchJobDefinitions_applicationId' - The identifier of the application.
+newListBatchJobDefinitions ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListBatchJobDefinitions
+newListBatchJobDefinitions pApplicationId_ =
+  ListBatchJobDefinitions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of batch job definitions to return.
+listBatchJobDefinitions_maxResults :: Lens.Lens' ListBatchJobDefinitions (Prelude.Maybe Prelude.Natural)
+listBatchJobDefinitions_maxResults = Lens.lens (\ListBatchJobDefinitions' {maxResults} -> maxResults) (\s@ListBatchJobDefinitions' {} a -> s {maxResults = a} :: ListBatchJobDefinitions)
+
+-- | A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+listBatchJobDefinitions_nextToken :: Lens.Lens' ListBatchJobDefinitions (Prelude.Maybe Prelude.Text)
+listBatchJobDefinitions_nextToken = Lens.lens (\ListBatchJobDefinitions' {nextToken} -> nextToken) (\s@ListBatchJobDefinitions' {} a -> s {nextToken = a} :: ListBatchJobDefinitions)
+
+-- | If the batch job definition is a FileBatchJobDefinition, the prefix
+-- allows you to search on the file names of FileBatchJobDefinitions.
+listBatchJobDefinitions_prefix :: Lens.Lens' ListBatchJobDefinitions (Prelude.Maybe Prelude.Text)
+listBatchJobDefinitions_prefix = Lens.lens (\ListBatchJobDefinitions' {prefix} -> prefix) (\s@ListBatchJobDefinitions' {} a -> s {prefix = a} :: ListBatchJobDefinitions)
+
+-- | The identifier of the application.
+listBatchJobDefinitions_applicationId :: Lens.Lens' ListBatchJobDefinitions Prelude.Text
+listBatchJobDefinitions_applicationId = Lens.lens (\ListBatchJobDefinitions' {applicationId} -> applicationId) (\s@ListBatchJobDefinitions' {} a -> s {applicationId = a} :: ListBatchJobDefinitions)
+
+instance Core.AWSPager ListBatchJobDefinitions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listBatchJobDefinitionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listBatchJobDefinitionsResponse_batchJobDefinitions
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listBatchJobDefinitions_nextToken
+          Lens..~ rs
+          Lens.^? listBatchJobDefinitionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListBatchJobDefinitions where
+  type
+    AWSResponse ListBatchJobDefinitions =
+      ListBatchJobDefinitionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBatchJobDefinitionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "batchJobDefinitions"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListBatchJobDefinitions where
+  hashWithSalt _salt ListBatchJobDefinitions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` prefix
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListBatchJobDefinitions where
+  rnf ListBatchJobDefinitions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListBatchJobDefinitions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListBatchJobDefinitions where
+  toPath ListBatchJobDefinitions' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/batch-job-definitions"
+      ]
+
+instance Data.ToQuery ListBatchJobDefinitions where
+  toQuery ListBatchJobDefinitions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "prefix" Data.=: prefix
+      ]
+
+-- | /See:/ 'newListBatchJobDefinitionsResponse' smart constructor.
+data ListBatchJobDefinitionsResponse = ListBatchJobDefinitionsResponse'
+  { -- | If there are more items to return, this contains a token that is passed
+    -- to a subsequent call to this operation to retrieve the next set of
+    -- items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of batch job definitions.
+    batchJobDefinitions :: [BatchJobDefinition]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBatchJobDefinitionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listBatchJobDefinitionsResponse_nextToken' - If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+--
+-- 'httpStatus', 'listBatchJobDefinitionsResponse_httpStatus' - The response's http status code.
+--
+-- 'batchJobDefinitions', 'listBatchJobDefinitionsResponse_batchJobDefinitions' - The list of batch job definitions.
+newListBatchJobDefinitionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBatchJobDefinitionsResponse
+newListBatchJobDefinitionsResponse pHttpStatus_ =
+  ListBatchJobDefinitionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      batchJobDefinitions = Prelude.mempty
+    }
+
+-- | If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+listBatchJobDefinitionsResponse_nextToken :: Lens.Lens' ListBatchJobDefinitionsResponse (Prelude.Maybe Prelude.Text)
+listBatchJobDefinitionsResponse_nextToken = Lens.lens (\ListBatchJobDefinitionsResponse' {nextToken} -> nextToken) (\s@ListBatchJobDefinitionsResponse' {} a -> s {nextToken = a} :: ListBatchJobDefinitionsResponse)
+
+-- | The response's http status code.
+listBatchJobDefinitionsResponse_httpStatus :: Lens.Lens' ListBatchJobDefinitionsResponse Prelude.Int
+listBatchJobDefinitionsResponse_httpStatus = Lens.lens (\ListBatchJobDefinitionsResponse' {httpStatus} -> httpStatus) (\s@ListBatchJobDefinitionsResponse' {} a -> s {httpStatus = a} :: ListBatchJobDefinitionsResponse)
+
+-- | The list of batch job definitions.
+listBatchJobDefinitionsResponse_batchJobDefinitions :: Lens.Lens' ListBatchJobDefinitionsResponse [BatchJobDefinition]
+listBatchJobDefinitionsResponse_batchJobDefinitions = Lens.lens (\ListBatchJobDefinitionsResponse' {batchJobDefinitions} -> batchJobDefinitions) (\s@ListBatchJobDefinitionsResponse' {} a -> s {batchJobDefinitions = a} :: ListBatchJobDefinitionsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListBatchJobDefinitionsResponse
+  where
+  rnf ListBatchJobDefinitionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf batchJobDefinitions
diff --git a/gen/Amazonka/M2/ListBatchJobExecutions.hs b/gen/Amazonka/M2/ListBatchJobExecutions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListBatchJobExecutions.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.ListBatchJobExecutions
+-- 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 historical, current, and scheduled batch job executions for a
+-- specific application.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListBatchJobExecutions
+  ( -- * Creating a Request
+    ListBatchJobExecutions (..),
+    newListBatchJobExecutions,
+
+    -- * Request Lenses
+    listBatchJobExecutions_executionIds,
+    listBatchJobExecutions_jobName,
+    listBatchJobExecutions_maxResults,
+    listBatchJobExecutions_nextToken,
+    listBatchJobExecutions_startedAfter,
+    listBatchJobExecutions_startedBefore,
+    listBatchJobExecutions_status,
+    listBatchJobExecutions_applicationId,
+
+    -- * Destructuring the Response
+    ListBatchJobExecutionsResponse (..),
+    newListBatchJobExecutionsResponse,
+
+    -- * Response Lenses
+    listBatchJobExecutionsResponse_nextToken,
+    listBatchJobExecutionsResponse_httpStatus,
+    listBatchJobExecutionsResponse_batchJobExecutions,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBatchJobExecutions' smart constructor.
+data ListBatchJobExecutions = ListBatchJobExecutions'
+  { -- | The unique identifier of each batch job execution.
+    executionIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of each batch job execution.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of batch job executions to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token to control the number of batch job executions
+    -- displayed in the list.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The time after which the batch job executions started.
+    startedAfter :: Prelude.Maybe Data.POSIX,
+    -- | The time before the batch job executions started.
+    startedBefore :: Prelude.Maybe Data.POSIX,
+    -- | The status of the batch job executions.
+    status :: Prelude.Maybe BatchJobExecutionStatus,
+    -- | The unique identifier of the application.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBatchJobExecutions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionIds', 'listBatchJobExecutions_executionIds' - The unique identifier of each batch job execution.
+--
+-- 'jobName', 'listBatchJobExecutions_jobName' - The name of each batch job execution.
+--
+-- 'maxResults', 'listBatchJobExecutions_maxResults' - The maximum number of batch job executions to return.
+--
+-- 'nextToken', 'listBatchJobExecutions_nextToken' - A pagination token to control the number of batch job executions
+-- displayed in the list.
+--
+-- 'startedAfter', 'listBatchJobExecutions_startedAfter' - The time after which the batch job executions started.
+--
+-- 'startedBefore', 'listBatchJobExecutions_startedBefore' - The time before the batch job executions started.
+--
+-- 'status', 'listBatchJobExecutions_status' - The status of the batch job executions.
+--
+-- 'applicationId', 'listBatchJobExecutions_applicationId' - The unique identifier of the application.
+newListBatchJobExecutions ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListBatchJobExecutions
+newListBatchJobExecutions pApplicationId_ =
+  ListBatchJobExecutions'
+    { executionIds =
+        Prelude.Nothing,
+      jobName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startedAfter = Prelude.Nothing,
+      startedBefore = Prelude.Nothing,
+      status = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The unique identifier of each batch job execution.
+listBatchJobExecutions_executionIds :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+listBatchJobExecutions_executionIds = Lens.lens (\ListBatchJobExecutions' {executionIds} -> executionIds) (\s@ListBatchJobExecutions' {} a -> s {executionIds = a} :: ListBatchJobExecutions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of each batch job execution.
+listBatchJobExecutions_jobName :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe Prelude.Text)
+listBatchJobExecutions_jobName = Lens.lens (\ListBatchJobExecutions' {jobName} -> jobName) (\s@ListBatchJobExecutions' {} a -> s {jobName = a} :: ListBatchJobExecutions)
+
+-- | The maximum number of batch job executions to return.
+listBatchJobExecutions_maxResults :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe Prelude.Natural)
+listBatchJobExecutions_maxResults = Lens.lens (\ListBatchJobExecutions' {maxResults} -> maxResults) (\s@ListBatchJobExecutions' {} a -> s {maxResults = a} :: ListBatchJobExecutions)
+
+-- | A pagination token to control the number of batch job executions
+-- displayed in the list.
+listBatchJobExecutions_nextToken :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe Prelude.Text)
+listBatchJobExecutions_nextToken = Lens.lens (\ListBatchJobExecutions' {nextToken} -> nextToken) (\s@ListBatchJobExecutions' {} a -> s {nextToken = a} :: ListBatchJobExecutions)
+
+-- | The time after which the batch job executions started.
+listBatchJobExecutions_startedAfter :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe Prelude.UTCTime)
+listBatchJobExecutions_startedAfter = Lens.lens (\ListBatchJobExecutions' {startedAfter} -> startedAfter) (\s@ListBatchJobExecutions' {} a -> s {startedAfter = a} :: ListBatchJobExecutions) Prelude.. Lens.mapping Data._Time
+
+-- | The time before the batch job executions started.
+listBatchJobExecutions_startedBefore :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe Prelude.UTCTime)
+listBatchJobExecutions_startedBefore = Lens.lens (\ListBatchJobExecutions' {startedBefore} -> startedBefore) (\s@ListBatchJobExecutions' {} a -> s {startedBefore = a} :: ListBatchJobExecutions) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the batch job executions.
+listBatchJobExecutions_status :: Lens.Lens' ListBatchJobExecutions (Prelude.Maybe BatchJobExecutionStatus)
+listBatchJobExecutions_status = Lens.lens (\ListBatchJobExecutions' {status} -> status) (\s@ListBatchJobExecutions' {} a -> s {status = a} :: ListBatchJobExecutions)
+
+-- | The unique identifier of the application.
+listBatchJobExecutions_applicationId :: Lens.Lens' ListBatchJobExecutions Prelude.Text
+listBatchJobExecutions_applicationId = Lens.lens (\ListBatchJobExecutions' {applicationId} -> applicationId) (\s@ListBatchJobExecutions' {} a -> s {applicationId = a} :: ListBatchJobExecutions)
+
+instance Core.AWSPager ListBatchJobExecutions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listBatchJobExecutionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listBatchJobExecutionsResponse_batchJobExecutions
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listBatchJobExecutions_nextToken
+          Lens..~ rs
+          Lens.^? listBatchJobExecutionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListBatchJobExecutions where
+  type
+    AWSResponse ListBatchJobExecutions =
+      ListBatchJobExecutionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBatchJobExecutionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "batchJobExecutions"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListBatchJobExecutions where
+  hashWithSalt _salt ListBatchJobExecutions' {..} =
+    _salt
+      `Prelude.hashWithSalt` executionIds
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startedAfter
+      `Prelude.hashWithSalt` startedBefore
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListBatchJobExecutions where
+  rnf ListBatchJobExecutions' {..} =
+    Prelude.rnf executionIds
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startedAfter
+      `Prelude.seq` Prelude.rnf startedBefore
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListBatchJobExecutions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListBatchJobExecutions where
+  toPath ListBatchJobExecutions' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/batch-job-executions"
+      ]
+
+instance Data.ToQuery ListBatchJobExecutions where
+  toQuery ListBatchJobExecutions' {..} =
+    Prelude.mconcat
+      [ "executionIds"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> executionIds),
+        "jobName" Data.=: jobName,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "startedAfter" Data.=: startedAfter,
+        "startedBefore" Data.=: startedBefore,
+        "status" Data.=: status
+      ]
+
+-- | /See:/ 'newListBatchJobExecutionsResponse' smart constructor.
+data ListBatchJobExecutionsResponse = ListBatchJobExecutionsResponse'
+  { -- | A pagination token that\'s returned when the response doesn\'t contain
+    -- all batch job executions.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Returns a list of batch job executions for an application.
+    batchJobExecutions :: [BatchJobExecutionSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBatchJobExecutionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listBatchJobExecutionsResponse_nextToken' - A pagination token that\'s returned when the response doesn\'t contain
+-- all batch job executions.
+--
+-- 'httpStatus', 'listBatchJobExecutionsResponse_httpStatus' - The response's http status code.
+--
+-- 'batchJobExecutions', 'listBatchJobExecutionsResponse_batchJobExecutions' - Returns a list of batch job executions for an application.
+newListBatchJobExecutionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBatchJobExecutionsResponse
+newListBatchJobExecutionsResponse pHttpStatus_ =
+  ListBatchJobExecutionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      batchJobExecutions = Prelude.mempty
+    }
+
+-- | A pagination token that\'s returned when the response doesn\'t contain
+-- all batch job executions.
+listBatchJobExecutionsResponse_nextToken :: Lens.Lens' ListBatchJobExecutionsResponse (Prelude.Maybe Prelude.Text)
+listBatchJobExecutionsResponse_nextToken = Lens.lens (\ListBatchJobExecutionsResponse' {nextToken} -> nextToken) (\s@ListBatchJobExecutionsResponse' {} a -> s {nextToken = a} :: ListBatchJobExecutionsResponse)
+
+-- | The response's http status code.
+listBatchJobExecutionsResponse_httpStatus :: Lens.Lens' ListBatchJobExecutionsResponse Prelude.Int
+listBatchJobExecutionsResponse_httpStatus = Lens.lens (\ListBatchJobExecutionsResponse' {httpStatus} -> httpStatus) (\s@ListBatchJobExecutionsResponse' {} a -> s {httpStatus = a} :: ListBatchJobExecutionsResponse)
+
+-- | Returns a list of batch job executions for an application.
+listBatchJobExecutionsResponse_batchJobExecutions :: Lens.Lens' ListBatchJobExecutionsResponse [BatchJobExecutionSummary]
+listBatchJobExecutionsResponse_batchJobExecutions = Lens.lens (\ListBatchJobExecutionsResponse' {batchJobExecutions} -> batchJobExecutions) (\s@ListBatchJobExecutionsResponse' {} a -> s {batchJobExecutions = a} :: ListBatchJobExecutionsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListBatchJobExecutionsResponse
+  where
+  rnf ListBatchJobExecutionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf batchJobExecutions
diff --git a/gen/Amazonka/M2/ListDataSetImportHistory.hs b/gen/Amazonka/M2/ListDataSetImportHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListDataSetImportHistory.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.ListDataSetImportHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the data set imports for the specified application.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListDataSetImportHistory
+  ( -- * Creating a Request
+    ListDataSetImportHistory (..),
+    newListDataSetImportHistory,
+
+    -- * Request Lenses
+    listDataSetImportHistory_maxResults,
+    listDataSetImportHistory_nextToken,
+    listDataSetImportHistory_applicationId,
+
+    -- * Destructuring the Response
+    ListDataSetImportHistoryResponse (..),
+    newListDataSetImportHistoryResponse,
+
+    -- * Response Lenses
+    listDataSetImportHistoryResponse_nextToken,
+    listDataSetImportHistoryResponse_httpStatus,
+    listDataSetImportHistoryResponse_dataSetImportTasks,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDataSetImportHistory' smart constructor.
+data ListDataSetImportHistory = ListDataSetImportHistory'
+  { -- | The maximum number of objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token returned from a previous call to this operation. This
+    -- specifies the next item to return. To return to the beginning of the
+    -- list, exclude this parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the application.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSetImportHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSetImportHistory_maxResults' - The maximum number of objects to return.
+--
+-- 'nextToken', 'listDataSetImportHistory_nextToken' - A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+--
+-- 'applicationId', 'listDataSetImportHistory_applicationId' - The unique identifier of the application.
+newListDataSetImportHistory ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListDataSetImportHistory
+newListDataSetImportHistory pApplicationId_ =
+  ListDataSetImportHistory'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of objects to return.
+listDataSetImportHistory_maxResults :: Lens.Lens' ListDataSetImportHistory (Prelude.Maybe Prelude.Natural)
+listDataSetImportHistory_maxResults = Lens.lens (\ListDataSetImportHistory' {maxResults} -> maxResults) (\s@ListDataSetImportHistory' {} a -> s {maxResults = a} :: ListDataSetImportHistory)
+
+-- | A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+listDataSetImportHistory_nextToken :: Lens.Lens' ListDataSetImportHistory (Prelude.Maybe Prelude.Text)
+listDataSetImportHistory_nextToken = Lens.lens (\ListDataSetImportHistory' {nextToken} -> nextToken) (\s@ListDataSetImportHistory' {} a -> s {nextToken = a} :: ListDataSetImportHistory)
+
+-- | The unique identifier of the application.
+listDataSetImportHistory_applicationId :: Lens.Lens' ListDataSetImportHistory Prelude.Text
+listDataSetImportHistory_applicationId = Lens.lens (\ListDataSetImportHistory' {applicationId} -> applicationId) (\s@ListDataSetImportHistory' {} a -> s {applicationId = a} :: ListDataSetImportHistory)
+
+instance Core.AWSPager ListDataSetImportHistory where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDataSetImportHistoryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listDataSetImportHistoryResponse_dataSetImportTasks
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDataSetImportHistory_nextToken
+          Lens..~ rs
+          Lens.^? listDataSetImportHistoryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDataSetImportHistory where
+  type
+    AWSResponse ListDataSetImportHistory =
+      ListDataSetImportHistoryResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataSetImportHistoryResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "dataSetImportTasks"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListDataSetImportHistory where
+  hashWithSalt _salt ListDataSetImportHistory' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListDataSetImportHistory where
+  rnf ListDataSetImportHistory' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListDataSetImportHistory where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDataSetImportHistory where
+  toPath ListDataSetImportHistory' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/dataset-import-tasks"
+      ]
+
+instance Data.ToQuery ListDataSetImportHistory where
+  toQuery ListDataSetImportHistory' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDataSetImportHistoryResponse' smart constructor.
+data ListDataSetImportHistoryResponse = ListDataSetImportHistoryResponse'
+  { -- | If there are more items to return, this contains a token that is passed
+    -- to a subsequent call to this operation to retrieve the next set of
+    -- items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The data set import tasks.
+    dataSetImportTasks :: [DataSetImportTask]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSetImportHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listDataSetImportHistoryResponse_nextToken' - If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+--
+-- 'httpStatus', 'listDataSetImportHistoryResponse_httpStatus' - The response's http status code.
+--
+-- 'dataSetImportTasks', 'listDataSetImportHistoryResponse_dataSetImportTasks' - The data set import tasks.
+newListDataSetImportHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataSetImportHistoryResponse
+newListDataSetImportHistoryResponse pHttpStatus_ =
+  ListDataSetImportHistoryResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      dataSetImportTasks = Prelude.mempty
+    }
+
+-- | If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+listDataSetImportHistoryResponse_nextToken :: Lens.Lens' ListDataSetImportHistoryResponse (Prelude.Maybe Prelude.Text)
+listDataSetImportHistoryResponse_nextToken = Lens.lens (\ListDataSetImportHistoryResponse' {nextToken} -> nextToken) (\s@ListDataSetImportHistoryResponse' {} a -> s {nextToken = a} :: ListDataSetImportHistoryResponse)
+
+-- | The response's http status code.
+listDataSetImportHistoryResponse_httpStatus :: Lens.Lens' ListDataSetImportHistoryResponse Prelude.Int
+listDataSetImportHistoryResponse_httpStatus = Lens.lens (\ListDataSetImportHistoryResponse' {httpStatus} -> httpStatus) (\s@ListDataSetImportHistoryResponse' {} a -> s {httpStatus = a} :: ListDataSetImportHistoryResponse)
+
+-- | The data set import tasks.
+listDataSetImportHistoryResponse_dataSetImportTasks :: Lens.Lens' ListDataSetImportHistoryResponse [DataSetImportTask]
+listDataSetImportHistoryResponse_dataSetImportTasks = Lens.lens (\ListDataSetImportHistoryResponse' {dataSetImportTasks} -> dataSetImportTasks) (\s@ListDataSetImportHistoryResponse' {} a -> s {dataSetImportTasks = a} :: ListDataSetImportHistoryResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListDataSetImportHistoryResponse
+  where
+  rnf ListDataSetImportHistoryResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dataSetImportTasks
diff --git a/gen/Amazonka/M2/ListDataSets.hs b/gen/Amazonka/M2/ListDataSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListDataSets.hs
@@ -0,0 +1,266 @@
+{-# 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.M2.ListDataSets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the data sets imported for a specific application. In Amazon Web
+-- Services Mainframe Modernization, data sets are associated with
+-- applications deployed on runtime environments. This is known as
+-- importing data sets. Currently, Amazon Web Services Mainframe
+-- Modernization can import data sets into catalogs using
+-- <https://docs.aws.amazon.com/m2/latest/APIReference/API_CreateDataSetImportTask.html CreateDataSetImportTask>.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListDataSets
+  ( -- * Creating a Request
+    ListDataSets (..),
+    newListDataSets,
+
+    -- * Request Lenses
+    listDataSets_maxResults,
+    listDataSets_nextToken,
+    listDataSets_prefix,
+    listDataSets_applicationId,
+
+    -- * Destructuring the Response
+    ListDataSetsResponse (..),
+    newListDataSetsResponse,
+
+    -- * Response Lenses
+    listDataSetsResponse_nextToken,
+    listDataSetsResponse_httpStatus,
+    listDataSetsResponse_dataSets,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDataSets' smart constructor.
+data ListDataSets = ListDataSets'
+  { -- | The maximum number of objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token returned from a previous call to this operation. This
+    -- specifies the next item to return. To return to the beginning of the
+    -- list, exclude this parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The prefix of the data set name, which you can use to filter the list of
+    -- data sets.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the application for which you want to list the
+    -- associated data sets.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSets_maxResults' - The maximum number of objects to return.
+--
+-- 'nextToken', 'listDataSets_nextToken' - A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+--
+-- 'prefix', 'listDataSets_prefix' - The prefix of the data set name, which you can use to filter the list of
+-- data sets.
+--
+-- 'applicationId', 'listDataSets_applicationId' - The unique identifier of the application for which you want to list the
+-- associated data sets.
+newListDataSets ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListDataSets
+newListDataSets pApplicationId_ =
+  ListDataSets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of objects to return.
+listDataSets_maxResults :: Lens.Lens' ListDataSets (Prelude.Maybe Prelude.Natural)
+listDataSets_maxResults = Lens.lens (\ListDataSets' {maxResults} -> maxResults) (\s@ListDataSets' {} a -> s {maxResults = a} :: ListDataSets)
+
+-- | A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+listDataSets_nextToken :: Lens.Lens' ListDataSets (Prelude.Maybe Prelude.Text)
+listDataSets_nextToken = Lens.lens (\ListDataSets' {nextToken} -> nextToken) (\s@ListDataSets' {} a -> s {nextToken = a} :: ListDataSets)
+
+-- | The prefix of the data set name, which you can use to filter the list of
+-- data sets.
+listDataSets_prefix :: Lens.Lens' ListDataSets (Prelude.Maybe Prelude.Text)
+listDataSets_prefix = Lens.lens (\ListDataSets' {prefix} -> prefix) (\s@ListDataSets' {} a -> s {prefix = a} :: ListDataSets)
+
+-- | The unique identifier of the application for which you want to list the
+-- associated data sets.
+listDataSets_applicationId :: Lens.Lens' ListDataSets Prelude.Text
+listDataSets_applicationId = Lens.lens (\ListDataSets' {applicationId} -> applicationId) (\s@ListDataSets' {} a -> s {applicationId = a} :: ListDataSets)
+
+instance Core.AWSPager ListDataSets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDataSetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listDataSetsResponse_dataSets) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDataSets_nextToken
+          Lens..~ rs
+          Lens.^? listDataSetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDataSets where
+  type AWSResponse ListDataSets = ListDataSetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataSetsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "dataSets" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListDataSets where
+  hashWithSalt _salt ListDataSets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` prefix
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListDataSets where
+  rnf ListDataSets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListDataSets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDataSets where
+  toPath ListDataSets' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/datasets"
+      ]
+
+instance Data.ToQuery ListDataSets where
+  toQuery ListDataSets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "prefix" Data.=: prefix
+      ]
+
+-- | /See:/ 'newListDataSetsResponse' smart constructor.
+data ListDataSetsResponse = ListDataSetsResponse'
+  { -- | If there are more items to return, this contains a token that is passed
+    -- to a subsequent call to this operation to retrieve the next set of
+    -- items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of data sets, containing information including the creation
+    -- time, the data set name, the data set organization, the data set format,
+    -- and the last time the data set was referenced or updated.
+    dataSets :: [DataSetSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listDataSetsResponse_nextToken' - If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+--
+-- 'httpStatus', 'listDataSetsResponse_httpStatus' - The response's http status code.
+--
+-- 'dataSets', 'listDataSetsResponse_dataSets' - The list of data sets, containing information including the creation
+-- time, the data set name, the data set organization, the data set format,
+-- and the last time the data set was referenced or updated.
+newListDataSetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataSetsResponse
+newListDataSetsResponse pHttpStatus_ =
+  ListDataSetsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      dataSets = Prelude.mempty
+    }
+
+-- | If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+listDataSetsResponse_nextToken :: Lens.Lens' ListDataSetsResponse (Prelude.Maybe Prelude.Text)
+listDataSetsResponse_nextToken = Lens.lens (\ListDataSetsResponse' {nextToken} -> nextToken) (\s@ListDataSetsResponse' {} a -> s {nextToken = a} :: ListDataSetsResponse)
+
+-- | The response's http status code.
+listDataSetsResponse_httpStatus :: Lens.Lens' ListDataSetsResponse Prelude.Int
+listDataSetsResponse_httpStatus = Lens.lens (\ListDataSetsResponse' {httpStatus} -> httpStatus) (\s@ListDataSetsResponse' {} a -> s {httpStatus = a} :: ListDataSetsResponse)
+
+-- | The list of data sets, containing information including the creation
+-- time, the data set name, the data set organization, the data set format,
+-- and the last time the data set was referenced or updated.
+listDataSetsResponse_dataSets :: Lens.Lens' ListDataSetsResponse [DataSetSummary]
+listDataSetsResponse_dataSets = Lens.lens (\ListDataSetsResponse' {dataSets} -> dataSets) (\s@ListDataSetsResponse' {} a -> s {dataSets = a} :: ListDataSetsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListDataSetsResponse where
+  rnf ListDataSetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf dataSets
diff --git a/gen/Amazonka/M2/ListDeployments.hs b/gen/Amazonka/M2/ListDeployments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListDeployments.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.ListDeployments
+-- 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 all deployments of a specific application. A
+-- deployment is a combination of a specific application and a specific
+-- version of that application. Each deployment is mapped to a particular
+-- application version.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListDeployments
+  ( -- * Creating a Request
+    ListDeployments (..),
+    newListDeployments,
+
+    -- * Request Lenses
+    listDeployments_maxResults,
+    listDeployments_nextToken,
+    listDeployments_applicationId,
+
+    -- * Destructuring the Response
+    ListDeploymentsResponse (..),
+    newListDeploymentsResponse,
+
+    -- * Response Lenses
+    listDeploymentsResponse_nextToken,
+    listDeploymentsResponse_httpStatus,
+    listDeploymentsResponse_deployments,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDeployments' smart constructor.
+data ListDeployments = ListDeployments'
+  { -- | The maximum number of objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token returned from a previous call to this operation. This
+    -- specifies the next item to return. To return to the beginning of the
+    -- list, exclude this parameter.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The application identifier.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeployments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDeployments_maxResults' - The maximum number of objects to return.
+--
+-- 'nextToken', 'listDeployments_nextToken' - A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+--
+-- 'applicationId', 'listDeployments_applicationId' - The application identifier.
+newListDeployments ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListDeployments
+newListDeployments pApplicationId_ =
+  ListDeployments'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The maximum number of objects to return.
+listDeployments_maxResults :: Lens.Lens' ListDeployments (Prelude.Maybe Prelude.Natural)
+listDeployments_maxResults = Lens.lens (\ListDeployments' {maxResults} -> maxResults) (\s@ListDeployments' {} a -> s {maxResults = a} :: ListDeployments)
+
+-- | A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+listDeployments_nextToken :: Lens.Lens' ListDeployments (Prelude.Maybe Prelude.Text)
+listDeployments_nextToken = Lens.lens (\ListDeployments' {nextToken} -> nextToken) (\s@ListDeployments' {} a -> s {nextToken = a} :: ListDeployments)
+
+-- | The application identifier.
+listDeployments_applicationId :: Lens.Lens' ListDeployments Prelude.Text
+listDeployments_applicationId = Lens.lens (\ListDeployments' {applicationId} -> applicationId) (\s@ListDeployments' {} a -> s {applicationId = a} :: ListDeployments)
+
+instance Core.AWSPager ListDeployments where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDeploymentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listDeploymentsResponse_deployments) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDeployments_nextToken
+          Lens..~ rs
+          Lens.^? listDeploymentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDeployments where
+  type
+    AWSResponse ListDeployments =
+      ListDeploymentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDeploymentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "deployments" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListDeployments where
+  hashWithSalt _salt ListDeployments' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListDeployments where
+  rnf ListDeployments' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListDeployments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDeployments where
+  toPath ListDeployments' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/deployments"
+      ]
+
+instance Data.ToQuery ListDeployments where
+  toQuery ListDeployments' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDeploymentsResponse' smart constructor.
+data ListDeploymentsResponse = ListDeploymentsResponse'
+  { -- | If there are more items to return, this contains a token that is passed
+    -- to a subsequent call to this operation to retrieve the next set of
+    -- items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of deployments that is returned.
+    deployments :: [DeploymentSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeploymentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listDeploymentsResponse_nextToken' - If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+--
+-- 'httpStatus', 'listDeploymentsResponse_httpStatus' - The response's http status code.
+--
+-- 'deployments', 'listDeploymentsResponse_deployments' - The list of deployments that is returned.
+newListDeploymentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDeploymentsResponse
+newListDeploymentsResponse pHttpStatus_ =
+  ListDeploymentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      deployments = Prelude.mempty
+    }
+
+-- | If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+listDeploymentsResponse_nextToken :: Lens.Lens' ListDeploymentsResponse (Prelude.Maybe Prelude.Text)
+listDeploymentsResponse_nextToken = Lens.lens (\ListDeploymentsResponse' {nextToken} -> nextToken) (\s@ListDeploymentsResponse' {} a -> s {nextToken = a} :: ListDeploymentsResponse)
+
+-- | The response's http status code.
+listDeploymentsResponse_httpStatus :: Lens.Lens' ListDeploymentsResponse Prelude.Int
+listDeploymentsResponse_httpStatus = Lens.lens (\ListDeploymentsResponse' {httpStatus} -> httpStatus) (\s@ListDeploymentsResponse' {} a -> s {httpStatus = a} :: ListDeploymentsResponse)
+
+-- | The list of deployments that is returned.
+listDeploymentsResponse_deployments :: Lens.Lens' ListDeploymentsResponse [DeploymentSummary]
+listDeploymentsResponse_deployments = Lens.lens (\ListDeploymentsResponse' {deployments} -> deployments) (\s@ListDeploymentsResponse' {} a -> s {deployments = a} :: ListDeploymentsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListDeploymentsResponse where
+  rnf ListDeploymentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf deployments
diff --git a/gen/Amazonka/M2/ListEngineVersions.hs b/gen/Amazonka/M2/ListEngineVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListEngineVersions.hs
@@ -0,0 +1,238 @@
+{-# 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.M2.ListEngineVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the available engine versions.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListEngineVersions
+  ( -- * Creating a Request
+    ListEngineVersions (..),
+    newListEngineVersions,
+
+    -- * Request Lenses
+    listEngineVersions_engineType,
+    listEngineVersions_maxResults,
+    listEngineVersions_nextToken,
+
+    -- * Destructuring the Response
+    ListEngineVersionsResponse (..),
+    newListEngineVersionsResponse,
+
+    -- * Response Lenses
+    listEngineVersionsResponse_nextToken,
+    listEngineVersionsResponse_httpStatus,
+    listEngineVersionsResponse_engineVersions,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEngineVersions' smart constructor.
+data ListEngineVersions = ListEngineVersions'
+  { -- | The type of target platform.
+    engineType :: Prelude.Maybe EngineType,
+    -- | The maximum number of objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token returned from a previous call to this operation. This
+    -- specifies the next item to return. To return to the beginning of the
+    -- list, exclude this parameter.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEngineVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'engineType', 'listEngineVersions_engineType' - The type of target platform.
+--
+-- 'maxResults', 'listEngineVersions_maxResults' - The maximum number of objects to return.
+--
+-- 'nextToken', 'listEngineVersions_nextToken' - A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+newListEngineVersions ::
+  ListEngineVersions
+newListEngineVersions =
+  ListEngineVersions'
+    { engineType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The type of target platform.
+listEngineVersions_engineType :: Lens.Lens' ListEngineVersions (Prelude.Maybe EngineType)
+listEngineVersions_engineType = Lens.lens (\ListEngineVersions' {engineType} -> engineType) (\s@ListEngineVersions' {} a -> s {engineType = a} :: ListEngineVersions)
+
+-- | The maximum number of objects to return.
+listEngineVersions_maxResults :: Lens.Lens' ListEngineVersions (Prelude.Maybe Prelude.Natural)
+listEngineVersions_maxResults = Lens.lens (\ListEngineVersions' {maxResults} -> maxResults) (\s@ListEngineVersions' {} a -> s {maxResults = a} :: ListEngineVersions)
+
+-- | A pagination token returned from a previous call to this operation. This
+-- specifies the next item to return. To return to the beginning of the
+-- list, exclude this parameter.
+listEngineVersions_nextToken :: Lens.Lens' ListEngineVersions (Prelude.Maybe Prelude.Text)
+listEngineVersions_nextToken = Lens.lens (\ListEngineVersions' {nextToken} -> nextToken) (\s@ListEngineVersions' {} a -> s {nextToken = a} :: ListEngineVersions)
+
+instance Core.AWSPager ListEngineVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEngineVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listEngineVersionsResponse_engineVersions
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEngineVersions_nextToken
+          Lens..~ rs
+          Lens.^? listEngineVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEngineVersions where
+  type
+    AWSResponse ListEngineVersions =
+      ListEngineVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEngineVersionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "engineVersions"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListEngineVersions where
+  hashWithSalt _salt ListEngineVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEngineVersions where
+  rnf ListEngineVersions' {..} =
+    Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEngineVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEngineVersions where
+  toPath = Prelude.const "/engine-versions"
+
+instance Data.ToQuery ListEngineVersions where
+  toQuery ListEngineVersions' {..} =
+    Prelude.mconcat
+      [ "engineType" Data.=: engineType,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEngineVersionsResponse' smart constructor.
+data ListEngineVersionsResponse = ListEngineVersionsResponse'
+  { -- | If there are more items to return, this contains a token that is passed
+    -- to a subsequent call to this operation to retrieve the next set of
+    -- items.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Returns the engine versions.
+    engineVersions :: [EngineVersionsSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEngineVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listEngineVersionsResponse_nextToken' - If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+--
+-- 'httpStatus', 'listEngineVersionsResponse_httpStatus' - The response's http status code.
+--
+-- 'engineVersions', 'listEngineVersionsResponse_engineVersions' - Returns the engine versions.
+newListEngineVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEngineVersionsResponse
+newListEngineVersionsResponse pHttpStatus_ =
+  ListEngineVersionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      engineVersions = Prelude.mempty
+    }
+
+-- | If there are more items to return, this contains a token that is passed
+-- to a subsequent call to this operation to retrieve the next set of
+-- items.
+listEngineVersionsResponse_nextToken :: Lens.Lens' ListEngineVersionsResponse (Prelude.Maybe Prelude.Text)
+listEngineVersionsResponse_nextToken = Lens.lens (\ListEngineVersionsResponse' {nextToken} -> nextToken) (\s@ListEngineVersionsResponse' {} a -> s {nextToken = a} :: ListEngineVersionsResponse)
+
+-- | The response's http status code.
+listEngineVersionsResponse_httpStatus :: Lens.Lens' ListEngineVersionsResponse Prelude.Int
+listEngineVersionsResponse_httpStatus = Lens.lens (\ListEngineVersionsResponse' {httpStatus} -> httpStatus) (\s@ListEngineVersionsResponse' {} a -> s {httpStatus = a} :: ListEngineVersionsResponse)
+
+-- | Returns the engine versions.
+listEngineVersionsResponse_engineVersions :: Lens.Lens' ListEngineVersionsResponse [EngineVersionsSummary]
+listEngineVersionsResponse_engineVersions = Lens.lens (\ListEngineVersionsResponse' {engineVersions} -> engineVersions) (\s@ListEngineVersionsResponse' {} a -> s {engineVersions = a} :: ListEngineVersionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListEngineVersionsResponse where
+  rnf ListEngineVersionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf engineVersions
diff --git a/gen/Amazonka/M2/ListEnvironments.hs b/gen/Amazonka/M2/ListEnvironments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/ListEnvironments.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.ListEnvironments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the runtime environments.
+--
+-- This operation returns paginated results.
+module Amazonka.M2.ListEnvironments
+  ( -- * Creating a Request
+    ListEnvironments (..),
+    newListEnvironments,
+
+    -- * Request Lenses
+    listEnvironments_engineType,
+    listEnvironments_maxResults,
+    listEnvironments_names,
+    listEnvironments_nextToken,
+
+    -- * Destructuring the Response
+    ListEnvironmentsResponse (..),
+    newListEnvironmentsResponse,
+
+    -- * Response Lenses
+    listEnvironmentsResponse_nextToken,
+    listEnvironmentsResponse_httpStatus,
+    listEnvironmentsResponse_environments,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEnvironments' smart constructor.
+data ListEnvironments = ListEnvironments'
+  { -- | The engine type for the runtime environment.
+    engineType :: Prelude.Maybe EngineType,
+    -- | The maximum number of runtime environments to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The names of the runtime environments. Must be unique within the
+    -- account.
+    names :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A pagination token to control the number of runtime environments
+    -- displayed in the list.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEnvironments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'engineType', 'listEnvironments_engineType' - The engine type for the runtime environment.
+--
+-- 'maxResults', 'listEnvironments_maxResults' - The maximum number of runtime environments to return.
+--
+-- 'names', 'listEnvironments_names' - The names of the runtime environments. Must be unique within the
+-- account.
+--
+-- 'nextToken', 'listEnvironments_nextToken' - A pagination token to control the number of runtime environments
+-- displayed in the list.
+newListEnvironments ::
+  ListEnvironments
+newListEnvironments =
+  ListEnvironments'
+    { engineType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      names = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The engine type for the runtime environment.
+listEnvironments_engineType :: Lens.Lens' ListEnvironments (Prelude.Maybe EngineType)
+listEnvironments_engineType = Lens.lens (\ListEnvironments' {engineType} -> engineType) (\s@ListEnvironments' {} a -> s {engineType = a} :: ListEnvironments)
+
+-- | The maximum number of runtime environments to return.
+listEnvironments_maxResults :: Lens.Lens' ListEnvironments (Prelude.Maybe Prelude.Natural)
+listEnvironments_maxResults = Lens.lens (\ListEnvironments' {maxResults} -> maxResults) (\s@ListEnvironments' {} a -> s {maxResults = a} :: ListEnvironments)
+
+-- | The names of the runtime environments. Must be unique within the
+-- account.
+listEnvironments_names :: Lens.Lens' ListEnvironments (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+listEnvironments_names = Lens.lens (\ListEnvironments' {names} -> names) (\s@ListEnvironments' {} a -> s {names = a} :: ListEnvironments) Prelude.. Lens.mapping Lens.coerced
+
+-- | A pagination token to control the number of runtime environments
+-- displayed in the list.
+listEnvironments_nextToken :: Lens.Lens' ListEnvironments (Prelude.Maybe Prelude.Text)
+listEnvironments_nextToken = Lens.lens (\ListEnvironments' {nextToken} -> nextToken) (\s@ListEnvironments' {} a -> s {nextToken = a} :: ListEnvironments)
+
+instance Core.AWSPager ListEnvironments where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEnvironmentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listEnvironmentsResponse_environments) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEnvironments_nextToken
+          Lens..~ rs
+          Lens.^? listEnvironmentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEnvironments where
+  type
+    AWSResponse ListEnvironments =
+      ListEnvironmentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEnvironmentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "environments" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListEnvironments where
+  hashWithSalt _salt ListEnvironments' {..} =
+    _salt
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` names
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEnvironments where
+  rnf ListEnvironments' {..} =
+    Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEnvironments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEnvironments where
+  toPath = Prelude.const "/environments"
+
+instance Data.ToQuery ListEnvironments where
+  toQuery ListEnvironments' {..} =
+    Prelude.mconcat
+      [ "engineType" Data.=: engineType,
+        "maxResults" Data.=: maxResults,
+        "names"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> names),
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEnvironmentsResponse' smart constructor.
+data ListEnvironmentsResponse = ListEnvironmentsResponse'
+  { -- | A pagination token that\'s returned when the response doesn\'t contain
+    -- all the runtime environments.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Returns a list of summary details for all the runtime environments in
+    -- your account.
+    environments :: [EnvironmentSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEnvironmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listEnvironmentsResponse_nextToken' - A pagination token that\'s returned when the response doesn\'t contain
+-- all the runtime environments.
+--
+-- 'httpStatus', 'listEnvironmentsResponse_httpStatus' - The response's http status code.
+--
+-- 'environments', 'listEnvironmentsResponse_environments' - Returns a list of summary details for all the runtime environments in
+-- your account.
+newListEnvironmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEnvironmentsResponse
+newListEnvironmentsResponse pHttpStatus_ =
+  ListEnvironmentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      environments = Prelude.mempty
+    }
+
+-- | A pagination token that\'s returned when the response doesn\'t contain
+-- all the runtime environments.
+listEnvironmentsResponse_nextToken :: Lens.Lens' ListEnvironmentsResponse (Prelude.Maybe Prelude.Text)
+listEnvironmentsResponse_nextToken = Lens.lens (\ListEnvironmentsResponse' {nextToken} -> nextToken) (\s@ListEnvironmentsResponse' {} a -> s {nextToken = a} :: ListEnvironmentsResponse)
+
+-- | The response's http status code.
+listEnvironmentsResponse_httpStatus :: Lens.Lens' ListEnvironmentsResponse Prelude.Int
+listEnvironmentsResponse_httpStatus = Lens.lens (\ListEnvironmentsResponse' {httpStatus} -> httpStatus) (\s@ListEnvironmentsResponse' {} a -> s {httpStatus = a} :: ListEnvironmentsResponse)
+
+-- | Returns a list of summary details for all the runtime environments in
+-- your account.
+listEnvironmentsResponse_environments :: Lens.Lens' ListEnvironmentsResponse [EnvironmentSummary]
+listEnvironmentsResponse_environments = Lens.lens (\ListEnvironmentsResponse' {environments} -> environments) (\s@ListEnvironmentsResponse' {} a -> s {environments = a} :: ListEnvironmentsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListEnvironmentsResponse where
+  rnf ListEnvironmentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf environments
diff --git a/gen/Amazonka/M2/ListTagsForResource.hs b/gen/Amazonka/M2/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/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.M2.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for the specified resource.
+module Amazonka.M2.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_httpStatus,
+    listTagsForResourceResponse_tags,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource.
+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.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The tags for the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, 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:
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags for the resource.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { httpStatus =
+        pHttpStatus_,
+      tags = Prelude.mempty
+    }
+
+-- | 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)
+
+-- | The tags for the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.HashMap Prelude.Text Prelude.Text)
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/M2/StartApplication.hs b/gen/Amazonka/M2/StartApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/StartApplication.hs
@@ -0,0 +1,150 @@
+{-# 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.M2.StartApplication
+-- 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 an application that is currently stopped.
+module Amazonka.M2.StartApplication
+  ( -- * Creating a Request
+    StartApplication (..),
+    newStartApplication,
+
+    -- * Request Lenses
+    startApplication_applicationId,
+
+    -- * Destructuring the Response
+    StartApplicationResponse (..),
+    newStartApplicationResponse,
+
+    -- * Response Lenses
+    startApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartApplication' smart constructor.
+data StartApplication = StartApplication'
+  { -- | The unique identifier of the application you want to start.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startApplication_applicationId' - The unique identifier of the application you want to start.
+newStartApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  StartApplication
+newStartApplication pApplicationId_ =
+  StartApplication' {applicationId = pApplicationId_}
+
+-- | The unique identifier of the application you want to start.
+startApplication_applicationId :: Lens.Lens' StartApplication Prelude.Text
+startApplication_applicationId = Lens.lens (\StartApplication' {applicationId} -> applicationId) (\s@StartApplication' {} a -> s {applicationId = a} :: StartApplication)
+
+instance Core.AWSRequest StartApplication where
+  type
+    AWSResponse StartApplication =
+      StartApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartApplication where
+  hashWithSalt _salt StartApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData StartApplication where
+  rnf StartApplication' {..} = Prelude.rnf applicationId
+
+instance Data.ToHeaders StartApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartApplication where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartApplication where
+  toPath StartApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId, "/start"]
+
+instance Data.ToQuery StartApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartApplicationResponse' smart constructor.
+data StartApplicationResponse = StartApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startApplicationResponse_httpStatus' - The response's http status code.
+newStartApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartApplicationResponse
+newStartApplicationResponse pHttpStatus_ =
+  StartApplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+startApplicationResponse_httpStatus :: Lens.Lens' StartApplicationResponse Prelude.Int
+startApplicationResponse_httpStatus = Lens.lens (\StartApplicationResponse' {httpStatus} -> httpStatus) (\s@StartApplicationResponse' {} a -> s {httpStatus = a} :: StartApplicationResponse)
+
+instance Prelude.NFData StartApplicationResponse where
+  rnf StartApplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/StartBatchJob.hs b/gen/Amazonka/M2/StartBatchJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/StartBatchJob.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.StartBatchJob
+-- 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 batch job and returns the unique identifier of this execution
+-- of the batch job. The associated application must be running in order to
+-- start the batch job.
+module Amazonka.M2.StartBatchJob
+  ( -- * Creating a Request
+    StartBatchJob (..),
+    newStartBatchJob,
+
+    -- * Request Lenses
+    startBatchJob_jobParams,
+    startBatchJob_applicationId,
+    startBatchJob_batchJobIdentifier,
+
+    -- * Destructuring the Response
+    StartBatchJobResponse (..),
+    newStartBatchJobResponse,
+
+    -- * Response Lenses
+    startBatchJobResponse_httpStatus,
+    startBatchJobResponse_executionId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartBatchJob' smart constructor.
+data StartBatchJob = StartBatchJob'
+  { -- | The collection of batch job parameters. For details about limits for
+    -- keys and values, see
+    -- <https://www.ibm.com/docs/en/workload-automation/9.3.0?topic=zos-coding-variables-in-jcl Coding variables in JCL>.
+    jobParams :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique identifier of the application associated with this batch job.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier of the batch job.
+    batchJobIdentifier :: BatchJobIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBatchJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobParams', 'startBatchJob_jobParams' - The collection of batch job parameters. For details about limits for
+-- keys and values, see
+-- <https://www.ibm.com/docs/en/workload-automation/9.3.0?topic=zos-coding-variables-in-jcl Coding variables in JCL>.
+--
+-- 'applicationId', 'startBatchJob_applicationId' - The unique identifier of the application associated with this batch job.
+--
+-- 'batchJobIdentifier', 'startBatchJob_batchJobIdentifier' - The unique identifier of the batch job.
+newStartBatchJob ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'batchJobIdentifier'
+  BatchJobIdentifier ->
+  StartBatchJob
+newStartBatchJob pApplicationId_ pBatchJobIdentifier_ =
+  StartBatchJob'
+    { jobParams = Prelude.Nothing,
+      applicationId = pApplicationId_,
+      batchJobIdentifier = pBatchJobIdentifier_
+    }
+
+-- | The collection of batch job parameters. For details about limits for
+-- keys and values, see
+-- <https://www.ibm.com/docs/en/workload-automation/9.3.0?topic=zos-coding-variables-in-jcl Coding variables in JCL>.
+startBatchJob_jobParams :: Lens.Lens' StartBatchJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startBatchJob_jobParams = Lens.lens (\StartBatchJob' {jobParams} -> jobParams) (\s@StartBatchJob' {} a -> s {jobParams = a} :: StartBatchJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the application associated with this batch job.
+startBatchJob_applicationId :: Lens.Lens' StartBatchJob Prelude.Text
+startBatchJob_applicationId = Lens.lens (\StartBatchJob' {applicationId} -> applicationId) (\s@StartBatchJob' {} a -> s {applicationId = a} :: StartBatchJob)
+
+-- | The unique identifier of the batch job.
+startBatchJob_batchJobIdentifier :: Lens.Lens' StartBatchJob BatchJobIdentifier
+startBatchJob_batchJobIdentifier = Lens.lens (\StartBatchJob' {batchJobIdentifier} -> batchJobIdentifier) (\s@StartBatchJob' {} a -> s {batchJobIdentifier = a} :: StartBatchJob)
+
+instance Core.AWSRequest StartBatchJob where
+  type
+    AWSResponse StartBatchJob =
+      StartBatchJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartBatchJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "executionId")
+      )
+
+instance Prelude.Hashable StartBatchJob where
+  hashWithSalt _salt StartBatchJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobParams
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` batchJobIdentifier
+
+instance Prelude.NFData StartBatchJob where
+  rnf StartBatchJob' {..} =
+    Prelude.rnf jobParams
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf batchJobIdentifier
+
+instance Data.ToHeaders StartBatchJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartBatchJob where
+  toJSON StartBatchJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("jobParams" Data..=) Prelude.<$> jobParams,
+            Prelude.Just
+              ("batchJobIdentifier" Data..= batchJobIdentifier)
+          ]
+      )
+
+instance Data.ToPath StartBatchJob where
+  toPath StartBatchJob' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/batch-job"
+      ]
+
+instance Data.ToQuery StartBatchJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartBatchJobResponse' smart constructor.
+data StartBatchJobResponse = StartBatchJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of this execution of the batch job.
+    executionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBatchJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startBatchJobResponse_httpStatus' - The response's http status code.
+--
+-- 'executionId', 'startBatchJobResponse_executionId' - The unique identifier of this execution of the batch job.
+newStartBatchJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'executionId'
+  Prelude.Text ->
+  StartBatchJobResponse
+newStartBatchJobResponse pHttpStatus_ pExecutionId_ =
+  StartBatchJobResponse'
+    { httpStatus = pHttpStatus_,
+      executionId = pExecutionId_
+    }
+
+-- | The response's http status code.
+startBatchJobResponse_httpStatus :: Lens.Lens' StartBatchJobResponse Prelude.Int
+startBatchJobResponse_httpStatus = Lens.lens (\StartBatchJobResponse' {httpStatus} -> httpStatus) (\s@StartBatchJobResponse' {} a -> s {httpStatus = a} :: StartBatchJobResponse)
+
+-- | The unique identifier of this execution of the batch job.
+startBatchJobResponse_executionId :: Lens.Lens' StartBatchJobResponse Prelude.Text
+startBatchJobResponse_executionId = Lens.lens (\StartBatchJobResponse' {executionId} -> executionId) (\s@StartBatchJobResponse' {} a -> s {executionId = a} :: StartBatchJobResponse)
+
+instance Prelude.NFData StartBatchJobResponse where
+  rnf StartBatchJobResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf executionId
diff --git a/gen/Amazonka/M2/StopApplication.hs b/gen/Amazonka/M2/StopApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/StopApplication.hs
@@ -0,0 +1,176 @@
+{-# 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.M2.StopApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a running application.
+module Amazonka.M2.StopApplication
+  ( -- * Creating a Request
+    StopApplication (..),
+    newStopApplication,
+
+    -- * Request Lenses
+    stopApplication_forceStop,
+    stopApplication_applicationId,
+
+    -- * Destructuring the Response
+    StopApplicationResponse (..),
+    newStopApplicationResponse,
+
+    -- * Response Lenses
+    stopApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopApplication' smart constructor.
+data StopApplication = StopApplication'
+  { -- | Stopping an application process can take a long time. Setting this
+    -- parameter to true lets you force stop the application so you don\'t need
+    -- to wait until the process finishes to apply another action on the
+    -- application. The default value is false.
+    forceStop :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier of the application you want to stop.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forceStop', 'stopApplication_forceStop' - Stopping an application process can take a long time. Setting this
+-- parameter to true lets you force stop the application so you don\'t need
+-- to wait until the process finishes to apply another action on the
+-- application. The default value is false.
+--
+-- 'applicationId', 'stopApplication_applicationId' - The unique identifier of the application you want to stop.
+newStopApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  StopApplication
+newStopApplication pApplicationId_ =
+  StopApplication'
+    { forceStop = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | Stopping an application process can take a long time. Setting this
+-- parameter to true lets you force stop the application so you don\'t need
+-- to wait until the process finishes to apply another action on the
+-- application. The default value is false.
+stopApplication_forceStop :: Lens.Lens' StopApplication (Prelude.Maybe Prelude.Bool)
+stopApplication_forceStop = Lens.lens (\StopApplication' {forceStop} -> forceStop) (\s@StopApplication' {} a -> s {forceStop = a} :: StopApplication)
+
+-- | The unique identifier of the application you want to stop.
+stopApplication_applicationId :: Lens.Lens' StopApplication Prelude.Text
+stopApplication_applicationId = Lens.lens (\StopApplication' {applicationId} -> applicationId) (\s@StopApplication' {} a -> s {applicationId = a} :: StopApplication)
+
+instance Core.AWSRequest StopApplication where
+  type
+    AWSResponse StopApplication =
+      StopApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StopApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopApplication where
+  hashWithSalt _salt StopApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` forceStop
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData StopApplication where
+  rnf StopApplication' {..} =
+    Prelude.rnf forceStop
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders StopApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopApplication where
+  toJSON StopApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("forceStop" Data..=) Prelude.<$> forceStop]
+      )
+
+instance Data.ToPath StopApplication where
+  toPath StopApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId, "/stop"]
+
+instance Data.ToQuery StopApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopApplicationResponse' smart constructor.
+data StopApplicationResponse = StopApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stopApplicationResponse_httpStatus' - The response's http status code.
+newStopApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopApplicationResponse
+newStopApplicationResponse pHttpStatus_ =
+  StopApplicationResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+stopApplicationResponse_httpStatus :: Lens.Lens' StopApplicationResponse Prelude.Int
+stopApplicationResponse_httpStatus = Lens.lens (\StopApplicationResponse' {httpStatus} -> httpStatus) (\s@StopApplicationResponse' {} a -> s {httpStatus = a} :: StopApplicationResponse)
+
+instance Prelude.NFData StopApplicationResponse where
+  rnf StopApplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/TagResource.hs b/gen/Amazonka/M2/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/TagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.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 one or more tags to the specified resource.
+module Amazonka.M2.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.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'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags to add to the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tags', 'tagResource_tags' - The tags to add to the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to add to the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/Types.hs b/gen/Amazonka/M2/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types.hs
@@ -0,0 +1,504 @@
+{-# 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.M2.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.M2.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * ApplicationDeploymentLifecycle
+    ApplicationDeploymentLifecycle (..),
+
+    -- * ApplicationLifecycle
+    ApplicationLifecycle (..),
+
+    -- * ApplicationVersionLifecycle
+    ApplicationVersionLifecycle (..),
+
+    -- * BatchJobExecutionStatus
+    BatchJobExecutionStatus (..),
+
+    -- * BatchJobType
+    BatchJobType (..),
+
+    -- * DataSetTaskLifecycle
+    DataSetTaskLifecycle (..),
+
+    -- * DeploymentLifecycle
+    DeploymentLifecycle (..),
+
+    -- * EngineType
+    EngineType (..),
+
+    -- * EnvironmentLifecycle
+    EnvironmentLifecycle (..),
+
+    -- * AlternateKey
+    AlternateKey (..),
+    newAlternateKey,
+    alternateKey_allowDuplicates,
+    alternateKey_name,
+    alternateKey_length,
+    alternateKey_offset,
+
+    -- * ApplicationSummary
+    ApplicationSummary (..),
+    newApplicationSummary,
+    applicationSummary_deploymentStatus,
+    applicationSummary_description,
+    applicationSummary_environmentId,
+    applicationSummary_lastStartTime,
+    applicationSummary_versionStatus,
+    applicationSummary_applicationArn,
+    applicationSummary_applicationId,
+    applicationSummary_applicationVersion,
+    applicationSummary_creationTime,
+    applicationSummary_engineType,
+    applicationSummary_name,
+    applicationSummary_status,
+
+    -- * ApplicationVersionSummary
+    ApplicationVersionSummary (..),
+    newApplicationVersionSummary,
+    applicationVersionSummary_statusReason,
+    applicationVersionSummary_applicationVersion,
+    applicationVersionSummary_creationTime,
+    applicationVersionSummary_status,
+
+    -- * BatchJobDefinition
+    BatchJobDefinition (..),
+    newBatchJobDefinition,
+    batchJobDefinition_fileBatchJobDefinition,
+    batchJobDefinition_scriptBatchJobDefinition,
+
+    -- * BatchJobExecutionSummary
+    BatchJobExecutionSummary (..),
+    newBatchJobExecutionSummary,
+    batchJobExecutionSummary_endTime,
+    batchJobExecutionSummary_jobId,
+    batchJobExecutionSummary_jobName,
+    batchJobExecutionSummary_jobType,
+    batchJobExecutionSummary_applicationId,
+    batchJobExecutionSummary_executionId,
+    batchJobExecutionSummary_startTime,
+    batchJobExecutionSummary_status,
+
+    -- * BatchJobIdentifier
+    BatchJobIdentifier (..),
+    newBatchJobIdentifier,
+    batchJobIdentifier_fileBatchJobIdentifier,
+    batchJobIdentifier_scriptBatchJobIdentifier,
+
+    -- * DataSet
+    DataSet (..),
+    newDataSet,
+    dataSet_relativePath,
+    dataSet_storageType,
+    dataSet_datasetName,
+    dataSet_datasetOrg,
+    dataSet_recordLength,
+
+    -- * DataSetImportConfig
+    DataSetImportConfig (..),
+    newDataSetImportConfig,
+    dataSetImportConfig_dataSets,
+    dataSetImportConfig_s3Location,
+
+    -- * DataSetImportItem
+    DataSetImportItem (..),
+    newDataSetImportItem,
+    dataSetImportItem_dataSet,
+    dataSetImportItem_externalLocation,
+
+    -- * DataSetImportSummary
+    DataSetImportSummary (..),
+    newDataSetImportSummary,
+    dataSetImportSummary_failed,
+    dataSetImportSummary_inProgress,
+    dataSetImportSummary_pending,
+    dataSetImportSummary_succeeded,
+    dataSetImportSummary_total,
+
+    -- * DataSetImportTask
+    DataSetImportTask (..),
+    newDataSetImportTask,
+    dataSetImportTask_status,
+    dataSetImportTask_summary,
+    dataSetImportTask_taskId,
+
+    -- * DataSetSummary
+    DataSetSummary (..),
+    newDataSetSummary,
+    dataSetSummary_creationTime,
+    dataSetSummary_dataSetOrg,
+    dataSetSummary_format,
+    dataSetSummary_lastReferencedTime,
+    dataSetSummary_lastUpdatedTime,
+    dataSetSummary_dataSetName,
+
+    -- * DatasetDetailOrgAttributes
+    DatasetDetailOrgAttributes (..),
+    newDatasetDetailOrgAttributes,
+    datasetDetailOrgAttributes_gdg,
+    datasetDetailOrgAttributes_vsam,
+
+    -- * DatasetOrgAttributes
+    DatasetOrgAttributes (..),
+    newDatasetOrgAttributes,
+    datasetOrgAttributes_gdg,
+    datasetOrgAttributes_vsam,
+
+    -- * Definition
+    Definition (..),
+    newDefinition,
+    definition_content,
+    definition_s3Location,
+
+    -- * DeployedVersionSummary
+    DeployedVersionSummary (..),
+    newDeployedVersionSummary,
+    deployedVersionSummary_statusReason,
+    deployedVersionSummary_applicationVersion,
+    deployedVersionSummary_status,
+
+    -- * DeploymentSummary
+    DeploymentSummary (..),
+    newDeploymentSummary,
+    deploymentSummary_statusReason,
+    deploymentSummary_applicationId,
+    deploymentSummary_applicationVersion,
+    deploymentSummary_creationTime,
+    deploymentSummary_deploymentId,
+    deploymentSummary_environmentId,
+    deploymentSummary_status,
+
+    -- * EfsStorageConfiguration
+    EfsStorageConfiguration (..),
+    newEfsStorageConfiguration,
+    efsStorageConfiguration_fileSystemId,
+    efsStorageConfiguration_mountPoint,
+
+    -- * EngineVersionsSummary
+    EngineVersionsSummary (..),
+    newEngineVersionsSummary,
+    engineVersionsSummary_engineType,
+    engineVersionsSummary_engineVersion,
+
+    -- * EnvironmentSummary
+    EnvironmentSummary (..),
+    newEnvironmentSummary,
+    environmentSummary_creationTime,
+    environmentSummary_engineType,
+    environmentSummary_engineVersion,
+    environmentSummary_environmentArn,
+    environmentSummary_environmentId,
+    environmentSummary_instanceType,
+    environmentSummary_name,
+    environmentSummary_status,
+
+    -- * ExternalLocation
+    ExternalLocation (..),
+    newExternalLocation,
+    externalLocation_s3Location,
+
+    -- * FileBatchJobDefinition
+    FileBatchJobDefinition (..),
+    newFileBatchJobDefinition,
+    fileBatchJobDefinition_folderPath,
+    fileBatchJobDefinition_fileName,
+
+    -- * FileBatchJobIdentifier
+    FileBatchJobIdentifier (..),
+    newFileBatchJobIdentifier,
+    fileBatchJobIdentifier_folderPath,
+    fileBatchJobIdentifier_fileName,
+
+    -- * FsxStorageConfiguration
+    FsxStorageConfiguration (..),
+    newFsxStorageConfiguration,
+    fsxStorageConfiguration_fileSystemId,
+    fsxStorageConfiguration_mountPoint,
+
+    -- * GdgAttributes
+    GdgAttributes (..),
+    newGdgAttributes,
+    gdgAttributes_limit,
+    gdgAttributes_rollDisposition,
+
+    -- * GdgDetailAttributes
+    GdgDetailAttributes (..),
+    newGdgDetailAttributes,
+    gdgDetailAttributes_limit,
+    gdgDetailAttributes_rollDisposition,
+
+    -- * HighAvailabilityConfig
+    HighAvailabilityConfig (..),
+    newHighAvailabilityConfig,
+    highAvailabilityConfig_desiredCapacity,
+
+    -- * LogGroupSummary
+    LogGroupSummary (..),
+    newLogGroupSummary,
+    logGroupSummary_logGroupName,
+    logGroupSummary_logType,
+
+    -- * MaintenanceSchedule
+    MaintenanceSchedule (..),
+    newMaintenanceSchedule,
+    maintenanceSchedule_endTime,
+    maintenanceSchedule_startTime,
+
+    -- * PendingMaintenance
+    PendingMaintenance (..),
+    newPendingMaintenance,
+    pendingMaintenance_engineVersion,
+    pendingMaintenance_schedule,
+
+    -- * PrimaryKey
+    PrimaryKey (..),
+    newPrimaryKey,
+    primaryKey_name,
+    primaryKey_length,
+    primaryKey_offset,
+
+    -- * RecordLength
+    RecordLength (..),
+    newRecordLength,
+    recordLength_max,
+    recordLength_min,
+
+    -- * ScriptBatchJobDefinition
+    ScriptBatchJobDefinition (..),
+    newScriptBatchJobDefinition,
+    scriptBatchJobDefinition_scriptName,
+
+    -- * ScriptBatchJobIdentifier
+    ScriptBatchJobIdentifier (..),
+    newScriptBatchJobIdentifier,
+    scriptBatchJobIdentifier_scriptName,
+
+    -- * StorageConfiguration
+    StorageConfiguration (..),
+    newStorageConfiguration,
+    storageConfiguration_efs,
+    storageConfiguration_fsx,
+
+    -- * VsamAttributes
+    VsamAttributes (..),
+    newVsamAttributes,
+    vsamAttributes_alternateKeys,
+    vsamAttributes_compressed,
+    vsamAttributes_encoding,
+    vsamAttributes_primaryKey,
+    vsamAttributes_format,
+
+    -- * VsamDetailAttributes
+    VsamDetailAttributes (..),
+    newVsamDetailAttributes,
+    vsamDetailAttributes_alternateKeys,
+    vsamDetailAttributes_cacheAtStartup,
+    vsamDetailAttributes_compressed,
+    vsamDetailAttributes_encoding,
+    vsamDetailAttributes_primaryKey,
+    vsamDetailAttributes_recordFormat,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.M2.Types.AlternateKey
+import Amazonka.M2.Types.ApplicationDeploymentLifecycle
+import Amazonka.M2.Types.ApplicationLifecycle
+import Amazonka.M2.Types.ApplicationSummary
+import Amazonka.M2.Types.ApplicationVersionLifecycle
+import Amazonka.M2.Types.ApplicationVersionSummary
+import Amazonka.M2.Types.BatchJobDefinition
+import Amazonka.M2.Types.BatchJobExecutionStatus
+import Amazonka.M2.Types.BatchJobExecutionSummary
+import Amazonka.M2.Types.BatchJobIdentifier
+import Amazonka.M2.Types.BatchJobType
+import Amazonka.M2.Types.DataSet
+import Amazonka.M2.Types.DataSetImportConfig
+import Amazonka.M2.Types.DataSetImportItem
+import Amazonka.M2.Types.DataSetImportSummary
+import Amazonka.M2.Types.DataSetImportTask
+import Amazonka.M2.Types.DataSetSummary
+import Amazonka.M2.Types.DataSetTaskLifecycle
+import Amazonka.M2.Types.DatasetDetailOrgAttributes
+import Amazonka.M2.Types.DatasetOrgAttributes
+import Amazonka.M2.Types.Definition
+import Amazonka.M2.Types.DeployedVersionSummary
+import Amazonka.M2.Types.DeploymentLifecycle
+import Amazonka.M2.Types.DeploymentSummary
+import Amazonka.M2.Types.EfsStorageConfiguration
+import Amazonka.M2.Types.EngineType
+import Amazonka.M2.Types.EngineVersionsSummary
+import Amazonka.M2.Types.EnvironmentLifecycle
+import Amazonka.M2.Types.EnvironmentSummary
+import Amazonka.M2.Types.ExternalLocation
+import Amazonka.M2.Types.FileBatchJobDefinition
+import Amazonka.M2.Types.FileBatchJobIdentifier
+import Amazonka.M2.Types.FsxStorageConfiguration
+import Amazonka.M2.Types.GdgAttributes
+import Amazonka.M2.Types.GdgDetailAttributes
+import Amazonka.M2.Types.HighAvailabilityConfig
+import Amazonka.M2.Types.LogGroupSummary
+import Amazonka.M2.Types.MaintenanceSchedule
+import Amazonka.M2.Types.PendingMaintenance
+import Amazonka.M2.Types.PrimaryKey
+import Amazonka.M2.Types.RecordLength
+import Amazonka.M2.Types.ScriptBatchJobDefinition
+import Amazonka.M2.Types.ScriptBatchJobIdentifier
+import Amazonka.M2.Types.StorageConfiguration
+import Amazonka.M2.Types.VsamAttributes
+import Amazonka.M2.Types.VsamDetailAttributes
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-04-28@ of the Amazon MainframeModernization SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "M2",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "m2",
+      Core.signingName = "m2",
+      Core.version = "2021-04-28",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "M2",
+      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
+
+-- | The account or role doesn\'t have the right permissions to make the
+-- request.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The parameters provided in the request conflict with existing resources.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An unexpected error occurred during the processing of the request.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The specified resource was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | One or more quotas for Amazon Web Services Mainframe Modernization
+-- exceeds the limit.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The number of requests made exceeds the limit.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | One or more parameters provided in the request is not valid.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/M2/Types/AlternateKey.hs b/gen/Amazonka/M2/Types/AlternateKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/AlternateKey.hs
@@ -0,0 +1,136 @@
+{-# 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.M2.Types.AlternateKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.AlternateKey where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines an alternate key. This value is optional. A legacy data set
+-- might not have any alternate key defined but if those alternate keys
+-- definitions exist, provide them, as some applications will make use of
+-- them.
+--
+-- /See:/ 'newAlternateKey' smart constructor.
+data AlternateKey = AlternateKey'
+  { -- | Indicates whether the alternate key values are supposed to be unique for
+    -- the given data set.
+    allowDuplicates :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the alternate key.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A strictly positive integer value representing the length of the
+    -- alternate key.
+    length :: Prelude.Int,
+    -- | A positive integer value representing the offset to mark the start of
+    -- the alternate key part in the record byte array.
+    offset :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlternateKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowDuplicates', 'alternateKey_allowDuplicates' - Indicates whether the alternate key values are supposed to be unique for
+-- the given data set.
+--
+-- 'name', 'alternateKey_name' - The name of the alternate key.
+--
+-- 'length', 'alternateKey_length' - A strictly positive integer value representing the length of the
+-- alternate key.
+--
+-- 'offset', 'alternateKey_offset' - A positive integer value representing the offset to mark the start of
+-- the alternate key part in the record byte array.
+newAlternateKey ::
+  -- | 'length'
+  Prelude.Int ->
+  -- | 'offset'
+  Prelude.Int ->
+  AlternateKey
+newAlternateKey pLength_ pOffset_ =
+  AlternateKey'
+    { allowDuplicates = Prelude.Nothing,
+      name = Prelude.Nothing,
+      length = pLength_,
+      offset = pOffset_
+    }
+
+-- | Indicates whether the alternate key values are supposed to be unique for
+-- the given data set.
+alternateKey_allowDuplicates :: Lens.Lens' AlternateKey (Prelude.Maybe Prelude.Bool)
+alternateKey_allowDuplicates = Lens.lens (\AlternateKey' {allowDuplicates} -> allowDuplicates) (\s@AlternateKey' {} a -> s {allowDuplicates = a} :: AlternateKey)
+
+-- | The name of the alternate key.
+alternateKey_name :: Lens.Lens' AlternateKey (Prelude.Maybe Prelude.Text)
+alternateKey_name = Lens.lens (\AlternateKey' {name} -> name) (\s@AlternateKey' {} a -> s {name = a} :: AlternateKey)
+
+-- | A strictly positive integer value representing the length of the
+-- alternate key.
+alternateKey_length :: Lens.Lens' AlternateKey Prelude.Int
+alternateKey_length = Lens.lens (\AlternateKey' {length} -> length) (\s@AlternateKey' {} a -> s {length = a} :: AlternateKey)
+
+-- | A positive integer value representing the offset to mark the start of
+-- the alternate key part in the record byte array.
+alternateKey_offset :: Lens.Lens' AlternateKey Prelude.Int
+alternateKey_offset = Lens.lens (\AlternateKey' {offset} -> offset) (\s@AlternateKey' {} a -> s {offset = a} :: AlternateKey)
+
+instance Data.FromJSON AlternateKey where
+  parseJSON =
+    Data.withObject
+      "AlternateKey"
+      ( \x ->
+          AlternateKey'
+            Prelude.<$> (x Data..:? "allowDuplicates")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..: "length")
+            Prelude.<*> (x Data..: "offset")
+      )
+
+instance Prelude.Hashable AlternateKey where
+  hashWithSalt _salt AlternateKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowDuplicates
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` length
+      `Prelude.hashWithSalt` offset
+
+instance Prelude.NFData AlternateKey where
+  rnf AlternateKey' {..} =
+    Prelude.rnf allowDuplicates
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf length
+      `Prelude.seq` Prelude.rnf offset
+
+instance Data.ToJSON AlternateKey where
+  toJSON AlternateKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowDuplicates" Data..=)
+              Prelude.<$> allowDuplicates,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("length" Data..= length),
+            Prelude.Just ("offset" Data..= offset)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/ApplicationDeploymentLifecycle.hs b/gen/Amazonka/M2/Types/ApplicationDeploymentLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ApplicationDeploymentLifecycle.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.M2.Types.ApplicationDeploymentLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ApplicationDeploymentLifecycle
+  ( ApplicationDeploymentLifecycle
+      ( ..,
+        ApplicationDeploymentLifecycle_Deployed,
+        ApplicationDeploymentLifecycle_Deploying
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationDeploymentLifecycle = ApplicationDeploymentLifecycle'
+  { fromApplicationDeploymentLifecycle ::
+      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 ApplicationDeploymentLifecycle_Deployed :: ApplicationDeploymentLifecycle
+pattern ApplicationDeploymentLifecycle_Deployed = ApplicationDeploymentLifecycle' "Deployed"
+
+pattern ApplicationDeploymentLifecycle_Deploying :: ApplicationDeploymentLifecycle
+pattern ApplicationDeploymentLifecycle_Deploying = ApplicationDeploymentLifecycle' "Deploying"
+
+{-# COMPLETE
+  ApplicationDeploymentLifecycle_Deployed,
+  ApplicationDeploymentLifecycle_Deploying,
+  ApplicationDeploymentLifecycle'
+  #-}
diff --git a/gen/Amazonka/M2/Types/ApplicationLifecycle.hs b/gen/Amazonka/M2/Types/ApplicationLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ApplicationLifecycle.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.M2.Types.ApplicationLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ApplicationLifecycle
+  ( ApplicationLifecycle
+      ( ..,
+        ApplicationLifecycle_Available,
+        ApplicationLifecycle_Created,
+        ApplicationLifecycle_Creating,
+        ApplicationLifecycle_Deleting,
+        ApplicationLifecycle_Deleting_From_Environment,
+        ApplicationLifecycle_Failed,
+        ApplicationLifecycle_Ready,
+        ApplicationLifecycle_Running,
+        ApplicationLifecycle_Starting,
+        ApplicationLifecycle_Stopped,
+        ApplicationLifecycle_Stopping
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationLifecycle = ApplicationLifecycle'
+  { fromApplicationLifecycle ::
+      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 ApplicationLifecycle_Available :: ApplicationLifecycle
+pattern ApplicationLifecycle_Available = ApplicationLifecycle' "Available"
+
+pattern ApplicationLifecycle_Created :: ApplicationLifecycle
+pattern ApplicationLifecycle_Created = ApplicationLifecycle' "Created"
+
+pattern ApplicationLifecycle_Creating :: ApplicationLifecycle
+pattern ApplicationLifecycle_Creating = ApplicationLifecycle' "Creating"
+
+pattern ApplicationLifecycle_Deleting :: ApplicationLifecycle
+pattern ApplicationLifecycle_Deleting = ApplicationLifecycle' "Deleting"
+
+pattern ApplicationLifecycle_Deleting_From_Environment :: ApplicationLifecycle
+pattern ApplicationLifecycle_Deleting_From_Environment = ApplicationLifecycle' "Deleting From Environment"
+
+pattern ApplicationLifecycle_Failed :: ApplicationLifecycle
+pattern ApplicationLifecycle_Failed = ApplicationLifecycle' "Failed"
+
+pattern ApplicationLifecycle_Ready :: ApplicationLifecycle
+pattern ApplicationLifecycle_Ready = ApplicationLifecycle' "Ready"
+
+pattern ApplicationLifecycle_Running :: ApplicationLifecycle
+pattern ApplicationLifecycle_Running = ApplicationLifecycle' "Running"
+
+pattern ApplicationLifecycle_Starting :: ApplicationLifecycle
+pattern ApplicationLifecycle_Starting = ApplicationLifecycle' "Starting"
+
+pattern ApplicationLifecycle_Stopped :: ApplicationLifecycle
+pattern ApplicationLifecycle_Stopped = ApplicationLifecycle' "Stopped"
+
+pattern ApplicationLifecycle_Stopping :: ApplicationLifecycle
+pattern ApplicationLifecycle_Stopping = ApplicationLifecycle' "Stopping"
+
+{-# COMPLETE
+  ApplicationLifecycle_Available,
+  ApplicationLifecycle_Created,
+  ApplicationLifecycle_Creating,
+  ApplicationLifecycle_Deleting,
+  ApplicationLifecycle_Deleting_From_Environment,
+  ApplicationLifecycle_Failed,
+  ApplicationLifecycle_Ready,
+  ApplicationLifecycle_Running,
+  ApplicationLifecycle_Starting,
+  ApplicationLifecycle_Stopped,
+  ApplicationLifecycle_Stopping,
+  ApplicationLifecycle'
+  #-}
diff --git a/gen/Amazonka/M2/Types/ApplicationSummary.hs b/gen/Amazonka/M2/Types/ApplicationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ApplicationSummary.hs
@@ -0,0 +1,240 @@
+{-# 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.M2.Types.ApplicationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ApplicationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.ApplicationDeploymentLifecycle
+import Amazonka.M2.Types.ApplicationLifecycle
+import Amazonka.M2.Types.ApplicationVersionLifecycle
+import Amazonka.M2.Types.EngineType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A subset of the possible application attributes. Used in the application
+-- list.
+--
+-- /See:/ 'newApplicationSummary' smart constructor.
+data ApplicationSummary = ApplicationSummary'
+  { -- | Indicates either an ongoing deployment or if the application has ever
+    -- deployed successfully.
+    deploymentStatus :: Prelude.Maybe ApplicationDeploymentLifecycle,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the runtime environment that hosts this
+    -- application.
+    environmentId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when you last started the application. Null until the
+    -- application runs for the first time.
+    lastStartTime :: Prelude.Maybe Data.POSIX,
+    -- | Indicates the status of the latest version of the application.
+    versionStatus :: Prelude.Maybe ApplicationVersionLifecycle,
+    -- | The Amazon Resource Name (ARN) of the application.
+    applicationArn :: Prelude.Text,
+    -- | The unique identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The version of the application.
+    applicationVersion :: Prelude.Natural,
+    -- | The timestamp when the application was created.
+    creationTime :: Data.POSIX,
+    -- | The type of the target platform for this application.
+    engineType :: EngineType,
+    -- | The name of the application.
+    name :: Prelude.Text,
+    -- | The status of the application.
+    status :: ApplicationLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentStatus', 'applicationSummary_deploymentStatus' - Indicates either an ongoing deployment or if the application has ever
+-- deployed successfully.
+--
+-- 'description', 'applicationSummary_description' - The description of the application.
+--
+-- 'environmentId', 'applicationSummary_environmentId' - The unique identifier of the runtime environment that hosts this
+-- application.
+--
+-- 'lastStartTime', 'applicationSummary_lastStartTime' - The timestamp when you last started the application. Null until the
+-- application runs for the first time.
+--
+-- 'versionStatus', 'applicationSummary_versionStatus' - Indicates the status of the latest version of the application.
+--
+-- 'applicationArn', 'applicationSummary_applicationArn' - The Amazon Resource Name (ARN) of the application.
+--
+-- 'applicationId', 'applicationSummary_applicationId' - The unique identifier of the application.
+--
+-- 'applicationVersion', 'applicationSummary_applicationVersion' - The version of the application.
+--
+-- 'creationTime', 'applicationSummary_creationTime' - The timestamp when the application was created.
+--
+-- 'engineType', 'applicationSummary_engineType' - The type of the target platform for this application.
+--
+-- 'name', 'applicationSummary_name' - The name of the application.
+--
+-- 'status', 'applicationSummary_status' - The status of the application.
+newApplicationSummary ::
+  -- | 'applicationArn'
+  Prelude.Text ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'engineType'
+  EngineType ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  ApplicationLifecycle ->
+  ApplicationSummary
+newApplicationSummary
+  pApplicationArn_
+  pApplicationId_
+  pApplicationVersion_
+  pCreationTime_
+  pEngineType_
+  pName_
+  pStatus_ =
+    ApplicationSummary'
+      { deploymentStatus =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        environmentId = Prelude.Nothing,
+        lastStartTime = Prelude.Nothing,
+        versionStatus = Prelude.Nothing,
+        applicationArn = pApplicationArn_,
+        applicationId = pApplicationId_,
+        applicationVersion = pApplicationVersion_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        engineType = pEngineType_,
+        name = pName_,
+        status = pStatus_
+      }
+
+-- | Indicates either an ongoing deployment or if the application has ever
+-- deployed successfully.
+applicationSummary_deploymentStatus :: Lens.Lens' ApplicationSummary (Prelude.Maybe ApplicationDeploymentLifecycle)
+applicationSummary_deploymentStatus = Lens.lens (\ApplicationSummary' {deploymentStatus} -> deploymentStatus) (\s@ApplicationSummary' {} a -> s {deploymentStatus = a} :: ApplicationSummary)
+
+-- | The description of the application.
+applicationSummary_description :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_description = Lens.lens (\ApplicationSummary' {description} -> description) (\s@ApplicationSummary' {} a -> s {description = a} :: ApplicationSummary)
+
+-- | The unique identifier of the runtime environment that hosts this
+-- application.
+applicationSummary_environmentId :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_environmentId = Lens.lens (\ApplicationSummary' {environmentId} -> environmentId) (\s@ApplicationSummary' {} a -> s {environmentId = a} :: ApplicationSummary)
+
+-- | The timestamp when you last started the application. Null until the
+-- application runs for the first time.
+applicationSummary_lastStartTime :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.UTCTime)
+applicationSummary_lastStartTime = Lens.lens (\ApplicationSummary' {lastStartTime} -> lastStartTime) (\s@ApplicationSummary' {} a -> s {lastStartTime = a} :: ApplicationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates the status of the latest version of the application.
+applicationSummary_versionStatus :: Lens.Lens' ApplicationSummary (Prelude.Maybe ApplicationVersionLifecycle)
+applicationSummary_versionStatus = Lens.lens (\ApplicationSummary' {versionStatus} -> versionStatus) (\s@ApplicationSummary' {} a -> s {versionStatus = a} :: ApplicationSummary)
+
+-- | The Amazon Resource Name (ARN) of the application.
+applicationSummary_applicationArn :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_applicationArn = Lens.lens (\ApplicationSummary' {applicationArn} -> applicationArn) (\s@ApplicationSummary' {} a -> s {applicationArn = a} :: ApplicationSummary)
+
+-- | The unique identifier of the application.
+applicationSummary_applicationId :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_applicationId = Lens.lens (\ApplicationSummary' {applicationId} -> applicationId) (\s@ApplicationSummary' {} a -> s {applicationId = a} :: ApplicationSummary)
+
+-- | The version of the application.
+applicationSummary_applicationVersion :: Lens.Lens' ApplicationSummary Prelude.Natural
+applicationSummary_applicationVersion = Lens.lens (\ApplicationSummary' {applicationVersion} -> applicationVersion) (\s@ApplicationSummary' {} a -> s {applicationVersion = a} :: ApplicationSummary)
+
+-- | The timestamp when the application was created.
+applicationSummary_creationTime :: Lens.Lens' ApplicationSummary Prelude.UTCTime
+applicationSummary_creationTime = Lens.lens (\ApplicationSummary' {creationTime} -> creationTime) (\s@ApplicationSummary' {} a -> s {creationTime = a} :: ApplicationSummary) Prelude.. Data._Time
+
+-- | The type of the target platform for this application.
+applicationSummary_engineType :: Lens.Lens' ApplicationSummary EngineType
+applicationSummary_engineType = Lens.lens (\ApplicationSummary' {engineType} -> engineType) (\s@ApplicationSummary' {} a -> s {engineType = a} :: ApplicationSummary)
+
+-- | The name of the application.
+applicationSummary_name :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_name = Lens.lens (\ApplicationSummary' {name} -> name) (\s@ApplicationSummary' {} a -> s {name = a} :: ApplicationSummary)
+
+-- | The status of the application.
+applicationSummary_status :: Lens.Lens' ApplicationSummary ApplicationLifecycle
+applicationSummary_status = Lens.lens (\ApplicationSummary' {status} -> status) (\s@ApplicationSummary' {} a -> s {status = a} :: ApplicationSummary)
+
+instance Data.FromJSON ApplicationSummary where
+  parseJSON =
+    Data.withObject
+      "ApplicationSummary"
+      ( \x ->
+          ApplicationSummary'
+            Prelude.<$> (x Data..:? "deploymentStatus")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "environmentId")
+            Prelude.<*> (x Data..:? "lastStartTime")
+            Prelude.<*> (x Data..:? "versionStatus")
+            Prelude.<*> (x Data..: "applicationArn")
+            Prelude.<*> (x Data..: "applicationId")
+            Prelude.<*> (x Data..: "applicationVersion")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "engineType")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable ApplicationSummary where
+  hashWithSalt _salt ApplicationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentStatus
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` lastStartTime
+      `Prelude.hashWithSalt` versionStatus
+      `Prelude.hashWithSalt` applicationArn
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ApplicationSummary where
+  rnf ApplicationSummary' {..} =
+    Prelude.rnf deploymentStatus
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf lastStartTime
+      `Prelude.seq` Prelude.rnf versionStatus
+      `Prelude.seq` Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/Types/ApplicationVersionLifecycle.hs b/gen/Amazonka/M2/Types/ApplicationVersionLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ApplicationVersionLifecycle.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.M2.Types.ApplicationVersionLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ApplicationVersionLifecycle
+  ( ApplicationVersionLifecycle
+      ( ..,
+        ApplicationVersionLifecycle_Available,
+        ApplicationVersionLifecycle_Creating,
+        ApplicationVersionLifecycle_Failed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationVersionLifecycle = ApplicationVersionLifecycle'
+  { fromApplicationVersionLifecycle ::
+      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 ApplicationVersionLifecycle_Available :: ApplicationVersionLifecycle
+pattern ApplicationVersionLifecycle_Available = ApplicationVersionLifecycle' "Available"
+
+pattern ApplicationVersionLifecycle_Creating :: ApplicationVersionLifecycle
+pattern ApplicationVersionLifecycle_Creating = ApplicationVersionLifecycle' "Creating"
+
+pattern ApplicationVersionLifecycle_Failed :: ApplicationVersionLifecycle
+pattern ApplicationVersionLifecycle_Failed = ApplicationVersionLifecycle' "Failed"
+
+{-# COMPLETE
+  ApplicationVersionLifecycle_Available,
+  ApplicationVersionLifecycle_Creating,
+  ApplicationVersionLifecycle_Failed,
+  ApplicationVersionLifecycle'
+  #-}
diff --git a/gen/Amazonka/M2/Types/ApplicationVersionSummary.hs b/gen/Amazonka/M2/Types/ApplicationVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ApplicationVersionSummary.hs
@@ -0,0 +1,119 @@
+{-# 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.M2.Types.ApplicationVersionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ApplicationVersionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.ApplicationVersionLifecycle
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines an application version summary.
+--
+-- /See:/ 'newApplicationVersionSummary' smart constructor.
+data ApplicationVersionSummary = ApplicationVersionSummary'
+  { -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The application version.
+    applicationVersion :: Prelude.Natural,
+    -- | The timestamp when the application version was created.
+    creationTime :: Data.POSIX,
+    -- | The status of the application.
+    status :: ApplicationVersionLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statusReason', 'applicationVersionSummary_statusReason' - The reason for the reported status.
+--
+-- 'applicationVersion', 'applicationVersionSummary_applicationVersion' - The application version.
+--
+-- 'creationTime', 'applicationVersionSummary_creationTime' - The timestamp when the application version was created.
+--
+-- 'status', 'applicationVersionSummary_status' - The status of the application.
+newApplicationVersionSummary ::
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'status'
+  ApplicationVersionLifecycle ->
+  ApplicationVersionSummary
+newApplicationVersionSummary
+  pApplicationVersion_
+  pCreationTime_
+  pStatus_ =
+    ApplicationVersionSummary'
+      { statusReason =
+          Prelude.Nothing,
+        applicationVersion = pApplicationVersion_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        status = pStatus_
+      }
+
+-- | The reason for the reported status.
+applicationVersionSummary_statusReason :: Lens.Lens' ApplicationVersionSummary (Prelude.Maybe Prelude.Text)
+applicationVersionSummary_statusReason = Lens.lens (\ApplicationVersionSummary' {statusReason} -> statusReason) (\s@ApplicationVersionSummary' {} a -> s {statusReason = a} :: ApplicationVersionSummary)
+
+-- | The application version.
+applicationVersionSummary_applicationVersion :: Lens.Lens' ApplicationVersionSummary Prelude.Natural
+applicationVersionSummary_applicationVersion = Lens.lens (\ApplicationVersionSummary' {applicationVersion} -> applicationVersion) (\s@ApplicationVersionSummary' {} a -> s {applicationVersion = a} :: ApplicationVersionSummary)
+
+-- | The timestamp when the application version was created.
+applicationVersionSummary_creationTime :: Lens.Lens' ApplicationVersionSummary Prelude.UTCTime
+applicationVersionSummary_creationTime = Lens.lens (\ApplicationVersionSummary' {creationTime} -> creationTime) (\s@ApplicationVersionSummary' {} a -> s {creationTime = a} :: ApplicationVersionSummary) Prelude.. Data._Time
+
+-- | The status of the application.
+applicationVersionSummary_status :: Lens.Lens' ApplicationVersionSummary ApplicationVersionLifecycle
+applicationVersionSummary_status = Lens.lens (\ApplicationVersionSummary' {status} -> status) (\s@ApplicationVersionSummary' {} a -> s {status = a} :: ApplicationVersionSummary)
+
+instance Data.FromJSON ApplicationVersionSummary where
+  parseJSON =
+    Data.withObject
+      "ApplicationVersionSummary"
+      ( \x ->
+          ApplicationVersionSummary'
+            Prelude.<$> (x Data..:? "statusReason")
+            Prelude.<*> (x Data..: "applicationVersion")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable ApplicationVersionSummary where
+  hashWithSalt _salt ApplicationVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` statusReason
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ApplicationVersionSummary where
+  rnf ApplicationVersionSummary' {..} =
+    Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/Types/BatchJobDefinition.hs b/gen/Amazonka/M2/Types/BatchJobDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/BatchJobDefinition.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.M2.Types.BatchJobDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.BatchJobDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.FileBatchJobDefinition
+import Amazonka.M2.Types.ScriptBatchJobDefinition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the details of a batch job.
+--
+-- /See:/ 'newBatchJobDefinition' smart constructor.
+data BatchJobDefinition = BatchJobDefinition'
+  { -- | Specifies a file containing a batch job definition.
+    fileBatchJobDefinition :: Prelude.Maybe FileBatchJobDefinition,
+    -- | A script containing a batch job definition.
+    scriptBatchJobDefinition :: Prelude.Maybe ScriptBatchJobDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchJobDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileBatchJobDefinition', 'batchJobDefinition_fileBatchJobDefinition' - Specifies a file containing a batch job definition.
+--
+-- 'scriptBatchJobDefinition', 'batchJobDefinition_scriptBatchJobDefinition' - A script containing a batch job definition.
+newBatchJobDefinition ::
+  BatchJobDefinition
+newBatchJobDefinition =
+  BatchJobDefinition'
+    { fileBatchJobDefinition =
+        Prelude.Nothing,
+      scriptBatchJobDefinition = Prelude.Nothing
+    }
+
+-- | Specifies a file containing a batch job definition.
+batchJobDefinition_fileBatchJobDefinition :: Lens.Lens' BatchJobDefinition (Prelude.Maybe FileBatchJobDefinition)
+batchJobDefinition_fileBatchJobDefinition = Lens.lens (\BatchJobDefinition' {fileBatchJobDefinition} -> fileBatchJobDefinition) (\s@BatchJobDefinition' {} a -> s {fileBatchJobDefinition = a} :: BatchJobDefinition)
+
+-- | A script containing a batch job definition.
+batchJobDefinition_scriptBatchJobDefinition :: Lens.Lens' BatchJobDefinition (Prelude.Maybe ScriptBatchJobDefinition)
+batchJobDefinition_scriptBatchJobDefinition = Lens.lens (\BatchJobDefinition' {scriptBatchJobDefinition} -> scriptBatchJobDefinition) (\s@BatchJobDefinition' {} a -> s {scriptBatchJobDefinition = a} :: BatchJobDefinition)
+
+instance Data.FromJSON BatchJobDefinition where
+  parseJSON =
+    Data.withObject
+      "BatchJobDefinition"
+      ( \x ->
+          BatchJobDefinition'
+            Prelude.<$> (x Data..:? "fileBatchJobDefinition")
+            Prelude.<*> (x Data..:? "scriptBatchJobDefinition")
+      )
+
+instance Prelude.Hashable BatchJobDefinition where
+  hashWithSalt _salt BatchJobDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileBatchJobDefinition
+      `Prelude.hashWithSalt` scriptBatchJobDefinition
+
+instance Prelude.NFData BatchJobDefinition where
+  rnf BatchJobDefinition' {..} =
+    Prelude.rnf fileBatchJobDefinition
+      `Prelude.seq` Prelude.rnf scriptBatchJobDefinition
diff --git a/gen/Amazonka/M2/Types/BatchJobExecutionStatus.hs b/gen/Amazonka/M2/Types/BatchJobExecutionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/BatchJobExecutionStatus.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.M2.Types.BatchJobExecutionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.BatchJobExecutionStatus
+  ( BatchJobExecutionStatus
+      ( ..,
+        BatchJobExecutionStatus_Cancelled,
+        BatchJobExecutionStatus_Cancelling,
+        BatchJobExecutionStatus_Dispatching,
+        BatchJobExecutionStatus_Failed,
+        BatchJobExecutionStatus_Holding,
+        BatchJobExecutionStatus_Running,
+        BatchJobExecutionStatus_Submitting,
+        BatchJobExecutionStatus_Succeeded,
+        BatchJobExecutionStatus_Succeeded_With_Warning
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BatchJobExecutionStatus = BatchJobExecutionStatus'
+  { fromBatchJobExecutionStatus ::
+      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 BatchJobExecutionStatus_Cancelled :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Cancelled = BatchJobExecutionStatus' "Cancelled"
+
+pattern BatchJobExecutionStatus_Cancelling :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Cancelling = BatchJobExecutionStatus' "Cancelling"
+
+pattern BatchJobExecutionStatus_Dispatching :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Dispatching = BatchJobExecutionStatus' "Dispatching"
+
+pattern BatchJobExecutionStatus_Failed :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Failed = BatchJobExecutionStatus' "Failed"
+
+pattern BatchJobExecutionStatus_Holding :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Holding = BatchJobExecutionStatus' "Holding"
+
+pattern BatchJobExecutionStatus_Running :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Running = BatchJobExecutionStatus' "Running"
+
+pattern BatchJobExecutionStatus_Submitting :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Submitting = BatchJobExecutionStatus' "Submitting"
+
+pattern BatchJobExecutionStatus_Succeeded :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Succeeded = BatchJobExecutionStatus' "Succeeded"
+
+pattern BatchJobExecutionStatus_Succeeded_With_Warning :: BatchJobExecutionStatus
+pattern BatchJobExecutionStatus_Succeeded_With_Warning = BatchJobExecutionStatus' "Succeeded With Warning"
+
+{-# COMPLETE
+  BatchJobExecutionStatus_Cancelled,
+  BatchJobExecutionStatus_Cancelling,
+  BatchJobExecutionStatus_Dispatching,
+  BatchJobExecutionStatus_Failed,
+  BatchJobExecutionStatus_Holding,
+  BatchJobExecutionStatus_Running,
+  BatchJobExecutionStatus_Submitting,
+  BatchJobExecutionStatus_Succeeded,
+  BatchJobExecutionStatus_Succeeded_With_Warning,
+  BatchJobExecutionStatus'
+  #-}
diff --git a/gen/Amazonka/M2/Types/BatchJobExecutionSummary.hs b/gen/Amazonka/M2/Types/BatchJobExecutionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/BatchJobExecutionSummary.hs
@@ -0,0 +1,172 @@
+{-# 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.M2.Types.BatchJobExecutionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.BatchJobExecutionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.BatchJobExecutionStatus
+import Amazonka.M2.Types.BatchJobType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A subset of the possible batch job attributes. Used in the batch job
+-- list.
+--
+-- /See:/ 'newBatchJobExecutionSummary' smart constructor.
+data BatchJobExecutionSummary = BatchJobExecutionSummary'
+  { -- | The timestamp when this batch job execution ended.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier of a particular batch job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The name of a particular batch job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | The type of a particular batch job execution.
+    jobType :: Prelude.Maybe BatchJobType,
+    -- | The unique identifier of the application that hosts this batch job.
+    applicationId :: Prelude.Text,
+    -- | The unique identifier of this execution of the batch job.
+    executionId :: Prelude.Text,
+    -- | The timestamp when a particular batch job execution started.
+    startTime :: Data.POSIX,
+    -- | The status of a particular batch job execution.
+    status :: BatchJobExecutionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchJobExecutionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'batchJobExecutionSummary_endTime' - The timestamp when this batch job execution ended.
+--
+-- 'jobId', 'batchJobExecutionSummary_jobId' - The unique identifier of a particular batch job.
+--
+-- 'jobName', 'batchJobExecutionSummary_jobName' - The name of a particular batch job.
+--
+-- 'jobType', 'batchJobExecutionSummary_jobType' - The type of a particular batch job execution.
+--
+-- 'applicationId', 'batchJobExecutionSummary_applicationId' - The unique identifier of the application that hosts this batch job.
+--
+-- 'executionId', 'batchJobExecutionSummary_executionId' - The unique identifier of this execution of the batch job.
+--
+-- 'startTime', 'batchJobExecutionSummary_startTime' - The timestamp when a particular batch job execution started.
+--
+-- 'status', 'batchJobExecutionSummary_status' - The status of a particular batch job execution.
+newBatchJobExecutionSummary ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'executionId'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'status'
+  BatchJobExecutionStatus ->
+  BatchJobExecutionSummary
+newBatchJobExecutionSummary
+  pApplicationId_
+  pExecutionId_
+  pStartTime_
+  pStatus_ =
+    BatchJobExecutionSummary'
+      { endTime =
+          Prelude.Nothing,
+        jobId = Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        jobType = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        executionId = pExecutionId_,
+        startTime = Data._Time Lens.# pStartTime_,
+        status = pStatus_
+      }
+
+-- | The timestamp when this batch job execution ended.
+batchJobExecutionSummary_endTime :: Lens.Lens' BatchJobExecutionSummary (Prelude.Maybe Prelude.UTCTime)
+batchJobExecutionSummary_endTime = Lens.lens (\BatchJobExecutionSummary' {endTime} -> endTime) (\s@BatchJobExecutionSummary' {} a -> s {endTime = a} :: BatchJobExecutionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of a particular batch job.
+batchJobExecutionSummary_jobId :: Lens.Lens' BatchJobExecutionSummary (Prelude.Maybe Prelude.Text)
+batchJobExecutionSummary_jobId = Lens.lens (\BatchJobExecutionSummary' {jobId} -> jobId) (\s@BatchJobExecutionSummary' {} a -> s {jobId = a} :: BatchJobExecutionSummary)
+
+-- | The name of a particular batch job.
+batchJobExecutionSummary_jobName :: Lens.Lens' BatchJobExecutionSummary (Prelude.Maybe Prelude.Text)
+batchJobExecutionSummary_jobName = Lens.lens (\BatchJobExecutionSummary' {jobName} -> jobName) (\s@BatchJobExecutionSummary' {} a -> s {jobName = a} :: BatchJobExecutionSummary)
+
+-- | The type of a particular batch job execution.
+batchJobExecutionSummary_jobType :: Lens.Lens' BatchJobExecutionSummary (Prelude.Maybe BatchJobType)
+batchJobExecutionSummary_jobType = Lens.lens (\BatchJobExecutionSummary' {jobType} -> jobType) (\s@BatchJobExecutionSummary' {} a -> s {jobType = a} :: BatchJobExecutionSummary)
+
+-- | The unique identifier of the application that hosts this batch job.
+batchJobExecutionSummary_applicationId :: Lens.Lens' BatchJobExecutionSummary Prelude.Text
+batchJobExecutionSummary_applicationId = Lens.lens (\BatchJobExecutionSummary' {applicationId} -> applicationId) (\s@BatchJobExecutionSummary' {} a -> s {applicationId = a} :: BatchJobExecutionSummary)
+
+-- | The unique identifier of this execution of the batch job.
+batchJobExecutionSummary_executionId :: Lens.Lens' BatchJobExecutionSummary Prelude.Text
+batchJobExecutionSummary_executionId = Lens.lens (\BatchJobExecutionSummary' {executionId} -> executionId) (\s@BatchJobExecutionSummary' {} a -> s {executionId = a} :: BatchJobExecutionSummary)
+
+-- | The timestamp when a particular batch job execution started.
+batchJobExecutionSummary_startTime :: Lens.Lens' BatchJobExecutionSummary Prelude.UTCTime
+batchJobExecutionSummary_startTime = Lens.lens (\BatchJobExecutionSummary' {startTime} -> startTime) (\s@BatchJobExecutionSummary' {} a -> s {startTime = a} :: BatchJobExecutionSummary) Prelude.. Data._Time
+
+-- | The status of a particular batch job execution.
+batchJobExecutionSummary_status :: Lens.Lens' BatchJobExecutionSummary BatchJobExecutionStatus
+batchJobExecutionSummary_status = Lens.lens (\BatchJobExecutionSummary' {status} -> status) (\s@BatchJobExecutionSummary' {} a -> s {status = a} :: BatchJobExecutionSummary)
+
+instance Data.FromJSON BatchJobExecutionSummary where
+  parseJSON =
+    Data.withObject
+      "BatchJobExecutionSummary"
+      ( \x ->
+          BatchJobExecutionSummary'
+            Prelude.<$> (x Data..:? "endTime")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "jobName")
+            Prelude.<*> (x Data..:? "jobType")
+            Prelude.<*> (x Data..: "applicationId")
+            Prelude.<*> (x Data..: "executionId")
+            Prelude.<*> (x Data..: "startTime")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable BatchJobExecutionSummary where
+  hashWithSalt _salt BatchJobExecutionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` executionId
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData BatchJobExecutionSummary where
+  rnf BatchJobExecutionSummary' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf executionId
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/Types/BatchJobIdentifier.hs b/gen/Amazonka/M2/Types/BatchJobIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/BatchJobIdentifier.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.BatchJobIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.BatchJobIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.FileBatchJobIdentifier
+import Amazonka.M2.Types.ScriptBatchJobIdentifier
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies a specific batch job.
+--
+-- /See:/ 'newBatchJobIdentifier' smart constructor.
+data BatchJobIdentifier = BatchJobIdentifier'
+  { -- | Specifies a file associated with a specific batch job.
+    fileBatchJobIdentifier :: Prelude.Maybe FileBatchJobIdentifier,
+    -- | A batch job identifier in which the batch job to run is identified by
+    -- the script name.
+    scriptBatchJobIdentifier :: Prelude.Maybe ScriptBatchJobIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchJobIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileBatchJobIdentifier', 'batchJobIdentifier_fileBatchJobIdentifier' - Specifies a file associated with a specific batch job.
+--
+-- 'scriptBatchJobIdentifier', 'batchJobIdentifier_scriptBatchJobIdentifier' - A batch job identifier in which the batch job to run is identified by
+-- the script name.
+newBatchJobIdentifier ::
+  BatchJobIdentifier
+newBatchJobIdentifier =
+  BatchJobIdentifier'
+    { fileBatchJobIdentifier =
+        Prelude.Nothing,
+      scriptBatchJobIdentifier = Prelude.Nothing
+    }
+
+-- | Specifies a file associated with a specific batch job.
+batchJobIdentifier_fileBatchJobIdentifier :: Lens.Lens' BatchJobIdentifier (Prelude.Maybe FileBatchJobIdentifier)
+batchJobIdentifier_fileBatchJobIdentifier = Lens.lens (\BatchJobIdentifier' {fileBatchJobIdentifier} -> fileBatchJobIdentifier) (\s@BatchJobIdentifier' {} a -> s {fileBatchJobIdentifier = a} :: BatchJobIdentifier)
+
+-- | A batch job identifier in which the batch job to run is identified by
+-- the script name.
+batchJobIdentifier_scriptBatchJobIdentifier :: Lens.Lens' BatchJobIdentifier (Prelude.Maybe ScriptBatchJobIdentifier)
+batchJobIdentifier_scriptBatchJobIdentifier = Lens.lens (\BatchJobIdentifier' {scriptBatchJobIdentifier} -> scriptBatchJobIdentifier) (\s@BatchJobIdentifier' {} a -> s {scriptBatchJobIdentifier = a} :: BatchJobIdentifier)
+
+instance Prelude.Hashable BatchJobIdentifier where
+  hashWithSalt _salt BatchJobIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileBatchJobIdentifier
+      `Prelude.hashWithSalt` scriptBatchJobIdentifier
+
+instance Prelude.NFData BatchJobIdentifier where
+  rnf BatchJobIdentifier' {..} =
+    Prelude.rnf fileBatchJobIdentifier
+      `Prelude.seq` Prelude.rnf scriptBatchJobIdentifier
+
+instance Data.ToJSON BatchJobIdentifier where
+  toJSON BatchJobIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("fileBatchJobIdentifier" Data..=)
+              Prelude.<$> fileBatchJobIdentifier,
+            ("scriptBatchJobIdentifier" Data..=)
+              Prelude.<$> scriptBatchJobIdentifier
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/BatchJobType.hs b/gen/Amazonka/M2/Types/BatchJobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/BatchJobType.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.M2.Types.BatchJobType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.BatchJobType
+  ( BatchJobType
+      ( ..,
+        BatchJobType_JES2,
+        BatchJobType_JES3,
+        BatchJobType_VSE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BatchJobType = BatchJobType'
+  { fromBatchJobType ::
+      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 BatchJobType_JES2 :: BatchJobType
+pattern BatchJobType_JES2 = BatchJobType' "JES2"
+
+pattern BatchJobType_JES3 :: BatchJobType
+pattern BatchJobType_JES3 = BatchJobType' "JES3"
+
+pattern BatchJobType_VSE :: BatchJobType
+pattern BatchJobType_VSE = BatchJobType' "VSE"
+
+{-# COMPLETE
+  BatchJobType_JES2,
+  BatchJobType_JES3,
+  BatchJobType_VSE,
+  BatchJobType'
+  #-}
diff --git a/gen/Amazonka/M2/Types/DataSet.hs b/gen/Amazonka/M2/Types/DataSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSet.hs
@@ -0,0 +1,136 @@
+{-# 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.M2.Types.DataSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSet where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.DatasetOrgAttributes
+import Amazonka.M2.Types.RecordLength
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines a data set.
+--
+-- /See:/ 'newDataSet' smart constructor.
+data DataSet = DataSet'
+  { -- | The relative location of the data set in the database or file system.
+    relativePath :: Prelude.Maybe Prelude.Text,
+    -- | The storage type of the data set: database or file system. For Micro
+    -- Focus, database corresponds to datastore and file system corresponds to
+    -- EFS\/FSX. For Blu Age, there is no support of file system and database
+    -- corresponds to Blusam.
+    storageType :: Prelude.Maybe Prelude.Text,
+    -- | The logical identifier for a specific data set (in mainframe format).
+    datasetName :: Prelude.Text,
+    -- | The type of dataset. The only supported value is VSAM.
+    datasetOrg :: DatasetOrgAttributes,
+    -- | The length of a record.
+    recordLength :: RecordLength
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'relativePath', 'dataSet_relativePath' - The relative location of the data set in the database or file system.
+--
+-- 'storageType', 'dataSet_storageType' - The storage type of the data set: database or file system. For Micro
+-- Focus, database corresponds to datastore and file system corresponds to
+-- EFS\/FSX. For Blu Age, there is no support of file system and database
+-- corresponds to Blusam.
+--
+-- 'datasetName', 'dataSet_datasetName' - The logical identifier for a specific data set (in mainframe format).
+--
+-- 'datasetOrg', 'dataSet_datasetOrg' - The type of dataset. The only supported value is VSAM.
+--
+-- 'recordLength', 'dataSet_recordLength' - The length of a record.
+newDataSet ::
+  -- | 'datasetName'
+  Prelude.Text ->
+  -- | 'datasetOrg'
+  DatasetOrgAttributes ->
+  -- | 'recordLength'
+  RecordLength ->
+  DataSet
+newDataSet pDatasetName_ pDatasetOrg_ pRecordLength_ =
+  DataSet'
+    { relativePath = Prelude.Nothing,
+      storageType = Prelude.Nothing,
+      datasetName = pDatasetName_,
+      datasetOrg = pDatasetOrg_,
+      recordLength = pRecordLength_
+    }
+
+-- | The relative location of the data set in the database or file system.
+dataSet_relativePath :: Lens.Lens' DataSet (Prelude.Maybe Prelude.Text)
+dataSet_relativePath = Lens.lens (\DataSet' {relativePath} -> relativePath) (\s@DataSet' {} a -> s {relativePath = a} :: DataSet)
+
+-- | The storage type of the data set: database or file system. For Micro
+-- Focus, database corresponds to datastore and file system corresponds to
+-- EFS\/FSX. For Blu Age, there is no support of file system and database
+-- corresponds to Blusam.
+dataSet_storageType :: Lens.Lens' DataSet (Prelude.Maybe Prelude.Text)
+dataSet_storageType = Lens.lens (\DataSet' {storageType} -> storageType) (\s@DataSet' {} a -> s {storageType = a} :: DataSet)
+
+-- | The logical identifier for a specific data set (in mainframe format).
+dataSet_datasetName :: Lens.Lens' DataSet Prelude.Text
+dataSet_datasetName = Lens.lens (\DataSet' {datasetName} -> datasetName) (\s@DataSet' {} a -> s {datasetName = a} :: DataSet)
+
+-- | The type of dataset. The only supported value is VSAM.
+dataSet_datasetOrg :: Lens.Lens' DataSet DatasetOrgAttributes
+dataSet_datasetOrg = Lens.lens (\DataSet' {datasetOrg} -> datasetOrg) (\s@DataSet' {} a -> s {datasetOrg = a} :: DataSet)
+
+-- | The length of a record.
+dataSet_recordLength :: Lens.Lens' DataSet RecordLength
+dataSet_recordLength = Lens.lens (\DataSet' {recordLength} -> recordLength) (\s@DataSet' {} a -> s {recordLength = a} :: DataSet)
+
+instance Prelude.Hashable DataSet where
+  hashWithSalt _salt DataSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` relativePath
+      `Prelude.hashWithSalt` storageType
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` datasetOrg
+      `Prelude.hashWithSalt` recordLength
+
+instance Prelude.NFData DataSet where
+  rnf DataSet' {..} =
+    Prelude.rnf relativePath
+      `Prelude.seq` Prelude.rnf storageType
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf datasetOrg
+      `Prelude.seq` Prelude.rnf recordLength
+
+instance Data.ToJSON DataSet where
+  toJSON DataSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("relativePath" Data..=) Prelude.<$> relativePath,
+            ("storageType" Data..=) Prelude.<$> storageType,
+            Prelude.Just ("datasetName" Data..= datasetName),
+            Prelude.Just ("datasetOrg" Data..= datasetOrg),
+            Prelude.Just ("recordLength" Data..= recordLength)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/DataSetImportConfig.hs b/gen/Amazonka/M2/Types/DataSetImportConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSetImportConfig.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.M2.Types.DataSetImportConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSetImportConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.DataSetImportItem
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies one or more data sets you want to import with the
+-- CreateDataSetImportTask operation.
+--
+-- /See:/ 'newDataSetImportConfig' smart constructor.
+data DataSetImportConfig = DataSetImportConfig'
+  { -- | The data sets.
+    dataSets :: Prelude.Maybe (Prelude.NonEmpty DataSetImportItem),
+    -- | The Amazon S3 location of the data sets.
+    s3Location :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSetImportConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSets', 'dataSetImportConfig_dataSets' - The data sets.
+--
+-- 's3Location', 'dataSetImportConfig_s3Location' - The Amazon S3 location of the data sets.
+newDataSetImportConfig ::
+  DataSetImportConfig
+newDataSetImportConfig =
+  DataSetImportConfig'
+    { dataSets = Prelude.Nothing,
+      s3Location = Prelude.Nothing
+    }
+
+-- | The data sets.
+dataSetImportConfig_dataSets :: Lens.Lens' DataSetImportConfig (Prelude.Maybe (Prelude.NonEmpty DataSetImportItem))
+dataSetImportConfig_dataSets = Lens.lens (\DataSetImportConfig' {dataSets} -> dataSets) (\s@DataSetImportConfig' {} a -> s {dataSets = a} :: DataSetImportConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon S3 location of the data sets.
+dataSetImportConfig_s3Location :: Lens.Lens' DataSetImportConfig (Prelude.Maybe Prelude.Text)
+dataSetImportConfig_s3Location = Lens.lens (\DataSetImportConfig' {s3Location} -> s3Location) (\s@DataSetImportConfig' {} a -> s {s3Location = a} :: DataSetImportConfig)
+
+instance Prelude.Hashable DataSetImportConfig where
+  hashWithSalt _salt DataSetImportConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSets
+      `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData DataSetImportConfig where
+  rnf DataSetImportConfig' {..} =
+    Prelude.rnf dataSets
+      `Prelude.seq` Prelude.rnf s3Location
+
+instance Data.ToJSON DataSetImportConfig where
+  toJSON DataSetImportConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataSets" Data..=) Prelude.<$> dataSets,
+            ("s3Location" Data..=) Prelude.<$> s3Location
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/DataSetImportItem.hs b/gen/Amazonka/M2/Types/DataSetImportItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSetImportItem.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.DataSetImportItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSetImportItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.DataSet
+import Amazonka.M2.Types.ExternalLocation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies a specific data set to import from an external location.
+--
+-- /See:/ 'newDataSetImportItem' smart constructor.
+data DataSetImportItem = DataSetImportItem'
+  { -- | The data set.
+    dataSet :: DataSet,
+    -- | The location of the data set.
+    externalLocation :: ExternalLocation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSetImportItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSet', 'dataSetImportItem_dataSet' - The data set.
+--
+-- 'externalLocation', 'dataSetImportItem_externalLocation' - The location of the data set.
+newDataSetImportItem ::
+  -- | 'dataSet'
+  DataSet ->
+  -- | 'externalLocation'
+  ExternalLocation ->
+  DataSetImportItem
+newDataSetImportItem pDataSet_ pExternalLocation_ =
+  DataSetImportItem'
+    { dataSet = pDataSet_,
+      externalLocation = pExternalLocation_
+    }
+
+-- | The data set.
+dataSetImportItem_dataSet :: Lens.Lens' DataSetImportItem DataSet
+dataSetImportItem_dataSet = Lens.lens (\DataSetImportItem' {dataSet} -> dataSet) (\s@DataSetImportItem' {} a -> s {dataSet = a} :: DataSetImportItem)
+
+-- | The location of the data set.
+dataSetImportItem_externalLocation :: Lens.Lens' DataSetImportItem ExternalLocation
+dataSetImportItem_externalLocation = Lens.lens (\DataSetImportItem' {externalLocation} -> externalLocation) (\s@DataSetImportItem' {} a -> s {externalLocation = a} :: DataSetImportItem)
+
+instance Prelude.Hashable DataSetImportItem where
+  hashWithSalt _salt DataSetImportItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSet
+      `Prelude.hashWithSalt` externalLocation
+
+instance Prelude.NFData DataSetImportItem where
+  rnf DataSetImportItem' {..} =
+    Prelude.rnf dataSet
+      `Prelude.seq` Prelude.rnf externalLocation
+
+instance Data.ToJSON DataSetImportItem where
+  toJSON DataSetImportItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("dataSet" Data..= dataSet),
+            Prelude.Just
+              ("externalLocation" Data..= externalLocation)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/DataSetImportSummary.hs b/gen/Amazonka/M2/Types/DataSetImportSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSetImportSummary.hs
@@ -0,0 +1,135 @@
+{-# 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.M2.Types.DataSetImportSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSetImportSummary 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
+
+-- | Represents a summary of data set imports.
+--
+-- /See:/ 'newDataSetImportSummary' smart constructor.
+data DataSetImportSummary = DataSetImportSummary'
+  { -- | The number of data set imports that have failed.
+    failed :: Prelude.Int,
+    -- | The number of data set imports that are in progress.
+    inProgress :: Prelude.Int,
+    -- | The number of data set imports that are pending.
+    pending :: Prelude.Int,
+    -- | The number of data set imports that have succeeded.
+    succeeded :: Prelude.Int,
+    -- | The total number of data set imports.
+    total :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSetImportSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failed', 'dataSetImportSummary_failed' - The number of data set imports that have failed.
+--
+-- 'inProgress', 'dataSetImportSummary_inProgress' - The number of data set imports that are in progress.
+--
+-- 'pending', 'dataSetImportSummary_pending' - The number of data set imports that are pending.
+--
+-- 'succeeded', 'dataSetImportSummary_succeeded' - The number of data set imports that have succeeded.
+--
+-- 'total', 'dataSetImportSummary_total' - The total number of data set imports.
+newDataSetImportSummary ::
+  -- | 'failed'
+  Prelude.Int ->
+  -- | 'inProgress'
+  Prelude.Int ->
+  -- | 'pending'
+  Prelude.Int ->
+  -- | 'succeeded'
+  Prelude.Int ->
+  -- | 'total'
+  Prelude.Int ->
+  DataSetImportSummary
+newDataSetImportSummary
+  pFailed_
+  pInProgress_
+  pPending_
+  pSucceeded_
+  pTotal_ =
+    DataSetImportSummary'
+      { failed = pFailed_,
+        inProgress = pInProgress_,
+        pending = pPending_,
+        succeeded = pSucceeded_,
+        total = pTotal_
+      }
+
+-- | The number of data set imports that have failed.
+dataSetImportSummary_failed :: Lens.Lens' DataSetImportSummary Prelude.Int
+dataSetImportSummary_failed = Lens.lens (\DataSetImportSummary' {failed} -> failed) (\s@DataSetImportSummary' {} a -> s {failed = a} :: DataSetImportSummary)
+
+-- | The number of data set imports that are in progress.
+dataSetImportSummary_inProgress :: Lens.Lens' DataSetImportSummary Prelude.Int
+dataSetImportSummary_inProgress = Lens.lens (\DataSetImportSummary' {inProgress} -> inProgress) (\s@DataSetImportSummary' {} a -> s {inProgress = a} :: DataSetImportSummary)
+
+-- | The number of data set imports that are pending.
+dataSetImportSummary_pending :: Lens.Lens' DataSetImportSummary Prelude.Int
+dataSetImportSummary_pending = Lens.lens (\DataSetImportSummary' {pending} -> pending) (\s@DataSetImportSummary' {} a -> s {pending = a} :: DataSetImportSummary)
+
+-- | The number of data set imports that have succeeded.
+dataSetImportSummary_succeeded :: Lens.Lens' DataSetImportSummary Prelude.Int
+dataSetImportSummary_succeeded = Lens.lens (\DataSetImportSummary' {succeeded} -> succeeded) (\s@DataSetImportSummary' {} a -> s {succeeded = a} :: DataSetImportSummary)
+
+-- | The total number of data set imports.
+dataSetImportSummary_total :: Lens.Lens' DataSetImportSummary Prelude.Int
+dataSetImportSummary_total = Lens.lens (\DataSetImportSummary' {total} -> total) (\s@DataSetImportSummary' {} a -> s {total = a} :: DataSetImportSummary)
+
+instance Data.FromJSON DataSetImportSummary where
+  parseJSON =
+    Data.withObject
+      "DataSetImportSummary"
+      ( \x ->
+          DataSetImportSummary'
+            Prelude.<$> (x Data..: "failed")
+            Prelude.<*> (x Data..: "inProgress")
+            Prelude.<*> (x Data..: "pending")
+            Prelude.<*> (x Data..: "succeeded")
+            Prelude.<*> (x Data..: "total")
+      )
+
+instance Prelude.Hashable DataSetImportSummary where
+  hashWithSalt _salt DataSetImportSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` failed
+      `Prelude.hashWithSalt` inProgress
+      `Prelude.hashWithSalt` pending
+      `Prelude.hashWithSalt` succeeded
+      `Prelude.hashWithSalt` total
+
+instance Prelude.NFData DataSetImportSummary where
+  rnf DataSetImportSummary' {..} =
+    Prelude.rnf failed
+      `Prelude.seq` Prelude.rnf inProgress
+      `Prelude.seq` Prelude.rnf pending
+      `Prelude.seq` Prelude.rnf succeeded
+      `Prelude.seq` Prelude.rnf total
diff --git a/gen/Amazonka/M2/Types/DataSetImportTask.hs b/gen/Amazonka/M2/Types/DataSetImportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSetImportTask.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.DataSetImportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSetImportTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.DataSetImportSummary
+import Amazonka.M2.Types.DataSetTaskLifecycle
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about a data set import task.
+--
+-- /See:/ 'newDataSetImportTask' smart constructor.
+data DataSetImportTask = DataSetImportTask'
+  { -- | The status of the data set import task.
+    status :: DataSetTaskLifecycle,
+    -- | A summary of the data set import task.
+    summary :: DataSetImportSummary,
+    -- | The identifier of the data set import task.
+    taskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSetImportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'dataSetImportTask_status' - The status of the data set import task.
+--
+-- 'summary', 'dataSetImportTask_summary' - A summary of the data set import task.
+--
+-- 'taskId', 'dataSetImportTask_taskId' - The identifier of the data set import task.
+newDataSetImportTask ::
+  -- | 'status'
+  DataSetTaskLifecycle ->
+  -- | 'summary'
+  DataSetImportSummary ->
+  -- | 'taskId'
+  Prelude.Text ->
+  DataSetImportTask
+newDataSetImportTask pStatus_ pSummary_ pTaskId_ =
+  DataSetImportTask'
+    { status = pStatus_,
+      summary = pSummary_,
+      taskId = pTaskId_
+    }
+
+-- | The status of the data set import task.
+dataSetImportTask_status :: Lens.Lens' DataSetImportTask DataSetTaskLifecycle
+dataSetImportTask_status = Lens.lens (\DataSetImportTask' {status} -> status) (\s@DataSetImportTask' {} a -> s {status = a} :: DataSetImportTask)
+
+-- | A summary of the data set import task.
+dataSetImportTask_summary :: Lens.Lens' DataSetImportTask DataSetImportSummary
+dataSetImportTask_summary = Lens.lens (\DataSetImportTask' {summary} -> summary) (\s@DataSetImportTask' {} a -> s {summary = a} :: DataSetImportTask)
+
+-- | The identifier of the data set import task.
+dataSetImportTask_taskId :: Lens.Lens' DataSetImportTask Prelude.Text
+dataSetImportTask_taskId = Lens.lens (\DataSetImportTask' {taskId} -> taskId) (\s@DataSetImportTask' {} a -> s {taskId = a} :: DataSetImportTask)
+
+instance Data.FromJSON DataSetImportTask where
+  parseJSON =
+    Data.withObject
+      "DataSetImportTask"
+      ( \x ->
+          DataSetImportTask'
+            Prelude.<$> (x Data..: "status")
+            Prelude.<*> (x Data..: "summary")
+            Prelude.<*> (x Data..: "taskId")
+      )
+
+instance Prelude.Hashable DataSetImportTask where
+  hashWithSalt _salt DataSetImportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` summary
+      `Prelude.hashWithSalt` taskId
+
+instance Prelude.NFData DataSetImportTask where
+  rnf DataSetImportTask' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf summary
+      `Prelude.seq` Prelude.rnf taskId
diff --git a/gen/Amazonka/M2/Types/DataSetSummary.hs b/gen/Amazonka/M2/Types/DataSetSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSetSummary.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.DataSetSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSetSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A subset of the possible data set attributes.
+--
+-- /See:/ 'newDataSetSummary' smart constructor.
+data DataSetSummary = DataSetSummary'
+  { -- | The timestamp when the data set was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The type of data set. The only supported value is VSAM.
+    dataSetOrg :: Prelude.Maybe Prelude.Text,
+    -- | The format of the data set.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The last time the data set was referenced.
+    lastReferencedTime :: Prelude.Maybe Data.POSIX,
+    -- | The last time the data set was updated.
+    lastUpdatedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the data set.
+    dataSetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSetSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'dataSetSummary_creationTime' - The timestamp when the data set was created.
+--
+-- 'dataSetOrg', 'dataSetSummary_dataSetOrg' - The type of data set. The only supported value is VSAM.
+--
+-- 'format', 'dataSetSummary_format' - The format of the data set.
+--
+-- 'lastReferencedTime', 'dataSetSummary_lastReferencedTime' - The last time the data set was referenced.
+--
+-- 'lastUpdatedTime', 'dataSetSummary_lastUpdatedTime' - The last time the data set was updated.
+--
+-- 'dataSetName', 'dataSetSummary_dataSetName' - The name of the data set.
+newDataSetSummary ::
+  -- | 'dataSetName'
+  Prelude.Text ->
+  DataSetSummary
+newDataSetSummary pDataSetName_ =
+  DataSetSummary'
+    { creationTime = Prelude.Nothing,
+      dataSetOrg = Prelude.Nothing,
+      format = Prelude.Nothing,
+      lastReferencedTime = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      dataSetName = pDataSetName_
+    }
+
+-- | The timestamp when the data set was created.
+dataSetSummary_creationTime :: Lens.Lens' DataSetSummary (Prelude.Maybe Prelude.UTCTime)
+dataSetSummary_creationTime = Lens.lens (\DataSetSummary' {creationTime} -> creationTime) (\s@DataSetSummary' {} a -> s {creationTime = a} :: DataSetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The type of data set. The only supported value is VSAM.
+dataSetSummary_dataSetOrg :: Lens.Lens' DataSetSummary (Prelude.Maybe Prelude.Text)
+dataSetSummary_dataSetOrg = Lens.lens (\DataSetSummary' {dataSetOrg} -> dataSetOrg) (\s@DataSetSummary' {} a -> s {dataSetOrg = a} :: DataSetSummary)
+
+-- | The format of the data set.
+dataSetSummary_format :: Lens.Lens' DataSetSummary (Prelude.Maybe Prelude.Text)
+dataSetSummary_format = Lens.lens (\DataSetSummary' {format} -> format) (\s@DataSetSummary' {} a -> s {format = a} :: DataSetSummary)
+
+-- | The last time the data set was referenced.
+dataSetSummary_lastReferencedTime :: Lens.Lens' DataSetSummary (Prelude.Maybe Prelude.UTCTime)
+dataSetSummary_lastReferencedTime = Lens.lens (\DataSetSummary' {lastReferencedTime} -> lastReferencedTime) (\s@DataSetSummary' {} a -> s {lastReferencedTime = a} :: DataSetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The last time the data set was updated.
+dataSetSummary_lastUpdatedTime :: Lens.Lens' DataSetSummary (Prelude.Maybe Prelude.UTCTime)
+dataSetSummary_lastUpdatedTime = Lens.lens (\DataSetSummary' {lastUpdatedTime} -> lastUpdatedTime) (\s@DataSetSummary' {} a -> s {lastUpdatedTime = a} :: DataSetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the data set.
+dataSetSummary_dataSetName :: Lens.Lens' DataSetSummary Prelude.Text
+dataSetSummary_dataSetName = Lens.lens (\DataSetSummary' {dataSetName} -> dataSetName) (\s@DataSetSummary' {} a -> s {dataSetName = a} :: DataSetSummary)
+
+instance Data.FromJSON DataSetSummary where
+  parseJSON =
+    Data.withObject
+      "DataSetSummary"
+      ( \x ->
+          DataSetSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "dataSetOrg")
+            Prelude.<*> (x Data..:? "format")
+            Prelude.<*> (x Data..:? "lastReferencedTime")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..: "dataSetName")
+      )
+
+instance Prelude.Hashable DataSetSummary where
+  hashWithSalt _salt DataSetSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` dataSetOrg
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` lastReferencedTime
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` dataSetName
+
+instance Prelude.NFData DataSetSummary where
+  rnf DataSetSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataSetOrg
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf lastReferencedTime
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf dataSetName
diff --git a/gen/Amazonka/M2/Types/DataSetTaskLifecycle.hs b/gen/Amazonka/M2/Types/DataSetTaskLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DataSetTaskLifecycle.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.M2.Types.DataSetTaskLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DataSetTaskLifecycle
+  ( DataSetTaskLifecycle
+      ( ..,
+        DataSetTaskLifecycle_Completed,
+        DataSetTaskLifecycle_Creating,
+        DataSetTaskLifecycle_Running
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataSetTaskLifecycle = DataSetTaskLifecycle'
+  { fromDataSetTaskLifecycle ::
+      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 DataSetTaskLifecycle_Completed :: DataSetTaskLifecycle
+pattern DataSetTaskLifecycle_Completed = DataSetTaskLifecycle' "Completed"
+
+pattern DataSetTaskLifecycle_Creating :: DataSetTaskLifecycle
+pattern DataSetTaskLifecycle_Creating = DataSetTaskLifecycle' "Creating"
+
+pattern DataSetTaskLifecycle_Running :: DataSetTaskLifecycle
+pattern DataSetTaskLifecycle_Running = DataSetTaskLifecycle' "Running"
+
+{-# COMPLETE
+  DataSetTaskLifecycle_Completed,
+  DataSetTaskLifecycle_Creating,
+  DataSetTaskLifecycle_Running,
+  DataSetTaskLifecycle'
+  #-}
diff --git a/gen/Amazonka/M2/Types/DatasetDetailOrgAttributes.hs b/gen/Amazonka/M2/Types/DatasetDetailOrgAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DatasetDetailOrgAttributes.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.M2.Types.DatasetDetailOrgAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DatasetDetailOrgAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.GdgDetailAttributes
+import Amazonka.M2.Types.VsamDetailAttributes
+import qualified Amazonka.Prelude as Prelude
+
+-- | Additional details about the data set. Different attributes correspond
+-- to different data set organizations. The values are populated based on
+-- datasetOrg, storageType and backend (Blu Age or Micro Focus).
+--
+-- /See:/ 'newDatasetDetailOrgAttributes' smart constructor.
+data DatasetDetailOrgAttributes = DatasetDetailOrgAttributes'
+  { -- | The generation data group of the data set.
+    gdg :: Prelude.Maybe GdgDetailAttributes,
+    -- | The details of a VSAM data set.
+    vsam :: Prelude.Maybe VsamDetailAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatasetDetailOrgAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gdg', 'datasetDetailOrgAttributes_gdg' - The generation data group of the data set.
+--
+-- 'vsam', 'datasetDetailOrgAttributes_vsam' - The details of a VSAM data set.
+newDatasetDetailOrgAttributes ::
+  DatasetDetailOrgAttributes
+newDatasetDetailOrgAttributes =
+  DatasetDetailOrgAttributes'
+    { gdg = Prelude.Nothing,
+      vsam = Prelude.Nothing
+    }
+
+-- | The generation data group of the data set.
+datasetDetailOrgAttributes_gdg :: Lens.Lens' DatasetDetailOrgAttributes (Prelude.Maybe GdgDetailAttributes)
+datasetDetailOrgAttributes_gdg = Lens.lens (\DatasetDetailOrgAttributes' {gdg} -> gdg) (\s@DatasetDetailOrgAttributes' {} a -> s {gdg = a} :: DatasetDetailOrgAttributes)
+
+-- | The details of a VSAM data set.
+datasetDetailOrgAttributes_vsam :: Lens.Lens' DatasetDetailOrgAttributes (Prelude.Maybe VsamDetailAttributes)
+datasetDetailOrgAttributes_vsam = Lens.lens (\DatasetDetailOrgAttributes' {vsam} -> vsam) (\s@DatasetDetailOrgAttributes' {} a -> s {vsam = a} :: DatasetDetailOrgAttributes)
+
+instance Data.FromJSON DatasetDetailOrgAttributes where
+  parseJSON =
+    Data.withObject
+      "DatasetDetailOrgAttributes"
+      ( \x ->
+          DatasetDetailOrgAttributes'
+            Prelude.<$> (x Data..:? "gdg")
+            Prelude.<*> (x Data..:? "vsam")
+      )
+
+instance Prelude.Hashable DatasetDetailOrgAttributes where
+  hashWithSalt _salt DatasetDetailOrgAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` gdg
+      `Prelude.hashWithSalt` vsam
+
+instance Prelude.NFData DatasetDetailOrgAttributes where
+  rnf DatasetDetailOrgAttributes' {..} =
+    Prelude.rnf gdg `Prelude.seq` Prelude.rnf vsam
diff --git a/gen/Amazonka/M2/Types/DatasetOrgAttributes.hs b/gen/Amazonka/M2/Types/DatasetOrgAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DatasetOrgAttributes.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.M2.Types.DatasetOrgAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DatasetOrgAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.GdgAttributes
+import Amazonka.M2.Types.VsamAttributes
+import qualified Amazonka.Prelude as Prelude
+
+-- | Additional details about the data set. Different attributes correspond
+-- to different data set organizations. The values are populated based on
+-- datasetOrg, storageType and backend (Blu Age or Micro Focus).
+--
+-- /See:/ 'newDatasetOrgAttributes' smart constructor.
+data DatasetOrgAttributes = DatasetOrgAttributes'
+  { -- | The generation data group of the data set.
+    gdg :: Prelude.Maybe GdgAttributes,
+    -- | The details of a VSAM data set.
+    vsam :: Prelude.Maybe VsamAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatasetOrgAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gdg', 'datasetOrgAttributes_gdg' - The generation data group of the data set.
+--
+-- 'vsam', 'datasetOrgAttributes_vsam' - The details of a VSAM data set.
+newDatasetOrgAttributes ::
+  DatasetOrgAttributes
+newDatasetOrgAttributes =
+  DatasetOrgAttributes'
+    { gdg = Prelude.Nothing,
+      vsam = Prelude.Nothing
+    }
+
+-- | The generation data group of the data set.
+datasetOrgAttributes_gdg :: Lens.Lens' DatasetOrgAttributes (Prelude.Maybe GdgAttributes)
+datasetOrgAttributes_gdg = Lens.lens (\DatasetOrgAttributes' {gdg} -> gdg) (\s@DatasetOrgAttributes' {} a -> s {gdg = a} :: DatasetOrgAttributes)
+
+-- | The details of a VSAM data set.
+datasetOrgAttributes_vsam :: Lens.Lens' DatasetOrgAttributes (Prelude.Maybe VsamAttributes)
+datasetOrgAttributes_vsam = Lens.lens (\DatasetOrgAttributes' {vsam} -> vsam) (\s@DatasetOrgAttributes' {} a -> s {vsam = a} :: DatasetOrgAttributes)
+
+instance Prelude.Hashable DatasetOrgAttributes where
+  hashWithSalt _salt DatasetOrgAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` gdg
+      `Prelude.hashWithSalt` vsam
+
+instance Prelude.NFData DatasetOrgAttributes where
+  rnf DatasetOrgAttributes' {..} =
+    Prelude.rnf gdg `Prelude.seq` Prelude.rnf vsam
+
+instance Data.ToJSON DatasetOrgAttributes where
+  toJSON DatasetOrgAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("gdg" Data..=) Prelude.<$> gdg,
+            ("vsam" Data..=) Prelude.<$> vsam
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/Definition.hs b/gen/Amazonka/M2/Types/Definition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/Definition.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.M2.Types.Definition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.Definition 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 application definition for a particular application.
+--
+-- /See:/ 'newDefinition' smart constructor.
+data Definition = Definition'
+  { -- | The content of the application definition. This is a JSON object that
+    -- contains the resource configuration\/definitions that identify an
+    -- application.
+    content :: Prelude.Maybe Prelude.Text,
+    -- | The S3 bucket that contains the application definition.
+    s3Location :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Definition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'definition_content' - The content of the application definition. This is a JSON object that
+-- contains the resource configuration\/definitions that identify an
+-- application.
+--
+-- 's3Location', 'definition_s3Location' - The S3 bucket that contains the application definition.
+newDefinition ::
+  Definition
+newDefinition =
+  Definition'
+    { content = Prelude.Nothing,
+      s3Location = Prelude.Nothing
+    }
+
+-- | The content of the application definition. This is a JSON object that
+-- contains the resource configuration\/definitions that identify an
+-- application.
+definition_content :: Lens.Lens' Definition (Prelude.Maybe Prelude.Text)
+definition_content = Lens.lens (\Definition' {content} -> content) (\s@Definition' {} a -> s {content = a} :: Definition)
+
+-- | The S3 bucket that contains the application definition.
+definition_s3Location :: Lens.Lens' Definition (Prelude.Maybe Prelude.Text)
+definition_s3Location = Lens.lens (\Definition' {s3Location} -> s3Location) (\s@Definition' {} a -> s {s3Location = a} :: Definition)
+
+instance Prelude.Hashable Definition where
+  hashWithSalt _salt Definition' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData Definition where
+  rnf Definition' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf s3Location
+
+instance Data.ToJSON Definition where
+  toJSON Definition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("content" Data..=) Prelude.<$> content,
+            ("s3Location" Data..=) Prelude.<$> s3Location
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/DeployedVersionSummary.hs b/gen/Amazonka/M2/Types/DeployedVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DeployedVersionSummary.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.DeployedVersionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DeployedVersionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.DeploymentLifecycle
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a summary of a deployed application.
+--
+-- /See:/ 'newDeployedVersionSummary' smart constructor.
+data DeployedVersionSummary = DeployedVersionSummary'
+  { -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The version of the deployed application.
+    applicationVersion :: Prelude.Natural,
+    -- | The status of the deployment.
+    status :: DeploymentLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeployedVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statusReason', 'deployedVersionSummary_statusReason' - The reason for the reported status.
+--
+-- 'applicationVersion', 'deployedVersionSummary_applicationVersion' - The version of the deployed application.
+--
+-- 'status', 'deployedVersionSummary_status' - The status of the deployment.
+newDeployedVersionSummary ::
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'status'
+  DeploymentLifecycle ->
+  DeployedVersionSummary
+newDeployedVersionSummary
+  pApplicationVersion_
+  pStatus_ =
+    DeployedVersionSummary'
+      { statusReason =
+          Prelude.Nothing,
+        applicationVersion = pApplicationVersion_,
+        status = pStatus_
+      }
+
+-- | The reason for the reported status.
+deployedVersionSummary_statusReason :: Lens.Lens' DeployedVersionSummary (Prelude.Maybe Prelude.Text)
+deployedVersionSummary_statusReason = Lens.lens (\DeployedVersionSummary' {statusReason} -> statusReason) (\s@DeployedVersionSummary' {} a -> s {statusReason = a} :: DeployedVersionSummary)
+
+-- | The version of the deployed application.
+deployedVersionSummary_applicationVersion :: Lens.Lens' DeployedVersionSummary Prelude.Natural
+deployedVersionSummary_applicationVersion = Lens.lens (\DeployedVersionSummary' {applicationVersion} -> applicationVersion) (\s@DeployedVersionSummary' {} a -> s {applicationVersion = a} :: DeployedVersionSummary)
+
+-- | The status of the deployment.
+deployedVersionSummary_status :: Lens.Lens' DeployedVersionSummary DeploymentLifecycle
+deployedVersionSummary_status = Lens.lens (\DeployedVersionSummary' {status} -> status) (\s@DeployedVersionSummary' {} a -> s {status = a} :: DeployedVersionSummary)
+
+instance Data.FromJSON DeployedVersionSummary where
+  parseJSON =
+    Data.withObject
+      "DeployedVersionSummary"
+      ( \x ->
+          DeployedVersionSummary'
+            Prelude.<$> (x Data..:? "statusReason")
+            Prelude.<*> (x Data..: "applicationVersion")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable DeployedVersionSummary where
+  hashWithSalt _salt DeployedVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` statusReason
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DeployedVersionSummary where
+  rnf DeployedVersionSummary' {..} =
+    Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/Types/DeploymentLifecycle.hs b/gen/Amazonka/M2/Types/DeploymentLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DeploymentLifecycle.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.M2.Types.DeploymentLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DeploymentLifecycle
+  ( DeploymentLifecycle
+      ( ..,
+        DeploymentLifecycle_Deploying,
+        DeploymentLifecycle_Failed,
+        DeploymentLifecycle_Succeeded
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeploymentLifecycle = DeploymentLifecycle'
+  { fromDeploymentLifecycle ::
+      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 DeploymentLifecycle_Deploying :: DeploymentLifecycle
+pattern DeploymentLifecycle_Deploying = DeploymentLifecycle' "Deploying"
+
+pattern DeploymentLifecycle_Failed :: DeploymentLifecycle
+pattern DeploymentLifecycle_Failed = DeploymentLifecycle' "Failed"
+
+pattern DeploymentLifecycle_Succeeded :: DeploymentLifecycle
+pattern DeploymentLifecycle_Succeeded = DeploymentLifecycle' "Succeeded"
+
+{-# COMPLETE
+  DeploymentLifecycle_Deploying,
+  DeploymentLifecycle_Failed,
+  DeploymentLifecycle_Succeeded,
+  DeploymentLifecycle'
+  #-}
diff --git a/gen/Amazonka/M2/Types/DeploymentSummary.hs b/gen/Amazonka/M2/Types/DeploymentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/DeploymentSummary.hs
@@ -0,0 +1,163 @@
+{-# 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.M2.Types.DeploymentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.DeploymentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.DeploymentLifecycle
+import qualified Amazonka.Prelude as Prelude
+
+-- | A subset of information about a specific deployment.
+--
+-- /See:/ 'newDeploymentSummary' smart constructor.
+data DeploymentSummary = DeploymentSummary'
+  { -- | The reason for the reported status.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the application.
+    applicationId :: Prelude.Text,
+    -- | The version of the application.
+    applicationVersion :: Prelude.Natural,
+    -- | The timestamp when the deployment was created.
+    creationTime :: Data.POSIX,
+    -- | The unique identifier of the deployment.
+    deploymentId :: Prelude.Text,
+    -- | The unique identifier of the runtime environment.
+    environmentId :: Prelude.Text,
+    -- | The current status of the deployment.
+    status :: DeploymentLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeploymentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statusReason', 'deploymentSummary_statusReason' - The reason for the reported status.
+--
+-- 'applicationId', 'deploymentSummary_applicationId' - The unique identifier of the application.
+--
+-- 'applicationVersion', 'deploymentSummary_applicationVersion' - The version of the application.
+--
+-- 'creationTime', 'deploymentSummary_creationTime' - The timestamp when the deployment was created.
+--
+-- 'deploymentId', 'deploymentSummary_deploymentId' - The unique identifier of the deployment.
+--
+-- 'environmentId', 'deploymentSummary_environmentId' - The unique identifier of the runtime environment.
+--
+-- 'status', 'deploymentSummary_status' - The current status of the deployment.
+newDeploymentSummary ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'status'
+  DeploymentLifecycle ->
+  DeploymentSummary
+newDeploymentSummary
+  pApplicationId_
+  pApplicationVersion_
+  pCreationTime_
+  pDeploymentId_
+  pEnvironmentId_
+  pStatus_ =
+    DeploymentSummary'
+      { statusReason = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        applicationVersion = pApplicationVersion_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        deploymentId = pDeploymentId_,
+        environmentId = pEnvironmentId_,
+        status = pStatus_
+      }
+
+-- | The reason for the reported status.
+deploymentSummary_statusReason :: Lens.Lens' DeploymentSummary (Prelude.Maybe Prelude.Text)
+deploymentSummary_statusReason = Lens.lens (\DeploymentSummary' {statusReason} -> statusReason) (\s@DeploymentSummary' {} a -> s {statusReason = a} :: DeploymentSummary)
+
+-- | The unique identifier of the application.
+deploymentSummary_applicationId :: Lens.Lens' DeploymentSummary Prelude.Text
+deploymentSummary_applicationId = Lens.lens (\DeploymentSummary' {applicationId} -> applicationId) (\s@DeploymentSummary' {} a -> s {applicationId = a} :: DeploymentSummary)
+
+-- | The version of the application.
+deploymentSummary_applicationVersion :: Lens.Lens' DeploymentSummary Prelude.Natural
+deploymentSummary_applicationVersion = Lens.lens (\DeploymentSummary' {applicationVersion} -> applicationVersion) (\s@DeploymentSummary' {} a -> s {applicationVersion = a} :: DeploymentSummary)
+
+-- | The timestamp when the deployment was created.
+deploymentSummary_creationTime :: Lens.Lens' DeploymentSummary Prelude.UTCTime
+deploymentSummary_creationTime = Lens.lens (\DeploymentSummary' {creationTime} -> creationTime) (\s@DeploymentSummary' {} a -> s {creationTime = a} :: DeploymentSummary) Prelude.. Data._Time
+
+-- | The unique identifier of the deployment.
+deploymentSummary_deploymentId :: Lens.Lens' DeploymentSummary Prelude.Text
+deploymentSummary_deploymentId = Lens.lens (\DeploymentSummary' {deploymentId} -> deploymentId) (\s@DeploymentSummary' {} a -> s {deploymentId = a} :: DeploymentSummary)
+
+-- | The unique identifier of the runtime environment.
+deploymentSummary_environmentId :: Lens.Lens' DeploymentSummary Prelude.Text
+deploymentSummary_environmentId = Lens.lens (\DeploymentSummary' {environmentId} -> environmentId) (\s@DeploymentSummary' {} a -> s {environmentId = a} :: DeploymentSummary)
+
+-- | The current status of the deployment.
+deploymentSummary_status :: Lens.Lens' DeploymentSummary DeploymentLifecycle
+deploymentSummary_status = Lens.lens (\DeploymentSummary' {status} -> status) (\s@DeploymentSummary' {} a -> s {status = a} :: DeploymentSummary)
+
+instance Data.FromJSON DeploymentSummary where
+  parseJSON =
+    Data.withObject
+      "DeploymentSummary"
+      ( \x ->
+          DeploymentSummary'
+            Prelude.<$> (x Data..:? "statusReason")
+            Prelude.<*> (x Data..: "applicationId")
+            Prelude.<*> (x Data..: "applicationVersion")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "deploymentId")
+            Prelude.<*> (x Data..: "environmentId")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable DeploymentSummary where
+  hashWithSalt _salt DeploymentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` statusReason
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DeploymentSummary where
+  rnf DeploymentSummary' {..} =
+    Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/Types/EfsStorageConfiguration.hs b/gen/Amazonka/M2/Types/EfsStorageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/EfsStorageConfiguration.hs
@@ -0,0 +1,101 @@
+{-# 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.M2.Types.EfsStorageConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.EfsStorageConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the storage configuration for an Amazon EFS file system.
+--
+-- /See:/ 'newEfsStorageConfiguration' smart constructor.
+data EfsStorageConfiguration = EfsStorageConfiguration'
+  { -- | The file system identifier.
+    fileSystemId :: Prelude.Text,
+    -- | The mount point for the file system.
+    mountPoint :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EfsStorageConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileSystemId', 'efsStorageConfiguration_fileSystemId' - The file system identifier.
+--
+-- 'mountPoint', 'efsStorageConfiguration_mountPoint' - The mount point for the file system.
+newEfsStorageConfiguration ::
+  -- | 'fileSystemId'
+  Prelude.Text ->
+  -- | 'mountPoint'
+  Prelude.Text ->
+  EfsStorageConfiguration
+newEfsStorageConfiguration
+  pFileSystemId_
+  pMountPoint_ =
+    EfsStorageConfiguration'
+      { fileSystemId =
+          pFileSystemId_,
+        mountPoint = pMountPoint_
+      }
+
+-- | The file system identifier.
+efsStorageConfiguration_fileSystemId :: Lens.Lens' EfsStorageConfiguration Prelude.Text
+efsStorageConfiguration_fileSystemId = Lens.lens (\EfsStorageConfiguration' {fileSystemId} -> fileSystemId) (\s@EfsStorageConfiguration' {} a -> s {fileSystemId = a} :: EfsStorageConfiguration)
+
+-- | The mount point for the file system.
+efsStorageConfiguration_mountPoint :: Lens.Lens' EfsStorageConfiguration Prelude.Text
+efsStorageConfiguration_mountPoint = Lens.lens (\EfsStorageConfiguration' {mountPoint} -> mountPoint) (\s@EfsStorageConfiguration' {} a -> s {mountPoint = a} :: EfsStorageConfiguration)
+
+instance Data.FromJSON EfsStorageConfiguration where
+  parseJSON =
+    Data.withObject
+      "EfsStorageConfiguration"
+      ( \x ->
+          EfsStorageConfiguration'
+            Prelude.<$> (x Data..: "file-system-id")
+            Prelude.<*> (x Data..: "mount-point")
+      )
+
+instance Prelude.Hashable EfsStorageConfiguration where
+  hashWithSalt _salt EfsStorageConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileSystemId
+      `Prelude.hashWithSalt` mountPoint
+
+instance Prelude.NFData EfsStorageConfiguration where
+  rnf EfsStorageConfiguration' {..} =
+    Prelude.rnf fileSystemId
+      `Prelude.seq` Prelude.rnf mountPoint
+
+instance Data.ToJSON EfsStorageConfiguration where
+  toJSON EfsStorageConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("file-system-id" Data..= fileSystemId),
+            Prelude.Just ("mount-point" Data..= mountPoint)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/EngineType.hs b/gen/Amazonka/M2/Types/EngineType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/EngineType.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.M2.Types.EngineType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.EngineType
+  ( EngineType
+      ( ..,
+        EngineType_Bluage,
+        EngineType_Microfocus
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EngineType = EngineType'
+  { fromEngineType ::
+      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 EngineType_Bluage :: EngineType
+pattern EngineType_Bluage = EngineType' "bluage"
+
+pattern EngineType_Microfocus :: EngineType
+pattern EngineType_Microfocus = EngineType' "microfocus"
+
+{-# COMPLETE
+  EngineType_Bluage,
+  EngineType_Microfocus,
+  EngineType'
+  #-}
diff --git a/gen/Amazonka/M2/Types/EngineVersionsSummary.hs b/gen/Amazonka/M2/Types/EngineVersionsSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/EngineVersionsSummary.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.M2.Types.EngineVersionsSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.EngineVersionsSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A subset of information about the engine version for a specific
+-- application.
+--
+-- /See:/ 'newEngineVersionsSummary' smart constructor.
+data EngineVersionsSummary = EngineVersionsSummary'
+  { -- | The type of target platform for the application.
+    engineType :: Prelude.Text,
+    -- | The version of the engine type used by the application.
+    engineVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EngineVersionsSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'engineType', 'engineVersionsSummary_engineType' - The type of target platform for the application.
+--
+-- 'engineVersion', 'engineVersionsSummary_engineVersion' - The version of the engine type used by the application.
+newEngineVersionsSummary ::
+  -- | 'engineType'
+  Prelude.Text ->
+  -- | 'engineVersion'
+  Prelude.Text ->
+  EngineVersionsSummary
+newEngineVersionsSummary pEngineType_ pEngineVersion_ =
+  EngineVersionsSummary'
+    { engineType = pEngineType_,
+      engineVersion = pEngineVersion_
+    }
+
+-- | The type of target platform for the application.
+engineVersionsSummary_engineType :: Lens.Lens' EngineVersionsSummary Prelude.Text
+engineVersionsSummary_engineType = Lens.lens (\EngineVersionsSummary' {engineType} -> engineType) (\s@EngineVersionsSummary' {} a -> s {engineType = a} :: EngineVersionsSummary)
+
+-- | The version of the engine type used by the application.
+engineVersionsSummary_engineVersion :: Lens.Lens' EngineVersionsSummary Prelude.Text
+engineVersionsSummary_engineVersion = Lens.lens (\EngineVersionsSummary' {engineVersion} -> engineVersion) (\s@EngineVersionsSummary' {} a -> s {engineVersion = a} :: EngineVersionsSummary)
+
+instance Data.FromJSON EngineVersionsSummary where
+  parseJSON =
+    Data.withObject
+      "EngineVersionsSummary"
+      ( \x ->
+          EngineVersionsSummary'
+            Prelude.<$> (x Data..: "engineType")
+            Prelude.<*> (x Data..: "engineVersion")
+      )
+
+instance Prelude.Hashable EngineVersionsSummary where
+  hashWithSalt _salt EngineVersionsSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` engineVersion
+
+instance Prelude.NFData EngineVersionsSummary where
+  rnf EngineVersionsSummary' {..} =
+    Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf engineVersion
diff --git a/gen/Amazonka/M2/Types/EnvironmentLifecycle.hs b/gen/Amazonka/M2/Types/EnvironmentLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/EnvironmentLifecycle.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.M2.Types.EnvironmentLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.EnvironmentLifecycle
+  ( EnvironmentLifecycle
+      ( ..,
+        EnvironmentLifecycle_Available,
+        EnvironmentLifecycle_Creating,
+        EnvironmentLifecycle_Deleting,
+        EnvironmentLifecycle_Failed,
+        EnvironmentLifecycle_Updating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnvironmentLifecycle = EnvironmentLifecycle'
+  { fromEnvironmentLifecycle ::
+      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 EnvironmentLifecycle_Available :: EnvironmentLifecycle
+pattern EnvironmentLifecycle_Available = EnvironmentLifecycle' "Available"
+
+pattern EnvironmentLifecycle_Creating :: EnvironmentLifecycle
+pattern EnvironmentLifecycle_Creating = EnvironmentLifecycle' "Creating"
+
+pattern EnvironmentLifecycle_Deleting :: EnvironmentLifecycle
+pattern EnvironmentLifecycle_Deleting = EnvironmentLifecycle' "Deleting"
+
+pattern EnvironmentLifecycle_Failed :: EnvironmentLifecycle
+pattern EnvironmentLifecycle_Failed = EnvironmentLifecycle' "Failed"
+
+pattern EnvironmentLifecycle_Updating :: EnvironmentLifecycle
+pattern EnvironmentLifecycle_Updating = EnvironmentLifecycle' "Updating"
+
+{-# COMPLETE
+  EnvironmentLifecycle_Available,
+  EnvironmentLifecycle_Creating,
+  EnvironmentLifecycle_Deleting,
+  EnvironmentLifecycle_Failed,
+  EnvironmentLifecycle_Updating,
+  EnvironmentLifecycle'
+  #-}
diff --git a/gen/Amazonka/M2/Types/EnvironmentSummary.hs b/gen/Amazonka/M2/Types/EnvironmentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/EnvironmentSummary.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.EnvironmentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.EnvironmentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.EngineType
+import Amazonka.M2.Types.EnvironmentLifecycle
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a subset of the possible runtime environment attributes. Used
+-- in the environment list.
+--
+-- /See:/ 'newEnvironmentSummary' smart constructor.
+data EnvironmentSummary = EnvironmentSummary'
+  { -- | The timestamp when the runtime environment was created.
+    creationTime :: Data.POSIX,
+    -- | The target platform for the runtime environment.
+    engineType :: EngineType,
+    -- | The version of the runtime engine.
+    engineVersion :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a particular runtime environment.
+    environmentArn :: Prelude.Text,
+    -- | The unique identifier of a particular runtime environment.
+    environmentId :: Prelude.Text,
+    -- | The instance type of the runtime environment.
+    instanceType :: Prelude.Text,
+    -- | The name of the runtime environment.
+    name :: Prelude.Text,
+    -- | The status of the runtime environment
+    status :: EnvironmentLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnvironmentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'environmentSummary_creationTime' - The timestamp when the runtime environment was created.
+--
+-- 'engineType', 'environmentSummary_engineType' - The target platform for the runtime environment.
+--
+-- 'engineVersion', 'environmentSummary_engineVersion' - The version of the runtime engine.
+--
+-- 'environmentArn', 'environmentSummary_environmentArn' - The Amazon Resource Name (ARN) of a particular runtime environment.
+--
+-- 'environmentId', 'environmentSummary_environmentId' - The unique identifier of a particular runtime environment.
+--
+-- 'instanceType', 'environmentSummary_instanceType' - The instance type of the runtime environment.
+--
+-- 'name', 'environmentSummary_name' - The name of the runtime environment.
+--
+-- 'status', 'environmentSummary_status' - The status of the runtime environment
+newEnvironmentSummary ::
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'engineType'
+  EngineType ->
+  -- | 'engineVersion'
+  Prelude.Text ->
+  -- | 'environmentArn'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  EnvironmentLifecycle ->
+  EnvironmentSummary
+newEnvironmentSummary
+  pCreationTime_
+  pEngineType_
+  pEngineVersion_
+  pEnvironmentArn_
+  pEnvironmentId_
+  pInstanceType_
+  pName_
+  pStatus_ =
+    EnvironmentSummary'
+      { creationTime =
+          Data._Time Lens.# pCreationTime_,
+        engineType = pEngineType_,
+        engineVersion = pEngineVersion_,
+        environmentArn = pEnvironmentArn_,
+        environmentId = pEnvironmentId_,
+        instanceType = pInstanceType_,
+        name = pName_,
+        status = pStatus_
+      }
+
+-- | The timestamp when the runtime environment was created.
+environmentSummary_creationTime :: Lens.Lens' EnvironmentSummary Prelude.UTCTime
+environmentSummary_creationTime = Lens.lens (\EnvironmentSummary' {creationTime} -> creationTime) (\s@EnvironmentSummary' {} a -> s {creationTime = a} :: EnvironmentSummary) Prelude.. Data._Time
+
+-- | The target platform for the runtime environment.
+environmentSummary_engineType :: Lens.Lens' EnvironmentSummary EngineType
+environmentSummary_engineType = Lens.lens (\EnvironmentSummary' {engineType} -> engineType) (\s@EnvironmentSummary' {} a -> s {engineType = a} :: EnvironmentSummary)
+
+-- | The version of the runtime engine.
+environmentSummary_engineVersion :: Lens.Lens' EnvironmentSummary Prelude.Text
+environmentSummary_engineVersion = Lens.lens (\EnvironmentSummary' {engineVersion} -> engineVersion) (\s@EnvironmentSummary' {} a -> s {engineVersion = a} :: EnvironmentSummary)
+
+-- | The Amazon Resource Name (ARN) of a particular runtime environment.
+environmentSummary_environmentArn :: Lens.Lens' EnvironmentSummary Prelude.Text
+environmentSummary_environmentArn = Lens.lens (\EnvironmentSummary' {environmentArn} -> environmentArn) (\s@EnvironmentSummary' {} a -> s {environmentArn = a} :: EnvironmentSummary)
+
+-- | The unique identifier of a particular runtime environment.
+environmentSummary_environmentId :: Lens.Lens' EnvironmentSummary Prelude.Text
+environmentSummary_environmentId = Lens.lens (\EnvironmentSummary' {environmentId} -> environmentId) (\s@EnvironmentSummary' {} a -> s {environmentId = a} :: EnvironmentSummary)
+
+-- | The instance type of the runtime environment.
+environmentSummary_instanceType :: Lens.Lens' EnvironmentSummary Prelude.Text
+environmentSummary_instanceType = Lens.lens (\EnvironmentSummary' {instanceType} -> instanceType) (\s@EnvironmentSummary' {} a -> s {instanceType = a} :: EnvironmentSummary)
+
+-- | The name of the runtime environment.
+environmentSummary_name :: Lens.Lens' EnvironmentSummary Prelude.Text
+environmentSummary_name = Lens.lens (\EnvironmentSummary' {name} -> name) (\s@EnvironmentSummary' {} a -> s {name = a} :: EnvironmentSummary)
+
+-- | The status of the runtime environment
+environmentSummary_status :: Lens.Lens' EnvironmentSummary EnvironmentLifecycle
+environmentSummary_status = Lens.lens (\EnvironmentSummary' {status} -> status) (\s@EnvironmentSummary' {} a -> s {status = a} :: EnvironmentSummary)
+
+instance Data.FromJSON EnvironmentSummary where
+  parseJSON =
+    Data.withObject
+      "EnvironmentSummary"
+      ( \x ->
+          EnvironmentSummary'
+            Prelude.<$> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "engineType")
+            Prelude.<*> (x Data..: "engineVersion")
+            Prelude.<*> (x Data..: "environmentArn")
+            Prelude.<*> (x Data..: "environmentId")
+            Prelude.<*> (x Data..: "instanceType")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable EnvironmentSummary where
+  hashWithSalt _salt EnvironmentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` engineType
+      `Prelude.hashWithSalt` engineVersion
+      `Prelude.hashWithSalt` environmentArn
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData EnvironmentSummary where
+  rnf EnvironmentSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf engineType
+      `Prelude.seq` Prelude.rnf engineVersion
+      `Prelude.seq` Prelude.rnf environmentArn
+      `Prelude.seq` Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/M2/Types/ExternalLocation.hs b/gen/Amazonka/M2/Types/ExternalLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ExternalLocation.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.ExternalLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ExternalLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines an external storage location.
+--
+-- /See:/ 'newExternalLocation' smart constructor.
+data ExternalLocation = ExternalLocation'
+  { -- | The URI of the Amazon S3 bucket.
+    s3Location :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExternalLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'externalLocation_s3Location' - The URI of the Amazon S3 bucket.
+newExternalLocation ::
+  ExternalLocation
+newExternalLocation =
+  ExternalLocation' {s3Location = Prelude.Nothing}
+
+-- | The URI of the Amazon S3 bucket.
+externalLocation_s3Location :: Lens.Lens' ExternalLocation (Prelude.Maybe Prelude.Text)
+externalLocation_s3Location = Lens.lens (\ExternalLocation' {s3Location} -> s3Location) (\s@ExternalLocation' {} a -> s {s3Location = a} :: ExternalLocation)
+
+instance Prelude.Hashable ExternalLocation where
+  hashWithSalt _salt ExternalLocation' {..} =
+    _salt `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData ExternalLocation where
+  rnf ExternalLocation' {..} = Prelude.rnf s3Location
+
+instance Data.ToJSON ExternalLocation where
+  toJSON ExternalLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("s3Location" Data..=) Prelude.<$> s3Location]
+      )
diff --git a/gen/Amazonka/M2/Types/FileBatchJobDefinition.hs b/gen/Amazonka/M2/Types/FileBatchJobDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/FileBatchJobDefinition.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.M2.Types.FileBatchJobDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.FileBatchJobDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A file containing a batch job definition.
+--
+-- /See:/ 'newFileBatchJobDefinition' smart constructor.
+data FileBatchJobDefinition = FileBatchJobDefinition'
+  { -- | The path to the file containing the batch job definition.
+    folderPath :: Prelude.Maybe Prelude.Text,
+    -- | The name of the file containing the batch job definition.
+    fileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FileBatchJobDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'folderPath', 'fileBatchJobDefinition_folderPath' - The path to the file containing the batch job definition.
+--
+-- 'fileName', 'fileBatchJobDefinition_fileName' - The name of the file containing the batch job definition.
+newFileBatchJobDefinition ::
+  -- | 'fileName'
+  Prelude.Text ->
+  FileBatchJobDefinition
+newFileBatchJobDefinition pFileName_ =
+  FileBatchJobDefinition'
+    { folderPath =
+        Prelude.Nothing,
+      fileName = pFileName_
+    }
+
+-- | The path to the file containing the batch job definition.
+fileBatchJobDefinition_folderPath :: Lens.Lens' FileBatchJobDefinition (Prelude.Maybe Prelude.Text)
+fileBatchJobDefinition_folderPath = Lens.lens (\FileBatchJobDefinition' {folderPath} -> folderPath) (\s@FileBatchJobDefinition' {} a -> s {folderPath = a} :: FileBatchJobDefinition)
+
+-- | The name of the file containing the batch job definition.
+fileBatchJobDefinition_fileName :: Lens.Lens' FileBatchJobDefinition Prelude.Text
+fileBatchJobDefinition_fileName = Lens.lens (\FileBatchJobDefinition' {fileName} -> fileName) (\s@FileBatchJobDefinition' {} a -> s {fileName = a} :: FileBatchJobDefinition)
+
+instance Data.FromJSON FileBatchJobDefinition where
+  parseJSON =
+    Data.withObject
+      "FileBatchJobDefinition"
+      ( \x ->
+          FileBatchJobDefinition'
+            Prelude.<$> (x Data..:? "folderPath")
+            Prelude.<*> (x Data..: "fileName")
+      )
+
+instance Prelude.Hashable FileBatchJobDefinition where
+  hashWithSalt _salt FileBatchJobDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` folderPath
+      `Prelude.hashWithSalt` fileName
+
+instance Prelude.NFData FileBatchJobDefinition where
+  rnf FileBatchJobDefinition' {..} =
+    Prelude.rnf folderPath
+      `Prelude.seq` Prelude.rnf fileName
diff --git a/gen/Amazonka/M2/Types/FileBatchJobIdentifier.hs b/gen/Amazonka/M2/Types/FileBatchJobIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/FileBatchJobIdentifier.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.M2.Types.FileBatchJobIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.FileBatchJobIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A batch job identifier in which the batch job to run is identified by
+-- the file name and the relative path to the file name.
+--
+-- /See:/ 'newFileBatchJobIdentifier' smart constructor.
+data FileBatchJobIdentifier = FileBatchJobIdentifier'
+  { -- | The relative path to the file name for the batch job identifier.
+    folderPath :: Prelude.Maybe Prelude.Text,
+    -- | The file name for the batch job identifier.
+    fileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FileBatchJobIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'folderPath', 'fileBatchJobIdentifier_folderPath' - The relative path to the file name for the batch job identifier.
+--
+-- 'fileName', 'fileBatchJobIdentifier_fileName' - The file name for the batch job identifier.
+newFileBatchJobIdentifier ::
+  -- | 'fileName'
+  Prelude.Text ->
+  FileBatchJobIdentifier
+newFileBatchJobIdentifier pFileName_ =
+  FileBatchJobIdentifier'
+    { folderPath =
+        Prelude.Nothing,
+      fileName = pFileName_
+    }
+
+-- | The relative path to the file name for the batch job identifier.
+fileBatchJobIdentifier_folderPath :: Lens.Lens' FileBatchJobIdentifier (Prelude.Maybe Prelude.Text)
+fileBatchJobIdentifier_folderPath = Lens.lens (\FileBatchJobIdentifier' {folderPath} -> folderPath) (\s@FileBatchJobIdentifier' {} a -> s {folderPath = a} :: FileBatchJobIdentifier)
+
+-- | The file name for the batch job identifier.
+fileBatchJobIdentifier_fileName :: Lens.Lens' FileBatchJobIdentifier Prelude.Text
+fileBatchJobIdentifier_fileName = Lens.lens (\FileBatchJobIdentifier' {fileName} -> fileName) (\s@FileBatchJobIdentifier' {} a -> s {fileName = a} :: FileBatchJobIdentifier)
+
+instance Prelude.Hashable FileBatchJobIdentifier where
+  hashWithSalt _salt FileBatchJobIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` folderPath
+      `Prelude.hashWithSalt` fileName
+
+instance Prelude.NFData FileBatchJobIdentifier where
+  rnf FileBatchJobIdentifier' {..} =
+    Prelude.rnf folderPath
+      `Prelude.seq` Prelude.rnf fileName
+
+instance Data.ToJSON FileBatchJobIdentifier where
+  toJSON FileBatchJobIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("folderPath" Data..=) Prelude.<$> folderPath,
+            Prelude.Just ("fileName" Data..= fileName)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/FsxStorageConfiguration.hs b/gen/Amazonka/M2/Types/FsxStorageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/FsxStorageConfiguration.hs
@@ -0,0 +1,101 @@
+{-# 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.M2.Types.FsxStorageConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.FsxStorageConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the storage configuration for an Amazon FSx file system.
+--
+-- /See:/ 'newFsxStorageConfiguration' smart constructor.
+data FsxStorageConfiguration = FsxStorageConfiguration'
+  { -- | The file system identifier.
+    fileSystemId :: Prelude.Text,
+    -- | The mount point for the file system.
+    mountPoint :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FsxStorageConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileSystemId', 'fsxStorageConfiguration_fileSystemId' - The file system identifier.
+--
+-- 'mountPoint', 'fsxStorageConfiguration_mountPoint' - The mount point for the file system.
+newFsxStorageConfiguration ::
+  -- | 'fileSystemId'
+  Prelude.Text ->
+  -- | 'mountPoint'
+  Prelude.Text ->
+  FsxStorageConfiguration
+newFsxStorageConfiguration
+  pFileSystemId_
+  pMountPoint_ =
+    FsxStorageConfiguration'
+      { fileSystemId =
+          pFileSystemId_,
+        mountPoint = pMountPoint_
+      }
+
+-- | The file system identifier.
+fsxStorageConfiguration_fileSystemId :: Lens.Lens' FsxStorageConfiguration Prelude.Text
+fsxStorageConfiguration_fileSystemId = Lens.lens (\FsxStorageConfiguration' {fileSystemId} -> fileSystemId) (\s@FsxStorageConfiguration' {} a -> s {fileSystemId = a} :: FsxStorageConfiguration)
+
+-- | The mount point for the file system.
+fsxStorageConfiguration_mountPoint :: Lens.Lens' FsxStorageConfiguration Prelude.Text
+fsxStorageConfiguration_mountPoint = Lens.lens (\FsxStorageConfiguration' {mountPoint} -> mountPoint) (\s@FsxStorageConfiguration' {} a -> s {mountPoint = a} :: FsxStorageConfiguration)
+
+instance Data.FromJSON FsxStorageConfiguration where
+  parseJSON =
+    Data.withObject
+      "FsxStorageConfiguration"
+      ( \x ->
+          FsxStorageConfiguration'
+            Prelude.<$> (x Data..: "file-system-id")
+            Prelude.<*> (x Data..: "mount-point")
+      )
+
+instance Prelude.Hashable FsxStorageConfiguration where
+  hashWithSalt _salt FsxStorageConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileSystemId
+      `Prelude.hashWithSalt` mountPoint
+
+instance Prelude.NFData FsxStorageConfiguration where
+  rnf FsxStorageConfiguration' {..} =
+    Prelude.rnf fileSystemId
+      `Prelude.seq` Prelude.rnf mountPoint
+
+instance Data.ToJSON FsxStorageConfiguration where
+  toJSON FsxStorageConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("file-system-id" Data..= fileSystemId),
+            Prelude.Just ("mount-point" Data..= mountPoint)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/GdgAttributes.hs b/gen/Amazonka/M2/Types/GdgAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/GdgAttributes.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.M2.Types.GdgAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.GdgAttributes 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 required attributes for a generation data group data set. A
+-- generation data set is one of a collection of successive, historically
+-- related, catalogued data sets that together are known as a generation
+-- data group (GDG). Use this structure when you want to import a GDG. For
+-- more information on GDG, see
+-- <https://www.ibm.com/docs/en/zos/2.3.0?topic=guide-generation-data-sets Generation data sets>.
+--
+-- /See:/ 'newGdgAttributes' smart constructor.
+data GdgAttributes = GdgAttributes'
+  { -- | The maximum number of generation data sets, up to 255, in a GDG.
+    limit :: Prelude.Maybe Prelude.Int,
+    -- | The disposition of the data set in the catalog.
+    rollDisposition :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GdgAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'limit', 'gdgAttributes_limit' - The maximum number of generation data sets, up to 255, in a GDG.
+--
+-- 'rollDisposition', 'gdgAttributes_rollDisposition' - The disposition of the data set in the catalog.
+newGdgAttributes ::
+  GdgAttributes
+newGdgAttributes =
+  GdgAttributes'
+    { limit = Prelude.Nothing,
+      rollDisposition = Prelude.Nothing
+    }
+
+-- | The maximum number of generation data sets, up to 255, in a GDG.
+gdgAttributes_limit :: Lens.Lens' GdgAttributes (Prelude.Maybe Prelude.Int)
+gdgAttributes_limit = Lens.lens (\GdgAttributes' {limit} -> limit) (\s@GdgAttributes' {} a -> s {limit = a} :: GdgAttributes)
+
+-- | The disposition of the data set in the catalog.
+gdgAttributes_rollDisposition :: Lens.Lens' GdgAttributes (Prelude.Maybe Prelude.Text)
+gdgAttributes_rollDisposition = Lens.lens (\GdgAttributes' {rollDisposition} -> rollDisposition) (\s@GdgAttributes' {} a -> s {rollDisposition = a} :: GdgAttributes)
+
+instance Prelude.Hashable GdgAttributes where
+  hashWithSalt _salt GdgAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` rollDisposition
+
+instance Prelude.NFData GdgAttributes where
+  rnf GdgAttributes' {..} =
+    Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf rollDisposition
+
+instance Data.ToJSON GdgAttributes where
+  toJSON GdgAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("limit" Data..=) Prelude.<$> limit,
+            ("rollDisposition" Data..=)
+              Prelude.<$> rollDisposition
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/GdgDetailAttributes.hs b/gen/Amazonka/M2/Types/GdgDetailAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/GdgDetailAttributes.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.M2.Types.GdgDetailAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.GdgDetailAttributes 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 required attributes for a generation data group data set. A
+-- generation data set is one of a collection of successive, historically
+-- related, catalogued data sets that together are known as a generation
+-- data group (GDG). Use this structure when you want to import a GDG. For
+-- more information on GDG, see
+-- <https://www.ibm.com/docs/en/zos/2.3.0?topic=guide-generation-data-sets Generation data sets>.
+--
+-- /See:/ 'newGdgDetailAttributes' smart constructor.
+data GdgDetailAttributes = GdgDetailAttributes'
+  { -- | The maximum number of generation data sets, up to 255, in a GDG.
+    limit :: Prelude.Maybe Prelude.Int,
+    -- | The disposition of the data set in the catalog.
+    rollDisposition :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GdgDetailAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'limit', 'gdgDetailAttributes_limit' - The maximum number of generation data sets, up to 255, in a GDG.
+--
+-- 'rollDisposition', 'gdgDetailAttributes_rollDisposition' - The disposition of the data set in the catalog.
+newGdgDetailAttributes ::
+  GdgDetailAttributes
+newGdgDetailAttributes =
+  GdgDetailAttributes'
+    { limit = Prelude.Nothing,
+      rollDisposition = Prelude.Nothing
+    }
+
+-- | The maximum number of generation data sets, up to 255, in a GDG.
+gdgDetailAttributes_limit :: Lens.Lens' GdgDetailAttributes (Prelude.Maybe Prelude.Int)
+gdgDetailAttributes_limit = Lens.lens (\GdgDetailAttributes' {limit} -> limit) (\s@GdgDetailAttributes' {} a -> s {limit = a} :: GdgDetailAttributes)
+
+-- | The disposition of the data set in the catalog.
+gdgDetailAttributes_rollDisposition :: Lens.Lens' GdgDetailAttributes (Prelude.Maybe Prelude.Text)
+gdgDetailAttributes_rollDisposition = Lens.lens (\GdgDetailAttributes' {rollDisposition} -> rollDisposition) (\s@GdgDetailAttributes' {} a -> s {rollDisposition = a} :: GdgDetailAttributes)
+
+instance Data.FromJSON GdgDetailAttributes where
+  parseJSON =
+    Data.withObject
+      "GdgDetailAttributes"
+      ( \x ->
+          GdgDetailAttributes'
+            Prelude.<$> (x Data..:? "limit")
+            Prelude.<*> (x Data..:? "rollDisposition")
+      )
+
+instance Prelude.Hashable GdgDetailAttributes where
+  hashWithSalt _salt GdgDetailAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` rollDisposition
+
+instance Prelude.NFData GdgDetailAttributes where
+  rnf GdgDetailAttributes' {..} =
+    Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf rollDisposition
diff --git a/gen/Amazonka/M2/Types/HighAvailabilityConfig.hs b/gen/Amazonka/M2/Types/HighAvailabilityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/HighAvailabilityConfig.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.HighAvailabilityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.HighAvailabilityConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the details of a high availability configuration.
+--
+-- /See:/ 'newHighAvailabilityConfig' smart constructor.
+data HighAvailabilityConfig = HighAvailabilityConfig'
+  { -- | The number of instances in a high availability configuration.
+    desiredCapacity :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HighAvailabilityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'desiredCapacity', 'highAvailabilityConfig_desiredCapacity' - The number of instances in a high availability configuration.
+newHighAvailabilityConfig ::
+  -- | 'desiredCapacity'
+  Prelude.Natural ->
+  HighAvailabilityConfig
+newHighAvailabilityConfig pDesiredCapacity_ =
+  HighAvailabilityConfig'
+    { desiredCapacity =
+        pDesiredCapacity_
+    }
+
+-- | The number of instances in a high availability configuration.
+highAvailabilityConfig_desiredCapacity :: Lens.Lens' HighAvailabilityConfig Prelude.Natural
+highAvailabilityConfig_desiredCapacity = Lens.lens (\HighAvailabilityConfig' {desiredCapacity} -> desiredCapacity) (\s@HighAvailabilityConfig' {} a -> s {desiredCapacity = a} :: HighAvailabilityConfig)
+
+instance Data.FromJSON HighAvailabilityConfig where
+  parseJSON =
+    Data.withObject
+      "HighAvailabilityConfig"
+      ( \x ->
+          HighAvailabilityConfig'
+            Prelude.<$> (x Data..: "desiredCapacity")
+      )
+
+instance Prelude.Hashable HighAvailabilityConfig where
+  hashWithSalt _salt HighAvailabilityConfig' {..} =
+    _salt `Prelude.hashWithSalt` desiredCapacity
+
+instance Prelude.NFData HighAvailabilityConfig where
+  rnf HighAvailabilityConfig' {..} =
+    Prelude.rnf desiredCapacity
+
+instance Data.ToJSON HighAvailabilityConfig where
+  toJSON HighAvailabilityConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("desiredCapacity" Data..= desiredCapacity)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/LogGroupSummary.hs b/gen/Amazonka/M2/Types/LogGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/LogGroupSummary.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.LogGroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.LogGroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A subset of the attributes that describe a log group. In CloudWatch a
+-- log group is a group of log streams that share the same retention,
+-- monitoring, and access control settings.
+--
+-- /See:/ 'newLogGroupSummary' smart constructor.
+data LogGroupSummary = LogGroupSummary'
+  { -- | The name of the log group.
+    logGroupName :: Prelude.Text,
+    -- | The type of log.
+    logType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogGroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'logGroupSummary_logGroupName' - The name of the log group.
+--
+-- 'logType', 'logGroupSummary_logType' - The type of log.
+newLogGroupSummary ::
+  -- | 'logGroupName'
+  Prelude.Text ->
+  -- | 'logType'
+  Prelude.Text ->
+  LogGroupSummary
+newLogGroupSummary pLogGroupName_ pLogType_ =
+  LogGroupSummary'
+    { logGroupName = pLogGroupName_,
+      logType = pLogType_
+    }
+
+-- | The name of the log group.
+logGroupSummary_logGroupName :: Lens.Lens' LogGroupSummary Prelude.Text
+logGroupSummary_logGroupName = Lens.lens (\LogGroupSummary' {logGroupName} -> logGroupName) (\s@LogGroupSummary' {} a -> s {logGroupName = a} :: LogGroupSummary)
+
+-- | The type of log.
+logGroupSummary_logType :: Lens.Lens' LogGroupSummary Prelude.Text
+logGroupSummary_logType = Lens.lens (\LogGroupSummary' {logType} -> logType) (\s@LogGroupSummary' {} a -> s {logType = a} :: LogGroupSummary)
+
+instance Data.FromJSON LogGroupSummary where
+  parseJSON =
+    Data.withObject
+      "LogGroupSummary"
+      ( \x ->
+          LogGroupSummary'
+            Prelude.<$> (x Data..: "logGroupName")
+            Prelude.<*> (x Data..: "logType")
+      )
+
+instance Prelude.Hashable LogGroupSummary where
+  hashWithSalt _salt LogGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logType
+
+instance Prelude.NFData LogGroupSummary where
+  rnf LogGroupSummary' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logType
diff --git a/gen/Amazonka/M2/Types/MaintenanceSchedule.hs b/gen/Amazonka/M2/Types/MaintenanceSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/MaintenanceSchedule.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.M2.Types.MaintenanceSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.MaintenanceSchedule 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 information about the maintenance schedule.
+--
+-- /See:/ 'newMaintenanceSchedule' smart constructor.
+data MaintenanceSchedule = MaintenanceSchedule'
+  { -- | The time the scheduled maintenance is to end.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The time the scheduled maintenance is to start.
+    startTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MaintenanceSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'maintenanceSchedule_endTime' - The time the scheduled maintenance is to end.
+--
+-- 'startTime', 'maintenanceSchedule_startTime' - The time the scheduled maintenance is to start.
+newMaintenanceSchedule ::
+  MaintenanceSchedule
+newMaintenanceSchedule =
+  MaintenanceSchedule'
+    { endTime = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | The time the scheduled maintenance is to end.
+maintenanceSchedule_endTime :: Lens.Lens' MaintenanceSchedule (Prelude.Maybe Prelude.UTCTime)
+maintenanceSchedule_endTime = Lens.lens (\MaintenanceSchedule' {endTime} -> endTime) (\s@MaintenanceSchedule' {} a -> s {endTime = a} :: MaintenanceSchedule) Prelude.. Lens.mapping Data._Time
+
+-- | The time the scheduled maintenance is to start.
+maintenanceSchedule_startTime :: Lens.Lens' MaintenanceSchedule (Prelude.Maybe Prelude.UTCTime)
+maintenanceSchedule_startTime = Lens.lens (\MaintenanceSchedule' {startTime} -> startTime) (\s@MaintenanceSchedule' {} a -> s {startTime = a} :: MaintenanceSchedule) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON MaintenanceSchedule where
+  parseJSON =
+    Data.withObject
+      "MaintenanceSchedule"
+      ( \x ->
+          MaintenanceSchedule'
+            Prelude.<$> (x Data..:? "endTime")
+            Prelude.<*> (x Data..:? "startTime")
+      )
+
+instance Prelude.Hashable MaintenanceSchedule where
+  hashWithSalt _salt MaintenanceSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData MaintenanceSchedule where
+  rnf MaintenanceSchedule' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/M2/Types/PendingMaintenance.hs b/gen/Amazonka/M2/Types/PendingMaintenance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/PendingMaintenance.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.M2.Types.PendingMaintenance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.PendingMaintenance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.MaintenanceSchedule
+import qualified Amazonka.Prelude as Prelude
+
+-- | The scheduled maintenance for a runtime engine.
+--
+-- /See:/ 'newPendingMaintenance' smart constructor.
+data PendingMaintenance = PendingMaintenance'
+  { -- | The specific runtime engine that the maintenance schedule applies to.
+    engineVersion :: Prelude.Maybe Prelude.Text,
+    -- | The maintenance schedule for the runtime engine version.
+    schedule :: Prelude.Maybe MaintenanceSchedule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PendingMaintenance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'engineVersion', 'pendingMaintenance_engineVersion' - The specific runtime engine that the maintenance schedule applies to.
+--
+-- 'schedule', 'pendingMaintenance_schedule' - The maintenance schedule for the runtime engine version.
+newPendingMaintenance ::
+  PendingMaintenance
+newPendingMaintenance =
+  PendingMaintenance'
+    { engineVersion =
+        Prelude.Nothing,
+      schedule = Prelude.Nothing
+    }
+
+-- | The specific runtime engine that the maintenance schedule applies to.
+pendingMaintenance_engineVersion :: Lens.Lens' PendingMaintenance (Prelude.Maybe Prelude.Text)
+pendingMaintenance_engineVersion = Lens.lens (\PendingMaintenance' {engineVersion} -> engineVersion) (\s@PendingMaintenance' {} a -> s {engineVersion = a} :: PendingMaintenance)
+
+-- | The maintenance schedule for the runtime engine version.
+pendingMaintenance_schedule :: Lens.Lens' PendingMaintenance (Prelude.Maybe MaintenanceSchedule)
+pendingMaintenance_schedule = Lens.lens (\PendingMaintenance' {schedule} -> schedule) (\s@PendingMaintenance' {} a -> s {schedule = a} :: PendingMaintenance)
+
+instance Data.FromJSON PendingMaintenance where
+  parseJSON =
+    Data.withObject
+      "PendingMaintenance"
+      ( \x ->
+          PendingMaintenance'
+            Prelude.<$> (x Data..:? "engineVersion")
+            Prelude.<*> (x Data..:? "schedule")
+      )
+
+instance Prelude.Hashable PendingMaintenance where
+  hashWithSalt _salt PendingMaintenance' {..} =
+    _salt
+      `Prelude.hashWithSalt` engineVersion
+      `Prelude.hashWithSalt` schedule
+
+instance Prelude.NFData PendingMaintenance where
+  rnf PendingMaintenance' {..} =
+    Prelude.rnf engineVersion
+      `Prelude.seq` Prelude.rnf schedule
diff --git a/gen/Amazonka/M2/Types/PrimaryKey.hs b/gen/Amazonka/M2/Types/PrimaryKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/PrimaryKey.hs
@@ -0,0 +1,116 @@
+{-# 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.M2.Types.PrimaryKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.PrimaryKey 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 primary key for a KSDS data set.
+--
+-- /See:/ 'newPrimaryKey' smart constructor.
+data PrimaryKey = PrimaryKey'
+  { -- | A name for the Primary Key.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A strictly positive integer value representing the length of the primary
+    -- key.
+    length :: Prelude.Int,
+    -- | A positive integer value representing the offset to mark the start of
+    -- the primary key in the record byte array.
+    offset :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrimaryKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'primaryKey_name' - A name for the Primary Key.
+--
+-- 'length', 'primaryKey_length' - A strictly positive integer value representing the length of the primary
+-- key.
+--
+-- 'offset', 'primaryKey_offset' - A positive integer value representing the offset to mark the start of
+-- the primary key in the record byte array.
+newPrimaryKey ::
+  -- | 'length'
+  Prelude.Int ->
+  -- | 'offset'
+  Prelude.Int ->
+  PrimaryKey
+newPrimaryKey pLength_ pOffset_ =
+  PrimaryKey'
+    { name = Prelude.Nothing,
+      length = pLength_,
+      offset = pOffset_
+    }
+
+-- | A name for the Primary Key.
+primaryKey_name :: Lens.Lens' PrimaryKey (Prelude.Maybe Prelude.Text)
+primaryKey_name = Lens.lens (\PrimaryKey' {name} -> name) (\s@PrimaryKey' {} a -> s {name = a} :: PrimaryKey)
+
+-- | A strictly positive integer value representing the length of the primary
+-- key.
+primaryKey_length :: Lens.Lens' PrimaryKey Prelude.Int
+primaryKey_length = Lens.lens (\PrimaryKey' {length} -> length) (\s@PrimaryKey' {} a -> s {length = a} :: PrimaryKey)
+
+-- | A positive integer value representing the offset to mark the start of
+-- the primary key in the record byte array.
+primaryKey_offset :: Lens.Lens' PrimaryKey Prelude.Int
+primaryKey_offset = Lens.lens (\PrimaryKey' {offset} -> offset) (\s@PrimaryKey' {} a -> s {offset = a} :: PrimaryKey)
+
+instance Data.FromJSON PrimaryKey where
+  parseJSON =
+    Data.withObject
+      "PrimaryKey"
+      ( \x ->
+          PrimaryKey'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..: "length")
+            Prelude.<*> (x Data..: "offset")
+      )
+
+instance Prelude.Hashable PrimaryKey where
+  hashWithSalt _salt PrimaryKey' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` length
+      `Prelude.hashWithSalt` offset
+
+instance Prelude.NFData PrimaryKey where
+  rnf PrimaryKey' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf length
+      `Prelude.seq` Prelude.rnf offset
+
+instance Data.ToJSON PrimaryKey where
+  toJSON PrimaryKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("length" Data..= length),
+            Prelude.Just ("offset" Data..= offset)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/RecordLength.hs b/gen/Amazonka/M2/Types/RecordLength.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/RecordLength.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.M2.Types.RecordLength
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.RecordLength 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 length of the records in the data set.
+--
+-- /See:/ 'newRecordLength' smart constructor.
+data RecordLength = RecordLength'
+  { -- | The maximum record length. In case of fixed, both minimum and maximum
+    -- are the same.
+    max :: Prelude.Int,
+    -- | The minimum record length of a record.
+    min :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecordLength' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'recordLength_max' - The maximum record length. In case of fixed, both minimum and maximum
+-- are the same.
+--
+-- 'min', 'recordLength_min' - The minimum record length of a record.
+newRecordLength ::
+  -- | 'max'
+  Prelude.Int ->
+  -- | 'min'
+  Prelude.Int ->
+  RecordLength
+newRecordLength pMax_ pMin_ =
+  RecordLength' {max = pMax_, min = pMin_}
+
+-- | The maximum record length. In case of fixed, both minimum and maximum
+-- are the same.
+recordLength_max :: Lens.Lens' RecordLength Prelude.Int
+recordLength_max = Lens.lens (\RecordLength' {max} -> max) (\s@RecordLength' {} a -> s {max = a} :: RecordLength)
+
+-- | The minimum record length of a record.
+recordLength_min :: Lens.Lens' RecordLength Prelude.Int
+recordLength_min = Lens.lens (\RecordLength' {min} -> min) (\s@RecordLength' {} a -> s {min = a} :: RecordLength)
+
+instance Prelude.Hashable RecordLength where
+  hashWithSalt _salt RecordLength' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData RecordLength where
+  rnf RecordLength' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToJSON RecordLength where
+  toJSON RecordLength' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("max" Data..= max),
+            Prelude.Just ("min" Data..= min)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/ScriptBatchJobDefinition.hs b/gen/Amazonka/M2/Types/ScriptBatchJobDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ScriptBatchJobDefinition.hs
@@ -0,0 +1,74 @@
+{-# 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.M2.Types.ScriptBatchJobDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ScriptBatchJobDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A batch job definition contained in a script.
+--
+-- /See:/ 'newScriptBatchJobDefinition' smart constructor.
+data ScriptBatchJobDefinition = ScriptBatchJobDefinition'
+  { -- | The name of the script containing the batch job definition.
+    scriptName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScriptBatchJobDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scriptName', 'scriptBatchJobDefinition_scriptName' - The name of the script containing the batch job definition.
+newScriptBatchJobDefinition ::
+  -- | 'scriptName'
+  Prelude.Text ->
+  ScriptBatchJobDefinition
+newScriptBatchJobDefinition pScriptName_ =
+  ScriptBatchJobDefinition'
+    { scriptName =
+        pScriptName_
+    }
+
+-- | The name of the script containing the batch job definition.
+scriptBatchJobDefinition_scriptName :: Lens.Lens' ScriptBatchJobDefinition Prelude.Text
+scriptBatchJobDefinition_scriptName = Lens.lens (\ScriptBatchJobDefinition' {scriptName} -> scriptName) (\s@ScriptBatchJobDefinition' {} a -> s {scriptName = a} :: ScriptBatchJobDefinition)
+
+instance Data.FromJSON ScriptBatchJobDefinition where
+  parseJSON =
+    Data.withObject
+      "ScriptBatchJobDefinition"
+      ( \x ->
+          ScriptBatchJobDefinition'
+            Prelude.<$> (x Data..: "scriptName")
+      )
+
+instance Prelude.Hashable ScriptBatchJobDefinition where
+  hashWithSalt _salt ScriptBatchJobDefinition' {..} =
+    _salt `Prelude.hashWithSalt` scriptName
+
+instance Prelude.NFData ScriptBatchJobDefinition where
+  rnf ScriptBatchJobDefinition' {..} =
+    Prelude.rnf scriptName
diff --git a/gen/Amazonka/M2/Types/ScriptBatchJobIdentifier.hs b/gen/Amazonka/M2/Types/ScriptBatchJobIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/ScriptBatchJobIdentifier.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.M2.Types.ScriptBatchJobIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.ScriptBatchJobIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A batch job identifier in which the batch job to run is identified by
+-- the script name.
+--
+-- /See:/ 'newScriptBatchJobIdentifier' smart constructor.
+data ScriptBatchJobIdentifier = ScriptBatchJobIdentifier'
+  { -- | The name of the script containing the batch job definition.
+    scriptName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScriptBatchJobIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scriptName', 'scriptBatchJobIdentifier_scriptName' - The name of the script containing the batch job definition.
+newScriptBatchJobIdentifier ::
+  -- | 'scriptName'
+  Prelude.Text ->
+  ScriptBatchJobIdentifier
+newScriptBatchJobIdentifier pScriptName_ =
+  ScriptBatchJobIdentifier'
+    { scriptName =
+        pScriptName_
+    }
+
+-- | The name of the script containing the batch job definition.
+scriptBatchJobIdentifier_scriptName :: Lens.Lens' ScriptBatchJobIdentifier Prelude.Text
+scriptBatchJobIdentifier_scriptName = Lens.lens (\ScriptBatchJobIdentifier' {scriptName} -> scriptName) (\s@ScriptBatchJobIdentifier' {} a -> s {scriptName = a} :: ScriptBatchJobIdentifier)
+
+instance Prelude.Hashable ScriptBatchJobIdentifier where
+  hashWithSalt _salt ScriptBatchJobIdentifier' {..} =
+    _salt `Prelude.hashWithSalt` scriptName
+
+instance Prelude.NFData ScriptBatchJobIdentifier where
+  rnf ScriptBatchJobIdentifier' {..} =
+    Prelude.rnf scriptName
+
+instance Data.ToJSON ScriptBatchJobIdentifier where
+  toJSON ScriptBatchJobIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("scriptName" Data..= scriptName)]
+      )
diff --git a/gen/Amazonka/M2/Types/StorageConfiguration.hs b/gen/Amazonka/M2/Types/StorageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/StorageConfiguration.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.Types.StorageConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.StorageConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.EfsStorageConfiguration
+import Amazonka.M2.Types.FsxStorageConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the storage configuration for a runtime environment.
+--
+-- /See:/ 'newStorageConfiguration' smart constructor.
+data StorageConfiguration = StorageConfiguration'
+  { -- | Defines the storage configuration for an Amazon EFS file system.
+    efs :: Prelude.Maybe EfsStorageConfiguration,
+    -- | Defines the storage configuration for an Amazon FSx file system.
+    fsx :: Prelude.Maybe FsxStorageConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StorageConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'efs', 'storageConfiguration_efs' - Defines the storage configuration for an Amazon EFS file system.
+--
+-- 'fsx', 'storageConfiguration_fsx' - Defines the storage configuration for an Amazon FSx file system.
+newStorageConfiguration ::
+  StorageConfiguration
+newStorageConfiguration =
+  StorageConfiguration'
+    { efs = Prelude.Nothing,
+      fsx = Prelude.Nothing
+    }
+
+-- | Defines the storage configuration for an Amazon EFS file system.
+storageConfiguration_efs :: Lens.Lens' StorageConfiguration (Prelude.Maybe EfsStorageConfiguration)
+storageConfiguration_efs = Lens.lens (\StorageConfiguration' {efs} -> efs) (\s@StorageConfiguration' {} a -> s {efs = a} :: StorageConfiguration)
+
+-- | Defines the storage configuration for an Amazon FSx file system.
+storageConfiguration_fsx :: Lens.Lens' StorageConfiguration (Prelude.Maybe FsxStorageConfiguration)
+storageConfiguration_fsx = Lens.lens (\StorageConfiguration' {fsx} -> fsx) (\s@StorageConfiguration' {} a -> s {fsx = a} :: StorageConfiguration)
+
+instance Data.FromJSON StorageConfiguration where
+  parseJSON =
+    Data.withObject
+      "StorageConfiguration"
+      ( \x ->
+          StorageConfiguration'
+            Prelude.<$> (x Data..:? "efs")
+            Prelude.<*> (x Data..:? "fsx")
+      )
+
+instance Prelude.Hashable StorageConfiguration where
+  hashWithSalt _salt StorageConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` efs
+      `Prelude.hashWithSalt` fsx
+
+instance Prelude.NFData StorageConfiguration where
+  rnf StorageConfiguration' {..} =
+    Prelude.rnf efs `Prelude.seq` Prelude.rnf fsx
+
+instance Data.ToJSON StorageConfiguration where
+  toJSON StorageConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("efs" Data..=) Prelude.<$> efs,
+            ("fsx" Data..=) Prelude.<$> fsx
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/VsamAttributes.hs b/gen/Amazonka/M2/Types/VsamAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/VsamAttributes.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.M2.Types.VsamAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.VsamAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.AlternateKey
+import Amazonka.M2.Types.PrimaryKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attributes of a VSAM type data set.
+--
+-- /See:/ 'newVsamAttributes' smart constructor.
+data VsamAttributes = VsamAttributes'
+  { -- | The alternate key definitions, if any. A legacy dataset might not have
+    -- any alternate key defined, but if those alternate keys definitions
+    -- exist, provide them as some applications will make use of them.
+    alternateKeys :: Prelude.Maybe [AlternateKey],
+    -- | Indicates whether indexes for this dataset are stored as compressed
+    -- values. If you have a large data set (typically > 100 Mb), consider
+    -- setting this flag to True.
+    compressed :: Prelude.Maybe Prelude.Bool,
+    -- | The character set used by the data set. Can be ASCII, EBCDIC, or
+    -- unknown.
+    encoding :: Prelude.Maybe Prelude.Text,
+    -- | The primary key of the data set.
+    primaryKey :: Prelude.Maybe PrimaryKey,
+    -- | The record format of the data set.
+    format :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VsamAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alternateKeys', 'vsamAttributes_alternateKeys' - The alternate key definitions, if any. A legacy dataset might not have
+-- any alternate key defined, but if those alternate keys definitions
+-- exist, provide them as some applications will make use of them.
+--
+-- 'compressed', 'vsamAttributes_compressed' - Indicates whether indexes for this dataset are stored as compressed
+-- values. If you have a large data set (typically > 100 Mb), consider
+-- setting this flag to True.
+--
+-- 'encoding', 'vsamAttributes_encoding' - The character set used by the data set. Can be ASCII, EBCDIC, or
+-- unknown.
+--
+-- 'primaryKey', 'vsamAttributes_primaryKey' - The primary key of the data set.
+--
+-- 'format', 'vsamAttributes_format' - The record format of the data set.
+newVsamAttributes ::
+  -- | 'format'
+  Prelude.Text ->
+  VsamAttributes
+newVsamAttributes pFormat_ =
+  VsamAttributes'
+    { alternateKeys = Prelude.Nothing,
+      compressed = Prelude.Nothing,
+      encoding = Prelude.Nothing,
+      primaryKey = Prelude.Nothing,
+      format = pFormat_
+    }
+
+-- | The alternate key definitions, if any. A legacy dataset might not have
+-- any alternate key defined, but if those alternate keys definitions
+-- exist, provide them as some applications will make use of them.
+vsamAttributes_alternateKeys :: Lens.Lens' VsamAttributes (Prelude.Maybe [AlternateKey])
+vsamAttributes_alternateKeys = Lens.lens (\VsamAttributes' {alternateKeys} -> alternateKeys) (\s@VsamAttributes' {} a -> s {alternateKeys = a} :: VsamAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether indexes for this dataset are stored as compressed
+-- values. If you have a large data set (typically > 100 Mb), consider
+-- setting this flag to True.
+vsamAttributes_compressed :: Lens.Lens' VsamAttributes (Prelude.Maybe Prelude.Bool)
+vsamAttributes_compressed = Lens.lens (\VsamAttributes' {compressed} -> compressed) (\s@VsamAttributes' {} a -> s {compressed = a} :: VsamAttributes)
+
+-- | The character set used by the data set. Can be ASCII, EBCDIC, or
+-- unknown.
+vsamAttributes_encoding :: Lens.Lens' VsamAttributes (Prelude.Maybe Prelude.Text)
+vsamAttributes_encoding = Lens.lens (\VsamAttributes' {encoding} -> encoding) (\s@VsamAttributes' {} a -> s {encoding = a} :: VsamAttributes)
+
+-- | The primary key of the data set.
+vsamAttributes_primaryKey :: Lens.Lens' VsamAttributes (Prelude.Maybe PrimaryKey)
+vsamAttributes_primaryKey = Lens.lens (\VsamAttributes' {primaryKey} -> primaryKey) (\s@VsamAttributes' {} a -> s {primaryKey = a} :: VsamAttributes)
+
+-- | The record format of the data set.
+vsamAttributes_format :: Lens.Lens' VsamAttributes Prelude.Text
+vsamAttributes_format = Lens.lens (\VsamAttributes' {format} -> format) (\s@VsamAttributes' {} a -> s {format = a} :: VsamAttributes)
+
+instance Prelude.Hashable VsamAttributes where
+  hashWithSalt _salt VsamAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` alternateKeys
+      `Prelude.hashWithSalt` compressed
+      `Prelude.hashWithSalt` encoding
+      `Prelude.hashWithSalt` primaryKey
+      `Prelude.hashWithSalt` format
+
+instance Prelude.NFData VsamAttributes where
+  rnf VsamAttributes' {..} =
+    Prelude.rnf alternateKeys
+      `Prelude.seq` Prelude.rnf compressed
+      `Prelude.seq` Prelude.rnf encoding
+      `Prelude.seq` Prelude.rnf primaryKey
+      `Prelude.seq` Prelude.rnf format
+
+instance Data.ToJSON VsamAttributes where
+  toJSON VsamAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("alternateKeys" Data..=) Prelude.<$> alternateKeys,
+            ("compressed" Data..=) Prelude.<$> compressed,
+            ("encoding" Data..=) Prelude.<$> encoding,
+            ("primaryKey" Data..=) Prelude.<$> primaryKey,
+            Prelude.Just ("format" Data..= format)
+          ]
+      )
diff --git a/gen/Amazonka/M2/Types/VsamDetailAttributes.hs b/gen/Amazonka/M2/Types/VsamDetailAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/Types/VsamDetailAttributes.hs
@@ -0,0 +1,153 @@
+{-# 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.M2.Types.VsamDetailAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.M2.Types.VsamDetailAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types.AlternateKey
+import Amazonka.M2.Types.PrimaryKey
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attributes of a VSAM type data set.
+--
+-- /See:/ 'newVsamDetailAttributes' smart constructor.
+data VsamDetailAttributes = VsamDetailAttributes'
+  { -- | The alternate key definitions, if any. A legacy dataset might not have
+    -- any alternate key defined, but if those alternate keys definitions
+    -- exist, provide them as some applications will make use of them.
+    alternateKeys :: Prelude.Maybe [AlternateKey],
+    -- | If set to True, enforces loading the data set into cache before it’s
+    -- used by the application.
+    cacheAtStartup :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether indexes for this dataset are stored as compressed
+    -- values. If you have a large data set (typically > 100 Mb), consider
+    -- setting this flag to True.
+    compressed :: Prelude.Maybe Prelude.Bool,
+    -- | The character set used by the data set. Can be ASCII, EBCDIC, or
+    -- unknown.
+    encoding :: Prelude.Maybe Prelude.Text,
+    -- | The primary key of the data set.
+    primaryKey :: Prelude.Maybe PrimaryKey,
+    -- | The record format of the data set.
+    recordFormat :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VsamDetailAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alternateKeys', 'vsamDetailAttributes_alternateKeys' - The alternate key definitions, if any. A legacy dataset might not have
+-- any alternate key defined, but if those alternate keys definitions
+-- exist, provide them as some applications will make use of them.
+--
+-- 'cacheAtStartup', 'vsamDetailAttributes_cacheAtStartup' - If set to True, enforces loading the data set into cache before it’s
+-- used by the application.
+--
+-- 'compressed', 'vsamDetailAttributes_compressed' - Indicates whether indexes for this dataset are stored as compressed
+-- values. If you have a large data set (typically > 100 Mb), consider
+-- setting this flag to True.
+--
+-- 'encoding', 'vsamDetailAttributes_encoding' - The character set used by the data set. Can be ASCII, EBCDIC, or
+-- unknown.
+--
+-- 'primaryKey', 'vsamDetailAttributes_primaryKey' - The primary key of the data set.
+--
+-- 'recordFormat', 'vsamDetailAttributes_recordFormat' - The record format of the data set.
+newVsamDetailAttributes ::
+  VsamDetailAttributes
+newVsamDetailAttributes =
+  VsamDetailAttributes'
+    { alternateKeys =
+        Prelude.Nothing,
+      cacheAtStartup = Prelude.Nothing,
+      compressed = Prelude.Nothing,
+      encoding = Prelude.Nothing,
+      primaryKey = Prelude.Nothing,
+      recordFormat = Prelude.Nothing
+    }
+
+-- | The alternate key definitions, if any. A legacy dataset might not have
+-- any alternate key defined, but if those alternate keys definitions
+-- exist, provide them as some applications will make use of them.
+vsamDetailAttributes_alternateKeys :: Lens.Lens' VsamDetailAttributes (Prelude.Maybe [AlternateKey])
+vsamDetailAttributes_alternateKeys = Lens.lens (\VsamDetailAttributes' {alternateKeys} -> alternateKeys) (\s@VsamDetailAttributes' {} a -> s {alternateKeys = a} :: VsamDetailAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | If set to True, enforces loading the data set into cache before it’s
+-- used by the application.
+vsamDetailAttributes_cacheAtStartup :: Lens.Lens' VsamDetailAttributes (Prelude.Maybe Prelude.Bool)
+vsamDetailAttributes_cacheAtStartup = Lens.lens (\VsamDetailAttributes' {cacheAtStartup} -> cacheAtStartup) (\s@VsamDetailAttributes' {} a -> s {cacheAtStartup = a} :: VsamDetailAttributes)
+
+-- | Indicates whether indexes for this dataset are stored as compressed
+-- values. If you have a large data set (typically > 100 Mb), consider
+-- setting this flag to True.
+vsamDetailAttributes_compressed :: Lens.Lens' VsamDetailAttributes (Prelude.Maybe Prelude.Bool)
+vsamDetailAttributes_compressed = Lens.lens (\VsamDetailAttributes' {compressed} -> compressed) (\s@VsamDetailAttributes' {} a -> s {compressed = a} :: VsamDetailAttributes)
+
+-- | The character set used by the data set. Can be ASCII, EBCDIC, or
+-- unknown.
+vsamDetailAttributes_encoding :: Lens.Lens' VsamDetailAttributes (Prelude.Maybe Prelude.Text)
+vsamDetailAttributes_encoding = Lens.lens (\VsamDetailAttributes' {encoding} -> encoding) (\s@VsamDetailAttributes' {} a -> s {encoding = a} :: VsamDetailAttributes)
+
+-- | The primary key of the data set.
+vsamDetailAttributes_primaryKey :: Lens.Lens' VsamDetailAttributes (Prelude.Maybe PrimaryKey)
+vsamDetailAttributes_primaryKey = Lens.lens (\VsamDetailAttributes' {primaryKey} -> primaryKey) (\s@VsamDetailAttributes' {} a -> s {primaryKey = a} :: VsamDetailAttributes)
+
+-- | The record format of the data set.
+vsamDetailAttributes_recordFormat :: Lens.Lens' VsamDetailAttributes (Prelude.Maybe Prelude.Text)
+vsamDetailAttributes_recordFormat = Lens.lens (\VsamDetailAttributes' {recordFormat} -> recordFormat) (\s@VsamDetailAttributes' {} a -> s {recordFormat = a} :: VsamDetailAttributes)
+
+instance Data.FromJSON VsamDetailAttributes where
+  parseJSON =
+    Data.withObject
+      "VsamDetailAttributes"
+      ( \x ->
+          VsamDetailAttributes'
+            Prelude.<$> (x Data..:? "alternateKeys" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "cacheAtStartup")
+            Prelude.<*> (x Data..:? "compressed")
+            Prelude.<*> (x Data..:? "encoding")
+            Prelude.<*> (x Data..:? "primaryKey")
+            Prelude.<*> (x Data..:? "recordFormat")
+      )
+
+instance Prelude.Hashable VsamDetailAttributes where
+  hashWithSalt _salt VsamDetailAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` alternateKeys
+      `Prelude.hashWithSalt` cacheAtStartup
+      `Prelude.hashWithSalt` compressed
+      `Prelude.hashWithSalt` encoding
+      `Prelude.hashWithSalt` primaryKey
+      `Prelude.hashWithSalt` recordFormat
+
+instance Prelude.NFData VsamDetailAttributes where
+  rnf VsamDetailAttributes' {..} =
+    Prelude.rnf alternateKeys
+      `Prelude.seq` Prelude.rnf cacheAtStartup
+      `Prelude.seq` Prelude.rnf compressed
+      `Prelude.seq` Prelude.rnf encoding
+      `Prelude.seq` Prelude.rnf primaryKey
+      `Prelude.seq` Prelude.rnf recordFormat
diff --git a/gen/Amazonka/M2/UntagResource.hs b/gen/Amazonka/M2/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/UntagResource.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more tags from the specified resource.
+module Amazonka.M2.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.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'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The keys of the tags to remove.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys of the tags to remove.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The keys of the tags to remove.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/M2/UpdateApplication.hs b/gen/Amazonka/M2/UpdateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/UpdateApplication.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.M2.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)
+--
+-- Updates an application and creates a new version.
+module Amazonka.M2.UpdateApplication
+  ( -- * Creating a Request
+    UpdateApplication (..),
+    newUpdateApplication,
+
+    -- * Request Lenses
+    updateApplication_definition,
+    updateApplication_description,
+    updateApplication_applicationId,
+    updateApplication_currentApplicationVersion,
+
+    -- * Destructuring the Response
+    UpdateApplicationResponse (..),
+    newUpdateApplicationResponse,
+
+    -- * Response Lenses
+    updateApplicationResponse_httpStatus,
+    updateApplicationResponse_applicationVersion,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.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'
+  { -- | The application definition for this application. You can specify either
+    -- inline JSON or an S3 bucket location.
+    definition :: Prelude.Maybe Definition,
+    -- | The description of the application to update.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the application you want to update.
+    applicationId :: Prelude.Text,
+    -- | The current version of the application to update.
+    currentApplicationVersion :: Prelude.Natural
+  }
+  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:
+--
+-- 'definition', 'updateApplication_definition' - The application definition for this application. You can specify either
+-- inline JSON or an S3 bucket location.
+--
+-- 'description', 'updateApplication_description' - The description of the application to update.
+--
+-- 'applicationId', 'updateApplication_applicationId' - The unique identifier of the application you want to update.
+--
+-- 'currentApplicationVersion', 'updateApplication_currentApplicationVersion' - The current version of the application to update.
+newUpdateApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'currentApplicationVersion'
+  Prelude.Natural ->
+  UpdateApplication
+newUpdateApplication
+  pApplicationId_
+  pCurrentApplicationVersion_ =
+    UpdateApplication'
+      { definition = Prelude.Nothing,
+        description = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        currentApplicationVersion =
+          pCurrentApplicationVersion_
+      }
+
+-- | The application definition for this application. You can specify either
+-- inline JSON or an S3 bucket location.
+updateApplication_definition :: Lens.Lens' UpdateApplication (Prelude.Maybe Definition)
+updateApplication_definition = Lens.lens (\UpdateApplication' {definition} -> definition) (\s@UpdateApplication' {} a -> s {definition = a} :: UpdateApplication)
+
+-- | The description of the application to update.
+updateApplication_description :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_description = Lens.lens (\UpdateApplication' {description} -> description) (\s@UpdateApplication' {} a -> s {description = a} :: UpdateApplication)
+
+-- | The unique identifier of the application you want to update.
+updateApplication_applicationId :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_applicationId = Lens.lens (\UpdateApplication' {applicationId} -> applicationId) (\s@UpdateApplication' {} a -> s {applicationId = a} :: UpdateApplication)
+
+-- | The current version of the application to update.
+updateApplication_currentApplicationVersion :: Lens.Lens' UpdateApplication Prelude.Natural
+updateApplication_currentApplicationVersion = Lens.lens (\UpdateApplication' {currentApplicationVersion} -> currentApplicationVersion) (\s@UpdateApplication' {} a -> s {currentApplicationVersion = a} :: UpdateApplication)
+
+instance Core.AWSRequest UpdateApplication where
+  type
+    AWSResponse UpdateApplication =
+      UpdateApplicationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationVersion")
+      )
+
+instance Prelude.Hashable UpdateApplication where
+  hashWithSalt _salt UpdateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` definition
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` currentApplicationVersion
+
+instance Prelude.NFData UpdateApplication where
+  rnf UpdateApplication' {..} =
+    Prelude.rnf definition
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf currentApplicationVersion
+
+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
+          [ ("definition" Data..=) Prelude.<$> definition,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just
+              ( "currentApplicationVersion"
+                  Data..= currentApplicationVersion
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateApplication where
+  toPath UpdateApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS applicationId]
+
+instance Data.ToQuery UpdateApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateApplicationResponse' smart constructor.
+data UpdateApplicationResponse = UpdateApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The new version of the application.
+    applicationVersion :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateApplicationResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationVersion', 'updateApplicationResponse_applicationVersion' - The new version of the application.
+newUpdateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationVersion'
+  Prelude.Natural ->
+  UpdateApplicationResponse
+newUpdateApplicationResponse
+  pHttpStatus_
+  pApplicationVersion_ =
+    UpdateApplicationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        applicationVersion = pApplicationVersion_
+      }
+
+-- | The response's http status code.
+updateApplicationResponse_httpStatus :: Lens.Lens' UpdateApplicationResponse Prelude.Int
+updateApplicationResponse_httpStatus = Lens.lens (\UpdateApplicationResponse' {httpStatus} -> httpStatus) (\s@UpdateApplicationResponse' {} a -> s {httpStatus = a} :: UpdateApplicationResponse)
+
+-- | The new version of the application.
+updateApplicationResponse_applicationVersion :: Lens.Lens' UpdateApplicationResponse Prelude.Natural
+updateApplicationResponse_applicationVersion = Lens.lens (\UpdateApplicationResponse' {applicationVersion} -> applicationVersion) (\s@UpdateApplicationResponse' {} a -> s {applicationVersion = a} :: UpdateApplicationResponse)
+
+instance Prelude.NFData UpdateApplicationResponse where
+  rnf UpdateApplicationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationVersion
diff --git a/gen/Amazonka/M2/UpdateEnvironment.hs b/gen/Amazonka/M2/UpdateEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/UpdateEnvironment.hs
@@ -0,0 +1,267 @@
+{-# 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.M2.UpdateEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the configuration details for a specific runtime environment.
+module Amazonka.M2.UpdateEnvironment
+  ( -- * Creating a Request
+    UpdateEnvironment (..),
+    newUpdateEnvironment,
+
+    -- * Request Lenses
+    updateEnvironment_applyDuringMaintenanceWindow,
+    updateEnvironment_desiredCapacity,
+    updateEnvironment_engineVersion,
+    updateEnvironment_instanceType,
+    updateEnvironment_preferredMaintenanceWindow,
+    updateEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    UpdateEnvironmentResponse (..),
+    newUpdateEnvironmentResponse,
+
+    -- * Response Lenses
+    updateEnvironmentResponse_httpStatus,
+    updateEnvironmentResponse_environmentId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEnvironment' smart constructor.
+data UpdateEnvironment = UpdateEnvironment'
+  { -- | Indicates whether to update the runtime environment during the
+    -- maintenance window. The default is false. Currently, Amazon Web Services
+    -- Mainframe Modernization accepts the @engineVersion@ parameter only if
+    -- @applyDuringMaintenanceWindow@ is true. If any parameter other than
+    -- @engineVersion@ is provided in @UpdateEnvironmentRequest@, it will fail
+    -- if @applyDuringMaintenanceWindow@ is set to true.
+    applyDuringMaintenanceWindow :: Prelude.Maybe Prelude.Bool,
+    -- | The desired capacity for the runtime environment to update.
+    desiredCapacity :: Prelude.Maybe Prelude.Natural,
+    -- | The version of the runtime engine for the runtime environment.
+    engineVersion :: Prelude.Maybe Prelude.Text,
+    -- | The instance type for the runtime environment to update.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | Configures the maintenance window you want for the runtime environment.
+    -- If you do not provide a value, a random system-generated value will be
+    -- assigned.
+    preferredMaintenanceWindow :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the runtime environment that you want to
+    -- update.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applyDuringMaintenanceWindow', 'updateEnvironment_applyDuringMaintenanceWindow' - Indicates whether to update the runtime environment during the
+-- maintenance window. The default is false. Currently, Amazon Web Services
+-- Mainframe Modernization accepts the @engineVersion@ parameter only if
+-- @applyDuringMaintenanceWindow@ is true. If any parameter other than
+-- @engineVersion@ is provided in @UpdateEnvironmentRequest@, it will fail
+-- if @applyDuringMaintenanceWindow@ is set to true.
+--
+-- 'desiredCapacity', 'updateEnvironment_desiredCapacity' - The desired capacity for the runtime environment to update.
+--
+-- 'engineVersion', 'updateEnvironment_engineVersion' - The version of the runtime engine for the runtime environment.
+--
+-- 'instanceType', 'updateEnvironment_instanceType' - The instance type for the runtime environment to update.
+--
+-- 'preferredMaintenanceWindow', 'updateEnvironment_preferredMaintenanceWindow' - Configures the maintenance window you want for the runtime environment.
+-- If you do not provide a value, a random system-generated value will be
+-- assigned.
+--
+-- 'environmentId', 'updateEnvironment_environmentId' - The unique identifier of the runtime environment that you want to
+-- update.
+newUpdateEnvironment ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  UpdateEnvironment
+newUpdateEnvironment pEnvironmentId_ =
+  UpdateEnvironment'
+    { applyDuringMaintenanceWindow =
+        Prelude.Nothing,
+      desiredCapacity = Prelude.Nothing,
+      engineVersion = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      preferredMaintenanceWindow = Prelude.Nothing,
+      environmentId = pEnvironmentId_
+    }
+
+-- | Indicates whether to update the runtime environment during the
+-- maintenance window. The default is false. Currently, Amazon Web Services
+-- Mainframe Modernization accepts the @engineVersion@ parameter only if
+-- @applyDuringMaintenanceWindow@ is true. If any parameter other than
+-- @engineVersion@ is provided in @UpdateEnvironmentRequest@, it will fail
+-- if @applyDuringMaintenanceWindow@ is set to true.
+updateEnvironment_applyDuringMaintenanceWindow :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Bool)
+updateEnvironment_applyDuringMaintenanceWindow = Lens.lens (\UpdateEnvironment' {applyDuringMaintenanceWindow} -> applyDuringMaintenanceWindow) (\s@UpdateEnvironment' {} a -> s {applyDuringMaintenanceWindow = a} :: UpdateEnvironment)
+
+-- | The desired capacity for the runtime environment to update.
+updateEnvironment_desiredCapacity :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Natural)
+updateEnvironment_desiredCapacity = Lens.lens (\UpdateEnvironment' {desiredCapacity} -> desiredCapacity) (\s@UpdateEnvironment' {} a -> s {desiredCapacity = a} :: UpdateEnvironment)
+
+-- | The version of the runtime engine for the runtime environment.
+updateEnvironment_engineVersion :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_engineVersion = Lens.lens (\UpdateEnvironment' {engineVersion} -> engineVersion) (\s@UpdateEnvironment' {} a -> s {engineVersion = a} :: UpdateEnvironment)
+
+-- | The instance type for the runtime environment to update.
+updateEnvironment_instanceType :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_instanceType = Lens.lens (\UpdateEnvironment' {instanceType} -> instanceType) (\s@UpdateEnvironment' {} a -> s {instanceType = a} :: UpdateEnvironment)
+
+-- | Configures the maintenance window you want for the runtime environment.
+-- If you do not provide a value, a random system-generated value will be
+-- assigned.
+updateEnvironment_preferredMaintenanceWindow :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_preferredMaintenanceWindow = Lens.lens (\UpdateEnvironment' {preferredMaintenanceWindow} -> preferredMaintenanceWindow) (\s@UpdateEnvironment' {} a -> s {preferredMaintenanceWindow = a} :: UpdateEnvironment)
+
+-- | The unique identifier of the runtime environment that you want to
+-- update.
+updateEnvironment_environmentId :: Lens.Lens' UpdateEnvironment Prelude.Text
+updateEnvironment_environmentId = Lens.lens (\UpdateEnvironment' {environmentId} -> environmentId) (\s@UpdateEnvironment' {} a -> s {environmentId = a} :: UpdateEnvironment)
+
+instance Core.AWSRequest UpdateEnvironment where
+  type
+    AWSResponse UpdateEnvironment =
+      UpdateEnvironmentResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "environmentId")
+      )
+
+instance Prelude.Hashable UpdateEnvironment where
+  hashWithSalt _salt UpdateEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` applyDuringMaintenanceWindow
+      `Prelude.hashWithSalt` desiredCapacity
+      `Prelude.hashWithSalt` engineVersion
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` preferredMaintenanceWindow
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData UpdateEnvironment where
+  rnf UpdateEnvironment' {..} =
+    Prelude.rnf applyDuringMaintenanceWindow
+      `Prelude.seq` Prelude.rnf desiredCapacity
+      `Prelude.seq` Prelude.rnf engineVersion
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf preferredMaintenanceWindow
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders UpdateEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEnvironment where
+  toJSON UpdateEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applyDuringMaintenanceWindow" Data..=)
+              Prelude.<$> applyDuringMaintenanceWindow,
+            ("desiredCapacity" Data..=)
+              Prelude.<$> desiredCapacity,
+            ("engineVersion" Data..=) Prelude.<$> engineVersion,
+            ("instanceType" Data..=) Prelude.<$> instanceType,
+            ("preferredMaintenanceWindow" Data..=)
+              Prelude.<$> preferredMaintenanceWindow
+          ]
+      )
+
+instance Data.ToPath UpdateEnvironment where
+  toPath UpdateEnvironment' {..} =
+    Prelude.mconcat
+      ["/environments/", Data.toBS environmentId]
+
+instance Data.ToQuery UpdateEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEnvironmentResponse' smart constructor.
+data UpdateEnvironmentResponse = UpdateEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique identifier of the runtime environment that was updated.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateEnvironmentResponse_httpStatus' - The response's http status code.
+--
+-- 'environmentId', 'updateEnvironmentResponse_environmentId' - The unique identifier of the runtime environment that was updated.
+newUpdateEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  UpdateEnvironmentResponse
+newUpdateEnvironmentResponse
+  pHttpStatus_
+  pEnvironmentId_ =
+    UpdateEnvironmentResponse'
+      { httpStatus =
+          pHttpStatus_,
+        environmentId = pEnvironmentId_
+      }
+
+-- | The response's http status code.
+updateEnvironmentResponse_httpStatus :: Lens.Lens' UpdateEnvironmentResponse Prelude.Int
+updateEnvironmentResponse_httpStatus = Lens.lens (\UpdateEnvironmentResponse' {httpStatus} -> httpStatus) (\s@UpdateEnvironmentResponse' {} a -> s {httpStatus = a} :: UpdateEnvironmentResponse)
+
+-- | The unique identifier of the runtime environment that was updated.
+updateEnvironmentResponse_environmentId :: Lens.Lens' UpdateEnvironmentResponse Prelude.Text
+updateEnvironmentResponse_environmentId = Lens.lens (\UpdateEnvironmentResponse' {environmentId} -> environmentId) (\s@UpdateEnvironmentResponse' {} a -> s {environmentId = a} :: UpdateEnvironmentResponse)
+
+instance Prelude.NFData UpdateEnvironmentResponse where
+  rnf UpdateEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf environmentId
diff --git a/gen/Amazonka/M2/Waiters.hs b/gen/Amazonka/M2/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/M2/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.M2.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.M2.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.M2.Lens
+import Amazonka.M2.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.M2
+import Test.Amazonka.M2.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "M2"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/M2.hs b/test/Test/Amazonka/Gen/M2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/M2.hs
@@ -0,0 +1,678 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.M2
+-- Copyright   : (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.M2 where
+
+import Amazonka.M2
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.M2.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"
+--         [ requestCancelBatchJobExecution $
+--             newCancelBatchJobExecution
+--
+--         , requestCreateApplication $
+--             newCreateApplication
+--
+--         , requestCreateDataSetImportTask $
+--             newCreateDataSetImportTask
+--
+--         , requestCreateDeployment $
+--             newCreateDeployment
+--
+--         , requestCreateEnvironment $
+--             newCreateEnvironment
+--
+--         , requestDeleteApplication $
+--             newDeleteApplication
+--
+--         , requestDeleteApplicationFromEnvironment $
+--             newDeleteApplicationFromEnvironment
+--
+--         , requestDeleteEnvironment $
+--             newDeleteEnvironment
+--
+--         , requestGetApplication $
+--             newGetApplication
+--
+--         , requestGetApplicationVersion $
+--             newGetApplicationVersion
+--
+--         , requestGetBatchJobExecution $
+--             newGetBatchJobExecution
+--
+--         , requestGetDataSetDetails $
+--             newGetDataSetDetails
+--
+--         , requestGetDataSetImportTask $
+--             newGetDataSetImportTask
+--
+--         , requestGetDeployment $
+--             newGetDeployment
+--
+--         , requestGetEnvironment $
+--             newGetEnvironment
+--
+--         , requestListApplicationVersions $
+--             newListApplicationVersions
+--
+--         , requestListApplications $
+--             newListApplications
+--
+--         , requestListBatchJobDefinitions $
+--             newListBatchJobDefinitions
+--
+--         , requestListBatchJobExecutions $
+--             newListBatchJobExecutions
+--
+--         , requestListDataSetImportHistory $
+--             newListDataSetImportHistory
+--
+--         , requestListDataSets $
+--             newListDataSets
+--
+--         , requestListDeployments $
+--             newListDeployments
+--
+--         , requestListEngineVersions $
+--             newListEngineVersions
+--
+--         , requestListEnvironments $
+--             newListEnvironments
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartApplication $
+--             newStartApplication
+--
+--         , requestStartBatchJob $
+--             newStartBatchJob
+--
+--         , requestStopApplication $
+--             newStopApplication
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApplication $
+--             newUpdateApplication
+--
+--         , requestUpdateEnvironment $
+--             newUpdateEnvironment
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelBatchJobExecution $
+--             newCancelBatchJobExecutionResponse
+--
+--         , responseCreateApplication $
+--             newCreateApplicationResponse
+--
+--         , responseCreateDataSetImportTask $
+--             newCreateDataSetImportTaskResponse
+--
+--         , responseCreateDeployment $
+--             newCreateDeploymentResponse
+--
+--         , responseCreateEnvironment $
+--             newCreateEnvironmentResponse
+--
+--         , responseDeleteApplication $
+--             newDeleteApplicationResponse
+--
+--         , responseDeleteApplicationFromEnvironment $
+--             newDeleteApplicationFromEnvironmentResponse
+--
+--         , responseDeleteEnvironment $
+--             newDeleteEnvironmentResponse
+--
+--         , responseGetApplication $
+--             newGetApplicationResponse
+--
+--         , responseGetApplicationVersion $
+--             newGetApplicationVersionResponse
+--
+--         , responseGetBatchJobExecution $
+--             newGetBatchJobExecutionResponse
+--
+--         , responseGetDataSetDetails $
+--             newGetDataSetDetailsResponse
+--
+--         , responseGetDataSetImportTask $
+--             newGetDataSetImportTaskResponse
+--
+--         , responseGetDeployment $
+--             newGetDeploymentResponse
+--
+--         , responseGetEnvironment $
+--             newGetEnvironmentResponse
+--
+--         , responseListApplicationVersions $
+--             newListApplicationVersionsResponse
+--
+--         , responseListApplications $
+--             newListApplicationsResponse
+--
+--         , responseListBatchJobDefinitions $
+--             newListBatchJobDefinitionsResponse
+--
+--         , responseListBatchJobExecutions $
+--             newListBatchJobExecutionsResponse
+--
+--         , responseListDataSetImportHistory $
+--             newListDataSetImportHistoryResponse
+--
+--         , responseListDataSets $
+--             newListDataSetsResponse
+--
+--         , responseListDeployments $
+--             newListDeploymentsResponse
+--
+--         , responseListEngineVersions $
+--             newListEngineVersionsResponse
+--
+--         , responseListEnvironments $
+--             newListEnvironmentsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartApplication $
+--             newStartApplicationResponse
+--
+--         , responseStartBatchJob $
+--             newStartBatchJobResponse
+--
+--         , responseStopApplication $
+--             newStopApplicationResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApplication $
+--             newUpdateApplicationResponse
+--
+--         , responseUpdateEnvironment $
+--             newUpdateEnvironmentResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelBatchJobExecution :: CancelBatchJobExecution -> TestTree
+requestCancelBatchJobExecution =
+  req
+    "CancelBatchJobExecution"
+    "fixture/CancelBatchJobExecution.yaml"
+
+requestCreateApplication :: CreateApplication -> TestTree
+requestCreateApplication =
+  req
+    "CreateApplication"
+    "fixture/CreateApplication.yaml"
+
+requestCreateDataSetImportTask :: CreateDataSetImportTask -> TestTree
+requestCreateDataSetImportTask =
+  req
+    "CreateDataSetImportTask"
+    "fixture/CreateDataSetImportTask.yaml"
+
+requestCreateDeployment :: CreateDeployment -> TestTree
+requestCreateDeployment =
+  req
+    "CreateDeployment"
+    "fixture/CreateDeployment.yaml"
+
+requestCreateEnvironment :: CreateEnvironment -> TestTree
+requestCreateEnvironment =
+  req
+    "CreateEnvironment"
+    "fixture/CreateEnvironment.yaml"
+
+requestDeleteApplication :: DeleteApplication -> TestTree
+requestDeleteApplication =
+  req
+    "DeleteApplication"
+    "fixture/DeleteApplication.yaml"
+
+requestDeleteApplicationFromEnvironment :: DeleteApplicationFromEnvironment -> TestTree
+requestDeleteApplicationFromEnvironment =
+  req
+    "DeleteApplicationFromEnvironment"
+    "fixture/DeleteApplicationFromEnvironment.yaml"
+
+requestDeleteEnvironment :: DeleteEnvironment -> TestTree
+requestDeleteEnvironment =
+  req
+    "DeleteEnvironment"
+    "fixture/DeleteEnvironment.yaml"
+
+requestGetApplication :: GetApplication -> TestTree
+requestGetApplication =
+  req
+    "GetApplication"
+    "fixture/GetApplication.yaml"
+
+requestGetApplicationVersion :: GetApplicationVersion -> TestTree
+requestGetApplicationVersion =
+  req
+    "GetApplicationVersion"
+    "fixture/GetApplicationVersion.yaml"
+
+requestGetBatchJobExecution :: GetBatchJobExecution -> TestTree
+requestGetBatchJobExecution =
+  req
+    "GetBatchJobExecution"
+    "fixture/GetBatchJobExecution.yaml"
+
+requestGetDataSetDetails :: GetDataSetDetails -> TestTree
+requestGetDataSetDetails =
+  req
+    "GetDataSetDetails"
+    "fixture/GetDataSetDetails.yaml"
+
+requestGetDataSetImportTask :: GetDataSetImportTask -> TestTree
+requestGetDataSetImportTask =
+  req
+    "GetDataSetImportTask"
+    "fixture/GetDataSetImportTask.yaml"
+
+requestGetDeployment :: GetDeployment -> TestTree
+requestGetDeployment =
+  req
+    "GetDeployment"
+    "fixture/GetDeployment.yaml"
+
+requestGetEnvironment :: GetEnvironment -> TestTree
+requestGetEnvironment =
+  req
+    "GetEnvironment"
+    "fixture/GetEnvironment.yaml"
+
+requestListApplicationVersions :: ListApplicationVersions -> TestTree
+requestListApplicationVersions =
+  req
+    "ListApplicationVersions"
+    "fixture/ListApplicationVersions.yaml"
+
+requestListApplications :: ListApplications -> TestTree
+requestListApplications =
+  req
+    "ListApplications"
+    "fixture/ListApplications.yaml"
+
+requestListBatchJobDefinitions :: ListBatchJobDefinitions -> TestTree
+requestListBatchJobDefinitions =
+  req
+    "ListBatchJobDefinitions"
+    "fixture/ListBatchJobDefinitions.yaml"
+
+requestListBatchJobExecutions :: ListBatchJobExecutions -> TestTree
+requestListBatchJobExecutions =
+  req
+    "ListBatchJobExecutions"
+    "fixture/ListBatchJobExecutions.yaml"
+
+requestListDataSetImportHistory :: ListDataSetImportHistory -> TestTree
+requestListDataSetImportHistory =
+  req
+    "ListDataSetImportHistory"
+    "fixture/ListDataSetImportHistory.yaml"
+
+requestListDataSets :: ListDataSets -> TestTree
+requestListDataSets =
+  req
+    "ListDataSets"
+    "fixture/ListDataSets.yaml"
+
+requestListDeployments :: ListDeployments -> TestTree
+requestListDeployments =
+  req
+    "ListDeployments"
+    "fixture/ListDeployments.yaml"
+
+requestListEngineVersions :: ListEngineVersions -> TestTree
+requestListEngineVersions =
+  req
+    "ListEngineVersions"
+    "fixture/ListEngineVersions.yaml"
+
+requestListEnvironments :: ListEnvironments -> TestTree
+requestListEnvironments =
+  req
+    "ListEnvironments"
+    "fixture/ListEnvironments.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartApplication :: StartApplication -> TestTree
+requestStartApplication =
+  req
+    "StartApplication"
+    "fixture/StartApplication.yaml"
+
+requestStartBatchJob :: StartBatchJob -> TestTree
+requestStartBatchJob =
+  req
+    "StartBatchJob"
+    "fixture/StartBatchJob.yaml"
+
+requestStopApplication :: StopApplication -> TestTree
+requestStopApplication =
+  req
+    "StopApplication"
+    "fixture/StopApplication.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApplication :: UpdateApplication -> TestTree
+requestUpdateApplication =
+  req
+    "UpdateApplication"
+    "fixture/UpdateApplication.yaml"
+
+requestUpdateEnvironment :: UpdateEnvironment -> TestTree
+requestUpdateEnvironment =
+  req
+    "UpdateEnvironment"
+    "fixture/UpdateEnvironment.yaml"
+
+-- Responses
+
+responseCancelBatchJobExecution :: CancelBatchJobExecutionResponse -> TestTree
+responseCancelBatchJobExecution =
+  res
+    "CancelBatchJobExecutionResponse"
+    "fixture/CancelBatchJobExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelBatchJobExecution)
+
+responseCreateApplication :: CreateApplicationResponse -> TestTree
+responseCreateApplication =
+  res
+    "CreateApplicationResponse"
+    "fixture/CreateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApplication)
+
+responseCreateDataSetImportTask :: CreateDataSetImportTaskResponse -> TestTree
+responseCreateDataSetImportTask =
+  res
+    "CreateDataSetImportTaskResponse"
+    "fixture/CreateDataSetImportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDataSetImportTask)
+
+responseCreateDeployment :: CreateDeploymentResponse -> TestTree
+responseCreateDeployment =
+  res
+    "CreateDeploymentResponse"
+    "fixture/CreateDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDeployment)
+
+responseCreateEnvironment :: CreateEnvironmentResponse -> TestTree
+responseCreateEnvironment =
+  res
+    "CreateEnvironmentResponse"
+    "fixture/CreateEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEnvironment)
+
+responseDeleteApplication :: DeleteApplicationResponse -> TestTree
+responseDeleteApplication =
+  res
+    "DeleteApplicationResponse"
+    "fixture/DeleteApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplication)
+
+responseDeleteApplicationFromEnvironment :: DeleteApplicationFromEnvironmentResponse -> TestTree
+responseDeleteApplicationFromEnvironment =
+  res
+    "DeleteApplicationFromEnvironmentResponse"
+    "fixture/DeleteApplicationFromEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplicationFromEnvironment)
+
+responseDeleteEnvironment :: DeleteEnvironmentResponse -> TestTree
+responseDeleteEnvironment =
+  res
+    "DeleteEnvironmentResponse"
+    "fixture/DeleteEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEnvironment)
+
+responseGetApplication :: GetApplicationResponse -> TestTree
+responseGetApplication =
+  res
+    "GetApplicationResponse"
+    "fixture/GetApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApplication)
+
+responseGetApplicationVersion :: GetApplicationVersionResponse -> TestTree
+responseGetApplicationVersion =
+  res
+    "GetApplicationVersionResponse"
+    "fixture/GetApplicationVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApplicationVersion)
+
+responseGetBatchJobExecution :: GetBatchJobExecutionResponse -> TestTree
+responseGetBatchJobExecution =
+  res
+    "GetBatchJobExecutionResponse"
+    "fixture/GetBatchJobExecutionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBatchJobExecution)
+
+responseGetDataSetDetails :: GetDataSetDetailsResponse -> TestTree
+responseGetDataSetDetails =
+  res
+    "GetDataSetDetailsResponse"
+    "fixture/GetDataSetDetailsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDataSetDetails)
+
+responseGetDataSetImportTask :: GetDataSetImportTaskResponse -> TestTree
+responseGetDataSetImportTask =
+  res
+    "GetDataSetImportTaskResponse"
+    "fixture/GetDataSetImportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDataSetImportTask)
+
+responseGetDeployment :: GetDeploymentResponse -> TestTree
+responseGetDeployment =
+  res
+    "GetDeploymentResponse"
+    "fixture/GetDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeployment)
+
+responseGetEnvironment :: GetEnvironmentResponse -> TestTree
+responseGetEnvironment =
+  res
+    "GetEnvironmentResponse"
+    "fixture/GetEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEnvironment)
+
+responseListApplicationVersions :: ListApplicationVersionsResponse -> TestTree
+responseListApplicationVersions =
+  res
+    "ListApplicationVersionsResponse"
+    "fixture/ListApplicationVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApplicationVersions)
+
+responseListApplications :: ListApplicationsResponse -> TestTree
+responseListApplications =
+  res
+    "ListApplicationsResponse"
+    "fixture/ListApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApplications)
+
+responseListBatchJobDefinitions :: ListBatchJobDefinitionsResponse -> TestTree
+responseListBatchJobDefinitions =
+  res
+    "ListBatchJobDefinitionsResponse"
+    "fixture/ListBatchJobDefinitionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBatchJobDefinitions)
+
+responseListBatchJobExecutions :: ListBatchJobExecutionsResponse -> TestTree
+responseListBatchJobExecutions =
+  res
+    "ListBatchJobExecutionsResponse"
+    "fixture/ListBatchJobExecutionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBatchJobExecutions)
+
+responseListDataSetImportHistory :: ListDataSetImportHistoryResponse -> TestTree
+responseListDataSetImportHistory =
+  res
+    "ListDataSetImportHistoryResponse"
+    "fixture/ListDataSetImportHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataSetImportHistory)
+
+responseListDataSets :: ListDataSetsResponse -> TestTree
+responseListDataSets =
+  res
+    "ListDataSetsResponse"
+    "fixture/ListDataSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataSets)
+
+responseListDeployments :: ListDeploymentsResponse -> TestTree
+responseListDeployments =
+  res
+    "ListDeploymentsResponse"
+    "fixture/ListDeploymentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDeployments)
+
+responseListEngineVersions :: ListEngineVersionsResponse -> TestTree
+responseListEngineVersions =
+  res
+    "ListEngineVersionsResponse"
+    "fixture/ListEngineVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEngineVersions)
+
+responseListEnvironments :: ListEnvironmentsResponse -> TestTree
+responseListEnvironments =
+  res
+    "ListEnvironmentsResponse"
+    "fixture/ListEnvironmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEnvironments)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseStartApplication :: StartApplicationResponse -> TestTree
+responseStartApplication =
+  res
+    "StartApplicationResponse"
+    "fixture/StartApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartApplication)
+
+responseStartBatchJob :: StartBatchJobResponse -> TestTree
+responseStartBatchJob =
+  res
+    "StartBatchJobResponse"
+    "fixture/StartBatchJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartBatchJob)
+
+responseStopApplication :: StopApplicationResponse -> TestTree
+responseStopApplication =
+  res
+    "StopApplicationResponse"
+    "fixture/StopApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopApplication)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateApplication :: UpdateApplicationResponse -> TestTree
+responseUpdateApplication =
+  res
+    "UpdateApplicationResponse"
+    "fixture/UpdateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApplication)
+
+responseUpdateEnvironment :: UpdateEnvironmentResponse -> TestTree
+responseUpdateEnvironment =
+  res
+    "UpdateEnvironmentResponse"
+    "fixture/UpdateEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEnvironment)
diff --git a/test/Test/Amazonka/M2.hs b/test/Test/Amazonka/M2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/M2.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.M2
+-- Copyright   : (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.M2
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/M2/Internal.hs b/test/Test/Amazonka/M2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/M2/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.M2.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.M2.Internal where
