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 EMR Serverless SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-07-13@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-emr-serverless)
+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.EMRServerless](http://hackage.haskell.org/package/amazonka-emr-serverless/docs/Amazonka-EMRServerless.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-emr-serverless` 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-emr-serverless.cabal b/amazonka-emr-serverless.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-emr-serverless.cabal
@@ -0,0 +1,124 @@
+cabal-version:      2.2
+name:               amazonka-emr-serverless
+version:            2.0
+synopsis:           Amazon EMR Serverless 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-07-13@ 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.EMRServerless.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.EMRServerless" 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-emr-serverless
+
+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.EMRServerless
+    Amazonka.EMRServerless.CancelJobRun
+    Amazonka.EMRServerless.CreateApplication
+    Amazonka.EMRServerless.DeleteApplication
+    Amazonka.EMRServerless.GetApplication
+    Amazonka.EMRServerless.GetDashboardForJobRun
+    Amazonka.EMRServerless.GetJobRun
+    Amazonka.EMRServerless.Lens
+    Amazonka.EMRServerless.ListApplications
+    Amazonka.EMRServerless.ListJobRuns
+    Amazonka.EMRServerless.ListTagsForResource
+    Amazonka.EMRServerless.StartApplication
+    Amazonka.EMRServerless.StartJobRun
+    Amazonka.EMRServerless.StopApplication
+    Amazonka.EMRServerless.TagResource
+    Amazonka.EMRServerless.Types
+    Amazonka.EMRServerless.Types.Application
+    Amazonka.EMRServerless.Types.ApplicationState
+    Amazonka.EMRServerless.Types.ApplicationSummary
+    Amazonka.EMRServerless.Types.Architecture
+    Amazonka.EMRServerless.Types.AutoStartConfig
+    Amazonka.EMRServerless.Types.AutoStopConfig
+    Amazonka.EMRServerless.Types.Configuration
+    Amazonka.EMRServerless.Types.ConfigurationOverrides
+    Amazonka.EMRServerless.Types.Hive
+    Amazonka.EMRServerless.Types.ImageConfiguration
+    Amazonka.EMRServerless.Types.ImageConfigurationInput
+    Amazonka.EMRServerless.Types.InitialCapacityConfig
+    Amazonka.EMRServerless.Types.JobDriver
+    Amazonka.EMRServerless.Types.JobRun
+    Amazonka.EMRServerless.Types.JobRunState
+    Amazonka.EMRServerless.Types.JobRunSummary
+    Amazonka.EMRServerless.Types.ManagedPersistenceMonitoringConfiguration
+    Amazonka.EMRServerless.Types.MaximumAllowedResources
+    Amazonka.EMRServerless.Types.MonitoringConfiguration
+    Amazonka.EMRServerless.Types.NetworkConfiguration
+    Amazonka.EMRServerless.Types.S3MonitoringConfiguration
+    Amazonka.EMRServerless.Types.SparkSubmit
+    Amazonka.EMRServerless.Types.TotalResourceUtilization
+    Amazonka.EMRServerless.Types.WorkerResourceConfig
+    Amazonka.EMRServerless.Types.WorkerTypeSpecification
+    Amazonka.EMRServerless.Types.WorkerTypeSpecificationInput
+    Amazonka.EMRServerless.UntagResource
+    Amazonka.EMRServerless.UpdateApplication
+    Amazonka.EMRServerless.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-emr-serverless-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.EMRServerless
+    Test.Amazonka.EMRServerless.Internal
+    Test.Amazonka.Gen.EMRServerless
+
+  build-depends:
+    , amazonka-core            >=2.0 && <2.1
+    , amazonka-emr-serverless
+    , amazonka-test            >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelJobRun.yaml b/fixture/CancelJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/CancelJobRunResponse.proto b/fixture/CancelJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelJobRunResponse.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteApplicationResponse.proto b/fixture/DeleteApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationResponse.proto
diff --git a/fixture/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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/GetDashboardForJobRun.yaml b/fixture/GetDashboardForJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDashboardForJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/GetDashboardForJobRunResponse.proto b/fixture/GetDashboardForJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDashboardForJobRunResponse.proto
diff --git a/fixture/GetJobRun.yaml b/fixture/GetJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/GetJobRunResponse.proto b/fixture/GetJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobRunResponse.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/ListJobRuns.yaml b/fixture/ListJobRuns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobRuns.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/ListJobRunsResponse.proto b/fixture/ListJobRunsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobRunsResponse.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/StartJobRun.yaml b/fixture/StartJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/StartJobRunResponse.proto b/fixture/StartJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobRunResponse.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/emr-serverless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  emr-serverless.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/gen/Amazonka/EMRServerless.hs b/gen/Amazonka/EMRServerless.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless.hs
@@ -0,0 +1,302 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.EMRServerless
+-- 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-07-13@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon EMR Serverless is a new deployment option for Amazon EMR. EMR
+-- Serverless provides a serverless runtime environment that simplifies
+-- running analytics applications using the latest open source frameworks
+-- such as Apache Spark and Apache Hive. With EMR Serverless, you don’t
+-- have to configure, optimize, secure, or operate clusters to run
+-- applications with these frameworks.
+--
+-- The API reference to Amazon EMR Serverless is @emr-serverless@. The
+-- @emr-serverless@ prefix is used in the following scenarios:
+--
+-- -   It is the prefix in the CLI commands for Amazon EMR Serverless. For
+--     example, @aws emr-serverless start-job-run@.
+--
+-- -   It is the prefix before IAM policy actions for Amazon EMR
+--     Serverless. For example,
+--     @\"Action\": [\"emr-serverless:StartJobRun\"]@. For more
+--     information, see
+--     <https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-actions Policy actions for Amazon EMR Serverless>.
+--
+-- -   It is the prefix used in Amazon EMR Serverless service endpoints.
+--     For example, @emr-serverless.us-east-2.amazonaws.com@.
+module Amazonka.EMRServerless
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelJobRun
+    CancelJobRun (CancelJobRun'),
+    newCancelJobRun,
+    CancelJobRunResponse (CancelJobRunResponse'),
+    newCancelJobRunResponse,
+
+    -- ** CreateApplication
+    CreateApplication (CreateApplication'),
+    newCreateApplication,
+    CreateApplicationResponse (CreateApplicationResponse'),
+    newCreateApplicationResponse,
+
+    -- ** DeleteApplication
+    DeleteApplication (DeleteApplication'),
+    newDeleteApplication,
+    DeleteApplicationResponse (DeleteApplicationResponse'),
+    newDeleteApplicationResponse,
+
+    -- ** GetApplication
+    GetApplication (GetApplication'),
+    newGetApplication,
+    GetApplicationResponse (GetApplicationResponse'),
+    newGetApplicationResponse,
+
+    -- ** GetDashboardForJobRun
+    GetDashboardForJobRun (GetDashboardForJobRun'),
+    newGetDashboardForJobRun,
+    GetDashboardForJobRunResponse (GetDashboardForJobRunResponse'),
+    newGetDashboardForJobRunResponse,
+
+    -- ** GetJobRun
+    GetJobRun (GetJobRun'),
+    newGetJobRun,
+    GetJobRunResponse (GetJobRunResponse'),
+    newGetJobRunResponse,
+
+    -- ** ListApplications (Paginated)
+    ListApplications (ListApplications'),
+    newListApplications,
+    ListApplicationsResponse (ListApplicationsResponse'),
+    newListApplicationsResponse,
+
+    -- ** ListJobRuns (Paginated)
+    ListJobRuns (ListJobRuns'),
+    newListJobRuns,
+    ListJobRunsResponse (ListJobRunsResponse'),
+    newListJobRunsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartApplication
+    StartApplication (StartApplication'),
+    newStartApplication,
+    StartApplicationResponse (StartApplicationResponse'),
+    newStartApplicationResponse,
+
+    -- ** StartJobRun
+    StartJobRun (StartJobRun'),
+    newStartJobRun,
+    StartJobRunResponse (StartJobRunResponse'),
+    newStartJobRunResponse,
+
+    -- ** 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,
+
+    -- * Types
+
+    -- ** ApplicationState
+    ApplicationState (..),
+
+    -- ** Architecture
+    Architecture (..),
+
+    -- ** JobRunState
+    JobRunState (..),
+
+    -- ** Application
+    Application (Application'),
+    newApplication,
+
+    -- ** ApplicationSummary
+    ApplicationSummary (ApplicationSummary'),
+    newApplicationSummary,
+
+    -- ** AutoStartConfig
+    AutoStartConfig (AutoStartConfig'),
+    newAutoStartConfig,
+
+    -- ** AutoStopConfig
+    AutoStopConfig (AutoStopConfig'),
+    newAutoStopConfig,
+
+    -- ** Configuration
+    Configuration (Configuration'),
+    newConfiguration,
+
+    -- ** ConfigurationOverrides
+    ConfigurationOverrides (ConfigurationOverrides'),
+    newConfigurationOverrides,
+
+    -- ** Hive
+    Hive (Hive'),
+    newHive,
+
+    -- ** ImageConfiguration
+    ImageConfiguration (ImageConfiguration'),
+    newImageConfiguration,
+
+    -- ** ImageConfigurationInput
+    ImageConfigurationInput (ImageConfigurationInput'),
+    newImageConfigurationInput,
+
+    -- ** InitialCapacityConfig
+    InitialCapacityConfig (InitialCapacityConfig'),
+    newInitialCapacityConfig,
+
+    -- ** JobDriver
+    JobDriver (JobDriver'),
+    newJobDriver,
+
+    -- ** JobRun
+    JobRun (JobRun'),
+    newJobRun,
+
+    -- ** JobRunSummary
+    JobRunSummary (JobRunSummary'),
+    newJobRunSummary,
+
+    -- ** ManagedPersistenceMonitoringConfiguration
+    ManagedPersistenceMonitoringConfiguration (ManagedPersistenceMonitoringConfiguration'),
+    newManagedPersistenceMonitoringConfiguration,
+
+    -- ** MaximumAllowedResources
+    MaximumAllowedResources (MaximumAllowedResources'),
+    newMaximumAllowedResources,
+
+    -- ** MonitoringConfiguration
+    MonitoringConfiguration (MonitoringConfiguration'),
+    newMonitoringConfiguration,
+
+    -- ** NetworkConfiguration
+    NetworkConfiguration (NetworkConfiguration'),
+    newNetworkConfiguration,
+
+    -- ** S3MonitoringConfiguration
+    S3MonitoringConfiguration (S3MonitoringConfiguration'),
+    newS3MonitoringConfiguration,
+
+    -- ** SparkSubmit
+    SparkSubmit (SparkSubmit'),
+    newSparkSubmit,
+
+    -- ** TotalResourceUtilization
+    TotalResourceUtilization (TotalResourceUtilization'),
+    newTotalResourceUtilization,
+
+    -- ** WorkerResourceConfig
+    WorkerResourceConfig (WorkerResourceConfig'),
+    newWorkerResourceConfig,
+
+    -- ** WorkerTypeSpecification
+    WorkerTypeSpecification (WorkerTypeSpecification'),
+    newWorkerTypeSpecification,
+
+    -- ** WorkerTypeSpecificationInput
+    WorkerTypeSpecificationInput (WorkerTypeSpecificationInput'),
+    newWorkerTypeSpecificationInput,
+  )
+where
+
+import Amazonka.EMRServerless.CancelJobRun
+import Amazonka.EMRServerless.CreateApplication
+import Amazonka.EMRServerless.DeleteApplication
+import Amazonka.EMRServerless.GetApplication
+import Amazonka.EMRServerless.GetDashboardForJobRun
+import Amazonka.EMRServerless.GetJobRun
+import Amazonka.EMRServerless.Lens
+import Amazonka.EMRServerless.ListApplications
+import Amazonka.EMRServerless.ListJobRuns
+import Amazonka.EMRServerless.ListTagsForResource
+import Amazonka.EMRServerless.StartApplication
+import Amazonka.EMRServerless.StartJobRun
+import Amazonka.EMRServerless.StopApplication
+import Amazonka.EMRServerless.TagResource
+import Amazonka.EMRServerless.Types
+import Amazonka.EMRServerless.UntagResource
+import Amazonka.EMRServerless.UpdateApplication
+import Amazonka.EMRServerless.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 'EMRServerless'.
+
+-- $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/EMRServerless/CancelJobRun.hs b/gen/Amazonka/EMRServerless/CancelJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/CancelJobRun.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.EMRServerless.CancelJobRun
+-- 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 a job run.
+module Amazonka.EMRServerless.CancelJobRun
+  ( -- * Creating a Request
+    CancelJobRun (..),
+    newCancelJobRun,
+
+    -- * Request Lenses
+    cancelJobRun_applicationId,
+    cancelJobRun_jobRunId,
+
+    -- * Destructuring the Response
+    CancelJobRunResponse (..),
+    newCancelJobRunResponse,
+
+    -- * Response Lenses
+    cancelJobRunResponse_httpStatus,
+    cancelJobRunResponse_applicationId,
+    cancelJobRunResponse_jobRunId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelJobRun' smart constructor.
+data CancelJobRun = CancelJobRun'
+  { -- | The ID of the application on which the job run will be canceled.
+    applicationId :: Prelude.Text,
+    -- | The ID of the job run to cancel.
+    jobRunId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelJobRun_applicationId' - The ID of the application on which the job run will be canceled.
+--
+-- 'jobRunId', 'cancelJobRun_jobRunId' - The ID of the job run to cancel.
+newCancelJobRun ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'jobRunId'
+  Prelude.Text ->
+  CancelJobRun
+newCancelJobRun pApplicationId_ pJobRunId_ =
+  CancelJobRun'
+    { applicationId = pApplicationId_,
+      jobRunId = pJobRunId_
+    }
+
+-- | The ID of the application on which the job run will be canceled.
+cancelJobRun_applicationId :: Lens.Lens' CancelJobRun Prelude.Text
+cancelJobRun_applicationId = Lens.lens (\CancelJobRun' {applicationId} -> applicationId) (\s@CancelJobRun' {} a -> s {applicationId = a} :: CancelJobRun)
+
+-- | The ID of the job run to cancel.
+cancelJobRun_jobRunId :: Lens.Lens' CancelJobRun Prelude.Text
+cancelJobRun_jobRunId = Lens.lens (\CancelJobRun' {jobRunId} -> jobRunId) (\s@CancelJobRun' {} a -> s {jobRunId = a} :: CancelJobRun)
+
+instance Core.AWSRequest CancelJobRun where
+  type AWSResponse CancelJobRun = CancelJobRunResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CancelJobRunResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "jobRunId")
+      )
+
+instance Prelude.Hashable CancelJobRun where
+  hashWithSalt _salt CancelJobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` jobRunId
+
+instance Prelude.NFData CancelJobRun where
+  rnf CancelJobRun' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf jobRunId
+
+instance Data.ToHeaders CancelJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath CancelJobRun where
+  toPath CancelJobRun' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/jobruns/",
+        Data.toBS jobRunId
+      ]
+
+instance Data.ToQuery CancelJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelJobRunResponse' smart constructor.
+data CancelJobRunResponse = CancelJobRunResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The output contains the application ID on which the job run is
+    -- cancelled.
+    applicationId :: Prelude.Text,
+    -- | The output contains the ID of the cancelled job run.
+    jobRunId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelJobRunResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationId', 'cancelJobRunResponse_applicationId' - The output contains the application ID on which the job run is
+-- cancelled.
+--
+-- 'jobRunId', 'cancelJobRunResponse_jobRunId' - The output contains the ID of the cancelled job run.
+newCancelJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'jobRunId'
+  Prelude.Text ->
+  CancelJobRunResponse
+newCancelJobRunResponse
+  pHttpStatus_
+  pApplicationId_
+  pJobRunId_ =
+    CancelJobRunResponse'
+      { httpStatus = pHttpStatus_,
+        applicationId = pApplicationId_,
+        jobRunId = pJobRunId_
+      }
+
+-- | The response's http status code.
+cancelJobRunResponse_httpStatus :: Lens.Lens' CancelJobRunResponse Prelude.Int
+cancelJobRunResponse_httpStatus = Lens.lens (\CancelJobRunResponse' {httpStatus} -> httpStatus) (\s@CancelJobRunResponse' {} a -> s {httpStatus = a} :: CancelJobRunResponse)
+
+-- | The output contains the application ID on which the job run is
+-- cancelled.
+cancelJobRunResponse_applicationId :: Lens.Lens' CancelJobRunResponse Prelude.Text
+cancelJobRunResponse_applicationId = Lens.lens (\CancelJobRunResponse' {applicationId} -> applicationId) (\s@CancelJobRunResponse' {} a -> s {applicationId = a} :: CancelJobRunResponse)
+
+-- | The output contains the ID of the cancelled job run.
+cancelJobRunResponse_jobRunId :: Lens.Lens' CancelJobRunResponse Prelude.Text
+cancelJobRunResponse_jobRunId = Lens.lens (\CancelJobRunResponse' {jobRunId} -> jobRunId) (\s@CancelJobRunResponse' {} a -> s {jobRunId = a} :: CancelJobRunResponse)
+
+instance Prelude.NFData CancelJobRunResponse where
+  rnf CancelJobRunResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf jobRunId
diff --git a/gen/Amazonka/EMRServerless/CreateApplication.hs b/gen/Amazonka/EMRServerless/CreateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/CreateApplication.hs
@@ -0,0 +1,411 @@
+{-# 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.EMRServerless.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 an application.
+module Amazonka.EMRServerless.CreateApplication
+  ( -- * Creating a Request
+    CreateApplication (..),
+    newCreateApplication,
+
+    -- * Request Lenses
+    createApplication_architecture,
+    createApplication_autoStartConfiguration,
+    createApplication_autoStopConfiguration,
+    createApplication_imageConfiguration,
+    createApplication_initialCapacity,
+    createApplication_maximumCapacity,
+    createApplication_name,
+    createApplication_networkConfiguration,
+    createApplication_tags,
+    createApplication_workerTypeSpecifications,
+    createApplication_releaseLabel,
+    createApplication_type,
+    createApplication_clientToken,
+
+    -- * Destructuring the Response
+    CreateApplicationResponse (..),
+    newCreateApplicationResponse,
+
+    -- * Response Lenses
+    createApplicationResponse_name,
+    createApplicationResponse_httpStatus,
+    createApplicationResponse_applicationId,
+    createApplicationResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.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'
+  { -- | The CPU architecture of an application.
+    architecture :: Prelude.Maybe Architecture,
+    -- | The configuration for an application to automatically start on job
+    -- submission.
+    autoStartConfiguration :: Prelude.Maybe AutoStartConfig,
+    -- | The configuration for an application to automatically stop after a
+    -- certain amount of time being idle.
+    autoStopConfiguration :: Prelude.Maybe AutoStopConfig,
+    -- | The image configuration for all worker types. You can either set this
+    -- parameter or @imageConfiguration@ for each worker type in
+    -- @workerTypeSpecifications@.
+    imageConfiguration :: Prelude.Maybe ImageConfigurationInput,
+    -- | The capacity to initialize when the application is created.
+    initialCapacity :: Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig),
+    -- | The maximum capacity to allocate when the application is created. This
+    -- is cumulative across all workers at any given point in time, not just
+    -- when an application is created. No new resources will be created once
+    -- any one of the defined limits is hit.
+    maximumCapacity :: Prelude.Maybe MaximumAllowedResources,
+    -- | The name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The network configuration for customer VPC connectivity.
+    networkConfiguration :: Prelude.Maybe NetworkConfiguration,
+    -- | The tags assigned to the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The key-value pairs that specify worker type to
+    -- @WorkerTypeSpecificationInput@. This parameter must contain all valid
+    -- worker types for a Spark or Hive application. Valid worker types include
+    -- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
+    -- @TezTask@ for Hive applications. You can either set image details in
+    -- this parameter for each worker type, or in @imageConfiguration@ for all
+    -- worker types.
+    workerTypeSpecifications :: Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecificationInput),
+    -- | The EMR release associated with the application.
+    releaseLabel :: Prelude.Text,
+    -- | The type of application you want to start, such as Spark or Hive.
+    type' :: Prelude.Text,
+    -- | The client idempotency token of the application to create. Its value
+    -- must be unique for each request.
+    clientToken :: 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:
+--
+-- 'architecture', 'createApplication_architecture' - The CPU architecture of an application.
+--
+-- 'autoStartConfiguration', 'createApplication_autoStartConfiguration' - The configuration for an application to automatically start on job
+-- submission.
+--
+-- 'autoStopConfiguration', 'createApplication_autoStopConfiguration' - The configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+--
+-- 'imageConfiguration', 'createApplication_imageConfiguration' - The image configuration for all worker types. You can either set this
+-- parameter or @imageConfiguration@ for each worker type in
+-- @workerTypeSpecifications@.
+--
+-- 'initialCapacity', 'createApplication_initialCapacity' - The capacity to initialize when the application is created.
+--
+-- 'maximumCapacity', 'createApplication_maximumCapacity' - The maximum capacity to allocate when the application is created. This
+-- is cumulative across all workers at any given point in time, not just
+-- when an application is created. No new resources will be created once
+-- any one of the defined limits is hit.
+--
+-- 'name', 'createApplication_name' - The name of the application.
+--
+-- 'networkConfiguration', 'createApplication_networkConfiguration' - The network configuration for customer VPC connectivity.
+--
+-- 'tags', 'createApplication_tags' - The tags assigned to the application.
+--
+-- 'workerTypeSpecifications', 'createApplication_workerTypeSpecifications' - The key-value pairs that specify worker type to
+-- @WorkerTypeSpecificationInput@. This parameter must contain all valid
+-- worker types for a Spark or Hive application. Valid worker types include
+-- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
+-- @TezTask@ for Hive applications. You can either set image details in
+-- this parameter for each worker type, or in @imageConfiguration@ for all
+-- worker types.
+--
+-- 'releaseLabel', 'createApplication_releaseLabel' - The EMR release associated with the application.
+--
+-- 'type'', 'createApplication_type' - The type of application you want to start, such as Spark or Hive.
+--
+-- 'clientToken', 'createApplication_clientToken' - The client idempotency token of the application to create. Its value
+-- must be unique for each request.
+newCreateApplication ::
+  -- | 'releaseLabel'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateApplication
+newCreateApplication
+  pReleaseLabel_
+  pType_
+  pClientToken_ =
+    CreateApplication'
+      { architecture = Prelude.Nothing,
+        autoStartConfiguration = Prelude.Nothing,
+        autoStopConfiguration = Prelude.Nothing,
+        imageConfiguration = Prelude.Nothing,
+        initialCapacity = Prelude.Nothing,
+        maximumCapacity = Prelude.Nothing,
+        name = Prelude.Nothing,
+        networkConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workerTypeSpecifications = Prelude.Nothing,
+        releaseLabel = pReleaseLabel_,
+        type' = pType_,
+        clientToken = pClientToken_
+      }
+
+-- | The CPU architecture of an application.
+createApplication_architecture :: Lens.Lens' CreateApplication (Prelude.Maybe Architecture)
+createApplication_architecture = Lens.lens (\CreateApplication' {architecture} -> architecture) (\s@CreateApplication' {} a -> s {architecture = a} :: CreateApplication)
+
+-- | The configuration for an application to automatically start on job
+-- submission.
+createApplication_autoStartConfiguration :: Lens.Lens' CreateApplication (Prelude.Maybe AutoStartConfig)
+createApplication_autoStartConfiguration = Lens.lens (\CreateApplication' {autoStartConfiguration} -> autoStartConfiguration) (\s@CreateApplication' {} a -> s {autoStartConfiguration = a} :: CreateApplication)
+
+-- | The configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+createApplication_autoStopConfiguration :: Lens.Lens' CreateApplication (Prelude.Maybe AutoStopConfig)
+createApplication_autoStopConfiguration = Lens.lens (\CreateApplication' {autoStopConfiguration} -> autoStopConfiguration) (\s@CreateApplication' {} a -> s {autoStopConfiguration = a} :: CreateApplication)
+
+-- | The image configuration for all worker types. You can either set this
+-- parameter or @imageConfiguration@ for each worker type in
+-- @workerTypeSpecifications@.
+createApplication_imageConfiguration :: Lens.Lens' CreateApplication (Prelude.Maybe ImageConfigurationInput)
+createApplication_imageConfiguration = Lens.lens (\CreateApplication' {imageConfiguration} -> imageConfiguration) (\s@CreateApplication' {} a -> s {imageConfiguration = a} :: CreateApplication)
+
+-- | The capacity to initialize when the application is created.
+createApplication_initialCapacity :: Lens.Lens' CreateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig))
+createApplication_initialCapacity = Lens.lens (\CreateApplication' {initialCapacity} -> initialCapacity) (\s@CreateApplication' {} a -> s {initialCapacity = a} :: CreateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum capacity to allocate when the application is created. This
+-- is cumulative across all workers at any given point in time, not just
+-- when an application is created. No new resources will be created once
+-- any one of the defined limits is hit.
+createApplication_maximumCapacity :: Lens.Lens' CreateApplication (Prelude.Maybe MaximumAllowedResources)
+createApplication_maximumCapacity = Lens.lens (\CreateApplication' {maximumCapacity} -> maximumCapacity) (\s@CreateApplication' {} a -> s {maximumCapacity = a} :: CreateApplication)
+
+-- | The name of the application.
+createApplication_name :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_name = Lens.lens (\CreateApplication' {name} -> name) (\s@CreateApplication' {} a -> s {name = a} :: CreateApplication)
+
+-- | The network configuration for customer VPC connectivity.
+createApplication_networkConfiguration :: Lens.Lens' CreateApplication (Prelude.Maybe NetworkConfiguration)
+createApplication_networkConfiguration = Lens.lens (\CreateApplication' {networkConfiguration} -> networkConfiguration) (\s@CreateApplication' {} a -> s {networkConfiguration = a} :: CreateApplication)
+
+-- | The tags assigned 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 key-value pairs that specify worker type to
+-- @WorkerTypeSpecificationInput@. This parameter must contain all valid
+-- worker types for a Spark or Hive application. Valid worker types include
+-- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
+-- @TezTask@ for Hive applications. You can either set image details in
+-- this parameter for each worker type, or in @imageConfiguration@ for all
+-- worker types.
+createApplication_workerTypeSpecifications :: Lens.Lens' CreateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecificationInput))
+createApplication_workerTypeSpecifications = Lens.lens (\CreateApplication' {workerTypeSpecifications} -> workerTypeSpecifications) (\s@CreateApplication' {} a -> s {workerTypeSpecifications = a} :: CreateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The EMR release associated with the application.
+createApplication_releaseLabel :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_releaseLabel = Lens.lens (\CreateApplication' {releaseLabel} -> releaseLabel) (\s@CreateApplication' {} a -> s {releaseLabel = a} :: CreateApplication)
+
+-- | The type of application you want to start, such as Spark or Hive.
+createApplication_type :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_type = Lens.lens (\CreateApplication' {type'} -> type') (\s@CreateApplication' {} a -> s {type' = a} :: CreateApplication)
+
+-- | The client idempotency token of the application to create. Its value
+-- must be unique for each request.
+createApplication_clientToken :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_clientToken = Lens.lens (\CreateApplication' {clientToken} -> clientToken) (\s@CreateApplication' {} a -> s {clientToken = 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.<$> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable CreateApplication where
+  hashWithSalt _salt CreateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` autoStartConfiguration
+      `Prelude.hashWithSalt` autoStopConfiguration
+      `Prelude.hashWithSalt` imageConfiguration
+      `Prelude.hashWithSalt` initialCapacity
+      `Prelude.hashWithSalt` maximumCapacity
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` networkConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` workerTypeSpecifications
+      `Prelude.hashWithSalt` releaseLabel
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateApplication where
+  rnf CreateApplication' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf autoStartConfiguration
+      `Prelude.seq` Prelude.rnf autoStopConfiguration
+      `Prelude.seq` Prelude.rnf imageConfiguration
+      `Prelude.seq` Prelude.rnf initialCapacity
+      `Prelude.seq` Prelude.rnf maximumCapacity
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workerTypeSpecifications
+      `Prelude.seq` Prelude.rnf releaseLabel
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf clientToken
+
+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
+          [ ("architecture" Data..=) Prelude.<$> architecture,
+            ("autoStartConfiguration" Data..=)
+              Prelude.<$> autoStartConfiguration,
+            ("autoStopConfiguration" Data..=)
+              Prelude.<$> autoStopConfiguration,
+            ("imageConfiguration" Data..=)
+              Prelude.<$> imageConfiguration,
+            ("initialCapacity" Data..=)
+              Prelude.<$> initialCapacity,
+            ("maximumCapacity" Data..=)
+              Prelude.<$> maximumCapacity,
+            ("name" Data..=) Prelude.<$> name,
+            ("networkConfiguration" Data..=)
+              Prelude.<$> networkConfiguration,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("workerTypeSpecifications" Data..=)
+              Prelude.<$> workerTypeSpecifications,
+            Prelude.Just ("releaseLabel" Data..= releaseLabel),
+            Prelude.Just ("type" Data..= type'),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+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 output contains the name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The output contains the application ID.
+    applicationId :: Prelude.Text,
+    -- | The output contains the ARN of the application.
+    arn :: Prelude.Text
+  }
+  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:
+--
+-- 'name', 'createApplicationResponse_name' - The output contains the name of the application.
+--
+-- 'httpStatus', 'createApplicationResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationId', 'createApplicationResponse_applicationId' - The output contains the application ID.
+--
+-- 'arn', 'createApplicationResponse_arn' - The output contains the ARN of the application.
+newCreateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  CreateApplicationResponse
+newCreateApplicationResponse
+  pHttpStatus_
+  pApplicationId_
+  pArn_ =
+    CreateApplicationResponse'
+      { name = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        applicationId = pApplicationId_,
+        arn = pArn_
+      }
+
+-- | The output contains the name of the application.
+createApplicationResponse_name :: Lens.Lens' CreateApplicationResponse (Prelude.Maybe Prelude.Text)
+createApplicationResponse_name = Lens.lens (\CreateApplicationResponse' {name} -> name) (\s@CreateApplicationResponse' {} a -> s {name = a} :: CreateApplicationResponse)
+
+-- | 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 output contains the application ID.
+createApplicationResponse_applicationId :: Lens.Lens' CreateApplicationResponse Prelude.Text
+createApplicationResponse_applicationId = Lens.lens (\CreateApplicationResponse' {applicationId} -> applicationId) (\s@CreateApplicationResponse' {} a -> s {applicationId = a} :: CreateApplicationResponse)
+
+-- | The output contains the ARN of the application.
+createApplicationResponse_arn :: Lens.Lens' CreateApplicationResponse Prelude.Text
+createApplicationResponse_arn = Lens.lens (\CreateApplicationResponse' {arn} -> arn) (\s@CreateApplicationResponse' {} a -> s {arn = a} :: CreateApplicationResponse)
+
+instance Prelude.NFData CreateApplicationResponse where
+  rnf CreateApplicationResponse' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/EMRServerless/DeleteApplication.hs b/gen/Amazonka/EMRServerless/DeleteApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/DeleteApplication.hs
@@ -0,0 +1,149 @@
+{-# 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.EMRServerless.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 an application. An application has to be in a stopped or created
+-- state in order to be deleted.
+module Amazonka.EMRServerless.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.EMRServerless.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 ID of the application that will be deleted.
+    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 ID of the application that will be deleted.
+newDeleteApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  DeleteApplication
+newDeleteApplication pApplicationId_ =
+  DeleteApplication' {applicationId = pApplicationId_}
+
+-- | The ID of the application that will be deleted.
+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/EMRServerless/GetApplication.hs b/gen/Amazonka/EMRServerless/GetApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/GetApplication.hs
@@ -0,0 +1,160 @@
+{-# 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.EMRServerless.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)
+--
+-- Displays detailed information about a specified application.
+module Amazonka.EMRServerless.GetApplication
+  ( -- * Creating a Request
+    GetApplication (..),
+    newGetApplication,
+
+    -- * Request Lenses
+    getApplication_applicationId,
+
+    -- * Destructuring the Response
+    GetApplicationResponse (..),
+    newGetApplicationResponse,
+
+    -- * Response Lenses
+    getApplicationResponse_httpStatus,
+    getApplicationResponse_application,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.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 ID of the application that will be described.
+    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 ID of the application that will be described.
+newGetApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  GetApplication
+newGetApplication pApplicationId_ =
+  GetApplication' {applicationId = pApplicationId_}
+
+-- | The ID of the application that will be described.
+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.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "application")
+      )
+
+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 response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The output displays information about the specified application.
+    application :: Application
+  }
+  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:
+--
+-- 'httpStatus', 'getApplicationResponse_httpStatus' - The response's http status code.
+--
+-- 'application', 'getApplicationResponse_application' - The output displays information about the specified application.
+newGetApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'application'
+  Application ->
+  GetApplicationResponse
+newGetApplicationResponse pHttpStatus_ pApplication_ =
+  GetApplicationResponse'
+    { httpStatus = pHttpStatus_,
+      application = pApplication_
+    }
+
+-- | 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 output displays information about the specified application.
+getApplicationResponse_application :: Lens.Lens' GetApplicationResponse Application
+getApplicationResponse_application = Lens.lens (\GetApplicationResponse' {application} -> application) (\s@GetApplicationResponse' {} a -> s {application = a} :: GetApplicationResponse)
+
+instance Prelude.NFData GetApplicationResponse where
+  rnf GetApplicationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf application
diff --git a/gen/Amazonka/EMRServerless/GetDashboardForJobRun.hs b/gen/Amazonka/EMRServerless/GetDashboardForJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/GetDashboardForJobRun.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.GetDashboardForJobRun
+-- 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 URL to access the job run dashboard.
+module Amazonka.EMRServerless.GetDashboardForJobRun
+  ( -- * Creating a Request
+    GetDashboardForJobRun (..),
+    newGetDashboardForJobRun,
+
+    -- * Request Lenses
+    getDashboardForJobRun_applicationId,
+    getDashboardForJobRun_jobRunId,
+
+    -- * Destructuring the Response
+    GetDashboardForJobRunResponse (..),
+    newGetDashboardForJobRunResponse,
+
+    -- * Response Lenses
+    getDashboardForJobRunResponse_url,
+    getDashboardForJobRunResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDashboardForJobRun' smart constructor.
+data GetDashboardForJobRun = GetDashboardForJobRun'
+  { -- | The ID of the application.
+    applicationId :: Prelude.Text,
+    -- | The ID of the job run.
+    jobRunId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDashboardForJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDashboardForJobRun_applicationId' - The ID of the application.
+--
+-- 'jobRunId', 'getDashboardForJobRun_jobRunId' - The ID of the job run.
+newGetDashboardForJobRun ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'jobRunId'
+  Prelude.Text ->
+  GetDashboardForJobRun
+newGetDashboardForJobRun pApplicationId_ pJobRunId_ =
+  GetDashboardForJobRun'
+    { applicationId =
+        pApplicationId_,
+      jobRunId = pJobRunId_
+    }
+
+-- | The ID of the application.
+getDashboardForJobRun_applicationId :: Lens.Lens' GetDashboardForJobRun Prelude.Text
+getDashboardForJobRun_applicationId = Lens.lens (\GetDashboardForJobRun' {applicationId} -> applicationId) (\s@GetDashboardForJobRun' {} a -> s {applicationId = a} :: GetDashboardForJobRun)
+
+-- | The ID of the job run.
+getDashboardForJobRun_jobRunId :: Lens.Lens' GetDashboardForJobRun Prelude.Text
+getDashboardForJobRun_jobRunId = Lens.lens (\GetDashboardForJobRun' {jobRunId} -> jobRunId) (\s@GetDashboardForJobRun' {} a -> s {jobRunId = a} :: GetDashboardForJobRun)
+
+instance Core.AWSRequest GetDashboardForJobRun where
+  type
+    AWSResponse GetDashboardForJobRun =
+      GetDashboardForJobRunResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDashboardForJobRunResponse'
+            Prelude.<$> (x Data..?> "url")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDashboardForJobRun where
+  hashWithSalt _salt GetDashboardForJobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` jobRunId
+
+instance Prelude.NFData GetDashboardForJobRun where
+  rnf GetDashboardForJobRun' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf jobRunId
+
+instance Data.ToHeaders GetDashboardForJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDashboardForJobRun where
+  toPath GetDashboardForJobRun' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/jobruns/",
+        Data.toBS jobRunId,
+        "/dashboard"
+      ]
+
+instance Data.ToQuery GetDashboardForJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDashboardForJobRunResponse' smart constructor.
+data GetDashboardForJobRunResponse = GetDashboardForJobRunResponse'
+  { -- | The URL to view job run\'s dashboard.
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDashboardForJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'url', 'getDashboardForJobRunResponse_url' - The URL to view job run\'s dashboard.
+--
+-- 'httpStatus', 'getDashboardForJobRunResponse_httpStatus' - The response's http status code.
+newGetDashboardForJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDashboardForJobRunResponse
+newGetDashboardForJobRunResponse pHttpStatus_ =
+  GetDashboardForJobRunResponse'
+    { url =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URL to view job run\'s dashboard.
+getDashboardForJobRunResponse_url :: Lens.Lens' GetDashboardForJobRunResponse (Prelude.Maybe Prelude.Text)
+getDashboardForJobRunResponse_url = Lens.lens (\GetDashboardForJobRunResponse' {url} -> url) (\s@GetDashboardForJobRunResponse' {} a -> s {url = a} :: GetDashboardForJobRunResponse)
+
+-- | The response's http status code.
+getDashboardForJobRunResponse_httpStatus :: Lens.Lens' GetDashboardForJobRunResponse Prelude.Int
+getDashboardForJobRunResponse_httpStatus = Lens.lens (\GetDashboardForJobRunResponse' {httpStatus} -> httpStatus) (\s@GetDashboardForJobRunResponse' {} a -> s {httpStatus = a} :: GetDashboardForJobRunResponse)
+
+instance Prelude.NFData GetDashboardForJobRunResponse where
+  rnf GetDashboardForJobRunResponse' {..} =
+    Prelude.rnf url
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EMRServerless/GetJobRun.hs b/gen/Amazonka/EMRServerless/GetJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/GetJobRun.hs
@@ -0,0 +1,180 @@
+{-# 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.EMRServerless.GetJobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays detailed information about a job run.
+module Amazonka.EMRServerless.GetJobRun
+  ( -- * Creating a Request
+    GetJobRun (..),
+    newGetJobRun,
+
+    -- * Request Lenses
+    getJobRun_applicationId,
+    getJobRun_jobRunId,
+
+    -- * Destructuring the Response
+    GetJobRunResponse (..),
+    newGetJobRunResponse,
+
+    -- * Response Lenses
+    getJobRunResponse_httpStatus,
+    getJobRunResponse_jobRun,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetJobRun' smart constructor.
+data GetJobRun = GetJobRun'
+  { -- | The ID of the application on which the job run is submitted.
+    applicationId :: Prelude.Text,
+    -- | The ID of the job run.
+    jobRunId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getJobRun_applicationId' - The ID of the application on which the job run is submitted.
+--
+-- 'jobRunId', 'getJobRun_jobRunId' - The ID of the job run.
+newGetJobRun ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'jobRunId'
+  Prelude.Text ->
+  GetJobRun
+newGetJobRun pApplicationId_ pJobRunId_ =
+  GetJobRun'
+    { applicationId = pApplicationId_,
+      jobRunId = pJobRunId_
+    }
+
+-- | The ID of the application on which the job run is submitted.
+getJobRun_applicationId :: Lens.Lens' GetJobRun Prelude.Text
+getJobRun_applicationId = Lens.lens (\GetJobRun' {applicationId} -> applicationId) (\s@GetJobRun' {} a -> s {applicationId = a} :: GetJobRun)
+
+-- | The ID of the job run.
+getJobRun_jobRunId :: Lens.Lens' GetJobRun Prelude.Text
+getJobRun_jobRunId = Lens.lens (\GetJobRun' {jobRunId} -> jobRunId) (\s@GetJobRun' {} a -> s {jobRunId = a} :: GetJobRun)
+
+instance Core.AWSRequest GetJobRun where
+  type AWSResponse GetJobRun = GetJobRunResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetJobRunResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "jobRun")
+      )
+
+instance Prelude.Hashable GetJobRun where
+  hashWithSalt _salt GetJobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` jobRunId
+
+instance Prelude.NFData GetJobRun where
+  rnf GetJobRun' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf jobRunId
+
+instance Data.ToHeaders GetJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetJobRun where
+  toPath GetJobRun' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/jobruns/",
+        Data.toBS jobRunId
+      ]
+
+instance Data.ToQuery GetJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetJobRunResponse' smart constructor.
+data GetJobRunResponse = GetJobRunResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The output displays information about the job run.
+    jobRun :: JobRun
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getJobRunResponse_httpStatus' - The response's http status code.
+--
+-- 'jobRun', 'getJobRunResponse_jobRun' - The output displays information about the job run.
+newGetJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'jobRun'
+  JobRun ->
+  GetJobRunResponse
+newGetJobRunResponse pHttpStatus_ pJobRun_ =
+  GetJobRunResponse'
+    { httpStatus = pHttpStatus_,
+      jobRun = pJobRun_
+    }
+
+-- | The response's http status code.
+getJobRunResponse_httpStatus :: Lens.Lens' GetJobRunResponse Prelude.Int
+getJobRunResponse_httpStatus = Lens.lens (\GetJobRunResponse' {httpStatus} -> httpStatus) (\s@GetJobRunResponse' {} a -> s {httpStatus = a} :: GetJobRunResponse)
+
+-- | The output displays information about the job run.
+getJobRunResponse_jobRun :: Lens.Lens' GetJobRunResponse JobRun
+getJobRunResponse_jobRun = Lens.lens (\GetJobRunResponse' {jobRun} -> jobRun) (\s@GetJobRunResponse' {} a -> s {jobRun = a} :: GetJobRunResponse)
+
+instance Prelude.NFData GetJobRunResponse where
+  rnf GetJobRunResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobRun
diff --git a/gen/Amazonka/EMRServerless/Lens.hs b/gen/Amazonka/EMRServerless/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Lens.hs
@@ -0,0 +1,318 @@
+{-# 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.EMRServerless.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.EMRServerless.Lens
+  ( -- * Operations
+
+    -- ** CancelJobRun
+    cancelJobRun_applicationId,
+    cancelJobRun_jobRunId,
+    cancelJobRunResponse_httpStatus,
+    cancelJobRunResponse_applicationId,
+    cancelJobRunResponse_jobRunId,
+
+    -- ** CreateApplication
+    createApplication_architecture,
+    createApplication_autoStartConfiguration,
+    createApplication_autoStopConfiguration,
+    createApplication_imageConfiguration,
+    createApplication_initialCapacity,
+    createApplication_maximumCapacity,
+    createApplication_name,
+    createApplication_networkConfiguration,
+    createApplication_tags,
+    createApplication_workerTypeSpecifications,
+    createApplication_releaseLabel,
+    createApplication_type,
+    createApplication_clientToken,
+    createApplicationResponse_name,
+    createApplicationResponse_httpStatus,
+    createApplicationResponse_applicationId,
+    createApplicationResponse_arn,
+
+    -- ** DeleteApplication
+    deleteApplication_applicationId,
+    deleteApplicationResponse_httpStatus,
+
+    -- ** GetApplication
+    getApplication_applicationId,
+    getApplicationResponse_httpStatus,
+    getApplicationResponse_application,
+
+    -- ** GetDashboardForJobRun
+    getDashboardForJobRun_applicationId,
+    getDashboardForJobRun_jobRunId,
+    getDashboardForJobRunResponse_url,
+    getDashboardForJobRunResponse_httpStatus,
+
+    -- ** GetJobRun
+    getJobRun_applicationId,
+    getJobRun_jobRunId,
+    getJobRunResponse_httpStatus,
+    getJobRunResponse_jobRun,
+
+    -- ** ListApplications
+    listApplications_maxResults,
+    listApplications_nextToken,
+    listApplications_states,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+    listApplicationsResponse_applications,
+
+    -- ** ListJobRuns
+    listJobRuns_createdAtAfter,
+    listJobRuns_createdAtBefore,
+    listJobRuns_maxResults,
+    listJobRuns_nextToken,
+    listJobRuns_states,
+    listJobRuns_applicationId,
+    listJobRunsResponse_nextToken,
+    listJobRunsResponse_httpStatus,
+    listJobRunsResponse_jobRuns,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** StartApplication
+    startApplication_applicationId,
+    startApplicationResponse_httpStatus,
+
+    -- ** StartJobRun
+    startJobRun_configurationOverrides,
+    startJobRun_executionTimeoutMinutes,
+    startJobRun_jobDriver,
+    startJobRun_name,
+    startJobRun_tags,
+    startJobRun_applicationId,
+    startJobRun_clientToken,
+    startJobRun_executionRoleArn,
+    startJobRunResponse_httpStatus,
+    startJobRunResponse_applicationId,
+    startJobRunResponse_jobRunId,
+    startJobRunResponse_arn,
+
+    -- ** StopApplication
+    stopApplication_applicationId,
+    stopApplicationResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateApplication
+    updateApplication_architecture,
+    updateApplication_autoStartConfiguration,
+    updateApplication_autoStopConfiguration,
+    updateApplication_imageConfiguration,
+    updateApplication_initialCapacity,
+    updateApplication_maximumCapacity,
+    updateApplication_networkConfiguration,
+    updateApplication_workerTypeSpecifications,
+    updateApplication_applicationId,
+    updateApplication_clientToken,
+    updateApplicationResponse_httpStatus,
+    updateApplicationResponse_application,
+
+    -- * Types
+
+    -- ** Application
+    application_architecture,
+    application_autoStartConfiguration,
+    application_autoStopConfiguration,
+    application_imageConfiguration,
+    application_initialCapacity,
+    application_maximumCapacity,
+    application_name,
+    application_networkConfiguration,
+    application_stateDetails,
+    application_tags,
+    application_workerTypeSpecifications,
+    application_applicationId,
+    application_arn,
+    application_releaseLabel,
+    application_type,
+    application_state,
+    application_createdAt,
+    application_updatedAt,
+
+    -- ** ApplicationSummary
+    applicationSummary_architecture,
+    applicationSummary_name,
+    applicationSummary_stateDetails,
+    applicationSummary_id,
+    applicationSummary_arn,
+    applicationSummary_releaseLabel,
+    applicationSummary_type,
+    applicationSummary_state,
+    applicationSummary_createdAt,
+    applicationSummary_updatedAt,
+
+    -- ** AutoStartConfig
+    autoStartConfig_enabled,
+
+    -- ** AutoStopConfig
+    autoStopConfig_enabled,
+    autoStopConfig_idleTimeoutMinutes,
+
+    -- ** Configuration
+    configuration_configurations,
+    configuration_properties,
+    configuration_classification,
+
+    -- ** ConfigurationOverrides
+    configurationOverrides_applicationConfiguration,
+    configurationOverrides_monitoringConfiguration,
+
+    -- ** Hive
+    hive_initQueryFile,
+    hive_parameters,
+    hive_query,
+
+    -- ** ImageConfiguration
+    imageConfiguration_resolvedImageDigest,
+    imageConfiguration_imageUri,
+
+    -- ** ImageConfigurationInput
+    imageConfigurationInput_imageUri,
+
+    -- ** InitialCapacityConfig
+    initialCapacityConfig_workerConfiguration,
+    initialCapacityConfig_workerCount,
+
+    -- ** JobDriver
+    jobDriver_hive,
+    jobDriver_sparkSubmit,
+
+    -- ** JobRun
+    jobRun_configurationOverrides,
+    jobRun_name,
+    jobRun_networkConfiguration,
+    jobRun_tags,
+    jobRun_totalExecutionDurationSeconds,
+    jobRun_totalResourceUtilization,
+    jobRun_applicationId,
+    jobRun_jobRunId,
+    jobRun_arn,
+    jobRun_createdBy,
+    jobRun_createdAt,
+    jobRun_updatedAt,
+    jobRun_executionRole,
+    jobRun_state,
+    jobRun_stateDetails,
+    jobRun_releaseLabel,
+    jobRun_jobDriver,
+
+    -- ** JobRunSummary
+    jobRunSummary_name,
+    jobRunSummary_type,
+    jobRunSummary_applicationId,
+    jobRunSummary_id,
+    jobRunSummary_arn,
+    jobRunSummary_createdBy,
+    jobRunSummary_createdAt,
+    jobRunSummary_updatedAt,
+    jobRunSummary_executionRole,
+    jobRunSummary_state,
+    jobRunSummary_stateDetails,
+    jobRunSummary_releaseLabel,
+
+    -- ** ManagedPersistenceMonitoringConfiguration
+    managedPersistenceMonitoringConfiguration_enabled,
+    managedPersistenceMonitoringConfiguration_encryptionKeyArn,
+
+    -- ** MaximumAllowedResources
+    maximumAllowedResources_disk,
+    maximumAllowedResources_cpu,
+    maximumAllowedResources_memory,
+
+    -- ** MonitoringConfiguration
+    monitoringConfiguration_managedPersistenceMonitoringConfiguration,
+    monitoringConfiguration_s3MonitoringConfiguration,
+
+    -- ** NetworkConfiguration
+    networkConfiguration_securityGroupIds,
+    networkConfiguration_subnetIds,
+
+    -- ** S3MonitoringConfiguration
+    s3MonitoringConfiguration_encryptionKeyArn,
+    s3MonitoringConfiguration_logUri,
+
+    -- ** SparkSubmit
+    sparkSubmit_entryPointArguments,
+    sparkSubmit_sparkSubmitParameters,
+    sparkSubmit_entryPoint,
+
+    -- ** TotalResourceUtilization
+    totalResourceUtilization_memoryGBHour,
+    totalResourceUtilization_storageGBHour,
+    totalResourceUtilization_vCPUHour,
+
+    -- ** WorkerResourceConfig
+    workerResourceConfig_disk,
+    workerResourceConfig_cpu,
+    workerResourceConfig_memory,
+
+    -- ** WorkerTypeSpecification
+    workerTypeSpecification_imageConfiguration,
+
+    -- ** WorkerTypeSpecificationInput
+    workerTypeSpecificationInput_imageConfiguration,
+  )
+where
+
+import Amazonka.EMRServerless.CancelJobRun
+import Amazonka.EMRServerless.CreateApplication
+import Amazonka.EMRServerless.DeleteApplication
+import Amazonka.EMRServerless.GetApplication
+import Amazonka.EMRServerless.GetDashboardForJobRun
+import Amazonka.EMRServerless.GetJobRun
+import Amazonka.EMRServerless.ListApplications
+import Amazonka.EMRServerless.ListJobRuns
+import Amazonka.EMRServerless.ListTagsForResource
+import Amazonka.EMRServerless.StartApplication
+import Amazonka.EMRServerless.StartJobRun
+import Amazonka.EMRServerless.StopApplication
+import Amazonka.EMRServerless.TagResource
+import Amazonka.EMRServerless.Types.Application
+import Amazonka.EMRServerless.Types.ApplicationSummary
+import Amazonka.EMRServerless.Types.AutoStartConfig
+import Amazonka.EMRServerless.Types.AutoStopConfig
+import Amazonka.EMRServerless.Types.Configuration
+import Amazonka.EMRServerless.Types.ConfigurationOverrides
+import Amazonka.EMRServerless.Types.Hive
+import Amazonka.EMRServerless.Types.ImageConfiguration
+import Amazonka.EMRServerless.Types.ImageConfigurationInput
+import Amazonka.EMRServerless.Types.InitialCapacityConfig
+import Amazonka.EMRServerless.Types.JobDriver
+import Amazonka.EMRServerless.Types.JobRun
+import Amazonka.EMRServerless.Types.JobRunSummary
+import Amazonka.EMRServerless.Types.ManagedPersistenceMonitoringConfiguration
+import Amazonka.EMRServerless.Types.MaximumAllowedResources
+import Amazonka.EMRServerless.Types.MonitoringConfiguration
+import Amazonka.EMRServerless.Types.NetworkConfiguration
+import Amazonka.EMRServerless.Types.S3MonitoringConfiguration
+import Amazonka.EMRServerless.Types.SparkSubmit
+import Amazonka.EMRServerless.Types.TotalResourceUtilization
+import Amazonka.EMRServerless.Types.WorkerResourceConfig
+import Amazonka.EMRServerless.Types.WorkerTypeSpecification
+import Amazonka.EMRServerless.Types.WorkerTypeSpecificationInput
+import Amazonka.EMRServerless.UntagResource
+import Amazonka.EMRServerless.UpdateApplication
diff --git a/gen/Amazonka/EMRServerless/ListApplications.hs b/gen/Amazonka/EMRServerless/ListApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/ListApplications.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.EMRServerless.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 applications based on a set of parameters.
+--
+-- This operation returns paginated results.
+module Amazonka.EMRServerless.ListApplications
+  ( -- * Creating a Request
+    ListApplications (..),
+    newListApplications,
+
+    -- * Request Lenses
+    listApplications_maxResults,
+    listApplications_nextToken,
+    listApplications_states,
+
+    -- * 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.EMRServerless.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 maximum number of applications that can be listed.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of application results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An optional filter for application states. Note that if this filter
+    -- contains multiple states, the resulting list will be grouped by the
+    -- state.
+    states :: Prelude.Maybe (Prelude.NonEmpty ApplicationState)
+  }
+  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:
+--
+-- 'maxResults', 'listApplications_maxResults' - The maximum number of applications that can be listed.
+--
+-- 'nextToken', 'listApplications_nextToken' - The token for the next set of application results.
+--
+-- 'states', 'listApplications_states' - An optional filter for application states. Note that if this filter
+-- contains multiple states, the resulting list will be grouped by the
+-- state.
+newListApplications ::
+  ListApplications
+newListApplications =
+  ListApplications'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      states = Prelude.Nothing
+    }
+
+-- | The maximum number of applications that can be listed.
+listApplications_maxResults :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Natural)
+listApplications_maxResults = Lens.lens (\ListApplications' {maxResults} -> maxResults) (\s@ListApplications' {} a -> s {maxResults = a} :: ListApplications)
+
+-- | The token for the next set of application results.
+listApplications_nextToken :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Text)
+listApplications_nextToken = Lens.lens (\ListApplications' {nextToken} -> nextToken) (\s@ListApplications' {} a -> s {nextToken = a} :: ListApplications)
+
+-- | An optional filter for application states. Note that if this filter
+-- contains multiple states, the resulting list will be grouped by the
+-- state.
+listApplications_states :: Lens.Lens' ListApplications (Prelude.Maybe (Prelude.NonEmpty ApplicationState))
+listApplications_states = Lens.lens (\ListApplications' {states} -> states) (\s@ListApplications' {} a -> s {states = a} :: ListApplications) Prelude.. Lens.mapping Lens.coerced
+
+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` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` states
+
+instance Prelude.NFData ListApplications where
+  rnf ListApplications' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf states
+
+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
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "states"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> states)
+      ]
+
+-- | /See:/ 'newListApplicationsResponse' smart constructor.
+data ListApplicationsResponse = ListApplicationsResponse'
+  { -- | The output displays the token for the next set of application results.
+    -- This is required for pagination and is available as a response of the
+    -- previous request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The output lists the specified applications.
+    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' - The output displays the token for the next set of application results.
+-- This is required for pagination and is available as a response of the
+-- previous request.
+--
+-- 'httpStatus', 'listApplicationsResponse_httpStatus' - The response's http status code.
+--
+-- 'applications', 'listApplicationsResponse_applications' - The output lists the specified applications.
+newListApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListApplicationsResponse
+newListApplicationsResponse pHttpStatus_ =
+  ListApplicationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      applications = Prelude.mempty
+    }
+
+-- | The output displays the token for the next set of application results.
+-- This is required for pagination and is available as a response of the
+-- previous request.
+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)
+
+-- | The output lists the specified applications.
+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/EMRServerless/ListJobRuns.hs b/gen/Amazonka/EMRServerless/ListJobRuns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/ListJobRuns.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.EMRServerless.ListJobRuns
+-- 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 job runs based on a set of parameters.
+--
+-- This operation returns paginated results.
+module Amazonka.EMRServerless.ListJobRuns
+  ( -- * Creating a Request
+    ListJobRuns (..),
+    newListJobRuns,
+
+    -- * Request Lenses
+    listJobRuns_createdAtAfter,
+    listJobRuns_createdAtBefore,
+    listJobRuns_maxResults,
+    listJobRuns_nextToken,
+    listJobRuns_states,
+    listJobRuns_applicationId,
+
+    -- * Destructuring the Response
+    ListJobRunsResponse (..),
+    newListJobRunsResponse,
+
+    -- * Response Lenses
+    listJobRunsResponse_nextToken,
+    listJobRunsResponse_httpStatus,
+    listJobRunsResponse_jobRuns,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListJobRuns' smart constructor.
+data ListJobRuns = ListJobRuns'
+  { -- | The lower bound of the option to filter by creation date and time.
+    createdAtAfter :: Prelude.Maybe Data.POSIX,
+    -- | The upper bound of the option to filter by creation date and time.
+    createdAtBefore :: Prelude.Maybe Data.POSIX,
+    -- | The maximum number of job runs that can be listed.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of job run results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An optional filter for job run states. Note that if this filter contains
+    -- multiple states, the resulting list will be grouped by the state.
+    states :: Prelude.Maybe [JobRunState],
+    -- | The ID of the application for which to list the job run.
+    applicationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobRuns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAtAfter', 'listJobRuns_createdAtAfter' - The lower bound of the option to filter by creation date and time.
+--
+-- 'createdAtBefore', 'listJobRuns_createdAtBefore' - The upper bound of the option to filter by creation date and time.
+--
+-- 'maxResults', 'listJobRuns_maxResults' - The maximum number of job runs that can be listed.
+--
+-- 'nextToken', 'listJobRuns_nextToken' - The token for the next set of job run results.
+--
+-- 'states', 'listJobRuns_states' - An optional filter for job run states. Note that if this filter contains
+-- multiple states, the resulting list will be grouped by the state.
+--
+-- 'applicationId', 'listJobRuns_applicationId' - The ID of the application for which to list the job run.
+newListJobRuns ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  ListJobRuns
+newListJobRuns pApplicationId_ =
+  ListJobRuns'
+    { createdAtAfter = Prelude.Nothing,
+      createdAtBefore = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      states = Prelude.Nothing,
+      applicationId = pApplicationId_
+    }
+
+-- | The lower bound of the option to filter by creation date and time.
+listJobRuns_createdAtAfter :: Lens.Lens' ListJobRuns (Prelude.Maybe Prelude.UTCTime)
+listJobRuns_createdAtAfter = Lens.lens (\ListJobRuns' {createdAtAfter} -> createdAtAfter) (\s@ListJobRuns' {} a -> s {createdAtAfter = a} :: ListJobRuns) Prelude.. Lens.mapping Data._Time
+
+-- | The upper bound of the option to filter by creation date and time.
+listJobRuns_createdAtBefore :: Lens.Lens' ListJobRuns (Prelude.Maybe Prelude.UTCTime)
+listJobRuns_createdAtBefore = Lens.lens (\ListJobRuns' {createdAtBefore} -> createdAtBefore) (\s@ListJobRuns' {} a -> s {createdAtBefore = a} :: ListJobRuns) Prelude.. Lens.mapping Data._Time
+
+-- | The maximum number of job runs that can be listed.
+listJobRuns_maxResults :: Lens.Lens' ListJobRuns (Prelude.Maybe Prelude.Natural)
+listJobRuns_maxResults = Lens.lens (\ListJobRuns' {maxResults} -> maxResults) (\s@ListJobRuns' {} a -> s {maxResults = a} :: ListJobRuns)
+
+-- | The token for the next set of job run results.
+listJobRuns_nextToken :: Lens.Lens' ListJobRuns (Prelude.Maybe Prelude.Text)
+listJobRuns_nextToken = Lens.lens (\ListJobRuns' {nextToken} -> nextToken) (\s@ListJobRuns' {} a -> s {nextToken = a} :: ListJobRuns)
+
+-- | An optional filter for job run states. Note that if this filter contains
+-- multiple states, the resulting list will be grouped by the state.
+listJobRuns_states :: Lens.Lens' ListJobRuns (Prelude.Maybe [JobRunState])
+listJobRuns_states = Lens.lens (\ListJobRuns' {states} -> states) (\s@ListJobRuns' {} a -> s {states = a} :: ListJobRuns) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the application for which to list the job run.
+listJobRuns_applicationId :: Lens.Lens' ListJobRuns Prelude.Text
+listJobRuns_applicationId = Lens.lens (\ListJobRuns' {applicationId} -> applicationId) (\s@ListJobRuns' {} a -> s {applicationId = a} :: ListJobRuns)
+
+instance Core.AWSPager ListJobRuns where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listJobRunsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listJobRunsResponse_jobRuns) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listJobRuns_nextToken
+          Lens..~ rs
+          Lens.^? listJobRunsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListJobRuns where
+  type AWSResponse ListJobRuns = ListJobRunsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListJobRunsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "jobRuns" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListJobRuns where
+  hashWithSalt _salt ListJobRuns' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAtAfter
+      `Prelude.hashWithSalt` createdAtBefore
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` states
+      `Prelude.hashWithSalt` applicationId
+
+instance Prelude.NFData ListJobRuns where
+  rnf ListJobRuns' {..} =
+    Prelude.rnf createdAtAfter
+      `Prelude.seq` Prelude.rnf createdAtBefore
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf states
+      `Prelude.seq` Prelude.rnf applicationId
+
+instance Data.ToHeaders ListJobRuns where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListJobRuns where
+  toPath ListJobRuns' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/jobruns"
+      ]
+
+instance Data.ToQuery ListJobRuns where
+  toQuery ListJobRuns' {..} =
+    Prelude.mconcat
+      [ "createdAtAfter" Data.=: createdAtAfter,
+        "createdAtBefore" Data.=: createdAtBefore,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "states"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> states)
+      ]
+
+-- | /See:/ 'newListJobRunsResponse' smart constructor.
+data ListJobRunsResponse = ListJobRunsResponse'
+  { -- | The output displays the token for the next set of job run results. This
+    -- is required for pagination and is available as a response of the
+    -- previous request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The output lists information about the specified job runs.
+    jobRuns :: [JobRunSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobRunsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listJobRunsResponse_nextToken' - The output displays the token for the next set of job run results. This
+-- is required for pagination and is available as a response of the
+-- previous request.
+--
+-- 'httpStatus', 'listJobRunsResponse_httpStatus' - The response's http status code.
+--
+-- 'jobRuns', 'listJobRunsResponse_jobRuns' - The output lists information about the specified job runs.
+newListJobRunsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListJobRunsResponse
+newListJobRunsResponse pHttpStatus_ =
+  ListJobRunsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      jobRuns = Prelude.mempty
+    }
+
+-- | The output displays the token for the next set of job run results. This
+-- is required for pagination and is available as a response of the
+-- previous request.
+listJobRunsResponse_nextToken :: Lens.Lens' ListJobRunsResponse (Prelude.Maybe Prelude.Text)
+listJobRunsResponse_nextToken = Lens.lens (\ListJobRunsResponse' {nextToken} -> nextToken) (\s@ListJobRunsResponse' {} a -> s {nextToken = a} :: ListJobRunsResponse)
+
+-- | The response's http status code.
+listJobRunsResponse_httpStatus :: Lens.Lens' ListJobRunsResponse Prelude.Int
+listJobRunsResponse_httpStatus = Lens.lens (\ListJobRunsResponse' {httpStatus} -> httpStatus) (\s@ListJobRunsResponse' {} a -> s {httpStatus = a} :: ListJobRunsResponse)
+
+-- | The output lists information about the specified job runs.
+listJobRunsResponse_jobRuns :: Lens.Lens' ListJobRunsResponse [JobRunSummary]
+listJobRunsResponse_jobRuns = Lens.lens (\ListJobRunsResponse' {jobRuns} -> jobRuns) (\s@ListJobRunsResponse' {} a -> s {jobRuns = a} :: ListJobRunsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListJobRunsResponse where
+  rnf ListJobRunsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf jobRuns
diff --git a/gen/Amazonka/EMRServerless/ListTagsForResource.hs b/gen/Amazonka/EMRServerless/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/ListTagsForResource.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.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 assigned to the resources.
+module Amazonka.EMRServerless.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.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) that identifies the resource to list the
+    -- tags for. Currently, the supported resources are Amazon EMR Serverless
+    -- applications and job runs.
+    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) that identifies the resource to list the
+-- tags for. Currently, the supported resources are Amazon EMR Serverless
+-- applications and job runs.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) that identifies the resource to list the
+-- tags for. Currently, the supported resources are Amazon EMR Serverless
+-- applications and job runs.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags for the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags for the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags for the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EMRServerless/StartApplication.hs b/gen/Amazonka/EMRServerless/StartApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/StartApplication.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.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 a specified application and initializes initial capacity if
+-- configured.
+module Amazonka.EMRServerless.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.EMRServerless.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 ID of the application 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 ID of the application to start.
+newStartApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  StartApplication
+newStartApplication pApplicationId_ =
+  StartApplication' {applicationId = pApplicationId_}
+
+-- | The ID of the application 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/EMRServerless/StartJobRun.hs b/gen/Amazonka/EMRServerless/StartJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/StartJobRun.hs
@@ -0,0 +1,315 @@
+{-# 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.EMRServerless.StartJobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a job run.
+module Amazonka.EMRServerless.StartJobRun
+  ( -- * Creating a Request
+    StartJobRun (..),
+    newStartJobRun,
+
+    -- * Request Lenses
+    startJobRun_configurationOverrides,
+    startJobRun_executionTimeoutMinutes,
+    startJobRun_jobDriver,
+    startJobRun_name,
+    startJobRun_tags,
+    startJobRun_applicationId,
+    startJobRun_clientToken,
+    startJobRun_executionRoleArn,
+
+    -- * Destructuring the Response
+    StartJobRunResponse (..),
+    newStartJobRunResponse,
+
+    -- * Response Lenses
+    startJobRunResponse_httpStatus,
+    startJobRunResponse_applicationId,
+    startJobRunResponse_jobRunId,
+    startJobRunResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartJobRun' smart constructor.
+data StartJobRun = StartJobRun'
+  { -- | The configuration overrides for the job run.
+    configurationOverrides :: Prelude.Maybe ConfigurationOverrides,
+    -- | The maximum duration for the job run to run. If the job run runs beyond
+    -- this duration, it will be automatically cancelled.
+    executionTimeoutMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | The job driver for the job run.
+    jobDriver :: Prelude.Maybe JobDriver,
+    -- | The optional job run name. This doesn\'t have to be unique.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the job run.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the application on which to run the job.
+    applicationId :: Prelude.Text,
+    -- | The client idempotency token of the job run to start. Its value must be
+    -- unique for each request.
+    clientToken :: Prelude.Text,
+    -- | The execution role ARN for the job run.
+    executionRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationOverrides', 'startJobRun_configurationOverrides' - The configuration overrides for the job run.
+--
+-- 'executionTimeoutMinutes', 'startJobRun_executionTimeoutMinutes' - The maximum duration for the job run to run. If the job run runs beyond
+-- this duration, it will be automatically cancelled.
+--
+-- 'jobDriver', 'startJobRun_jobDriver' - The job driver for the job run.
+--
+-- 'name', 'startJobRun_name' - The optional job run name. This doesn\'t have to be unique.
+--
+-- 'tags', 'startJobRun_tags' - The tags assigned to the job run.
+--
+-- 'applicationId', 'startJobRun_applicationId' - The ID of the application on which to run the job.
+--
+-- 'clientToken', 'startJobRun_clientToken' - The client idempotency token of the job run to start. Its value must be
+-- unique for each request.
+--
+-- 'executionRoleArn', 'startJobRun_executionRoleArn' - The execution role ARN for the job run.
+newStartJobRun ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  -- | 'executionRoleArn'
+  Prelude.Text ->
+  StartJobRun
+newStartJobRun
+  pApplicationId_
+  pClientToken_
+  pExecutionRoleArn_ =
+    StartJobRun'
+      { configurationOverrides =
+          Prelude.Nothing,
+        executionTimeoutMinutes = Prelude.Nothing,
+        jobDriver = Prelude.Nothing,
+        name = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        clientToken = pClientToken_,
+        executionRoleArn = pExecutionRoleArn_
+      }
+
+-- | The configuration overrides for the job run.
+startJobRun_configurationOverrides :: Lens.Lens' StartJobRun (Prelude.Maybe ConfigurationOverrides)
+startJobRun_configurationOverrides = Lens.lens (\StartJobRun' {configurationOverrides} -> configurationOverrides) (\s@StartJobRun' {} a -> s {configurationOverrides = a} :: StartJobRun)
+
+-- | The maximum duration for the job run to run. If the job run runs beyond
+-- this duration, it will be automatically cancelled.
+startJobRun_executionTimeoutMinutes :: Lens.Lens' StartJobRun (Prelude.Maybe Prelude.Natural)
+startJobRun_executionTimeoutMinutes = Lens.lens (\StartJobRun' {executionTimeoutMinutes} -> executionTimeoutMinutes) (\s@StartJobRun' {} a -> s {executionTimeoutMinutes = a} :: StartJobRun)
+
+-- | The job driver for the job run.
+startJobRun_jobDriver :: Lens.Lens' StartJobRun (Prelude.Maybe JobDriver)
+startJobRun_jobDriver = Lens.lens (\StartJobRun' {jobDriver} -> jobDriver) (\s@StartJobRun' {} a -> s {jobDriver = a} :: StartJobRun)
+
+-- | The optional job run name. This doesn\'t have to be unique.
+startJobRun_name :: Lens.Lens' StartJobRun (Prelude.Maybe Prelude.Text)
+startJobRun_name = Lens.lens (\StartJobRun' {name} -> name) (\s@StartJobRun' {} a -> s {name = a} :: StartJobRun)
+
+-- | The tags assigned to the job run.
+startJobRun_tags :: Lens.Lens' StartJobRun (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startJobRun_tags = Lens.lens (\StartJobRun' {tags} -> tags) (\s@StartJobRun' {} a -> s {tags = a} :: StartJobRun) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the application on which to run the job.
+startJobRun_applicationId :: Lens.Lens' StartJobRun Prelude.Text
+startJobRun_applicationId = Lens.lens (\StartJobRun' {applicationId} -> applicationId) (\s@StartJobRun' {} a -> s {applicationId = a} :: StartJobRun)
+
+-- | The client idempotency token of the job run to start. Its value must be
+-- unique for each request.
+startJobRun_clientToken :: Lens.Lens' StartJobRun Prelude.Text
+startJobRun_clientToken = Lens.lens (\StartJobRun' {clientToken} -> clientToken) (\s@StartJobRun' {} a -> s {clientToken = a} :: StartJobRun)
+
+-- | The execution role ARN for the job run.
+startJobRun_executionRoleArn :: Lens.Lens' StartJobRun Prelude.Text
+startJobRun_executionRoleArn = Lens.lens (\StartJobRun' {executionRoleArn} -> executionRoleArn) (\s@StartJobRun' {} a -> s {executionRoleArn = a} :: StartJobRun)
+
+instance Core.AWSRequest StartJobRun where
+  type AWSResponse StartJobRun = StartJobRunResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartJobRunResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "applicationId")
+            Prelude.<*> (x Data..:> "jobRunId")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable StartJobRun where
+  hashWithSalt _salt StartJobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurationOverrides
+      `Prelude.hashWithSalt` executionTimeoutMinutes
+      `Prelude.hashWithSalt` jobDriver
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` executionRoleArn
+
+instance Prelude.NFData StartJobRun where
+  rnf StartJobRun' {..} =
+    Prelude.rnf configurationOverrides
+      `Prelude.seq` Prelude.rnf executionTimeoutMinutes
+      `Prelude.seq` Prelude.rnf jobDriver
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf executionRoleArn
+
+instance Data.ToHeaders StartJobRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartJobRun where
+  toJSON StartJobRun' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("configurationOverrides" Data..=)
+              Prelude.<$> configurationOverrides,
+            ("executionTimeoutMinutes" Data..=)
+              Prelude.<$> executionTimeoutMinutes,
+            ("jobDriver" Data..=) Prelude.<$> jobDriver,
+            ("name" Data..=) Prelude.<$> name,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("clientToken" Data..= clientToken),
+            Prelude.Just
+              ("executionRoleArn" Data..= executionRoleArn)
+          ]
+      )
+
+instance Data.ToPath StartJobRun where
+  toPath StartJobRun' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS applicationId,
+        "/jobruns"
+      ]
+
+instance Data.ToQuery StartJobRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartJobRunResponse' smart constructor.
+data StartJobRunResponse = StartJobRunResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | This output displays the application ID on which the job run was
+    -- submitted.
+    applicationId :: Prelude.Text,
+    -- | The output contains the ID of the started job run.
+    jobRunId :: Prelude.Text,
+    -- | The output lists the execution role ARN of the job run.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJobRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startJobRunResponse_httpStatus' - The response's http status code.
+--
+-- 'applicationId', 'startJobRunResponse_applicationId' - This output displays the application ID on which the job run was
+-- submitted.
+--
+-- 'jobRunId', 'startJobRunResponse_jobRunId' - The output contains the ID of the started job run.
+--
+-- 'arn', 'startJobRunResponse_arn' - The output lists the execution role ARN of the job run.
+newStartJobRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'jobRunId'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  StartJobRunResponse
+newStartJobRunResponse
+  pHttpStatus_
+  pApplicationId_
+  pJobRunId_
+  pArn_ =
+    StartJobRunResponse'
+      { httpStatus = pHttpStatus_,
+        applicationId = pApplicationId_,
+        jobRunId = pJobRunId_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+startJobRunResponse_httpStatus :: Lens.Lens' StartJobRunResponse Prelude.Int
+startJobRunResponse_httpStatus = Lens.lens (\StartJobRunResponse' {httpStatus} -> httpStatus) (\s@StartJobRunResponse' {} a -> s {httpStatus = a} :: StartJobRunResponse)
+
+-- | This output displays the application ID on which the job run was
+-- submitted.
+startJobRunResponse_applicationId :: Lens.Lens' StartJobRunResponse Prelude.Text
+startJobRunResponse_applicationId = Lens.lens (\StartJobRunResponse' {applicationId} -> applicationId) (\s@StartJobRunResponse' {} a -> s {applicationId = a} :: StartJobRunResponse)
+
+-- | The output contains the ID of the started job run.
+startJobRunResponse_jobRunId :: Lens.Lens' StartJobRunResponse Prelude.Text
+startJobRunResponse_jobRunId = Lens.lens (\StartJobRunResponse' {jobRunId} -> jobRunId) (\s@StartJobRunResponse' {} a -> s {jobRunId = a} :: StartJobRunResponse)
+
+-- | The output lists the execution role ARN of the job run.
+startJobRunResponse_arn :: Lens.Lens' StartJobRunResponse Prelude.Text
+startJobRunResponse_arn = Lens.lens (\StartJobRunResponse' {arn} -> arn) (\s@StartJobRunResponse' {} a -> s {arn = a} :: StartJobRunResponse)
+
+instance Prelude.NFData StartJobRunResponse where
+  rnf StartJobRunResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf jobRunId
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/EMRServerless/StopApplication.hs b/gen/Amazonka/EMRServerless/StopApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/StopApplication.hs
@@ -0,0 +1,149 @@
+{-# 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.EMRServerless.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 specified application and releases initial capacity if
+-- configured. All scheduled and running jobs must be completed or
+-- cancelled before stopping an application.
+module Amazonka.EMRServerless.StopApplication
+  ( -- * Creating a Request
+    StopApplication (..),
+    newStopApplication,
+
+    -- * Request Lenses
+    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.EMRServerless.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'
+  { -- | The ID of the application 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:
+--
+-- 'applicationId', 'stopApplication_applicationId' - The ID of the application to stop.
+newStopApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  StopApplication
+newStopApplication pApplicationId_ =
+  StopApplication' {applicationId = pApplicationId_}
+
+-- | The ID of the application 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` applicationId
+
+instance Prelude.NFData StopApplication where
+  rnf StopApplication' {..} = 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 = Prelude.const (Data.Object Prelude.mempty)
+
+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/EMRServerless/TagResource.hs b/gen/Amazonka/EMRServerless/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/TagResource.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.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)
+--
+-- Assigns tags to resources. A tag is a label that you assign to an AWS
+-- resource. Each tag consists of a key and an optional value, both of
+-- which you define. Tags enable you to categorize your AWS resources by
+-- attributes such as purpose, owner, or environment. When you have many
+-- resources of the same type, you can quickly identify a specific resource
+-- based on the tags you\'ve assigned to it.
+module Amazonka.EMRServerless.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.EMRServerless.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) that identifies the resource to list the
+    -- tags for. Currently, the supported resources are Amazon EMR Serverless
+    -- applications and job runs.
+    resourceArn :: Prelude.Text,
+    -- | The tags to add to the resource. A tag is an array of key-value pairs.
+    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) that identifies the resource to list the
+-- tags for. Currently, the supported resources are Amazon EMR Serverless
+-- applications and job runs.
+--
+-- 'tags', 'tagResource_tags' - The tags to add to the resource. A tag is an array of key-value pairs.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the resource to list the
+-- tags for. Currently, the supported resources are Amazon EMR Serverless
+-- applications and job runs.
+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. A tag is an array of key-value pairs.
+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/EMRServerless/Types.hs b/gen/Amazonka/EMRServerless/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types.hs
@@ -0,0 +1,368 @@
+{-# 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.EMRServerless.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.EMRServerless.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ValidationException,
+
+    -- * ApplicationState
+    ApplicationState (..),
+
+    -- * Architecture
+    Architecture (..),
+
+    -- * JobRunState
+    JobRunState (..),
+
+    -- * Application
+    Application (..),
+    newApplication,
+    application_architecture,
+    application_autoStartConfiguration,
+    application_autoStopConfiguration,
+    application_imageConfiguration,
+    application_initialCapacity,
+    application_maximumCapacity,
+    application_name,
+    application_networkConfiguration,
+    application_stateDetails,
+    application_tags,
+    application_workerTypeSpecifications,
+    application_applicationId,
+    application_arn,
+    application_releaseLabel,
+    application_type,
+    application_state,
+    application_createdAt,
+    application_updatedAt,
+
+    -- * ApplicationSummary
+    ApplicationSummary (..),
+    newApplicationSummary,
+    applicationSummary_architecture,
+    applicationSummary_name,
+    applicationSummary_stateDetails,
+    applicationSummary_id,
+    applicationSummary_arn,
+    applicationSummary_releaseLabel,
+    applicationSummary_type,
+    applicationSummary_state,
+    applicationSummary_createdAt,
+    applicationSummary_updatedAt,
+
+    -- * AutoStartConfig
+    AutoStartConfig (..),
+    newAutoStartConfig,
+    autoStartConfig_enabled,
+
+    -- * AutoStopConfig
+    AutoStopConfig (..),
+    newAutoStopConfig,
+    autoStopConfig_enabled,
+    autoStopConfig_idleTimeoutMinutes,
+
+    -- * Configuration
+    Configuration (..),
+    newConfiguration,
+    configuration_configurations,
+    configuration_properties,
+    configuration_classification,
+
+    -- * ConfigurationOverrides
+    ConfigurationOverrides (..),
+    newConfigurationOverrides,
+    configurationOverrides_applicationConfiguration,
+    configurationOverrides_monitoringConfiguration,
+
+    -- * Hive
+    Hive (..),
+    newHive,
+    hive_initQueryFile,
+    hive_parameters,
+    hive_query,
+
+    -- * ImageConfiguration
+    ImageConfiguration (..),
+    newImageConfiguration,
+    imageConfiguration_resolvedImageDigest,
+    imageConfiguration_imageUri,
+
+    -- * ImageConfigurationInput
+    ImageConfigurationInput (..),
+    newImageConfigurationInput,
+    imageConfigurationInput_imageUri,
+
+    -- * InitialCapacityConfig
+    InitialCapacityConfig (..),
+    newInitialCapacityConfig,
+    initialCapacityConfig_workerConfiguration,
+    initialCapacityConfig_workerCount,
+
+    -- * JobDriver
+    JobDriver (..),
+    newJobDriver,
+    jobDriver_hive,
+    jobDriver_sparkSubmit,
+
+    -- * JobRun
+    JobRun (..),
+    newJobRun,
+    jobRun_configurationOverrides,
+    jobRun_name,
+    jobRun_networkConfiguration,
+    jobRun_tags,
+    jobRun_totalExecutionDurationSeconds,
+    jobRun_totalResourceUtilization,
+    jobRun_applicationId,
+    jobRun_jobRunId,
+    jobRun_arn,
+    jobRun_createdBy,
+    jobRun_createdAt,
+    jobRun_updatedAt,
+    jobRun_executionRole,
+    jobRun_state,
+    jobRun_stateDetails,
+    jobRun_releaseLabel,
+    jobRun_jobDriver,
+
+    -- * JobRunSummary
+    JobRunSummary (..),
+    newJobRunSummary,
+    jobRunSummary_name,
+    jobRunSummary_type,
+    jobRunSummary_applicationId,
+    jobRunSummary_id,
+    jobRunSummary_arn,
+    jobRunSummary_createdBy,
+    jobRunSummary_createdAt,
+    jobRunSummary_updatedAt,
+    jobRunSummary_executionRole,
+    jobRunSummary_state,
+    jobRunSummary_stateDetails,
+    jobRunSummary_releaseLabel,
+
+    -- * ManagedPersistenceMonitoringConfiguration
+    ManagedPersistenceMonitoringConfiguration (..),
+    newManagedPersistenceMonitoringConfiguration,
+    managedPersistenceMonitoringConfiguration_enabled,
+    managedPersistenceMonitoringConfiguration_encryptionKeyArn,
+
+    -- * MaximumAllowedResources
+    MaximumAllowedResources (..),
+    newMaximumAllowedResources,
+    maximumAllowedResources_disk,
+    maximumAllowedResources_cpu,
+    maximumAllowedResources_memory,
+
+    -- * MonitoringConfiguration
+    MonitoringConfiguration (..),
+    newMonitoringConfiguration,
+    monitoringConfiguration_managedPersistenceMonitoringConfiguration,
+    monitoringConfiguration_s3MonitoringConfiguration,
+
+    -- * NetworkConfiguration
+    NetworkConfiguration (..),
+    newNetworkConfiguration,
+    networkConfiguration_securityGroupIds,
+    networkConfiguration_subnetIds,
+
+    -- * S3MonitoringConfiguration
+    S3MonitoringConfiguration (..),
+    newS3MonitoringConfiguration,
+    s3MonitoringConfiguration_encryptionKeyArn,
+    s3MonitoringConfiguration_logUri,
+
+    -- * SparkSubmit
+    SparkSubmit (..),
+    newSparkSubmit,
+    sparkSubmit_entryPointArguments,
+    sparkSubmit_sparkSubmitParameters,
+    sparkSubmit_entryPoint,
+
+    -- * TotalResourceUtilization
+    TotalResourceUtilization (..),
+    newTotalResourceUtilization,
+    totalResourceUtilization_memoryGBHour,
+    totalResourceUtilization_storageGBHour,
+    totalResourceUtilization_vCPUHour,
+
+    -- * WorkerResourceConfig
+    WorkerResourceConfig (..),
+    newWorkerResourceConfig,
+    workerResourceConfig_disk,
+    workerResourceConfig_cpu,
+    workerResourceConfig_memory,
+
+    -- * WorkerTypeSpecification
+    WorkerTypeSpecification (..),
+    newWorkerTypeSpecification,
+    workerTypeSpecification_imageConfiguration,
+
+    -- * WorkerTypeSpecificationInput
+    WorkerTypeSpecificationInput (..),
+    newWorkerTypeSpecificationInput,
+    workerTypeSpecificationInput_imageConfiguration,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.EMRServerless.Types.Application
+import Amazonka.EMRServerless.Types.ApplicationState
+import Amazonka.EMRServerless.Types.ApplicationSummary
+import Amazonka.EMRServerless.Types.Architecture
+import Amazonka.EMRServerless.Types.AutoStartConfig
+import Amazonka.EMRServerless.Types.AutoStopConfig
+import Amazonka.EMRServerless.Types.Configuration
+import Amazonka.EMRServerless.Types.ConfigurationOverrides
+import Amazonka.EMRServerless.Types.Hive
+import Amazonka.EMRServerless.Types.ImageConfiguration
+import Amazonka.EMRServerless.Types.ImageConfigurationInput
+import Amazonka.EMRServerless.Types.InitialCapacityConfig
+import Amazonka.EMRServerless.Types.JobDriver
+import Amazonka.EMRServerless.Types.JobRun
+import Amazonka.EMRServerless.Types.JobRunState
+import Amazonka.EMRServerless.Types.JobRunSummary
+import Amazonka.EMRServerless.Types.ManagedPersistenceMonitoringConfiguration
+import Amazonka.EMRServerless.Types.MaximumAllowedResources
+import Amazonka.EMRServerless.Types.MonitoringConfiguration
+import Amazonka.EMRServerless.Types.NetworkConfiguration
+import Amazonka.EMRServerless.Types.S3MonitoringConfiguration
+import Amazonka.EMRServerless.Types.SparkSubmit
+import Amazonka.EMRServerless.Types.TotalResourceUtilization
+import Amazonka.EMRServerless.Types.WorkerResourceConfig
+import Amazonka.EMRServerless.Types.WorkerTypeSpecification
+import Amazonka.EMRServerless.Types.WorkerTypeSpecificationInput
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-07-13@ of the Amazon EMR Serverless SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "EMRServerless",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "emr-serverless",
+      Core.signingName = "emr-serverless",
+      Core.version = "2021-07-13",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "EMRServerless",
+      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 request could not be processed because of conflict in the current
+-- state of the resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | Request processing failed because of an error or failure with the
+-- service.
+_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
+
+-- | The maximum number of resources per account has been reached.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The input fails to satisfy the constraints specified by an AWS service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/EMRServerless/Types/Application.hs b/gen/Amazonka/EMRServerless/Types/Application.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/Application.hs
@@ -0,0 +1,331 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.Application
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.Application where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.ApplicationState
+import Amazonka.EMRServerless.Types.Architecture
+import Amazonka.EMRServerless.Types.AutoStartConfig
+import Amazonka.EMRServerless.Types.AutoStopConfig
+import Amazonka.EMRServerless.Types.ImageConfiguration
+import Amazonka.EMRServerless.Types.InitialCapacityConfig
+import Amazonka.EMRServerless.Types.MaximumAllowedResources
+import Amazonka.EMRServerless.Types.NetworkConfiguration
+import Amazonka.EMRServerless.Types.WorkerTypeSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an application. EMR Serverless uses applications to
+-- run jobs.
+--
+-- /See:/ 'newApplication' smart constructor.
+data Application = Application'
+  { -- | The CPU architecture of an application.
+    architecture :: Prelude.Maybe Architecture,
+    -- | The configuration for an application to automatically start on job
+    -- submission.
+    autoStartConfiguration :: Prelude.Maybe AutoStartConfig,
+    -- | The configuration for an application to automatically stop after a
+    -- certain amount of time being idle.
+    autoStopConfiguration :: Prelude.Maybe AutoStopConfig,
+    -- | The image configuration applied to all worker types.
+    imageConfiguration :: Prelude.Maybe ImageConfiguration,
+    -- | The initial capacity of the application.
+    initialCapacity :: Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig),
+    -- | The maximum capacity of the application. This is cumulative across all
+    -- workers at any given point in time during the lifespan of the
+    -- application is created. No new resources will be created once any one of
+    -- the defined limits is hit.
+    maximumCapacity :: Prelude.Maybe MaximumAllowedResources,
+    -- | The name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The network configuration for customer VPC connectivity for the
+    -- application.
+    networkConfiguration :: Prelude.Maybe NetworkConfiguration,
+    -- | The state details of the application.
+    stateDetails :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The specification applied to each worker type.
+    workerTypeSpecifications :: Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecification),
+    -- | The ID of the application.
+    applicationId :: Prelude.Text,
+    -- | The ARN of the application.
+    arn :: Prelude.Text,
+    -- | The EMR release associated with the application.
+    releaseLabel :: Prelude.Text,
+    -- | The type of application, such as Spark or Hive.
+    type' :: Prelude.Text,
+    -- | The state of the application.
+    state :: ApplicationState,
+    -- | The date and time when the application run was created.
+    createdAt :: Data.POSIX,
+    -- | The date and time when the application run was last updated.
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Application' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architecture', 'application_architecture' - The CPU architecture of an application.
+--
+-- 'autoStartConfiguration', 'application_autoStartConfiguration' - The configuration for an application to automatically start on job
+-- submission.
+--
+-- 'autoStopConfiguration', 'application_autoStopConfiguration' - The configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+--
+-- 'imageConfiguration', 'application_imageConfiguration' - The image configuration applied to all worker types.
+--
+-- 'initialCapacity', 'application_initialCapacity' - The initial capacity of the application.
+--
+-- 'maximumCapacity', 'application_maximumCapacity' - The maximum capacity of the application. This is cumulative across all
+-- workers at any given point in time during the lifespan of the
+-- application is created. No new resources will be created once any one of
+-- the defined limits is hit.
+--
+-- 'name', 'application_name' - The name of the application.
+--
+-- 'networkConfiguration', 'application_networkConfiguration' - The network configuration for customer VPC connectivity for the
+-- application.
+--
+-- 'stateDetails', 'application_stateDetails' - The state details of the application.
+--
+-- 'tags', 'application_tags' - The tags assigned to the application.
+--
+-- 'workerTypeSpecifications', 'application_workerTypeSpecifications' - The specification applied to each worker type.
+--
+-- 'applicationId', 'application_applicationId' - The ID of the application.
+--
+-- 'arn', 'application_arn' - The ARN of the application.
+--
+-- 'releaseLabel', 'application_releaseLabel' - The EMR release associated with the application.
+--
+-- 'type'', 'application_type' - The type of application, such as Spark or Hive.
+--
+-- 'state', 'application_state' - The state of the application.
+--
+-- 'createdAt', 'application_createdAt' - The date and time when the application run was created.
+--
+-- 'updatedAt', 'application_updatedAt' - The date and time when the application run was last updated.
+newApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'releaseLabel'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  -- | 'state'
+  ApplicationState ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  Application
+newApplication
+  pApplicationId_
+  pArn_
+  pReleaseLabel_
+  pType_
+  pState_
+  pCreatedAt_
+  pUpdatedAt_ =
+    Application'
+      { architecture = Prelude.Nothing,
+        autoStartConfiguration = Prelude.Nothing,
+        autoStopConfiguration = Prelude.Nothing,
+        imageConfiguration = Prelude.Nothing,
+        initialCapacity = Prelude.Nothing,
+        maximumCapacity = Prelude.Nothing,
+        name = Prelude.Nothing,
+        networkConfiguration = Prelude.Nothing,
+        stateDetails = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workerTypeSpecifications = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        arn = pArn_,
+        releaseLabel = pReleaseLabel_,
+        type' = pType_,
+        state = pState_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | The CPU architecture of an application.
+application_architecture :: Lens.Lens' Application (Prelude.Maybe Architecture)
+application_architecture = Lens.lens (\Application' {architecture} -> architecture) (\s@Application' {} a -> s {architecture = a} :: Application)
+
+-- | The configuration for an application to automatically start on job
+-- submission.
+application_autoStartConfiguration :: Lens.Lens' Application (Prelude.Maybe AutoStartConfig)
+application_autoStartConfiguration = Lens.lens (\Application' {autoStartConfiguration} -> autoStartConfiguration) (\s@Application' {} a -> s {autoStartConfiguration = a} :: Application)
+
+-- | The configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+application_autoStopConfiguration :: Lens.Lens' Application (Prelude.Maybe AutoStopConfig)
+application_autoStopConfiguration = Lens.lens (\Application' {autoStopConfiguration} -> autoStopConfiguration) (\s@Application' {} a -> s {autoStopConfiguration = a} :: Application)
+
+-- | The image configuration applied to all worker types.
+application_imageConfiguration :: Lens.Lens' Application (Prelude.Maybe ImageConfiguration)
+application_imageConfiguration = Lens.lens (\Application' {imageConfiguration} -> imageConfiguration) (\s@Application' {} a -> s {imageConfiguration = a} :: Application)
+
+-- | The initial capacity of the application.
+application_initialCapacity :: Lens.Lens' Application (Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig))
+application_initialCapacity = Lens.lens (\Application' {initialCapacity} -> initialCapacity) (\s@Application' {} a -> s {initialCapacity = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum capacity of the application. This is cumulative across all
+-- workers at any given point in time during the lifespan of the
+-- application is created. No new resources will be created once any one of
+-- the defined limits is hit.
+application_maximumCapacity :: Lens.Lens' Application (Prelude.Maybe MaximumAllowedResources)
+application_maximumCapacity = Lens.lens (\Application' {maximumCapacity} -> maximumCapacity) (\s@Application' {} a -> s {maximumCapacity = a} :: Application)
+
+-- | The name of the application.
+application_name :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_name = Lens.lens (\Application' {name} -> name) (\s@Application' {} a -> s {name = a} :: Application)
+
+-- | The network configuration for customer VPC connectivity for the
+-- application.
+application_networkConfiguration :: Lens.Lens' Application (Prelude.Maybe NetworkConfiguration)
+application_networkConfiguration = Lens.lens (\Application' {networkConfiguration} -> networkConfiguration) (\s@Application' {} a -> s {networkConfiguration = a} :: Application)
+
+-- | The state details of the application.
+application_stateDetails :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_stateDetails = Lens.lens (\Application' {stateDetails} -> stateDetails) (\s@Application' {} a -> s {stateDetails = a} :: Application)
+
+-- | The tags assigned to the application.
+application_tags :: Lens.Lens' Application (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+application_tags = Lens.lens (\Application' {tags} -> tags) (\s@Application' {} a -> s {tags = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+-- | The specification applied to each worker type.
+application_workerTypeSpecifications :: Lens.Lens' Application (Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecification))
+application_workerTypeSpecifications = Lens.lens (\Application' {workerTypeSpecifications} -> workerTypeSpecifications) (\s@Application' {} a -> s {workerTypeSpecifications = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the application.
+application_applicationId :: Lens.Lens' Application Prelude.Text
+application_applicationId = Lens.lens (\Application' {applicationId} -> applicationId) (\s@Application' {} a -> s {applicationId = a} :: Application)
+
+-- | The ARN of the application.
+application_arn :: Lens.Lens' Application Prelude.Text
+application_arn = Lens.lens (\Application' {arn} -> arn) (\s@Application' {} a -> s {arn = a} :: Application)
+
+-- | The EMR release associated with the application.
+application_releaseLabel :: Lens.Lens' Application Prelude.Text
+application_releaseLabel = Lens.lens (\Application' {releaseLabel} -> releaseLabel) (\s@Application' {} a -> s {releaseLabel = a} :: Application)
+
+-- | The type of application, such as Spark or Hive.
+application_type :: Lens.Lens' Application Prelude.Text
+application_type = Lens.lens (\Application' {type'} -> type') (\s@Application' {} a -> s {type' = a} :: Application)
+
+-- | The state of the application.
+application_state :: Lens.Lens' Application ApplicationState
+application_state = Lens.lens (\Application' {state} -> state) (\s@Application' {} a -> s {state = a} :: Application)
+
+-- | The date and time when the application run was created.
+application_createdAt :: Lens.Lens' Application Prelude.UTCTime
+application_createdAt = Lens.lens (\Application' {createdAt} -> createdAt) (\s@Application' {} a -> s {createdAt = a} :: Application) Prelude.. Data._Time
+
+-- | The date and time when the application run was last updated.
+application_updatedAt :: Lens.Lens' Application Prelude.UTCTime
+application_updatedAt = Lens.lens (\Application' {updatedAt} -> updatedAt) (\s@Application' {} a -> s {updatedAt = a} :: Application) Prelude.. Data._Time
+
+instance Data.FromJSON Application where
+  parseJSON =
+    Data.withObject
+      "Application"
+      ( \x ->
+          Application'
+            Prelude.<$> (x Data..:? "architecture")
+            Prelude.<*> (x Data..:? "autoStartConfiguration")
+            Prelude.<*> (x Data..:? "autoStopConfiguration")
+            Prelude.<*> (x Data..:? "imageConfiguration")
+            Prelude.<*> ( x
+                            Data..:? "initialCapacity"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "maximumCapacity")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "networkConfiguration")
+            Prelude.<*> (x Data..:? "stateDetails")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "workerTypeSpecifications"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "applicationId")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "releaseLabel")
+            Prelude.<*> (x Data..: "type")
+            Prelude.<*> (x Data..: "state")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+      )
+
+instance Prelude.Hashable Application where
+  hashWithSalt _salt Application' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` autoStartConfiguration
+      `Prelude.hashWithSalt` autoStopConfiguration
+      `Prelude.hashWithSalt` imageConfiguration
+      `Prelude.hashWithSalt` initialCapacity
+      `Prelude.hashWithSalt` maximumCapacity
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` networkConfiguration
+      `Prelude.hashWithSalt` stateDetails
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` workerTypeSpecifications
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` releaseLabel
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData Application where
+  rnf Application' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf autoStartConfiguration
+      `Prelude.seq` Prelude.rnf autoStopConfiguration
+      `Prelude.seq` Prelude.rnf imageConfiguration
+      `Prelude.seq` Prelude.rnf initialCapacity
+      `Prelude.seq` Prelude.rnf maximumCapacity
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkConfiguration
+      `Prelude.seq` Prelude.rnf stateDetails
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workerTypeSpecifications
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf releaseLabel
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/EMRServerless/Types/ApplicationState.hs b/gen/Amazonka/EMRServerless/Types/ApplicationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/ApplicationState.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.ApplicationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.ApplicationState
+  ( ApplicationState
+      ( ..,
+        ApplicationState_CREATED,
+        ApplicationState_CREATING,
+        ApplicationState_STARTED,
+        ApplicationState_STARTING,
+        ApplicationState_STOPPED,
+        ApplicationState_STOPPING,
+        ApplicationState_TERMINATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationState = ApplicationState'
+  { fromApplicationState ::
+      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 ApplicationState_CREATED :: ApplicationState
+pattern ApplicationState_CREATED = ApplicationState' "CREATED"
+
+pattern ApplicationState_CREATING :: ApplicationState
+pattern ApplicationState_CREATING = ApplicationState' "CREATING"
+
+pattern ApplicationState_STARTED :: ApplicationState
+pattern ApplicationState_STARTED = ApplicationState' "STARTED"
+
+pattern ApplicationState_STARTING :: ApplicationState
+pattern ApplicationState_STARTING = ApplicationState' "STARTING"
+
+pattern ApplicationState_STOPPED :: ApplicationState
+pattern ApplicationState_STOPPED = ApplicationState' "STOPPED"
+
+pattern ApplicationState_STOPPING :: ApplicationState
+pattern ApplicationState_STOPPING = ApplicationState' "STOPPING"
+
+pattern ApplicationState_TERMINATED :: ApplicationState
+pattern ApplicationState_TERMINATED = ApplicationState' "TERMINATED"
+
+{-# COMPLETE
+  ApplicationState_CREATED,
+  ApplicationState_CREATING,
+  ApplicationState_STARTED,
+  ApplicationState_STARTING,
+  ApplicationState_STOPPED,
+  ApplicationState_STOPPING,
+  ApplicationState_TERMINATED,
+  ApplicationState'
+  #-}
diff --git a/gen/Amazonka/EMRServerless/Types/ApplicationSummary.hs b/gen/Amazonka/EMRServerless/Types/ApplicationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/ApplicationSummary.hs
@@ -0,0 +1,203 @@
+{-# 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.EMRServerless.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.EMRServerless.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.EMRServerless.Types.ApplicationState
+import Amazonka.EMRServerless.Types.Architecture
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of attributes associated with an application.
+--
+-- /See:/ 'newApplicationSummary' smart constructor.
+data ApplicationSummary = ApplicationSummary'
+  { -- | The CPU architecture of an application.
+    architecture :: Prelude.Maybe Architecture,
+    -- | The name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state details of the application.
+    stateDetails :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the application.
+    id :: Prelude.Text,
+    -- | The ARN of the application.
+    arn :: Prelude.Text,
+    -- | The EMR release associated with the application.
+    releaseLabel :: Prelude.Text,
+    -- | The type of application, such as Spark or Hive.
+    type' :: Prelude.Text,
+    -- | The state of the application.
+    state :: ApplicationState,
+    -- | The date and time when the application was created.
+    createdAt :: Data.POSIX,
+    -- | The date and time when the application was last updated.
+    updatedAt :: Data.POSIX
+  }
+  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:
+--
+-- 'architecture', 'applicationSummary_architecture' - The CPU architecture of an application.
+--
+-- 'name', 'applicationSummary_name' - The name of the application.
+--
+-- 'stateDetails', 'applicationSummary_stateDetails' - The state details of the application.
+--
+-- 'id', 'applicationSummary_id' - The ID of the application.
+--
+-- 'arn', 'applicationSummary_arn' - The ARN of the application.
+--
+-- 'releaseLabel', 'applicationSummary_releaseLabel' - The EMR release associated with the application.
+--
+-- 'type'', 'applicationSummary_type' - The type of application, such as Spark or Hive.
+--
+-- 'state', 'applicationSummary_state' - The state of the application.
+--
+-- 'createdAt', 'applicationSummary_createdAt' - The date and time when the application was created.
+--
+-- 'updatedAt', 'applicationSummary_updatedAt' - The date and time when the application was last updated.
+newApplicationSummary ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'releaseLabel'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  -- | 'state'
+  ApplicationState ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  ApplicationSummary
+newApplicationSummary
+  pId_
+  pArn_
+  pReleaseLabel_
+  pType_
+  pState_
+  pCreatedAt_
+  pUpdatedAt_ =
+    ApplicationSummary'
+      { architecture = Prelude.Nothing,
+        name = Prelude.Nothing,
+        stateDetails = Prelude.Nothing,
+        id = pId_,
+        arn = pArn_,
+        releaseLabel = pReleaseLabel_,
+        type' = pType_,
+        state = pState_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | The CPU architecture of an application.
+applicationSummary_architecture :: Lens.Lens' ApplicationSummary (Prelude.Maybe Architecture)
+applicationSummary_architecture = Lens.lens (\ApplicationSummary' {architecture} -> architecture) (\s@ApplicationSummary' {} a -> s {architecture = a} :: ApplicationSummary)
+
+-- | The name of the application.
+applicationSummary_name :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_name = Lens.lens (\ApplicationSummary' {name} -> name) (\s@ApplicationSummary' {} a -> s {name = a} :: ApplicationSummary)
+
+-- | The state details of the application.
+applicationSummary_stateDetails :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_stateDetails = Lens.lens (\ApplicationSummary' {stateDetails} -> stateDetails) (\s@ApplicationSummary' {} a -> s {stateDetails = a} :: ApplicationSummary)
+
+-- | The ID of the application.
+applicationSummary_id :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_id = Lens.lens (\ApplicationSummary' {id} -> id) (\s@ApplicationSummary' {} a -> s {id = a} :: ApplicationSummary)
+
+-- | The ARN of the application.
+applicationSummary_arn :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_arn = Lens.lens (\ApplicationSummary' {arn} -> arn) (\s@ApplicationSummary' {} a -> s {arn = a} :: ApplicationSummary)
+
+-- | The EMR release associated with the application.
+applicationSummary_releaseLabel :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_releaseLabel = Lens.lens (\ApplicationSummary' {releaseLabel} -> releaseLabel) (\s@ApplicationSummary' {} a -> s {releaseLabel = a} :: ApplicationSummary)
+
+-- | The type of application, such as Spark or Hive.
+applicationSummary_type :: Lens.Lens' ApplicationSummary Prelude.Text
+applicationSummary_type = Lens.lens (\ApplicationSummary' {type'} -> type') (\s@ApplicationSummary' {} a -> s {type' = a} :: ApplicationSummary)
+
+-- | The state of the application.
+applicationSummary_state :: Lens.Lens' ApplicationSummary ApplicationState
+applicationSummary_state = Lens.lens (\ApplicationSummary' {state} -> state) (\s@ApplicationSummary' {} a -> s {state = a} :: ApplicationSummary)
+
+-- | The date and time when the application was created.
+applicationSummary_createdAt :: Lens.Lens' ApplicationSummary Prelude.UTCTime
+applicationSummary_createdAt = Lens.lens (\ApplicationSummary' {createdAt} -> createdAt) (\s@ApplicationSummary' {} a -> s {createdAt = a} :: ApplicationSummary) Prelude.. Data._Time
+
+-- | The date and time when the application was last updated.
+applicationSummary_updatedAt :: Lens.Lens' ApplicationSummary Prelude.UTCTime
+applicationSummary_updatedAt = Lens.lens (\ApplicationSummary' {updatedAt} -> updatedAt) (\s@ApplicationSummary' {} a -> s {updatedAt = a} :: ApplicationSummary) Prelude.. Data._Time
+
+instance Data.FromJSON ApplicationSummary where
+  parseJSON =
+    Data.withObject
+      "ApplicationSummary"
+      ( \x ->
+          ApplicationSummary'
+            Prelude.<$> (x Data..:? "architecture")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "stateDetails")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "releaseLabel")
+            Prelude.<*> (x Data..: "type")
+            Prelude.<*> (x Data..: "state")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+      )
+
+instance Prelude.Hashable ApplicationSummary where
+  hashWithSalt _salt ApplicationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stateDetails
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` releaseLabel
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData ApplicationSummary where
+  rnf ApplicationSummary' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stateDetails
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf releaseLabel
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/EMRServerless/Types/Architecture.hs b/gen/Amazonka/EMRServerless/Types/Architecture.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/Architecture.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.EMRServerless.Types.Architecture
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.Architecture
+  ( Architecture
+      ( ..,
+        Architecture_ARM64,
+        Architecture_X86_64
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Architecture = Architecture'
+  { fromArchitecture ::
+      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 Architecture_ARM64 :: Architecture
+pattern Architecture_ARM64 = Architecture' "ARM64"
+
+pattern Architecture_X86_64 :: Architecture
+pattern Architecture_X86_64 = Architecture' "X86_64"
+
+{-# COMPLETE
+  Architecture_ARM64,
+  Architecture_X86_64,
+  Architecture'
+  #-}
diff --git a/gen/Amazonka/EMRServerless/Types/AutoStartConfig.hs b/gen/Amazonka/EMRServerless/Types/AutoStartConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/AutoStartConfig.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.AutoStartConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.AutoStartConfig 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 configuration for an application to automatically start on job
+-- submission.
+--
+-- /See:/ 'newAutoStartConfig' smart constructor.
+data AutoStartConfig = AutoStartConfig'
+  { -- | Enables the application to automatically start on job submission.
+    -- Defaults to true.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoStartConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'autoStartConfig_enabled' - Enables the application to automatically start on job submission.
+-- Defaults to true.
+newAutoStartConfig ::
+  AutoStartConfig
+newAutoStartConfig =
+  AutoStartConfig' {enabled = Prelude.Nothing}
+
+-- | Enables the application to automatically start on job submission.
+-- Defaults to true.
+autoStartConfig_enabled :: Lens.Lens' AutoStartConfig (Prelude.Maybe Prelude.Bool)
+autoStartConfig_enabled = Lens.lens (\AutoStartConfig' {enabled} -> enabled) (\s@AutoStartConfig' {} a -> s {enabled = a} :: AutoStartConfig)
+
+instance Data.FromJSON AutoStartConfig where
+  parseJSON =
+    Data.withObject
+      "AutoStartConfig"
+      ( \x ->
+          AutoStartConfig' Prelude.<$> (x Data..:? "enabled")
+      )
+
+instance Prelude.Hashable AutoStartConfig where
+  hashWithSalt _salt AutoStartConfig' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData AutoStartConfig where
+  rnf AutoStartConfig' {..} = Prelude.rnf enabled
+
+instance Data.ToJSON AutoStartConfig where
+  toJSON AutoStartConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("enabled" Data..=) Prelude.<$> enabled]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/AutoStopConfig.hs b/gen/Amazonka/EMRServerless/Types/AutoStopConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/AutoStopConfig.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.EMRServerless.Types.AutoStopConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.AutoStopConfig 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 configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+--
+-- /See:/ 'newAutoStopConfig' smart constructor.
+data AutoStopConfig = AutoStopConfig'
+  { -- | Enables the application to automatically stop after a certain amount of
+    -- time being idle. Defaults to true.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The amount of idle time in minutes after which your application will
+    -- automatically stop. Defaults to 15 minutes.
+    idleTimeoutMinutes :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoStopConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'autoStopConfig_enabled' - Enables the application to automatically stop after a certain amount of
+-- time being idle. Defaults to true.
+--
+-- 'idleTimeoutMinutes', 'autoStopConfig_idleTimeoutMinutes' - The amount of idle time in minutes after which your application will
+-- automatically stop. Defaults to 15 minutes.
+newAutoStopConfig ::
+  AutoStopConfig
+newAutoStopConfig =
+  AutoStopConfig'
+    { enabled = Prelude.Nothing,
+      idleTimeoutMinutes = Prelude.Nothing
+    }
+
+-- | Enables the application to automatically stop after a certain amount of
+-- time being idle. Defaults to true.
+autoStopConfig_enabled :: Lens.Lens' AutoStopConfig (Prelude.Maybe Prelude.Bool)
+autoStopConfig_enabled = Lens.lens (\AutoStopConfig' {enabled} -> enabled) (\s@AutoStopConfig' {} a -> s {enabled = a} :: AutoStopConfig)
+
+-- | The amount of idle time in minutes after which your application will
+-- automatically stop. Defaults to 15 minutes.
+autoStopConfig_idleTimeoutMinutes :: Lens.Lens' AutoStopConfig (Prelude.Maybe Prelude.Natural)
+autoStopConfig_idleTimeoutMinutes = Lens.lens (\AutoStopConfig' {idleTimeoutMinutes} -> idleTimeoutMinutes) (\s@AutoStopConfig' {} a -> s {idleTimeoutMinutes = a} :: AutoStopConfig)
+
+instance Data.FromJSON AutoStopConfig where
+  parseJSON =
+    Data.withObject
+      "AutoStopConfig"
+      ( \x ->
+          AutoStopConfig'
+            Prelude.<$> (x Data..:? "enabled")
+            Prelude.<*> (x Data..:? "idleTimeoutMinutes")
+      )
+
+instance Prelude.Hashable AutoStopConfig where
+  hashWithSalt _salt AutoStopConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` idleTimeoutMinutes
+
+instance Prelude.NFData AutoStopConfig where
+  rnf AutoStopConfig' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf idleTimeoutMinutes
+
+instance Data.ToJSON AutoStopConfig where
+  toJSON AutoStopConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("enabled" Data..=) Prelude.<$> enabled,
+            ("idleTimeoutMinutes" Data..=)
+              Prelude.<$> idleTimeoutMinutes
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/Configuration.hs b/gen/Amazonka/EMRServerless/Types/Configuration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/Configuration.hs
@@ -0,0 +1,117 @@
+{-# 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.EMRServerless.Types.Configuration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.Configuration 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 configuration specification to be used when provisioning an
+-- application. A configuration consists of a classification, properties,
+-- and optional nested configurations. A classification refers to an
+-- application-specific configuration file. Properties are the settings you
+-- want to change in that file.
+--
+-- /See:/ 'newConfiguration' smart constructor.
+data Configuration = Configuration'
+  { -- | A list of additional configurations to apply within a configuration
+    -- object.
+    configurations :: Prelude.Maybe [Configuration],
+    -- | A set of properties specified within a configuration classification.
+    properties :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The classification within a configuration.
+    classification :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Configuration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurations', 'configuration_configurations' - A list of additional configurations to apply within a configuration
+-- object.
+--
+-- 'properties', 'configuration_properties' - A set of properties specified within a configuration classification.
+--
+-- 'classification', 'configuration_classification' - The classification within a configuration.
+newConfiguration ::
+  -- | 'classification'
+  Prelude.Text ->
+  Configuration
+newConfiguration pClassification_ =
+  Configuration'
+    { configurations = Prelude.Nothing,
+      properties = Prelude.Nothing,
+      classification = pClassification_
+    }
+
+-- | A list of additional configurations to apply within a configuration
+-- object.
+configuration_configurations :: Lens.Lens' Configuration (Prelude.Maybe [Configuration])
+configuration_configurations = Lens.lens (\Configuration' {configurations} -> configurations) (\s@Configuration' {} a -> s {configurations = a} :: Configuration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A set of properties specified within a configuration classification.
+configuration_properties :: Lens.Lens' Configuration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+configuration_properties = Lens.lens (\Configuration' {properties} -> properties) (\s@Configuration' {} a -> s {properties = a} :: Configuration) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The classification within a configuration.
+configuration_classification :: Lens.Lens' Configuration Prelude.Text
+configuration_classification = Lens.lens (\Configuration' {classification} -> classification) (\s@Configuration' {} a -> s {classification = a} :: Configuration)
+
+instance Data.FromJSON Configuration where
+  parseJSON =
+    Data.withObject
+      "Configuration"
+      ( \x ->
+          Configuration'
+            Prelude.<$> (x Data..:? "configurations" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "properties" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "classification")
+      )
+
+instance Prelude.Hashable Configuration where
+  hashWithSalt _salt Configuration' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurations
+      `Prelude.hashWithSalt` properties
+      `Prelude.hashWithSalt` classification
+
+instance Prelude.NFData Configuration where
+  rnf Configuration' {..} =
+    Prelude.rnf configurations
+      `Prelude.seq` Prelude.rnf properties
+      `Prelude.seq` Prelude.rnf classification
+
+instance Data.ToJSON Configuration where
+  toJSON Configuration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("configurations" Data..=)
+              Prelude.<$> configurations,
+            ("properties" Data..=) Prelude.<$> properties,
+            Prelude.Just
+              ("classification" Data..= classification)
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/ConfigurationOverrides.hs b/gen/Amazonka/EMRServerless/Types/ConfigurationOverrides.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/ConfigurationOverrides.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.ConfigurationOverrides
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.ConfigurationOverrides where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.Configuration
+import Amazonka.EMRServerless.Types.MonitoringConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | A configuration specification to be used to override existing
+-- configurations.
+--
+-- /See:/ 'newConfigurationOverrides' smart constructor.
+data ConfigurationOverrides = ConfigurationOverrides'
+  { -- | The override configurations for the application.
+    applicationConfiguration :: Prelude.Maybe [Configuration],
+    -- | The override configurations for monitoring.
+    monitoringConfiguration :: Prelude.Maybe MonitoringConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfigurationOverrides' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationConfiguration', 'configurationOverrides_applicationConfiguration' - The override configurations for the application.
+--
+-- 'monitoringConfiguration', 'configurationOverrides_monitoringConfiguration' - The override configurations for monitoring.
+newConfigurationOverrides ::
+  ConfigurationOverrides
+newConfigurationOverrides =
+  ConfigurationOverrides'
+    { applicationConfiguration =
+        Prelude.Nothing,
+      monitoringConfiguration = Prelude.Nothing
+    }
+
+-- | The override configurations for the application.
+configurationOverrides_applicationConfiguration :: Lens.Lens' ConfigurationOverrides (Prelude.Maybe [Configuration])
+configurationOverrides_applicationConfiguration = Lens.lens (\ConfigurationOverrides' {applicationConfiguration} -> applicationConfiguration) (\s@ConfigurationOverrides' {} a -> s {applicationConfiguration = a} :: ConfigurationOverrides) Prelude.. Lens.mapping Lens.coerced
+
+-- | The override configurations for monitoring.
+configurationOverrides_monitoringConfiguration :: Lens.Lens' ConfigurationOverrides (Prelude.Maybe MonitoringConfiguration)
+configurationOverrides_monitoringConfiguration = Lens.lens (\ConfigurationOverrides' {monitoringConfiguration} -> monitoringConfiguration) (\s@ConfigurationOverrides' {} a -> s {monitoringConfiguration = a} :: ConfigurationOverrides)
+
+instance Data.FromJSON ConfigurationOverrides where
+  parseJSON =
+    Data.withObject
+      "ConfigurationOverrides"
+      ( \x ->
+          ConfigurationOverrides'
+            Prelude.<$> ( x
+                            Data..:? "applicationConfiguration"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "monitoringConfiguration")
+      )
+
+instance Prelude.Hashable ConfigurationOverrides where
+  hashWithSalt _salt ConfigurationOverrides' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationConfiguration
+      `Prelude.hashWithSalt` monitoringConfiguration
+
+instance Prelude.NFData ConfigurationOverrides where
+  rnf ConfigurationOverrides' {..} =
+    Prelude.rnf applicationConfiguration
+      `Prelude.seq` Prelude.rnf monitoringConfiguration
+
+instance Data.ToJSON ConfigurationOverrides where
+  toJSON ConfigurationOverrides' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationConfiguration" Data..=)
+              Prelude.<$> applicationConfiguration,
+            ("monitoringConfiguration" Data..=)
+              Prelude.<$> monitoringConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/Hive.hs b/gen/Amazonka/EMRServerless/Types/Hive.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/Hive.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.Hive
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.Hive 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 configurations for the Hive job driver.
+--
+-- /See:/ 'newHive' smart constructor.
+data Hive = Hive'
+  { -- | The query file for the Hive job run.
+    initQueryFile :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The parameters for the Hive job run.
+    parameters :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The query for the Hive job run.
+    query :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Hive' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'initQueryFile', 'hive_initQueryFile' - The query file for the Hive job run.
+--
+-- 'parameters', 'hive_parameters' - The parameters for the Hive job run.
+--
+-- 'query', 'hive_query' - The query for the Hive job run.
+newHive ::
+  -- | 'query'
+  Prelude.Text ->
+  Hive
+newHive pQuery_ =
+  Hive'
+    { initQueryFile = Prelude.Nothing,
+      parameters = Prelude.Nothing,
+      query = Data._Sensitive Lens.# pQuery_
+    }
+
+-- | The query file for the Hive job run.
+hive_initQueryFile :: Lens.Lens' Hive (Prelude.Maybe Prelude.Text)
+hive_initQueryFile = Lens.lens (\Hive' {initQueryFile} -> initQueryFile) (\s@Hive' {} a -> s {initQueryFile = a} :: Hive) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The parameters for the Hive job run.
+hive_parameters :: Lens.Lens' Hive (Prelude.Maybe Prelude.Text)
+hive_parameters = Lens.lens (\Hive' {parameters} -> parameters) (\s@Hive' {} a -> s {parameters = a} :: Hive) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The query for the Hive job run.
+hive_query :: Lens.Lens' Hive Prelude.Text
+hive_query = Lens.lens (\Hive' {query} -> query) (\s@Hive' {} a -> s {query = a} :: Hive) Prelude.. Data._Sensitive
+
+instance Data.FromJSON Hive where
+  parseJSON =
+    Data.withObject
+      "Hive"
+      ( \x ->
+          Hive'
+            Prelude.<$> (x Data..:? "initQueryFile")
+            Prelude.<*> (x Data..:? "parameters")
+            Prelude.<*> (x Data..: "query")
+      )
+
+instance Prelude.Hashable Hive where
+  hashWithSalt _salt Hive' {..} =
+    _salt
+      `Prelude.hashWithSalt` initQueryFile
+      `Prelude.hashWithSalt` parameters
+      `Prelude.hashWithSalt` query
+
+instance Prelude.NFData Hive where
+  rnf Hive' {..} =
+    Prelude.rnf initQueryFile
+      `Prelude.seq` Prelude.rnf parameters
+      `Prelude.seq` Prelude.rnf query
+
+instance Data.ToJSON Hive where
+  toJSON Hive' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("initQueryFile" Data..=) Prelude.<$> initQueryFile,
+            ("parameters" Data..=) Prelude.<$> parameters,
+            Prelude.Just ("query" Data..= query)
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/ImageConfiguration.hs b/gen/Amazonka/EMRServerless/Types/ImageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/ImageConfiguration.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.ImageConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.ImageConfiguration 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 applied image configuration.
+--
+-- /See:/ 'newImageConfiguration' smart constructor.
+data ImageConfiguration = ImageConfiguration'
+  { -- | The SHA256 digest of the image URI. This indicates which specific image
+    -- the application is configured for. The image digest doesn\'t exist until
+    -- an application has started.
+    resolvedImageDigest :: Prelude.Maybe Prelude.Text,
+    -- | The image URI.
+    imageUri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resolvedImageDigest', 'imageConfiguration_resolvedImageDigest' - The SHA256 digest of the image URI. This indicates which specific image
+-- the application is configured for. The image digest doesn\'t exist until
+-- an application has started.
+--
+-- 'imageUri', 'imageConfiguration_imageUri' - The image URI.
+newImageConfiguration ::
+  -- | 'imageUri'
+  Prelude.Text ->
+  ImageConfiguration
+newImageConfiguration pImageUri_ =
+  ImageConfiguration'
+    { resolvedImageDigest =
+        Prelude.Nothing,
+      imageUri = pImageUri_
+    }
+
+-- | The SHA256 digest of the image URI. This indicates which specific image
+-- the application is configured for. The image digest doesn\'t exist until
+-- an application has started.
+imageConfiguration_resolvedImageDigest :: Lens.Lens' ImageConfiguration (Prelude.Maybe Prelude.Text)
+imageConfiguration_resolvedImageDigest = Lens.lens (\ImageConfiguration' {resolvedImageDigest} -> resolvedImageDigest) (\s@ImageConfiguration' {} a -> s {resolvedImageDigest = a} :: ImageConfiguration)
+
+-- | The image URI.
+imageConfiguration_imageUri :: Lens.Lens' ImageConfiguration Prelude.Text
+imageConfiguration_imageUri = Lens.lens (\ImageConfiguration' {imageUri} -> imageUri) (\s@ImageConfiguration' {} a -> s {imageUri = a} :: ImageConfiguration)
+
+instance Data.FromJSON ImageConfiguration where
+  parseJSON =
+    Data.withObject
+      "ImageConfiguration"
+      ( \x ->
+          ImageConfiguration'
+            Prelude.<$> (x Data..:? "resolvedImageDigest")
+            Prelude.<*> (x Data..: "imageUri")
+      )
+
+instance Prelude.Hashable ImageConfiguration where
+  hashWithSalt _salt ImageConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` resolvedImageDigest
+      `Prelude.hashWithSalt` imageUri
+
+instance Prelude.NFData ImageConfiguration where
+  rnf ImageConfiguration' {..} =
+    Prelude.rnf resolvedImageDigest
+      `Prelude.seq` Prelude.rnf imageUri
diff --git a/gen/Amazonka/EMRServerless/Types/ImageConfigurationInput.hs b/gen/Amazonka/EMRServerless/Types/ImageConfigurationInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/ImageConfigurationInput.hs
@@ -0,0 +1,76 @@
+{-# 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.EMRServerless.Types.ImageConfigurationInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.ImageConfigurationInput 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 image configuration.
+--
+-- /See:/ 'newImageConfigurationInput' smart constructor.
+data ImageConfigurationInput = ImageConfigurationInput'
+  { -- | The URI of an image in the Amazon ECR registry. This field is required
+    -- when you create a new application. If you leave this field blank in an
+    -- update, Amazon EMR will remove the image configuration.
+    imageUri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageConfigurationInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageUri', 'imageConfigurationInput_imageUri' - The URI of an image in the Amazon ECR registry. This field is required
+-- when you create a new application. If you leave this field blank in an
+-- update, Amazon EMR will remove the image configuration.
+newImageConfigurationInput ::
+  ImageConfigurationInput
+newImageConfigurationInput =
+  ImageConfigurationInput'
+    { imageUri =
+        Prelude.Nothing
+    }
+
+-- | The URI of an image in the Amazon ECR registry. This field is required
+-- when you create a new application. If you leave this field blank in an
+-- update, Amazon EMR will remove the image configuration.
+imageConfigurationInput_imageUri :: Lens.Lens' ImageConfigurationInput (Prelude.Maybe Prelude.Text)
+imageConfigurationInput_imageUri = Lens.lens (\ImageConfigurationInput' {imageUri} -> imageUri) (\s@ImageConfigurationInput' {} a -> s {imageUri = a} :: ImageConfigurationInput)
+
+instance Prelude.Hashable ImageConfigurationInput where
+  hashWithSalt _salt ImageConfigurationInput' {..} =
+    _salt `Prelude.hashWithSalt` imageUri
+
+instance Prelude.NFData ImageConfigurationInput where
+  rnf ImageConfigurationInput' {..} =
+    Prelude.rnf imageUri
+
+instance Data.ToJSON ImageConfigurationInput where
+  toJSON ImageConfigurationInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("imageUri" Data..=) Prelude.<$> imageUri]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/InitialCapacityConfig.hs b/gen/Amazonka/EMRServerless/Types/InitialCapacityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/InitialCapacityConfig.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.InitialCapacityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.InitialCapacityConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.WorkerResourceConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | The initial capacity configuration per worker.
+--
+-- /See:/ 'newInitialCapacityConfig' smart constructor.
+data InitialCapacityConfig = InitialCapacityConfig'
+  { -- | The resource configuration of the initial capacity configuration.
+    workerConfiguration :: Prelude.Maybe WorkerResourceConfig,
+    -- | The number of workers in the initial capacity configuration.
+    workerCount :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InitialCapacityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workerConfiguration', 'initialCapacityConfig_workerConfiguration' - The resource configuration of the initial capacity configuration.
+--
+-- 'workerCount', 'initialCapacityConfig_workerCount' - The number of workers in the initial capacity configuration.
+newInitialCapacityConfig ::
+  -- | 'workerCount'
+  Prelude.Natural ->
+  InitialCapacityConfig
+newInitialCapacityConfig pWorkerCount_ =
+  InitialCapacityConfig'
+    { workerConfiguration =
+        Prelude.Nothing,
+      workerCount = pWorkerCount_
+    }
+
+-- | The resource configuration of the initial capacity configuration.
+initialCapacityConfig_workerConfiguration :: Lens.Lens' InitialCapacityConfig (Prelude.Maybe WorkerResourceConfig)
+initialCapacityConfig_workerConfiguration = Lens.lens (\InitialCapacityConfig' {workerConfiguration} -> workerConfiguration) (\s@InitialCapacityConfig' {} a -> s {workerConfiguration = a} :: InitialCapacityConfig)
+
+-- | The number of workers in the initial capacity configuration.
+initialCapacityConfig_workerCount :: Lens.Lens' InitialCapacityConfig Prelude.Natural
+initialCapacityConfig_workerCount = Lens.lens (\InitialCapacityConfig' {workerCount} -> workerCount) (\s@InitialCapacityConfig' {} a -> s {workerCount = a} :: InitialCapacityConfig)
+
+instance Data.FromJSON InitialCapacityConfig where
+  parseJSON =
+    Data.withObject
+      "InitialCapacityConfig"
+      ( \x ->
+          InitialCapacityConfig'
+            Prelude.<$> (x Data..:? "workerConfiguration")
+            Prelude.<*> (x Data..: "workerCount")
+      )
+
+instance Prelude.Hashable InitialCapacityConfig where
+  hashWithSalt _salt InitialCapacityConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` workerConfiguration
+      `Prelude.hashWithSalt` workerCount
+
+instance Prelude.NFData InitialCapacityConfig where
+  rnf InitialCapacityConfig' {..} =
+    Prelude.rnf workerConfiguration
+      `Prelude.seq` Prelude.rnf workerCount
+
+instance Data.ToJSON InitialCapacityConfig where
+  toJSON InitialCapacityConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("workerConfiguration" Data..=)
+              Prelude.<$> workerConfiguration,
+            Prelude.Just ("workerCount" Data..= workerCount)
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/JobDriver.hs b/gen/Amazonka/EMRServerless/Types/JobDriver.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/JobDriver.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.JobDriver
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.JobDriver where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.Hive
+import Amazonka.EMRServerless.Types.SparkSubmit
+import qualified Amazonka.Prelude as Prelude
+
+-- | The driver that the job runs on.
+--
+-- /See:/ 'newJobDriver' smart constructor.
+data JobDriver = JobDriver'
+  { -- | The job driver parameters specified for Hive.
+    hive :: Prelude.Maybe Hive,
+    -- | The job driver parameters specified for Spark.
+    sparkSubmit :: Prelude.Maybe SparkSubmit
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobDriver' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hive', 'jobDriver_hive' - The job driver parameters specified for Hive.
+--
+-- 'sparkSubmit', 'jobDriver_sparkSubmit' - The job driver parameters specified for Spark.
+newJobDriver ::
+  JobDriver
+newJobDriver =
+  JobDriver'
+    { hive = Prelude.Nothing,
+      sparkSubmit = Prelude.Nothing
+    }
+
+-- | The job driver parameters specified for Hive.
+jobDriver_hive :: Lens.Lens' JobDriver (Prelude.Maybe Hive)
+jobDriver_hive = Lens.lens (\JobDriver' {hive} -> hive) (\s@JobDriver' {} a -> s {hive = a} :: JobDriver)
+
+-- | The job driver parameters specified for Spark.
+jobDriver_sparkSubmit :: Lens.Lens' JobDriver (Prelude.Maybe SparkSubmit)
+jobDriver_sparkSubmit = Lens.lens (\JobDriver' {sparkSubmit} -> sparkSubmit) (\s@JobDriver' {} a -> s {sparkSubmit = a} :: JobDriver)
+
+instance Data.FromJSON JobDriver where
+  parseJSON =
+    Data.withObject
+      "JobDriver"
+      ( \x ->
+          JobDriver'
+            Prelude.<$> (x Data..:? "hive")
+            Prelude.<*> (x Data..:? "sparkSubmit")
+      )
+
+instance Prelude.Hashable JobDriver where
+  hashWithSalt _salt JobDriver' {..} =
+    _salt
+      `Prelude.hashWithSalt` hive
+      `Prelude.hashWithSalt` sparkSubmit
+
+instance Prelude.NFData JobDriver where
+  rnf JobDriver' {..} =
+    Prelude.rnf hive
+      `Prelude.seq` Prelude.rnf sparkSubmit
+
+instance Data.ToJSON JobDriver where
+  toJSON JobDriver' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("hive" Data..=) Prelude.<$> hive,
+            ("sparkSubmit" Data..=) Prelude.<$> sparkSubmit
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/JobRun.hs b/gen/Amazonka/EMRServerless/Types/JobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/JobRun.hs
@@ -0,0 +1,315 @@
+{-# 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.EMRServerless.Types.JobRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.JobRun where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.ConfigurationOverrides
+import Amazonka.EMRServerless.Types.JobDriver
+import Amazonka.EMRServerless.Types.JobRunState
+import Amazonka.EMRServerless.Types.NetworkConfiguration
+import Amazonka.EMRServerless.Types.TotalResourceUtilization
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a job run. A job run is a unit of work, such as a
+-- Spark JAR, Hive query, or SparkSQL query, that you submit to an EMR
+-- Serverless application.
+--
+-- /See:/ 'newJobRun' smart constructor.
+data JobRun = JobRun'
+  { -- | The configuration settings that are used to override default
+    -- configuration.
+    configurationOverrides :: Prelude.Maybe ConfigurationOverrides,
+    -- | The optional job run name. This doesn\'t have to be unique.
+    name :: Prelude.Maybe Prelude.Text,
+    networkConfiguration :: Prelude.Maybe NetworkConfiguration,
+    -- | The tags assigned to the job run.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The job run total execution duration in seconds. This field is only
+    -- available for job runs in a @COMPLETED@, @FAILED@, or @CANCELLED@ state.
+    totalExecutionDurationSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The aggregate vCPU, memory, and storage resources used from the time job
+    -- start executing till the time job is terminated, rounded up to the
+    -- nearest second.
+    totalResourceUtilization :: Prelude.Maybe TotalResourceUtilization,
+    -- | The ID of the application the job is running on.
+    applicationId :: Prelude.Text,
+    -- | The ID of the job run.
+    jobRunId :: Prelude.Text,
+    -- | The execution role ARN of the job run.
+    arn :: Prelude.Text,
+    -- | The user who created the job run.
+    createdBy :: Prelude.Text,
+    -- | The date and time when the job run was created.
+    createdAt :: Data.POSIX,
+    -- | The date and time when the job run was updated.
+    updatedAt :: Data.POSIX,
+    -- | The execution role ARN of the job run.
+    executionRole :: Prelude.Text,
+    -- | The state of the job run.
+    state :: JobRunState,
+    -- | The state details of the job run.
+    stateDetails :: Prelude.Text,
+    -- | The EMR release associated with the application your job is running on.
+    releaseLabel :: Prelude.Text,
+    -- | The job driver for the job run.
+    jobDriver :: JobDriver
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configurationOverrides', 'jobRun_configurationOverrides' - The configuration settings that are used to override default
+-- configuration.
+--
+-- 'name', 'jobRun_name' - The optional job run name. This doesn\'t have to be unique.
+--
+-- 'networkConfiguration', 'jobRun_networkConfiguration' - Undocumented member.
+--
+-- 'tags', 'jobRun_tags' - The tags assigned to the job run.
+--
+-- 'totalExecutionDurationSeconds', 'jobRun_totalExecutionDurationSeconds' - The job run total execution duration in seconds. This field is only
+-- available for job runs in a @COMPLETED@, @FAILED@, or @CANCELLED@ state.
+--
+-- 'totalResourceUtilization', 'jobRun_totalResourceUtilization' - The aggregate vCPU, memory, and storage resources used from the time job
+-- start executing till the time job is terminated, rounded up to the
+-- nearest second.
+--
+-- 'applicationId', 'jobRun_applicationId' - The ID of the application the job is running on.
+--
+-- 'jobRunId', 'jobRun_jobRunId' - The ID of the job run.
+--
+-- 'arn', 'jobRun_arn' - The execution role ARN of the job run.
+--
+-- 'createdBy', 'jobRun_createdBy' - The user who created the job run.
+--
+-- 'createdAt', 'jobRun_createdAt' - The date and time when the job run was created.
+--
+-- 'updatedAt', 'jobRun_updatedAt' - The date and time when the job run was updated.
+--
+-- 'executionRole', 'jobRun_executionRole' - The execution role ARN of the job run.
+--
+-- 'state', 'jobRun_state' - The state of the job run.
+--
+-- 'stateDetails', 'jobRun_stateDetails' - The state details of the job run.
+--
+-- 'releaseLabel', 'jobRun_releaseLabel' - The EMR release associated with the application your job is running on.
+--
+-- 'jobDriver', 'jobRun_jobDriver' - The job driver for the job run.
+newJobRun ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'jobRunId'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'createdBy'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'executionRole'
+  Prelude.Text ->
+  -- | 'state'
+  JobRunState ->
+  -- | 'stateDetails'
+  Prelude.Text ->
+  -- | 'releaseLabel'
+  Prelude.Text ->
+  -- | 'jobDriver'
+  JobDriver ->
+  JobRun
+newJobRun
+  pApplicationId_
+  pJobRunId_
+  pArn_
+  pCreatedBy_
+  pCreatedAt_
+  pUpdatedAt_
+  pExecutionRole_
+  pState_
+  pStateDetails_
+  pReleaseLabel_
+  pJobDriver_ =
+    JobRun'
+      { configurationOverrides = Prelude.Nothing,
+        name = Prelude.Nothing,
+        networkConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        totalExecutionDurationSeconds = Prelude.Nothing,
+        totalResourceUtilization = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        jobRunId = pJobRunId_,
+        arn = pArn_,
+        createdBy = pCreatedBy_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        executionRole = pExecutionRole_,
+        state = pState_,
+        stateDetails = pStateDetails_,
+        releaseLabel = pReleaseLabel_,
+        jobDriver = pJobDriver_
+      }
+
+-- | The configuration settings that are used to override default
+-- configuration.
+jobRun_configurationOverrides :: Lens.Lens' JobRun (Prelude.Maybe ConfigurationOverrides)
+jobRun_configurationOverrides = Lens.lens (\JobRun' {configurationOverrides} -> configurationOverrides) (\s@JobRun' {} a -> s {configurationOverrides = a} :: JobRun)
+
+-- | The optional job run name. This doesn\'t have to be unique.
+jobRun_name :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Text)
+jobRun_name = Lens.lens (\JobRun' {name} -> name) (\s@JobRun' {} a -> s {name = a} :: JobRun)
+
+-- | Undocumented member.
+jobRun_networkConfiguration :: Lens.Lens' JobRun (Prelude.Maybe NetworkConfiguration)
+jobRun_networkConfiguration = Lens.lens (\JobRun' {networkConfiguration} -> networkConfiguration) (\s@JobRun' {} a -> s {networkConfiguration = a} :: JobRun)
+
+-- | The tags assigned to the job run.
+jobRun_tags :: Lens.Lens' JobRun (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+jobRun_tags = Lens.lens (\JobRun' {tags} -> tags) (\s@JobRun' {} a -> s {tags = a} :: JobRun) Prelude.. Lens.mapping Lens.coerced
+
+-- | The job run total execution duration in seconds. This field is only
+-- available for job runs in a @COMPLETED@, @FAILED@, or @CANCELLED@ state.
+jobRun_totalExecutionDurationSeconds :: Lens.Lens' JobRun (Prelude.Maybe Prelude.Int)
+jobRun_totalExecutionDurationSeconds = Lens.lens (\JobRun' {totalExecutionDurationSeconds} -> totalExecutionDurationSeconds) (\s@JobRun' {} a -> s {totalExecutionDurationSeconds = a} :: JobRun)
+
+-- | The aggregate vCPU, memory, and storage resources used from the time job
+-- start executing till the time job is terminated, rounded up to the
+-- nearest second.
+jobRun_totalResourceUtilization :: Lens.Lens' JobRun (Prelude.Maybe TotalResourceUtilization)
+jobRun_totalResourceUtilization = Lens.lens (\JobRun' {totalResourceUtilization} -> totalResourceUtilization) (\s@JobRun' {} a -> s {totalResourceUtilization = a} :: JobRun)
+
+-- | The ID of the application the job is running on.
+jobRun_applicationId :: Lens.Lens' JobRun Prelude.Text
+jobRun_applicationId = Lens.lens (\JobRun' {applicationId} -> applicationId) (\s@JobRun' {} a -> s {applicationId = a} :: JobRun)
+
+-- | The ID of the job run.
+jobRun_jobRunId :: Lens.Lens' JobRun Prelude.Text
+jobRun_jobRunId = Lens.lens (\JobRun' {jobRunId} -> jobRunId) (\s@JobRun' {} a -> s {jobRunId = a} :: JobRun)
+
+-- | The execution role ARN of the job run.
+jobRun_arn :: Lens.Lens' JobRun Prelude.Text
+jobRun_arn = Lens.lens (\JobRun' {arn} -> arn) (\s@JobRun' {} a -> s {arn = a} :: JobRun)
+
+-- | The user who created the job run.
+jobRun_createdBy :: Lens.Lens' JobRun Prelude.Text
+jobRun_createdBy = Lens.lens (\JobRun' {createdBy} -> createdBy) (\s@JobRun' {} a -> s {createdBy = a} :: JobRun)
+
+-- | The date and time when the job run was created.
+jobRun_createdAt :: Lens.Lens' JobRun Prelude.UTCTime
+jobRun_createdAt = Lens.lens (\JobRun' {createdAt} -> createdAt) (\s@JobRun' {} a -> s {createdAt = a} :: JobRun) Prelude.. Data._Time
+
+-- | The date and time when the job run was updated.
+jobRun_updatedAt :: Lens.Lens' JobRun Prelude.UTCTime
+jobRun_updatedAt = Lens.lens (\JobRun' {updatedAt} -> updatedAt) (\s@JobRun' {} a -> s {updatedAt = a} :: JobRun) Prelude.. Data._Time
+
+-- | The execution role ARN of the job run.
+jobRun_executionRole :: Lens.Lens' JobRun Prelude.Text
+jobRun_executionRole = Lens.lens (\JobRun' {executionRole} -> executionRole) (\s@JobRun' {} a -> s {executionRole = a} :: JobRun)
+
+-- | The state of the job run.
+jobRun_state :: Lens.Lens' JobRun JobRunState
+jobRun_state = Lens.lens (\JobRun' {state} -> state) (\s@JobRun' {} a -> s {state = a} :: JobRun)
+
+-- | The state details of the job run.
+jobRun_stateDetails :: Lens.Lens' JobRun Prelude.Text
+jobRun_stateDetails = Lens.lens (\JobRun' {stateDetails} -> stateDetails) (\s@JobRun' {} a -> s {stateDetails = a} :: JobRun)
+
+-- | The EMR release associated with the application your job is running on.
+jobRun_releaseLabel :: Lens.Lens' JobRun Prelude.Text
+jobRun_releaseLabel = Lens.lens (\JobRun' {releaseLabel} -> releaseLabel) (\s@JobRun' {} a -> s {releaseLabel = a} :: JobRun)
+
+-- | The job driver for the job run.
+jobRun_jobDriver :: Lens.Lens' JobRun JobDriver
+jobRun_jobDriver = Lens.lens (\JobRun' {jobDriver} -> jobDriver) (\s@JobRun' {} a -> s {jobDriver = a} :: JobRun)
+
+instance Data.FromJSON JobRun where
+  parseJSON =
+    Data.withObject
+      "JobRun"
+      ( \x ->
+          JobRun'
+            Prelude.<$> (x Data..:? "configurationOverrides")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "networkConfiguration")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "totalExecutionDurationSeconds")
+            Prelude.<*> (x Data..:? "totalResourceUtilization")
+            Prelude.<*> (x Data..: "applicationId")
+            Prelude.<*> (x Data..: "jobRunId")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "createdBy")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+            Prelude.<*> (x Data..: "executionRole")
+            Prelude.<*> (x Data..: "state")
+            Prelude.<*> (x Data..: "stateDetails")
+            Prelude.<*> (x Data..: "releaseLabel")
+            Prelude.<*> (x Data..: "jobDriver")
+      )
+
+instance Prelude.Hashable JobRun where
+  hashWithSalt _salt JobRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` configurationOverrides
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` networkConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` totalExecutionDurationSeconds
+      `Prelude.hashWithSalt` totalResourceUtilization
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` jobRunId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` executionRole
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateDetails
+      `Prelude.hashWithSalt` releaseLabel
+      `Prelude.hashWithSalt` jobDriver
+
+instance Prelude.NFData JobRun where
+  rnf JobRun' {..} =
+    Prelude.rnf configurationOverrides
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf totalExecutionDurationSeconds
+      `Prelude.seq` Prelude.rnf totalResourceUtilization
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf jobRunId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf executionRole
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateDetails
+      `Prelude.seq` Prelude.rnf releaseLabel
+      `Prelude.seq` Prelude.rnf jobDriver
diff --git a/gen/Amazonka/EMRServerless/Types/JobRunState.hs b/gen/Amazonka/EMRServerless/Types/JobRunState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/JobRunState.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.JobRunState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.JobRunState
+  ( JobRunState
+      ( ..,
+        JobRunState_CANCELLED,
+        JobRunState_CANCELLING,
+        JobRunState_FAILED,
+        JobRunState_PENDING,
+        JobRunState_RUNNING,
+        JobRunState_SCHEDULED,
+        JobRunState_SUBMITTED,
+        JobRunState_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobRunState = JobRunState'
+  { fromJobRunState ::
+      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 JobRunState_CANCELLED :: JobRunState
+pattern JobRunState_CANCELLED = JobRunState' "CANCELLED"
+
+pattern JobRunState_CANCELLING :: JobRunState
+pattern JobRunState_CANCELLING = JobRunState' "CANCELLING"
+
+pattern JobRunState_FAILED :: JobRunState
+pattern JobRunState_FAILED = JobRunState' "FAILED"
+
+pattern JobRunState_PENDING :: JobRunState
+pattern JobRunState_PENDING = JobRunState' "PENDING"
+
+pattern JobRunState_RUNNING :: JobRunState
+pattern JobRunState_RUNNING = JobRunState' "RUNNING"
+
+pattern JobRunState_SCHEDULED :: JobRunState
+pattern JobRunState_SCHEDULED = JobRunState' "SCHEDULED"
+
+pattern JobRunState_SUBMITTED :: JobRunState
+pattern JobRunState_SUBMITTED = JobRunState' "SUBMITTED"
+
+pattern JobRunState_SUCCESS :: JobRunState
+pattern JobRunState_SUCCESS = JobRunState' "SUCCESS"
+
+{-# COMPLETE
+  JobRunState_CANCELLED,
+  JobRunState_CANCELLING,
+  JobRunState_FAILED,
+  JobRunState_PENDING,
+  JobRunState_RUNNING,
+  JobRunState_SCHEDULED,
+  JobRunState_SUBMITTED,
+  JobRunState_SUCCESS,
+  JobRunState'
+  #-}
diff --git a/gen/Amazonka/EMRServerless/Types/JobRunSummary.hs b/gen/Amazonka/EMRServerless/Types/JobRunSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/JobRunSummary.hs
@@ -0,0 +1,235 @@
+{-# 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.EMRServerless.Types.JobRunSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.JobRunSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.JobRunState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of attributes associated with a job run.
+--
+-- /See:/ 'newJobRunSummary' smart constructor.
+data JobRunSummary = JobRunSummary'
+  { -- | The optional job run name. This doesn\'t have to be unique.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of job run, such as Spark or Hive.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the application the job is running on.
+    applicationId :: Prelude.Text,
+    -- | The ID of the job run.
+    id :: Prelude.Text,
+    -- | The ARN of the job run.
+    arn :: Prelude.Text,
+    -- | The user who created the job run.
+    createdBy :: Prelude.Text,
+    -- | The date and time when the job run was created.
+    createdAt :: Data.POSIX,
+    -- | The date and time when the job run was last updated.
+    updatedAt :: Data.POSIX,
+    -- | The execution role ARN of the job run.
+    executionRole :: Prelude.Text,
+    -- | The state of the job run.
+    state :: JobRunState,
+    -- | The state details of the job run.
+    stateDetails :: Prelude.Text,
+    -- | The EMR release associated with the application your job is running on.
+    releaseLabel :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobRunSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'jobRunSummary_name' - The optional job run name. This doesn\'t have to be unique.
+--
+-- 'type'', 'jobRunSummary_type' - The type of job run, such as Spark or Hive.
+--
+-- 'applicationId', 'jobRunSummary_applicationId' - The ID of the application the job is running on.
+--
+-- 'id', 'jobRunSummary_id' - The ID of the job run.
+--
+-- 'arn', 'jobRunSummary_arn' - The ARN of the job run.
+--
+-- 'createdBy', 'jobRunSummary_createdBy' - The user who created the job run.
+--
+-- 'createdAt', 'jobRunSummary_createdAt' - The date and time when the job run was created.
+--
+-- 'updatedAt', 'jobRunSummary_updatedAt' - The date and time when the job run was last updated.
+--
+-- 'executionRole', 'jobRunSummary_executionRole' - The execution role ARN of the job run.
+--
+-- 'state', 'jobRunSummary_state' - The state of the job run.
+--
+-- 'stateDetails', 'jobRunSummary_stateDetails' - The state details of the job run.
+--
+-- 'releaseLabel', 'jobRunSummary_releaseLabel' - The EMR release associated with the application your job is running on.
+newJobRunSummary ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'createdBy'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'executionRole'
+  Prelude.Text ->
+  -- | 'state'
+  JobRunState ->
+  -- | 'stateDetails'
+  Prelude.Text ->
+  -- | 'releaseLabel'
+  Prelude.Text ->
+  JobRunSummary
+newJobRunSummary
+  pApplicationId_
+  pId_
+  pArn_
+  pCreatedBy_
+  pCreatedAt_
+  pUpdatedAt_
+  pExecutionRole_
+  pState_
+  pStateDetails_
+  pReleaseLabel_ =
+    JobRunSummary'
+      { name = Prelude.Nothing,
+        type' = Prelude.Nothing,
+        applicationId = pApplicationId_,
+        id = pId_,
+        arn = pArn_,
+        createdBy = pCreatedBy_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        executionRole = pExecutionRole_,
+        state = pState_,
+        stateDetails = pStateDetails_,
+        releaseLabel = pReleaseLabel_
+      }
+
+-- | The optional job run name. This doesn\'t have to be unique.
+jobRunSummary_name :: Lens.Lens' JobRunSummary (Prelude.Maybe Prelude.Text)
+jobRunSummary_name = Lens.lens (\JobRunSummary' {name} -> name) (\s@JobRunSummary' {} a -> s {name = a} :: JobRunSummary)
+
+-- | The type of job run, such as Spark or Hive.
+jobRunSummary_type :: Lens.Lens' JobRunSummary (Prelude.Maybe Prelude.Text)
+jobRunSummary_type = Lens.lens (\JobRunSummary' {type'} -> type') (\s@JobRunSummary' {} a -> s {type' = a} :: JobRunSummary)
+
+-- | The ID of the application the job is running on.
+jobRunSummary_applicationId :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_applicationId = Lens.lens (\JobRunSummary' {applicationId} -> applicationId) (\s@JobRunSummary' {} a -> s {applicationId = a} :: JobRunSummary)
+
+-- | The ID of the job run.
+jobRunSummary_id :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_id = Lens.lens (\JobRunSummary' {id} -> id) (\s@JobRunSummary' {} a -> s {id = a} :: JobRunSummary)
+
+-- | The ARN of the job run.
+jobRunSummary_arn :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_arn = Lens.lens (\JobRunSummary' {arn} -> arn) (\s@JobRunSummary' {} a -> s {arn = a} :: JobRunSummary)
+
+-- | The user who created the job run.
+jobRunSummary_createdBy :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_createdBy = Lens.lens (\JobRunSummary' {createdBy} -> createdBy) (\s@JobRunSummary' {} a -> s {createdBy = a} :: JobRunSummary)
+
+-- | The date and time when the job run was created.
+jobRunSummary_createdAt :: Lens.Lens' JobRunSummary Prelude.UTCTime
+jobRunSummary_createdAt = Lens.lens (\JobRunSummary' {createdAt} -> createdAt) (\s@JobRunSummary' {} a -> s {createdAt = a} :: JobRunSummary) Prelude.. Data._Time
+
+-- | The date and time when the job run was last updated.
+jobRunSummary_updatedAt :: Lens.Lens' JobRunSummary Prelude.UTCTime
+jobRunSummary_updatedAt = Lens.lens (\JobRunSummary' {updatedAt} -> updatedAt) (\s@JobRunSummary' {} a -> s {updatedAt = a} :: JobRunSummary) Prelude.. Data._Time
+
+-- | The execution role ARN of the job run.
+jobRunSummary_executionRole :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_executionRole = Lens.lens (\JobRunSummary' {executionRole} -> executionRole) (\s@JobRunSummary' {} a -> s {executionRole = a} :: JobRunSummary)
+
+-- | The state of the job run.
+jobRunSummary_state :: Lens.Lens' JobRunSummary JobRunState
+jobRunSummary_state = Lens.lens (\JobRunSummary' {state} -> state) (\s@JobRunSummary' {} a -> s {state = a} :: JobRunSummary)
+
+-- | The state details of the job run.
+jobRunSummary_stateDetails :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_stateDetails = Lens.lens (\JobRunSummary' {stateDetails} -> stateDetails) (\s@JobRunSummary' {} a -> s {stateDetails = a} :: JobRunSummary)
+
+-- | The EMR release associated with the application your job is running on.
+jobRunSummary_releaseLabel :: Lens.Lens' JobRunSummary Prelude.Text
+jobRunSummary_releaseLabel = Lens.lens (\JobRunSummary' {releaseLabel} -> releaseLabel) (\s@JobRunSummary' {} a -> s {releaseLabel = a} :: JobRunSummary)
+
+instance Data.FromJSON JobRunSummary where
+  parseJSON =
+    Data.withObject
+      "JobRunSummary"
+      ( \x ->
+          JobRunSummary'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..: "applicationId")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "createdBy")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+            Prelude.<*> (x Data..: "executionRole")
+            Prelude.<*> (x Data..: "state")
+            Prelude.<*> (x Data..: "stateDetails")
+            Prelude.<*> (x Data..: "releaseLabel")
+      )
+
+instance Prelude.Hashable JobRunSummary where
+  hashWithSalt _salt JobRunSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` executionRole
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateDetails
+      `Prelude.hashWithSalt` releaseLabel
+
+instance Prelude.NFData JobRunSummary where
+  rnf JobRunSummary' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf executionRole
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateDetails
+      `Prelude.seq` Prelude.rnf releaseLabel
diff --git a/gen/Amazonka/EMRServerless/Types/ManagedPersistenceMonitoringConfiguration.hs b/gen/Amazonka/EMRServerless/Types/ManagedPersistenceMonitoringConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/ManagedPersistenceMonitoringConfiguration.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.ManagedPersistenceMonitoringConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.ManagedPersistenceMonitoringConfiguration 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 managed log persistence configuration for a job run.
+--
+-- /See:/ 'newManagedPersistenceMonitoringConfiguration' smart constructor.
+data ManagedPersistenceMonitoringConfiguration = ManagedPersistenceMonitoringConfiguration'
+  { -- | Enables managed logging and defaults to true. If set to false, managed
+    -- logging will be turned off.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The KMS key ARN to encrypt the logs stored in managed log persistence.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ManagedPersistenceMonitoringConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'managedPersistenceMonitoringConfiguration_enabled' - Enables managed logging and defaults to true. If set to false, managed
+-- logging will be turned off.
+--
+-- 'encryptionKeyArn', 'managedPersistenceMonitoringConfiguration_encryptionKeyArn' - The KMS key ARN to encrypt the logs stored in managed log persistence.
+newManagedPersistenceMonitoringConfiguration ::
+  ManagedPersistenceMonitoringConfiguration
+newManagedPersistenceMonitoringConfiguration =
+  ManagedPersistenceMonitoringConfiguration'
+    { enabled =
+        Prelude.Nothing,
+      encryptionKeyArn =
+        Prelude.Nothing
+    }
+
+-- | Enables managed logging and defaults to true. If set to false, managed
+-- logging will be turned off.
+managedPersistenceMonitoringConfiguration_enabled :: Lens.Lens' ManagedPersistenceMonitoringConfiguration (Prelude.Maybe Prelude.Bool)
+managedPersistenceMonitoringConfiguration_enabled = Lens.lens (\ManagedPersistenceMonitoringConfiguration' {enabled} -> enabled) (\s@ManagedPersistenceMonitoringConfiguration' {} a -> s {enabled = a} :: ManagedPersistenceMonitoringConfiguration)
+
+-- | The KMS key ARN to encrypt the logs stored in managed log persistence.
+managedPersistenceMonitoringConfiguration_encryptionKeyArn :: Lens.Lens' ManagedPersistenceMonitoringConfiguration (Prelude.Maybe Prelude.Text)
+managedPersistenceMonitoringConfiguration_encryptionKeyArn = Lens.lens (\ManagedPersistenceMonitoringConfiguration' {encryptionKeyArn} -> encryptionKeyArn) (\s@ManagedPersistenceMonitoringConfiguration' {} a -> s {encryptionKeyArn = a} :: ManagedPersistenceMonitoringConfiguration)
+
+instance
+  Data.FromJSON
+    ManagedPersistenceMonitoringConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ManagedPersistenceMonitoringConfiguration"
+      ( \x ->
+          ManagedPersistenceMonitoringConfiguration'
+            Prelude.<$> (x Data..:? "enabled")
+            Prelude.<*> (x Data..:? "encryptionKeyArn")
+      )
+
+instance
+  Prelude.Hashable
+    ManagedPersistenceMonitoringConfiguration
+  where
+  hashWithSalt
+    _salt
+    ManagedPersistenceMonitoringConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` enabled
+        `Prelude.hashWithSalt` encryptionKeyArn
+
+instance
+  Prelude.NFData
+    ManagedPersistenceMonitoringConfiguration
+  where
+  rnf ManagedPersistenceMonitoringConfiguration' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf encryptionKeyArn
+
+instance
+  Data.ToJSON
+    ManagedPersistenceMonitoringConfiguration
+  where
+  toJSON ManagedPersistenceMonitoringConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("enabled" Data..=) Prelude.<$> enabled,
+            ("encryptionKeyArn" Data..=)
+              Prelude.<$> encryptionKeyArn
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/MaximumAllowedResources.hs b/gen/Amazonka/EMRServerless/Types/MaximumAllowedResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/MaximumAllowedResources.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.MaximumAllowedResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.MaximumAllowedResources 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 maximum allowed cumulative resources for an application. No new
+-- resources will be created once the limit is hit.
+--
+-- /See:/ 'newMaximumAllowedResources' smart constructor.
+data MaximumAllowedResources = MaximumAllowedResources'
+  { -- | The maximum allowed disk for an application.
+    disk :: Prelude.Maybe Prelude.Text,
+    -- | The maximum allowed CPU for an application.
+    cpu :: Prelude.Text,
+    -- | The maximum allowed resources for an application.
+    memory :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MaximumAllowedResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disk', 'maximumAllowedResources_disk' - The maximum allowed disk for an application.
+--
+-- 'cpu', 'maximumAllowedResources_cpu' - The maximum allowed CPU for an application.
+--
+-- 'memory', 'maximumAllowedResources_memory' - The maximum allowed resources for an application.
+newMaximumAllowedResources ::
+  -- | 'cpu'
+  Prelude.Text ->
+  -- | 'memory'
+  Prelude.Text ->
+  MaximumAllowedResources
+newMaximumAllowedResources pCpu_ pMemory_ =
+  MaximumAllowedResources'
+    { disk = Prelude.Nothing,
+      cpu = pCpu_,
+      memory = pMemory_
+    }
+
+-- | The maximum allowed disk for an application.
+maximumAllowedResources_disk :: Lens.Lens' MaximumAllowedResources (Prelude.Maybe Prelude.Text)
+maximumAllowedResources_disk = Lens.lens (\MaximumAllowedResources' {disk} -> disk) (\s@MaximumAllowedResources' {} a -> s {disk = a} :: MaximumAllowedResources)
+
+-- | The maximum allowed CPU for an application.
+maximumAllowedResources_cpu :: Lens.Lens' MaximumAllowedResources Prelude.Text
+maximumAllowedResources_cpu = Lens.lens (\MaximumAllowedResources' {cpu} -> cpu) (\s@MaximumAllowedResources' {} a -> s {cpu = a} :: MaximumAllowedResources)
+
+-- | The maximum allowed resources for an application.
+maximumAllowedResources_memory :: Lens.Lens' MaximumAllowedResources Prelude.Text
+maximumAllowedResources_memory = Lens.lens (\MaximumAllowedResources' {memory} -> memory) (\s@MaximumAllowedResources' {} a -> s {memory = a} :: MaximumAllowedResources)
+
+instance Data.FromJSON MaximumAllowedResources where
+  parseJSON =
+    Data.withObject
+      "MaximumAllowedResources"
+      ( \x ->
+          MaximumAllowedResources'
+            Prelude.<$> (x Data..:? "disk")
+            Prelude.<*> (x Data..: "cpu")
+            Prelude.<*> (x Data..: "memory")
+      )
+
+instance Prelude.Hashable MaximumAllowedResources where
+  hashWithSalt _salt MaximumAllowedResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` disk
+      `Prelude.hashWithSalt` cpu
+      `Prelude.hashWithSalt` memory
+
+instance Prelude.NFData MaximumAllowedResources where
+  rnf MaximumAllowedResources' {..} =
+    Prelude.rnf disk
+      `Prelude.seq` Prelude.rnf cpu
+      `Prelude.seq` Prelude.rnf memory
+
+instance Data.ToJSON MaximumAllowedResources where
+  toJSON MaximumAllowedResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("disk" Data..=) Prelude.<$> disk,
+            Prelude.Just ("cpu" Data..= cpu),
+            Prelude.Just ("memory" Data..= memory)
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/MonitoringConfiguration.hs b/gen/Amazonka/EMRServerless/Types/MonitoringConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/MonitoringConfiguration.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.MonitoringConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.MonitoringConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.ManagedPersistenceMonitoringConfiguration
+import Amazonka.EMRServerless.Types.S3MonitoringConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration setting for monitoring.
+--
+-- /See:/ 'newMonitoringConfiguration' smart constructor.
+data MonitoringConfiguration = MonitoringConfiguration'
+  { -- | The managed log persistence configuration for a job run.
+    managedPersistenceMonitoringConfiguration :: Prelude.Maybe ManagedPersistenceMonitoringConfiguration,
+    -- | The Amazon S3 configuration for monitoring log publishing.
+    s3MonitoringConfiguration :: Prelude.Maybe S3MonitoringConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitoringConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'managedPersistenceMonitoringConfiguration', 'monitoringConfiguration_managedPersistenceMonitoringConfiguration' - The managed log persistence configuration for a job run.
+--
+-- 's3MonitoringConfiguration', 'monitoringConfiguration_s3MonitoringConfiguration' - The Amazon S3 configuration for monitoring log publishing.
+newMonitoringConfiguration ::
+  MonitoringConfiguration
+newMonitoringConfiguration =
+  MonitoringConfiguration'
+    { managedPersistenceMonitoringConfiguration =
+        Prelude.Nothing,
+      s3MonitoringConfiguration = Prelude.Nothing
+    }
+
+-- | The managed log persistence configuration for a job run.
+monitoringConfiguration_managedPersistenceMonitoringConfiguration :: Lens.Lens' MonitoringConfiguration (Prelude.Maybe ManagedPersistenceMonitoringConfiguration)
+monitoringConfiguration_managedPersistenceMonitoringConfiguration = Lens.lens (\MonitoringConfiguration' {managedPersistenceMonitoringConfiguration} -> managedPersistenceMonitoringConfiguration) (\s@MonitoringConfiguration' {} a -> s {managedPersistenceMonitoringConfiguration = a} :: MonitoringConfiguration)
+
+-- | The Amazon S3 configuration for monitoring log publishing.
+monitoringConfiguration_s3MonitoringConfiguration :: Lens.Lens' MonitoringConfiguration (Prelude.Maybe S3MonitoringConfiguration)
+monitoringConfiguration_s3MonitoringConfiguration = Lens.lens (\MonitoringConfiguration' {s3MonitoringConfiguration} -> s3MonitoringConfiguration) (\s@MonitoringConfiguration' {} a -> s {s3MonitoringConfiguration = a} :: MonitoringConfiguration)
+
+instance Data.FromJSON MonitoringConfiguration where
+  parseJSON =
+    Data.withObject
+      "MonitoringConfiguration"
+      ( \x ->
+          MonitoringConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "managedPersistenceMonitoringConfiguration"
+                        )
+            Prelude.<*> (x Data..:? "s3MonitoringConfiguration")
+      )
+
+instance Prelude.Hashable MonitoringConfiguration where
+  hashWithSalt _salt MonitoringConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` managedPersistenceMonitoringConfiguration
+      `Prelude.hashWithSalt` s3MonitoringConfiguration
+
+instance Prelude.NFData MonitoringConfiguration where
+  rnf MonitoringConfiguration' {..} =
+    Prelude.rnf
+      managedPersistenceMonitoringConfiguration
+      `Prelude.seq` Prelude.rnf s3MonitoringConfiguration
+
+instance Data.ToJSON MonitoringConfiguration where
+  toJSON MonitoringConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ( "managedPersistenceMonitoringConfiguration"
+                Data..=
+            )
+              Prelude.<$> managedPersistenceMonitoringConfiguration,
+            ("s3MonitoringConfiguration" Data..=)
+              Prelude.<$> s3MonitoringConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/NetworkConfiguration.hs b/gen/Amazonka/EMRServerless/Types/NetworkConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/NetworkConfiguration.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.NetworkConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.NetworkConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The network configuration for customer VPC connectivity.
+--
+-- /See:/ 'newNetworkConfiguration' smart constructor.
+data NetworkConfiguration = NetworkConfiguration'
+  { -- | The array of security group Ids for customer VPC connectivity.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The array of subnet Ids for customer VPC connectivity.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroupIds', 'networkConfiguration_securityGroupIds' - The array of security group Ids for customer VPC connectivity.
+--
+-- 'subnetIds', 'networkConfiguration_subnetIds' - The array of subnet Ids for customer VPC connectivity.
+newNetworkConfiguration ::
+  NetworkConfiguration
+newNetworkConfiguration =
+  NetworkConfiguration'
+    { securityGroupIds =
+        Prelude.Nothing,
+      subnetIds = Prelude.Nothing
+    }
+
+-- | The array of security group Ids for customer VPC connectivity.
+networkConfiguration_securityGroupIds :: Lens.Lens' NetworkConfiguration (Prelude.Maybe [Prelude.Text])
+networkConfiguration_securityGroupIds = Lens.lens (\NetworkConfiguration' {securityGroupIds} -> securityGroupIds) (\s@NetworkConfiguration' {} a -> s {securityGroupIds = a} :: NetworkConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The array of subnet Ids for customer VPC connectivity.
+networkConfiguration_subnetIds :: Lens.Lens' NetworkConfiguration (Prelude.Maybe [Prelude.Text])
+networkConfiguration_subnetIds = Lens.lens (\NetworkConfiguration' {subnetIds} -> subnetIds) (\s@NetworkConfiguration' {} a -> s {subnetIds = a} :: NetworkConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON NetworkConfiguration where
+  parseJSON =
+    Data.withObject
+      "NetworkConfiguration"
+      ( \x ->
+          NetworkConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "securityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "subnetIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable NetworkConfiguration where
+  hashWithSalt _salt NetworkConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` subnetIds
+
+instance Prelude.NFData NetworkConfiguration where
+  rnf NetworkConfiguration' {..} =
+    Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+
+instance Data.ToJSON NetworkConfiguration where
+  toJSON NetworkConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("subnetIds" Data..=) Prelude.<$> subnetIds
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/S3MonitoringConfiguration.hs b/gen/Amazonka/EMRServerless/Types/S3MonitoringConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/S3MonitoringConfiguration.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.S3MonitoringConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.S3MonitoringConfiguration 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 Amazon S3 configuration for monitoring log publishing. You can
+-- configure your jobs to send log information to Amazon S3.
+--
+-- /See:/ 'newS3MonitoringConfiguration' smart constructor.
+data S3MonitoringConfiguration = S3MonitoringConfiguration'
+  { -- | The KMS key ARN to encrypt the logs published to the given Amazon S3
+    -- destination.
+    encryptionKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 destination URI for log publishing.
+    logUri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3MonitoringConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryptionKeyArn', 's3MonitoringConfiguration_encryptionKeyArn' - The KMS key ARN to encrypt the logs published to the given Amazon S3
+-- destination.
+--
+-- 'logUri', 's3MonitoringConfiguration_logUri' - The Amazon S3 destination URI for log publishing.
+newS3MonitoringConfiguration ::
+  S3MonitoringConfiguration
+newS3MonitoringConfiguration =
+  S3MonitoringConfiguration'
+    { encryptionKeyArn =
+        Prelude.Nothing,
+      logUri = Prelude.Nothing
+    }
+
+-- | The KMS key ARN to encrypt the logs published to the given Amazon S3
+-- destination.
+s3MonitoringConfiguration_encryptionKeyArn :: Lens.Lens' S3MonitoringConfiguration (Prelude.Maybe Prelude.Text)
+s3MonitoringConfiguration_encryptionKeyArn = Lens.lens (\S3MonitoringConfiguration' {encryptionKeyArn} -> encryptionKeyArn) (\s@S3MonitoringConfiguration' {} a -> s {encryptionKeyArn = a} :: S3MonitoringConfiguration)
+
+-- | The Amazon S3 destination URI for log publishing.
+s3MonitoringConfiguration_logUri :: Lens.Lens' S3MonitoringConfiguration (Prelude.Maybe Prelude.Text)
+s3MonitoringConfiguration_logUri = Lens.lens (\S3MonitoringConfiguration' {logUri} -> logUri) (\s@S3MonitoringConfiguration' {} a -> s {logUri = a} :: S3MonitoringConfiguration)
+
+instance Data.FromJSON S3MonitoringConfiguration where
+  parseJSON =
+    Data.withObject
+      "S3MonitoringConfiguration"
+      ( \x ->
+          S3MonitoringConfiguration'
+            Prelude.<$> (x Data..:? "encryptionKeyArn")
+            Prelude.<*> (x Data..:? "logUri")
+      )
+
+instance Prelude.Hashable S3MonitoringConfiguration where
+  hashWithSalt _salt S3MonitoringConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionKeyArn
+      `Prelude.hashWithSalt` logUri
+
+instance Prelude.NFData S3MonitoringConfiguration where
+  rnf S3MonitoringConfiguration' {..} =
+    Prelude.rnf encryptionKeyArn
+      `Prelude.seq` Prelude.rnf logUri
+
+instance Data.ToJSON S3MonitoringConfiguration where
+  toJSON S3MonitoringConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryptionKeyArn" Data..=)
+              Prelude.<$> encryptionKeyArn,
+            ("logUri" Data..=) Prelude.<$> logUri
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/SparkSubmit.hs b/gen/Amazonka/EMRServerless/Types/SparkSubmit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/SparkSubmit.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.SparkSubmit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.SparkSubmit 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 configurations for the Spark submit job driver.
+--
+-- /See:/ 'newSparkSubmit' smart constructor.
+data SparkSubmit = SparkSubmit'
+  { -- | The arguments for the Spark submit job run.
+    entryPointArguments :: Prelude.Maybe [Data.Sensitive Prelude.Text],
+    -- | The parameters for the Spark submit job run.
+    sparkSubmitParameters :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The entry point for the Spark submit job run.
+    entryPoint :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SparkSubmit' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entryPointArguments', 'sparkSubmit_entryPointArguments' - The arguments for the Spark submit job run.
+--
+-- 'sparkSubmitParameters', 'sparkSubmit_sparkSubmitParameters' - The parameters for the Spark submit job run.
+--
+-- 'entryPoint', 'sparkSubmit_entryPoint' - The entry point for the Spark submit job run.
+newSparkSubmit ::
+  -- | 'entryPoint'
+  Prelude.Text ->
+  SparkSubmit
+newSparkSubmit pEntryPoint_ =
+  SparkSubmit'
+    { entryPointArguments = Prelude.Nothing,
+      sparkSubmitParameters = Prelude.Nothing,
+      entryPoint = Data._Sensitive Lens.# pEntryPoint_
+    }
+
+-- | The arguments for the Spark submit job run.
+sparkSubmit_entryPointArguments :: Lens.Lens' SparkSubmit (Prelude.Maybe [Prelude.Text])
+sparkSubmit_entryPointArguments = Lens.lens (\SparkSubmit' {entryPointArguments} -> entryPointArguments) (\s@SparkSubmit' {} a -> s {entryPointArguments = a} :: SparkSubmit) Prelude.. Lens.mapping Lens.coerced
+
+-- | The parameters for the Spark submit job run.
+sparkSubmit_sparkSubmitParameters :: Lens.Lens' SparkSubmit (Prelude.Maybe Prelude.Text)
+sparkSubmit_sparkSubmitParameters = Lens.lens (\SparkSubmit' {sparkSubmitParameters} -> sparkSubmitParameters) (\s@SparkSubmit' {} a -> s {sparkSubmitParameters = a} :: SparkSubmit) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The entry point for the Spark submit job run.
+sparkSubmit_entryPoint :: Lens.Lens' SparkSubmit Prelude.Text
+sparkSubmit_entryPoint = Lens.lens (\SparkSubmit' {entryPoint} -> entryPoint) (\s@SparkSubmit' {} a -> s {entryPoint = a} :: SparkSubmit) Prelude.. Data._Sensitive
+
+instance Data.FromJSON SparkSubmit where
+  parseJSON =
+    Data.withObject
+      "SparkSubmit"
+      ( \x ->
+          SparkSubmit'
+            Prelude.<$> ( x
+                            Data..:? "entryPointArguments"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "sparkSubmitParameters")
+            Prelude.<*> (x Data..: "entryPoint")
+      )
+
+instance Prelude.Hashable SparkSubmit where
+  hashWithSalt _salt SparkSubmit' {..} =
+    _salt
+      `Prelude.hashWithSalt` entryPointArguments
+      `Prelude.hashWithSalt` sparkSubmitParameters
+      `Prelude.hashWithSalt` entryPoint
+
+instance Prelude.NFData SparkSubmit where
+  rnf SparkSubmit' {..} =
+    Prelude.rnf entryPointArguments
+      `Prelude.seq` Prelude.rnf sparkSubmitParameters
+      `Prelude.seq` Prelude.rnf entryPoint
+
+instance Data.ToJSON SparkSubmit where
+  toJSON SparkSubmit' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("entryPointArguments" Data..=)
+              Prelude.<$> entryPointArguments,
+            ("sparkSubmitParameters" Data..=)
+              Prelude.<$> sparkSubmitParameters,
+            Prelude.Just ("entryPoint" Data..= entryPoint)
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/TotalResourceUtilization.hs b/gen/Amazonka/EMRServerless/Types/TotalResourceUtilization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/TotalResourceUtilization.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.TotalResourceUtilization
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.TotalResourceUtilization 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 aggregate vCPU, memory, and storage resources used from the time job
+-- start executing till the time job is terminated, rounded up to the
+-- nearest second.
+--
+-- /See:/ 'newTotalResourceUtilization' smart constructor.
+data TotalResourceUtilization = TotalResourceUtilization'
+  { -- | The aggregated memory used per hour from the time job start executing
+    -- till the time job is terminated.
+    memoryGBHour :: Prelude.Maybe Prelude.Double,
+    -- | The aggregated storage used per hour from the time job start executing
+    -- till the time job is terminated.
+    storageGBHour :: Prelude.Maybe Prelude.Double,
+    -- | The aggregated vCPU used per hour from the time job start executing till
+    -- the time job is terminated.
+    vCPUHour :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TotalResourceUtilization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memoryGBHour', 'totalResourceUtilization_memoryGBHour' - The aggregated memory used per hour from the time job start executing
+-- till the time job is terminated.
+--
+-- 'storageGBHour', 'totalResourceUtilization_storageGBHour' - The aggregated storage used per hour from the time job start executing
+-- till the time job is terminated.
+--
+-- 'vCPUHour', 'totalResourceUtilization_vCPUHour' - The aggregated vCPU used per hour from the time job start executing till
+-- the time job is terminated.
+newTotalResourceUtilization ::
+  TotalResourceUtilization
+newTotalResourceUtilization =
+  TotalResourceUtilization'
+    { memoryGBHour =
+        Prelude.Nothing,
+      storageGBHour = Prelude.Nothing,
+      vCPUHour = Prelude.Nothing
+    }
+
+-- | The aggregated memory used per hour from the time job start executing
+-- till the time job is terminated.
+totalResourceUtilization_memoryGBHour :: Lens.Lens' TotalResourceUtilization (Prelude.Maybe Prelude.Double)
+totalResourceUtilization_memoryGBHour = Lens.lens (\TotalResourceUtilization' {memoryGBHour} -> memoryGBHour) (\s@TotalResourceUtilization' {} a -> s {memoryGBHour = a} :: TotalResourceUtilization)
+
+-- | The aggregated storage used per hour from the time job start executing
+-- till the time job is terminated.
+totalResourceUtilization_storageGBHour :: Lens.Lens' TotalResourceUtilization (Prelude.Maybe Prelude.Double)
+totalResourceUtilization_storageGBHour = Lens.lens (\TotalResourceUtilization' {storageGBHour} -> storageGBHour) (\s@TotalResourceUtilization' {} a -> s {storageGBHour = a} :: TotalResourceUtilization)
+
+-- | The aggregated vCPU used per hour from the time job start executing till
+-- the time job is terminated.
+totalResourceUtilization_vCPUHour :: Lens.Lens' TotalResourceUtilization (Prelude.Maybe Prelude.Double)
+totalResourceUtilization_vCPUHour = Lens.lens (\TotalResourceUtilization' {vCPUHour} -> vCPUHour) (\s@TotalResourceUtilization' {} a -> s {vCPUHour = a} :: TotalResourceUtilization)
+
+instance Data.FromJSON TotalResourceUtilization where
+  parseJSON =
+    Data.withObject
+      "TotalResourceUtilization"
+      ( \x ->
+          TotalResourceUtilization'
+            Prelude.<$> (x Data..:? "memoryGBHour")
+            Prelude.<*> (x Data..:? "storageGBHour")
+            Prelude.<*> (x Data..:? "vCPUHour")
+      )
+
+instance Prelude.Hashable TotalResourceUtilization where
+  hashWithSalt _salt TotalResourceUtilization' {..} =
+    _salt
+      `Prelude.hashWithSalt` memoryGBHour
+      `Prelude.hashWithSalt` storageGBHour
+      `Prelude.hashWithSalt` vCPUHour
+
+instance Prelude.NFData TotalResourceUtilization where
+  rnf TotalResourceUtilization' {..} =
+    Prelude.rnf memoryGBHour
+      `Prelude.seq` Prelude.rnf storageGBHour
+      `Prelude.seq` Prelude.rnf vCPUHour
diff --git a/gen/Amazonka/EMRServerless/Types/WorkerResourceConfig.hs b/gen/Amazonka/EMRServerless/Types/WorkerResourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/WorkerResourceConfig.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EMRServerless.Types.WorkerResourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.WorkerResourceConfig 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 cumulative configuration requirements for every worker instance of
+-- the worker type.
+--
+-- /See:/ 'newWorkerResourceConfig' smart constructor.
+data WorkerResourceConfig = WorkerResourceConfig'
+  { -- | The disk requirements for every worker instance of the worker type.
+    disk :: Prelude.Maybe Prelude.Text,
+    -- | The CPU requirements for every worker instance of the worker type.
+    cpu :: Prelude.Text,
+    -- | The memory requirements for every worker instance of the worker type.
+    memory :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerResourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disk', 'workerResourceConfig_disk' - The disk requirements for every worker instance of the worker type.
+--
+-- 'cpu', 'workerResourceConfig_cpu' - The CPU requirements for every worker instance of the worker type.
+--
+-- 'memory', 'workerResourceConfig_memory' - The memory requirements for every worker instance of the worker type.
+newWorkerResourceConfig ::
+  -- | 'cpu'
+  Prelude.Text ->
+  -- | 'memory'
+  Prelude.Text ->
+  WorkerResourceConfig
+newWorkerResourceConfig pCpu_ pMemory_ =
+  WorkerResourceConfig'
+    { disk = Prelude.Nothing,
+      cpu = pCpu_,
+      memory = pMemory_
+    }
+
+-- | The disk requirements for every worker instance of the worker type.
+workerResourceConfig_disk :: Lens.Lens' WorkerResourceConfig (Prelude.Maybe Prelude.Text)
+workerResourceConfig_disk = Lens.lens (\WorkerResourceConfig' {disk} -> disk) (\s@WorkerResourceConfig' {} a -> s {disk = a} :: WorkerResourceConfig)
+
+-- | The CPU requirements for every worker instance of the worker type.
+workerResourceConfig_cpu :: Lens.Lens' WorkerResourceConfig Prelude.Text
+workerResourceConfig_cpu = Lens.lens (\WorkerResourceConfig' {cpu} -> cpu) (\s@WorkerResourceConfig' {} a -> s {cpu = a} :: WorkerResourceConfig)
+
+-- | The memory requirements for every worker instance of the worker type.
+workerResourceConfig_memory :: Lens.Lens' WorkerResourceConfig Prelude.Text
+workerResourceConfig_memory = Lens.lens (\WorkerResourceConfig' {memory} -> memory) (\s@WorkerResourceConfig' {} a -> s {memory = a} :: WorkerResourceConfig)
+
+instance Data.FromJSON WorkerResourceConfig where
+  parseJSON =
+    Data.withObject
+      "WorkerResourceConfig"
+      ( \x ->
+          WorkerResourceConfig'
+            Prelude.<$> (x Data..:? "disk")
+            Prelude.<*> (x Data..: "cpu")
+            Prelude.<*> (x Data..: "memory")
+      )
+
+instance Prelude.Hashable WorkerResourceConfig where
+  hashWithSalt _salt WorkerResourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` disk
+      `Prelude.hashWithSalt` cpu
+      `Prelude.hashWithSalt` memory
+
+instance Prelude.NFData WorkerResourceConfig where
+  rnf WorkerResourceConfig' {..} =
+    Prelude.rnf disk
+      `Prelude.seq` Prelude.rnf cpu
+      `Prelude.seq` Prelude.rnf memory
+
+instance Data.ToJSON WorkerResourceConfig where
+  toJSON WorkerResourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("disk" Data..=) Prelude.<$> disk,
+            Prelude.Just ("cpu" Data..= cpu),
+            Prelude.Just ("memory" Data..= memory)
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/Types/WorkerTypeSpecification.hs b/gen/Amazonka/EMRServerless/Types/WorkerTypeSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/WorkerTypeSpecification.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.EMRServerless.Types.WorkerTypeSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.WorkerTypeSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.ImageConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | The specifications for a worker type.
+--
+-- /See:/ 'newWorkerTypeSpecification' smart constructor.
+data WorkerTypeSpecification = WorkerTypeSpecification'
+  { -- | The image configuration for a worker type.
+    imageConfiguration :: Prelude.Maybe ImageConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerTypeSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageConfiguration', 'workerTypeSpecification_imageConfiguration' - The image configuration for a worker type.
+newWorkerTypeSpecification ::
+  WorkerTypeSpecification
+newWorkerTypeSpecification =
+  WorkerTypeSpecification'
+    { imageConfiguration =
+        Prelude.Nothing
+    }
+
+-- | The image configuration for a worker type.
+workerTypeSpecification_imageConfiguration :: Lens.Lens' WorkerTypeSpecification (Prelude.Maybe ImageConfiguration)
+workerTypeSpecification_imageConfiguration = Lens.lens (\WorkerTypeSpecification' {imageConfiguration} -> imageConfiguration) (\s@WorkerTypeSpecification' {} a -> s {imageConfiguration = a} :: WorkerTypeSpecification)
+
+instance Data.FromJSON WorkerTypeSpecification where
+  parseJSON =
+    Data.withObject
+      "WorkerTypeSpecification"
+      ( \x ->
+          WorkerTypeSpecification'
+            Prelude.<$> (x Data..:? "imageConfiguration")
+      )
+
+instance Prelude.Hashable WorkerTypeSpecification where
+  hashWithSalt _salt WorkerTypeSpecification' {..} =
+    _salt `Prelude.hashWithSalt` imageConfiguration
+
+instance Prelude.NFData WorkerTypeSpecification where
+  rnf WorkerTypeSpecification' {..} =
+    Prelude.rnf imageConfiguration
diff --git a/gen/Amazonka/EMRServerless/Types/WorkerTypeSpecificationInput.hs b/gen/Amazonka/EMRServerless/Types/WorkerTypeSpecificationInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/Types/WorkerTypeSpecificationInput.hs
@@ -0,0 +1,76 @@
+{-# 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.EMRServerless.Types.WorkerTypeSpecificationInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EMRServerless.Types.WorkerTypeSpecificationInput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Types.ImageConfigurationInput
+import qualified Amazonka.Prelude as Prelude
+
+-- | The specifications for a worker type.
+--
+-- /See:/ 'newWorkerTypeSpecificationInput' smart constructor.
+data WorkerTypeSpecificationInput = WorkerTypeSpecificationInput'
+  { -- | The image configuration for a worker type.
+    imageConfiguration :: Prelude.Maybe ImageConfigurationInput
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerTypeSpecificationInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageConfiguration', 'workerTypeSpecificationInput_imageConfiguration' - The image configuration for a worker type.
+newWorkerTypeSpecificationInput ::
+  WorkerTypeSpecificationInput
+newWorkerTypeSpecificationInput =
+  WorkerTypeSpecificationInput'
+    { imageConfiguration =
+        Prelude.Nothing
+    }
+
+-- | The image configuration for a worker type.
+workerTypeSpecificationInput_imageConfiguration :: Lens.Lens' WorkerTypeSpecificationInput (Prelude.Maybe ImageConfigurationInput)
+workerTypeSpecificationInput_imageConfiguration = Lens.lens (\WorkerTypeSpecificationInput' {imageConfiguration} -> imageConfiguration) (\s@WorkerTypeSpecificationInput' {} a -> s {imageConfiguration = a} :: WorkerTypeSpecificationInput)
+
+instance
+  Prelude.Hashable
+    WorkerTypeSpecificationInput
+  where
+  hashWithSalt _salt WorkerTypeSpecificationInput' {..} =
+    _salt `Prelude.hashWithSalt` imageConfiguration
+
+instance Prelude.NFData WorkerTypeSpecificationInput where
+  rnf WorkerTypeSpecificationInput' {..} =
+    Prelude.rnf imageConfiguration
+
+instance Data.ToJSON WorkerTypeSpecificationInput where
+  toJSON WorkerTypeSpecificationInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("imageConfiguration" Data..=)
+              Prelude.<$> imageConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/EMRServerless/UntagResource.hs b/gen/Amazonka/EMRServerless/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/UntagResource.hs
@@ -0,0 +1,169 @@
+{-# 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.EMRServerless.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 tags from resources.
+module Amazonka.EMRServerless.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.EMRServerless.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) that identifies the resource to list the
+    -- tags for. Currently, the supported resources are Amazon EMR Serverless
+    -- applications and job runs.
+    resourceArn :: Prelude.Text,
+    -- | The keys of the tags to be removed.
+    tagKeys :: Prelude.NonEmpty 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) that identifies the resource to list the
+-- tags for. Currently, the supported resources are Amazon EMR Serverless
+-- applications and job runs.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys of the tags to be removed.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the resource to list the
+-- tags for. Currently, the supported resources are Amazon EMR Serverless
+-- applications and job runs.
+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 be removed.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty 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/EMRServerless/UpdateApplication.hs b/gen/Amazonka/EMRServerless/UpdateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/UpdateApplication.hs
@@ -0,0 +1,342 @@
+{-# 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.EMRServerless.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 a specified application. An application has to be in a stopped
+-- or created state in order to be updated.
+module Amazonka.EMRServerless.UpdateApplication
+  ( -- * Creating a Request
+    UpdateApplication (..),
+    newUpdateApplication,
+
+    -- * Request Lenses
+    updateApplication_architecture,
+    updateApplication_autoStartConfiguration,
+    updateApplication_autoStopConfiguration,
+    updateApplication_imageConfiguration,
+    updateApplication_initialCapacity,
+    updateApplication_maximumCapacity,
+    updateApplication_networkConfiguration,
+    updateApplication_workerTypeSpecifications,
+    updateApplication_applicationId,
+    updateApplication_clientToken,
+
+    -- * Destructuring the Response
+    UpdateApplicationResponse (..),
+    newUpdateApplicationResponse,
+
+    -- * Response Lenses
+    updateApplicationResponse_httpStatus,
+    updateApplicationResponse_application,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.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 CPU architecture of an application.
+    architecture :: Prelude.Maybe Architecture,
+    -- | The configuration for an application to automatically start on job
+    -- submission.
+    autoStartConfiguration :: Prelude.Maybe AutoStartConfig,
+    -- | The configuration for an application to automatically stop after a
+    -- certain amount of time being idle.
+    autoStopConfiguration :: Prelude.Maybe AutoStopConfig,
+    -- | The image configuration to be used for all worker types. You can either
+    -- set this parameter or @imageConfiguration@ for each worker type in
+    -- @WorkerTypeSpecificationInput@.
+    imageConfiguration :: Prelude.Maybe ImageConfigurationInput,
+    -- | The capacity to initialize when the application is updated.
+    initialCapacity :: Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig),
+    -- | The maximum capacity to allocate when the application is updated. This
+    -- is cumulative across all workers at any given point in time during the
+    -- lifespan of the application. No new resources will be created once any
+    -- one of the defined limits is hit.
+    maximumCapacity :: Prelude.Maybe MaximumAllowedResources,
+    networkConfiguration :: Prelude.Maybe NetworkConfiguration,
+    -- | The key-value pairs that specify worker type to
+    -- @WorkerTypeSpecificationInput@. This parameter must contain all valid
+    -- worker types for a Spark or Hive application. Valid worker types include
+    -- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
+    -- @TezTask@ for Hive applications. You can either set image details in
+    -- this parameter for each worker type, or in @imageConfiguration@ for all
+    -- worker types.
+    workerTypeSpecifications :: Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecificationInput),
+    -- | The ID of the application to update.
+    applicationId :: Prelude.Text,
+    -- | The client idempotency token of the application to update. Its value
+    -- must be unique for each request.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architecture', 'updateApplication_architecture' - The CPU architecture of an application.
+--
+-- 'autoStartConfiguration', 'updateApplication_autoStartConfiguration' - The configuration for an application to automatically start on job
+-- submission.
+--
+-- 'autoStopConfiguration', 'updateApplication_autoStopConfiguration' - The configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+--
+-- 'imageConfiguration', 'updateApplication_imageConfiguration' - The image configuration to be used for all worker types. You can either
+-- set this parameter or @imageConfiguration@ for each worker type in
+-- @WorkerTypeSpecificationInput@.
+--
+-- 'initialCapacity', 'updateApplication_initialCapacity' - The capacity to initialize when the application is updated.
+--
+-- 'maximumCapacity', 'updateApplication_maximumCapacity' - The maximum capacity to allocate when the application is updated. This
+-- is cumulative across all workers at any given point in time during the
+-- lifespan of the application. No new resources will be created once any
+-- one of the defined limits is hit.
+--
+-- 'networkConfiguration', 'updateApplication_networkConfiguration' - Undocumented member.
+--
+-- 'workerTypeSpecifications', 'updateApplication_workerTypeSpecifications' - The key-value pairs that specify worker type to
+-- @WorkerTypeSpecificationInput@. This parameter must contain all valid
+-- worker types for a Spark or Hive application. Valid worker types include
+-- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
+-- @TezTask@ for Hive applications. You can either set image details in
+-- this parameter for each worker type, or in @imageConfiguration@ for all
+-- worker types.
+--
+-- 'applicationId', 'updateApplication_applicationId' - The ID of the application to update.
+--
+-- 'clientToken', 'updateApplication_clientToken' - The client idempotency token of the application to update. Its value
+-- must be unique for each request.
+newUpdateApplication ::
+  -- | 'applicationId'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  UpdateApplication
+newUpdateApplication pApplicationId_ pClientToken_ =
+  UpdateApplication'
+    { architecture = Prelude.Nothing,
+      autoStartConfiguration = Prelude.Nothing,
+      autoStopConfiguration = Prelude.Nothing,
+      imageConfiguration = Prelude.Nothing,
+      initialCapacity = Prelude.Nothing,
+      maximumCapacity = Prelude.Nothing,
+      networkConfiguration = Prelude.Nothing,
+      workerTypeSpecifications = Prelude.Nothing,
+      applicationId = pApplicationId_,
+      clientToken = pClientToken_
+    }
+
+-- | The CPU architecture of an application.
+updateApplication_architecture :: Lens.Lens' UpdateApplication (Prelude.Maybe Architecture)
+updateApplication_architecture = Lens.lens (\UpdateApplication' {architecture} -> architecture) (\s@UpdateApplication' {} a -> s {architecture = a} :: UpdateApplication)
+
+-- | The configuration for an application to automatically start on job
+-- submission.
+updateApplication_autoStartConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe AutoStartConfig)
+updateApplication_autoStartConfiguration = Lens.lens (\UpdateApplication' {autoStartConfiguration} -> autoStartConfiguration) (\s@UpdateApplication' {} a -> s {autoStartConfiguration = a} :: UpdateApplication)
+
+-- | The configuration for an application to automatically stop after a
+-- certain amount of time being idle.
+updateApplication_autoStopConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe AutoStopConfig)
+updateApplication_autoStopConfiguration = Lens.lens (\UpdateApplication' {autoStopConfiguration} -> autoStopConfiguration) (\s@UpdateApplication' {} a -> s {autoStopConfiguration = a} :: UpdateApplication)
+
+-- | The image configuration to be used for all worker types. You can either
+-- set this parameter or @imageConfiguration@ for each worker type in
+-- @WorkerTypeSpecificationInput@.
+updateApplication_imageConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe ImageConfigurationInput)
+updateApplication_imageConfiguration = Lens.lens (\UpdateApplication' {imageConfiguration} -> imageConfiguration) (\s@UpdateApplication' {} a -> s {imageConfiguration = a} :: UpdateApplication)
+
+-- | The capacity to initialize when the application is updated.
+updateApplication_initialCapacity :: Lens.Lens' UpdateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig))
+updateApplication_initialCapacity = Lens.lens (\UpdateApplication' {initialCapacity} -> initialCapacity) (\s@UpdateApplication' {} a -> s {initialCapacity = a} :: UpdateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum capacity to allocate when the application is updated. This
+-- is cumulative across all workers at any given point in time during the
+-- lifespan of the application. No new resources will be created once any
+-- one of the defined limits is hit.
+updateApplication_maximumCapacity :: Lens.Lens' UpdateApplication (Prelude.Maybe MaximumAllowedResources)
+updateApplication_maximumCapacity = Lens.lens (\UpdateApplication' {maximumCapacity} -> maximumCapacity) (\s@UpdateApplication' {} a -> s {maximumCapacity = a} :: UpdateApplication)
+
+-- | Undocumented member.
+updateApplication_networkConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe NetworkConfiguration)
+updateApplication_networkConfiguration = Lens.lens (\UpdateApplication' {networkConfiguration} -> networkConfiguration) (\s@UpdateApplication' {} a -> s {networkConfiguration = a} :: UpdateApplication)
+
+-- | The key-value pairs that specify worker type to
+-- @WorkerTypeSpecificationInput@. This parameter must contain all valid
+-- worker types for a Spark or Hive application. Valid worker types include
+-- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
+-- @TezTask@ for Hive applications. You can either set image details in
+-- this parameter for each worker type, or in @imageConfiguration@ for all
+-- worker types.
+updateApplication_workerTypeSpecifications :: Lens.Lens' UpdateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecificationInput))
+updateApplication_workerTypeSpecifications = Lens.lens (\UpdateApplication' {workerTypeSpecifications} -> workerTypeSpecifications) (\s@UpdateApplication' {} a -> s {workerTypeSpecifications = a} :: UpdateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the application to update.
+updateApplication_applicationId :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_applicationId = Lens.lens (\UpdateApplication' {applicationId} -> applicationId) (\s@UpdateApplication' {} a -> s {applicationId = a} :: UpdateApplication)
+
+-- | The client idempotency token of the application to update. Its value
+-- must be unique for each request.
+updateApplication_clientToken :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_clientToken = Lens.lens (\UpdateApplication' {clientToken} -> clientToken) (\s@UpdateApplication' {} a -> s {clientToken = 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..:> "application")
+      )
+
+instance Prelude.Hashable UpdateApplication where
+  hashWithSalt _salt UpdateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` autoStartConfiguration
+      `Prelude.hashWithSalt` autoStopConfiguration
+      `Prelude.hashWithSalt` imageConfiguration
+      `Prelude.hashWithSalt` initialCapacity
+      `Prelude.hashWithSalt` maximumCapacity
+      `Prelude.hashWithSalt` networkConfiguration
+      `Prelude.hashWithSalt` workerTypeSpecifications
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData UpdateApplication where
+  rnf UpdateApplication' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf autoStartConfiguration
+      `Prelude.seq` Prelude.rnf autoStopConfiguration
+      `Prelude.seq` Prelude.rnf imageConfiguration
+      `Prelude.seq` Prelude.rnf initialCapacity
+      `Prelude.seq` Prelude.rnf maximumCapacity
+      `Prelude.seq` Prelude.rnf networkConfiguration
+      `Prelude.seq` Prelude.rnf workerTypeSpecifications
+      `Prelude.seq` Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf clientToken
+
+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
+          [ ("architecture" Data..=) Prelude.<$> architecture,
+            ("autoStartConfiguration" Data..=)
+              Prelude.<$> autoStartConfiguration,
+            ("autoStopConfiguration" Data..=)
+              Prelude.<$> autoStopConfiguration,
+            ("imageConfiguration" Data..=)
+              Prelude.<$> imageConfiguration,
+            ("initialCapacity" Data..=)
+              Prelude.<$> initialCapacity,
+            ("maximumCapacity" Data..=)
+              Prelude.<$> maximumCapacity,
+            ("networkConfiguration" Data..=)
+              Prelude.<$> networkConfiguration,
+            ("workerTypeSpecifications" Data..=)
+              Prelude.<$> workerTypeSpecifications,
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+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,
+    -- | Information about the updated application.
+    application :: Application
+  }
+  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.
+--
+-- 'application', 'updateApplicationResponse_application' - Information about the updated application.
+newUpdateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'application'
+  Application ->
+  UpdateApplicationResponse
+newUpdateApplicationResponse
+  pHttpStatus_
+  pApplication_ =
+    UpdateApplicationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        application = pApplication_
+      }
+
+-- | 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)
+
+-- | Information about the updated application.
+updateApplicationResponse_application :: Lens.Lens' UpdateApplicationResponse Application
+updateApplicationResponse_application = Lens.lens (\UpdateApplicationResponse' {application} -> application) (\s@UpdateApplicationResponse' {} a -> s {application = a} :: UpdateApplicationResponse)
+
+instance Prelude.NFData UpdateApplicationResponse where
+  rnf UpdateApplicationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf application
diff --git a/gen/Amazonka/EMRServerless/Waiters.hs b/gen/Amazonka/EMRServerless/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EMRServerless/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.EMRServerless.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.EMRServerless.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EMRServerless.Lens
+import Amazonka.EMRServerless.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.EMRServerless
+import Test.Amazonka.EMRServerless.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "EMRServerless"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/EMRServerless.hs b/test/Test/Amazonka/EMRServerless.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/EMRServerless.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.EMRServerless
+-- Copyright   : (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.EMRServerless
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/EMRServerless/Internal.hs b/test/Test/Amazonka/EMRServerless/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/EMRServerless/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.EMRServerless.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.EMRServerless.Internal where
diff --git a/test/Test/Amazonka/Gen/EMRServerless.hs b/test/Test/Amazonka/Gen/EMRServerless.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/EMRServerless.hs
@@ -0,0 +1,338 @@
+{-# 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.EMRServerless
+-- Copyright   : (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.EMRServerless where
+
+import Amazonka.EMRServerless
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.EMRServerless.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCancelJobRun $
+--             newCancelJobRun
+--
+--         , requestCreateApplication $
+--             newCreateApplication
+--
+--         , requestDeleteApplication $
+--             newDeleteApplication
+--
+--         , requestGetApplication $
+--             newGetApplication
+--
+--         , requestGetDashboardForJobRun $
+--             newGetDashboardForJobRun
+--
+--         , requestGetJobRun $
+--             newGetJobRun
+--
+--         , requestListApplications $
+--             newListApplications
+--
+--         , requestListJobRuns $
+--             newListJobRuns
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartApplication $
+--             newStartApplication
+--
+--         , requestStartJobRun $
+--             newStartJobRun
+--
+--         , requestStopApplication $
+--             newStopApplication
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApplication $
+--             newUpdateApplication
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelJobRun $
+--             newCancelJobRunResponse
+--
+--         , responseCreateApplication $
+--             newCreateApplicationResponse
+--
+--         , responseDeleteApplication $
+--             newDeleteApplicationResponse
+--
+--         , responseGetApplication $
+--             newGetApplicationResponse
+--
+--         , responseGetDashboardForJobRun $
+--             newGetDashboardForJobRunResponse
+--
+--         , responseGetJobRun $
+--             newGetJobRunResponse
+--
+--         , responseListApplications $
+--             newListApplicationsResponse
+--
+--         , responseListJobRuns $
+--             newListJobRunsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartApplication $
+--             newStartApplicationResponse
+--
+--         , responseStartJobRun $
+--             newStartJobRunResponse
+--
+--         , responseStopApplication $
+--             newStopApplicationResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApplication $
+--             newUpdateApplicationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelJobRun :: CancelJobRun -> TestTree
+requestCancelJobRun =
+  req
+    "CancelJobRun"
+    "fixture/CancelJobRun.yaml"
+
+requestCreateApplication :: CreateApplication -> TestTree
+requestCreateApplication =
+  req
+    "CreateApplication"
+    "fixture/CreateApplication.yaml"
+
+requestDeleteApplication :: DeleteApplication -> TestTree
+requestDeleteApplication =
+  req
+    "DeleteApplication"
+    "fixture/DeleteApplication.yaml"
+
+requestGetApplication :: GetApplication -> TestTree
+requestGetApplication =
+  req
+    "GetApplication"
+    "fixture/GetApplication.yaml"
+
+requestGetDashboardForJobRun :: GetDashboardForJobRun -> TestTree
+requestGetDashboardForJobRun =
+  req
+    "GetDashboardForJobRun"
+    "fixture/GetDashboardForJobRun.yaml"
+
+requestGetJobRun :: GetJobRun -> TestTree
+requestGetJobRun =
+  req
+    "GetJobRun"
+    "fixture/GetJobRun.yaml"
+
+requestListApplications :: ListApplications -> TestTree
+requestListApplications =
+  req
+    "ListApplications"
+    "fixture/ListApplications.yaml"
+
+requestListJobRuns :: ListJobRuns -> TestTree
+requestListJobRuns =
+  req
+    "ListJobRuns"
+    "fixture/ListJobRuns.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartApplication :: StartApplication -> TestTree
+requestStartApplication =
+  req
+    "StartApplication"
+    "fixture/StartApplication.yaml"
+
+requestStartJobRun :: StartJobRun -> TestTree
+requestStartJobRun =
+  req
+    "StartJobRun"
+    "fixture/StartJobRun.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"
+
+-- Responses
+
+responseCancelJobRun :: CancelJobRunResponse -> TestTree
+responseCancelJobRun =
+  res
+    "CancelJobRunResponse"
+    "fixture/CancelJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelJobRun)
+
+responseCreateApplication :: CreateApplicationResponse -> TestTree
+responseCreateApplication =
+  res
+    "CreateApplicationResponse"
+    "fixture/CreateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApplication)
+
+responseDeleteApplication :: DeleteApplicationResponse -> TestTree
+responseDeleteApplication =
+  res
+    "DeleteApplicationResponse"
+    "fixture/DeleteApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplication)
+
+responseGetApplication :: GetApplicationResponse -> TestTree
+responseGetApplication =
+  res
+    "GetApplicationResponse"
+    "fixture/GetApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApplication)
+
+responseGetDashboardForJobRun :: GetDashboardForJobRunResponse -> TestTree
+responseGetDashboardForJobRun =
+  res
+    "GetDashboardForJobRunResponse"
+    "fixture/GetDashboardForJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDashboardForJobRun)
+
+responseGetJobRun :: GetJobRunResponse -> TestTree
+responseGetJobRun =
+  res
+    "GetJobRunResponse"
+    "fixture/GetJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetJobRun)
+
+responseListApplications :: ListApplicationsResponse -> TestTree
+responseListApplications =
+  res
+    "ListApplicationsResponse"
+    "fixture/ListApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApplications)
+
+responseListJobRuns :: ListJobRunsResponse -> TestTree
+responseListJobRuns =
+  res
+    "ListJobRunsResponse"
+    "fixture/ListJobRunsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListJobRuns)
+
+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)
+
+responseStartJobRun :: StartJobRunResponse -> TestTree
+responseStartJobRun =
+  res
+    "StartJobRunResponse"
+    "fixture/StartJobRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartJobRun)
+
+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)
