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 NimbleStudio SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-08-01@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-nimble)
+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.Nimble](http://hackage.haskell.org/package/amazonka-nimble/docs/Amazonka-Nimble.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-nimble` 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-nimble.cabal b/amazonka-nimble.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-nimble.cabal
@@ -0,0 +1,196 @@
+cabal-version:      2.2
+name:               amazonka-nimble
+version:            2.0
+synopsis:           Amazon NimbleStudio SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-08-01@ 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.Nimble.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.Nimble" 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-nimble
+
+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.Nimble
+    Amazonka.Nimble.AcceptEulas
+    Amazonka.Nimble.CreateLaunchProfile
+    Amazonka.Nimble.CreateStreamingImage
+    Amazonka.Nimble.CreateStreamingSession
+    Amazonka.Nimble.CreateStreamingSessionStream
+    Amazonka.Nimble.CreateStudio
+    Amazonka.Nimble.CreateStudioComponent
+    Amazonka.Nimble.DeleteLaunchProfile
+    Amazonka.Nimble.DeleteLaunchProfileMember
+    Amazonka.Nimble.DeleteStreamingImage
+    Amazonka.Nimble.DeleteStreamingSession
+    Amazonka.Nimble.DeleteStudio
+    Amazonka.Nimble.DeleteStudioComponent
+    Amazonka.Nimble.DeleteStudioMember
+    Amazonka.Nimble.GetEula
+    Amazonka.Nimble.GetLaunchProfile
+    Amazonka.Nimble.GetLaunchProfileDetails
+    Amazonka.Nimble.GetLaunchProfileInitialization
+    Amazonka.Nimble.GetLaunchProfileMember
+    Amazonka.Nimble.GetStreamingImage
+    Amazonka.Nimble.GetStreamingSession
+    Amazonka.Nimble.GetStreamingSessionBackup
+    Amazonka.Nimble.GetStreamingSessionStream
+    Amazonka.Nimble.GetStudio
+    Amazonka.Nimble.GetStudioComponent
+    Amazonka.Nimble.GetStudioMember
+    Amazonka.Nimble.Lens
+    Amazonka.Nimble.ListEulaAcceptances
+    Amazonka.Nimble.ListEulas
+    Amazonka.Nimble.ListLaunchProfileMembers
+    Amazonka.Nimble.ListLaunchProfiles
+    Amazonka.Nimble.ListStreamingImages
+    Amazonka.Nimble.ListStreamingSessionBackups
+    Amazonka.Nimble.ListStreamingSessions
+    Amazonka.Nimble.ListStudioComponents
+    Amazonka.Nimble.ListStudioMembers
+    Amazonka.Nimble.ListStudios
+    Amazonka.Nimble.ListTagsForResource
+    Amazonka.Nimble.PutLaunchProfileMembers
+    Amazonka.Nimble.PutStudioMembers
+    Amazonka.Nimble.StartStreamingSession
+    Amazonka.Nimble.StartStudioSSOConfigurationRepair
+    Amazonka.Nimble.StopStreamingSession
+    Amazonka.Nimble.TagResource
+    Amazonka.Nimble.Types
+    Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute
+    Amazonka.Nimble.Types.ActiveDirectoryConfiguration
+    Amazonka.Nimble.Types.AutomaticTerminationMode
+    Amazonka.Nimble.Types.ComputeFarmConfiguration
+    Amazonka.Nimble.Types.Eula
+    Amazonka.Nimble.Types.EulaAcceptance
+    Amazonka.Nimble.Types.LaunchProfile
+    Amazonka.Nimble.Types.LaunchProfileInitialization
+    Amazonka.Nimble.Types.LaunchProfileInitializationActiveDirectory
+    Amazonka.Nimble.Types.LaunchProfileInitializationScript
+    Amazonka.Nimble.Types.LaunchProfileMembership
+    Amazonka.Nimble.Types.LaunchProfilePersona
+    Amazonka.Nimble.Types.LaunchProfilePlatform
+    Amazonka.Nimble.Types.LaunchProfileState
+    Amazonka.Nimble.Types.LaunchProfileStatusCode
+    Amazonka.Nimble.Types.LaunchProfileValidationState
+    Amazonka.Nimble.Types.LaunchProfileValidationStatusCode
+    Amazonka.Nimble.Types.LaunchProfileValidationType
+    Amazonka.Nimble.Types.LicenseServiceConfiguration
+    Amazonka.Nimble.Types.NewLaunchProfileMember
+    Amazonka.Nimble.Types.NewStudioMember
+    Amazonka.Nimble.Types.ScriptParameterKeyValue
+    Amazonka.Nimble.Types.SessionBackupMode
+    Amazonka.Nimble.Types.SessionPersistenceMode
+    Amazonka.Nimble.Types.SharedFileSystemConfiguration
+    Amazonka.Nimble.Types.StreamConfiguration
+    Amazonka.Nimble.Types.StreamConfigurationCreate
+    Amazonka.Nimble.Types.StreamConfigurationSessionBackup
+    Amazonka.Nimble.Types.StreamConfigurationSessionStorage
+    Amazonka.Nimble.Types.StreamingClipboardMode
+    Amazonka.Nimble.Types.StreamingImage
+    Amazonka.Nimble.Types.StreamingImageEncryptionConfiguration
+    Amazonka.Nimble.Types.StreamingImageEncryptionConfigurationKeyType
+    Amazonka.Nimble.Types.StreamingImageState
+    Amazonka.Nimble.Types.StreamingImageStatusCode
+    Amazonka.Nimble.Types.StreamingInstanceType
+    Amazonka.Nimble.Types.StreamingSession
+    Amazonka.Nimble.Types.StreamingSessionBackup
+    Amazonka.Nimble.Types.StreamingSessionState
+    Amazonka.Nimble.Types.StreamingSessionStatusCode
+    Amazonka.Nimble.Types.StreamingSessionStorageMode
+    Amazonka.Nimble.Types.StreamingSessionStorageRoot
+    Amazonka.Nimble.Types.StreamingSessionStream
+    Amazonka.Nimble.Types.StreamingSessionStreamState
+    Amazonka.Nimble.Types.StreamingSessionStreamStatusCode
+    Amazonka.Nimble.Types.Studio
+    Amazonka.Nimble.Types.StudioComponent
+    Amazonka.Nimble.Types.StudioComponentConfiguration
+    Amazonka.Nimble.Types.StudioComponentInitializationScript
+    Amazonka.Nimble.Types.StudioComponentInitializationScriptRunContext
+    Amazonka.Nimble.Types.StudioComponentState
+    Amazonka.Nimble.Types.StudioComponentStatusCode
+    Amazonka.Nimble.Types.StudioComponentSubtype
+    Amazonka.Nimble.Types.StudioComponentSummary
+    Amazonka.Nimble.Types.StudioComponentType
+    Amazonka.Nimble.Types.StudioEncryptionConfiguration
+    Amazonka.Nimble.Types.StudioEncryptionConfigurationKeyType
+    Amazonka.Nimble.Types.StudioMembership
+    Amazonka.Nimble.Types.StudioPersona
+    Amazonka.Nimble.Types.StudioState
+    Amazonka.Nimble.Types.StudioStatusCode
+    Amazonka.Nimble.Types.ValidationResult
+    Amazonka.Nimble.Types.VolumeConfiguration
+    Amazonka.Nimble.Types.VolumeRetentionMode
+    Amazonka.Nimble.UntagResource
+    Amazonka.Nimble.UpdateLaunchProfile
+    Amazonka.Nimble.UpdateLaunchProfileMember
+    Amazonka.Nimble.UpdateStreamingImage
+    Amazonka.Nimble.UpdateStudio
+    Amazonka.Nimble.UpdateStudioComponent
+    Amazonka.Nimble.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-nimble-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.Nimble
+    Test.Amazonka.Nimble
+    Test.Amazonka.Nimble.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-nimble
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AcceptEulas.yaml b/fixture/AcceptEulas.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptEulas.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/AcceptEulasResponse.proto b/fixture/AcceptEulasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptEulasResponse.proto
diff --git a/fixture/CreateLaunchProfile.yaml b/fixture/CreateLaunchProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/CreateLaunchProfileResponse.proto b/fixture/CreateLaunchProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchProfileResponse.proto
diff --git a/fixture/CreateStreamingImage.yaml b/fixture/CreateStreamingImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStreamingImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/CreateStreamingImageResponse.proto b/fixture/CreateStreamingImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStreamingImageResponse.proto
diff --git a/fixture/CreateStreamingSession.yaml b/fixture/CreateStreamingSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStreamingSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/CreateStreamingSessionResponse.proto b/fixture/CreateStreamingSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStreamingSessionResponse.proto
diff --git a/fixture/CreateStreamingSessionStream.yaml b/fixture/CreateStreamingSessionStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStreamingSessionStream.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/CreateStreamingSessionStreamResponse.proto b/fixture/CreateStreamingSessionStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStreamingSessionStreamResponse.proto
diff --git a/fixture/CreateStudio.yaml b/fixture/CreateStudio.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStudio.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/CreateStudioComponent.yaml b/fixture/CreateStudioComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStudioComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/CreateStudioComponentResponse.proto b/fixture/CreateStudioComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStudioComponentResponse.proto
diff --git a/fixture/CreateStudioResponse.proto b/fixture/CreateStudioResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStudioResponse.proto
diff --git a/fixture/DeleteLaunchProfile.yaml b/fixture/DeleteLaunchProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteLaunchProfileMember.yaml b/fixture/DeleteLaunchProfileMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchProfileMember.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteLaunchProfileMemberResponse.proto b/fixture/DeleteLaunchProfileMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchProfileMemberResponse.proto
diff --git a/fixture/DeleteLaunchProfileResponse.proto b/fixture/DeleteLaunchProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchProfileResponse.proto
diff --git a/fixture/DeleteStreamingImage.yaml b/fixture/DeleteStreamingImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStreamingImage.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteStreamingImageResponse.proto b/fixture/DeleteStreamingImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStreamingImageResponse.proto
diff --git a/fixture/DeleteStreamingSession.yaml b/fixture/DeleteStreamingSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStreamingSession.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteStreamingSessionResponse.proto b/fixture/DeleteStreamingSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStreamingSessionResponse.proto
diff --git a/fixture/DeleteStudio.yaml b/fixture/DeleteStudio.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStudio.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteStudioComponent.yaml b/fixture/DeleteStudioComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStudioComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteStudioComponentResponse.proto b/fixture/DeleteStudioComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStudioComponentResponse.proto
diff --git a/fixture/DeleteStudioMember.yaml b/fixture/DeleteStudioMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStudioMember.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/DeleteStudioMemberResponse.proto b/fixture/DeleteStudioMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStudioMemberResponse.proto
diff --git a/fixture/DeleteStudioResponse.proto b/fixture/DeleteStudioResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStudioResponse.proto
diff --git a/fixture/GetEula.yaml b/fixture/GetEula.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEula.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetEulaResponse.proto b/fixture/GetEulaResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEulaResponse.proto
diff --git a/fixture/GetLaunchProfile.yaml b/fixture/GetLaunchProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetLaunchProfileDetails.yaml b/fixture/GetLaunchProfileDetails.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileDetails.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetLaunchProfileDetailsResponse.proto b/fixture/GetLaunchProfileDetailsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileDetailsResponse.proto
diff --git a/fixture/GetLaunchProfileInitialization.yaml b/fixture/GetLaunchProfileInitialization.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileInitialization.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetLaunchProfileInitializationResponse.proto b/fixture/GetLaunchProfileInitializationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileInitializationResponse.proto
diff --git a/fixture/GetLaunchProfileMember.yaml b/fixture/GetLaunchProfileMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileMember.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetLaunchProfileMemberResponse.proto b/fixture/GetLaunchProfileMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileMemberResponse.proto
diff --git a/fixture/GetLaunchProfileResponse.proto b/fixture/GetLaunchProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchProfileResponse.proto
diff --git a/fixture/GetStreamingImage.yaml b/fixture/GetStreamingImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingImage.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStreamingImageResponse.proto b/fixture/GetStreamingImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingImageResponse.proto
diff --git a/fixture/GetStreamingSession.yaml b/fixture/GetStreamingSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingSession.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStreamingSessionBackup.yaml b/fixture/GetStreamingSessionBackup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingSessionBackup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStreamingSessionBackupResponse.proto b/fixture/GetStreamingSessionBackupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingSessionBackupResponse.proto
diff --git a/fixture/GetStreamingSessionResponse.proto b/fixture/GetStreamingSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingSessionResponse.proto
diff --git a/fixture/GetStreamingSessionStream.yaml b/fixture/GetStreamingSessionStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingSessionStream.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStreamingSessionStreamResponse.proto b/fixture/GetStreamingSessionStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStreamingSessionStreamResponse.proto
diff --git a/fixture/GetStudio.yaml b/fixture/GetStudio.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStudio.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStudioComponent.yaml b/fixture/GetStudioComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStudioComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStudioComponentResponse.proto b/fixture/GetStudioComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStudioComponentResponse.proto
diff --git a/fixture/GetStudioMember.yaml b/fixture/GetStudioMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStudioMember.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/GetStudioMemberResponse.proto b/fixture/GetStudioMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStudioMemberResponse.proto
diff --git a/fixture/GetStudioResponse.proto b/fixture/GetStudioResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStudioResponse.proto
diff --git a/fixture/ListEulaAcceptances.yaml b/fixture/ListEulaAcceptances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEulaAcceptances.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListEulaAcceptancesResponse.proto b/fixture/ListEulaAcceptancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEulaAcceptancesResponse.proto
diff --git a/fixture/ListEulas.yaml b/fixture/ListEulas.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEulas.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListEulasResponse.proto b/fixture/ListEulasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEulasResponse.proto
diff --git a/fixture/ListLaunchProfileMembers.yaml b/fixture/ListLaunchProfileMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListLaunchProfileMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListLaunchProfileMembersResponse.proto b/fixture/ListLaunchProfileMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListLaunchProfileMembersResponse.proto
diff --git a/fixture/ListLaunchProfiles.yaml b/fixture/ListLaunchProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListLaunchProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListLaunchProfilesResponse.proto b/fixture/ListLaunchProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListLaunchProfilesResponse.proto
diff --git a/fixture/ListStreamingImages.yaml b/fixture/ListStreamingImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStreamingImages.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListStreamingImagesResponse.proto b/fixture/ListStreamingImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStreamingImagesResponse.proto
diff --git a/fixture/ListStreamingSessionBackups.yaml b/fixture/ListStreamingSessionBackups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStreamingSessionBackups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListStreamingSessionBackupsResponse.proto b/fixture/ListStreamingSessionBackupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStreamingSessionBackupsResponse.proto
diff --git a/fixture/ListStreamingSessions.yaml b/fixture/ListStreamingSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStreamingSessions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListStreamingSessionsResponse.proto b/fixture/ListStreamingSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStreamingSessionsResponse.proto
diff --git a/fixture/ListStudioComponents.yaml b/fixture/ListStudioComponents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStudioComponents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListStudioComponentsResponse.proto b/fixture/ListStudioComponentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStudioComponentsResponse.proto
diff --git a/fixture/ListStudioMembers.yaml b/fixture/ListStudioMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStudioMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListStudioMembersResponse.proto b/fixture/ListStudioMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStudioMembersResponse.proto
diff --git a/fixture/ListStudios.yaml b/fixture/ListStudios.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStudios.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/ListStudiosResponse.proto b/fixture/ListStudiosResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStudiosResponse.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/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/PutLaunchProfileMembers.yaml b/fixture/PutLaunchProfileMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutLaunchProfileMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/PutLaunchProfileMembersResponse.proto b/fixture/PutLaunchProfileMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutLaunchProfileMembersResponse.proto
diff --git a/fixture/PutStudioMembers.yaml b/fixture/PutStudioMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutStudioMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/PutStudioMembersResponse.proto b/fixture/PutStudioMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutStudioMembersResponse.proto
diff --git a/fixture/StartStreamingSession.yaml b/fixture/StartStreamingSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartStreamingSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/StartStreamingSessionResponse.proto b/fixture/StartStreamingSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartStreamingSessionResponse.proto
diff --git a/fixture/StartStudioSSOConfigurationRepair.yaml b/fixture/StartStudioSSOConfigurationRepair.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartStudioSSOConfigurationRepair.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/StartStudioSSOConfigurationRepairResponse.proto b/fixture/StartStudioSSOConfigurationRepairResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartStudioSSOConfigurationRepairResponse.proto
diff --git a/fixture/StopStreamingSession.yaml b/fixture/StopStreamingSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopStreamingSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/StopStreamingSessionResponse.proto b/fixture/StopStreamingSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopStreamingSessionResponse.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/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/UpdateLaunchProfile.yaml b/fixture/UpdateLaunchProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/UpdateLaunchProfileMember.yaml b/fixture/UpdateLaunchProfileMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchProfileMember.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/UpdateLaunchProfileMemberResponse.proto b/fixture/UpdateLaunchProfileMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchProfileMemberResponse.proto
diff --git a/fixture/UpdateLaunchProfileResponse.proto b/fixture/UpdateLaunchProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLaunchProfileResponse.proto
diff --git a/fixture/UpdateStreamingImage.yaml b/fixture/UpdateStreamingImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStreamingImage.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/UpdateStreamingImageResponse.proto b/fixture/UpdateStreamingImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStreamingImageResponse.proto
diff --git a/fixture/UpdateStudio.yaml b/fixture/UpdateStudio.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStudio.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/UpdateStudioComponent.yaml b/fixture/UpdateStudioComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStudioComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/nimble/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  nimble.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/UpdateStudioComponentResponse.proto b/fixture/UpdateStudioComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStudioComponentResponse.proto
diff --git a/fixture/UpdateStudioResponse.proto b/fixture/UpdateStudioResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStudioResponse.proto
diff --git a/gen/Amazonka/Nimble.hs b/gen/Amazonka/Nimble.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble.hs
@@ -0,0 +1,692 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Nimble
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-08-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Nimble Studio empowers creative studios to produce visual
+-- effects, animation, and interactive content entirely in the cloud, from
+-- storyboard sketch to final deliverable. Rapidly onboard and collaborate
+-- with artists globally and create content faster with access to virtual
+-- workstations, high-speed storage, and scalable rendering across AWS’s
+-- global infrastructure.
+module Amazonka.Nimble
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerErrorException
+    _InternalServerErrorException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** LaunchProfileDeleted
+    newLaunchProfileDeleted,
+
+    -- ** LaunchProfileReady
+    newLaunchProfileReady,
+
+    -- ** StreamingImageDeleted
+    newStreamingImageDeleted,
+
+    -- ** StreamingImageReady
+    newStreamingImageReady,
+
+    -- ** StreamingSessionDeleted
+    newStreamingSessionDeleted,
+
+    -- ** StreamingSessionReady
+    newStreamingSessionReady,
+
+    -- ** StreamingSessionStopped
+    newStreamingSessionStopped,
+
+    -- ** StreamingSessionStreamReady
+    newStreamingSessionStreamReady,
+
+    -- ** StudioComponentDeleted
+    newStudioComponentDeleted,
+
+    -- ** StudioComponentReady
+    newStudioComponentReady,
+
+    -- ** StudioDeleted
+    newStudioDeleted,
+
+    -- ** StudioReady
+    newStudioReady,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AcceptEulas
+    AcceptEulas (AcceptEulas'),
+    newAcceptEulas,
+    AcceptEulasResponse (AcceptEulasResponse'),
+    newAcceptEulasResponse,
+
+    -- ** CreateLaunchProfile
+    CreateLaunchProfile (CreateLaunchProfile'),
+    newCreateLaunchProfile,
+    CreateLaunchProfileResponse (CreateLaunchProfileResponse'),
+    newCreateLaunchProfileResponse,
+
+    -- ** CreateStreamingImage
+    CreateStreamingImage (CreateStreamingImage'),
+    newCreateStreamingImage,
+    CreateStreamingImageResponse (CreateStreamingImageResponse'),
+    newCreateStreamingImageResponse,
+
+    -- ** CreateStreamingSession
+    CreateStreamingSession (CreateStreamingSession'),
+    newCreateStreamingSession,
+    CreateStreamingSessionResponse (CreateStreamingSessionResponse'),
+    newCreateStreamingSessionResponse,
+
+    -- ** CreateStreamingSessionStream
+    CreateStreamingSessionStream (CreateStreamingSessionStream'),
+    newCreateStreamingSessionStream,
+    CreateStreamingSessionStreamResponse (CreateStreamingSessionStreamResponse'),
+    newCreateStreamingSessionStreamResponse,
+
+    -- ** CreateStudio
+    CreateStudio (CreateStudio'),
+    newCreateStudio,
+    CreateStudioResponse (CreateStudioResponse'),
+    newCreateStudioResponse,
+
+    -- ** CreateStudioComponent
+    CreateStudioComponent (CreateStudioComponent'),
+    newCreateStudioComponent,
+    CreateStudioComponentResponse (CreateStudioComponentResponse'),
+    newCreateStudioComponentResponse,
+
+    -- ** DeleteLaunchProfile
+    DeleteLaunchProfile (DeleteLaunchProfile'),
+    newDeleteLaunchProfile,
+    DeleteLaunchProfileResponse (DeleteLaunchProfileResponse'),
+    newDeleteLaunchProfileResponse,
+
+    -- ** DeleteLaunchProfileMember
+    DeleteLaunchProfileMember (DeleteLaunchProfileMember'),
+    newDeleteLaunchProfileMember,
+    DeleteLaunchProfileMemberResponse (DeleteLaunchProfileMemberResponse'),
+    newDeleteLaunchProfileMemberResponse,
+
+    -- ** DeleteStreamingImage
+    DeleteStreamingImage (DeleteStreamingImage'),
+    newDeleteStreamingImage,
+    DeleteStreamingImageResponse (DeleteStreamingImageResponse'),
+    newDeleteStreamingImageResponse,
+
+    -- ** DeleteStreamingSession
+    DeleteStreamingSession (DeleteStreamingSession'),
+    newDeleteStreamingSession,
+    DeleteStreamingSessionResponse (DeleteStreamingSessionResponse'),
+    newDeleteStreamingSessionResponse,
+
+    -- ** DeleteStudio
+    DeleteStudio (DeleteStudio'),
+    newDeleteStudio,
+    DeleteStudioResponse (DeleteStudioResponse'),
+    newDeleteStudioResponse,
+
+    -- ** DeleteStudioComponent
+    DeleteStudioComponent (DeleteStudioComponent'),
+    newDeleteStudioComponent,
+    DeleteStudioComponentResponse (DeleteStudioComponentResponse'),
+    newDeleteStudioComponentResponse,
+
+    -- ** DeleteStudioMember
+    DeleteStudioMember (DeleteStudioMember'),
+    newDeleteStudioMember,
+    DeleteStudioMemberResponse (DeleteStudioMemberResponse'),
+    newDeleteStudioMemberResponse,
+
+    -- ** GetEula
+    GetEula (GetEula'),
+    newGetEula,
+    GetEulaResponse (GetEulaResponse'),
+    newGetEulaResponse,
+
+    -- ** GetLaunchProfile
+    GetLaunchProfile (GetLaunchProfile'),
+    newGetLaunchProfile,
+    GetLaunchProfileResponse (GetLaunchProfileResponse'),
+    newGetLaunchProfileResponse,
+
+    -- ** GetLaunchProfileDetails
+    GetLaunchProfileDetails (GetLaunchProfileDetails'),
+    newGetLaunchProfileDetails,
+    GetLaunchProfileDetailsResponse (GetLaunchProfileDetailsResponse'),
+    newGetLaunchProfileDetailsResponse,
+
+    -- ** GetLaunchProfileInitialization
+    GetLaunchProfileInitialization (GetLaunchProfileInitialization'),
+    newGetLaunchProfileInitialization,
+    GetLaunchProfileInitializationResponse (GetLaunchProfileInitializationResponse'),
+    newGetLaunchProfileInitializationResponse,
+
+    -- ** GetLaunchProfileMember
+    GetLaunchProfileMember (GetLaunchProfileMember'),
+    newGetLaunchProfileMember,
+    GetLaunchProfileMemberResponse (GetLaunchProfileMemberResponse'),
+    newGetLaunchProfileMemberResponse,
+
+    -- ** GetStreamingImage
+    GetStreamingImage (GetStreamingImage'),
+    newGetStreamingImage,
+    GetStreamingImageResponse (GetStreamingImageResponse'),
+    newGetStreamingImageResponse,
+
+    -- ** GetStreamingSession
+    GetStreamingSession (GetStreamingSession'),
+    newGetStreamingSession,
+    GetStreamingSessionResponse (GetStreamingSessionResponse'),
+    newGetStreamingSessionResponse,
+
+    -- ** GetStreamingSessionBackup
+    GetStreamingSessionBackup (GetStreamingSessionBackup'),
+    newGetStreamingSessionBackup,
+    GetStreamingSessionBackupResponse (GetStreamingSessionBackupResponse'),
+    newGetStreamingSessionBackupResponse,
+
+    -- ** GetStreamingSessionStream
+    GetStreamingSessionStream (GetStreamingSessionStream'),
+    newGetStreamingSessionStream,
+    GetStreamingSessionStreamResponse (GetStreamingSessionStreamResponse'),
+    newGetStreamingSessionStreamResponse,
+
+    -- ** GetStudio
+    GetStudio (GetStudio'),
+    newGetStudio,
+    GetStudioResponse (GetStudioResponse'),
+    newGetStudioResponse,
+
+    -- ** GetStudioComponent
+    GetStudioComponent (GetStudioComponent'),
+    newGetStudioComponent,
+    GetStudioComponentResponse (GetStudioComponentResponse'),
+    newGetStudioComponentResponse,
+
+    -- ** GetStudioMember
+    GetStudioMember (GetStudioMember'),
+    newGetStudioMember,
+    GetStudioMemberResponse (GetStudioMemberResponse'),
+    newGetStudioMemberResponse,
+
+    -- ** ListEulaAcceptances (Paginated)
+    ListEulaAcceptances (ListEulaAcceptances'),
+    newListEulaAcceptances,
+    ListEulaAcceptancesResponse (ListEulaAcceptancesResponse'),
+    newListEulaAcceptancesResponse,
+
+    -- ** ListEulas (Paginated)
+    ListEulas (ListEulas'),
+    newListEulas,
+    ListEulasResponse (ListEulasResponse'),
+    newListEulasResponse,
+
+    -- ** ListLaunchProfileMembers (Paginated)
+    ListLaunchProfileMembers (ListLaunchProfileMembers'),
+    newListLaunchProfileMembers,
+    ListLaunchProfileMembersResponse (ListLaunchProfileMembersResponse'),
+    newListLaunchProfileMembersResponse,
+
+    -- ** ListLaunchProfiles (Paginated)
+    ListLaunchProfiles (ListLaunchProfiles'),
+    newListLaunchProfiles,
+    ListLaunchProfilesResponse (ListLaunchProfilesResponse'),
+    newListLaunchProfilesResponse,
+
+    -- ** ListStreamingImages (Paginated)
+    ListStreamingImages (ListStreamingImages'),
+    newListStreamingImages,
+    ListStreamingImagesResponse (ListStreamingImagesResponse'),
+    newListStreamingImagesResponse,
+
+    -- ** ListStreamingSessionBackups (Paginated)
+    ListStreamingSessionBackups (ListStreamingSessionBackups'),
+    newListStreamingSessionBackups,
+    ListStreamingSessionBackupsResponse (ListStreamingSessionBackupsResponse'),
+    newListStreamingSessionBackupsResponse,
+
+    -- ** ListStreamingSessions (Paginated)
+    ListStreamingSessions (ListStreamingSessions'),
+    newListStreamingSessions,
+    ListStreamingSessionsResponse (ListStreamingSessionsResponse'),
+    newListStreamingSessionsResponse,
+
+    -- ** ListStudioComponents (Paginated)
+    ListStudioComponents (ListStudioComponents'),
+    newListStudioComponents,
+    ListStudioComponentsResponse (ListStudioComponentsResponse'),
+    newListStudioComponentsResponse,
+
+    -- ** ListStudioMembers (Paginated)
+    ListStudioMembers (ListStudioMembers'),
+    newListStudioMembers,
+    ListStudioMembersResponse (ListStudioMembersResponse'),
+    newListStudioMembersResponse,
+
+    -- ** ListStudios (Paginated)
+    ListStudios (ListStudios'),
+    newListStudios,
+    ListStudiosResponse (ListStudiosResponse'),
+    newListStudiosResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutLaunchProfileMembers
+    PutLaunchProfileMembers (PutLaunchProfileMembers'),
+    newPutLaunchProfileMembers,
+    PutLaunchProfileMembersResponse (PutLaunchProfileMembersResponse'),
+    newPutLaunchProfileMembersResponse,
+
+    -- ** PutStudioMembers
+    PutStudioMembers (PutStudioMembers'),
+    newPutStudioMembers,
+    PutStudioMembersResponse (PutStudioMembersResponse'),
+    newPutStudioMembersResponse,
+
+    -- ** StartStreamingSession
+    StartStreamingSession (StartStreamingSession'),
+    newStartStreamingSession,
+    StartStreamingSessionResponse (StartStreamingSessionResponse'),
+    newStartStreamingSessionResponse,
+
+    -- ** StartStudioSSOConfigurationRepair
+    StartStudioSSOConfigurationRepair (StartStudioSSOConfigurationRepair'),
+    newStartStudioSSOConfigurationRepair,
+    StartStudioSSOConfigurationRepairResponse (StartStudioSSOConfigurationRepairResponse'),
+    newStartStudioSSOConfigurationRepairResponse,
+
+    -- ** StopStreamingSession
+    StopStreamingSession (StopStreamingSession'),
+    newStopStreamingSession,
+    StopStreamingSessionResponse (StopStreamingSessionResponse'),
+    newStopStreamingSessionResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateLaunchProfile
+    UpdateLaunchProfile (UpdateLaunchProfile'),
+    newUpdateLaunchProfile,
+    UpdateLaunchProfileResponse (UpdateLaunchProfileResponse'),
+    newUpdateLaunchProfileResponse,
+
+    -- ** UpdateLaunchProfileMember
+    UpdateLaunchProfileMember (UpdateLaunchProfileMember'),
+    newUpdateLaunchProfileMember,
+    UpdateLaunchProfileMemberResponse (UpdateLaunchProfileMemberResponse'),
+    newUpdateLaunchProfileMemberResponse,
+
+    -- ** UpdateStreamingImage
+    UpdateStreamingImage (UpdateStreamingImage'),
+    newUpdateStreamingImage,
+    UpdateStreamingImageResponse (UpdateStreamingImageResponse'),
+    newUpdateStreamingImageResponse,
+
+    -- ** UpdateStudio
+    UpdateStudio (UpdateStudio'),
+    newUpdateStudio,
+    UpdateStudioResponse (UpdateStudioResponse'),
+    newUpdateStudioResponse,
+
+    -- ** UpdateStudioComponent
+    UpdateStudioComponent (UpdateStudioComponent'),
+    newUpdateStudioComponent,
+    UpdateStudioComponentResponse (UpdateStudioComponentResponse'),
+    newUpdateStudioComponentResponse,
+
+    -- * Types
+
+    -- ** AutomaticTerminationMode
+    AutomaticTerminationMode (..),
+
+    -- ** LaunchProfilePersona
+    LaunchProfilePersona (..),
+
+    -- ** LaunchProfilePlatform
+    LaunchProfilePlatform (..),
+
+    -- ** LaunchProfileState
+    LaunchProfileState (..),
+
+    -- ** LaunchProfileStatusCode
+    LaunchProfileStatusCode (..),
+
+    -- ** LaunchProfileValidationState
+    LaunchProfileValidationState (..),
+
+    -- ** LaunchProfileValidationStatusCode
+    LaunchProfileValidationStatusCode (..),
+
+    -- ** LaunchProfileValidationType
+    LaunchProfileValidationType (..),
+
+    -- ** SessionBackupMode
+    SessionBackupMode (..),
+
+    -- ** SessionPersistenceMode
+    SessionPersistenceMode (..),
+
+    -- ** StreamingClipboardMode
+    StreamingClipboardMode (..),
+
+    -- ** StreamingImageEncryptionConfigurationKeyType
+    StreamingImageEncryptionConfigurationKeyType (..),
+
+    -- ** StreamingImageState
+    StreamingImageState (..),
+
+    -- ** StreamingImageStatusCode
+    StreamingImageStatusCode (..),
+
+    -- ** StreamingInstanceType
+    StreamingInstanceType (..),
+
+    -- ** StreamingSessionState
+    StreamingSessionState (..),
+
+    -- ** StreamingSessionStatusCode
+    StreamingSessionStatusCode (..),
+
+    -- ** StreamingSessionStorageMode
+    StreamingSessionStorageMode (..),
+
+    -- ** StreamingSessionStreamState
+    StreamingSessionStreamState (..),
+
+    -- ** StreamingSessionStreamStatusCode
+    StreamingSessionStreamStatusCode (..),
+
+    -- ** StudioComponentInitializationScriptRunContext
+    StudioComponentInitializationScriptRunContext (..),
+
+    -- ** StudioComponentState
+    StudioComponentState (..),
+
+    -- ** StudioComponentStatusCode
+    StudioComponentStatusCode (..),
+
+    -- ** StudioComponentSubtype
+    StudioComponentSubtype (..),
+
+    -- ** StudioComponentType
+    StudioComponentType (..),
+
+    -- ** StudioEncryptionConfigurationKeyType
+    StudioEncryptionConfigurationKeyType (..),
+
+    -- ** StudioPersona
+    StudioPersona (..),
+
+    -- ** StudioState
+    StudioState (..),
+
+    -- ** StudioStatusCode
+    StudioStatusCode (..),
+
+    -- ** VolumeRetentionMode
+    VolumeRetentionMode (..),
+
+    -- ** ActiveDirectoryComputerAttribute
+    ActiveDirectoryComputerAttribute (ActiveDirectoryComputerAttribute'),
+    newActiveDirectoryComputerAttribute,
+
+    -- ** ActiveDirectoryConfiguration
+    ActiveDirectoryConfiguration (ActiveDirectoryConfiguration'),
+    newActiveDirectoryConfiguration,
+
+    -- ** ComputeFarmConfiguration
+    ComputeFarmConfiguration (ComputeFarmConfiguration'),
+    newComputeFarmConfiguration,
+
+    -- ** Eula
+    Eula (Eula'),
+    newEula,
+
+    -- ** EulaAcceptance
+    EulaAcceptance (EulaAcceptance'),
+    newEulaAcceptance,
+
+    -- ** LaunchProfile
+    LaunchProfile (LaunchProfile'),
+    newLaunchProfile,
+
+    -- ** LaunchProfileInitialization
+    LaunchProfileInitialization (LaunchProfileInitialization'),
+    newLaunchProfileInitialization,
+
+    -- ** LaunchProfileInitializationActiveDirectory
+    LaunchProfileInitializationActiveDirectory (LaunchProfileInitializationActiveDirectory'),
+    newLaunchProfileInitializationActiveDirectory,
+
+    -- ** LaunchProfileInitializationScript
+    LaunchProfileInitializationScript (LaunchProfileInitializationScript'),
+    newLaunchProfileInitializationScript,
+
+    -- ** LaunchProfileMembership
+    LaunchProfileMembership (LaunchProfileMembership'),
+    newLaunchProfileMembership,
+
+    -- ** LicenseServiceConfiguration
+    LicenseServiceConfiguration (LicenseServiceConfiguration'),
+    newLicenseServiceConfiguration,
+
+    -- ** NewLaunchProfileMember
+    NewLaunchProfileMember (NewLaunchProfileMember'),
+    newNewLaunchProfileMember,
+
+    -- ** NewStudioMember
+    NewStudioMember (NewStudioMember'),
+    newNewStudioMember,
+
+    -- ** ScriptParameterKeyValue
+    ScriptParameterKeyValue (ScriptParameterKeyValue'),
+    newScriptParameterKeyValue,
+
+    -- ** SharedFileSystemConfiguration
+    SharedFileSystemConfiguration (SharedFileSystemConfiguration'),
+    newSharedFileSystemConfiguration,
+
+    -- ** StreamConfiguration
+    StreamConfiguration (StreamConfiguration'),
+    newStreamConfiguration,
+
+    -- ** StreamConfigurationCreate
+    StreamConfigurationCreate (StreamConfigurationCreate'),
+    newStreamConfigurationCreate,
+
+    -- ** StreamConfigurationSessionBackup
+    StreamConfigurationSessionBackup (StreamConfigurationSessionBackup'),
+    newStreamConfigurationSessionBackup,
+
+    -- ** StreamConfigurationSessionStorage
+    StreamConfigurationSessionStorage (StreamConfigurationSessionStorage'),
+    newStreamConfigurationSessionStorage,
+
+    -- ** StreamingImage
+    StreamingImage (StreamingImage'),
+    newStreamingImage,
+
+    -- ** StreamingImageEncryptionConfiguration
+    StreamingImageEncryptionConfiguration (StreamingImageEncryptionConfiguration'),
+    newStreamingImageEncryptionConfiguration,
+
+    -- ** StreamingSession
+    StreamingSession (StreamingSession'),
+    newStreamingSession,
+
+    -- ** StreamingSessionBackup
+    StreamingSessionBackup (StreamingSessionBackup'),
+    newStreamingSessionBackup,
+
+    -- ** StreamingSessionStorageRoot
+    StreamingSessionStorageRoot (StreamingSessionStorageRoot'),
+    newStreamingSessionStorageRoot,
+
+    -- ** StreamingSessionStream
+    StreamingSessionStream (StreamingSessionStream'),
+    newStreamingSessionStream,
+
+    -- ** Studio
+    Studio (Studio'),
+    newStudio,
+
+    -- ** StudioComponent
+    StudioComponent (StudioComponent'),
+    newStudioComponent,
+
+    -- ** StudioComponentConfiguration
+    StudioComponentConfiguration (StudioComponentConfiguration'),
+    newStudioComponentConfiguration,
+
+    -- ** StudioComponentInitializationScript
+    StudioComponentInitializationScript (StudioComponentInitializationScript'),
+    newStudioComponentInitializationScript,
+
+    -- ** StudioComponentSummary
+    StudioComponentSummary (StudioComponentSummary'),
+    newStudioComponentSummary,
+
+    -- ** StudioEncryptionConfiguration
+    StudioEncryptionConfiguration (StudioEncryptionConfiguration'),
+    newStudioEncryptionConfiguration,
+
+    -- ** StudioMembership
+    StudioMembership (StudioMembership'),
+    newStudioMembership,
+
+    -- ** ValidationResult
+    ValidationResult (ValidationResult'),
+    newValidationResult,
+
+    -- ** VolumeConfiguration
+    VolumeConfiguration (VolumeConfiguration'),
+    newVolumeConfiguration,
+  )
+where
+
+import Amazonka.Nimble.AcceptEulas
+import Amazonka.Nimble.CreateLaunchProfile
+import Amazonka.Nimble.CreateStreamingImage
+import Amazonka.Nimble.CreateStreamingSession
+import Amazonka.Nimble.CreateStreamingSessionStream
+import Amazonka.Nimble.CreateStudio
+import Amazonka.Nimble.CreateStudioComponent
+import Amazonka.Nimble.DeleteLaunchProfile
+import Amazonka.Nimble.DeleteLaunchProfileMember
+import Amazonka.Nimble.DeleteStreamingImage
+import Amazonka.Nimble.DeleteStreamingSession
+import Amazonka.Nimble.DeleteStudio
+import Amazonka.Nimble.DeleteStudioComponent
+import Amazonka.Nimble.DeleteStudioMember
+import Amazonka.Nimble.GetEula
+import Amazonka.Nimble.GetLaunchProfile
+import Amazonka.Nimble.GetLaunchProfileDetails
+import Amazonka.Nimble.GetLaunchProfileInitialization
+import Amazonka.Nimble.GetLaunchProfileMember
+import Amazonka.Nimble.GetStreamingImage
+import Amazonka.Nimble.GetStreamingSession
+import Amazonka.Nimble.GetStreamingSessionBackup
+import Amazonka.Nimble.GetStreamingSessionStream
+import Amazonka.Nimble.GetStudio
+import Amazonka.Nimble.GetStudioComponent
+import Amazonka.Nimble.GetStudioMember
+import Amazonka.Nimble.Lens
+import Amazonka.Nimble.ListEulaAcceptances
+import Amazonka.Nimble.ListEulas
+import Amazonka.Nimble.ListLaunchProfileMembers
+import Amazonka.Nimble.ListLaunchProfiles
+import Amazonka.Nimble.ListStreamingImages
+import Amazonka.Nimble.ListStreamingSessionBackups
+import Amazonka.Nimble.ListStreamingSessions
+import Amazonka.Nimble.ListStudioComponents
+import Amazonka.Nimble.ListStudioMembers
+import Amazonka.Nimble.ListStudios
+import Amazonka.Nimble.ListTagsForResource
+import Amazonka.Nimble.PutLaunchProfileMembers
+import Amazonka.Nimble.PutStudioMembers
+import Amazonka.Nimble.StartStreamingSession
+import Amazonka.Nimble.StartStudioSSOConfigurationRepair
+import Amazonka.Nimble.StopStreamingSession
+import Amazonka.Nimble.TagResource
+import Amazonka.Nimble.Types
+import Amazonka.Nimble.UntagResource
+import Amazonka.Nimble.UpdateLaunchProfile
+import Amazonka.Nimble.UpdateLaunchProfileMember
+import Amazonka.Nimble.UpdateStreamingImage
+import Amazonka.Nimble.UpdateStudio
+import Amazonka.Nimble.UpdateStudioComponent
+import Amazonka.Nimble.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 'Nimble'.
+
+-- $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/Nimble/AcceptEulas.hs b/gen/Amazonka/Nimble/AcceptEulas.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/AcceptEulas.hs
@@ -0,0 +1,204 @@
+{-# 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.Nimble.AcceptEulas
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accept EULAs.
+module Amazonka.Nimble.AcceptEulas
+  ( -- * Creating a Request
+    AcceptEulas (..),
+    newAcceptEulas,
+
+    -- * Request Lenses
+    acceptEulas_clientToken,
+    acceptEulas_eulaIds,
+    acceptEulas_studioId,
+
+    -- * Destructuring the Response
+    AcceptEulasResponse (..),
+    newAcceptEulasResponse,
+
+    -- * Response Lenses
+    acceptEulasResponse_eulaAcceptances,
+    acceptEulasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptEulas' smart constructor.
+data AcceptEulas = AcceptEulas'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The EULA ID.
+    eulaIds :: Prelude.Maybe [Prelude.Text],
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptEulas' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'acceptEulas_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'eulaIds', 'acceptEulas_eulaIds' - The EULA ID.
+--
+-- 'studioId', 'acceptEulas_studioId' - The studio ID.
+newAcceptEulas ::
+  -- | 'studioId'
+  Prelude.Text ->
+  AcceptEulas
+newAcceptEulas pStudioId_ =
+  AcceptEulas'
+    { clientToken = Prelude.Nothing,
+      eulaIds = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+acceptEulas_clientToken :: Lens.Lens' AcceptEulas (Prelude.Maybe Prelude.Text)
+acceptEulas_clientToken = Lens.lens (\AcceptEulas' {clientToken} -> clientToken) (\s@AcceptEulas' {} a -> s {clientToken = a} :: AcceptEulas)
+
+-- | The EULA ID.
+acceptEulas_eulaIds :: Lens.Lens' AcceptEulas (Prelude.Maybe [Prelude.Text])
+acceptEulas_eulaIds = Lens.lens (\AcceptEulas' {eulaIds} -> eulaIds) (\s@AcceptEulas' {} a -> s {eulaIds = a} :: AcceptEulas) Prelude.. Lens.mapping Lens.coerced
+
+-- | The studio ID.
+acceptEulas_studioId :: Lens.Lens' AcceptEulas Prelude.Text
+acceptEulas_studioId = Lens.lens (\AcceptEulas' {studioId} -> studioId) (\s@AcceptEulas' {} a -> s {studioId = a} :: AcceptEulas)
+
+instance Core.AWSRequest AcceptEulas where
+  type AWSResponse AcceptEulas = AcceptEulasResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AcceptEulasResponse'
+            Prelude.<$> ( x
+                            Data..?> "eulaAcceptances"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AcceptEulas where
+  hashWithSalt _salt AcceptEulas' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` eulaIds
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData AcceptEulas where
+  rnf AcceptEulas' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf eulaIds
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders AcceptEulas where
+  toHeaders AcceptEulas' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON AcceptEulas where
+  toJSON AcceptEulas' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("eulaIds" Data..=) Prelude.<$> eulaIds]
+      )
+
+instance Data.ToPath AcceptEulas where
+  toPath AcceptEulas' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/eula-acceptances"
+      ]
+
+instance Data.ToQuery AcceptEulas where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAcceptEulasResponse' smart constructor.
+data AcceptEulasResponse = AcceptEulasResponse'
+  { -- | A collection of EULA acceptances.
+    eulaAcceptances :: Prelude.Maybe [EulaAcceptance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptEulasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eulaAcceptances', 'acceptEulasResponse_eulaAcceptances' - A collection of EULA acceptances.
+--
+-- 'httpStatus', 'acceptEulasResponse_httpStatus' - The response's http status code.
+newAcceptEulasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptEulasResponse
+newAcceptEulasResponse pHttpStatus_ =
+  AcceptEulasResponse'
+    { eulaAcceptances =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of EULA acceptances.
+acceptEulasResponse_eulaAcceptances :: Lens.Lens' AcceptEulasResponse (Prelude.Maybe [EulaAcceptance])
+acceptEulasResponse_eulaAcceptances = Lens.lens (\AcceptEulasResponse' {eulaAcceptances} -> eulaAcceptances) (\s@AcceptEulasResponse' {} a -> s {eulaAcceptances = a} :: AcceptEulasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+acceptEulasResponse_httpStatus :: Lens.Lens' AcceptEulasResponse Prelude.Int
+acceptEulasResponse_httpStatus = Lens.lens (\AcceptEulasResponse' {httpStatus} -> httpStatus) (\s@AcceptEulasResponse' {} a -> s {httpStatus = a} :: AcceptEulasResponse)
+
+instance Prelude.NFData AcceptEulasResponse where
+  rnf AcceptEulasResponse' {..} =
+    Prelude.rnf eulaAcceptances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/CreateLaunchProfile.hs b/gen/Amazonka/Nimble/CreateLaunchProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/CreateLaunchProfile.hs
@@ -0,0 +1,313 @@
+{-# 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.Nimble.CreateLaunchProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a launch profile.
+module Amazonka.Nimble.CreateLaunchProfile
+  ( -- * Creating a Request
+    CreateLaunchProfile (..),
+    newCreateLaunchProfile,
+
+    -- * Request Lenses
+    createLaunchProfile_clientToken,
+    createLaunchProfile_description,
+    createLaunchProfile_tags,
+    createLaunchProfile_ec2SubnetIds,
+    createLaunchProfile_launchProfileProtocolVersions,
+    createLaunchProfile_name,
+    createLaunchProfile_streamConfiguration,
+    createLaunchProfile_studioComponentIds,
+    createLaunchProfile_studioId,
+
+    -- * Destructuring the Response
+    CreateLaunchProfileResponse (..),
+    newCreateLaunchProfileResponse,
+
+    -- * Response Lenses
+    createLaunchProfileResponse_launchProfile,
+    createLaunchProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLaunchProfile' smart constructor.
+data CreateLaunchProfile = CreateLaunchProfile'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies the IDs of the EC2 subnets where streaming sessions will be
+    -- accessible from. These subnets must support the specified instance
+    -- types.
+    ec2SubnetIds :: [Prelude.Text],
+    -- | The version number of the protocol that is used by the launch profile.
+    -- The only valid version is \"2021-03-31\".
+    launchProfileProtocolVersions :: [Prelude.Text],
+    -- | The name for the launch profile.
+    name :: Data.Sensitive Prelude.Text,
+    -- | A configuration for a streaming session.
+    streamConfiguration :: StreamConfigurationCreate,
+    -- | Unique identifiers for a collection of studio components that can be
+    -- used with this launch profile.
+    studioComponentIds :: Prelude.NonEmpty Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createLaunchProfile_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'description', 'createLaunchProfile_description' - The description.
+--
+-- 'tags', 'createLaunchProfile_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'ec2SubnetIds', 'createLaunchProfile_ec2SubnetIds' - Specifies the IDs of the EC2 subnets where streaming sessions will be
+-- accessible from. These subnets must support the specified instance
+-- types.
+--
+-- 'launchProfileProtocolVersions', 'createLaunchProfile_launchProfileProtocolVersions' - The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+--
+-- 'name', 'createLaunchProfile_name' - The name for the launch profile.
+--
+-- 'streamConfiguration', 'createLaunchProfile_streamConfiguration' - A configuration for a streaming session.
+--
+-- 'studioComponentIds', 'createLaunchProfile_studioComponentIds' - Unique identifiers for a collection of studio components that can be
+-- used with this launch profile.
+--
+-- 'studioId', 'createLaunchProfile_studioId' - The studio ID.
+newCreateLaunchProfile ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'streamConfiguration'
+  StreamConfigurationCreate ->
+  -- | 'studioComponentIds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  CreateLaunchProfile
+newCreateLaunchProfile
+  pName_
+  pStreamConfiguration_
+  pStudioComponentIds_
+  pStudioId_ =
+    CreateLaunchProfile'
+      { clientToken = Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        ec2SubnetIds = Prelude.mempty,
+        launchProfileProtocolVersions = Prelude.mempty,
+        name = Data._Sensitive Lens.# pName_,
+        streamConfiguration = pStreamConfiguration_,
+        studioComponentIds =
+          Lens.coerced Lens.# pStudioComponentIds_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+createLaunchProfile_clientToken :: Lens.Lens' CreateLaunchProfile (Prelude.Maybe Prelude.Text)
+createLaunchProfile_clientToken = Lens.lens (\CreateLaunchProfile' {clientToken} -> clientToken) (\s@CreateLaunchProfile' {} a -> s {clientToken = a} :: CreateLaunchProfile)
+
+-- | The description.
+createLaunchProfile_description :: Lens.Lens' CreateLaunchProfile (Prelude.Maybe Prelude.Text)
+createLaunchProfile_description = Lens.lens (\CreateLaunchProfile' {description} -> description) (\s@CreateLaunchProfile' {} a -> s {description = a} :: CreateLaunchProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+createLaunchProfile_tags :: Lens.Lens' CreateLaunchProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createLaunchProfile_tags = Lens.lens (\CreateLaunchProfile' {tags} -> tags) (\s@CreateLaunchProfile' {} a -> s {tags = a} :: CreateLaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the IDs of the EC2 subnets where streaming sessions will be
+-- accessible from. These subnets must support the specified instance
+-- types.
+createLaunchProfile_ec2SubnetIds :: Lens.Lens' CreateLaunchProfile [Prelude.Text]
+createLaunchProfile_ec2SubnetIds = Lens.lens (\CreateLaunchProfile' {ec2SubnetIds} -> ec2SubnetIds) (\s@CreateLaunchProfile' {} a -> s {ec2SubnetIds = a} :: CreateLaunchProfile) Prelude.. Lens.coerced
+
+-- | The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+createLaunchProfile_launchProfileProtocolVersions :: Lens.Lens' CreateLaunchProfile [Prelude.Text]
+createLaunchProfile_launchProfileProtocolVersions = Lens.lens (\CreateLaunchProfile' {launchProfileProtocolVersions} -> launchProfileProtocolVersions) (\s@CreateLaunchProfile' {} a -> s {launchProfileProtocolVersions = a} :: CreateLaunchProfile) Prelude.. Lens.coerced
+
+-- | The name for the launch profile.
+createLaunchProfile_name :: Lens.Lens' CreateLaunchProfile Prelude.Text
+createLaunchProfile_name = Lens.lens (\CreateLaunchProfile' {name} -> name) (\s@CreateLaunchProfile' {} a -> s {name = a} :: CreateLaunchProfile) Prelude.. Data._Sensitive
+
+-- | A configuration for a streaming session.
+createLaunchProfile_streamConfiguration :: Lens.Lens' CreateLaunchProfile StreamConfigurationCreate
+createLaunchProfile_streamConfiguration = Lens.lens (\CreateLaunchProfile' {streamConfiguration} -> streamConfiguration) (\s@CreateLaunchProfile' {} a -> s {streamConfiguration = a} :: CreateLaunchProfile)
+
+-- | Unique identifiers for a collection of studio components that can be
+-- used with this launch profile.
+createLaunchProfile_studioComponentIds :: Lens.Lens' CreateLaunchProfile (Prelude.NonEmpty Prelude.Text)
+createLaunchProfile_studioComponentIds = Lens.lens (\CreateLaunchProfile' {studioComponentIds} -> studioComponentIds) (\s@CreateLaunchProfile' {} a -> s {studioComponentIds = a} :: CreateLaunchProfile) Prelude.. Lens.coerced
+
+-- | The studio ID.
+createLaunchProfile_studioId :: Lens.Lens' CreateLaunchProfile Prelude.Text
+createLaunchProfile_studioId = Lens.lens (\CreateLaunchProfile' {studioId} -> studioId) (\s@CreateLaunchProfile' {} a -> s {studioId = a} :: CreateLaunchProfile)
+
+instance Core.AWSRequest CreateLaunchProfile where
+  type
+    AWSResponse CreateLaunchProfile =
+      CreateLaunchProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLaunchProfileResponse'
+            Prelude.<$> (x Data..?> "launchProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLaunchProfile where
+  hashWithSalt _salt CreateLaunchProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` ec2SubnetIds
+      `Prelude.hashWithSalt` launchProfileProtocolVersions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` streamConfiguration
+      `Prelude.hashWithSalt` studioComponentIds
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData CreateLaunchProfile where
+  rnf CreateLaunchProfile' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf ec2SubnetIds
+      `Prelude.seq` Prelude.rnf launchProfileProtocolVersions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf streamConfiguration
+      `Prelude.seq` Prelude.rnf studioComponentIds
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders CreateLaunchProfile where
+  toHeaders CreateLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateLaunchProfile where
+  toJSON CreateLaunchProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ec2SubnetIds" Data..= ec2SubnetIds),
+            Prelude.Just
+              ( "launchProfileProtocolVersions"
+                  Data..= launchProfileProtocolVersions
+              ),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("streamConfiguration" Data..= streamConfiguration),
+            Prelude.Just
+              ("studioComponentIds" Data..= studioComponentIds)
+          ]
+      )
+
+instance Data.ToPath CreateLaunchProfile where
+  toPath CreateLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles"
+      ]
+
+instance Data.ToQuery CreateLaunchProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLaunchProfileResponse' smart constructor.
+data CreateLaunchProfileResponse = CreateLaunchProfileResponse'
+  { -- | The launch profile.
+    launchProfile :: Prelude.Maybe LaunchProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfile', 'createLaunchProfileResponse_launchProfile' - The launch profile.
+--
+-- 'httpStatus', 'createLaunchProfileResponse_httpStatus' - The response's http status code.
+newCreateLaunchProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLaunchProfileResponse
+newCreateLaunchProfileResponse pHttpStatus_ =
+  CreateLaunchProfileResponse'
+    { launchProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The launch profile.
+createLaunchProfileResponse_launchProfile :: Lens.Lens' CreateLaunchProfileResponse (Prelude.Maybe LaunchProfile)
+createLaunchProfileResponse_launchProfile = Lens.lens (\CreateLaunchProfileResponse' {launchProfile} -> launchProfile) (\s@CreateLaunchProfileResponse' {} a -> s {launchProfile = a} :: CreateLaunchProfileResponse)
+
+-- | The response's http status code.
+createLaunchProfileResponse_httpStatus :: Lens.Lens' CreateLaunchProfileResponse Prelude.Int
+createLaunchProfileResponse_httpStatus = Lens.lens (\CreateLaunchProfileResponse' {httpStatus} -> httpStatus) (\s@CreateLaunchProfileResponse' {} a -> s {httpStatus = a} :: CreateLaunchProfileResponse)
+
+instance Prelude.NFData CreateLaunchProfileResponse where
+  rnf CreateLaunchProfileResponse' {..} =
+    Prelude.rnf launchProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/CreateStreamingImage.hs b/gen/Amazonka/Nimble/CreateStreamingImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/CreateStreamingImage.hs
@@ -0,0 +1,257 @@
+{-# 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.Nimble.CreateStreamingImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a streaming image resource in a studio.
+module Amazonka.Nimble.CreateStreamingImage
+  ( -- * Creating a Request
+    CreateStreamingImage (..),
+    newCreateStreamingImage,
+
+    -- * Request Lenses
+    createStreamingImage_clientToken,
+    createStreamingImage_description,
+    createStreamingImage_tags,
+    createStreamingImage_ec2ImageId,
+    createStreamingImage_name,
+    createStreamingImage_studioId,
+
+    -- * Destructuring the Response
+    CreateStreamingImageResponse (..),
+    newCreateStreamingImageResponse,
+
+    -- * Response Lenses
+    createStreamingImageResponse_streamingImage,
+    createStreamingImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStreamingImage' smart constructor.
+data CreateStreamingImage = CreateStreamingImage'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A human-readable description of the streaming image.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of an EC2 machine image with which to create this streaming
+    -- image.
+    ec2ImageId :: Prelude.Text,
+    -- | A friendly name for a streaming image resource.
+    name :: Data.Sensitive Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createStreamingImage_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'description', 'createStreamingImage_description' - A human-readable description of the streaming image.
+--
+-- 'tags', 'createStreamingImage_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'ec2ImageId', 'createStreamingImage_ec2ImageId' - The ID of an EC2 machine image with which to create this streaming
+-- image.
+--
+-- 'name', 'createStreamingImage_name' - A friendly name for a streaming image resource.
+--
+-- 'studioId', 'createStreamingImage_studioId' - The studio ID.
+newCreateStreamingImage ::
+  -- | 'ec2ImageId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  CreateStreamingImage
+newCreateStreamingImage
+  pEc2ImageId_
+  pName_
+  pStudioId_ =
+    CreateStreamingImage'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        ec2ImageId = pEc2ImageId_,
+        name = Data._Sensitive Lens.# pName_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+createStreamingImage_clientToken :: Lens.Lens' CreateStreamingImage (Prelude.Maybe Prelude.Text)
+createStreamingImage_clientToken = Lens.lens (\CreateStreamingImage' {clientToken} -> clientToken) (\s@CreateStreamingImage' {} a -> s {clientToken = a} :: CreateStreamingImage)
+
+-- | A human-readable description of the streaming image.
+createStreamingImage_description :: Lens.Lens' CreateStreamingImage (Prelude.Maybe Prelude.Text)
+createStreamingImage_description = Lens.lens (\CreateStreamingImage' {description} -> description) (\s@CreateStreamingImage' {} a -> s {description = a} :: CreateStreamingImage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+createStreamingImage_tags :: Lens.Lens' CreateStreamingImage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStreamingImage_tags = Lens.lens (\CreateStreamingImage' {tags} -> tags) (\s@CreateStreamingImage' {} a -> s {tags = a} :: CreateStreamingImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of an EC2 machine image with which to create this streaming
+-- image.
+createStreamingImage_ec2ImageId :: Lens.Lens' CreateStreamingImage Prelude.Text
+createStreamingImage_ec2ImageId = Lens.lens (\CreateStreamingImage' {ec2ImageId} -> ec2ImageId) (\s@CreateStreamingImage' {} a -> s {ec2ImageId = a} :: CreateStreamingImage)
+
+-- | A friendly name for a streaming image resource.
+createStreamingImage_name :: Lens.Lens' CreateStreamingImage Prelude.Text
+createStreamingImage_name = Lens.lens (\CreateStreamingImage' {name} -> name) (\s@CreateStreamingImage' {} a -> s {name = a} :: CreateStreamingImage) Prelude.. Data._Sensitive
+
+-- | The studio ID.
+createStreamingImage_studioId :: Lens.Lens' CreateStreamingImage Prelude.Text
+createStreamingImage_studioId = Lens.lens (\CreateStreamingImage' {studioId} -> studioId) (\s@CreateStreamingImage' {} a -> s {studioId = a} :: CreateStreamingImage)
+
+instance Core.AWSRequest CreateStreamingImage where
+  type
+    AWSResponse CreateStreamingImage =
+      CreateStreamingImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStreamingImageResponse'
+            Prelude.<$> (x Data..?> "streamingImage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStreamingImage where
+  hashWithSalt _salt CreateStreamingImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` ec2ImageId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData CreateStreamingImage where
+  rnf CreateStreamingImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf ec2ImageId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders CreateStreamingImage where
+  toHeaders CreateStreamingImage' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateStreamingImage where
+  toJSON CreateStreamingImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ec2ImageId" Data..= ec2ImageId),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateStreamingImage where
+  toPath CreateStreamingImage' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-images"
+      ]
+
+instance Data.ToQuery CreateStreamingImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStreamingImageResponse' smart constructor.
+data CreateStreamingImageResponse = CreateStreamingImageResponse'
+  { -- | The streaming image.
+    streamingImage :: Prelude.Maybe StreamingImage,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'streamingImage', 'createStreamingImageResponse_streamingImage' - The streaming image.
+--
+-- 'httpStatus', 'createStreamingImageResponse_httpStatus' - The response's http status code.
+newCreateStreamingImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStreamingImageResponse
+newCreateStreamingImageResponse pHttpStatus_ =
+  CreateStreamingImageResponse'
+    { streamingImage =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The streaming image.
+createStreamingImageResponse_streamingImage :: Lens.Lens' CreateStreamingImageResponse (Prelude.Maybe StreamingImage)
+createStreamingImageResponse_streamingImage = Lens.lens (\CreateStreamingImageResponse' {streamingImage} -> streamingImage) (\s@CreateStreamingImageResponse' {} a -> s {streamingImage = a} :: CreateStreamingImageResponse)
+
+-- | The response's http status code.
+createStreamingImageResponse_httpStatus :: Lens.Lens' CreateStreamingImageResponse Prelude.Int
+createStreamingImageResponse_httpStatus = Lens.lens (\CreateStreamingImageResponse' {httpStatus} -> httpStatus) (\s@CreateStreamingImageResponse' {} a -> s {httpStatus = a} :: CreateStreamingImageResponse)
+
+instance Prelude.NFData CreateStreamingImageResponse where
+  rnf CreateStreamingImageResponse' {..} =
+    Prelude.rnf streamingImage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/CreateStreamingSession.hs b/gen/Amazonka/Nimble/CreateStreamingSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/CreateStreamingSession.hs
@@ -0,0 +1,282 @@
+{-# 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.Nimble.CreateStreamingSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a streaming session in a studio.
+--
+-- After invoking this operation, you must poll GetStreamingSession until
+-- the streaming session is in the @READY@ state.
+module Amazonka.Nimble.CreateStreamingSession
+  ( -- * Creating a Request
+    CreateStreamingSession (..),
+    newCreateStreamingSession,
+
+    -- * Request Lenses
+    createStreamingSession_clientToken,
+    createStreamingSession_ec2InstanceType,
+    createStreamingSession_ownedBy,
+    createStreamingSession_streamingImageId,
+    createStreamingSession_tags,
+    createStreamingSession_launchProfileId,
+    createStreamingSession_studioId,
+
+    -- * Destructuring the Response
+    CreateStreamingSessionResponse (..),
+    newCreateStreamingSessionResponse,
+
+    -- * Response Lenses
+    createStreamingSessionResponse_session,
+    createStreamingSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStreamingSession' smart constructor.
+data CreateStreamingSession = CreateStreamingSession'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The EC2 Instance type used for the streaming session.
+    ec2InstanceType :: Prelude.Maybe StreamingInstanceType,
+    -- | The user ID of the user that owns the streaming session. The user that
+    -- owns the session will be logging into the session and interacting with
+    -- the virtual workstation.
+    ownedBy :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the streaming image.
+    streamingImageId :: Prelude.Maybe Prelude.Text,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createStreamingSession_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'ec2InstanceType', 'createStreamingSession_ec2InstanceType' - The EC2 Instance type used for the streaming session.
+--
+-- 'ownedBy', 'createStreamingSession_ownedBy' - The user ID of the user that owns the streaming session. The user that
+-- owns the session will be logging into the session and interacting with
+-- the virtual workstation.
+--
+-- 'streamingImageId', 'createStreamingSession_streamingImageId' - The ID of the streaming image.
+--
+-- 'tags', 'createStreamingSession_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'launchProfileId', 'createStreamingSession_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'studioId', 'createStreamingSession_studioId' - The studio ID.
+newCreateStreamingSession ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  CreateStreamingSession
+newCreateStreamingSession
+  pLaunchProfileId_
+  pStudioId_ =
+    CreateStreamingSession'
+      { clientToken =
+          Prelude.Nothing,
+        ec2InstanceType = Prelude.Nothing,
+        ownedBy = Prelude.Nothing,
+        streamingImageId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        launchProfileId = pLaunchProfileId_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+createStreamingSession_clientToken :: Lens.Lens' CreateStreamingSession (Prelude.Maybe Prelude.Text)
+createStreamingSession_clientToken = Lens.lens (\CreateStreamingSession' {clientToken} -> clientToken) (\s@CreateStreamingSession' {} a -> s {clientToken = a} :: CreateStreamingSession)
+
+-- | The EC2 Instance type used for the streaming session.
+createStreamingSession_ec2InstanceType :: Lens.Lens' CreateStreamingSession (Prelude.Maybe StreamingInstanceType)
+createStreamingSession_ec2InstanceType = Lens.lens (\CreateStreamingSession' {ec2InstanceType} -> ec2InstanceType) (\s@CreateStreamingSession' {} a -> s {ec2InstanceType = a} :: CreateStreamingSession)
+
+-- | The user ID of the user that owns the streaming session. The user that
+-- owns the session will be logging into the session and interacting with
+-- the virtual workstation.
+createStreamingSession_ownedBy :: Lens.Lens' CreateStreamingSession (Prelude.Maybe Prelude.Text)
+createStreamingSession_ownedBy = Lens.lens (\CreateStreamingSession' {ownedBy} -> ownedBy) (\s@CreateStreamingSession' {} a -> s {ownedBy = a} :: CreateStreamingSession)
+
+-- | The ID of the streaming image.
+createStreamingSession_streamingImageId :: Lens.Lens' CreateStreamingSession (Prelude.Maybe Prelude.Text)
+createStreamingSession_streamingImageId = Lens.lens (\CreateStreamingSession' {streamingImageId} -> streamingImageId) (\s@CreateStreamingSession' {} a -> s {streamingImageId = a} :: CreateStreamingSession)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+createStreamingSession_tags :: Lens.Lens' CreateStreamingSession (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStreamingSession_tags = Lens.lens (\CreateStreamingSession' {tags} -> tags) (\s@CreateStreamingSession' {} a -> s {tags = a} :: CreateStreamingSession) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+createStreamingSession_launchProfileId :: Lens.Lens' CreateStreamingSession Prelude.Text
+createStreamingSession_launchProfileId = Lens.lens (\CreateStreamingSession' {launchProfileId} -> launchProfileId) (\s@CreateStreamingSession' {} a -> s {launchProfileId = a} :: CreateStreamingSession)
+
+-- | The studio ID.
+createStreamingSession_studioId :: Lens.Lens' CreateStreamingSession Prelude.Text
+createStreamingSession_studioId = Lens.lens (\CreateStreamingSession' {studioId} -> studioId) (\s@CreateStreamingSession' {} a -> s {studioId = a} :: CreateStreamingSession)
+
+instance Core.AWSRequest CreateStreamingSession where
+  type
+    AWSResponse CreateStreamingSession =
+      CreateStreamingSessionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStreamingSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStreamingSession where
+  hashWithSalt _salt CreateStreamingSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` ec2InstanceType
+      `Prelude.hashWithSalt` ownedBy
+      `Prelude.hashWithSalt` streamingImageId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData CreateStreamingSession where
+  rnf CreateStreamingSession' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf ec2InstanceType
+      `Prelude.seq` Prelude.rnf ownedBy
+      `Prelude.seq` Prelude.rnf streamingImageId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders CreateStreamingSession where
+  toHeaders CreateStreamingSession' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateStreamingSession where
+  toJSON CreateStreamingSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ec2InstanceType" Data..=)
+              Prelude.<$> ec2InstanceType,
+            ("ownedBy" Data..=) Prelude.<$> ownedBy,
+            ("streamingImageId" Data..=)
+              Prelude.<$> streamingImageId,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("launchProfileId" Data..= launchProfileId)
+          ]
+      )
+
+instance Data.ToPath CreateStreamingSession where
+  toPath CreateStreamingSession' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions"
+      ]
+
+instance Data.ToQuery CreateStreamingSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStreamingSessionResponse' smart constructor.
+data CreateStreamingSessionResponse = CreateStreamingSessionResponse'
+  { -- | The session.
+    session :: Prelude.Maybe StreamingSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'createStreamingSessionResponse_session' - The session.
+--
+-- 'httpStatus', 'createStreamingSessionResponse_httpStatus' - The response's http status code.
+newCreateStreamingSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStreamingSessionResponse
+newCreateStreamingSessionResponse pHttpStatus_ =
+  CreateStreamingSessionResponse'
+    { session =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The session.
+createStreamingSessionResponse_session :: Lens.Lens' CreateStreamingSessionResponse (Prelude.Maybe StreamingSession)
+createStreamingSessionResponse_session = Lens.lens (\CreateStreamingSessionResponse' {session} -> session) (\s@CreateStreamingSessionResponse' {} a -> s {session = a} :: CreateStreamingSessionResponse)
+
+-- | The response's http status code.
+createStreamingSessionResponse_httpStatus :: Lens.Lens' CreateStreamingSessionResponse Prelude.Int
+createStreamingSessionResponse_httpStatus = Lens.lens (\CreateStreamingSessionResponse' {httpStatus} -> httpStatus) (\s@CreateStreamingSessionResponse' {} a -> s {httpStatus = a} :: CreateStreamingSessionResponse)
+
+instance
+  Prelude.NFData
+    CreateStreamingSessionResponse
+  where
+  rnf CreateStreamingSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/CreateStreamingSessionStream.hs b/gen/Amazonka/Nimble/CreateStreamingSessionStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/CreateStreamingSessionStream.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.CreateStreamingSessionStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a streaming session stream for a streaming session.
+--
+-- After invoking this API, invoke GetStreamingSessionStream with the
+-- returned streamId to poll the resource until it is in the @READY@ state.
+module Amazonka.Nimble.CreateStreamingSessionStream
+  ( -- * Creating a Request
+    CreateStreamingSessionStream (..),
+    newCreateStreamingSessionStream,
+
+    -- * Request Lenses
+    createStreamingSessionStream_clientToken,
+    createStreamingSessionStream_expirationInSeconds,
+    createStreamingSessionStream_sessionId,
+    createStreamingSessionStream_studioId,
+
+    -- * Destructuring the Response
+    CreateStreamingSessionStreamResponse (..),
+    newCreateStreamingSessionStreamResponse,
+
+    -- * Response Lenses
+    createStreamingSessionStreamResponse_stream,
+    createStreamingSessionStreamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStreamingSessionStream' smart constructor.
+data CreateStreamingSessionStream = CreateStreamingSessionStream'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The expiration time in seconds.
+    expirationInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The streaming session ID.
+    sessionId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingSessionStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createStreamingSessionStream_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'expirationInSeconds', 'createStreamingSessionStream_expirationInSeconds' - The expiration time in seconds.
+--
+-- 'sessionId', 'createStreamingSessionStream_sessionId' - The streaming session ID.
+--
+-- 'studioId', 'createStreamingSessionStream_studioId' - The studio ID.
+newCreateStreamingSessionStream ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  CreateStreamingSessionStream
+newCreateStreamingSessionStream
+  pSessionId_
+  pStudioId_ =
+    CreateStreamingSessionStream'
+      { clientToken =
+          Prelude.Nothing,
+        expirationInSeconds = Prelude.Nothing,
+        sessionId = pSessionId_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+createStreamingSessionStream_clientToken :: Lens.Lens' CreateStreamingSessionStream (Prelude.Maybe Prelude.Text)
+createStreamingSessionStream_clientToken = Lens.lens (\CreateStreamingSessionStream' {clientToken} -> clientToken) (\s@CreateStreamingSessionStream' {} a -> s {clientToken = a} :: CreateStreamingSessionStream)
+
+-- | The expiration time in seconds.
+createStreamingSessionStream_expirationInSeconds :: Lens.Lens' CreateStreamingSessionStream (Prelude.Maybe Prelude.Natural)
+createStreamingSessionStream_expirationInSeconds = Lens.lens (\CreateStreamingSessionStream' {expirationInSeconds} -> expirationInSeconds) (\s@CreateStreamingSessionStream' {} a -> s {expirationInSeconds = a} :: CreateStreamingSessionStream)
+
+-- | The streaming session ID.
+createStreamingSessionStream_sessionId :: Lens.Lens' CreateStreamingSessionStream Prelude.Text
+createStreamingSessionStream_sessionId = Lens.lens (\CreateStreamingSessionStream' {sessionId} -> sessionId) (\s@CreateStreamingSessionStream' {} a -> s {sessionId = a} :: CreateStreamingSessionStream)
+
+-- | The studio ID.
+createStreamingSessionStream_studioId :: Lens.Lens' CreateStreamingSessionStream Prelude.Text
+createStreamingSessionStream_studioId = Lens.lens (\CreateStreamingSessionStream' {studioId} -> studioId) (\s@CreateStreamingSessionStream' {} a -> s {studioId = a} :: CreateStreamingSessionStream)
+
+instance Core.AWSRequest CreateStreamingSessionStream where
+  type
+    AWSResponse CreateStreamingSessionStream =
+      CreateStreamingSessionStreamResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStreamingSessionStreamResponse'
+            Prelude.<$> (x Data..?> "stream")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateStreamingSessionStream
+  where
+  hashWithSalt _salt CreateStreamingSessionStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` expirationInSeconds
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData CreateStreamingSessionStream where
+  rnf CreateStreamingSessionStream' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf expirationInSeconds
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders CreateStreamingSessionStream where
+  toHeaders CreateStreamingSessionStream' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateStreamingSessionStream where
+  toJSON CreateStreamingSessionStream' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("expirationInSeconds" Data..=)
+              Prelude.<$> expirationInSeconds
+          ]
+      )
+
+instance Data.ToPath CreateStreamingSessionStream where
+  toPath CreateStreamingSessionStream' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions/",
+        Data.toBS sessionId,
+        "/streams"
+      ]
+
+instance Data.ToQuery CreateStreamingSessionStream where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStreamingSessionStreamResponse' smart constructor.
+data CreateStreamingSessionStreamResponse = CreateStreamingSessionStreamResponse'
+  { -- | The stream.
+    stream :: Prelude.Maybe StreamingSessionStream,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingSessionStreamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stream', 'createStreamingSessionStreamResponse_stream' - The stream.
+--
+-- 'httpStatus', 'createStreamingSessionStreamResponse_httpStatus' - The response's http status code.
+newCreateStreamingSessionStreamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStreamingSessionStreamResponse
+newCreateStreamingSessionStreamResponse pHttpStatus_ =
+  CreateStreamingSessionStreamResponse'
+    { stream =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The stream.
+createStreamingSessionStreamResponse_stream :: Lens.Lens' CreateStreamingSessionStreamResponse (Prelude.Maybe StreamingSessionStream)
+createStreamingSessionStreamResponse_stream = Lens.lens (\CreateStreamingSessionStreamResponse' {stream} -> stream) (\s@CreateStreamingSessionStreamResponse' {} a -> s {stream = a} :: CreateStreamingSessionStreamResponse)
+
+-- | The response's http status code.
+createStreamingSessionStreamResponse_httpStatus :: Lens.Lens' CreateStreamingSessionStreamResponse Prelude.Int
+createStreamingSessionStreamResponse_httpStatus = Lens.lens (\CreateStreamingSessionStreamResponse' {httpStatus} -> httpStatus) (\s@CreateStreamingSessionStreamResponse' {} a -> s {httpStatus = a} :: CreateStreamingSessionStreamResponse)
+
+instance
+  Prelude.NFData
+    CreateStreamingSessionStreamResponse
+  where
+  rnf CreateStreamingSessionStreamResponse' {..} =
+    Prelude.rnf stream
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/CreateStudio.hs b/gen/Amazonka/Nimble/CreateStudio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/CreateStudio.hs
@@ -0,0 +1,301 @@
+{-# 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.Nimble.CreateStudio
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a new studio.
+--
+-- When creating a studio, two IAM roles must be provided: the admin role
+-- and the user role. These roles are assumed by your users when they log
+-- in to the Nimble Studio portal.
+--
+-- The user role must have the @AmazonNimbleStudio-StudioUser@ managed
+-- policy attached for the portal to function properly.
+--
+-- The admin role must have the @AmazonNimbleStudio-StudioAdmin@ managed
+-- policy attached for the portal to function properly.
+--
+-- You may optionally specify a KMS key in the
+-- @StudioEncryptionConfiguration@.
+--
+-- In Nimble Studio, resource names, descriptions, initialization scripts,
+-- and other data you provide are always encrypted at rest using an KMS
+-- key. By default, this key is owned by Amazon Web Services and managed on
+-- your behalf. You may provide your own KMS key when calling
+-- @CreateStudio@ to encrypt this data using a key you own and manage.
+--
+-- When providing an KMS key during studio creation, Nimble Studio creates
+-- KMS grants in your account to provide your studio user and admin roles
+-- access to these KMS keys.
+--
+-- If you delete this grant, the studio will no longer be accessible to
+-- your portal users.
+--
+-- If you delete the studio KMS key, your studio will no longer be
+-- accessible.
+module Amazonka.Nimble.CreateStudio
+  ( -- * Creating a Request
+    CreateStudio (..),
+    newCreateStudio,
+
+    -- * Request Lenses
+    createStudio_clientToken,
+    createStudio_studioEncryptionConfiguration,
+    createStudio_tags,
+    createStudio_adminRoleArn,
+    createStudio_displayName,
+    createStudio_studioName,
+    createStudio_userRoleArn,
+
+    -- * Destructuring the Response
+    CreateStudioResponse (..),
+    newCreateStudioResponse,
+
+    -- * Response Lenses
+    createStudioResponse_studio,
+    createStudioResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStudio' smart constructor.
+data CreateStudio = CreateStudio'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The studio encryption configuration.
+    studioEncryptionConfiguration :: Prelude.Maybe StudioEncryptionConfiguration,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The IAM role that studio admins will assume when logging in to the
+    -- Nimble Studio portal.
+    adminRoleArn :: Prelude.Text,
+    -- | A friendly name for the studio.
+    displayName :: Data.Sensitive Prelude.Text,
+    -- | The studio name that is used in the URL of the Nimble Studio portal when
+    -- accessed by Nimble Studio users.
+    studioName :: Prelude.Text,
+    -- | The IAM role that studio users will assume when logging in to the Nimble
+    -- Studio portal.
+    userRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStudio' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createStudio_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'studioEncryptionConfiguration', 'createStudio_studioEncryptionConfiguration' - The studio encryption configuration.
+--
+-- 'tags', 'createStudio_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'adminRoleArn', 'createStudio_adminRoleArn' - The IAM role that studio admins will assume when logging in to the
+-- Nimble Studio portal.
+--
+-- 'displayName', 'createStudio_displayName' - A friendly name for the studio.
+--
+-- 'studioName', 'createStudio_studioName' - The studio name that is used in the URL of the Nimble Studio portal when
+-- accessed by Nimble Studio users.
+--
+-- 'userRoleArn', 'createStudio_userRoleArn' - The IAM role that studio users will assume when logging in to the Nimble
+-- Studio portal.
+newCreateStudio ::
+  -- | 'adminRoleArn'
+  Prelude.Text ->
+  -- | 'displayName'
+  Prelude.Text ->
+  -- | 'studioName'
+  Prelude.Text ->
+  -- | 'userRoleArn'
+  Prelude.Text ->
+  CreateStudio
+newCreateStudio
+  pAdminRoleArn_
+  pDisplayName_
+  pStudioName_
+  pUserRoleArn_ =
+    CreateStudio'
+      { clientToken = Prelude.Nothing,
+        studioEncryptionConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        adminRoleArn = pAdminRoleArn_,
+        displayName = Data._Sensitive Lens.# pDisplayName_,
+        studioName = pStudioName_,
+        userRoleArn = pUserRoleArn_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+createStudio_clientToken :: Lens.Lens' CreateStudio (Prelude.Maybe Prelude.Text)
+createStudio_clientToken = Lens.lens (\CreateStudio' {clientToken} -> clientToken) (\s@CreateStudio' {} a -> s {clientToken = a} :: CreateStudio)
+
+-- | The studio encryption configuration.
+createStudio_studioEncryptionConfiguration :: Lens.Lens' CreateStudio (Prelude.Maybe StudioEncryptionConfiguration)
+createStudio_studioEncryptionConfiguration = Lens.lens (\CreateStudio' {studioEncryptionConfiguration} -> studioEncryptionConfiguration) (\s@CreateStudio' {} a -> s {studioEncryptionConfiguration = a} :: CreateStudio)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+createStudio_tags :: Lens.Lens' CreateStudio (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStudio_tags = Lens.lens (\CreateStudio' {tags} -> tags) (\s@CreateStudio' {} a -> s {tags = a} :: CreateStudio) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IAM role that studio admins will assume when logging in to the
+-- Nimble Studio portal.
+createStudio_adminRoleArn :: Lens.Lens' CreateStudio Prelude.Text
+createStudio_adminRoleArn = Lens.lens (\CreateStudio' {adminRoleArn} -> adminRoleArn) (\s@CreateStudio' {} a -> s {adminRoleArn = a} :: CreateStudio)
+
+-- | A friendly name for the studio.
+createStudio_displayName :: Lens.Lens' CreateStudio Prelude.Text
+createStudio_displayName = Lens.lens (\CreateStudio' {displayName} -> displayName) (\s@CreateStudio' {} a -> s {displayName = a} :: CreateStudio) Prelude.. Data._Sensitive
+
+-- | The studio name that is used in the URL of the Nimble Studio portal when
+-- accessed by Nimble Studio users.
+createStudio_studioName :: Lens.Lens' CreateStudio Prelude.Text
+createStudio_studioName = Lens.lens (\CreateStudio' {studioName} -> studioName) (\s@CreateStudio' {} a -> s {studioName = a} :: CreateStudio)
+
+-- | The IAM role that studio users will assume when logging in to the Nimble
+-- Studio portal.
+createStudio_userRoleArn :: Lens.Lens' CreateStudio Prelude.Text
+createStudio_userRoleArn = Lens.lens (\CreateStudio' {userRoleArn} -> userRoleArn) (\s@CreateStudio' {} a -> s {userRoleArn = a} :: CreateStudio)
+
+instance Core.AWSRequest CreateStudio where
+  type AWSResponse CreateStudio = CreateStudioResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStudioResponse'
+            Prelude.<$> (x Data..?> "studio")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStudio where
+  hashWithSalt _salt CreateStudio' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` studioEncryptionConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` adminRoleArn
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` studioName
+      `Prelude.hashWithSalt` userRoleArn
+
+instance Prelude.NFData CreateStudio where
+  rnf CreateStudio' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf studioEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf adminRoleArn
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf studioName
+      `Prelude.seq` Prelude.rnf userRoleArn
+
+instance Data.ToHeaders CreateStudio where
+  toHeaders CreateStudio' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateStudio where
+  toJSON CreateStudio' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("studioEncryptionConfiguration" Data..=)
+              Prelude.<$> studioEncryptionConfiguration,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("adminRoleArn" Data..= adminRoleArn),
+            Prelude.Just ("displayName" Data..= displayName),
+            Prelude.Just ("studioName" Data..= studioName),
+            Prelude.Just ("userRoleArn" Data..= userRoleArn)
+          ]
+      )
+
+instance Data.ToPath CreateStudio where
+  toPath = Prelude.const "/2020-08-01/studios"
+
+instance Data.ToQuery CreateStudio where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStudioResponse' smart constructor.
+data CreateStudioResponse = CreateStudioResponse'
+  { -- | Information about a studio.
+    studio :: Prelude.Maybe Studio,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStudioResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studio', 'createStudioResponse_studio' - Information about a studio.
+--
+-- 'httpStatus', 'createStudioResponse_httpStatus' - The response's http status code.
+newCreateStudioResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStudioResponse
+newCreateStudioResponse pHttpStatus_ =
+  CreateStudioResponse'
+    { studio = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about a studio.
+createStudioResponse_studio :: Lens.Lens' CreateStudioResponse (Prelude.Maybe Studio)
+createStudioResponse_studio = Lens.lens (\CreateStudioResponse' {studio} -> studio) (\s@CreateStudioResponse' {} a -> s {studio = a} :: CreateStudioResponse)
+
+-- | The response's http status code.
+createStudioResponse_httpStatus :: Lens.Lens' CreateStudioResponse Prelude.Int
+createStudioResponse_httpStatus = Lens.lens (\CreateStudioResponse' {httpStatus} -> httpStatus) (\s@CreateStudioResponse' {} a -> s {httpStatus = a} :: CreateStudioResponse)
+
+instance Prelude.NFData CreateStudioResponse where
+  rnf CreateStudioResponse' {..} =
+    Prelude.rnf studio
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/CreateStudioComponent.hs b/gen/Amazonka/Nimble/CreateStudioComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/CreateStudioComponent.hs
@@ -0,0 +1,359 @@
+{-# 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.Nimble.CreateStudioComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a studio component resource.
+module Amazonka.Nimble.CreateStudioComponent
+  ( -- * Creating a Request
+    CreateStudioComponent (..),
+    newCreateStudioComponent,
+
+    -- * Request Lenses
+    createStudioComponent_clientToken,
+    createStudioComponent_configuration,
+    createStudioComponent_description,
+    createStudioComponent_ec2SecurityGroupIds,
+    createStudioComponent_initializationScripts,
+    createStudioComponent_runtimeRoleArn,
+    createStudioComponent_scriptParameters,
+    createStudioComponent_secureInitializationRoleArn,
+    createStudioComponent_subtype,
+    createStudioComponent_tags,
+    createStudioComponent_name,
+    createStudioComponent_studioId,
+    createStudioComponent_type,
+
+    -- * Destructuring the Response
+    CreateStudioComponentResponse (..),
+    newCreateStudioComponentResponse,
+
+    -- * Response Lenses
+    createStudioComponentResponse_studioComponent,
+    createStudioComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStudioComponent' smart constructor.
+data CreateStudioComponent = CreateStudioComponent'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The configuration of the studio component, based on component type.
+    configuration :: Prelude.Maybe StudioComponentConfiguration,
+    -- | The description.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The EC2 security groups that control access to the studio component.
+    ec2SecurityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Initialization scripts for studio components.
+    initializationScripts :: Prelude.Maybe [StudioComponentInitializationScript],
+    -- | An IAM role attached to a Studio Component that gives the studio
+    -- component access to Amazon Web Services resources at anytime while the
+    -- instance is running.
+    runtimeRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Parameters for the studio component scripts.
+    scriptParameters :: Prelude.Maybe (Data.Sensitive [ScriptParameterKeyValue]),
+    -- | An IAM role attached to Studio Component when the system initialization
+    -- script runs which give the studio component access to Amazon Web
+    -- Services resources when the system initialization script runs.
+    secureInitializationRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The specific subtype of a studio component.
+    subtype :: Prelude.Maybe StudioComponentSubtype,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name for the studio component.
+    name :: Data.Sensitive Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text,
+    -- | The type of the studio component.
+    type' :: StudioComponentType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStudioComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createStudioComponent_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'configuration', 'createStudioComponent_configuration' - The configuration of the studio component, based on component type.
+--
+-- 'description', 'createStudioComponent_description' - The description.
+--
+-- 'ec2SecurityGroupIds', 'createStudioComponent_ec2SecurityGroupIds' - The EC2 security groups that control access to the studio component.
+--
+-- 'initializationScripts', 'createStudioComponent_initializationScripts' - Initialization scripts for studio components.
+--
+-- 'runtimeRoleArn', 'createStudioComponent_runtimeRoleArn' - An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+--
+-- 'scriptParameters', 'createStudioComponent_scriptParameters' - Parameters for the studio component scripts.
+--
+-- 'secureInitializationRoleArn', 'createStudioComponent_secureInitializationRoleArn' - An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+--
+-- 'subtype', 'createStudioComponent_subtype' - The specific subtype of a studio component.
+--
+-- 'tags', 'createStudioComponent_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'name', 'createStudioComponent_name' - The name for the studio component.
+--
+-- 'studioId', 'createStudioComponent_studioId' - The studio ID.
+--
+-- 'type'', 'createStudioComponent_type' - The type of the studio component.
+newCreateStudioComponent ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  -- | 'type''
+  StudioComponentType ->
+  CreateStudioComponent
+newCreateStudioComponent pName_ pStudioId_ pType_ =
+  CreateStudioComponent'
+    { clientToken =
+        Prelude.Nothing,
+      configuration = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ec2SecurityGroupIds = Prelude.Nothing,
+      initializationScripts = Prelude.Nothing,
+      runtimeRoleArn = Prelude.Nothing,
+      scriptParameters = Prelude.Nothing,
+      secureInitializationRoleArn = Prelude.Nothing,
+      subtype = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = Data._Sensitive Lens.# pName_,
+      studioId = pStudioId_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+createStudioComponent_clientToken :: Lens.Lens' CreateStudioComponent (Prelude.Maybe Prelude.Text)
+createStudioComponent_clientToken = Lens.lens (\CreateStudioComponent' {clientToken} -> clientToken) (\s@CreateStudioComponent' {} a -> s {clientToken = a} :: CreateStudioComponent)
+
+-- | The configuration of the studio component, based on component type.
+createStudioComponent_configuration :: Lens.Lens' CreateStudioComponent (Prelude.Maybe StudioComponentConfiguration)
+createStudioComponent_configuration = Lens.lens (\CreateStudioComponent' {configuration} -> configuration) (\s@CreateStudioComponent' {} a -> s {configuration = a} :: CreateStudioComponent)
+
+-- | The description.
+createStudioComponent_description :: Lens.Lens' CreateStudioComponent (Prelude.Maybe Prelude.Text)
+createStudioComponent_description = Lens.lens (\CreateStudioComponent' {description} -> description) (\s@CreateStudioComponent' {} a -> s {description = a} :: CreateStudioComponent) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The EC2 security groups that control access to the studio component.
+createStudioComponent_ec2SecurityGroupIds :: Lens.Lens' CreateStudioComponent (Prelude.Maybe [Prelude.Text])
+createStudioComponent_ec2SecurityGroupIds = Lens.lens (\CreateStudioComponent' {ec2SecurityGroupIds} -> ec2SecurityGroupIds) (\s@CreateStudioComponent' {} a -> s {ec2SecurityGroupIds = a} :: CreateStudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | Initialization scripts for studio components.
+createStudioComponent_initializationScripts :: Lens.Lens' CreateStudioComponent (Prelude.Maybe [StudioComponentInitializationScript])
+createStudioComponent_initializationScripts = Lens.lens (\CreateStudioComponent' {initializationScripts} -> initializationScripts) (\s@CreateStudioComponent' {} a -> s {initializationScripts = a} :: CreateStudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+createStudioComponent_runtimeRoleArn :: Lens.Lens' CreateStudioComponent (Prelude.Maybe Prelude.Text)
+createStudioComponent_runtimeRoleArn = Lens.lens (\CreateStudioComponent' {runtimeRoleArn} -> runtimeRoleArn) (\s@CreateStudioComponent' {} a -> s {runtimeRoleArn = a} :: CreateStudioComponent)
+
+-- | Parameters for the studio component scripts.
+createStudioComponent_scriptParameters :: Lens.Lens' CreateStudioComponent (Prelude.Maybe [ScriptParameterKeyValue])
+createStudioComponent_scriptParameters = Lens.lens (\CreateStudioComponent' {scriptParameters} -> scriptParameters) (\s@CreateStudioComponent' {} a -> s {scriptParameters = a} :: CreateStudioComponent) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+createStudioComponent_secureInitializationRoleArn :: Lens.Lens' CreateStudioComponent (Prelude.Maybe Prelude.Text)
+createStudioComponent_secureInitializationRoleArn = Lens.lens (\CreateStudioComponent' {secureInitializationRoleArn} -> secureInitializationRoleArn) (\s@CreateStudioComponent' {} a -> s {secureInitializationRoleArn = a} :: CreateStudioComponent)
+
+-- | The specific subtype of a studio component.
+createStudioComponent_subtype :: Lens.Lens' CreateStudioComponent (Prelude.Maybe StudioComponentSubtype)
+createStudioComponent_subtype = Lens.lens (\CreateStudioComponent' {subtype} -> subtype) (\s@CreateStudioComponent' {} a -> s {subtype = a} :: CreateStudioComponent)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+createStudioComponent_tags :: Lens.Lens' CreateStudioComponent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStudioComponent_tags = Lens.lens (\CreateStudioComponent' {tags} -> tags) (\s@CreateStudioComponent' {} a -> s {tags = a} :: CreateStudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the studio component.
+createStudioComponent_name :: Lens.Lens' CreateStudioComponent Prelude.Text
+createStudioComponent_name = Lens.lens (\CreateStudioComponent' {name} -> name) (\s@CreateStudioComponent' {} a -> s {name = a} :: CreateStudioComponent) Prelude.. Data._Sensitive
+
+-- | The studio ID.
+createStudioComponent_studioId :: Lens.Lens' CreateStudioComponent Prelude.Text
+createStudioComponent_studioId = Lens.lens (\CreateStudioComponent' {studioId} -> studioId) (\s@CreateStudioComponent' {} a -> s {studioId = a} :: CreateStudioComponent)
+
+-- | The type of the studio component.
+createStudioComponent_type :: Lens.Lens' CreateStudioComponent StudioComponentType
+createStudioComponent_type = Lens.lens (\CreateStudioComponent' {type'} -> type') (\s@CreateStudioComponent' {} a -> s {type' = a} :: CreateStudioComponent)
+
+instance Core.AWSRequest CreateStudioComponent where
+  type
+    AWSResponse CreateStudioComponent =
+      CreateStudioComponentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStudioComponentResponse'
+            Prelude.<$> (x Data..?> "studioComponent")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStudioComponent where
+  hashWithSalt _salt CreateStudioComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ec2SecurityGroupIds
+      `Prelude.hashWithSalt` initializationScripts
+      `Prelude.hashWithSalt` runtimeRoleArn
+      `Prelude.hashWithSalt` scriptParameters
+      `Prelude.hashWithSalt` secureInitializationRoleArn
+      `Prelude.hashWithSalt` subtype
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` studioId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateStudioComponent where
+  rnf CreateStudioComponent' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ec2SecurityGroupIds
+      `Prelude.seq` Prelude.rnf initializationScripts
+      `Prelude.seq` Prelude.rnf runtimeRoleArn
+      `Prelude.seq` Prelude.rnf scriptParameters
+      `Prelude.seq` Prelude.rnf secureInitializationRoleArn
+      `Prelude.seq` Prelude.rnf subtype
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf studioId
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateStudioComponent where
+  toHeaders CreateStudioComponent' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON CreateStudioComponent where
+  toJSON CreateStudioComponent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("configuration" Data..=) Prelude.<$> configuration,
+            ("description" Data..=) Prelude.<$> description,
+            ("ec2SecurityGroupIds" Data..=)
+              Prelude.<$> ec2SecurityGroupIds,
+            ("initializationScripts" Data..=)
+              Prelude.<$> initializationScripts,
+            ("runtimeRoleArn" Data..=)
+              Prelude.<$> runtimeRoleArn,
+            ("scriptParameters" Data..=)
+              Prelude.<$> scriptParameters,
+            ("secureInitializationRoleArn" Data..=)
+              Prelude.<$> secureInitializationRoleArn,
+            ("subtype" Data..=) Prelude.<$> subtype,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateStudioComponent where
+  toPath CreateStudioComponent' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/studio-components"
+      ]
+
+instance Data.ToQuery CreateStudioComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStudioComponentResponse' smart constructor.
+data CreateStudioComponentResponse = CreateStudioComponentResponse'
+  { -- | Information about the studio component.
+    studioComponent :: Prelude.Maybe StudioComponent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStudioComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studioComponent', 'createStudioComponentResponse_studioComponent' - Information about the studio component.
+--
+-- 'httpStatus', 'createStudioComponentResponse_httpStatus' - The response's http status code.
+newCreateStudioComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStudioComponentResponse
+newCreateStudioComponentResponse pHttpStatus_ =
+  CreateStudioComponentResponse'
+    { studioComponent =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the studio component.
+createStudioComponentResponse_studioComponent :: Lens.Lens' CreateStudioComponentResponse (Prelude.Maybe StudioComponent)
+createStudioComponentResponse_studioComponent = Lens.lens (\CreateStudioComponentResponse' {studioComponent} -> studioComponent) (\s@CreateStudioComponentResponse' {} a -> s {studioComponent = a} :: CreateStudioComponentResponse)
+
+-- | The response's http status code.
+createStudioComponentResponse_httpStatus :: Lens.Lens' CreateStudioComponentResponse Prelude.Int
+createStudioComponentResponse_httpStatus = Lens.lens (\CreateStudioComponentResponse' {httpStatus} -> httpStatus) (\s@CreateStudioComponentResponse' {} a -> s {httpStatus = a} :: CreateStudioComponentResponse)
+
+instance Prelude.NFData CreateStudioComponentResponse where
+  rnf CreateStudioComponentResponse' {..} =
+    Prelude.rnf studioComponent
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/DeleteLaunchProfile.hs b/gen/Amazonka/Nimble/DeleteLaunchProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteLaunchProfile.hs
@@ -0,0 +1,202 @@
+{-# 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.Nimble.DeleteLaunchProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Permanently delete a launch profile.
+module Amazonka.Nimble.DeleteLaunchProfile
+  ( -- * Creating a Request
+    DeleteLaunchProfile (..),
+    newDeleteLaunchProfile,
+
+    -- * Request Lenses
+    deleteLaunchProfile_clientToken,
+    deleteLaunchProfile_launchProfileId,
+    deleteLaunchProfile_studioId,
+
+    -- * Destructuring the Response
+    DeleteLaunchProfileResponse (..),
+    newDeleteLaunchProfileResponse,
+
+    -- * Response Lenses
+    deleteLaunchProfileResponse_launchProfile,
+    deleteLaunchProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLaunchProfile' smart constructor.
+data DeleteLaunchProfile = DeleteLaunchProfile'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteLaunchProfile_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'launchProfileId', 'deleteLaunchProfile_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'studioId', 'deleteLaunchProfile_studioId' - The studio ID.
+newDeleteLaunchProfile ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteLaunchProfile
+newDeleteLaunchProfile pLaunchProfileId_ pStudioId_ =
+  DeleteLaunchProfile'
+    { clientToken = Prelude.Nothing,
+      launchProfileId = pLaunchProfileId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteLaunchProfile_clientToken :: Lens.Lens' DeleteLaunchProfile (Prelude.Maybe Prelude.Text)
+deleteLaunchProfile_clientToken = Lens.lens (\DeleteLaunchProfile' {clientToken} -> clientToken) (\s@DeleteLaunchProfile' {} a -> s {clientToken = a} :: DeleteLaunchProfile)
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+deleteLaunchProfile_launchProfileId :: Lens.Lens' DeleteLaunchProfile Prelude.Text
+deleteLaunchProfile_launchProfileId = Lens.lens (\DeleteLaunchProfile' {launchProfileId} -> launchProfileId) (\s@DeleteLaunchProfile' {} a -> s {launchProfileId = a} :: DeleteLaunchProfile)
+
+-- | The studio ID.
+deleteLaunchProfile_studioId :: Lens.Lens' DeleteLaunchProfile Prelude.Text
+deleteLaunchProfile_studioId = Lens.lens (\DeleteLaunchProfile' {studioId} -> studioId) (\s@DeleteLaunchProfile' {} a -> s {studioId = a} :: DeleteLaunchProfile)
+
+instance Core.AWSRequest DeleteLaunchProfile where
+  type
+    AWSResponse DeleteLaunchProfile =
+      DeleteLaunchProfileResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteLaunchProfileResponse'
+            Prelude.<$> (x Data..?> "launchProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLaunchProfile where
+  hashWithSalt _salt DeleteLaunchProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteLaunchProfile where
+  rnf DeleteLaunchProfile' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteLaunchProfile where
+  toHeaders DeleteLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteLaunchProfile where
+  toPath DeleteLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId
+      ]
+
+instance Data.ToQuery DeleteLaunchProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLaunchProfileResponse' smart constructor.
+data DeleteLaunchProfileResponse = DeleteLaunchProfileResponse'
+  { -- | The launch profile.
+    launchProfile :: Prelude.Maybe LaunchProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfile', 'deleteLaunchProfileResponse_launchProfile' - The launch profile.
+--
+-- 'httpStatus', 'deleteLaunchProfileResponse_httpStatus' - The response's http status code.
+newDeleteLaunchProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLaunchProfileResponse
+newDeleteLaunchProfileResponse pHttpStatus_ =
+  DeleteLaunchProfileResponse'
+    { launchProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The launch profile.
+deleteLaunchProfileResponse_launchProfile :: Lens.Lens' DeleteLaunchProfileResponse (Prelude.Maybe LaunchProfile)
+deleteLaunchProfileResponse_launchProfile = Lens.lens (\DeleteLaunchProfileResponse' {launchProfile} -> launchProfile) (\s@DeleteLaunchProfileResponse' {} a -> s {launchProfile = a} :: DeleteLaunchProfileResponse)
+
+-- | The response's http status code.
+deleteLaunchProfileResponse_httpStatus :: Lens.Lens' DeleteLaunchProfileResponse Prelude.Int
+deleteLaunchProfileResponse_httpStatus = Lens.lens (\DeleteLaunchProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteLaunchProfileResponse' {} a -> s {httpStatus = a} :: DeleteLaunchProfileResponse)
+
+instance Prelude.NFData DeleteLaunchProfileResponse where
+  rnf DeleteLaunchProfileResponse' {..} =
+    Prelude.rnf launchProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/DeleteLaunchProfileMember.hs b/gen/Amazonka/Nimble/DeleteLaunchProfileMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteLaunchProfileMember.hs
@@ -0,0 +1,213 @@
+{-# 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.Nimble.DeleteLaunchProfileMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a user from launch profile membership.
+module Amazonka.Nimble.DeleteLaunchProfileMember
+  ( -- * Creating a Request
+    DeleteLaunchProfileMember (..),
+    newDeleteLaunchProfileMember,
+
+    -- * Request Lenses
+    deleteLaunchProfileMember_clientToken,
+    deleteLaunchProfileMember_launchProfileId,
+    deleteLaunchProfileMember_principalId,
+    deleteLaunchProfileMember_studioId,
+
+    -- * Destructuring the Response
+    DeleteLaunchProfileMemberResponse (..),
+    newDeleteLaunchProfileMemberResponse,
+
+    -- * Response Lenses
+    deleteLaunchProfileMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLaunchProfileMember' smart constructor.
+data DeleteLaunchProfileMember = DeleteLaunchProfileMember'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The principal ID. This currently supports a IAM Identity Center UserId.
+    principalId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchProfileMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteLaunchProfileMember_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'launchProfileId', 'deleteLaunchProfileMember_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'principalId', 'deleteLaunchProfileMember_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
+--
+-- 'studioId', 'deleteLaunchProfileMember_studioId' - The studio ID.
+newDeleteLaunchProfileMember ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'principalId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteLaunchProfileMember
+newDeleteLaunchProfileMember
+  pLaunchProfileId_
+  pPrincipalId_
+  pStudioId_ =
+    DeleteLaunchProfileMember'
+      { clientToken =
+          Prelude.Nothing,
+        launchProfileId = pLaunchProfileId_,
+        principalId = pPrincipalId_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteLaunchProfileMember_clientToken :: Lens.Lens' DeleteLaunchProfileMember (Prelude.Maybe Prelude.Text)
+deleteLaunchProfileMember_clientToken = Lens.lens (\DeleteLaunchProfileMember' {clientToken} -> clientToken) (\s@DeleteLaunchProfileMember' {} a -> s {clientToken = a} :: DeleteLaunchProfileMember)
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+deleteLaunchProfileMember_launchProfileId :: Lens.Lens' DeleteLaunchProfileMember Prelude.Text
+deleteLaunchProfileMember_launchProfileId = Lens.lens (\DeleteLaunchProfileMember' {launchProfileId} -> launchProfileId) (\s@DeleteLaunchProfileMember' {} a -> s {launchProfileId = a} :: DeleteLaunchProfileMember)
+
+-- | The principal ID. This currently supports a IAM Identity Center UserId.
+deleteLaunchProfileMember_principalId :: Lens.Lens' DeleteLaunchProfileMember Prelude.Text
+deleteLaunchProfileMember_principalId = Lens.lens (\DeleteLaunchProfileMember' {principalId} -> principalId) (\s@DeleteLaunchProfileMember' {} a -> s {principalId = a} :: DeleteLaunchProfileMember)
+
+-- | The studio ID.
+deleteLaunchProfileMember_studioId :: Lens.Lens' DeleteLaunchProfileMember Prelude.Text
+deleteLaunchProfileMember_studioId = Lens.lens (\DeleteLaunchProfileMember' {studioId} -> studioId) (\s@DeleteLaunchProfileMember' {} a -> s {studioId = a} :: DeleteLaunchProfileMember)
+
+instance Core.AWSRequest DeleteLaunchProfileMember where
+  type
+    AWSResponse DeleteLaunchProfileMember =
+      DeleteLaunchProfileMemberResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteLaunchProfileMemberResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLaunchProfileMember where
+  hashWithSalt _salt DeleteLaunchProfileMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteLaunchProfileMember where
+  rnf DeleteLaunchProfileMember' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteLaunchProfileMember where
+  toHeaders DeleteLaunchProfileMember' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteLaunchProfileMember where
+  toPath DeleteLaunchProfileMember' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/membership/",
+        Data.toBS principalId
+      ]
+
+instance Data.ToQuery DeleteLaunchProfileMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLaunchProfileMemberResponse' smart constructor.
+data DeleteLaunchProfileMemberResponse = DeleteLaunchProfileMemberResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchProfileMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteLaunchProfileMemberResponse_httpStatus' - The response's http status code.
+newDeleteLaunchProfileMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLaunchProfileMemberResponse
+newDeleteLaunchProfileMemberResponse pHttpStatus_ =
+  DeleteLaunchProfileMemberResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteLaunchProfileMemberResponse_httpStatus :: Lens.Lens' DeleteLaunchProfileMemberResponse Prelude.Int
+deleteLaunchProfileMemberResponse_httpStatus = Lens.lens (\DeleteLaunchProfileMemberResponse' {httpStatus} -> httpStatus) (\s@DeleteLaunchProfileMemberResponse' {} a -> s {httpStatus = a} :: DeleteLaunchProfileMemberResponse)
+
+instance
+  Prelude.NFData
+    DeleteLaunchProfileMemberResponse
+  where
+  rnf DeleteLaunchProfileMemberResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/DeleteStreamingImage.hs b/gen/Amazonka/Nimble/DeleteStreamingImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteStreamingImage.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.Nimble.DeleteStreamingImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete streaming image.
+module Amazonka.Nimble.DeleteStreamingImage
+  ( -- * Creating a Request
+    DeleteStreamingImage (..),
+    newDeleteStreamingImage,
+
+    -- * Request Lenses
+    deleteStreamingImage_clientToken,
+    deleteStreamingImage_streamingImageId,
+    deleteStreamingImage_studioId,
+
+    -- * Destructuring the Response
+    DeleteStreamingImageResponse (..),
+    newDeleteStreamingImageResponse,
+
+    -- * Response Lenses
+    deleteStreamingImageResponse_streamingImage,
+    deleteStreamingImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStreamingImage' smart constructor.
+data DeleteStreamingImage = DeleteStreamingImage'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The streaming image ID.
+    streamingImageId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStreamingImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteStreamingImage_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'streamingImageId', 'deleteStreamingImage_streamingImageId' - The streaming image ID.
+--
+-- 'studioId', 'deleteStreamingImage_studioId' - The studio ID.
+newDeleteStreamingImage ::
+  -- | 'streamingImageId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteStreamingImage
+newDeleteStreamingImage pStreamingImageId_ pStudioId_ =
+  DeleteStreamingImage'
+    { clientToken =
+        Prelude.Nothing,
+      streamingImageId = pStreamingImageId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteStreamingImage_clientToken :: Lens.Lens' DeleteStreamingImage (Prelude.Maybe Prelude.Text)
+deleteStreamingImage_clientToken = Lens.lens (\DeleteStreamingImage' {clientToken} -> clientToken) (\s@DeleteStreamingImage' {} a -> s {clientToken = a} :: DeleteStreamingImage)
+
+-- | The streaming image ID.
+deleteStreamingImage_streamingImageId :: Lens.Lens' DeleteStreamingImage Prelude.Text
+deleteStreamingImage_streamingImageId = Lens.lens (\DeleteStreamingImage' {streamingImageId} -> streamingImageId) (\s@DeleteStreamingImage' {} a -> s {streamingImageId = a} :: DeleteStreamingImage)
+
+-- | The studio ID.
+deleteStreamingImage_studioId :: Lens.Lens' DeleteStreamingImage Prelude.Text
+deleteStreamingImage_studioId = Lens.lens (\DeleteStreamingImage' {studioId} -> studioId) (\s@DeleteStreamingImage' {} a -> s {studioId = a} :: DeleteStreamingImage)
+
+instance Core.AWSRequest DeleteStreamingImage where
+  type
+    AWSResponse DeleteStreamingImage =
+      DeleteStreamingImageResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteStreamingImageResponse'
+            Prelude.<$> (x Data..?> "streamingImage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteStreamingImage where
+  hashWithSalt _salt DeleteStreamingImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` streamingImageId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteStreamingImage where
+  rnf DeleteStreamingImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf streamingImageId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteStreamingImage where
+  toHeaders DeleteStreamingImage' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteStreamingImage where
+  toPath DeleteStreamingImage' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-images/",
+        Data.toBS streamingImageId
+      ]
+
+instance Data.ToQuery DeleteStreamingImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStreamingImageResponse' smart constructor.
+data DeleteStreamingImageResponse = DeleteStreamingImageResponse'
+  { -- | The streaming image.
+    streamingImage :: Prelude.Maybe StreamingImage,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStreamingImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'streamingImage', 'deleteStreamingImageResponse_streamingImage' - The streaming image.
+--
+-- 'httpStatus', 'deleteStreamingImageResponse_httpStatus' - The response's http status code.
+newDeleteStreamingImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteStreamingImageResponse
+newDeleteStreamingImageResponse pHttpStatus_ =
+  DeleteStreamingImageResponse'
+    { streamingImage =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The streaming image.
+deleteStreamingImageResponse_streamingImage :: Lens.Lens' DeleteStreamingImageResponse (Prelude.Maybe StreamingImage)
+deleteStreamingImageResponse_streamingImage = Lens.lens (\DeleteStreamingImageResponse' {streamingImage} -> streamingImage) (\s@DeleteStreamingImageResponse' {} a -> s {streamingImage = a} :: DeleteStreamingImageResponse)
+
+-- | The response's http status code.
+deleteStreamingImageResponse_httpStatus :: Lens.Lens' DeleteStreamingImageResponse Prelude.Int
+deleteStreamingImageResponse_httpStatus = Lens.lens (\DeleteStreamingImageResponse' {httpStatus} -> httpStatus) (\s@DeleteStreamingImageResponse' {} a -> s {httpStatus = a} :: DeleteStreamingImageResponse)
+
+instance Prelude.NFData DeleteStreamingImageResponse where
+  rnf DeleteStreamingImageResponse' {..} =
+    Prelude.rnf streamingImage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/DeleteStreamingSession.hs b/gen/Amazonka/Nimble/DeleteStreamingSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteStreamingSession.hs
@@ -0,0 +1,209 @@
+{-# 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.Nimble.DeleteStreamingSession
+-- 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 streaming session resource.
+--
+-- After invoking this operation, use GetStreamingSession to poll the
+-- resource until it transitions to a @DELETED@ state.
+--
+-- A streaming session will count against your streaming session quota
+-- until it is marked @DELETED@.
+module Amazonka.Nimble.DeleteStreamingSession
+  ( -- * Creating a Request
+    DeleteStreamingSession (..),
+    newDeleteStreamingSession,
+
+    -- * Request Lenses
+    deleteStreamingSession_clientToken,
+    deleteStreamingSession_sessionId,
+    deleteStreamingSession_studioId,
+
+    -- * Destructuring the Response
+    DeleteStreamingSessionResponse (..),
+    newDeleteStreamingSessionResponse,
+
+    -- * Response Lenses
+    deleteStreamingSessionResponse_session,
+    deleteStreamingSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStreamingSession' smart constructor.
+data DeleteStreamingSession = DeleteStreamingSession'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The streaming session ID.
+    sessionId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStreamingSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteStreamingSession_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'sessionId', 'deleteStreamingSession_sessionId' - The streaming session ID.
+--
+-- 'studioId', 'deleteStreamingSession_studioId' - The studio ID.
+newDeleteStreamingSession ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteStreamingSession
+newDeleteStreamingSession pSessionId_ pStudioId_ =
+  DeleteStreamingSession'
+    { clientToken =
+        Prelude.Nothing,
+      sessionId = pSessionId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteStreamingSession_clientToken :: Lens.Lens' DeleteStreamingSession (Prelude.Maybe Prelude.Text)
+deleteStreamingSession_clientToken = Lens.lens (\DeleteStreamingSession' {clientToken} -> clientToken) (\s@DeleteStreamingSession' {} a -> s {clientToken = a} :: DeleteStreamingSession)
+
+-- | The streaming session ID.
+deleteStreamingSession_sessionId :: Lens.Lens' DeleteStreamingSession Prelude.Text
+deleteStreamingSession_sessionId = Lens.lens (\DeleteStreamingSession' {sessionId} -> sessionId) (\s@DeleteStreamingSession' {} a -> s {sessionId = a} :: DeleteStreamingSession)
+
+-- | The studio ID.
+deleteStreamingSession_studioId :: Lens.Lens' DeleteStreamingSession Prelude.Text
+deleteStreamingSession_studioId = Lens.lens (\DeleteStreamingSession' {studioId} -> studioId) (\s@DeleteStreamingSession' {} a -> s {studioId = a} :: DeleteStreamingSession)
+
+instance Core.AWSRequest DeleteStreamingSession where
+  type
+    AWSResponse DeleteStreamingSession =
+      DeleteStreamingSessionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteStreamingSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteStreamingSession where
+  hashWithSalt _salt DeleteStreamingSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteStreamingSession where
+  rnf DeleteStreamingSession' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteStreamingSession where
+  toHeaders DeleteStreamingSession' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteStreamingSession where
+  toPath DeleteStreamingSession' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions/",
+        Data.toBS sessionId
+      ]
+
+instance Data.ToQuery DeleteStreamingSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStreamingSessionResponse' smart constructor.
+data DeleteStreamingSessionResponse = DeleteStreamingSessionResponse'
+  { -- | The session.
+    session :: Prelude.Maybe StreamingSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStreamingSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'deleteStreamingSessionResponse_session' - The session.
+--
+-- 'httpStatus', 'deleteStreamingSessionResponse_httpStatus' - The response's http status code.
+newDeleteStreamingSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteStreamingSessionResponse
+newDeleteStreamingSessionResponse pHttpStatus_ =
+  DeleteStreamingSessionResponse'
+    { session =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The session.
+deleteStreamingSessionResponse_session :: Lens.Lens' DeleteStreamingSessionResponse (Prelude.Maybe StreamingSession)
+deleteStreamingSessionResponse_session = Lens.lens (\DeleteStreamingSessionResponse' {session} -> session) (\s@DeleteStreamingSessionResponse' {} a -> s {session = a} :: DeleteStreamingSessionResponse)
+
+-- | The response's http status code.
+deleteStreamingSessionResponse_httpStatus :: Lens.Lens' DeleteStreamingSessionResponse Prelude.Int
+deleteStreamingSessionResponse_httpStatus = Lens.lens (\DeleteStreamingSessionResponse' {httpStatus} -> httpStatus) (\s@DeleteStreamingSessionResponse' {} a -> s {httpStatus = a} :: DeleteStreamingSessionResponse)
+
+instance
+  Prelude.NFData
+    DeleteStreamingSessionResponse
+  where
+  rnf DeleteStreamingSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/DeleteStudio.hs b/gen/Amazonka/Nimble/DeleteStudio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteStudio.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.Nimble.DeleteStudio
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a studio resource.
+module Amazonka.Nimble.DeleteStudio
+  ( -- * Creating a Request
+    DeleteStudio (..),
+    newDeleteStudio,
+
+    -- * Request Lenses
+    deleteStudio_clientToken,
+    deleteStudio_studioId,
+
+    -- * Destructuring the Response
+    DeleteStudioResponse (..),
+    newDeleteStudioResponse,
+
+    -- * Response Lenses
+    deleteStudioResponse_httpStatus,
+    deleteStudioResponse_studio,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStudio' smart constructor.
+data DeleteStudio = DeleteStudio'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStudio' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteStudio_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'studioId', 'deleteStudio_studioId' - The studio ID.
+newDeleteStudio ::
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteStudio
+newDeleteStudio pStudioId_ =
+  DeleteStudio'
+    { clientToken = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteStudio_clientToken :: Lens.Lens' DeleteStudio (Prelude.Maybe Prelude.Text)
+deleteStudio_clientToken = Lens.lens (\DeleteStudio' {clientToken} -> clientToken) (\s@DeleteStudio' {} a -> s {clientToken = a} :: DeleteStudio)
+
+-- | The studio ID.
+deleteStudio_studioId :: Lens.Lens' DeleteStudio Prelude.Text
+deleteStudio_studioId = Lens.lens (\DeleteStudio' {studioId} -> studioId) (\s@DeleteStudio' {} a -> s {studioId = a} :: DeleteStudio)
+
+instance Core.AWSRequest DeleteStudio where
+  type AWSResponse DeleteStudio = DeleteStudioResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteStudioResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "studio")
+      )
+
+instance Prelude.Hashable DeleteStudio where
+  hashWithSalt _salt DeleteStudio' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteStudio where
+  rnf DeleteStudio' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteStudio where
+  toHeaders DeleteStudio' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteStudio where
+  toPath DeleteStudio' {..} =
+    Prelude.mconcat
+      ["/2020-08-01/studios/", Data.toBS studioId]
+
+instance Data.ToQuery DeleteStudio where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStudioResponse' smart constructor.
+data DeleteStudioResponse = DeleteStudioResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about a studio.
+    studio :: Studio
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStudioResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteStudioResponse_httpStatus' - The response's http status code.
+--
+-- 'studio', 'deleteStudioResponse_studio' - Information about a studio.
+newDeleteStudioResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'studio'
+  Studio ->
+  DeleteStudioResponse
+newDeleteStudioResponse pHttpStatus_ pStudio_ =
+  DeleteStudioResponse'
+    { httpStatus = pHttpStatus_,
+      studio = pStudio_
+    }
+
+-- | The response's http status code.
+deleteStudioResponse_httpStatus :: Lens.Lens' DeleteStudioResponse Prelude.Int
+deleteStudioResponse_httpStatus = Lens.lens (\DeleteStudioResponse' {httpStatus} -> httpStatus) (\s@DeleteStudioResponse' {} a -> s {httpStatus = a} :: DeleteStudioResponse)
+
+-- | Information about a studio.
+deleteStudioResponse_studio :: Lens.Lens' DeleteStudioResponse Studio
+deleteStudioResponse_studio = Lens.lens (\DeleteStudioResponse' {studio} -> studio) (\s@DeleteStudioResponse' {} a -> s {studio = a} :: DeleteStudioResponse)
+
+instance Prelude.NFData DeleteStudioResponse where
+  rnf DeleteStudioResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf studio
diff --git a/gen/Amazonka/Nimble/DeleteStudioComponent.hs b/gen/Amazonka/Nimble/DeleteStudioComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteStudioComponent.hs
@@ -0,0 +1,202 @@
+{-# 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.Nimble.DeleteStudioComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a studio component resource.
+module Amazonka.Nimble.DeleteStudioComponent
+  ( -- * Creating a Request
+    DeleteStudioComponent (..),
+    newDeleteStudioComponent,
+
+    -- * Request Lenses
+    deleteStudioComponent_clientToken,
+    deleteStudioComponent_studioComponentId,
+    deleteStudioComponent_studioId,
+
+    -- * Destructuring the Response
+    DeleteStudioComponentResponse (..),
+    newDeleteStudioComponentResponse,
+
+    -- * Response Lenses
+    deleteStudioComponentResponse_studioComponent,
+    deleteStudioComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStudioComponent' smart constructor.
+data DeleteStudioComponent = DeleteStudioComponent'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The studio component ID.
+    studioComponentId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStudioComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteStudioComponent_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'studioComponentId', 'deleteStudioComponent_studioComponentId' - The studio component ID.
+--
+-- 'studioId', 'deleteStudioComponent_studioId' - The studio ID.
+newDeleteStudioComponent ::
+  -- | 'studioComponentId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteStudioComponent
+newDeleteStudioComponent
+  pStudioComponentId_
+  pStudioId_ =
+    DeleteStudioComponent'
+      { clientToken =
+          Prelude.Nothing,
+        studioComponentId = pStudioComponentId_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteStudioComponent_clientToken :: Lens.Lens' DeleteStudioComponent (Prelude.Maybe Prelude.Text)
+deleteStudioComponent_clientToken = Lens.lens (\DeleteStudioComponent' {clientToken} -> clientToken) (\s@DeleteStudioComponent' {} a -> s {clientToken = a} :: DeleteStudioComponent)
+
+-- | The studio component ID.
+deleteStudioComponent_studioComponentId :: Lens.Lens' DeleteStudioComponent Prelude.Text
+deleteStudioComponent_studioComponentId = Lens.lens (\DeleteStudioComponent' {studioComponentId} -> studioComponentId) (\s@DeleteStudioComponent' {} a -> s {studioComponentId = a} :: DeleteStudioComponent)
+
+-- | The studio ID.
+deleteStudioComponent_studioId :: Lens.Lens' DeleteStudioComponent Prelude.Text
+deleteStudioComponent_studioId = Lens.lens (\DeleteStudioComponent' {studioId} -> studioId) (\s@DeleteStudioComponent' {} a -> s {studioId = a} :: DeleteStudioComponent)
+
+instance Core.AWSRequest DeleteStudioComponent where
+  type
+    AWSResponse DeleteStudioComponent =
+      DeleteStudioComponentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteStudioComponentResponse'
+            Prelude.<$> (x Data..?> "studioComponent")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteStudioComponent where
+  hashWithSalt _salt DeleteStudioComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` studioComponentId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteStudioComponent where
+  rnf DeleteStudioComponent' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteStudioComponent where
+  toHeaders DeleteStudioComponent' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteStudioComponent where
+  toPath DeleteStudioComponent' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/studio-components/",
+        Data.toBS studioComponentId
+      ]
+
+instance Data.ToQuery DeleteStudioComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStudioComponentResponse' smart constructor.
+data DeleteStudioComponentResponse = DeleteStudioComponentResponse'
+  { -- | Information about the studio component.
+    studioComponent :: Prelude.Maybe StudioComponent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStudioComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studioComponent', 'deleteStudioComponentResponse_studioComponent' - Information about the studio component.
+--
+-- 'httpStatus', 'deleteStudioComponentResponse_httpStatus' - The response's http status code.
+newDeleteStudioComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteStudioComponentResponse
+newDeleteStudioComponentResponse pHttpStatus_ =
+  DeleteStudioComponentResponse'
+    { studioComponent =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the studio component.
+deleteStudioComponentResponse_studioComponent :: Lens.Lens' DeleteStudioComponentResponse (Prelude.Maybe StudioComponent)
+deleteStudioComponentResponse_studioComponent = Lens.lens (\DeleteStudioComponentResponse' {studioComponent} -> studioComponent) (\s@DeleteStudioComponentResponse' {} a -> s {studioComponent = a} :: DeleteStudioComponentResponse)
+
+-- | The response's http status code.
+deleteStudioComponentResponse_httpStatus :: Lens.Lens' DeleteStudioComponentResponse Prelude.Int
+deleteStudioComponentResponse_httpStatus = Lens.lens (\DeleteStudioComponentResponse' {httpStatus} -> httpStatus) (\s@DeleteStudioComponentResponse' {} a -> s {httpStatus = a} :: DeleteStudioComponentResponse)
+
+instance Prelude.NFData DeleteStudioComponentResponse where
+  rnf DeleteStudioComponentResponse' {..} =
+    Prelude.rnf studioComponent
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/DeleteStudioMember.hs b/gen/Amazonka/Nimble/DeleteStudioMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/DeleteStudioMember.hs
@@ -0,0 +1,187 @@
+{-# 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.Nimble.DeleteStudioMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a user from studio membership.
+module Amazonka.Nimble.DeleteStudioMember
+  ( -- * Creating a Request
+    DeleteStudioMember (..),
+    newDeleteStudioMember,
+
+    -- * Request Lenses
+    deleteStudioMember_clientToken,
+    deleteStudioMember_principalId,
+    deleteStudioMember_studioId,
+
+    -- * Destructuring the Response
+    DeleteStudioMemberResponse (..),
+    newDeleteStudioMemberResponse,
+
+    -- * Response Lenses
+    deleteStudioMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStudioMember' smart constructor.
+data DeleteStudioMember = DeleteStudioMember'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The principal ID. This currently supports a IAM Identity Center UserId.
+    principalId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStudioMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteStudioMember_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'principalId', 'deleteStudioMember_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
+--
+-- 'studioId', 'deleteStudioMember_studioId' - The studio ID.
+newDeleteStudioMember ::
+  -- | 'principalId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  DeleteStudioMember
+newDeleteStudioMember pPrincipalId_ pStudioId_ =
+  DeleteStudioMember'
+    { clientToken = Prelude.Nothing,
+      principalId = pPrincipalId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+deleteStudioMember_clientToken :: Lens.Lens' DeleteStudioMember (Prelude.Maybe Prelude.Text)
+deleteStudioMember_clientToken = Lens.lens (\DeleteStudioMember' {clientToken} -> clientToken) (\s@DeleteStudioMember' {} a -> s {clientToken = a} :: DeleteStudioMember)
+
+-- | The principal ID. This currently supports a IAM Identity Center UserId.
+deleteStudioMember_principalId :: Lens.Lens' DeleteStudioMember Prelude.Text
+deleteStudioMember_principalId = Lens.lens (\DeleteStudioMember' {principalId} -> principalId) (\s@DeleteStudioMember' {} a -> s {principalId = a} :: DeleteStudioMember)
+
+-- | The studio ID.
+deleteStudioMember_studioId :: Lens.Lens' DeleteStudioMember Prelude.Text
+deleteStudioMember_studioId = Lens.lens (\DeleteStudioMember' {studioId} -> studioId) (\s@DeleteStudioMember' {} a -> s {studioId = a} :: DeleteStudioMember)
+
+instance Core.AWSRequest DeleteStudioMember where
+  type
+    AWSResponse DeleteStudioMember =
+      DeleteStudioMemberResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteStudioMemberResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteStudioMember where
+  hashWithSalt _salt DeleteStudioMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData DeleteStudioMember where
+  rnf DeleteStudioMember' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders DeleteStudioMember where
+  toHeaders DeleteStudioMember' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath DeleteStudioMember where
+  toPath DeleteStudioMember' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/membership/",
+        Data.toBS principalId
+      ]
+
+instance Data.ToQuery DeleteStudioMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStudioMemberResponse' smart constructor.
+data DeleteStudioMemberResponse = DeleteStudioMemberResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStudioMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteStudioMemberResponse_httpStatus' - The response's http status code.
+newDeleteStudioMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteStudioMemberResponse
+newDeleteStudioMemberResponse pHttpStatus_ =
+  DeleteStudioMemberResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteStudioMemberResponse_httpStatus :: Lens.Lens' DeleteStudioMemberResponse Prelude.Int
+deleteStudioMemberResponse_httpStatus = Lens.lens (\DeleteStudioMemberResponse' {httpStatus} -> httpStatus) (\s@DeleteStudioMemberResponse' {} a -> s {httpStatus = a} :: DeleteStudioMemberResponse)
+
+instance Prelude.NFData DeleteStudioMemberResponse where
+  rnf DeleteStudioMemberResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetEula.hs b/gen/Amazonka/Nimble/GetEula.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetEula.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.GetEula
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get EULA.
+module Amazonka.Nimble.GetEula
+  ( -- * Creating a Request
+    GetEula (..),
+    newGetEula,
+
+    -- * Request Lenses
+    getEula_eulaId,
+
+    -- * Destructuring the Response
+    GetEulaResponse (..),
+    newGetEulaResponse,
+
+    -- * Response Lenses
+    getEulaResponse_eula,
+    getEulaResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEula' smart constructor.
+data GetEula = GetEula'
+  { -- | The EULA ID.
+    eulaId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEula' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eulaId', 'getEula_eulaId' - The EULA ID.
+newGetEula ::
+  -- | 'eulaId'
+  Prelude.Text ->
+  GetEula
+newGetEula pEulaId_ = GetEula' {eulaId = pEulaId_}
+
+-- | The EULA ID.
+getEula_eulaId :: Lens.Lens' GetEula Prelude.Text
+getEula_eulaId = Lens.lens (\GetEula' {eulaId} -> eulaId) (\s@GetEula' {} a -> s {eulaId = a} :: GetEula)
+
+instance Core.AWSRequest GetEula where
+  type AWSResponse GetEula = GetEulaResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEulaResponse'
+            Prelude.<$> (x Data..?> "eula")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEula where
+  hashWithSalt _salt GetEula' {..} =
+    _salt `Prelude.hashWithSalt` eulaId
+
+instance Prelude.NFData GetEula where
+  rnf GetEula' {..} = Prelude.rnf eulaId
+
+instance Data.ToHeaders GetEula where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEula where
+  toPath GetEula' {..} =
+    Prelude.mconcat
+      ["/2020-08-01/eulas/", Data.toBS eulaId]
+
+instance Data.ToQuery GetEula where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEulaResponse' smart constructor.
+data GetEulaResponse = GetEulaResponse'
+  { -- | The EULA.
+    eula :: Prelude.Maybe Eula,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEulaResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eula', 'getEulaResponse_eula' - The EULA.
+--
+-- 'httpStatus', 'getEulaResponse_httpStatus' - The response's http status code.
+newGetEulaResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEulaResponse
+newGetEulaResponse pHttpStatus_ =
+  GetEulaResponse'
+    { eula = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The EULA.
+getEulaResponse_eula :: Lens.Lens' GetEulaResponse (Prelude.Maybe Eula)
+getEulaResponse_eula = Lens.lens (\GetEulaResponse' {eula} -> eula) (\s@GetEulaResponse' {} a -> s {eula = a} :: GetEulaResponse)
+
+-- | The response's http status code.
+getEulaResponse_httpStatus :: Lens.Lens' GetEulaResponse Prelude.Int
+getEulaResponse_httpStatus = Lens.lens (\GetEulaResponse' {httpStatus} -> httpStatus) (\s@GetEulaResponse' {} a -> s {httpStatus = a} :: GetEulaResponse)
+
+instance Prelude.NFData GetEulaResponse where
+  rnf GetEulaResponse' {..} =
+    Prelude.rnf eula
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetLaunchProfile.hs b/gen/Amazonka/Nimble/GetLaunchProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetLaunchProfile.hs
@@ -0,0 +1,185 @@
+{-# 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.Nimble.GetLaunchProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a launch profile.
+module Amazonka.Nimble.GetLaunchProfile
+  ( -- * Creating a Request
+    GetLaunchProfile (..),
+    newGetLaunchProfile,
+
+    -- * Request Lenses
+    getLaunchProfile_launchProfileId,
+    getLaunchProfile_studioId,
+
+    -- * Destructuring the Response
+    GetLaunchProfileResponse (..),
+    newGetLaunchProfileResponse,
+
+    -- * Response Lenses
+    getLaunchProfileResponse_launchProfile,
+    getLaunchProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLaunchProfile' smart constructor.
+data GetLaunchProfile = GetLaunchProfile'
+  { -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfileId', 'getLaunchProfile_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'studioId', 'getLaunchProfile_studioId' - The studio ID.
+newGetLaunchProfile ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetLaunchProfile
+newGetLaunchProfile pLaunchProfileId_ pStudioId_ =
+  GetLaunchProfile'
+    { launchProfileId =
+        pLaunchProfileId_,
+      studioId = pStudioId_
+    }
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+getLaunchProfile_launchProfileId :: Lens.Lens' GetLaunchProfile Prelude.Text
+getLaunchProfile_launchProfileId = Lens.lens (\GetLaunchProfile' {launchProfileId} -> launchProfileId) (\s@GetLaunchProfile' {} a -> s {launchProfileId = a} :: GetLaunchProfile)
+
+-- | The studio ID.
+getLaunchProfile_studioId :: Lens.Lens' GetLaunchProfile Prelude.Text
+getLaunchProfile_studioId = Lens.lens (\GetLaunchProfile' {studioId} -> studioId) (\s@GetLaunchProfile' {} a -> s {studioId = a} :: GetLaunchProfile)
+
+instance Core.AWSRequest GetLaunchProfile where
+  type
+    AWSResponse GetLaunchProfile =
+      GetLaunchProfileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLaunchProfileResponse'
+            Prelude.<$> (x Data..?> "launchProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLaunchProfile where
+  hashWithSalt _salt GetLaunchProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetLaunchProfile where
+  rnf GetLaunchProfile' {..} =
+    Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetLaunchProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetLaunchProfile where
+  toPath GetLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId
+      ]
+
+instance Data.ToQuery GetLaunchProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLaunchProfileResponse' smart constructor.
+data GetLaunchProfileResponse = GetLaunchProfileResponse'
+  { -- | The launch profile.
+    launchProfile :: Prelude.Maybe LaunchProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfile', 'getLaunchProfileResponse_launchProfile' - The launch profile.
+--
+-- 'httpStatus', 'getLaunchProfileResponse_httpStatus' - The response's http status code.
+newGetLaunchProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLaunchProfileResponse
+newGetLaunchProfileResponse pHttpStatus_ =
+  GetLaunchProfileResponse'
+    { launchProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The launch profile.
+getLaunchProfileResponse_launchProfile :: Lens.Lens' GetLaunchProfileResponse (Prelude.Maybe LaunchProfile)
+getLaunchProfileResponse_launchProfile = Lens.lens (\GetLaunchProfileResponse' {launchProfile} -> launchProfile) (\s@GetLaunchProfileResponse' {} a -> s {launchProfile = a} :: GetLaunchProfileResponse)
+
+-- | The response's http status code.
+getLaunchProfileResponse_httpStatus :: Lens.Lens' GetLaunchProfileResponse Prelude.Int
+getLaunchProfileResponse_httpStatus = Lens.lens (\GetLaunchProfileResponse' {httpStatus} -> httpStatus) (\s@GetLaunchProfileResponse' {} a -> s {httpStatus = a} :: GetLaunchProfileResponse)
+
+instance Prelude.NFData GetLaunchProfileResponse where
+  rnf GetLaunchProfileResponse' {..} =
+    Prelude.rnf launchProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetLaunchProfileDetails.hs b/gen/Amazonka/Nimble/GetLaunchProfileDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetLaunchProfileDetails.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.GetLaunchProfileDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launch profile details include the launch profile resource and summary
+-- information of resources that are used by, or available to, the launch
+-- profile. This includes the name and description of all studio components
+-- used by the launch profiles, and the name and description of streaming
+-- images that can be used with this launch profile.
+module Amazonka.Nimble.GetLaunchProfileDetails
+  ( -- * Creating a Request
+    GetLaunchProfileDetails (..),
+    newGetLaunchProfileDetails,
+
+    -- * Request Lenses
+    getLaunchProfileDetails_launchProfileId,
+    getLaunchProfileDetails_studioId,
+
+    -- * Destructuring the Response
+    GetLaunchProfileDetailsResponse (..),
+    newGetLaunchProfileDetailsResponse,
+
+    -- * Response Lenses
+    getLaunchProfileDetailsResponse_launchProfile,
+    getLaunchProfileDetailsResponse_streamingImages,
+    getLaunchProfileDetailsResponse_studioComponentSummaries,
+    getLaunchProfileDetailsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLaunchProfileDetails' smart constructor.
+data GetLaunchProfileDetails = GetLaunchProfileDetails'
+  { -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfileId', 'getLaunchProfileDetails_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'studioId', 'getLaunchProfileDetails_studioId' - The studio ID.
+newGetLaunchProfileDetails ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetLaunchProfileDetails
+newGetLaunchProfileDetails
+  pLaunchProfileId_
+  pStudioId_ =
+    GetLaunchProfileDetails'
+      { launchProfileId =
+          pLaunchProfileId_,
+        studioId = pStudioId_
+      }
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+getLaunchProfileDetails_launchProfileId :: Lens.Lens' GetLaunchProfileDetails Prelude.Text
+getLaunchProfileDetails_launchProfileId = Lens.lens (\GetLaunchProfileDetails' {launchProfileId} -> launchProfileId) (\s@GetLaunchProfileDetails' {} a -> s {launchProfileId = a} :: GetLaunchProfileDetails)
+
+-- | The studio ID.
+getLaunchProfileDetails_studioId :: Lens.Lens' GetLaunchProfileDetails Prelude.Text
+getLaunchProfileDetails_studioId = Lens.lens (\GetLaunchProfileDetails' {studioId} -> studioId) (\s@GetLaunchProfileDetails' {} a -> s {studioId = a} :: GetLaunchProfileDetails)
+
+instance Core.AWSRequest GetLaunchProfileDetails where
+  type
+    AWSResponse GetLaunchProfileDetails =
+      GetLaunchProfileDetailsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLaunchProfileDetailsResponse'
+            Prelude.<$> (x Data..?> "launchProfile")
+            Prelude.<*> ( x
+                            Data..?> "streamingImages"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "studioComponentSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLaunchProfileDetails where
+  hashWithSalt _salt GetLaunchProfileDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetLaunchProfileDetails where
+  rnf GetLaunchProfileDetails' {..} =
+    Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetLaunchProfileDetails where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetLaunchProfileDetails where
+  toPath GetLaunchProfileDetails' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/details"
+      ]
+
+instance Data.ToQuery GetLaunchProfileDetails where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLaunchProfileDetailsResponse' smart constructor.
+data GetLaunchProfileDetailsResponse = GetLaunchProfileDetailsResponse'
+  { -- | The launch profile.
+    launchProfile :: Prelude.Maybe LaunchProfile,
+    -- | A collection of streaming images.
+    streamingImages :: Prelude.Maybe [StreamingImage],
+    -- | A collection of studio component summaries.
+    studioComponentSummaries :: Prelude.Maybe [StudioComponentSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileDetailsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfile', 'getLaunchProfileDetailsResponse_launchProfile' - The launch profile.
+--
+-- 'streamingImages', 'getLaunchProfileDetailsResponse_streamingImages' - A collection of streaming images.
+--
+-- 'studioComponentSummaries', 'getLaunchProfileDetailsResponse_studioComponentSummaries' - A collection of studio component summaries.
+--
+-- 'httpStatus', 'getLaunchProfileDetailsResponse_httpStatus' - The response's http status code.
+newGetLaunchProfileDetailsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLaunchProfileDetailsResponse
+newGetLaunchProfileDetailsResponse pHttpStatus_ =
+  GetLaunchProfileDetailsResponse'
+    { launchProfile =
+        Prelude.Nothing,
+      streamingImages = Prelude.Nothing,
+      studioComponentSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The launch profile.
+getLaunchProfileDetailsResponse_launchProfile :: Lens.Lens' GetLaunchProfileDetailsResponse (Prelude.Maybe LaunchProfile)
+getLaunchProfileDetailsResponse_launchProfile = Lens.lens (\GetLaunchProfileDetailsResponse' {launchProfile} -> launchProfile) (\s@GetLaunchProfileDetailsResponse' {} a -> s {launchProfile = a} :: GetLaunchProfileDetailsResponse)
+
+-- | A collection of streaming images.
+getLaunchProfileDetailsResponse_streamingImages :: Lens.Lens' GetLaunchProfileDetailsResponse (Prelude.Maybe [StreamingImage])
+getLaunchProfileDetailsResponse_streamingImages = Lens.lens (\GetLaunchProfileDetailsResponse' {streamingImages} -> streamingImages) (\s@GetLaunchProfileDetailsResponse' {} a -> s {streamingImages = a} :: GetLaunchProfileDetailsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A collection of studio component summaries.
+getLaunchProfileDetailsResponse_studioComponentSummaries :: Lens.Lens' GetLaunchProfileDetailsResponse (Prelude.Maybe [StudioComponentSummary])
+getLaunchProfileDetailsResponse_studioComponentSummaries = Lens.lens (\GetLaunchProfileDetailsResponse' {studioComponentSummaries} -> studioComponentSummaries) (\s@GetLaunchProfileDetailsResponse' {} a -> s {studioComponentSummaries = a} :: GetLaunchProfileDetailsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getLaunchProfileDetailsResponse_httpStatus :: Lens.Lens' GetLaunchProfileDetailsResponse Prelude.Int
+getLaunchProfileDetailsResponse_httpStatus = Lens.lens (\GetLaunchProfileDetailsResponse' {httpStatus} -> httpStatus) (\s@GetLaunchProfileDetailsResponse' {} a -> s {httpStatus = a} :: GetLaunchProfileDetailsResponse)
+
+instance
+  Prelude.NFData
+    GetLaunchProfileDetailsResponse
+  where
+  rnf GetLaunchProfileDetailsResponse' {..} =
+    Prelude.rnf launchProfile
+      `Prelude.seq` Prelude.rnf streamingImages
+      `Prelude.seq` Prelude.rnf studioComponentSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetLaunchProfileInitialization.hs b/gen/Amazonka/Nimble/GetLaunchProfileInitialization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetLaunchProfileInitialization.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.GetLaunchProfileInitialization
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a launch profile initialization.
+module Amazonka.Nimble.GetLaunchProfileInitialization
+  ( -- * Creating a Request
+    GetLaunchProfileInitialization (..),
+    newGetLaunchProfileInitialization,
+
+    -- * Request Lenses
+    getLaunchProfileInitialization_launchProfileId,
+    getLaunchProfileInitialization_launchProfileProtocolVersions,
+    getLaunchProfileInitialization_launchPurpose,
+    getLaunchProfileInitialization_platform,
+    getLaunchProfileInitialization_studioId,
+
+    -- * Destructuring the Response
+    GetLaunchProfileInitializationResponse (..),
+    newGetLaunchProfileInitializationResponse,
+
+    -- * Response Lenses
+    getLaunchProfileInitializationResponse_launchProfileInitialization,
+    getLaunchProfileInitializationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLaunchProfileInitialization' smart constructor.
+data GetLaunchProfileInitialization = GetLaunchProfileInitialization'
+  { -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The launch profile protocol versions supported by the client.
+    launchProfileProtocolVersions :: [Prelude.Text],
+    -- | The launch purpose.
+    launchPurpose :: Prelude.Text,
+    -- | The platform where this Launch Profile will be used, either Windows or
+    -- Linux.
+    platform :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileInitialization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfileId', 'getLaunchProfileInitialization_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'launchProfileProtocolVersions', 'getLaunchProfileInitialization_launchProfileProtocolVersions' - The launch profile protocol versions supported by the client.
+--
+-- 'launchPurpose', 'getLaunchProfileInitialization_launchPurpose' - The launch purpose.
+--
+-- 'platform', 'getLaunchProfileInitialization_platform' - The platform where this Launch Profile will be used, either Windows or
+-- Linux.
+--
+-- 'studioId', 'getLaunchProfileInitialization_studioId' - The studio ID.
+newGetLaunchProfileInitialization ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'launchPurpose'
+  Prelude.Text ->
+  -- | 'platform'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetLaunchProfileInitialization
+newGetLaunchProfileInitialization
+  pLaunchProfileId_
+  pLaunchPurpose_
+  pPlatform_
+  pStudioId_ =
+    GetLaunchProfileInitialization'
+      { launchProfileId =
+          pLaunchProfileId_,
+        launchProfileProtocolVersions =
+          Prelude.mempty,
+        launchPurpose = pLaunchPurpose_,
+        platform = pPlatform_,
+        studioId = pStudioId_
+      }
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+getLaunchProfileInitialization_launchProfileId :: Lens.Lens' GetLaunchProfileInitialization Prelude.Text
+getLaunchProfileInitialization_launchProfileId = Lens.lens (\GetLaunchProfileInitialization' {launchProfileId} -> launchProfileId) (\s@GetLaunchProfileInitialization' {} a -> s {launchProfileId = a} :: GetLaunchProfileInitialization)
+
+-- | The launch profile protocol versions supported by the client.
+getLaunchProfileInitialization_launchProfileProtocolVersions :: Lens.Lens' GetLaunchProfileInitialization [Prelude.Text]
+getLaunchProfileInitialization_launchProfileProtocolVersions = Lens.lens (\GetLaunchProfileInitialization' {launchProfileProtocolVersions} -> launchProfileProtocolVersions) (\s@GetLaunchProfileInitialization' {} a -> s {launchProfileProtocolVersions = a} :: GetLaunchProfileInitialization) Prelude.. Lens.coerced
+
+-- | The launch purpose.
+getLaunchProfileInitialization_launchPurpose :: Lens.Lens' GetLaunchProfileInitialization Prelude.Text
+getLaunchProfileInitialization_launchPurpose = Lens.lens (\GetLaunchProfileInitialization' {launchPurpose} -> launchPurpose) (\s@GetLaunchProfileInitialization' {} a -> s {launchPurpose = a} :: GetLaunchProfileInitialization)
+
+-- | The platform where this Launch Profile will be used, either Windows or
+-- Linux.
+getLaunchProfileInitialization_platform :: Lens.Lens' GetLaunchProfileInitialization Prelude.Text
+getLaunchProfileInitialization_platform = Lens.lens (\GetLaunchProfileInitialization' {platform} -> platform) (\s@GetLaunchProfileInitialization' {} a -> s {platform = a} :: GetLaunchProfileInitialization)
+
+-- | The studio ID.
+getLaunchProfileInitialization_studioId :: Lens.Lens' GetLaunchProfileInitialization Prelude.Text
+getLaunchProfileInitialization_studioId = Lens.lens (\GetLaunchProfileInitialization' {studioId} -> studioId) (\s@GetLaunchProfileInitialization' {} a -> s {studioId = a} :: GetLaunchProfileInitialization)
+
+instance
+  Core.AWSRequest
+    GetLaunchProfileInitialization
+  where
+  type
+    AWSResponse GetLaunchProfileInitialization =
+      GetLaunchProfileInitializationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLaunchProfileInitializationResponse'
+            Prelude.<$> (x Data..?> "launchProfileInitialization")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetLaunchProfileInitialization
+  where
+  hashWithSalt
+    _salt
+    GetLaunchProfileInitialization' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchProfileId
+        `Prelude.hashWithSalt` launchProfileProtocolVersions
+        `Prelude.hashWithSalt` launchPurpose
+        `Prelude.hashWithSalt` platform
+        `Prelude.hashWithSalt` studioId
+
+instance
+  Prelude.NFData
+    GetLaunchProfileInitialization
+  where
+  rnf GetLaunchProfileInitialization' {..} =
+    Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf launchProfileProtocolVersions
+      `Prelude.seq` Prelude.rnf launchPurpose
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf studioId
+
+instance
+  Data.ToHeaders
+    GetLaunchProfileInitialization
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetLaunchProfileInitialization where
+  toPath GetLaunchProfileInitialization' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/init"
+      ]
+
+instance Data.ToQuery GetLaunchProfileInitialization where
+  toQuery GetLaunchProfileInitialization' {..} =
+    Prelude.mconcat
+      [ "launchProfileProtocolVersions"
+          Data.=: Data.toQueryList
+            "member"
+            launchProfileProtocolVersions,
+        "launchPurpose" Data.=: launchPurpose,
+        "platform" Data.=: platform
+      ]
+
+-- | /See:/ 'newGetLaunchProfileInitializationResponse' smart constructor.
+data GetLaunchProfileInitializationResponse = GetLaunchProfileInitializationResponse'
+  { -- | The launch profile initialization.
+    launchProfileInitialization :: Prelude.Maybe LaunchProfileInitialization,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileInitializationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfileInitialization', 'getLaunchProfileInitializationResponse_launchProfileInitialization' - The launch profile initialization.
+--
+-- 'httpStatus', 'getLaunchProfileInitializationResponse_httpStatus' - The response's http status code.
+newGetLaunchProfileInitializationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLaunchProfileInitializationResponse
+newGetLaunchProfileInitializationResponse
+  pHttpStatus_ =
+    GetLaunchProfileInitializationResponse'
+      { launchProfileInitialization =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The launch profile initialization.
+getLaunchProfileInitializationResponse_launchProfileInitialization :: Lens.Lens' GetLaunchProfileInitializationResponse (Prelude.Maybe LaunchProfileInitialization)
+getLaunchProfileInitializationResponse_launchProfileInitialization = Lens.lens (\GetLaunchProfileInitializationResponse' {launchProfileInitialization} -> launchProfileInitialization) (\s@GetLaunchProfileInitializationResponse' {} a -> s {launchProfileInitialization = a} :: GetLaunchProfileInitializationResponse)
+
+-- | The response's http status code.
+getLaunchProfileInitializationResponse_httpStatus :: Lens.Lens' GetLaunchProfileInitializationResponse Prelude.Int
+getLaunchProfileInitializationResponse_httpStatus = Lens.lens (\GetLaunchProfileInitializationResponse' {httpStatus} -> httpStatus) (\s@GetLaunchProfileInitializationResponse' {} a -> s {httpStatus = a} :: GetLaunchProfileInitializationResponse)
+
+instance
+  Prelude.NFData
+    GetLaunchProfileInitializationResponse
+  where
+  rnf GetLaunchProfileInitializationResponse' {..} =
+    Prelude.rnf launchProfileInitialization
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetLaunchProfileMember.hs b/gen/Amazonka/Nimble/GetLaunchProfileMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetLaunchProfileMember.hs
@@ -0,0 +1,207 @@
+{-# 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.Nimble.GetLaunchProfileMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a user persona in launch profile membership.
+module Amazonka.Nimble.GetLaunchProfileMember
+  ( -- * Creating a Request
+    GetLaunchProfileMember (..),
+    newGetLaunchProfileMember,
+
+    -- * Request Lenses
+    getLaunchProfileMember_launchProfileId,
+    getLaunchProfileMember_principalId,
+    getLaunchProfileMember_studioId,
+
+    -- * Destructuring the Response
+    GetLaunchProfileMemberResponse (..),
+    newGetLaunchProfileMemberResponse,
+
+    -- * Response Lenses
+    getLaunchProfileMemberResponse_member,
+    getLaunchProfileMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLaunchProfileMember' smart constructor.
+data GetLaunchProfileMember = GetLaunchProfileMember'
+  { -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The principal ID. This currently supports a IAM Identity Center UserId.
+    principalId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfileId', 'getLaunchProfileMember_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'principalId', 'getLaunchProfileMember_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
+--
+-- 'studioId', 'getLaunchProfileMember_studioId' - The studio ID.
+newGetLaunchProfileMember ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'principalId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetLaunchProfileMember
+newGetLaunchProfileMember
+  pLaunchProfileId_
+  pPrincipalId_
+  pStudioId_ =
+    GetLaunchProfileMember'
+      { launchProfileId =
+          pLaunchProfileId_,
+        principalId = pPrincipalId_,
+        studioId = pStudioId_
+      }
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+getLaunchProfileMember_launchProfileId :: Lens.Lens' GetLaunchProfileMember Prelude.Text
+getLaunchProfileMember_launchProfileId = Lens.lens (\GetLaunchProfileMember' {launchProfileId} -> launchProfileId) (\s@GetLaunchProfileMember' {} a -> s {launchProfileId = a} :: GetLaunchProfileMember)
+
+-- | The principal ID. This currently supports a IAM Identity Center UserId.
+getLaunchProfileMember_principalId :: Lens.Lens' GetLaunchProfileMember Prelude.Text
+getLaunchProfileMember_principalId = Lens.lens (\GetLaunchProfileMember' {principalId} -> principalId) (\s@GetLaunchProfileMember' {} a -> s {principalId = a} :: GetLaunchProfileMember)
+
+-- | The studio ID.
+getLaunchProfileMember_studioId :: Lens.Lens' GetLaunchProfileMember Prelude.Text
+getLaunchProfileMember_studioId = Lens.lens (\GetLaunchProfileMember' {studioId} -> studioId) (\s@GetLaunchProfileMember' {} a -> s {studioId = a} :: GetLaunchProfileMember)
+
+instance Core.AWSRequest GetLaunchProfileMember where
+  type
+    AWSResponse GetLaunchProfileMember =
+      GetLaunchProfileMemberResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLaunchProfileMemberResponse'
+            Prelude.<$> (x Data..?> "member")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLaunchProfileMember where
+  hashWithSalt _salt GetLaunchProfileMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetLaunchProfileMember where
+  rnf GetLaunchProfileMember' {..} =
+    Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetLaunchProfileMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetLaunchProfileMember where
+  toPath GetLaunchProfileMember' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/membership/",
+        Data.toBS principalId
+      ]
+
+instance Data.ToQuery GetLaunchProfileMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLaunchProfileMemberResponse' smart constructor.
+data GetLaunchProfileMemberResponse = GetLaunchProfileMemberResponse'
+  { -- | The member.
+    member :: Prelude.Maybe LaunchProfileMembership,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchProfileMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'member', 'getLaunchProfileMemberResponse_member' - The member.
+--
+-- 'httpStatus', 'getLaunchProfileMemberResponse_httpStatus' - The response's http status code.
+newGetLaunchProfileMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLaunchProfileMemberResponse
+newGetLaunchProfileMemberResponse pHttpStatus_ =
+  GetLaunchProfileMemberResponse'
+    { member =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The member.
+getLaunchProfileMemberResponse_member :: Lens.Lens' GetLaunchProfileMemberResponse (Prelude.Maybe LaunchProfileMembership)
+getLaunchProfileMemberResponse_member = Lens.lens (\GetLaunchProfileMemberResponse' {member} -> member) (\s@GetLaunchProfileMemberResponse' {} a -> s {member = a} :: GetLaunchProfileMemberResponse)
+
+-- | The response's http status code.
+getLaunchProfileMemberResponse_httpStatus :: Lens.Lens' GetLaunchProfileMemberResponse Prelude.Int
+getLaunchProfileMemberResponse_httpStatus = Lens.lens (\GetLaunchProfileMemberResponse' {httpStatus} -> httpStatus) (\s@GetLaunchProfileMemberResponse' {} a -> s {httpStatus = a} :: GetLaunchProfileMemberResponse)
+
+instance
+  Prelude.NFData
+    GetLaunchProfileMemberResponse
+  where
+  rnf GetLaunchProfileMemberResponse' {..} =
+    Prelude.rnf member
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetStreamingImage.hs b/gen/Amazonka/Nimble/GetStreamingImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStreamingImage.hs
@@ -0,0 +1,182 @@
+{-# 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.Nimble.GetStreamingImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get streaming image.
+module Amazonka.Nimble.GetStreamingImage
+  ( -- * Creating a Request
+    GetStreamingImage (..),
+    newGetStreamingImage,
+
+    -- * Request Lenses
+    getStreamingImage_streamingImageId,
+    getStreamingImage_studioId,
+
+    -- * Destructuring the Response
+    GetStreamingImageResponse (..),
+    newGetStreamingImageResponse,
+
+    -- * Response Lenses
+    getStreamingImageResponse_streamingImage,
+    getStreamingImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStreamingImage' smart constructor.
+data GetStreamingImage = GetStreamingImage'
+  { -- | The streaming image ID.
+    streamingImageId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'streamingImageId', 'getStreamingImage_streamingImageId' - The streaming image ID.
+--
+-- 'studioId', 'getStreamingImage_studioId' - The studio ID.
+newGetStreamingImage ::
+  -- | 'streamingImageId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStreamingImage
+newGetStreamingImage pStreamingImageId_ pStudioId_ =
+  GetStreamingImage'
+    { streamingImageId =
+        pStreamingImageId_,
+      studioId = pStudioId_
+    }
+
+-- | The streaming image ID.
+getStreamingImage_streamingImageId :: Lens.Lens' GetStreamingImage Prelude.Text
+getStreamingImage_streamingImageId = Lens.lens (\GetStreamingImage' {streamingImageId} -> streamingImageId) (\s@GetStreamingImage' {} a -> s {streamingImageId = a} :: GetStreamingImage)
+
+-- | The studio ID.
+getStreamingImage_studioId :: Lens.Lens' GetStreamingImage Prelude.Text
+getStreamingImage_studioId = Lens.lens (\GetStreamingImage' {studioId} -> studioId) (\s@GetStreamingImage' {} a -> s {studioId = a} :: GetStreamingImage)
+
+instance Core.AWSRequest GetStreamingImage where
+  type
+    AWSResponse GetStreamingImage =
+      GetStreamingImageResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStreamingImageResponse'
+            Prelude.<$> (x Data..?> "streamingImage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStreamingImage where
+  hashWithSalt _salt GetStreamingImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` streamingImageId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStreamingImage where
+  rnf GetStreamingImage' {..} =
+    Prelude.rnf streamingImageId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetStreamingImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStreamingImage where
+  toPath GetStreamingImage' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-images/",
+        Data.toBS streamingImageId
+      ]
+
+instance Data.ToQuery GetStreamingImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStreamingImageResponse' smart constructor.
+data GetStreamingImageResponse = GetStreamingImageResponse'
+  { -- | The streaming image.
+    streamingImage :: Prelude.Maybe StreamingImage,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'streamingImage', 'getStreamingImageResponse_streamingImage' - The streaming image.
+--
+-- 'httpStatus', 'getStreamingImageResponse_httpStatus' - The response's http status code.
+newGetStreamingImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStreamingImageResponse
+newGetStreamingImageResponse pHttpStatus_ =
+  GetStreamingImageResponse'
+    { streamingImage =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The streaming image.
+getStreamingImageResponse_streamingImage :: Lens.Lens' GetStreamingImageResponse (Prelude.Maybe StreamingImage)
+getStreamingImageResponse_streamingImage = Lens.lens (\GetStreamingImageResponse' {streamingImage} -> streamingImage) (\s@GetStreamingImageResponse' {} a -> s {streamingImage = a} :: GetStreamingImageResponse)
+
+-- | The response's http status code.
+getStreamingImageResponse_httpStatus :: Lens.Lens' GetStreamingImageResponse Prelude.Int
+getStreamingImageResponse_httpStatus = Lens.lens (\GetStreamingImageResponse' {httpStatus} -> httpStatus) (\s@GetStreamingImageResponse' {} a -> s {httpStatus = a} :: GetStreamingImageResponse)
+
+instance Prelude.NFData GetStreamingImageResponse where
+  rnf GetStreamingImageResponse' {..} =
+    Prelude.rnf streamingImage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetStreamingSession.hs b/gen/Amazonka/Nimble/GetStreamingSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStreamingSession.hs
@@ -0,0 +1,184 @@
+{-# 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.Nimble.GetStreamingSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets StreamingSession resource.
+--
+-- Invoke this operation to poll for a streaming session state while
+-- creating or deleting a session.
+module Amazonka.Nimble.GetStreamingSession
+  ( -- * Creating a Request
+    GetStreamingSession (..),
+    newGetStreamingSession,
+
+    -- * Request Lenses
+    getStreamingSession_sessionId,
+    getStreamingSession_studioId,
+
+    -- * Destructuring the Response
+    GetStreamingSessionResponse (..),
+    newGetStreamingSessionResponse,
+
+    -- * Response Lenses
+    getStreamingSessionResponse_session,
+    getStreamingSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStreamingSession' smart constructor.
+data GetStreamingSession = GetStreamingSession'
+  { -- | The streaming session ID.
+    sessionId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sessionId', 'getStreamingSession_sessionId' - The streaming session ID.
+--
+-- 'studioId', 'getStreamingSession_studioId' - The studio ID.
+newGetStreamingSession ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStreamingSession
+newGetStreamingSession pSessionId_ pStudioId_ =
+  GetStreamingSession'
+    { sessionId = pSessionId_,
+      studioId = pStudioId_
+    }
+
+-- | The streaming session ID.
+getStreamingSession_sessionId :: Lens.Lens' GetStreamingSession Prelude.Text
+getStreamingSession_sessionId = Lens.lens (\GetStreamingSession' {sessionId} -> sessionId) (\s@GetStreamingSession' {} a -> s {sessionId = a} :: GetStreamingSession)
+
+-- | The studio ID.
+getStreamingSession_studioId :: Lens.Lens' GetStreamingSession Prelude.Text
+getStreamingSession_studioId = Lens.lens (\GetStreamingSession' {studioId} -> studioId) (\s@GetStreamingSession' {} a -> s {studioId = a} :: GetStreamingSession)
+
+instance Core.AWSRequest GetStreamingSession where
+  type
+    AWSResponse GetStreamingSession =
+      GetStreamingSessionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStreamingSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStreamingSession where
+  hashWithSalt _salt GetStreamingSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStreamingSession where
+  rnf GetStreamingSession' {..} =
+    Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetStreamingSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStreamingSession where
+  toPath GetStreamingSession' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions/",
+        Data.toBS sessionId
+      ]
+
+instance Data.ToQuery GetStreamingSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStreamingSessionResponse' smart constructor.
+data GetStreamingSessionResponse = GetStreamingSessionResponse'
+  { -- | The session.
+    session :: Prelude.Maybe StreamingSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'getStreamingSessionResponse_session' - The session.
+--
+-- 'httpStatus', 'getStreamingSessionResponse_httpStatus' - The response's http status code.
+newGetStreamingSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStreamingSessionResponse
+newGetStreamingSessionResponse pHttpStatus_ =
+  GetStreamingSessionResponse'
+    { session =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The session.
+getStreamingSessionResponse_session :: Lens.Lens' GetStreamingSessionResponse (Prelude.Maybe StreamingSession)
+getStreamingSessionResponse_session = Lens.lens (\GetStreamingSessionResponse' {session} -> session) (\s@GetStreamingSessionResponse' {} a -> s {session = a} :: GetStreamingSessionResponse)
+
+-- | The response's http status code.
+getStreamingSessionResponse_httpStatus :: Lens.Lens' GetStreamingSessionResponse Prelude.Int
+getStreamingSessionResponse_httpStatus = Lens.lens (\GetStreamingSessionResponse' {httpStatus} -> httpStatus) (\s@GetStreamingSessionResponse' {} a -> s {httpStatus = a} :: GetStreamingSessionResponse)
+
+instance Prelude.NFData GetStreamingSessionResponse where
+  rnf GetStreamingSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetStreamingSessionBackup.hs b/gen/Amazonka/Nimble/GetStreamingSessionBackup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStreamingSessionBackup.hs
@@ -0,0 +1,187 @@
+{-# 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.Nimble.GetStreamingSessionBackup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets @StreamingSessionBackup@ resource.
+--
+-- Invoke this operation to poll for a streaming session backup while
+-- stopping a streaming session.
+module Amazonka.Nimble.GetStreamingSessionBackup
+  ( -- * Creating a Request
+    GetStreamingSessionBackup (..),
+    newGetStreamingSessionBackup,
+
+    -- * Request Lenses
+    getStreamingSessionBackup_backupId,
+    getStreamingSessionBackup_studioId,
+
+    -- * Destructuring the Response
+    GetStreamingSessionBackupResponse (..),
+    newGetStreamingSessionBackupResponse,
+
+    -- * Response Lenses
+    getStreamingSessionBackupResponse_streamingSessionBackup,
+    getStreamingSessionBackupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStreamingSessionBackup' smart constructor.
+data GetStreamingSessionBackup = GetStreamingSessionBackup'
+  { -- | The ID of the backup.
+    backupId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingSessionBackup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backupId', 'getStreamingSessionBackup_backupId' - The ID of the backup.
+--
+-- 'studioId', 'getStreamingSessionBackup_studioId' - The studio ID.
+newGetStreamingSessionBackup ::
+  -- | 'backupId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStreamingSessionBackup
+newGetStreamingSessionBackup pBackupId_ pStudioId_ =
+  GetStreamingSessionBackup'
+    { backupId = pBackupId_,
+      studioId = pStudioId_
+    }
+
+-- | The ID of the backup.
+getStreamingSessionBackup_backupId :: Lens.Lens' GetStreamingSessionBackup Prelude.Text
+getStreamingSessionBackup_backupId = Lens.lens (\GetStreamingSessionBackup' {backupId} -> backupId) (\s@GetStreamingSessionBackup' {} a -> s {backupId = a} :: GetStreamingSessionBackup)
+
+-- | The studio ID.
+getStreamingSessionBackup_studioId :: Lens.Lens' GetStreamingSessionBackup Prelude.Text
+getStreamingSessionBackup_studioId = Lens.lens (\GetStreamingSessionBackup' {studioId} -> studioId) (\s@GetStreamingSessionBackup' {} a -> s {studioId = a} :: GetStreamingSessionBackup)
+
+instance Core.AWSRequest GetStreamingSessionBackup where
+  type
+    AWSResponse GetStreamingSessionBackup =
+      GetStreamingSessionBackupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStreamingSessionBackupResponse'
+            Prelude.<$> (x Data..?> "streamingSessionBackup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStreamingSessionBackup where
+  hashWithSalt _salt GetStreamingSessionBackup' {..} =
+    _salt
+      `Prelude.hashWithSalt` backupId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStreamingSessionBackup where
+  rnf GetStreamingSessionBackup' {..} =
+    Prelude.rnf backupId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetStreamingSessionBackup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStreamingSessionBackup where
+  toPath GetStreamingSessionBackup' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-session-backups/",
+        Data.toBS backupId
+      ]
+
+instance Data.ToQuery GetStreamingSessionBackup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStreamingSessionBackupResponse' smart constructor.
+data GetStreamingSessionBackupResponse = GetStreamingSessionBackupResponse'
+  { -- | Information about the streaming session backup.
+    streamingSessionBackup :: Prelude.Maybe StreamingSessionBackup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingSessionBackupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'streamingSessionBackup', 'getStreamingSessionBackupResponse_streamingSessionBackup' - Information about the streaming session backup.
+--
+-- 'httpStatus', 'getStreamingSessionBackupResponse_httpStatus' - The response's http status code.
+newGetStreamingSessionBackupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStreamingSessionBackupResponse
+newGetStreamingSessionBackupResponse pHttpStatus_ =
+  GetStreamingSessionBackupResponse'
+    { streamingSessionBackup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the streaming session backup.
+getStreamingSessionBackupResponse_streamingSessionBackup :: Lens.Lens' GetStreamingSessionBackupResponse (Prelude.Maybe StreamingSessionBackup)
+getStreamingSessionBackupResponse_streamingSessionBackup = Lens.lens (\GetStreamingSessionBackupResponse' {streamingSessionBackup} -> streamingSessionBackup) (\s@GetStreamingSessionBackupResponse' {} a -> s {streamingSessionBackup = a} :: GetStreamingSessionBackupResponse)
+
+-- | The response's http status code.
+getStreamingSessionBackupResponse_httpStatus :: Lens.Lens' GetStreamingSessionBackupResponse Prelude.Int
+getStreamingSessionBackupResponse_httpStatus = Lens.lens (\GetStreamingSessionBackupResponse' {httpStatus} -> httpStatus) (\s@GetStreamingSessionBackupResponse' {} a -> s {httpStatus = a} :: GetStreamingSessionBackupResponse)
+
+instance
+  Prelude.NFData
+    GetStreamingSessionBackupResponse
+  where
+  rnf GetStreamingSessionBackupResponse' {..} =
+    Prelude.rnf streamingSessionBackup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetStreamingSessionStream.hs b/gen/Amazonka/Nimble/GetStreamingSessionStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStreamingSessionStream.hs
@@ -0,0 +1,209 @@
+{-# 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.Nimble.GetStreamingSessionStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a StreamingSessionStream for a streaming session.
+--
+-- Invoke this operation to poll the resource after invoking
+-- @CreateStreamingSessionStream@.
+--
+-- After the @StreamingSessionStream@ changes to the @READY@ state, the url
+-- property will contain a stream to be used with the DCV streaming client.
+module Amazonka.Nimble.GetStreamingSessionStream
+  ( -- * Creating a Request
+    GetStreamingSessionStream (..),
+    newGetStreamingSessionStream,
+
+    -- * Request Lenses
+    getStreamingSessionStream_sessionId,
+    getStreamingSessionStream_streamId,
+    getStreamingSessionStream_studioId,
+
+    -- * Destructuring the Response
+    GetStreamingSessionStreamResponse (..),
+    newGetStreamingSessionStreamResponse,
+
+    -- * Response Lenses
+    getStreamingSessionStreamResponse_stream,
+    getStreamingSessionStreamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStreamingSessionStream' smart constructor.
+data GetStreamingSessionStream = GetStreamingSessionStream'
+  { -- | The streaming session ID.
+    sessionId :: Prelude.Text,
+    -- | The streaming session stream ID.
+    streamId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingSessionStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sessionId', 'getStreamingSessionStream_sessionId' - The streaming session ID.
+--
+-- 'streamId', 'getStreamingSessionStream_streamId' - The streaming session stream ID.
+--
+-- 'studioId', 'getStreamingSessionStream_studioId' - The studio ID.
+newGetStreamingSessionStream ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  -- | 'streamId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStreamingSessionStream
+newGetStreamingSessionStream
+  pSessionId_
+  pStreamId_
+  pStudioId_ =
+    GetStreamingSessionStream'
+      { sessionId = pSessionId_,
+        streamId = pStreamId_,
+        studioId = pStudioId_
+      }
+
+-- | The streaming session ID.
+getStreamingSessionStream_sessionId :: Lens.Lens' GetStreamingSessionStream Prelude.Text
+getStreamingSessionStream_sessionId = Lens.lens (\GetStreamingSessionStream' {sessionId} -> sessionId) (\s@GetStreamingSessionStream' {} a -> s {sessionId = a} :: GetStreamingSessionStream)
+
+-- | The streaming session stream ID.
+getStreamingSessionStream_streamId :: Lens.Lens' GetStreamingSessionStream Prelude.Text
+getStreamingSessionStream_streamId = Lens.lens (\GetStreamingSessionStream' {streamId} -> streamId) (\s@GetStreamingSessionStream' {} a -> s {streamId = a} :: GetStreamingSessionStream)
+
+-- | The studio ID.
+getStreamingSessionStream_studioId :: Lens.Lens' GetStreamingSessionStream Prelude.Text
+getStreamingSessionStream_studioId = Lens.lens (\GetStreamingSessionStream' {studioId} -> studioId) (\s@GetStreamingSessionStream' {} a -> s {studioId = a} :: GetStreamingSessionStream)
+
+instance Core.AWSRequest GetStreamingSessionStream where
+  type
+    AWSResponse GetStreamingSessionStream =
+      GetStreamingSessionStreamResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStreamingSessionStreamResponse'
+            Prelude.<$> (x Data..?> "stream")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStreamingSessionStream where
+  hashWithSalt _salt GetStreamingSessionStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStreamingSessionStream where
+  rnf GetStreamingSessionStream' {..} =
+    Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetStreamingSessionStream where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStreamingSessionStream where
+  toPath GetStreamingSessionStream' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions/",
+        Data.toBS sessionId,
+        "/streams/",
+        Data.toBS streamId
+      ]
+
+instance Data.ToQuery GetStreamingSessionStream where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStreamingSessionStreamResponse' smart constructor.
+data GetStreamingSessionStreamResponse = GetStreamingSessionStreamResponse'
+  { -- | The stream.
+    stream :: Prelude.Maybe StreamingSessionStream,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStreamingSessionStreamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stream', 'getStreamingSessionStreamResponse_stream' - The stream.
+--
+-- 'httpStatus', 'getStreamingSessionStreamResponse_httpStatus' - The response's http status code.
+newGetStreamingSessionStreamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStreamingSessionStreamResponse
+newGetStreamingSessionStreamResponse pHttpStatus_ =
+  GetStreamingSessionStreamResponse'
+    { stream =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The stream.
+getStreamingSessionStreamResponse_stream :: Lens.Lens' GetStreamingSessionStreamResponse (Prelude.Maybe StreamingSessionStream)
+getStreamingSessionStreamResponse_stream = Lens.lens (\GetStreamingSessionStreamResponse' {stream} -> stream) (\s@GetStreamingSessionStreamResponse' {} a -> s {stream = a} :: GetStreamingSessionStreamResponse)
+
+-- | The response's http status code.
+getStreamingSessionStreamResponse_httpStatus :: Lens.Lens' GetStreamingSessionStreamResponse Prelude.Int
+getStreamingSessionStreamResponse_httpStatus = Lens.lens (\GetStreamingSessionStreamResponse' {httpStatus} -> httpStatus) (\s@GetStreamingSessionStreamResponse' {} a -> s {httpStatus = a} :: GetStreamingSessionStreamResponse)
+
+instance
+  Prelude.NFData
+    GetStreamingSessionStreamResponse
+  where
+  rnf GetStreamingSessionStreamResponse' {..} =
+    Prelude.rnf stream
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetStudio.hs b/gen/Amazonka/Nimble/GetStudio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStudio.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.GetStudio
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a studio resource.
+module Amazonka.Nimble.GetStudio
+  ( -- * Creating a Request
+    GetStudio (..),
+    newGetStudio,
+
+    -- * Request Lenses
+    getStudio_studioId,
+
+    -- * Destructuring the Response
+    GetStudioResponse (..),
+    newGetStudioResponse,
+
+    -- * Response Lenses
+    getStudioResponse_httpStatus,
+    getStudioResponse_studio,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStudio' smart constructor.
+data GetStudio = GetStudio'
+  { -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStudio' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studioId', 'getStudio_studioId' - The studio ID.
+newGetStudio ::
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStudio
+newGetStudio pStudioId_ =
+  GetStudio' {studioId = pStudioId_}
+
+-- | The studio ID.
+getStudio_studioId :: Lens.Lens' GetStudio Prelude.Text
+getStudio_studioId = Lens.lens (\GetStudio' {studioId} -> studioId) (\s@GetStudio' {} a -> s {studioId = a} :: GetStudio)
+
+instance Core.AWSRequest GetStudio where
+  type AWSResponse GetStudio = GetStudioResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStudioResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "studio")
+      )
+
+instance Prelude.Hashable GetStudio where
+  hashWithSalt _salt GetStudio' {..} =
+    _salt `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStudio where
+  rnf GetStudio' {..} = Prelude.rnf studioId
+
+instance Data.ToHeaders GetStudio where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStudio where
+  toPath GetStudio' {..} =
+    Prelude.mconcat
+      ["/2020-08-01/studios/", Data.toBS studioId]
+
+instance Data.ToQuery GetStudio where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStudioResponse' smart constructor.
+data GetStudioResponse = GetStudioResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about a studio.
+    studio :: Studio
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStudioResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getStudioResponse_httpStatus' - The response's http status code.
+--
+-- 'studio', 'getStudioResponse_studio' - Information about a studio.
+newGetStudioResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'studio'
+  Studio ->
+  GetStudioResponse
+newGetStudioResponse pHttpStatus_ pStudio_ =
+  GetStudioResponse'
+    { httpStatus = pHttpStatus_,
+      studio = pStudio_
+    }
+
+-- | The response's http status code.
+getStudioResponse_httpStatus :: Lens.Lens' GetStudioResponse Prelude.Int
+getStudioResponse_httpStatus = Lens.lens (\GetStudioResponse' {httpStatus} -> httpStatus) (\s@GetStudioResponse' {} a -> s {httpStatus = a} :: GetStudioResponse)
+
+-- | Information about a studio.
+getStudioResponse_studio :: Lens.Lens' GetStudioResponse Studio
+getStudioResponse_studio = Lens.lens (\GetStudioResponse' {studio} -> studio) (\s@GetStudioResponse' {} a -> s {studio = a} :: GetStudioResponse)
+
+instance Prelude.NFData GetStudioResponse where
+  rnf GetStudioResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf studio
diff --git a/gen/Amazonka/Nimble/GetStudioComponent.hs b/gen/Amazonka/Nimble/GetStudioComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStudioComponent.hs
@@ -0,0 +1,182 @@
+{-# 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.Nimble.GetStudioComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a studio component resource.
+module Amazonka.Nimble.GetStudioComponent
+  ( -- * Creating a Request
+    GetStudioComponent (..),
+    newGetStudioComponent,
+
+    -- * Request Lenses
+    getStudioComponent_studioComponentId,
+    getStudioComponent_studioId,
+
+    -- * Destructuring the Response
+    GetStudioComponentResponse (..),
+    newGetStudioComponentResponse,
+
+    -- * Response Lenses
+    getStudioComponentResponse_studioComponent,
+    getStudioComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStudioComponent' smart constructor.
+data GetStudioComponent = GetStudioComponent'
+  { -- | The studio component ID.
+    studioComponentId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStudioComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studioComponentId', 'getStudioComponent_studioComponentId' - The studio component ID.
+--
+-- 'studioId', 'getStudioComponent_studioId' - The studio ID.
+newGetStudioComponent ::
+  -- | 'studioComponentId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStudioComponent
+newGetStudioComponent pStudioComponentId_ pStudioId_ =
+  GetStudioComponent'
+    { studioComponentId =
+        pStudioComponentId_,
+      studioId = pStudioId_
+    }
+
+-- | The studio component ID.
+getStudioComponent_studioComponentId :: Lens.Lens' GetStudioComponent Prelude.Text
+getStudioComponent_studioComponentId = Lens.lens (\GetStudioComponent' {studioComponentId} -> studioComponentId) (\s@GetStudioComponent' {} a -> s {studioComponentId = a} :: GetStudioComponent)
+
+-- | The studio ID.
+getStudioComponent_studioId :: Lens.Lens' GetStudioComponent Prelude.Text
+getStudioComponent_studioId = Lens.lens (\GetStudioComponent' {studioId} -> studioId) (\s@GetStudioComponent' {} a -> s {studioId = a} :: GetStudioComponent)
+
+instance Core.AWSRequest GetStudioComponent where
+  type
+    AWSResponse GetStudioComponent =
+      GetStudioComponentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStudioComponentResponse'
+            Prelude.<$> (x Data..?> "studioComponent")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStudioComponent where
+  hashWithSalt _salt GetStudioComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` studioComponentId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStudioComponent where
+  rnf GetStudioComponent' {..} =
+    Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetStudioComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStudioComponent where
+  toPath GetStudioComponent' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/studio-components/",
+        Data.toBS studioComponentId
+      ]
+
+instance Data.ToQuery GetStudioComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStudioComponentResponse' smart constructor.
+data GetStudioComponentResponse = GetStudioComponentResponse'
+  { -- | Information about the studio component.
+    studioComponent :: Prelude.Maybe StudioComponent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStudioComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studioComponent', 'getStudioComponentResponse_studioComponent' - Information about the studio component.
+--
+-- 'httpStatus', 'getStudioComponentResponse_httpStatus' - The response's http status code.
+newGetStudioComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStudioComponentResponse
+newGetStudioComponentResponse pHttpStatus_ =
+  GetStudioComponentResponse'
+    { studioComponent =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the studio component.
+getStudioComponentResponse_studioComponent :: Lens.Lens' GetStudioComponentResponse (Prelude.Maybe StudioComponent)
+getStudioComponentResponse_studioComponent = Lens.lens (\GetStudioComponentResponse' {studioComponent} -> studioComponent) (\s@GetStudioComponentResponse' {} a -> s {studioComponent = a} :: GetStudioComponentResponse)
+
+-- | The response's http status code.
+getStudioComponentResponse_httpStatus :: Lens.Lens' GetStudioComponentResponse Prelude.Int
+getStudioComponentResponse_httpStatus = Lens.lens (\GetStudioComponentResponse' {httpStatus} -> httpStatus) (\s@GetStudioComponentResponse' {} a -> s {httpStatus = a} :: GetStudioComponentResponse)
+
+instance Prelude.NFData GetStudioComponentResponse where
+  rnf GetStudioComponentResponse' {..} =
+    Prelude.rnf studioComponent
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/GetStudioMember.hs b/gen/Amazonka/Nimble/GetStudioMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/GetStudioMember.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.Nimble.GetStudioMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a user\'s membership in a studio.
+module Amazonka.Nimble.GetStudioMember
+  ( -- * Creating a Request
+    GetStudioMember (..),
+    newGetStudioMember,
+
+    -- * Request Lenses
+    getStudioMember_principalId,
+    getStudioMember_studioId,
+
+    -- * Destructuring the Response
+    GetStudioMemberResponse (..),
+    newGetStudioMemberResponse,
+
+    -- * Response Lenses
+    getStudioMemberResponse_member,
+    getStudioMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStudioMember' smart constructor.
+data GetStudioMember = GetStudioMember'
+  { -- | The principal ID. This currently supports a IAM Identity Center UserId.
+    principalId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStudioMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'principalId', 'getStudioMember_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
+--
+-- 'studioId', 'getStudioMember_studioId' - The studio ID.
+newGetStudioMember ::
+  -- | 'principalId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  GetStudioMember
+newGetStudioMember pPrincipalId_ pStudioId_ =
+  GetStudioMember'
+    { principalId = pPrincipalId_,
+      studioId = pStudioId_
+    }
+
+-- | The principal ID. This currently supports a IAM Identity Center UserId.
+getStudioMember_principalId :: Lens.Lens' GetStudioMember Prelude.Text
+getStudioMember_principalId = Lens.lens (\GetStudioMember' {principalId} -> principalId) (\s@GetStudioMember' {} a -> s {principalId = a} :: GetStudioMember)
+
+-- | The studio ID.
+getStudioMember_studioId :: Lens.Lens' GetStudioMember Prelude.Text
+getStudioMember_studioId = Lens.lens (\GetStudioMember' {studioId} -> studioId) (\s@GetStudioMember' {} a -> s {studioId = a} :: GetStudioMember)
+
+instance Core.AWSRequest GetStudioMember where
+  type
+    AWSResponse GetStudioMember =
+      GetStudioMemberResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStudioMemberResponse'
+            Prelude.<$> (x Data..?> "member")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStudioMember where
+  hashWithSalt _salt GetStudioMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData GetStudioMember where
+  rnf GetStudioMember' {..} =
+    Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders GetStudioMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStudioMember where
+  toPath GetStudioMember' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/membership/",
+        Data.toBS principalId
+      ]
+
+instance Data.ToQuery GetStudioMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStudioMemberResponse' smart constructor.
+data GetStudioMemberResponse = GetStudioMemberResponse'
+  { -- | The member.
+    member :: Prelude.Maybe StudioMembership,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStudioMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'member', 'getStudioMemberResponse_member' - The member.
+--
+-- 'httpStatus', 'getStudioMemberResponse_httpStatus' - The response's http status code.
+newGetStudioMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStudioMemberResponse
+newGetStudioMemberResponse pHttpStatus_ =
+  GetStudioMemberResponse'
+    { member = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The member.
+getStudioMemberResponse_member :: Lens.Lens' GetStudioMemberResponse (Prelude.Maybe StudioMembership)
+getStudioMemberResponse_member = Lens.lens (\GetStudioMemberResponse' {member} -> member) (\s@GetStudioMemberResponse' {} a -> s {member = a} :: GetStudioMemberResponse)
+
+-- | The response's http status code.
+getStudioMemberResponse_httpStatus :: Lens.Lens' GetStudioMemberResponse Prelude.Int
+getStudioMemberResponse_httpStatus = Lens.lens (\GetStudioMemberResponse' {httpStatus} -> httpStatus) (\s@GetStudioMemberResponse' {} a -> s {httpStatus = a} :: GetStudioMemberResponse)
+
+instance Prelude.NFData GetStudioMemberResponse where
+  rnf GetStudioMemberResponse' {..} =
+    Prelude.rnf member
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/Lens.hs b/gen/Amazonka/Nimble/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Lens.hs
@@ -0,0 +1,787 @@
+{-# 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.Nimble.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.Nimble.Lens
+  ( -- * Operations
+
+    -- ** AcceptEulas
+    acceptEulas_clientToken,
+    acceptEulas_eulaIds,
+    acceptEulas_studioId,
+    acceptEulasResponse_eulaAcceptances,
+    acceptEulasResponse_httpStatus,
+
+    -- ** CreateLaunchProfile
+    createLaunchProfile_clientToken,
+    createLaunchProfile_description,
+    createLaunchProfile_tags,
+    createLaunchProfile_ec2SubnetIds,
+    createLaunchProfile_launchProfileProtocolVersions,
+    createLaunchProfile_name,
+    createLaunchProfile_streamConfiguration,
+    createLaunchProfile_studioComponentIds,
+    createLaunchProfile_studioId,
+    createLaunchProfileResponse_launchProfile,
+    createLaunchProfileResponse_httpStatus,
+
+    -- ** CreateStreamingImage
+    createStreamingImage_clientToken,
+    createStreamingImage_description,
+    createStreamingImage_tags,
+    createStreamingImage_ec2ImageId,
+    createStreamingImage_name,
+    createStreamingImage_studioId,
+    createStreamingImageResponse_streamingImage,
+    createStreamingImageResponse_httpStatus,
+
+    -- ** CreateStreamingSession
+    createStreamingSession_clientToken,
+    createStreamingSession_ec2InstanceType,
+    createStreamingSession_ownedBy,
+    createStreamingSession_streamingImageId,
+    createStreamingSession_tags,
+    createStreamingSession_launchProfileId,
+    createStreamingSession_studioId,
+    createStreamingSessionResponse_session,
+    createStreamingSessionResponse_httpStatus,
+
+    -- ** CreateStreamingSessionStream
+    createStreamingSessionStream_clientToken,
+    createStreamingSessionStream_expirationInSeconds,
+    createStreamingSessionStream_sessionId,
+    createStreamingSessionStream_studioId,
+    createStreamingSessionStreamResponse_stream,
+    createStreamingSessionStreamResponse_httpStatus,
+
+    -- ** CreateStudio
+    createStudio_clientToken,
+    createStudio_studioEncryptionConfiguration,
+    createStudio_tags,
+    createStudio_adminRoleArn,
+    createStudio_displayName,
+    createStudio_studioName,
+    createStudio_userRoleArn,
+    createStudioResponse_studio,
+    createStudioResponse_httpStatus,
+
+    -- ** CreateStudioComponent
+    createStudioComponent_clientToken,
+    createStudioComponent_configuration,
+    createStudioComponent_description,
+    createStudioComponent_ec2SecurityGroupIds,
+    createStudioComponent_initializationScripts,
+    createStudioComponent_runtimeRoleArn,
+    createStudioComponent_scriptParameters,
+    createStudioComponent_secureInitializationRoleArn,
+    createStudioComponent_subtype,
+    createStudioComponent_tags,
+    createStudioComponent_name,
+    createStudioComponent_studioId,
+    createStudioComponent_type,
+    createStudioComponentResponse_studioComponent,
+    createStudioComponentResponse_httpStatus,
+
+    -- ** DeleteLaunchProfile
+    deleteLaunchProfile_clientToken,
+    deleteLaunchProfile_launchProfileId,
+    deleteLaunchProfile_studioId,
+    deleteLaunchProfileResponse_launchProfile,
+    deleteLaunchProfileResponse_httpStatus,
+
+    -- ** DeleteLaunchProfileMember
+    deleteLaunchProfileMember_clientToken,
+    deleteLaunchProfileMember_launchProfileId,
+    deleteLaunchProfileMember_principalId,
+    deleteLaunchProfileMember_studioId,
+    deleteLaunchProfileMemberResponse_httpStatus,
+
+    -- ** DeleteStreamingImage
+    deleteStreamingImage_clientToken,
+    deleteStreamingImage_streamingImageId,
+    deleteStreamingImage_studioId,
+    deleteStreamingImageResponse_streamingImage,
+    deleteStreamingImageResponse_httpStatus,
+
+    -- ** DeleteStreamingSession
+    deleteStreamingSession_clientToken,
+    deleteStreamingSession_sessionId,
+    deleteStreamingSession_studioId,
+    deleteStreamingSessionResponse_session,
+    deleteStreamingSessionResponse_httpStatus,
+
+    -- ** DeleteStudio
+    deleteStudio_clientToken,
+    deleteStudio_studioId,
+    deleteStudioResponse_httpStatus,
+    deleteStudioResponse_studio,
+
+    -- ** DeleteStudioComponent
+    deleteStudioComponent_clientToken,
+    deleteStudioComponent_studioComponentId,
+    deleteStudioComponent_studioId,
+    deleteStudioComponentResponse_studioComponent,
+    deleteStudioComponentResponse_httpStatus,
+
+    -- ** DeleteStudioMember
+    deleteStudioMember_clientToken,
+    deleteStudioMember_principalId,
+    deleteStudioMember_studioId,
+    deleteStudioMemberResponse_httpStatus,
+
+    -- ** GetEula
+    getEula_eulaId,
+    getEulaResponse_eula,
+    getEulaResponse_httpStatus,
+
+    -- ** GetLaunchProfile
+    getLaunchProfile_launchProfileId,
+    getLaunchProfile_studioId,
+    getLaunchProfileResponse_launchProfile,
+    getLaunchProfileResponse_httpStatus,
+
+    -- ** GetLaunchProfileDetails
+    getLaunchProfileDetails_launchProfileId,
+    getLaunchProfileDetails_studioId,
+    getLaunchProfileDetailsResponse_launchProfile,
+    getLaunchProfileDetailsResponse_streamingImages,
+    getLaunchProfileDetailsResponse_studioComponentSummaries,
+    getLaunchProfileDetailsResponse_httpStatus,
+
+    -- ** GetLaunchProfileInitialization
+    getLaunchProfileInitialization_launchProfileId,
+    getLaunchProfileInitialization_launchProfileProtocolVersions,
+    getLaunchProfileInitialization_launchPurpose,
+    getLaunchProfileInitialization_platform,
+    getLaunchProfileInitialization_studioId,
+    getLaunchProfileInitializationResponse_launchProfileInitialization,
+    getLaunchProfileInitializationResponse_httpStatus,
+
+    -- ** GetLaunchProfileMember
+    getLaunchProfileMember_launchProfileId,
+    getLaunchProfileMember_principalId,
+    getLaunchProfileMember_studioId,
+    getLaunchProfileMemberResponse_member,
+    getLaunchProfileMemberResponse_httpStatus,
+
+    -- ** GetStreamingImage
+    getStreamingImage_streamingImageId,
+    getStreamingImage_studioId,
+    getStreamingImageResponse_streamingImage,
+    getStreamingImageResponse_httpStatus,
+
+    -- ** GetStreamingSession
+    getStreamingSession_sessionId,
+    getStreamingSession_studioId,
+    getStreamingSessionResponse_session,
+    getStreamingSessionResponse_httpStatus,
+
+    -- ** GetStreamingSessionBackup
+    getStreamingSessionBackup_backupId,
+    getStreamingSessionBackup_studioId,
+    getStreamingSessionBackupResponse_streamingSessionBackup,
+    getStreamingSessionBackupResponse_httpStatus,
+
+    -- ** GetStreamingSessionStream
+    getStreamingSessionStream_sessionId,
+    getStreamingSessionStream_streamId,
+    getStreamingSessionStream_studioId,
+    getStreamingSessionStreamResponse_stream,
+    getStreamingSessionStreamResponse_httpStatus,
+
+    -- ** GetStudio
+    getStudio_studioId,
+    getStudioResponse_httpStatus,
+    getStudioResponse_studio,
+
+    -- ** GetStudioComponent
+    getStudioComponent_studioComponentId,
+    getStudioComponent_studioId,
+    getStudioComponentResponse_studioComponent,
+    getStudioComponentResponse_httpStatus,
+
+    -- ** GetStudioMember
+    getStudioMember_principalId,
+    getStudioMember_studioId,
+    getStudioMemberResponse_member,
+    getStudioMemberResponse_httpStatus,
+
+    -- ** ListEulaAcceptances
+    listEulaAcceptances_eulaIds,
+    listEulaAcceptances_nextToken,
+    listEulaAcceptances_studioId,
+    listEulaAcceptancesResponse_eulaAcceptances,
+    listEulaAcceptancesResponse_nextToken,
+    listEulaAcceptancesResponse_httpStatus,
+
+    -- ** ListEulas
+    listEulas_eulaIds,
+    listEulas_nextToken,
+    listEulasResponse_eulas,
+    listEulasResponse_nextToken,
+    listEulasResponse_httpStatus,
+
+    -- ** ListLaunchProfileMembers
+    listLaunchProfileMembers_maxResults,
+    listLaunchProfileMembers_nextToken,
+    listLaunchProfileMembers_launchProfileId,
+    listLaunchProfileMembers_studioId,
+    listLaunchProfileMembersResponse_members,
+    listLaunchProfileMembersResponse_nextToken,
+    listLaunchProfileMembersResponse_httpStatus,
+
+    -- ** ListLaunchProfiles
+    listLaunchProfiles_maxResults,
+    listLaunchProfiles_nextToken,
+    listLaunchProfiles_principalId,
+    listLaunchProfiles_states,
+    listLaunchProfiles_studioId,
+    listLaunchProfilesResponse_launchProfiles,
+    listLaunchProfilesResponse_nextToken,
+    listLaunchProfilesResponse_httpStatus,
+
+    -- ** ListStreamingImages
+    listStreamingImages_nextToken,
+    listStreamingImages_owner,
+    listStreamingImages_studioId,
+    listStreamingImagesResponse_nextToken,
+    listStreamingImagesResponse_streamingImages,
+    listStreamingImagesResponse_httpStatus,
+
+    -- ** ListStreamingSessionBackups
+    listStreamingSessionBackups_nextToken,
+    listStreamingSessionBackups_ownedBy,
+    listStreamingSessionBackups_studioId,
+    listStreamingSessionBackupsResponse_nextToken,
+    listStreamingSessionBackupsResponse_streamingSessionBackups,
+    listStreamingSessionBackupsResponse_httpStatus,
+
+    -- ** ListStreamingSessions
+    listStreamingSessions_createdBy,
+    listStreamingSessions_nextToken,
+    listStreamingSessions_ownedBy,
+    listStreamingSessions_sessionIds,
+    listStreamingSessions_studioId,
+    listStreamingSessionsResponse_nextToken,
+    listStreamingSessionsResponse_sessions,
+    listStreamingSessionsResponse_httpStatus,
+
+    -- ** ListStudioComponents
+    listStudioComponents_maxResults,
+    listStudioComponents_nextToken,
+    listStudioComponents_states,
+    listStudioComponents_types,
+    listStudioComponents_studioId,
+    listStudioComponentsResponse_nextToken,
+    listStudioComponentsResponse_studioComponents,
+    listStudioComponentsResponse_httpStatus,
+
+    -- ** ListStudioMembers
+    listStudioMembers_maxResults,
+    listStudioMembers_nextToken,
+    listStudioMembers_studioId,
+    listStudioMembersResponse_members,
+    listStudioMembersResponse_nextToken,
+    listStudioMembersResponse_httpStatus,
+
+    -- ** ListStudios
+    listStudios_nextToken,
+    listStudiosResponse_nextToken,
+    listStudiosResponse_httpStatus,
+    listStudiosResponse_studios,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutLaunchProfileMembers
+    putLaunchProfileMembers_clientToken,
+    putLaunchProfileMembers_identityStoreId,
+    putLaunchProfileMembers_launchProfileId,
+    putLaunchProfileMembers_members,
+    putLaunchProfileMembers_studioId,
+    putLaunchProfileMembersResponse_httpStatus,
+
+    -- ** PutStudioMembers
+    putStudioMembers_clientToken,
+    putStudioMembers_identityStoreId,
+    putStudioMembers_members,
+    putStudioMembers_studioId,
+    putStudioMembersResponse_httpStatus,
+
+    -- ** StartStreamingSession
+    startStreamingSession_backupId,
+    startStreamingSession_clientToken,
+    startStreamingSession_sessionId,
+    startStreamingSession_studioId,
+    startStreamingSessionResponse_session,
+    startStreamingSessionResponse_httpStatus,
+
+    -- ** StartStudioSSOConfigurationRepair
+    startStudioSSOConfigurationRepair_clientToken,
+    startStudioSSOConfigurationRepair_studioId,
+    startStudioSSOConfigurationRepairResponse_httpStatus,
+    startStudioSSOConfigurationRepairResponse_studio,
+
+    -- ** StopStreamingSession
+    stopStreamingSession_clientToken,
+    stopStreamingSession_volumeRetentionMode,
+    stopStreamingSession_sessionId,
+    stopStreamingSession_studioId,
+    stopStreamingSessionResponse_session,
+    stopStreamingSessionResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_tags,
+    tagResource_resourceArn,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateLaunchProfile
+    updateLaunchProfile_clientToken,
+    updateLaunchProfile_description,
+    updateLaunchProfile_launchProfileProtocolVersions,
+    updateLaunchProfile_name,
+    updateLaunchProfile_streamConfiguration,
+    updateLaunchProfile_studioComponentIds,
+    updateLaunchProfile_launchProfileId,
+    updateLaunchProfile_studioId,
+    updateLaunchProfileResponse_launchProfile,
+    updateLaunchProfileResponse_httpStatus,
+
+    -- ** UpdateLaunchProfileMember
+    updateLaunchProfileMember_clientToken,
+    updateLaunchProfileMember_launchProfileId,
+    updateLaunchProfileMember_persona,
+    updateLaunchProfileMember_principalId,
+    updateLaunchProfileMember_studioId,
+    updateLaunchProfileMemberResponse_member,
+    updateLaunchProfileMemberResponse_httpStatus,
+
+    -- ** UpdateStreamingImage
+    updateStreamingImage_clientToken,
+    updateStreamingImage_description,
+    updateStreamingImage_name,
+    updateStreamingImage_streamingImageId,
+    updateStreamingImage_studioId,
+    updateStreamingImageResponse_streamingImage,
+    updateStreamingImageResponse_httpStatus,
+
+    -- ** UpdateStudio
+    updateStudio_adminRoleArn,
+    updateStudio_clientToken,
+    updateStudio_displayName,
+    updateStudio_userRoleArn,
+    updateStudio_studioId,
+    updateStudioResponse_httpStatus,
+    updateStudioResponse_studio,
+
+    -- ** UpdateStudioComponent
+    updateStudioComponent_clientToken,
+    updateStudioComponent_configuration,
+    updateStudioComponent_description,
+    updateStudioComponent_ec2SecurityGroupIds,
+    updateStudioComponent_initializationScripts,
+    updateStudioComponent_name,
+    updateStudioComponent_runtimeRoleArn,
+    updateStudioComponent_scriptParameters,
+    updateStudioComponent_secureInitializationRoleArn,
+    updateStudioComponent_subtype,
+    updateStudioComponent_type,
+    updateStudioComponent_studioComponentId,
+    updateStudioComponent_studioId,
+    updateStudioComponentResponse_studioComponent,
+    updateStudioComponentResponse_httpStatus,
+
+    -- * Types
+
+    -- ** ActiveDirectoryComputerAttribute
+    activeDirectoryComputerAttribute_name,
+    activeDirectoryComputerAttribute_value,
+
+    -- ** ActiveDirectoryConfiguration
+    activeDirectoryConfiguration_computerAttributes,
+    activeDirectoryConfiguration_directoryId,
+    activeDirectoryConfiguration_organizationalUnitDistinguishedName,
+
+    -- ** ComputeFarmConfiguration
+    computeFarmConfiguration_activeDirectoryUser,
+    computeFarmConfiguration_endpoint,
+
+    -- ** Eula
+    eula_content,
+    eula_createdAt,
+    eula_eulaId,
+    eula_name,
+    eula_updatedAt,
+
+    -- ** EulaAcceptance
+    eulaAcceptance_acceptedAt,
+    eulaAcceptance_acceptedBy,
+    eulaAcceptance_accepteeId,
+    eulaAcceptance_eulaAcceptanceId,
+    eulaAcceptance_eulaId,
+
+    -- ** LaunchProfile
+    launchProfile_arn,
+    launchProfile_createdAt,
+    launchProfile_createdBy,
+    launchProfile_description,
+    launchProfile_ec2SubnetIds,
+    launchProfile_launchProfileId,
+    launchProfile_launchProfileProtocolVersions,
+    launchProfile_name,
+    launchProfile_state,
+    launchProfile_statusCode,
+    launchProfile_statusMessage,
+    launchProfile_streamConfiguration,
+    launchProfile_studioComponentIds,
+    launchProfile_tags,
+    launchProfile_updatedAt,
+    launchProfile_updatedBy,
+    launchProfile_validationResults,
+
+    -- ** LaunchProfileInitialization
+    launchProfileInitialization_activeDirectory,
+    launchProfileInitialization_ec2SecurityGroupIds,
+    launchProfileInitialization_launchProfileId,
+    launchProfileInitialization_launchProfileProtocolVersion,
+    launchProfileInitialization_launchPurpose,
+    launchProfileInitialization_name,
+    launchProfileInitialization_platform,
+    launchProfileInitialization_systemInitializationScripts,
+    launchProfileInitialization_userInitializationScripts,
+
+    -- ** LaunchProfileInitializationActiveDirectory
+    launchProfileInitializationActiveDirectory_computerAttributes,
+    launchProfileInitializationActiveDirectory_directoryId,
+    launchProfileInitializationActiveDirectory_directoryName,
+    launchProfileInitializationActiveDirectory_dnsIpAddresses,
+    launchProfileInitializationActiveDirectory_organizationalUnitDistinguishedName,
+    launchProfileInitializationActiveDirectory_studioComponentId,
+    launchProfileInitializationActiveDirectory_studioComponentName,
+
+    -- ** LaunchProfileInitializationScript
+    launchProfileInitializationScript_runtimeRoleArn,
+    launchProfileInitializationScript_script,
+    launchProfileInitializationScript_secureInitializationRoleArn,
+    launchProfileInitializationScript_studioComponentId,
+    launchProfileInitializationScript_studioComponentName,
+
+    -- ** LaunchProfileMembership
+    launchProfileMembership_identityStoreId,
+    launchProfileMembership_persona,
+    launchProfileMembership_principalId,
+    launchProfileMembership_sid,
+
+    -- ** LicenseServiceConfiguration
+    licenseServiceConfiguration_endpoint,
+
+    -- ** NewLaunchProfileMember
+    newLaunchProfileMember_persona,
+    newLaunchProfileMember_principalId,
+
+    -- ** NewStudioMember
+    newStudioMember_persona,
+    newStudioMember_principalId,
+
+    -- ** ScriptParameterKeyValue
+    scriptParameterKeyValue_key,
+    scriptParameterKeyValue_value,
+
+    -- ** SharedFileSystemConfiguration
+    sharedFileSystemConfiguration_endpoint,
+    sharedFileSystemConfiguration_fileSystemId,
+    sharedFileSystemConfiguration_linuxMountPoint,
+    sharedFileSystemConfiguration_shareName,
+    sharedFileSystemConfiguration_windowsMountDrive,
+
+    -- ** StreamConfiguration
+    streamConfiguration_automaticTerminationMode,
+    streamConfiguration_maxSessionLengthInMinutes,
+    streamConfiguration_maxStoppedSessionLengthInMinutes,
+    streamConfiguration_sessionBackup,
+    streamConfiguration_sessionPersistenceMode,
+    streamConfiguration_sessionStorage,
+    streamConfiguration_volumeConfiguration,
+    streamConfiguration_clipboardMode,
+    streamConfiguration_ec2InstanceTypes,
+    streamConfiguration_streamingImageIds,
+
+    -- ** StreamConfigurationCreate
+    streamConfigurationCreate_automaticTerminationMode,
+    streamConfigurationCreate_maxSessionLengthInMinutes,
+    streamConfigurationCreate_maxStoppedSessionLengthInMinutes,
+    streamConfigurationCreate_sessionBackup,
+    streamConfigurationCreate_sessionPersistenceMode,
+    streamConfigurationCreate_sessionStorage,
+    streamConfigurationCreate_volumeConfiguration,
+    streamConfigurationCreate_clipboardMode,
+    streamConfigurationCreate_ec2InstanceTypes,
+    streamConfigurationCreate_streamingImageIds,
+
+    -- ** StreamConfigurationSessionBackup
+    streamConfigurationSessionBackup_maxBackupsToRetain,
+    streamConfigurationSessionBackup_mode,
+
+    -- ** StreamConfigurationSessionStorage
+    streamConfigurationSessionStorage_root,
+    streamConfigurationSessionStorage_mode,
+
+    -- ** StreamingImage
+    streamingImage_arn,
+    streamingImage_description,
+    streamingImage_ec2ImageId,
+    streamingImage_encryptionConfiguration,
+    streamingImage_eulaIds,
+    streamingImage_name,
+    streamingImage_owner,
+    streamingImage_platform,
+    streamingImage_state,
+    streamingImage_statusCode,
+    streamingImage_statusMessage,
+    streamingImage_streamingImageId,
+    streamingImage_tags,
+
+    -- ** StreamingImageEncryptionConfiguration
+    streamingImageEncryptionConfiguration_keyArn,
+    streamingImageEncryptionConfiguration_keyType,
+
+    -- ** StreamingSession
+    streamingSession_arn,
+    streamingSession_automaticTerminationMode,
+    streamingSession_backupMode,
+    streamingSession_createdAt,
+    streamingSession_createdBy,
+    streamingSession_ec2InstanceType,
+    streamingSession_launchProfileId,
+    streamingSession_maxBackupsToRetain,
+    streamingSession_ownedBy,
+    streamingSession_sessionId,
+    streamingSession_sessionPersistenceMode,
+    streamingSession_startedAt,
+    streamingSession_startedBy,
+    streamingSession_startedFromBackupId,
+    streamingSession_state,
+    streamingSession_statusCode,
+    streamingSession_statusMessage,
+    streamingSession_stopAt,
+    streamingSession_stoppedAt,
+    streamingSession_stoppedBy,
+    streamingSession_streamingImageId,
+    streamingSession_tags,
+    streamingSession_terminateAt,
+    streamingSession_updatedAt,
+    streamingSession_updatedBy,
+    streamingSession_volumeConfiguration,
+    streamingSession_volumeRetentionMode,
+
+    -- ** StreamingSessionBackup
+    streamingSessionBackup_arn,
+    streamingSessionBackup_backupId,
+    streamingSessionBackup_createdAt,
+    streamingSessionBackup_launchProfileId,
+    streamingSessionBackup_ownedBy,
+    streamingSessionBackup_sessionId,
+    streamingSessionBackup_state,
+    streamingSessionBackup_statusCode,
+    streamingSessionBackup_statusMessage,
+    streamingSessionBackup_tags,
+
+    -- ** StreamingSessionStorageRoot
+    streamingSessionStorageRoot_linux,
+    streamingSessionStorageRoot_windows,
+
+    -- ** StreamingSessionStream
+    streamingSessionStream_createdAt,
+    streamingSessionStream_createdBy,
+    streamingSessionStream_expiresAt,
+    streamingSessionStream_ownedBy,
+    streamingSessionStream_state,
+    streamingSessionStream_statusCode,
+    streamingSessionStream_streamId,
+    streamingSessionStream_url,
+
+    -- ** Studio
+    studio_adminRoleArn,
+    studio_arn,
+    studio_createdAt,
+    studio_displayName,
+    studio_homeRegion,
+    studio_ssoClientId,
+    studio_state,
+    studio_statusCode,
+    studio_statusMessage,
+    studio_studioEncryptionConfiguration,
+    studio_studioId,
+    studio_studioName,
+    studio_studioUrl,
+    studio_tags,
+    studio_updatedAt,
+    studio_userRoleArn,
+
+    -- ** StudioComponent
+    studioComponent_arn,
+    studioComponent_configuration,
+    studioComponent_createdAt,
+    studioComponent_createdBy,
+    studioComponent_description,
+    studioComponent_ec2SecurityGroupIds,
+    studioComponent_initializationScripts,
+    studioComponent_name,
+    studioComponent_runtimeRoleArn,
+    studioComponent_scriptParameters,
+    studioComponent_secureInitializationRoleArn,
+    studioComponent_state,
+    studioComponent_statusCode,
+    studioComponent_statusMessage,
+    studioComponent_studioComponentId,
+    studioComponent_subtype,
+    studioComponent_tags,
+    studioComponent_type,
+    studioComponent_updatedAt,
+    studioComponent_updatedBy,
+
+    -- ** StudioComponentConfiguration
+    studioComponentConfiguration_activeDirectoryConfiguration,
+    studioComponentConfiguration_computeFarmConfiguration,
+    studioComponentConfiguration_licenseServiceConfiguration,
+    studioComponentConfiguration_sharedFileSystemConfiguration,
+
+    -- ** StudioComponentInitializationScript
+    studioComponentInitializationScript_launchProfileProtocolVersion,
+    studioComponentInitializationScript_platform,
+    studioComponentInitializationScript_runContext,
+    studioComponentInitializationScript_script,
+
+    -- ** StudioComponentSummary
+    studioComponentSummary_createdAt,
+    studioComponentSummary_createdBy,
+    studioComponentSummary_description,
+    studioComponentSummary_name,
+    studioComponentSummary_studioComponentId,
+    studioComponentSummary_subtype,
+    studioComponentSummary_type,
+    studioComponentSummary_updatedAt,
+    studioComponentSummary_updatedBy,
+
+    -- ** StudioEncryptionConfiguration
+    studioEncryptionConfiguration_keyArn,
+    studioEncryptionConfiguration_keyType,
+
+    -- ** StudioMembership
+    studioMembership_identityStoreId,
+    studioMembership_persona,
+    studioMembership_principalId,
+    studioMembership_sid,
+
+    -- ** ValidationResult
+    validationResult_state,
+    validationResult_statusCode,
+    validationResult_statusMessage,
+    validationResult_type,
+
+    -- ** VolumeConfiguration
+    volumeConfiguration_iops,
+    volumeConfiguration_size,
+    volumeConfiguration_throughput,
+  )
+where
+
+import Amazonka.Nimble.AcceptEulas
+import Amazonka.Nimble.CreateLaunchProfile
+import Amazonka.Nimble.CreateStreamingImage
+import Amazonka.Nimble.CreateStreamingSession
+import Amazonka.Nimble.CreateStreamingSessionStream
+import Amazonka.Nimble.CreateStudio
+import Amazonka.Nimble.CreateStudioComponent
+import Amazonka.Nimble.DeleteLaunchProfile
+import Amazonka.Nimble.DeleteLaunchProfileMember
+import Amazonka.Nimble.DeleteStreamingImage
+import Amazonka.Nimble.DeleteStreamingSession
+import Amazonka.Nimble.DeleteStudio
+import Amazonka.Nimble.DeleteStudioComponent
+import Amazonka.Nimble.DeleteStudioMember
+import Amazonka.Nimble.GetEula
+import Amazonka.Nimble.GetLaunchProfile
+import Amazonka.Nimble.GetLaunchProfileDetails
+import Amazonka.Nimble.GetLaunchProfileInitialization
+import Amazonka.Nimble.GetLaunchProfileMember
+import Amazonka.Nimble.GetStreamingImage
+import Amazonka.Nimble.GetStreamingSession
+import Amazonka.Nimble.GetStreamingSessionBackup
+import Amazonka.Nimble.GetStreamingSessionStream
+import Amazonka.Nimble.GetStudio
+import Amazonka.Nimble.GetStudioComponent
+import Amazonka.Nimble.GetStudioMember
+import Amazonka.Nimble.ListEulaAcceptances
+import Amazonka.Nimble.ListEulas
+import Amazonka.Nimble.ListLaunchProfileMembers
+import Amazonka.Nimble.ListLaunchProfiles
+import Amazonka.Nimble.ListStreamingImages
+import Amazonka.Nimble.ListStreamingSessionBackups
+import Amazonka.Nimble.ListStreamingSessions
+import Amazonka.Nimble.ListStudioComponents
+import Amazonka.Nimble.ListStudioMembers
+import Amazonka.Nimble.ListStudios
+import Amazonka.Nimble.ListTagsForResource
+import Amazonka.Nimble.PutLaunchProfileMembers
+import Amazonka.Nimble.PutStudioMembers
+import Amazonka.Nimble.StartStreamingSession
+import Amazonka.Nimble.StartStudioSSOConfigurationRepair
+import Amazonka.Nimble.StopStreamingSession
+import Amazonka.Nimble.TagResource
+import Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute
+import Amazonka.Nimble.Types.ActiveDirectoryConfiguration
+import Amazonka.Nimble.Types.ComputeFarmConfiguration
+import Amazonka.Nimble.Types.Eula
+import Amazonka.Nimble.Types.EulaAcceptance
+import Amazonka.Nimble.Types.LaunchProfile
+import Amazonka.Nimble.Types.LaunchProfileInitialization
+import Amazonka.Nimble.Types.LaunchProfileInitializationActiveDirectory
+import Amazonka.Nimble.Types.LaunchProfileInitializationScript
+import Amazonka.Nimble.Types.LaunchProfileMembership
+import Amazonka.Nimble.Types.LicenseServiceConfiguration
+import Amazonka.Nimble.Types.NewLaunchProfileMember
+import Amazonka.Nimble.Types.NewStudioMember
+import Amazonka.Nimble.Types.ScriptParameterKeyValue
+import Amazonka.Nimble.Types.SharedFileSystemConfiguration
+import Amazonka.Nimble.Types.StreamConfiguration
+import Amazonka.Nimble.Types.StreamConfigurationCreate
+import Amazonka.Nimble.Types.StreamConfigurationSessionBackup
+import Amazonka.Nimble.Types.StreamConfigurationSessionStorage
+import Amazonka.Nimble.Types.StreamingImage
+import Amazonka.Nimble.Types.StreamingImageEncryptionConfiguration
+import Amazonka.Nimble.Types.StreamingSession
+import Amazonka.Nimble.Types.StreamingSessionBackup
+import Amazonka.Nimble.Types.StreamingSessionStorageRoot
+import Amazonka.Nimble.Types.StreamingSessionStream
+import Amazonka.Nimble.Types.Studio
+import Amazonka.Nimble.Types.StudioComponent
+import Amazonka.Nimble.Types.StudioComponentConfiguration
+import Amazonka.Nimble.Types.StudioComponentInitializationScript
+import Amazonka.Nimble.Types.StudioComponentSummary
+import Amazonka.Nimble.Types.StudioEncryptionConfiguration
+import Amazonka.Nimble.Types.StudioMembership
+import Amazonka.Nimble.Types.ValidationResult
+import Amazonka.Nimble.Types.VolumeConfiguration
+import Amazonka.Nimble.UntagResource
+import Amazonka.Nimble.UpdateLaunchProfile
+import Amazonka.Nimble.UpdateLaunchProfileMember
+import Amazonka.Nimble.UpdateStreamingImage
+import Amazonka.Nimble.UpdateStudio
+import Amazonka.Nimble.UpdateStudioComponent
diff --git a/gen/Amazonka/Nimble/ListEulaAcceptances.hs b/gen/Amazonka/Nimble/ListEulaAcceptances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListEulaAcceptances.hs
@@ -0,0 +1,241 @@
+{-# 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.Nimble.ListEulaAcceptances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List EULA acceptances.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListEulaAcceptances
+  ( -- * Creating a Request
+    ListEulaAcceptances (..),
+    newListEulaAcceptances,
+
+    -- * Request Lenses
+    listEulaAcceptances_eulaIds,
+    listEulaAcceptances_nextToken,
+    listEulaAcceptances_studioId,
+
+    -- * Destructuring the Response
+    ListEulaAcceptancesResponse (..),
+    newListEulaAcceptancesResponse,
+
+    -- * Response Lenses
+    listEulaAcceptancesResponse_eulaAcceptances,
+    listEulaAcceptancesResponse_nextToken,
+    listEulaAcceptancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEulaAcceptances' smart constructor.
+data ListEulaAcceptances = ListEulaAcceptances'
+  { -- | The list of EULA IDs that have been previously accepted.
+    eulaIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEulaAcceptances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eulaIds', 'listEulaAcceptances_eulaIds' - The list of EULA IDs that have been previously accepted.
+--
+-- 'nextToken', 'listEulaAcceptances_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'studioId', 'listEulaAcceptances_studioId' - The studio ID.
+newListEulaAcceptances ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListEulaAcceptances
+newListEulaAcceptances pStudioId_ =
+  ListEulaAcceptances'
+    { eulaIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The list of EULA IDs that have been previously accepted.
+listEulaAcceptances_eulaIds :: Lens.Lens' ListEulaAcceptances (Prelude.Maybe [Prelude.Text])
+listEulaAcceptances_eulaIds = Lens.lens (\ListEulaAcceptances' {eulaIds} -> eulaIds) (\s@ListEulaAcceptances' {} a -> s {eulaIds = a} :: ListEulaAcceptances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listEulaAcceptances_nextToken :: Lens.Lens' ListEulaAcceptances (Prelude.Maybe Prelude.Text)
+listEulaAcceptances_nextToken = Lens.lens (\ListEulaAcceptances' {nextToken} -> nextToken) (\s@ListEulaAcceptances' {} a -> s {nextToken = a} :: ListEulaAcceptances)
+
+-- | The studio ID.
+listEulaAcceptances_studioId :: Lens.Lens' ListEulaAcceptances Prelude.Text
+listEulaAcceptances_studioId = Lens.lens (\ListEulaAcceptances' {studioId} -> studioId) (\s@ListEulaAcceptances' {} a -> s {studioId = a} :: ListEulaAcceptances)
+
+instance Core.AWSPager ListEulaAcceptances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEulaAcceptancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEulaAcceptancesResponse_eulaAcceptances
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEulaAcceptances_nextToken
+          Lens..~ rs
+          Lens.^? listEulaAcceptancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEulaAcceptances where
+  type
+    AWSResponse ListEulaAcceptances =
+      ListEulaAcceptancesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEulaAcceptancesResponse'
+            Prelude.<$> ( x
+                            Data..?> "eulaAcceptances"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEulaAcceptances where
+  hashWithSalt _salt ListEulaAcceptances' {..} =
+    _salt
+      `Prelude.hashWithSalt` eulaIds
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListEulaAcceptances where
+  rnf ListEulaAcceptances' {..} =
+    Prelude.rnf eulaIds
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListEulaAcceptances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEulaAcceptances where
+  toPath ListEulaAcceptances' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/eula-acceptances"
+      ]
+
+instance Data.ToQuery ListEulaAcceptances where
+  toQuery ListEulaAcceptances' {..} =
+    Prelude.mconcat
+      [ "eulaIds"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> eulaIds),
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEulaAcceptancesResponse' smart constructor.
+data ListEulaAcceptancesResponse = ListEulaAcceptancesResponse'
+  { -- | A collection of EULA acceptances.
+    eulaAcceptances :: Prelude.Maybe [EulaAcceptance],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEulaAcceptancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eulaAcceptances', 'listEulaAcceptancesResponse_eulaAcceptances' - A collection of EULA acceptances.
+--
+-- 'nextToken', 'listEulaAcceptancesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listEulaAcceptancesResponse_httpStatus' - The response's http status code.
+newListEulaAcceptancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEulaAcceptancesResponse
+newListEulaAcceptancesResponse pHttpStatus_ =
+  ListEulaAcceptancesResponse'
+    { eulaAcceptances =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of EULA acceptances.
+listEulaAcceptancesResponse_eulaAcceptances :: Lens.Lens' ListEulaAcceptancesResponse (Prelude.Maybe [EulaAcceptance])
+listEulaAcceptancesResponse_eulaAcceptances = Lens.lens (\ListEulaAcceptancesResponse' {eulaAcceptances} -> eulaAcceptances) (\s@ListEulaAcceptancesResponse' {} a -> s {eulaAcceptances = a} :: ListEulaAcceptancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listEulaAcceptancesResponse_nextToken :: Lens.Lens' ListEulaAcceptancesResponse (Prelude.Maybe Prelude.Text)
+listEulaAcceptancesResponse_nextToken = Lens.lens (\ListEulaAcceptancesResponse' {nextToken} -> nextToken) (\s@ListEulaAcceptancesResponse' {} a -> s {nextToken = a} :: ListEulaAcceptancesResponse)
+
+-- | The response's http status code.
+listEulaAcceptancesResponse_httpStatus :: Lens.Lens' ListEulaAcceptancesResponse Prelude.Int
+listEulaAcceptancesResponse_httpStatus = Lens.lens (\ListEulaAcceptancesResponse' {httpStatus} -> httpStatus) (\s@ListEulaAcceptancesResponse' {} a -> s {httpStatus = a} :: ListEulaAcceptancesResponse)
+
+instance Prelude.NFData ListEulaAcceptancesResponse where
+  rnf ListEulaAcceptancesResponse' {..} =
+    Prelude.rnf eulaAcceptances
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListEulas.hs b/gen/Amazonka/Nimble/ListEulas.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListEulas.hs
@@ -0,0 +1,216 @@
+{-# 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.Nimble.ListEulas
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List EULAs.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListEulas
+  ( -- * Creating a Request
+    ListEulas (..),
+    newListEulas,
+
+    -- * Request Lenses
+    listEulas_eulaIds,
+    listEulas_nextToken,
+
+    -- * Destructuring the Response
+    ListEulasResponse (..),
+    newListEulasResponse,
+
+    -- * Response Lenses
+    listEulasResponse_eulas,
+    listEulasResponse_nextToken,
+    listEulasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEulas' smart constructor.
+data ListEulas = ListEulas'
+  { -- | The list of EULA IDs that should be returned
+    eulaIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEulas' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eulaIds', 'listEulas_eulaIds' - The list of EULA IDs that should be returned
+--
+-- 'nextToken', 'listEulas_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+newListEulas ::
+  ListEulas
+newListEulas =
+  ListEulas'
+    { eulaIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The list of EULA IDs that should be returned
+listEulas_eulaIds :: Lens.Lens' ListEulas (Prelude.Maybe [Prelude.Text])
+listEulas_eulaIds = Lens.lens (\ListEulas' {eulaIds} -> eulaIds) (\s@ListEulas' {} a -> s {eulaIds = a} :: ListEulas) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listEulas_nextToken :: Lens.Lens' ListEulas (Prelude.Maybe Prelude.Text)
+listEulas_nextToken = Lens.lens (\ListEulas' {nextToken} -> nextToken) (\s@ListEulas' {} a -> s {nextToken = a} :: ListEulas)
+
+instance Core.AWSPager ListEulas where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEulasResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEulasResponse_eulas
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEulas_nextToken
+          Lens..~ rs
+          Lens.^? listEulasResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEulas where
+  type AWSResponse ListEulas = ListEulasResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEulasResponse'
+            Prelude.<$> (x Data..?> "eulas" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEulas where
+  hashWithSalt _salt ListEulas' {..} =
+    _salt
+      `Prelude.hashWithSalt` eulaIds
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEulas where
+  rnf ListEulas' {..} =
+    Prelude.rnf eulaIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEulas where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEulas where
+  toPath = Prelude.const "/2020-08-01/eulas"
+
+instance Data.ToQuery ListEulas where
+  toQuery ListEulas' {..} =
+    Prelude.mconcat
+      [ "eulaIds"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> eulaIds),
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEulasResponse' smart constructor.
+data ListEulasResponse = ListEulasResponse'
+  { -- | A collection of EULA resources.
+    eulas :: Prelude.Maybe [Eula],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEulasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eulas', 'listEulasResponse_eulas' - A collection of EULA resources.
+--
+-- 'nextToken', 'listEulasResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listEulasResponse_httpStatus' - The response's http status code.
+newListEulasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEulasResponse
+newListEulasResponse pHttpStatus_ =
+  ListEulasResponse'
+    { eulas = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of EULA resources.
+listEulasResponse_eulas :: Lens.Lens' ListEulasResponse (Prelude.Maybe [Eula])
+listEulasResponse_eulas = Lens.lens (\ListEulasResponse' {eulas} -> eulas) (\s@ListEulasResponse' {} a -> s {eulas = a} :: ListEulasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listEulasResponse_nextToken :: Lens.Lens' ListEulasResponse (Prelude.Maybe Prelude.Text)
+listEulasResponse_nextToken = Lens.lens (\ListEulasResponse' {nextToken} -> nextToken) (\s@ListEulasResponse' {} a -> s {nextToken = a} :: ListEulasResponse)
+
+-- | The response's http status code.
+listEulasResponse_httpStatus :: Lens.Lens' ListEulasResponse Prelude.Int
+listEulasResponse_httpStatus = Lens.lens (\ListEulasResponse' {httpStatus} -> httpStatus) (\s@ListEulasResponse' {} a -> s {httpStatus = a} :: ListEulasResponse)
+
+instance Prelude.NFData ListEulasResponse where
+  rnf ListEulasResponse' {..} =
+    Prelude.rnf eulas
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListLaunchProfileMembers.hs b/gen/Amazonka/Nimble/ListLaunchProfileMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListLaunchProfileMembers.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.ListLaunchProfileMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get all users in a given launch profile membership.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListLaunchProfileMembers
+  ( -- * Creating a Request
+    ListLaunchProfileMembers (..),
+    newListLaunchProfileMembers,
+
+    -- * Request Lenses
+    listLaunchProfileMembers_maxResults,
+    listLaunchProfileMembers_nextToken,
+    listLaunchProfileMembers_launchProfileId,
+    listLaunchProfileMembers_studioId,
+
+    -- * Destructuring the Response
+    ListLaunchProfileMembersResponse (..),
+    newListLaunchProfileMembersResponse,
+
+    -- * Response Lenses
+    listLaunchProfileMembersResponse_members,
+    listLaunchProfileMembersResponse_nextToken,
+    listLaunchProfileMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListLaunchProfileMembers' smart constructor.
+data ListLaunchProfileMembers = ListLaunchProfileMembers'
+  { -- | The max number of results to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLaunchProfileMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listLaunchProfileMembers_maxResults' - The max number of results to return in the response.
+--
+-- 'nextToken', 'listLaunchProfileMembers_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'launchProfileId', 'listLaunchProfileMembers_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'studioId', 'listLaunchProfileMembers_studioId' - The studio ID.
+newListLaunchProfileMembers ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  ListLaunchProfileMembers
+newListLaunchProfileMembers
+  pLaunchProfileId_
+  pStudioId_ =
+    ListLaunchProfileMembers'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        launchProfileId = pLaunchProfileId_,
+        studioId = pStudioId_
+      }
+
+-- | The max number of results to return in the response.
+listLaunchProfileMembers_maxResults :: Lens.Lens' ListLaunchProfileMembers (Prelude.Maybe Prelude.Natural)
+listLaunchProfileMembers_maxResults = Lens.lens (\ListLaunchProfileMembers' {maxResults} -> maxResults) (\s@ListLaunchProfileMembers' {} a -> s {maxResults = a} :: ListLaunchProfileMembers)
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listLaunchProfileMembers_nextToken :: Lens.Lens' ListLaunchProfileMembers (Prelude.Maybe Prelude.Text)
+listLaunchProfileMembers_nextToken = Lens.lens (\ListLaunchProfileMembers' {nextToken} -> nextToken) (\s@ListLaunchProfileMembers' {} a -> s {nextToken = a} :: ListLaunchProfileMembers)
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+listLaunchProfileMembers_launchProfileId :: Lens.Lens' ListLaunchProfileMembers Prelude.Text
+listLaunchProfileMembers_launchProfileId = Lens.lens (\ListLaunchProfileMembers' {launchProfileId} -> launchProfileId) (\s@ListLaunchProfileMembers' {} a -> s {launchProfileId = a} :: ListLaunchProfileMembers)
+
+-- | The studio ID.
+listLaunchProfileMembers_studioId :: Lens.Lens' ListLaunchProfileMembers Prelude.Text
+listLaunchProfileMembers_studioId = Lens.lens (\ListLaunchProfileMembers' {studioId} -> studioId) (\s@ListLaunchProfileMembers' {} a -> s {studioId = a} :: ListLaunchProfileMembers)
+
+instance Core.AWSPager ListLaunchProfileMembers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listLaunchProfileMembersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listLaunchProfileMembersResponse_members
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listLaunchProfileMembers_nextToken
+          Lens..~ rs
+          Lens.^? listLaunchProfileMembersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListLaunchProfileMembers where
+  type
+    AWSResponse ListLaunchProfileMembers =
+      ListLaunchProfileMembersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListLaunchProfileMembersResponse'
+            Prelude.<$> (x Data..?> "members" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListLaunchProfileMembers where
+  hashWithSalt _salt ListLaunchProfileMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListLaunchProfileMembers where
+  rnf ListLaunchProfileMembers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListLaunchProfileMembers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListLaunchProfileMembers where
+  toPath ListLaunchProfileMembers' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/membership"
+      ]
+
+instance Data.ToQuery ListLaunchProfileMembers where
+  toQuery ListLaunchProfileMembers' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListLaunchProfileMembersResponse' smart constructor.
+data ListLaunchProfileMembersResponse = ListLaunchProfileMembersResponse'
+  { -- | A list of members.
+    members :: Prelude.Maybe [LaunchProfileMembership],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLaunchProfileMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'members', 'listLaunchProfileMembersResponse_members' - A list of members.
+--
+-- 'nextToken', 'listLaunchProfileMembersResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listLaunchProfileMembersResponse_httpStatus' - The response's http status code.
+newListLaunchProfileMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListLaunchProfileMembersResponse
+newListLaunchProfileMembersResponse pHttpStatus_ =
+  ListLaunchProfileMembersResponse'
+    { members =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of members.
+listLaunchProfileMembersResponse_members :: Lens.Lens' ListLaunchProfileMembersResponse (Prelude.Maybe [LaunchProfileMembership])
+listLaunchProfileMembersResponse_members = Lens.lens (\ListLaunchProfileMembersResponse' {members} -> members) (\s@ListLaunchProfileMembersResponse' {} a -> s {members = a} :: ListLaunchProfileMembersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listLaunchProfileMembersResponse_nextToken :: Lens.Lens' ListLaunchProfileMembersResponse (Prelude.Maybe Prelude.Text)
+listLaunchProfileMembersResponse_nextToken = Lens.lens (\ListLaunchProfileMembersResponse' {nextToken} -> nextToken) (\s@ListLaunchProfileMembersResponse' {} a -> s {nextToken = a} :: ListLaunchProfileMembersResponse)
+
+-- | The response's http status code.
+listLaunchProfileMembersResponse_httpStatus :: Lens.Lens' ListLaunchProfileMembersResponse Prelude.Int
+listLaunchProfileMembersResponse_httpStatus = Lens.lens (\ListLaunchProfileMembersResponse' {httpStatus} -> httpStatus) (\s@ListLaunchProfileMembersResponse' {} a -> s {httpStatus = a} :: ListLaunchProfileMembersResponse)
+
+instance
+  Prelude.NFData
+    ListLaunchProfileMembersResponse
+  where
+  rnf ListLaunchProfileMembersResponse' {..} =
+    Prelude.rnf members
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListLaunchProfiles.hs b/gen/Amazonka/Nimble/ListLaunchProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListLaunchProfiles.hs
@@ -0,0 +1,264 @@
+{-# 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.Nimble.ListLaunchProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all the launch profiles a studio.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListLaunchProfiles
+  ( -- * Creating a Request
+    ListLaunchProfiles (..),
+    newListLaunchProfiles,
+
+    -- * Request Lenses
+    listLaunchProfiles_maxResults,
+    listLaunchProfiles_nextToken,
+    listLaunchProfiles_principalId,
+    listLaunchProfiles_states,
+    listLaunchProfiles_studioId,
+
+    -- * Destructuring the Response
+    ListLaunchProfilesResponse (..),
+    newListLaunchProfilesResponse,
+
+    -- * Response Lenses
+    listLaunchProfilesResponse_launchProfiles,
+    listLaunchProfilesResponse_nextToken,
+    listLaunchProfilesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListLaunchProfiles' smart constructor.
+data ListLaunchProfiles = ListLaunchProfiles'
+  { -- | The max number of results to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The principal ID. This currently supports a IAM Identity Center UserId.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | Filter this request to launch profiles in any of the given states.
+    states :: Prelude.Maybe [LaunchProfileState],
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLaunchProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listLaunchProfiles_maxResults' - The max number of results to return in the response.
+--
+-- 'nextToken', 'listLaunchProfiles_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'principalId', 'listLaunchProfiles_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
+--
+-- 'states', 'listLaunchProfiles_states' - Filter this request to launch profiles in any of the given states.
+--
+-- 'studioId', 'listLaunchProfiles_studioId' - The studio ID.
+newListLaunchProfiles ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListLaunchProfiles
+newListLaunchProfiles pStudioId_ =
+  ListLaunchProfiles'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      states = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The max number of results to return in the response.
+listLaunchProfiles_maxResults :: Lens.Lens' ListLaunchProfiles (Prelude.Maybe Prelude.Natural)
+listLaunchProfiles_maxResults = Lens.lens (\ListLaunchProfiles' {maxResults} -> maxResults) (\s@ListLaunchProfiles' {} a -> s {maxResults = a} :: ListLaunchProfiles)
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listLaunchProfiles_nextToken :: Lens.Lens' ListLaunchProfiles (Prelude.Maybe Prelude.Text)
+listLaunchProfiles_nextToken = Lens.lens (\ListLaunchProfiles' {nextToken} -> nextToken) (\s@ListLaunchProfiles' {} a -> s {nextToken = a} :: ListLaunchProfiles)
+
+-- | The principal ID. This currently supports a IAM Identity Center UserId.
+listLaunchProfiles_principalId :: Lens.Lens' ListLaunchProfiles (Prelude.Maybe Prelude.Text)
+listLaunchProfiles_principalId = Lens.lens (\ListLaunchProfiles' {principalId} -> principalId) (\s@ListLaunchProfiles' {} a -> s {principalId = a} :: ListLaunchProfiles)
+
+-- | Filter this request to launch profiles in any of the given states.
+listLaunchProfiles_states :: Lens.Lens' ListLaunchProfiles (Prelude.Maybe [LaunchProfileState])
+listLaunchProfiles_states = Lens.lens (\ListLaunchProfiles' {states} -> states) (\s@ListLaunchProfiles' {} a -> s {states = a} :: ListLaunchProfiles) Prelude.. Lens.mapping Lens.coerced
+
+-- | The studio ID.
+listLaunchProfiles_studioId :: Lens.Lens' ListLaunchProfiles Prelude.Text
+listLaunchProfiles_studioId = Lens.lens (\ListLaunchProfiles' {studioId} -> studioId) (\s@ListLaunchProfiles' {} a -> s {studioId = a} :: ListLaunchProfiles)
+
+instance Core.AWSPager ListLaunchProfiles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listLaunchProfilesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listLaunchProfilesResponse_launchProfiles
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listLaunchProfiles_nextToken
+          Lens..~ rs
+          Lens.^? listLaunchProfilesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListLaunchProfiles where
+  type
+    AWSResponse ListLaunchProfiles =
+      ListLaunchProfilesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListLaunchProfilesResponse'
+            Prelude.<$> (x Data..?> "launchProfiles" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListLaunchProfiles where
+  hashWithSalt _salt ListLaunchProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` states
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListLaunchProfiles where
+  rnf ListLaunchProfiles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf states
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListLaunchProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListLaunchProfiles where
+  toPath ListLaunchProfiles' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles"
+      ]
+
+instance Data.ToQuery ListLaunchProfiles where
+  toQuery ListLaunchProfiles' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "principalId" Data.=: principalId,
+        "states"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> states)
+      ]
+
+-- | /See:/ 'newListLaunchProfilesResponse' smart constructor.
+data ListLaunchProfilesResponse = ListLaunchProfilesResponse'
+  { -- | A collection of launch profiles.
+    launchProfiles :: Prelude.Maybe [LaunchProfile],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLaunchProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfiles', 'listLaunchProfilesResponse_launchProfiles' - A collection of launch profiles.
+--
+-- 'nextToken', 'listLaunchProfilesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listLaunchProfilesResponse_httpStatus' - The response's http status code.
+newListLaunchProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListLaunchProfilesResponse
+newListLaunchProfilesResponse pHttpStatus_ =
+  ListLaunchProfilesResponse'
+    { launchProfiles =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of launch profiles.
+listLaunchProfilesResponse_launchProfiles :: Lens.Lens' ListLaunchProfilesResponse (Prelude.Maybe [LaunchProfile])
+listLaunchProfilesResponse_launchProfiles = Lens.lens (\ListLaunchProfilesResponse' {launchProfiles} -> launchProfiles) (\s@ListLaunchProfilesResponse' {} a -> s {launchProfiles = a} :: ListLaunchProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listLaunchProfilesResponse_nextToken :: Lens.Lens' ListLaunchProfilesResponse (Prelude.Maybe Prelude.Text)
+listLaunchProfilesResponse_nextToken = Lens.lens (\ListLaunchProfilesResponse' {nextToken} -> nextToken) (\s@ListLaunchProfilesResponse' {} a -> s {nextToken = a} :: ListLaunchProfilesResponse)
+
+-- | The response's http status code.
+listLaunchProfilesResponse_httpStatus :: Lens.Lens' ListLaunchProfilesResponse Prelude.Int
+listLaunchProfilesResponse_httpStatus = Lens.lens (\ListLaunchProfilesResponse' {httpStatus} -> httpStatus) (\s@ListLaunchProfilesResponse' {} a -> s {httpStatus = a} :: ListLaunchProfilesResponse)
+
+instance Prelude.NFData ListLaunchProfilesResponse where
+  rnf ListLaunchProfilesResponse' {..} =
+    Prelude.rnf launchProfiles
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListStreamingImages.hs b/gen/Amazonka/Nimble/ListStreamingImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListStreamingImages.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.ListStreamingImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the streaming image resources available to this studio.
+--
+-- This list will contain both images provided by Amazon Web Services, as
+-- well as streaming images that you have created in your studio.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListStreamingImages
+  ( -- * Creating a Request
+    ListStreamingImages (..),
+    newListStreamingImages,
+
+    -- * Request Lenses
+    listStreamingImages_nextToken,
+    listStreamingImages_owner,
+    listStreamingImages_studioId,
+
+    -- * Destructuring the Response
+    ListStreamingImagesResponse (..),
+    newListStreamingImagesResponse,
+
+    -- * Response Lenses
+    listStreamingImagesResponse_nextToken,
+    listStreamingImagesResponse_streamingImages,
+    listStreamingImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStreamingImages' smart constructor.
+data ListStreamingImages = ListStreamingImages'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filter this request to streaming images with the given owner
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStreamingImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStreamingImages_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'owner', 'listStreamingImages_owner' - Filter this request to streaming images with the given owner
+--
+-- 'studioId', 'listStreamingImages_studioId' - The studio ID.
+newListStreamingImages ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListStreamingImages
+newListStreamingImages pStudioId_ =
+  ListStreamingImages'
+    { nextToken = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStreamingImages_nextToken :: Lens.Lens' ListStreamingImages (Prelude.Maybe Prelude.Text)
+listStreamingImages_nextToken = Lens.lens (\ListStreamingImages' {nextToken} -> nextToken) (\s@ListStreamingImages' {} a -> s {nextToken = a} :: ListStreamingImages)
+
+-- | Filter this request to streaming images with the given owner
+listStreamingImages_owner :: Lens.Lens' ListStreamingImages (Prelude.Maybe Prelude.Text)
+listStreamingImages_owner = Lens.lens (\ListStreamingImages' {owner} -> owner) (\s@ListStreamingImages' {} a -> s {owner = a} :: ListStreamingImages)
+
+-- | The studio ID.
+listStreamingImages_studioId :: Lens.Lens' ListStreamingImages Prelude.Text
+listStreamingImages_studioId = Lens.lens (\ListStreamingImages' {studioId} -> studioId) (\s@ListStreamingImages' {} a -> s {studioId = a} :: ListStreamingImages)
+
+instance Core.AWSPager ListStreamingImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStreamingImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStreamingImagesResponse_streamingImages
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStreamingImages_nextToken
+          Lens..~ rs
+          Lens.^? listStreamingImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStreamingImages where
+  type
+    AWSResponse ListStreamingImages =
+      ListStreamingImagesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStreamingImagesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "streamingImages"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStreamingImages where
+  hashWithSalt _salt ListStreamingImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListStreamingImages where
+  rnf ListStreamingImages' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListStreamingImages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStreamingImages where
+  toPath ListStreamingImages' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-images"
+      ]
+
+instance Data.ToQuery ListStreamingImages where
+  toQuery ListStreamingImages' {..} =
+    Prelude.mconcat
+      [ "nextToken" Data.=: nextToken,
+        "owner" Data.=: owner
+      ]
+
+-- | /See:/ 'newListStreamingImagesResponse' smart constructor.
+data ListStreamingImagesResponse = ListStreamingImagesResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A collection of streaming images.
+    streamingImages :: Prelude.Maybe [StreamingImage],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStreamingImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStreamingImagesResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'streamingImages', 'listStreamingImagesResponse_streamingImages' - A collection of streaming images.
+--
+-- 'httpStatus', 'listStreamingImagesResponse_httpStatus' - The response's http status code.
+newListStreamingImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStreamingImagesResponse
+newListStreamingImagesResponse pHttpStatus_ =
+  ListStreamingImagesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      streamingImages = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStreamingImagesResponse_nextToken :: Lens.Lens' ListStreamingImagesResponse (Prelude.Maybe Prelude.Text)
+listStreamingImagesResponse_nextToken = Lens.lens (\ListStreamingImagesResponse' {nextToken} -> nextToken) (\s@ListStreamingImagesResponse' {} a -> s {nextToken = a} :: ListStreamingImagesResponse)
+
+-- | A collection of streaming images.
+listStreamingImagesResponse_streamingImages :: Lens.Lens' ListStreamingImagesResponse (Prelude.Maybe [StreamingImage])
+listStreamingImagesResponse_streamingImages = Lens.lens (\ListStreamingImagesResponse' {streamingImages} -> streamingImages) (\s@ListStreamingImagesResponse' {} a -> s {streamingImages = a} :: ListStreamingImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listStreamingImagesResponse_httpStatus :: Lens.Lens' ListStreamingImagesResponse Prelude.Int
+listStreamingImagesResponse_httpStatus = Lens.lens (\ListStreamingImagesResponse' {httpStatus} -> httpStatus) (\s@ListStreamingImagesResponse' {} a -> s {httpStatus = a} :: ListStreamingImagesResponse)
+
+instance Prelude.NFData ListStreamingImagesResponse where
+  rnf ListStreamingImagesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf streamingImages
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListStreamingSessionBackups.hs b/gen/Amazonka/Nimble/ListStreamingSessionBackups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListStreamingSessionBackups.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.ListStreamingSessionBackups
+-- 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 backups of a streaming session in a studio.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListStreamingSessionBackups
+  ( -- * Creating a Request
+    ListStreamingSessionBackups (..),
+    newListStreamingSessionBackups,
+
+    -- * Request Lenses
+    listStreamingSessionBackups_nextToken,
+    listStreamingSessionBackups_ownedBy,
+    listStreamingSessionBackups_studioId,
+
+    -- * Destructuring the Response
+    ListStreamingSessionBackupsResponse (..),
+    newListStreamingSessionBackupsResponse,
+
+    -- * Response Lenses
+    listStreamingSessionBackupsResponse_nextToken,
+    listStreamingSessionBackupsResponse_streamingSessionBackups,
+    listStreamingSessionBackupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStreamingSessionBackups' smart constructor.
+data ListStreamingSessionBackups = ListStreamingSessionBackups'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The user ID of the user that owns the streaming session.
+    ownedBy :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStreamingSessionBackups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStreamingSessionBackups_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'ownedBy', 'listStreamingSessionBackups_ownedBy' - The user ID of the user that owns the streaming session.
+--
+-- 'studioId', 'listStreamingSessionBackups_studioId' - The studio ID.
+newListStreamingSessionBackups ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListStreamingSessionBackups
+newListStreamingSessionBackups pStudioId_ =
+  ListStreamingSessionBackups'
+    { nextToken =
+        Prelude.Nothing,
+      ownedBy = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStreamingSessionBackups_nextToken :: Lens.Lens' ListStreamingSessionBackups (Prelude.Maybe Prelude.Text)
+listStreamingSessionBackups_nextToken = Lens.lens (\ListStreamingSessionBackups' {nextToken} -> nextToken) (\s@ListStreamingSessionBackups' {} a -> s {nextToken = a} :: ListStreamingSessionBackups)
+
+-- | The user ID of the user that owns the streaming session.
+listStreamingSessionBackups_ownedBy :: Lens.Lens' ListStreamingSessionBackups (Prelude.Maybe Prelude.Text)
+listStreamingSessionBackups_ownedBy = Lens.lens (\ListStreamingSessionBackups' {ownedBy} -> ownedBy) (\s@ListStreamingSessionBackups' {} a -> s {ownedBy = a} :: ListStreamingSessionBackups)
+
+-- | The studio ID.
+listStreamingSessionBackups_studioId :: Lens.Lens' ListStreamingSessionBackups Prelude.Text
+listStreamingSessionBackups_studioId = Lens.lens (\ListStreamingSessionBackups' {studioId} -> studioId) (\s@ListStreamingSessionBackups' {} a -> s {studioId = a} :: ListStreamingSessionBackups)
+
+instance Core.AWSPager ListStreamingSessionBackups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStreamingSessionBackupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStreamingSessionBackupsResponse_streamingSessionBackups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStreamingSessionBackups_nextToken
+          Lens..~ rs
+          Lens.^? listStreamingSessionBackupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStreamingSessionBackups where
+  type
+    AWSResponse ListStreamingSessionBackups =
+      ListStreamingSessionBackupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStreamingSessionBackupsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "streamingSessionBackups"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStreamingSessionBackups where
+  hashWithSalt _salt ListStreamingSessionBackups' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` ownedBy
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListStreamingSessionBackups where
+  rnf ListStreamingSessionBackups' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ownedBy
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListStreamingSessionBackups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStreamingSessionBackups where
+  toPath ListStreamingSessionBackups' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-session-backups"
+      ]
+
+instance Data.ToQuery ListStreamingSessionBackups where
+  toQuery ListStreamingSessionBackups' {..} =
+    Prelude.mconcat
+      [ "nextToken" Data.=: nextToken,
+        "ownedBy" Data.=: ownedBy
+      ]
+
+-- | /See:/ 'newListStreamingSessionBackupsResponse' smart constructor.
+data ListStreamingSessionBackupsResponse = ListStreamingSessionBackupsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the streaming session backups.
+    streamingSessionBackups :: Prelude.Maybe [StreamingSessionBackup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStreamingSessionBackupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStreamingSessionBackupsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'streamingSessionBackups', 'listStreamingSessionBackupsResponse_streamingSessionBackups' - Information about the streaming session backups.
+--
+-- 'httpStatus', 'listStreamingSessionBackupsResponse_httpStatus' - The response's http status code.
+newListStreamingSessionBackupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStreamingSessionBackupsResponse
+newListStreamingSessionBackupsResponse pHttpStatus_ =
+  ListStreamingSessionBackupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      streamingSessionBackups =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStreamingSessionBackupsResponse_nextToken :: Lens.Lens' ListStreamingSessionBackupsResponse (Prelude.Maybe Prelude.Text)
+listStreamingSessionBackupsResponse_nextToken = Lens.lens (\ListStreamingSessionBackupsResponse' {nextToken} -> nextToken) (\s@ListStreamingSessionBackupsResponse' {} a -> s {nextToken = a} :: ListStreamingSessionBackupsResponse)
+
+-- | Information about the streaming session backups.
+listStreamingSessionBackupsResponse_streamingSessionBackups :: Lens.Lens' ListStreamingSessionBackupsResponse (Prelude.Maybe [StreamingSessionBackup])
+listStreamingSessionBackupsResponse_streamingSessionBackups = Lens.lens (\ListStreamingSessionBackupsResponse' {streamingSessionBackups} -> streamingSessionBackups) (\s@ListStreamingSessionBackupsResponse' {} a -> s {streamingSessionBackups = a} :: ListStreamingSessionBackupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listStreamingSessionBackupsResponse_httpStatus :: Lens.Lens' ListStreamingSessionBackupsResponse Prelude.Int
+listStreamingSessionBackupsResponse_httpStatus = Lens.lens (\ListStreamingSessionBackupsResponse' {httpStatus} -> httpStatus) (\s@ListStreamingSessionBackupsResponse' {} a -> s {httpStatus = a} :: ListStreamingSessionBackupsResponse)
+
+instance
+  Prelude.NFData
+    ListStreamingSessionBackupsResponse
+  where
+  rnf ListStreamingSessionBackupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf streamingSessionBackups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListStreamingSessions.hs b/gen/Amazonka/Nimble/ListStreamingSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListStreamingSessions.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.ListStreamingSessions
+-- 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 streaming sessions in a studio.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListStreamingSessions
+  ( -- * Creating a Request
+    ListStreamingSessions (..),
+    newListStreamingSessions,
+
+    -- * Request Lenses
+    listStreamingSessions_createdBy,
+    listStreamingSessions_nextToken,
+    listStreamingSessions_ownedBy,
+    listStreamingSessions_sessionIds,
+    listStreamingSessions_studioId,
+
+    -- * Destructuring the Response
+    ListStreamingSessionsResponse (..),
+    newListStreamingSessionsResponse,
+
+    -- * Response Lenses
+    listStreamingSessionsResponse_nextToken,
+    listStreamingSessionsResponse_sessions,
+    listStreamingSessionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStreamingSessions' smart constructor.
+data ListStreamingSessions = ListStreamingSessions'
+  { -- | Filters the request to streaming sessions created by the given user.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filters the request to streaming session owned by the given user
+    ownedBy :: Prelude.Maybe Prelude.Text,
+    -- | Filters the request to only the provided session IDs.
+    sessionIds :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStreamingSessions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdBy', 'listStreamingSessions_createdBy' - Filters the request to streaming sessions created by the given user.
+--
+-- 'nextToken', 'listStreamingSessions_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'ownedBy', 'listStreamingSessions_ownedBy' - Filters the request to streaming session owned by the given user
+--
+-- 'sessionIds', 'listStreamingSessions_sessionIds' - Filters the request to only the provided session IDs.
+--
+-- 'studioId', 'listStreamingSessions_studioId' - The studio ID.
+newListStreamingSessions ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListStreamingSessions
+newListStreamingSessions pStudioId_ =
+  ListStreamingSessions'
+    { createdBy = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      ownedBy = Prelude.Nothing,
+      sessionIds = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | Filters the request to streaming sessions created by the given user.
+listStreamingSessions_createdBy :: Lens.Lens' ListStreamingSessions (Prelude.Maybe Prelude.Text)
+listStreamingSessions_createdBy = Lens.lens (\ListStreamingSessions' {createdBy} -> createdBy) (\s@ListStreamingSessions' {} a -> s {createdBy = a} :: ListStreamingSessions)
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStreamingSessions_nextToken :: Lens.Lens' ListStreamingSessions (Prelude.Maybe Prelude.Text)
+listStreamingSessions_nextToken = Lens.lens (\ListStreamingSessions' {nextToken} -> nextToken) (\s@ListStreamingSessions' {} a -> s {nextToken = a} :: ListStreamingSessions)
+
+-- | Filters the request to streaming session owned by the given user
+listStreamingSessions_ownedBy :: Lens.Lens' ListStreamingSessions (Prelude.Maybe Prelude.Text)
+listStreamingSessions_ownedBy = Lens.lens (\ListStreamingSessions' {ownedBy} -> ownedBy) (\s@ListStreamingSessions' {} a -> s {ownedBy = a} :: ListStreamingSessions)
+
+-- | Filters the request to only the provided session IDs.
+listStreamingSessions_sessionIds :: Lens.Lens' ListStreamingSessions (Prelude.Maybe Prelude.Text)
+listStreamingSessions_sessionIds = Lens.lens (\ListStreamingSessions' {sessionIds} -> sessionIds) (\s@ListStreamingSessions' {} a -> s {sessionIds = a} :: ListStreamingSessions)
+
+-- | The studio ID.
+listStreamingSessions_studioId :: Lens.Lens' ListStreamingSessions Prelude.Text
+listStreamingSessions_studioId = Lens.lens (\ListStreamingSessions' {studioId} -> studioId) (\s@ListStreamingSessions' {} a -> s {studioId = a} :: ListStreamingSessions)
+
+instance Core.AWSPager ListStreamingSessions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStreamingSessionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStreamingSessionsResponse_sessions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStreamingSessions_nextToken
+          Lens..~ rs
+          Lens.^? listStreamingSessionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStreamingSessions where
+  type
+    AWSResponse ListStreamingSessions =
+      ListStreamingSessionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStreamingSessionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "sessions" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStreamingSessions where
+  hashWithSalt _salt ListStreamingSessions' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` ownedBy
+      `Prelude.hashWithSalt` sessionIds
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListStreamingSessions where
+  rnf ListStreamingSessions' {..} =
+    Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ownedBy
+      `Prelude.seq` Prelude.rnf sessionIds
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListStreamingSessions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStreamingSessions where
+  toPath ListStreamingSessions' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions"
+      ]
+
+instance Data.ToQuery ListStreamingSessions where
+  toQuery ListStreamingSessions' {..} =
+    Prelude.mconcat
+      [ "createdBy" Data.=: createdBy,
+        "nextToken" Data.=: nextToken,
+        "ownedBy" Data.=: ownedBy,
+        "sessionIds" Data.=: sessionIds
+      ]
+
+-- | /See:/ 'newListStreamingSessionsResponse' smart constructor.
+data ListStreamingSessionsResponse = ListStreamingSessionsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A collection of streaming sessions.
+    sessions :: Prelude.Maybe [StreamingSession],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStreamingSessionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStreamingSessionsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'sessions', 'listStreamingSessionsResponse_sessions' - A collection of streaming sessions.
+--
+-- 'httpStatus', 'listStreamingSessionsResponse_httpStatus' - The response's http status code.
+newListStreamingSessionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStreamingSessionsResponse
+newListStreamingSessionsResponse pHttpStatus_ =
+  ListStreamingSessionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      sessions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStreamingSessionsResponse_nextToken :: Lens.Lens' ListStreamingSessionsResponse (Prelude.Maybe Prelude.Text)
+listStreamingSessionsResponse_nextToken = Lens.lens (\ListStreamingSessionsResponse' {nextToken} -> nextToken) (\s@ListStreamingSessionsResponse' {} a -> s {nextToken = a} :: ListStreamingSessionsResponse)
+
+-- | A collection of streaming sessions.
+listStreamingSessionsResponse_sessions :: Lens.Lens' ListStreamingSessionsResponse (Prelude.Maybe [StreamingSession])
+listStreamingSessionsResponse_sessions = Lens.lens (\ListStreamingSessionsResponse' {sessions} -> sessions) (\s@ListStreamingSessionsResponse' {} a -> s {sessions = a} :: ListStreamingSessionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listStreamingSessionsResponse_httpStatus :: Lens.Lens' ListStreamingSessionsResponse Prelude.Int
+listStreamingSessionsResponse_httpStatus = Lens.lens (\ListStreamingSessionsResponse' {httpStatus} -> httpStatus) (\s@ListStreamingSessionsResponse' {} a -> s {httpStatus = a} :: ListStreamingSessionsResponse)
+
+instance Prelude.NFData ListStreamingSessionsResponse where
+  rnf ListStreamingSessionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sessions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListStudioComponents.hs b/gen/Amazonka/Nimble/ListStudioComponents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListStudioComponents.hs
@@ -0,0 +1,275 @@
+{-# 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.Nimble.ListStudioComponents
+-- 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 @StudioComponents@ in a studio.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListStudioComponents
+  ( -- * Creating a Request
+    ListStudioComponents (..),
+    newListStudioComponents,
+
+    -- * Request Lenses
+    listStudioComponents_maxResults,
+    listStudioComponents_nextToken,
+    listStudioComponents_states,
+    listStudioComponents_types,
+    listStudioComponents_studioId,
+
+    -- * Destructuring the Response
+    ListStudioComponentsResponse (..),
+    newListStudioComponentsResponse,
+
+    -- * Response Lenses
+    listStudioComponentsResponse_nextToken,
+    listStudioComponentsResponse_studioComponents,
+    listStudioComponentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStudioComponents' smart constructor.
+data ListStudioComponents = ListStudioComponents'
+  { -- | The max number of results to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filters the request to studio components that are in one of the given
+    -- states.
+    states :: Prelude.Maybe [StudioComponentState],
+    -- | Filters the request to studio components that are of one of the given
+    -- types.
+    types :: Prelude.Maybe [StudioComponentType],
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStudioComponents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStudioComponents_maxResults' - The max number of results to return in the response.
+--
+-- 'nextToken', 'listStudioComponents_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'states', 'listStudioComponents_states' - Filters the request to studio components that are in one of the given
+-- states.
+--
+-- 'types', 'listStudioComponents_types' - Filters the request to studio components that are of one of the given
+-- types.
+--
+-- 'studioId', 'listStudioComponents_studioId' - The studio ID.
+newListStudioComponents ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListStudioComponents
+newListStudioComponents pStudioId_ =
+  ListStudioComponents'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      states = Prelude.Nothing,
+      types = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The max number of results to return in the response.
+listStudioComponents_maxResults :: Lens.Lens' ListStudioComponents (Prelude.Maybe Prelude.Natural)
+listStudioComponents_maxResults = Lens.lens (\ListStudioComponents' {maxResults} -> maxResults) (\s@ListStudioComponents' {} a -> s {maxResults = a} :: ListStudioComponents)
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStudioComponents_nextToken :: Lens.Lens' ListStudioComponents (Prelude.Maybe Prelude.Text)
+listStudioComponents_nextToken = Lens.lens (\ListStudioComponents' {nextToken} -> nextToken) (\s@ListStudioComponents' {} a -> s {nextToken = a} :: ListStudioComponents)
+
+-- | Filters the request to studio components that are in one of the given
+-- states.
+listStudioComponents_states :: Lens.Lens' ListStudioComponents (Prelude.Maybe [StudioComponentState])
+listStudioComponents_states = Lens.lens (\ListStudioComponents' {states} -> states) (\s@ListStudioComponents' {} a -> s {states = a} :: ListStudioComponents) Prelude.. Lens.mapping Lens.coerced
+
+-- | Filters the request to studio components that are of one of the given
+-- types.
+listStudioComponents_types :: Lens.Lens' ListStudioComponents (Prelude.Maybe [StudioComponentType])
+listStudioComponents_types = Lens.lens (\ListStudioComponents' {types} -> types) (\s@ListStudioComponents' {} a -> s {types = a} :: ListStudioComponents) Prelude.. Lens.mapping Lens.coerced
+
+-- | The studio ID.
+listStudioComponents_studioId :: Lens.Lens' ListStudioComponents Prelude.Text
+listStudioComponents_studioId = Lens.lens (\ListStudioComponents' {studioId} -> studioId) (\s@ListStudioComponents' {} a -> s {studioId = a} :: ListStudioComponents)
+
+instance Core.AWSPager ListStudioComponents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStudioComponentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStudioComponentsResponse_studioComponents
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStudioComponents_nextToken
+          Lens..~ rs
+          Lens.^? listStudioComponentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStudioComponents where
+  type
+    AWSResponse ListStudioComponents =
+      ListStudioComponentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStudioComponentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "studioComponents"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStudioComponents where
+  hashWithSalt _salt ListStudioComponents' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` states
+      `Prelude.hashWithSalt` types
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListStudioComponents where
+  rnf ListStudioComponents' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf states
+      `Prelude.seq` Prelude.rnf types
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListStudioComponents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStudioComponents where
+  toPath ListStudioComponents' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/studio-components"
+      ]
+
+instance Data.ToQuery ListStudioComponents where
+  toQuery ListStudioComponents' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "states"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> states),
+        "types"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> types)
+      ]
+
+-- | /See:/ 'newListStudioComponentsResponse' smart constructor.
+data ListStudioComponentsResponse = ListStudioComponentsResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A collection of studio components.
+    studioComponents :: Prelude.Maybe [StudioComponent],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStudioComponentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStudioComponentsResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'studioComponents', 'listStudioComponentsResponse_studioComponents' - A collection of studio components.
+--
+-- 'httpStatus', 'listStudioComponentsResponse_httpStatus' - The response's http status code.
+newListStudioComponentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStudioComponentsResponse
+newListStudioComponentsResponse pHttpStatus_ =
+  ListStudioComponentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      studioComponents = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStudioComponentsResponse_nextToken :: Lens.Lens' ListStudioComponentsResponse (Prelude.Maybe Prelude.Text)
+listStudioComponentsResponse_nextToken = Lens.lens (\ListStudioComponentsResponse' {nextToken} -> nextToken) (\s@ListStudioComponentsResponse' {} a -> s {nextToken = a} :: ListStudioComponentsResponse)
+
+-- | A collection of studio components.
+listStudioComponentsResponse_studioComponents :: Lens.Lens' ListStudioComponentsResponse (Prelude.Maybe [StudioComponent])
+listStudioComponentsResponse_studioComponents = Lens.lens (\ListStudioComponentsResponse' {studioComponents} -> studioComponents) (\s@ListStudioComponentsResponse' {} a -> s {studioComponents = a} :: ListStudioComponentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listStudioComponentsResponse_httpStatus :: Lens.Lens' ListStudioComponentsResponse Prelude.Int
+listStudioComponentsResponse_httpStatus = Lens.lens (\ListStudioComponentsResponse' {httpStatus} -> httpStatus) (\s@ListStudioComponentsResponse' {} a -> s {httpStatus = a} :: ListStudioComponentsResponse)
+
+instance Prelude.NFData ListStudioComponentsResponse where
+  rnf ListStudioComponentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf studioComponents
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListStudioMembers.hs b/gen/Amazonka/Nimble/ListStudioMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListStudioMembers.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.ListStudioMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get all users in a given studio membership.
+--
+-- @ListStudioMembers@ only returns admin members.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListStudioMembers
+  ( -- * Creating a Request
+    ListStudioMembers (..),
+    newListStudioMembers,
+
+    -- * Request Lenses
+    listStudioMembers_maxResults,
+    listStudioMembers_nextToken,
+    listStudioMembers_studioId,
+
+    -- * Destructuring the Response
+    ListStudioMembersResponse (..),
+    newListStudioMembersResponse,
+
+    -- * Response Lenses
+    listStudioMembersResponse_members,
+    listStudioMembersResponse_nextToken,
+    listStudioMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStudioMembers' smart constructor.
+data ListStudioMembers = ListStudioMembers'
+  { -- | The max number of results to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStudioMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStudioMembers_maxResults' - The max number of results to return in the response.
+--
+-- 'nextToken', 'listStudioMembers_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'studioId', 'listStudioMembers_studioId' - The studio ID.
+newListStudioMembers ::
+  -- | 'studioId'
+  Prelude.Text ->
+  ListStudioMembers
+newListStudioMembers pStudioId_ =
+  ListStudioMembers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The max number of results to return in the response.
+listStudioMembers_maxResults :: Lens.Lens' ListStudioMembers (Prelude.Maybe Prelude.Natural)
+listStudioMembers_maxResults = Lens.lens (\ListStudioMembers' {maxResults} -> maxResults) (\s@ListStudioMembers' {} a -> s {maxResults = a} :: ListStudioMembers)
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStudioMembers_nextToken :: Lens.Lens' ListStudioMembers (Prelude.Maybe Prelude.Text)
+listStudioMembers_nextToken = Lens.lens (\ListStudioMembers' {nextToken} -> nextToken) (\s@ListStudioMembers' {} a -> s {nextToken = a} :: ListStudioMembers)
+
+-- | The studio ID.
+listStudioMembers_studioId :: Lens.Lens' ListStudioMembers Prelude.Text
+listStudioMembers_studioId = Lens.lens (\ListStudioMembers' {studioId} -> studioId) (\s@ListStudioMembers' {} a -> s {studioId = a} :: ListStudioMembers)
+
+instance Core.AWSPager ListStudioMembers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStudioMembersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStudioMembersResponse_members
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStudioMembers_nextToken
+          Lens..~ rs
+          Lens.^? listStudioMembersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStudioMembers where
+  type
+    AWSResponse ListStudioMembers =
+      ListStudioMembersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStudioMembersResponse'
+            Prelude.<$> (x Data..?> "members" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStudioMembers where
+  hashWithSalt _salt ListStudioMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData ListStudioMembers where
+  rnf ListStudioMembers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders ListStudioMembers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStudioMembers where
+  toPath ListStudioMembers' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/membership"
+      ]
+
+instance Data.ToQuery ListStudioMembers where
+  toQuery ListStudioMembers' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListStudioMembersResponse' smart constructor.
+data ListStudioMembersResponse = ListStudioMembersResponse'
+  { -- | A list of admin members.
+    members :: Prelude.Maybe [StudioMembership],
+    -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStudioMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'members', 'listStudioMembersResponse_members' - A list of admin members.
+--
+-- 'nextToken', 'listStudioMembersResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listStudioMembersResponse_httpStatus' - The response's http status code.
+newListStudioMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStudioMembersResponse
+newListStudioMembersResponse pHttpStatus_ =
+  ListStudioMembersResponse'
+    { members =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of admin members.
+listStudioMembersResponse_members :: Lens.Lens' ListStudioMembersResponse (Prelude.Maybe [StudioMembership])
+listStudioMembersResponse_members = Lens.lens (\ListStudioMembersResponse' {members} -> members) (\s@ListStudioMembersResponse' {} a -> s {members = a} :: ListStudioMembersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStudioMembersResponse_nextToken :: Lens.Lens' ListStudioMembersResponse (Prelude.Maybe Prelude.Text)
+listStudioMembersResponse_nextToken = Lens.lens (\ListStudioMembersResponse' {nextToken} -> nextToken) (\s@ListStudioMembersResponse' {} a -> s {nextToken = a} :: ListStudioMembersResponse)
+
+-- | The response's http status code.
+listStudioMembersResponse_httpStatus :: Lens.Lens' ListStudioMembersResponse Prelude.Int
+listStudioMembersResponse_httpStatus = Lens.lens (\ListStudioMembersResponse' {httpStatus} -> httpStatus) (\s@ListStudioMembersResponse' {} a -> s {httpStatus = a} :: ListStudioMembersResponse)
+
+instance Prelude.NFData ListStudioMembersResponse where
+  rnf ListStudioMembersResponse' {..} =
+    Prelude.rnf members
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/ListStudios.hs b/gen/Amazonka/Nimble/ListStudios.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListStudios.hs
@@ -0,0 +1,192 @@
+{-# 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.Nimble.ListStudios
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List studios in your Amazon Web Services accounts in the requested
+-- Amazon Web Services Region.
+--
+-- This operation returns paginated results.
+module Amazonka.Nimble.ListStudios
+  ( -- * Creating a Request
+    ListStudios (..),
+    newListStudios,
+
+    -- * Request Lenses
+    listStudios_nextToken,
+
+    -- * Destructuring the Response
+    ListStudiosResponse (..),
+    newListStudiosResponse,
+
+    -- * Response Lenses
+    listStudiosResponse_nextToken,
+    listStudiosResponse_httpStatus,
+    listStudiosResponse_studios,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStudios' smart constructor.
+data ListStudios = ListStudios'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStudios' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStudios_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+newListStudios ::
+  ListStudios
+newListStudios =
+  ListStudios' {nextToken = Prelude.Nothing}
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStudios_nextToken :: Lens.Lens' ListStudios (Prelude.Maybe Prelude.Text)
+listStudios_nextToken = Lens.lens (\ListStudios' {nextToken} -> nextToken) (\s@ListStudios' {} a -> s {nextToken = a} :: ListStudios)
+
+instance Core.AWSPager ListStudios where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStudiosResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listStudiosResponse_studios) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStudios_nextToken
+          Lens..~ rs
+          Lens.^? listStudiosResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStudios where
+  type AWSResponse ListStudios = ListStudiosResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStudiosResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "studios" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListStudios where
+  hashWithSalt _salt ListStudios' {..} =
+    _salt `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListStudios where
+  rnf ListStudios' {..} = Prelude.rnf nextToken
+
+instance Data.ToHeaders ListStudios where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStudios where
+  toPath = Prelude.const "/2020-08-01/studios"
+
+instance Data.ToQuery ListStudios where
+  toQuery ListStudios' {..} =
+    Prelude.mconcat ["nextToken" Data.=: nextToken]
+
+-- | /See:/ 'newListStudiosResponse' smart constructor.
+data ListStudiosResponse = ListStudiosResponse'
+  { -- | The token for the next set of results, or null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A collection of studios.
+    studios :: [Studio]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStudiosResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStudiosResponse_nextToken' - The token for the next set of results, or null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listStudiosResponse_httpStatus' - The response's http status code.
+--
+-- 'studios', 'listStudiosResponse_studios' - A collection of studios.
+newListStudiosResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStudiosResponse
+newListStudiosResponse pHttpStatus_ =
+  ListStudiosResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      studios = Prelude.mempty
+    }
+
+-- | The token for the next set of results, or null if there are no more
+-- results.
+listStudiosResponse_nextToken :: Lens.Lens' ListStudiosResponse (Prelude.Maybe Prelude.Text)
+listStudiosResponse_nextToken = Lens.lens (\ListStudiosResponse' {nextToken} -> nextToken) (\s@ListStudiosResponse' {} a -> s {nextToken = a} :: ListStudiosResponse)
+
+-- | The response's http status code.
+listStudiosResponse_httpStatus :: Lens.Lens' ListStudiosResponse Prelude.Int
+listStudiosResponse_httpStatus = Lens.lens (\ListStudiosResponse' {httpStatus} -> httpStatus) (\s@ListStudiosResponse' {} a -> s {httpStatus = a} :: ListStudiosResponse)
+
+-- | A collection of studios.
+listStudiosResponse_studios :: Lens.Lens' ListStudiosResponse [Studio]
+listStudiosResponse_studios = Lens.lens (\ListStudiosResponse' {studios} -> studios) (\s@ListStudiosResponse' {} a -> s {studios = a} :: ListStudiosResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListStudiosResponse where
+  rnf ListStudiosResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf studios
diff --git a/gen/Amazonka/Nimble/ListTagsForResource.hs b/gen/Amazonka/Nimble/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/ListTagsForResource.hs
@@ -0,0 +1,172 @@
+{-# 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.Nimble.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)
+--
+-- Gets the tags for a resource, given its Amazon Resource Names (ARN).
+--
+-- This operation supports ARNs for all resource types in Nimble Studio
+-- that support tags, including studio, studio component, launch profile,
+-- streaming image, and streaming session. All resources that can be tagged
+-- will contain an ARN property, so you do not have to create this ARN
+-- yourself.
+module Amazonka.Nimble.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.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource for which you want to
+    -- list tags.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource for which you want to
+-- list tags.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource for which you want to
+-- list tags.
+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
+      ["/2020-08-01/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this 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' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this 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/Nimble/PutLaunchProfileMembers.hs b/gen/Amazonka/Nimble/PutLaunchProfileMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/PutLaunchProfileMembers.hs
@@ -0,0 +1,237 @@
+{-# 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.Nimble.PutLaunchProfileMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add\/update users with given persona to launch profile membership.
+module Amazonka.Nimble.PutLaunchProfileMembers
+  ( -- * Creating a Request
+    PutLaunchProfileMembers (..),
+    newPutLaunchProfileMembers,
+
+    -- * Request Lenses
+    putLaunchProfileMembers_clientToken,
+    putLaunchProfileMembers_identityStoreId,
+    putLaunchProfileMembers_launchProfileId,
+    putLaunchProfileMembers_members,
+    putLaunchProfileMembers_studioId,
+
+    -- * Destructuring the Response
+    PutLaunchProfileMembersResponse (..),
+    newPutLaunchProfileMembersResponse,
+
+    -- * Response Lenses
+    putLaunchProfileMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutLaunchProfileMembers' smart constructor.
+data PutLaunchProfileMembers = PutLaunchProfileMembers'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the identity store.
+    identityStoreId :: Prelude.Text,
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | A list of members.
+    members :: Prelude.NonEmpty NewLaunchProfileMember,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLaunchProfileMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'putLaunchProfileMembers_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'identityStoreId', 'putLaunchProfileMembers_identityStoreId' - The ID of the identity store.
+--
+-- 'launchProfileId', 'putLaunchProfileMembers_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'members', 'putLaunchProfileMembers_members' - A list of members.
+--
+-- 'studioId', 'putLaunchProfileMembers_studioId' - The studio ID.
+newPutLaunchProfileMembers ::
+  -- | 'identityStoreId'
+  Prelude.Text ->
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'members'
+  Prelude.NonEmpty NewLaunchProfileMember ->
+  -- | 'studioId'
+  Prelude.Text ->
+  PutLaunchProfileMembers
+newPutLaunchProfileMembers
+  pIdentityStoreId_
+  pLaunchProfileId_
+  pMembers_
+  pStudioId_ =
+    PutLaunchProfileMembers'
+      { clientToken =
+          Prelude.Nothing,
+        identityStoreId = pIdentityStoreId_,
+        launchProfileId = pLaunchProfileId_,
+        members = Lens.coerced Lens.# pMembers_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+putLaunchProfileMembers_clientToken :: Lens.Lens' PutLaunchProfileMembers (Prelude.Maybe Prelude.Text)
+putLaunchProfileMembers_clientToken = Lens.lens (\PutLaunchProfileMembers' {clientToken} -> clientToken) (\s@PutLaunchProfileMembers' {} a -> s {clientToken = a} :: PutLaunchProfileMembers)
+
+-- | The ID of the identity store.
+putLaunchProfileMembers_identityStoreId :: Lens.Lens' PutLaunchProfileMembers Prelude.Text
+putLaunchProfileMembers_identityStoreId = Lens.lens (\PutLaunchProfileMembers' {identityStoreId} -> identityStoreId) (\s@PutLaunchProfileMembers' {} a -> s {identityStoreId = a} :: PutLaunchProfileMembers)
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+putLaunchProfileMembers_launchProfileId :: Lens.Lens' PutLaunchProfileMembers Prelude.Text
+putLaunchProfileMembers_launchProfileId = Lens.lens (\PutLaunchProfileMembers' {launchProfileId} -> launchProfileId) (\s@PutLaunchProfileMembers' {} a -> s {launchProfileId = a} :: PutLaunchProfileMembers)
+
+-- | A list of members.
+putLaunchProfileMembers_members :: Lens.Lens' PutLaunchProfileMembers (Prelude.NonEmpty NewLaunchProfileMember)
+putLaunchProfileMembers_members = Lens.lens (\PutLaunchProfileMembers' {members} -> members) (\s@PutLaunchProfileMembers' {} a -> s {members = a} :: PutLaunchProfileMembers) Prelude.. Lens.coerced
+
+-- | The studio ID.
+putLaunchProfileMembers_studioId :: Lens.Lens' PutLaunchProfileMembers Prelude.Text
+putLaunchProfileMembers_studioId = Lens.lens (\PutLaunchProfileMembers' {studioId} -> studioId) (\s@PutLaunchProfileMembers' {} a -> s {studioId = a} :: PutLaunchProfileMembers)
+
+instance Core.AWSRequest PutLaunchProfileMembers where
+  type
+    AWSResponse PutLaunchProfileMembers =
+      PutLaunchProfileMembersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutLaunchProfileMembersResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutLaunchProfileMembers where
+  hashWithSalt _salt PutLaunchProfileMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` identityStoreId
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` members
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData PutLaunchProfileMembers where
+  rnf PutLaunchProfileMembers' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf identityStoreId
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf members
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders PutLaunchProfileMembers where
+  toHeaders PutLaunchProfileMembers' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON PutLaunchProfileMembers where
+  toJSON PutLaunchProfileMembers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("identityStoreId" Data..= identityStoreId),
+            Prelude.Just ("members" Data..= members)
+          ]
+      )
+
+instance Data.ToPath PutLaunchProfileMembers where
+  toPath PutLaunchProfileMembers' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/membership"
+      ]
+
+instance Data.ToQuery PutLaunchProfileMembers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutLaunchProfileMembersResponse' smart constructor.
+data PutLaunchProfileMembersResponse = PutLaunchProfileMembersResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLaunchProfileMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putLaunchProfileMembersResponse_httpStatus' - The response's http status code.
+newPutLaunchProfileMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutLaunchProfileMembersResponse
+newPutLaunchProfileMembersResponse pHttpStatus_ =
+  PutLaunchProfileMembersResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putLaunchProfileMembersResponse_httpStatus :: Lens.Lens' PutLaunchProfileMembersResponse Prelude.Int
+putLaunchProfileMembersResponse_httpStatus = Lens.lens (\PutLaunchProfileMembersResponse' {httpStatus} -> httpStatus) (\s@PutLaunchProfileMembersResponse' {} a -> s {httpStatus = a} :: PutLaunchProfileMembersResponse)
+
+instance
+  Prelude.NFData
+    PutLaunchProfileMembersResponse
+  where
+  rnf PutLaunchProfileMembersResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/PutStudioMembers.hs b/gen/Amazonka/Nimble/PutStudioMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/PutStudioMembers.hs
@@ -0,0 +1,213 @@
+{-# 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.Nimble.PutStudioMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add\/update users with given persona to studio membership.
+module Amazonka.Nimble.PutStudioMembers
+  ( -- * Creating a Request
+    PutStudioMembers (..),
+    newPutStudioMembers,
+
+    -- * Request Lenses
+    putStudioMembers_clientToken,
+    putStudioMembers_identityStoreId,
+    putStudioMembers_members,
+    putStudioMembers_studioId,
+
+    -- * Destructuring the Response
+    PutStudioMembersResponse (..),
+    newPutStudioMembersResponse,
+
+    -- * Response Lenses
+    putStudioMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutStudioMembers' smart constructor.
+data PutStudioMembers = PutStudioMembers'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the identity store.
+    identityStoreId :: Prelude.Text,
+    -- | A list of members.
+    members :: Prelude.NonEmpty NewStudioMember,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutStudioMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'putStudioMembers_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'identityStoreId', 'putStudioMembers_identityStoreId' - The ID of the identity store.
+--
+-- 'members', 'putStudioMembers_members' - A list of members.
+--
+-- 'studioId', 'putStudioMembers_studioId' - The studio ID.
+newPutStudioMembers ::
+  -- | 'identityStoreId'
+  Prelude.Text ->
+  -- | 'members'
+  Prelude.NonEmpty NewStudioMember ->
+  -- | 'studioId'
+  Prelude.Text ->
+  PutStudioMembers
+newPutStudioMembers
+  pIdentityStoreId_
+  pMembers_
+  pStudioId_ =
+    PutStudioMembers'
+      { clientToken = Prelude.Nothing,
+        identityStoreId = pIdentityStoreId_,
+        members = Lens.coerced Lens.# pMembers_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+putStudioMembers_clientToken :: Lens.Lens' PutStudioMembers (Prelude.Maybe Prelude.Text)
+putStudioMembers_clientToken = Lens.lens (\PutStudioMembers' {clientToken} -> clientToken) (\s@PutStudioMembers' {} a -> s {clientToken = a} :: PutStudioMembers)
+
+-- | The ID of the identity store.
+putStudioMembers_identityStoreId :: Lens.Lens' PutStudioMembers Prelude.Text
+putStudioMembers_identityStoreId = Lens.lens (\PutStudioMembers' {identityStoreId} -> identityStoreId) (\s@PutStudioMembers' {} a -> s {identityStoreId = a} :: PutStudioMembers)
+
+-- | A list of members.
+putStudioMembers_members :: Lens.Lens' PutStudioMembers (Prelude.NonEmpty NewStudioMember)
+putStudioMembers_members = Lens.lens (\PutStudioMembers' {members} -> members) (\s@PutStudioMembers' {} a -> s {members = a} :: PutStudioMembers) Prelude.. Lens.coerced
+
+-- | The studio ID.
+putStudioMembers_studioId :: Lens.Lens' PutStudioMembers Prelude.Text
+putStudioMembers_studioId = Lens.lens (\PutStudioMembers' {studioId} -> studioId) (\s@PutStudioMembers' {} a -> s {studioId = a} :: PutStudioMembers)
+
+instance Core.AWSRequest PutStudioMembers where
+  type
+    AWSResponse PutStudioMembers =
+      PutStudioMembersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutStudioMembersResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutStudioMembers where
+  hashWithSalt _salt PutStudioMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` identityStoreId
+      `Prelude.hashWithSalt` members
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData PutStudioMembers where
+  rnf PutStudioMembers' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf identityStoreId
+      `Prelude.seq` Prelude.rnf members
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders PutStudioMembers where
+  toHeaders PutStudioMembers' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON PutStudioMembers where
+  toJSON PutStudioMembers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("identityStoreId" Data..= identityStoreId),
+            Prelude.Just ("members" Data..= members)
+          ]
+      )
+
+instance Data.ToPath PutStudioMembers where
+  toPath PutStudioMembers' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/membership"
+      ]
+
+instance Data.ToQuery PutStudioMembers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutStudioMembersResponse' smart constructor.
+data PutStudioMembersResponse = PutStudioMembersResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutStudioMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putStudioMembersResponse_httpStatus' - The response's http status code.
+newPutStudioMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutStudioMembersResponse
+newPutStudioMembersResponse pHttpStatus_ =
+  PutStudioMembersResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putStudioMembersResponse_httpStatus :: Lens.Lens' PutStudioMembersResponse Prelude.Int
+putStudioMembersResponse_httpStatus = Lens.lens (\PutStudioMembersResponse' {httpStatus} -> httpStatus) (\s@PutStudioMembersResponse' {} a -> s {httpStatus = a} :: PutStudioMembersResponse)
+
+instance Prelude.NFData PutStudioMembersResponse where
+  rnf PutStudioMembersResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/StartStreamingSession.hs b/gen/Amazonka/Nimble/StartStreamingSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/StartStreamingSession.hs
@@ -0,0 +1,220 @@
+{-# 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.Nimble.StartStreamingSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Transitions sessions from the @STOPPED@ state into the @READY@ state.
+-- The @START_IN_PROGRESS@ state is the intermediate state between the
+-- @STOPPED@ and @READY@ states.
+module Amazonka.Nimble.StartStreamingSession
+  ( -- * Creating a Request
+    StartStreamingSession (..),
+    newStartStreamingSession,
+
+    -- * Request Lenses
+    startStreamingSession_backupId,
+    startStreamingSession_clientToken,
+    startStreamingSession_sessionId,
+    startStreamingSession_studioId,
+
+    -- * Destructuring the Response
+    StartStreamingSessionResponse (..),
+    newStartStreamingSessionResponse,
+
+    -- * Response Lenses
+    startStreamingSessionResponse_session,
+    startStreamingSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartStreamingSession' smart constructor.
+data StartStreamingSession = StartStreamingSession'
+  { -- | The ID of the backup.
+    backupId :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The streaming session ID for the @StartStreamingSessionRequest@.
+    sessionId :: Prelude.Text,
+    -- | The studio ID for the StartStreamingSessionRequest.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartStreamingSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backupId', 'startStreamingSession_backupId' - The ID of the backup.
+--
+-- 'clientToken', 'startStreamingSession_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'sessionId', 'startStreamingSession_sessionId' - The streaming session ID for the @StartStreamingSessionRequest@.
+--
+-- 'studioId', 'startStreamingSession_studioId' - The studio ID for the StartStreamingSessionRequest.
+newStartStreamingSession ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  StartStreamingSession
+newStartStreamingSession pSessionId_ pStudioId_ =
+  StartStreamingSession'
+    { backupId = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      sessionId = pSessionId_,
+      studioId = pStudioId_
+    }
+
+-- | The ID of the backup.
+startStreamingSession_backupId :: Lens.Lens' StartStreamingSession (Prelude.Maybe Prelude.Text)
+startStreamingSession_backupId = Lens.lens (\StartStreamingSession' {backupId} -> backupId) (\s@StartStreamingSession' {} a -> s {backupId = a} :: StartStreamingSession)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+startStreamingSession_clientToken :: Lens.Lens' StartStreamingSession (Prelude.Maybe Prelude.Text)
+startStreamingSession_clientToken = Lens.lens (\StartStreamingSession' {clientToken} -> clientToken) (\s@StartStreamingSession' {} a -> s {clientToken = a} :: StartStreamingSession)
+
+-- | The streaming session ID for the @StartStreamingSessionRequest@.
+startStreamingSession_sessionId :: Lens.Lens' StartStreamingSession Prelude.Text
+startStreamingSession_sessionId = Lens.lens (\StartStreamingSession' {sessionId} -> sessionId) (\s@StartStreamingSession' {} a -> s {sessionId = a} :: StartStreamingSession)
+
+-- | The studio ID for the StartStreamingSessionRequest.
+startStreamingSession_studioId :: Lens.Lens' StartStreamingSession Prelude.Text
+startStreamingSession_studioId = Lens.lens (\StartStreamingSession' {studioId} -> studioId) (\s@StartStreamingSession' {} a -> s {studioId = a} :: StartStreamingSession)
+
+instance Core.AWSRequest StartStreamingSession where
+  type
+    AWSResponse StartStreamingSession =
+      StartStreamingSessionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartStreamingSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartStreamingSession where
+  hashWithSalt _salt StartStreamingSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` backupId
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData StartStreamingSession where
+  rnf StartStreamingSession' {..} =
+    Prelude.rnf backupId
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders StartStreamingSession where
+  toHeaders StartStreamingSession' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON StartStreamingSession where
+  toJSON StartStreamingSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("backupId" Data..=) Prelude.<$> backupId]
+      )
+
+instance Data.ToPath StartStreamingSession where
+  toPath StartStreamingSession' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions/",
+        Data.toBS sessionId,
+        "/start"
+      ]
+
+instance Data.ToQuery StartStreamingSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartStreamingSessionResponse' smart constructor.
+data StartStreamingSessionResponse = StartStreamingSessionResponse'
+  { session :: Prelude.Maybe StreamingSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartStreamingSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'startStreamingSessionResponse_session' - Undocumented member.
+--
+-- 'httpStatus', 'startStreamingSessionResponse_httpStatus' - The response's http status code.
+newStartStreamingSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartStreamingSessionResponse
+newStartStreamingSessionResponse pHttpStatus_ =
+  StartStreamingSessionResponse'
+    { session =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+startStreamingSessionResponse_session :: Lens.Lens' StartStreamingSessionResponse (Prelude.Maybe StreamingSession)
+startStreamingSessionResponse_session = Lens.lens (\StartStreamingSessionResponse' {session} -> session) (\s@StartStreamingSessionResponse' {} a -> s {session = a} :: StartStreamingSessionResponse)
+
+-- | The response's http status code.
+startStreamingSessionResponse_httpStatus :: Lens.Lens' StartStreamingSessionResponse Prelude.Int
+startStreamingSessionResponse_httpStatus = Lens.lens (\StartStreamingSessionResponse' {httpStatus} -> httpStatus) (\s@StartStreamingSessionResponse' {} a -> s {httpStatus = a} :: StartStreamingSessionResponse)
+
+instance Prelude.NFData StartStreamingSessionResponse where
+  rnf StartStreamingSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/StartStudioSSOConfigurationRepair.hs b/gen/Amazonka/Nimble/StartStudioSSOConfigurationRepair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/StartStudioSSOConfigurationRepair.hs
@@ -0,0 +1,230 @@
+{-# 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.Nimble.StartStudioSSOConfigurationRepair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Repairs the IAM Identity Center configuration for a given studio.
+--
+-- If the studio has a valid IAM Identity Center configuration currently
+-- associated with it, this operation will fail with a validation error.
+--
+-- If the studio does not have a valid IAM Identity Center configuration
+-- currently associated with it, then a new IAM Identity Center application
+-- is created for the studio and the studio is changed to the @READY@
+-- state.
+--
+-- After the IAM Identity Center application is repaired, you must use the
+-- Amazon Nimble Studio console to add administrators and users to your
+-- studio.
+module Amazonka.Nimble.StartStudioSSOConfigurationRepair
+  ( -- * Creating a Request
+    StartStudioSSOConfigurationRepair (..),
+    newStartStudioSSOConfigurationRepair,
+
+    -- * Request Lenses
+    startStudioSSOConfigurationRepair_clientToken,
+    startStudioSSOConfigurationRepair_studioId,
+
+    -- * Destructuring the Response
+    StartStudioSSOConfigurationRepairResponse (..),
+    newStartStudioSSOConfigurationRepairResponse,
+
+    -- * Response Lenses
+    startStudioSSOConfigurationRepairResponse_httpStatus,
+    startStudioSSOConfigurationRepairResponse_studio,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartStudioSSOConfigurationRepair' smart constructor.
+data StartStudioSSOConfigurationRepair = StartStudioSSOConfigurationRepair'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartStudioSSOConfigurationRepair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'startStudioSSOConfigurationRepair_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'studioId', 'startStudioSSOConfigurationRepair_studioId' - The studio ID.
+newStartStudioSSOConfigurationRepair ::
+  -- | 'studioId'
+  Prelude.Text ->
+  StartStudioSSOConfigurationRepair
+newStartStudioSSOConfigurationRepair pStudioId_ =
+  StartStudioSSOConfigurationRepair'
+    { clientToken =
+        Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+startStudioSSOConfigurationRepair_clientToken :: Lens.Lens' StartStudioSSOConfigurationRepair (Prelude.Maybe Prelude.Text)
+startStudioSSOConfigurationRepair_clientToken = Lens.lens (\StartStudioSSOConfigurationRepair' {clientToken} -> clientToken) (\s@StartStudioSSOConfigurationRepair' {} a -> s {clientToken = a} :: StartStudioSSOConfigurationRepair)
+
+-- | The studio ID.
+startStudioSSOConfigurationRepair_studioId :: Lens.Lens' StartStudioSSOConfigurationRepair Prelude.Text
+startStudioSSOConfigurationRepair_studioId = Lens.lens (\StartStudioSSOConfigurationRepair' {studioId} -> studioId) (\s@StartStudioSSOConfigurationRepair' {} a -> s {studioId = a} :: StartStudioSSOConfigurationRepair)
+
+instance
+  Core.AWSRequest
+    StartStudioSSOConfigurationRepair
+  where
+  type
+    AWSResponse StartStudioSSOConfigurationRepair =
+      StartStudioSSOConfigurationRepairResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartStudioSSOConfigurationRepairResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "studio")
+      )
+
+instance
+  Prelude.Hashable
+    StartStudioSSOConfigurationRepair
+  where
+  hashWithSalt
+    _salt
+    StartStudioSSOConfigurationRepair' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` studioId
+
+instance
+  Prelude.NFData
+    StartStudioSSOConfigurationRepair
+  where
+  rnf StartStudioSSOConfigurationRepair' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf studioId
+
+instance
+  Data.ToHeaders
+    StartStudioSSOConfigurationRepair
+  where
+  toHeaders StartStudioSSOConfigurationRepair' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance
+  Data.ToJSON
+    StartStudioSSOConfigurationRepair
+  where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance
+  Data.ToPath
+    StartStudioSSOConfigurationRepair
+  where
+  toPath StartStudioSSOConfigurationRepair' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/sso-configuration"
+      ]
+
+instance
+  Data.ToQuery
+    StartStudioSSOConfigurationRepair
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartStudioSSOConfigurationRepairResponse' smart constructor.
+data StartStudioSSOConfigurationRepairResponse = StartStudioSSOConfigurationRepairResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about a studio.
+    studio :: Studio
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartStudioSSOConfigurationRepairResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startStudioSSOConfigurationRepairResponse_httpStatus' - The response's http status code.
+--
+-- 'studio', 'startStudioSSOConfigurationRepairResponse_studio' - Information about a studio.
+newStartStudioSSOConfigurationRepairResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'studio'
+  Studio ->
+  StartStudioSSOConfigurationRepairResponse
+newStartStudioSSOConfigurationRepairResponse
+  pHttpStatus_
+  pStudio_ =
+    StartStudioSSOConfigurationRepairResponse'
+      { httpStatus =
+          pHttpStatus_,
+        studio = pStudio_
+      }
+
+-- | The response's http status code.
+startStudioSSOConfigurationRepairResponse_httpStatus :: Lens.Lens' StartStudioSSOConfigurationRepairResponse Prelude.Int
+startStudioSSOConfigurationRepairResponse_httpStatus = Lens.lens (\StartStudioSSOConfigurationRepairResponse' {httpStatus} -> httpStatus) (\s@StartStudioSSOConfigurationRepairResponse' {} a -> s {httpStatus = a} :: StartStudioSSOConfigurationRepairResponse)
+
+-- | Information about a studio.
+startStudioSSOConfigurationRepairResponse_studio :: Lens.Lens' StartStudioSSOConfigurationRepairResponse Studio
+startStudioSSOConfigurationRepairResponse_studio = Lens.lens (\StartStudioSSOConfigurationRepairResponse' {studio} -> studio) (\s@StartStudioSSOConfigurationRepairResponse' {} a -> s {studio = a} :: StartStudioSSOConfigurationRepairResponse)
+
+instance
+  Prelude.NFData
+    StartStudioSSOConfigurationRepairResponse
+  where
+  rnf StartStudioSSOConfigurationRepairResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf studio
diff --git a/gen/Amazonka/Nimble/StopStreamingSession.hs b/gen/Amazonka/Nimble/StopStreamingSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/StopStreamingSession.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.StopStreamingSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Transitions sessions from the @READY@ state into the @STOPPED@ state.
+-- The @STOP_IN_PROGRESS@ state is the intermediate state between the
+-- @READY@ and @STOPPED@ states.
+module Amazonka.Nimble.StopStreamingSession
+  ( -- * Creating a Request
+    StopStreamingSession (..),
+    newStopStreamingSession,
+
+    -- * Request Lenses
+    stopStreamingSession_clientToken,
+    stopStreamingSession_volumeRetentionMode,
+    stopStreamingSession_sessionId,
+    stopStreamingSession_studioId,
+
+    -- * Destructuring the Response
+    StopStreamingSessionResponse (..),
+    newStopStreamingSessionResponse,
+
+    -- * Response Lenses
+    stopStreamingSessionResponse_session,
+    stopStreamingSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopStreamingSession' smart constructor.
+data StopStreamingSession = StopStreamingSession'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Adds additional instructions to a streaming session stop action to
+    -- either retain the EBS volumes or delete the EBS volumes.
+    volumeRetentionMode :: Prelude.Maybe VolumeRetentionMode,
+    -- | The streaming session ID for the @StopStreamingSessionRequest@.
+    sessionId :: Prelude.Text,
+    -- | The studioId for the StopStreamingSessionRequest.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopStreamingSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'stopStreamingSession_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'volumeRetentionMode', 'stopStreamingSession_volumeRetentionMode' - Adds additional instructions to a streaming session stop action to
+-- either retain the EBS volumes or delete the EBS volumes.
+--
+-- 'sessionId', 'stopStreamingSession_sessionId' - The streaming session ID for the @StopStreamingSessionRequest@.
+--
+-- 'studioId', 'stopStreamingSession_studioId' - The studioId for the StopStreamingSessionRequest.
+newStopStreamingSession ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  StopStreamingSession
+newStopStreamingSession pSessionId_ pStudioId_ =
+  StopStreamingSession'
+    { clientToken =
+        Prelude.Nothing,
+      volumeRetentionMode = Prelude.Nothing,
+      sessionId = pSessionId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+stopStreamingSession_clientToken :: Lens.Lens' StopStreamingSession (Prelude.Maybe Prelude.Text)
+stopStreamingSession_clientToken = Lens.lens (\StopStreamingSession' {clientToken} -> clientToken) (\s@StopStreamingSession' {} a -> s {clientToken = a} :: StopStreamingSession)
+
+-- | Adds additional instructions to a streaming session stop action to
+-- either retain the EBS volumes or delete the EBS volumes.
+stopStreamingSession_volumeRetentionMode :: Lens.Lens' StopStreamingSession (Prelude.Maybe VolumeRetentionMode)
+stopStreamingSession_volumeRetentionMode = Lens.lens (\StopStreamingSession' {volumeRetentionMode} -> volumeRetentionMode) (\s@StopStreamingSession' {} a -> s {volumeRetentionMode = a} :: StopStreamingSession)
+
+-- | The streaming session ID for the @StopStreamingSessionRequest@.
+stopStreamingSession_sessionId :: Lens.Lens' StopStreamingSession Prelude.Text
+stopStreamingSession_sessionId = Lens.lens (\StopStreamingSession' {sessionId} -> sessionId) (\s@StopStreamingSession' {} a -> s {sessionId = a} :: StopStreamingSession)
+
+-- | The studioId for the StopStreamingSessionRequest.
+stopStreamingSession_studioId :: Lens.Lens' StopStreamingSession Prelude.Text
+stopStreamingSession_studioId = Lens.lens (\StopStreamingSession' {studioId} -> studioId) (\s@StopStreamingSession' {} a -> s {studioId = a} :: StopStreamingSession)
+
+instance Core.AWSRequest StopStreamingSession where
+  type
+    AWSResponse StopStreamingSession =
+      StopStreamingSessionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopStreamingSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopStreamingSession where
+  hashWithSalt _salt StopStreamingSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` volumeRetentionMode
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData StopStreamingSession where
+  rnf StopStreamingSession' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf volumeRetentionMode
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders StopStreamingSession where
+  toHeaders StopStreamingSession' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON StopStreamingSession where
+  toJSON StopStreamingSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("volumeRetentionMode" Data..=)
+              Prelude.<$> volumeRetentionMode
+          ]
+      )
+
+instance Data.ToPath StopStreamingSession where
+  toPath StopStreamingSession' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-sessions/",
+        Data.toBS sessionId,
+        "/stop"
+      ]
+
+instance Data.ToQuery StopStreamingSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopStreamingSessionResponse' smart constructor.
+data StopStreamingSessionResponse = StopStreamingSessionResponse'
+  { session :: Prelude.Maybe StreamingSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopStreamingSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'stopStreamingSessionResponse_session' - Undocumented member.
+--
+-- 'httpStatus', 'stopStreamingSessionResponse_httpStatus' - The response's http status code.
+newStopStreamingSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopStreamingSessionResponse
+newStopStreamingSessionResponse pHttpStatus_ =
+  StopStreamingSessionResponse'
+    { session =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+stopStreamingSessionResponse_session :: Lens.Lens' StopStreamingSessionResponse (Prelude.Maybe StreamingSession)
+stopStreamingSessionResponse_session = Lens.lens (\StopStreamingSessionResponse' {session} -> session) (\s@StopStreamingSessionResponse' {} a -> s {session = a} :: StopStreamingSessionResponse)
+
+-- | The response's http status code.
+stopStreamingSessionResponse_httpStatus :: Lens.Lens' StopStreamingSessionResponse Prelude.Int
+stopStreamingSessionResponse_httpStatus = Lens.lens (\StopStreamingSessionResponse' {httpStatus} -> httpStatus) (\s@StopStreamingSessionResponse' {} a -> s {httpStatus = a} :: StopStreamingSessionResponse)
+
+instance Prelude.NFData StopStreamingSessionResponse where
+  rnf StopStreamingSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/TagResource.hs b/gen/Amazonka/Nimble/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/TagResource.hs
@@ -0,0 +1,167 @@
+{-# 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.Nimble.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)
+--
+-- Creates tags for a resource, given its ARN.
+module Amazonka.Nimble.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_tags,
+    tagResource_resourceArn,
+
+    -- * 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.Nimble.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'
+  { -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the resource you want to add tags to.
+    resourceArn :: 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:
+--
+-- 'tags', 'tagResource_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource you want to add tags to.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { tags = Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the resource you want to add tags to.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+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` tags
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf resourceArn
+
+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
+          [("tags" Data..=) Prelude.<$> tags]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat
+      ["/2020-08-01/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/Nimble/Types.hs b/gen/Amazonka/Nimble/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types.hs
@@ -0,0 +1,678 @@
+{-# 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.Nimble.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.Nimble.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerErrorException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AutomaticTerminationMode
+    AutomaticTerminationMode (..),
+
+    -- * LaunchProfilePersona
+    LaunchProfilePersona (..),
+
+    -- * LaunchProfilePlatform
+    LaunchProfilePlatform (..),
+
+    -- * LaunchProfileState
+    LaunchProfileState (..),
+
+    -- * LaunchProfileStatusCode
+    LaunchProfileStatusCode (..),
+
+    -- * LaunchProfileValidationState
+    LaunchProfileValidationState (..),
+
+    -- * LaunchProfileValidationStatusCode
+    LaunchProfileValidationStatusCode (..),
+
+    -- * LaunchProfileValidationType
+    LaunchProfileValidationType (..),
+
+    -- * SessionBackupMode
+    SessionBackupMode (..),
+
+    -- * SessionPersistenceMode
+    SessionPersistenceMode (..),
+
+    -- * StreamingClipboardMode
+    StreamingClipboardMode (..),
+
+    -- * StreamingImageEncryptionConfigurationKeyType
+    StreamingImageEncryptionConfigurationKeyType (..),
+
+    -- * StreamingImageState
+    StreamingImageState (..),
+
+    -- * StreamingImageStatusCode
+    StreamingImageStatusCode (..),
+
+    -- * StreamingInstanceType
+    StreamingInstanceType (..),
+
+    -- * StreamingSessionState
+    StreamingSessionState (..),
+
+    -- * StreamingSessionStatusCode
+    StreamingSessionStatusCode (..),
+
+    -- * StreamingSessionStorageMode
+    StreamingSessionStorageMode (..),
+
+    -- * StreamingSessionStreamState
+    StreamingSessionStreamState (..),
+
+    -- * StreamingSessionStreamStatusCode
+    StreamingSessionStreamStatusCode (..),
+
+    -- * StudioComponentInitializationScriptRunContext
+    StudioComponentInitializationScriptRunContext (..),
+
+    -- * StudioComponentState
+    StudioComponentState (..),
+
+    -- * StudioComponentStatusCode
+    StudioComponentStatusCode (..),
+
+    -- * StudioComponentSubtype
+    StudioComponentSubtype (..),
+
+    -- * StudioComponentType
+    StudioComponentType (..),
+
+    -- * StudioEncryptionConfigurationKeyType
+    StudioEncryptionConfigurationKeyType (..),
+
+    -- * StudioPersona
+    StudioPersona (..),
+
+    -- * StudioState
+    StudioState (..),
+
+    -- * StudioStatusCode
+    StudioStatusCode (..),
+
+    -- * VolumeRetentionMode
+    VolumeRetentionMode (..),
+
+    -- * ActiveDirectoryComputerAttribute
+    ActiveDirectoryComputerAttribute (..),
+    newActiveDirectoryComputerAttribute,
+    activeDirectoryComputerAttribute_name,
+    activeDirectoryComputerAttribute_value,
+
+    -- * ActiveDirectoryConfiguration
+    ActiveDirectoryConfiguration (..),
+    newActiveDirectoryConfiguration,
+    activeDirectoryConfiguration_computerAttributes,
+    activeDirectoryConfiguration_directoryId,
+    activeDirectoryConfiguration_organizationalUnitDistinguishedName,
+
+    -- * ComputeFarmConfiguration
+    ComputeFarmConfiguration (..),
+    newComputeFarmConfiguration,
+    computeFarmConfiguration_activeDirectoryUser,
+    computeFarmConfiguration_endpoint,
+
+    -- * Eula
+    Eula (..),
+    newEula,
+    eula_content,
+    eula_createdAt,
+    eula_eulaId,
+    eula_name,
+    eula_updatedAt,
+
+    -- * EulaAcceptance
+    EulaAcceptance (..),
+    newEulaAcceptance,
+    eulaAcceptance_acceptedAt,
+    eulaAcceptance_acceptedBy,
+    eulaAcceptance_accepteeId,
+    eulaAcceptance_eulaAcceptanceId,
+    eulaAcceptance_eulaId,
+
+    -- * LaunchProfile
+    LaunchProfile (..),
+    newLaunchProfile,
+    launchProfile_arn,
+    launchProfile_createdAt,
+    launchProfile_createdBy,
+    launchProfile_description,
+    launchProfile_ec2SubnetIds,
+    launchProfile_launchProfileId,
+    launchProfile_launchProfileProtocolVersions,
+    launchProfile_name,
+    launchProfile_state,
+    launchProfile_statusCode,
+    launchProfile_statusMessage,
+    launchProfile_streamConfiguration,
+    launchProfile_studioComponentIds,
+    launchProfile_tags,
+    launchProfile_updatedAt,
+    launchProfile_updatedBy,
+    launchProfile_validationResults,
+
+    -- * LaunchProfileInitialization
+    LaunchProfileInitialization (..),
+    newLaunchProfileInitialization,
+    launchProfileInitialization_activeDirectory,
+    launchProfileInitialization_ec2SecurityGroupIds,
+    launchProfileInitialization_launchProfileId,
+    launchProfileInitialization_launchProfileProtocolVersion,
+    launchProfileInitialization_launchPurpose,
+    launchProfileInitialization_name,
+    launchProfileInitialization_platform,
+    launchProfileInitialization_systemInitializationScripts,
+    launchProfileInitialization_userInitializationScripts,
+
+    -- * LaunchProfileInitializationActiveDirectory
+    LaunchProfileInitializationActiveDirectory (..),
+    newLaunchProfileInitializationActiveDirectory,
+    launchProfileInitializationActiveDirectory_computerAttributes,
+    launchProfileInitializationActiveDirectory_directoryId,
+    launchProfileInitializationActiveDirectory_directoryName,
+    launchProfileInitializationActiveDirectory_dnsIpAddresses,
+    launchProfileInitializationActiveDirectory_organizationalUnitDistinguishedName,
+    launchProfileInitializationActiveDirectory_studioComponentId,
+    launchProfileInitializationActiveDirectory_studioComponentName,
+
+    -- * LaunchProfileInitializationScript
+    LaunchProfileInitializationScript (..),
+    newLaunchProfileInitializationScript,
+    launchProfileInitializationScript_runtimeRoleArn,
+    launchProfileInitializationScript_script,
+    launchProfileInitializationScript_secureInitializationRoleArn,
+    launchProfileInitializationScript_studioComponentId,
+    launchProfileInitializationScript_studioComponentName,
+
+    -- * LaunchProfileMembership
+    LaunchProfileMembership (..),
+    newLaunchProfileMembership,
+    launchProfileMembership_identityStoreId,
+    launchProfileMembership_persona,
+    launchProfileMembership_principalId,
+    launchProfileMembership_sid,
+
+    -- * LicenseServiceConfiguration
+    LicenseServiceConfiguration (..),
+    newLicenseServiceConfiguration,
+    licenseServiceConfiguration_endpoint,
+
+    -- * NewLaunchProfileMember
+    NewLaunchProfileMember (..),
+    newNewLaunchProfileMember,
+    newLaunchProfileMember_persona,
+    newLaunchProfileMember_principalId,
+
+    -- * NewStudioMember
+    NewStudioMember (..),
+    newNewStudioMember,
+    newStudioMember_persona,
+    newStudioMember_principalId,
+
+    -- * ScriptParameterKeyValue
+    ScriptParameterKeyValue (..),
+    newScriptParameterKeyValue,
+    scriptParameterKeyValue_key,
+    scriptParameterKeyValue_value,
+
+    -- * SharedFileSystemConfiguration
+    SharedFileSystemConfiguration (..),
+    newSharedFileSystemConfiguration,
+    sharedFileSystemConfiguration_endpoint,
+    sharedFileSystemConfiguration_fileSystemId,
+    sharedFileSystemConfiguration_linuxMountPoint,
+    sharedFileSystemConfiguration_shareName,
+    sharedFileSystemConfiguration_windowsMountDrive,
+
+    -- * StreamConfiguration
+    StreamConfiguration (..),
+    newStreamConfiguration,
+    streamConfiguration_automaticTerminationMode,
+    streamConfiguration_maxSessionLengthInMinutes,
+    streamConfiguration_maxStoppedSessionLengthInMinutes,
+    streamConfiguration_sessionBackup,
+    streamConfiguration_sessionPersistenceMode,
+    streamConfiguration_sessionStorage,
+    streamConfiguration_volumeConfiguration,
+    streamConfiguration_clipboardMode,
+    streamConfiguration_ec2InstanceTypes,
+    streamConfiguration_streamingImageIds,
+
+    -- * StreamConfigurationCreate
+    StreamConfigurationCreate (..),
+    newStreamConfigurationCreate,
+    streamConfigurationCreate_automaticTerminationMode,
+    streamConfigurationCreate_maxSessionLengthInMinutes,
+    streamConfigurationCreate_maxStoppedSessionLengthInMinutes,
+    streamConfigurationCreate_sessionBackup,
+    streamConfigurationCreate_sessionPersistenceMode,
+    streamConfigurationCreate_sessionStorage,
+    streamConfigurationCreate_volumeConfiguration,
+    streamConfigurationCreate_clipboardMode,
+    streamConfigurationCreate_ec2InstanceTypes,
+    streamConfigurationCreate_streamingImageIds,
+
+    -- * StreamConfigurationSessionBackup
+    StreamConfigurationSessionBackup (..),
+    newStreamConfigurationSessionBackup,
+    streamConfigurationSessionBackup_maxBackupsToRetain,
+    streamConfigurationSessionBackup_mode,
+
+    -- * StreamConfigurationSessionStorage
+    StreamConfigurationSessionStorage (..),
+    newStreamConfigurationSessionStorage,
+    streamConfigurationSessionStorage_root,
+    streamConfigurationSessionStorage_mode,
+
+    -- * StreamingImage
+    StreamingImage (..),
+    newStreamingImage,
+    streamingImage_arn,
+    streamingImage_description,
+    streamingImage_ec2ImageId,
+    streamingImage_encryptionConfiguration,
+    streamingImage_eulaIds,
+    streamingImage_name,
+    streamingImage_owner,
+    streamingImage_platform,
+    streamingImage_state,
+    streamingImage_statusCode,
+    streamingImage_statusMessage,
+    streamingImage_streamingImageId,
+    streamingImage_tags,
+
+    -- * StreamingImageEncryptionConfiguration
+    StreamingImageEncryptionConfiguration (..),
+    newStreamingImageEncryptionConfiguration,
+    streamingImageEncryptionConfiguration_keyArn,
+    streamingImageEncryptionConfiguration_keyType,
+
+    -- * StreamingSession
+    StreamingSession (..),
+    newStreamingSession,
+    streamingSession_arn,
+    streamingSession_automaticTerminationMode,
+    streamingSession_backupMode,
+    streamingSession_createdAt,
+    streamingSession_createdBy,
+    streamingSession_ec2InstanceType,
+    streamingSession_launchProfileId,
+    streamingSession_maxBackupsToRetain,
+    streamingSession_ownedBy,
+    streamingSession_sessionId,
+    streamingSession_sessionPersistenceMode,
+    streamingSession_startedAt,
+    streamingSession_startedBy,
+    streamingSession_startedFromBackupId,
+    streamingSession_state,
+    streamingSession_statusCode,
+    streamingSession_statusMessage,
+    streamingSession_stopAt,
+    streamingSession_stoppedAt,
+    streamingSession_stoppedBy,
+    streamingSession_streamingImageId,
+    streamingSession_tags,
+    streamingSession_terminateAt,
+    streamingSession_updatedAt,
+    streamingSession_updatedBy,
+    streamingSession_volumeConfiguration,
+    streamingSession_volumeRetentionMode,
+
+    -- * StreamingSessionBackup
+    StreamingSessionBackup (..),
+    newStreamingSessionBackup,
+    streamingSessionBackup_arn,
+    streamingSessionBackup_backupId,
+    streamingSessionBackup_createdAt,
+    streamingSessionBackup_launchProfileId,
+    streamingSessionBackup_ownedBy,
+    streamingSessionBackup_sessionId,
+    streamingSessionBackup_state,
+    streamingSessionBackup_statusCode,
+    streamingSessionBackup_statusMessage,
+    streamingSessionBackup_tags,
+
+    -- * StreamingSessionStorageRoot
+    StreamingSessionStorageRoot (..),
+    newStreamingSessionStorageRoot,
+    streamingSessionStorageRoot_linux,
+    streamingSessionStorageRoot_windows,
+
+    -- * StreamingSessionStream
+    StreamingSessionStream (..),
+    newStreamingSessionStream,
+    streamingSessionStream_createdAt,
+    streamingSessionStream_createdBy,
+    streamingSessionStream_expiresAt,
+    streamingSessionStream_ownedBy,
+    streamingSessionStream_state,
+    streamingSessionStream_statusCode,
+    streamingSessionStream_streamId,
+    streamingSessionStream_url,
+
+    -- * Studio
+    Studio (..),
+    newStudio,
+    studio_adminRoleArn,
+    studio_arn,
+    studio_createdAt,
+    studio_displayName,
+    studio_homeRegion,
+    studio_ssoClientId,
+    studio_state,
+    studio_statusCode,
+    studio_statusMessage,
+    studio_studioEncryptionConfiguration,
+    studio_studioId,
+    studio_studioName,
+    studio_studioUrl,
+    studio_tags,
+    studio_updatedAt,
+    studio_userRoleArn,
+
+    -- * StudioComponent
+    StudioComponent (..),
+    newStudioComponent,
+    studioComponent_arn,
+    studioComponent_configuration,
+    studioComponent_createdAt,
+    studioComponent_createdBy,
+    studioComponent_description,
+    studioComponent_ec2SecurityGroupIds,
+    studioComponent_initializationScripts,
+    studioComponent_name,
+    studioComponent_runtimeRoleArn,
+    studioComponent_scriptParameters,
+    studioComponent_secureInitializationRoleArn,
+    studioComponent_state,
+    studioComponent_statusCode,
+    studioComponent_statusMessage,
+    studioComponent_studioComponentId,
+    studioComponent_subtype,
+    studioComponent_tags,
+    studioComponent_type,
+    studioComponent_updatedAt,
+    studioComponent_updatedBy,
+
+    -- * StudioComponentConfiguration
+    StudioComponentConfiguration (..),
+    newStudioComponentConfiguration,
+    studioComponentConfiguration_activeDirectoryConfiguration,
+    studioComponentConfiguration_computeFarmConfiguration,
+    studioComponentConfiguration_licenseServiceConfiguration,
+    studioComponentConfiguration_sharedFileSystemConfiguration,
+
+    -- * StudioComponentInitializationScript
+    StudioComponentInitializationScript (..),
+    newStudioComponentInitializationScript,
+    studioComponentInitializationScript_launchProfileProtocolVersion,
+    studioComponentInitializationScript_platform,
+    studioComponentInitializationScript_runContext,
+    studioComponentInitializationScript_script,
+
+    -- * StudioComponentSummary
+    StudioComponentSummary (..),
+    newStudioComponentSummary,
+    studioComponentSummary_createdAt,
+    studioComponentSummary_createdBy,
+    studioComponentSummary_description,
+    studioComponentSummary_name,
+    studioComponentSummary_studioComponentId,
+    studioComponentSummary_subtype,
+    studioComponentSummary_type,
+    studioComponentSummary_updatedAt,
+    studioComponentSummary_updatedBy,
+
+    -- * StudioEncryptionConfiguration
+    StudioEncryptionConfiguration (..),
+    newStudioEncryptionConfiguration,
+    studioEncryptionConfiguration_keyArn,
+    studioEncryptionConfiguration_keyType,
+
+    -- * StudioMembership
+    StudioMembership (..),
+    newStudioMembership,
+    studioMembership_identityStoreId,
+    studioMembership_persona,
+    studioMembership_principalId,
+    studioMembership_sid,
+
+    -- * ValidationResult
+    ValidationResult (..),
+    newValidationResult,
+    validationResult_state,
+    validationResult_statusCode,
+    validationResult_statusMessage,
+    validationResult_type,
+
+    -- * VolumeConfiguration
+    VolumeConfiguration (..),
+    newVolumeConfiguration,
+    volumeConfiguration_iops,
+    volumeConfiguration_size,
+    volumeConfiguration_throughput,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute
+import Amazonka.Nimble.Types.ActiveDirectoryConfiguration
+import Amazonka.Nimble.Types.AutomaticTerminationMode
+import Amazonka.Nimble.Types.ComputeFarmConfiguration
+import Amazonka.Nimble.Types.Eula
+import Amazonka.Nimble.Types.EulaAcceptance
+import Amazonka.Nimble.Types.LaunchProfile
+import Amazonka.Nimble.Types.LaunchProfileInitialization
+import Amazonka.Nimble.Types.LaunchProfileInitializationActiveDirectory
+import Amazonka.Nimble.Types.LaunchProfileInitializationScript
+import Amazonka.Nimble.Types.LaunchProfileMembership
+import Amazonka.Nimble.Types.LaunchProfilePersona
+import Amazonka.Nimble.Types.LaunchProfilePlatform
+import Amazonka.Nimble.Types.LaunchProfileState
+import Amazonka.Nimble.Types.LaunchProfileStatusCode
+import Amazonka.Nimble.Types.LaunchProfileValidationState
+import Amazonka.Nimble.Types.LaunchProfileValidationStatusCode
+import Amazonka.Nimble.Types.LaunchProfileValidationType
+import Amazonka.Nimble.Types.LicenseServiceConfiguration
+import Amazonka.Nimble.Types.NewLaunchProfileMember
+import Amazonka.Nimble.Types.NewStudioMember
+import Amazonka.Nimble.Types.ScriptParameterKeyValue
+import Amazonka.Nimble.Types.SessionBackupMode
+import Amazonka.Nimble.Types.SessionPersistenceMode
+import Amazonka.Nimble.Types.SharedFileSystemConfiguration
+import Amazonka.Nimble.Types.StreamConfiguration
+import Amazonka.Nimble.Types.StreamConfigurationCreate
+import Amazonka.Nimble.Types.StreamConfigurationSessionBackup
+import Amazonka.Nimble.Types.StreamConfigurationSessionStorage
+import Amazonka.Nimble.Types.StreamingClipboardMode
+import Amazonka.Nimble.Types.StreamingImage
+import Amazonka.Nimble.Types.StreamingImageEncryptionConfiguration
+import Amazonka.Nimble.Types.StreamingImageEncryptionConfigurationKeyType
+import Amazonka.Nimble.Types.StreamingImageState
+import Amazonka.Nimble.Types.StreamingImageStatusCode
+import Amazonka.Nimble.Types.StreamingInstanceType
+import Amazonka.Nimble.Types.StreamingSession
+import Amazonka.Nimble.Types.StreamingSessionBackup
+import Amazonka.Nimble.Types.StreamingSessionState
+import Amazonka.Nimble.Types.StreamingSessionStatusCode
+import Amazonka.Nimble.Types.StreamingSessionStorageMode
+import Amazonka.Nimble.Types.StreamingSessionStorageRoot
+import Amazonka.Nimble.Types.StreamingSessionStream
+import Amazonka.Nimble.Types.StreamingSessionStreamState
+import Amazonka.Nimble.Types.StreamingSessionStreamStatusCode
+import Amazonka.Nimble.Types.Studio
+import Amazonka.Nimble.Types.StudioComponent
+import Amazonka.Nimble.Types.StudioComponentConfiguration
+import Amazonka.Nimble.Types.StudioComponentInitializationScript
+import Amazonka.Nimble.Types.StudioComponentInitializationScriptRunContext
+import Amazonka.Nimble.Types.StudioComponentState
+import Amazonka.Nimble.Types.StudioComponentStatusCode
+import Amazonka.Nimble.Types.StudioComponentSubtype
+import Amazonka.Nimble.Types.StudioComponentSummary
+import Amazonka.Nimble.Types.StudioComponentType
+import Amazonka.Nimble.Types.StudioEncryptionConfiguration
+import Amazonka.Nimble.Types.StudioEncryptionConfigurationKeyType
+import Amazonka.Nimble.Types.StudioMembership
+import Amazonka.Nimble.Types.StudioPersona
+import Amazonka.Nimble.Types.StudioState
+import Amazonka.Nimble.Types.StudioStatusCode
+import Amazonka.Nimble.Types.ValidationResult
+import Amazonka.Nimble.Types.VolumeConfiguration
+import Amazonka.Nimble.Types.VolumeRetentionMode
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-08-01@ of the Amazon NimbleStudio SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Nimble",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "nimble",
+      Core.signingName = "nimble",
+      Core.version = "2020-08-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Nimble",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You are not authorized to perform this operation. Check your IAM
+-- policies, and ensure that you are using the correct access keys.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Another operation is in progress.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An internal error has occurred. Please retry your request.
+_InternalServerErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | The specified resource could not be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Your current quota does not allow you to perform the request action. You
+-- can request increases for some quotas, and other quotas cannot be
+-- increased.
+--
+-- Please use Amazon Web Services Service Quotas to request an increase.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request throughput limit was exceeded.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | One of the parameters in the request is invalid.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/Nimble/Types/ActiveDirectoryComputerAttribute.hs b/gen/Amazonka/Nimble/Types/ActiveDirectoryComputerAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/ActiveDirectoryComputerAttribute.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An LDAP attribute of an Active Directory computer account, in the form
+-- of a name:value pair.
+--
+-- /See:/ 'newActiveDirectoryComputerAttribute' smart constructor.
+data ActiveDirectoryComputerAttribute = ActiveDirectoryComputerAttribute'
+  { -- | The name for the LDAP attribute.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The value for the LDAP attribute.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActiveDirectoryComputerAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'activeDirectoryComputerAttribute_name' - The name for the LDAP attribute.
+--
+-- 'value', 'activeDirectoryComputerAttribute_value' - The value for the LDAP attribute.
+newActiveDirectoryComputerAttribute ::
+  ActiveDirectoryComputerAttribute
+newActiveDirectoryComputerAttribute =
+  ActiveDirectoryComputerAttribute'
+    { name =
+        Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The name for the LDAP attribute.
+activeDirectoryComputerAttribute_name :: Lens.Lens' ActiveDirectoryComputerAttribute (Prelude.Maybe Prelude.Text)
+activeDirectoryComputerAttribute_name = Lens.lens (\ActiveDirectoryComputerAttribute' {name} -> name) (\s@ActiveDirectoryComputerAttribute' {} a -> s {name = a} :: ActiveDirectoryComputerAttribute)
+
+-- | The value for the LDAP attribute.
+activeDirectoryComputerAttribute_value :: Lens.Lens' ActiveDirectoryComputerAttribute (Prelude.Maybe Prelude.Text)
+activeDirectoryComputerAttribute_value = Lens.lens (\ActiveDirectoryComputerAttribute' {value} -> value) (\s@ActiveDirectoryComputerAttribute' {} a -> s {value = a} :: ActiveDirectoryComputerAttribute)
+
+instance
+  Data.FromJSON
+    ActiveDirectoryComputerAttribute
+  where
+  parseJSON =
+    Data.withObject
+      "ActiveDirectoryComputerAttribute"
+      ( \x ->
+          ActiveDirectoryComputerAttribute'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance
+  Prelude.Hashable
+    ActiveDirectoryComputerAttribute
+  where
+  hashWithSalt
+    _salt
+    ActiveDirectoryComputerAttribute' {..} =
+      _salt
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    ActiveDirectoryComputerAttribute
+  where
+  rnf ActiveDirectoryComputerAttribute' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ActiveDirectoryComputerAttribute where
+  toJSON ActiveDirectoryComputerAttribute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/ActiveDirectoryConfiguration.hs b/gen/Amazonka/Nimble/Types/ActiveDirectoryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/ActiveDirectoryConfiguration.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.ActiveDirectoryConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.ActiveDirectoryConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration for a Directory Service for Microsoft Active Directory
+-- studio resource.
+--
+-- /See:/ 'newActiveDirectoryConfiguration' smart constructor.
+data ActiveDirectoryConfiguration = ActiveDirectoryConfiguration'
+  { -- | A collection of custom attributes for an Active Directory computer.
+    computerAttributes :: Prelude.Maybe (Data.Sensitive [ActiveDirectoryComputerAttribute]),
+    -- | The directory ID of the Directory Service for Microsoft Active Directory
+    -- to access using this studio component.
+    directoryId :: Prelude.Maybe Prelude.Text,
+    -- | The distinguished name (DN) and organizational unit (OU) of an Active
+    -- Directory computer.
+    organizationalUnitDistinguishedName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActiveDirectoryConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'computerAttributes', 'activeDirectoryConfiguration_computerAttributes' - A collection of custom attributes for an Active Directory computer.
+--
+-- 'directoryId', 'activeDirectoryConfiguration_directoryId' - The directory ID of the Directory Service for Microsoft Active Directory
+-- to access using this studio component.
+--
+-- 'organizationalUnitDistinguishedName', 'activeDirectoryConfiguration_organizationalUnitDistinguishedName' - The distinguished name (DN) and organizational unit (OU) of an Active
+-- Directory computer.
+newActiveDirectoryConfiguration ::
+  ActiveDirectoryConfiguration
+newActiveDirectoryConfiguration =
+  ActiveDirectoryConfiguration'
+    { computerAttributes =
+        Prelude.Nothing,
+      directoryId = Prelude.Nothing,
+      organizationalUnitDistinguishedName =
+        Prelude.Nothing
+    }
+
+-- | A collection of custom attributes for an Active Directory computer.
+activeDirectoryConfiguration_computerAttributes :: Lens.Lens' ActiveDirectoryConfiguration (Prelude.Maybe [ActiveDirectoryComputerAttribute])
+activeDirectoryConfiguration_computerAttributes = Lens.lens (\ActiveDirectoryConfiguration' {computerAttributes} -> computerAttributes) (\s@ActiveDirectoryConfiguration' {} a -> s {computerAttributes = a} :: ActiveDirectoryConfiguration) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The directory ID of the Directory Service for Microsoft Active Directory
+-- to access using this studio component.
+activeDirectoryConfiguration_directoryId :: Lens.Lens' ActiveDirectoryConfiguration (Prelude.Maybe Prelude.Text)
+activeDirectoryConfiguration_directoryId = Lens.lens (\ActiveDirectoryConfiguration' {directoryId} -> directoryId) (\s@ActiveDirectoryConfiguration' {} a -> s {directoryId = a} :: ActiveDirectoryConfiguration)
+
+-- | The distinguished name (DN) and organizational unit (OU) of an Active
+-- Directory computer.
+activeDirectoryConfiguration_organizationalUnitDistinguishedName :: Lens.Lens' ActiveDirectoryConfiguration (Prelude.Maybe Prelude.Text)
+activeDirectoryConfiguration_organizationalUnitDistinguishedName = Lens.lens (\ActiveDirectoryConfiguration' {organizationalUnitDistinguishedName} -> organizationalUnitDistinguishedName) (\s@ActiveDirectoryConfiguration' {} a -> s {organizationalUnitDistinguishedName = a} :: ActiveDirectoryConfiguration)
+
+instance Data.FromJSON ActiveDirectoryConfiguration where
+  parseJSON =
+    Data.withObject
+      "ActiveDirectoryConfiguration"
+      ( \x ->
+          ActiveDirectoryConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "computerAttributes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "directoryId")
+            Prelude.<*> (x Data..:? "organizationalUnitDistinguishedName")
+      )
+
+instance
+  Prelude.Hashable
+    ActiveDirectoryConfiguration
+  where
+  hashWithSalt _salt ActiveDirectoryConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` computerAttributes
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` organizationalUnitDistinguishedName
+
+instance Prelude.NFData ActiveDirectoryConfiguration where
+  rnf ActiveDirectoryConfiguration' {..} =
+    Prelude.rnf computerAttributes
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf organizationalUnitDistinguishedName
+
+instance Data.ToJSON ActiveDirectoryConfiguration where
+  toJSON ActiveDirectoryConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("computerAttributes" Data..=)
+              Prelude.<$> computerAttributes,
+            ("directoryId" Data..=) Prelude.<$> directoryId,
+            ("organizationalUnitDistinguishedName" Data..=)
+              Prelude.<$> organizationalUnitDistinguishedName
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/AutomaticTerminationMode.hs b/gen/Amazonka/Nimble/Types/AutomaticTerminationMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/AutomaticTerminationMode.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.Nimble.Types.AutomaticTerminationMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.AutomaticTerminationMode
+  ( AutomaticTerminationMode
+      ( ..,
+        AutomaticTerminationMode_ACTIVATED,
+        AutomaticTerminationMode_DEACTIVATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AutomaticTerminationMode = AutomaticTerminationMode'
+  { fromAutomaticTerminationMode ::
+      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 AutomaticTerminationMode_ACTIVATED :: AutomaticTerminationMode
+pattern AutomaticTerminationMode_ACTIVATED = AutomaticTerminationMode' "ACTIVATED"
+
+pattern AutomaticTerminationMode_DEACTIVATED :: AutomaticTerminationMode
+pattern AutomaticTerminationMode_DEACTIVATED = AutomaticTerminationMode' "DEACTIVATED"
+
+{-# COMPLETE
+  AutomaticTerminationMode_ACTIVATED,
+  AutomaticTerminationMode_DEACTIVATED,
+  AutomaticTerminationMode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/ComputeFarmConfiguration.hs b/gen/Amazonka/Nimble/Types/ComputeFarmConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/ComputeFarmConfiguration.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.Nimble.Types.ComputeFarmConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.ComputeFarmConfiguration 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 a render farm that is associated with a studio
+-- resource.
+--
+-- /See:/ 'newComputeFarmConfiguration' smart constructor.
+data ComputeFarmConfiguration = ComputeFarmConfiguration'
+  { -- | The name of an Active Directory user that is used on ComputeFarm worker
+    -- instances.
+    activeDirectoryUser :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint of the ComputeFarm that is accessed by the studio component
+    -- resource.
+    endpoint :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComputeFarmConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeDirectoryUser', 'computeFarmConfiguration_activeDirectoryUser' - The name of an Active Directory user that is used on ComputeFarm worker
+-- instances.
+--
+-- 'endpoint', 'computeFarmConfiguration_endpoint' - The endpoint of the ComputeFarm that is accessed by the studio component
+-- resource.
+newComputeFarmConfiguration ::
+  ComputeFarmConfiguration
+newComputeFarmConfiguration =
+  ComputeFarmConfiguration'
+    { activeDirectoryUser =
+        Prelude.Nothing,
+      endpoint = Prelude.Nothing
+    }
+
+-- | The name of an Active Directory user that is used on ComputeFarm worker
+-- instances.
+computeFarmConfiguration_activeDirectoryUser :: Lens.Lens' ComputeFarmConfiguration (Prelude.Maybe Prelude.Text)
+computeFarmConfiguration_activeDirectoryUser = Lens.lens (\ComputeFarmConfiguration' {activeDirectoryUser} -> activeDirectoryUser) (\s@ComputeFarmConfiguration' {} a -> s {activeDirectoryUser = a} :: ComputeFarmConfiguration)
+
+-- | The endpoint of the ComputeFarm that is accessed by the studio component
+-- resource.
+computeFarmConfiguration_endpoint :: Lens.Lens' ComputeFarmConfiguration (Prelude.Maybe Prelude.Text)
+computeFarmConfiguration_endpoint = Lens.lens (\ComputeFarmConfiguration' {endpoint} -> endpoint) (\s@ComputeFarmConfiguration' {} a -> s {endpoint = a} :: ComputeFarmConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON ComputeFarmConfiguration where
+  parseJSON =
+    Data.withObject
+      "ComputeFarmConfiguration"
+      ( \x ->
+          ComputeFarmConfiguration'
+            Prelude.<$> (x Data..:? "activeDirectoryUser")
+            Prelude.<*> (x Data..:? "endpoint")
+      )
+
+instance Prelude.Hashable ComputeFarmConfiguration where
+  hashWithSalt _salt ComputeFarmConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` activeDirectoryUser
+      `Prelude.hashWithSalt` endpoint
+
+instance Prelude.NFData ComputeFarmConfiguration where
+  rnf ComputeFarmConfiguration' {..} =
+    Prelude.rnf activeDirectoryUser
+      `Prelude.seq` Prelude.rnf endpoint
+
+instance Data.ToJSON ComputeFarmConfiguration where
+  toJSON ComputeFarmConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("activeDirectoryUser" Data..=)
+              Prelude.<$> activeDirectoryUser,
+            ("endpoint" Data..=) Prelude.<$> endpoint
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/Eula.hs b/gen/Amazonka/Nimble/Types/Eula.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/Eula.hs
@@ -0,0 +1,120 @@
+{-# 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.Nimble.Types.Eula
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.Eula where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a EULA resource.
+--
+-- /See:/ 'newEula' smart constructor.
+data Eula = Eula'
+  { -- | The EULA content.
+    content :: Prelude.Maybe Prelude.Text,
+    -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The EULA ID.
+    eulaId :: Prelude.Maybe Prelude.Text,
+    -- | The name for the EULA.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ISO timestamp in seconds for when the resource was updated.
+    updatedAt :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Eula' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'eula_content' - The EULA content.
+--
+-- 'createdAt', 'eula_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'eulaId', 'eula_eulaId' - The EULA ID.
+--
+-- 'name', 'eula_name' - The name for the EULA.
+--
+-- 'updatedAt', 'eula_updatedAt' - The ISO timestamp in seconds for when the resource was updated.
+newEula ::
+  Eula
+newEula =
+  Eula'
+    { content = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      eulaId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The EULA content.
+eula_content :: Lens.Lens' Eula (Prelude.Maybe Prelude.Text)
+eula_content = Lens.lens (\Eula' {content} -> content) (\s@Eula' {} a -> s {content = a} :: Eula)
+
+-- | The ISO timestamp in seconds for when the resource was created.
+eula_createdAt :: Lens.Lens' Eula (Prelude.Maybe Prelude.UTCTime)
+eula_createdAt = Lens.lens (\Eula' {createdAt} -> createdAt) (\s@Eula' {} a -> s {createdAt = a} :: Eula) Prelude.. Lens.mapping Data._Time
+
+-- | The EULA ID.
+eula_eulaId :: Lens.Lens' Eula (Prelude.Maybe Prelude.Text)
+eula_eulaId = Lens.lens (\Eula' {eulaId} -> eulaId) (\s@Eula' {} a -> s {eulaId = a} :: Eula)
+
+-- | The name for the EULA.
+eula_name :: Lens.Lens' Eula (Prelude.Maybe Prelude.Text)
+eula_name = Lens.lens (\Eula' {name} -> name) (\s@Eula' {} a -> s {name = a} :: Eula)
+
+-- | The ISO timestamp in seconds for when the resource was updated.
+eula_updatedAt :: Lens.Lens' Eula (Prelude.Maybe Prelude.UTCTime)
+eula_updatedAt = Lens.lens (\Eula' {updatedAt} -> updatedAt) (\s@Eula' {} a -> s {updatedAt = a} :: Eula) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Eula where
+  parseJSON =
+    Data.withObject
+      "Eula"
+      ( \x ->
+          Eula'
+            Prelude.<$> (x Data..:? "content")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "eulaId")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "updatedAt")
+      )
+
+instance Prelude.Hashable Eula where
+  hashWithSalt _salt Eula' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` eulaId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData Eula where
+  rnf Eula' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf eulaId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/Nimble/Types/EulaAcceptance.hs b/gen/Amazonka/Nimble/Types/EulaAcceptance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/EulaAcceptance.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.EulaAcceptance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.EulaAcceptance 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 acceptance of a EULA, required to use Amazon-provided streaming
+-- images.
+--
+-- /See:/ 'newEulaAcceptance' smart constructor.
+data EulaAcceptance = EulaAcceptance'
+  { -- | The ISO timestamp in seconds for when the EULA was accepted.
+    acceptedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the person who accepted the EULA.
+    acceptedBy :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the acceptee.
+    accepteeId :: Prelude.Maybe Prelude.Text,
+    -- | The EULA acceptance ID.
+    eulaAcceptanceId :: Prelude.Maybe Prelude.Text,
+    -- | The EULA ID.
+    eulaId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EulaAcceptance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceptedAt', 'eulaAcceptance_acceptedAt' - The ISO timestamp in seconds for when the EULA was accepted.
+--
+-- 'acceptedBy', 'eulaAcceptance_acceptedBy' - The ID of the person who accepted the EULA.
+--
+-- 'accepteeId', 'eulaAcceptance_accepteeId' - The ID of the acceptee.
+--
+-- 'eulaAcceptanceId', 'eulaAcceptance_eulaAcceptanceId' - The EULA acceptance ID.
+--
+-- 'eulaId', 'eulaAcceptance_eulaId' - The EULA ID.
+newEulaAcceptance ::
+  EulaAcceptance
+newEulaAcceptance =
+  EulaAcceptance'
+    { acceptedAt = Prelude.Nothing,
+      acceptedBy = Prelude.Nothing,
+      accepteeId = Prelude.Nothing,
+      eulaAcceptanceId = Prelude.Nothing,
+      eulaId = Prelude.Nothing
+    }
+
+-- | The ISO timestamp in seconds for when the EULA was accepted.
+eulaAcceptance_acceptedAt :: Lens.Lens' EulaAcceptance (Prelude.Maybe Prelude.UTCTime)
+eulaAcceptance_acceptedAt = Lens.lens (\EulaAcceptance' {acceptedAt} -> acceptedAt) (\s@EulaAcceptance' {} a -> s {acceptedAt = a} :: EulaAcceptance) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the person who accepted the EULA.
+eulaAcceptance_acceptedBy :: Lens.Lens' EulaAcceptance (Prelude.Maybe Prelude.Text)
+eulaAcceptance_acceptedBy = Lens.lens (\EulaAcceptance' {acceptedBy} -> acceptedBy) (\s@EulaAcceptance' {} a -> s {acceptedBy = a} :: EulaAcceptance)
+
+-- | The ID of the acceptee.
+eulaAcceptance_accepteeId :: Lens.Lens' EulaAcceptance (Prelude.Maybe Prelude.Text)
+eulaAcceptance_accepteeId = Lens.lens (\EulaAcceptance' {accepteeId} -> accepteeId) (\s@EulaAcceptance' {} a -> s {accepteeId = a} :: EulaAcceptance)
+
+-- | The EULA acceptance ID.
+eulaAcceptance_eulaAcceptanceId :: Lens.Lens' EulaAcceptance (Prelude.Maybe Prelude.Text)
+eulaAcceptance_eulaAcceptanceId = Lens.lens (\EulaAcceptance' {eulaAcceptanceId} -> eulaAcceptanceId) (\s@EulaAcceptance' {} a -> s {eulaAcceptanceId = a} :: EulaAcceptance)
+
+-- | The EULA ID.
+eulaAcceptance_eulaId :: Lens.Lens' EulaAcceptance (Prelude.Maybe Prelude.Text)
+eulaAcceptance_eulaId = Lens.lens (\EulaAcceptance' {eulaId} -> eulaId) (\s@EulaAcceptance' {} a -> s {eulaId = a} :: EulaAcceptance)
+
+instance Data.FromJSON EulaAcceptance where
+  parseJSON =
+    Data.withObject
+      "EulaAcceptance"
+      ( \x ->
+          EulaAcceptance'
+            Prelude.<$> (x Data..:? "acceptedAt")
+            Prelude.<*> (x Data..:? "acceptedBy")
+            Prelude.<*> (x Data..:? "accepteeId")
+            Prelude.<*> (x Data..:? "eulaAcceptanceId")
+            Prelude.<*> (x Data..:? "eulaId")
+      )
+
+instance Prelude.Hashable EulaAcceptance where
+  hashWithSalt _salt EulaAcceptance' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceptedAt
+      `Prelude.hashWithSalt` acceptedBy
+      `Prelude.hashWithSalt` accepteeId
+      `Prelude.hashWithSalt` eulaAcceptanceId
+      `Prelude.hashWithSalt` eulaId
+
+instance Prelude.NFData EulaAcceptance where
+  rnf EulaAcceptance' {..} =
+    Prelude.rnf acceptedAt
+      `Prelude.seq` Prelude.rnf acceptedBy
+      `Prelude.seq` Prelude.rnf accepteeId
+      `Prelude.seq` Prelude.rnf eulaAcceptanceId
+      `Prelude.seq` Prelude.rnf eulaId
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfile.hs b/gen/Amazonka/Nimble/Types/LaunchProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfile.hs
@@ -0,0 +1,298 @@
+{-# 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.Nimble.Types.LaunchProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfile where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.LaunchProfileState
+import Amazonka.Nimble.Types.LaunchProfileStatusCode
+import Amazonka.Nimble.Types.StreamConfiguration
+import Amazonka.Nimble.Types.ValidationResult
+import qualified Amazonka.Prelude as Prelude
+
+-- | A launch profile controls your artist workforce’s access to studio
+-- components, like compute farms, shared file systems, managed file
+-- systems, and license server configurations, as well as instance types
+-- and Amazon Machine Images (AMIs).
+--
+-- Studio administrators create launch profiles in the Nimble Studio
+-- console. Artists can use their launch profiles to launch an instance
+-- from the Nimble Studio portal. Each user’s launch profile defines how
+-- they can launch a streaming session. By default, studio admins can use
+-- all launch profiles.
+--
+-- /See:/ 'newLaunchProfile' smart constructor.
+data LaunchProfile = LaunchProfile'
+  { -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+    -- uniquely identifies it. ARNs are unique across all Regions.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that created the launch profile.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | A human-readable description of the launch profile.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Unique identifiers for a collection of EC2 subnets.
+    ec2SubnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the protocol that is used by the launch profile.
+    -- The only valid version is \"2021-03-31\".
+    launchProfileProtocolVersions :: Prelude.Maybe [Prelude.Text],
+    -- | A friendly name for the launch profile.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The current state.
+    state :: Prelude.Maybe LaunchProfileState,
+    -- | The status code.
+    statusCode :: Prelude.Maybe LaunchProfileStatusCode,
+    -- | The status message for the launch profile.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | A configuration for a streaming session.
+    streamConfiguration :: Prelude.Maybe StreamConfiguration,
+    -- | Unique identifiers for a collection of studio components that can be
+    -- used with this launch profile.
+    studioComponentIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ISO timestamp in seconds for when the resource was updated.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that most recently updated the resource.
+    updatedBy :: Prelude.Maybe Prelude.Text,
+    -- | The list of the latest validation results.
+    validationResults :: Prelude.Maybe [ValidationResult]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'launchProfile_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+--
+-- 'createdAt', 'launchProfile_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'createdBy', 'launchProfile_createdBy' - The user ID of the user that created the launch profile.
+--
+-- 'description', 'launchProfile_description' - A human-readable description of the launch profile.
+--
+-- 'ec2SubnetIds', 'launchProfile_ec2SubnetIds' - Unique identifiers for a collection of EC2 subnets.
+--
+-- 'launchProfileId', 'launchProfile_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'launchProfileProtocolVersions', 'launchProfile_launchProfileProtocolVersions' - The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+--
+-- 'name', 'launchProfile_name' - A friendly name for the launch profile.
+--
+-- 'state', 'launchProfile_state' - The current state.
+--
+-- 'statusCode', 'launchProfile_statusCode' - The status code.
+--
+-- 'statusMessage', 'launchProfile_statusMessage' - The status message for the launch profile.
+--
+-- 'streamConfiguration', 'launchProfile_streamConfiguration' - A configuration for a streaming session.
+--
+-- 'studioComponentIds', 'launchProfile_studioComponentIds' - Unique identifiers for a collection of studio components that can be
+-- used with this launch profile.
+--
+-- 'tags', 'launchProfile_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'updatedAt', 'launchProfile_updatedAt' - The ISO timestamp in seconds for when the resource was updated.
+--
+-- 'updatedBy', 'launchProfile_updatedBy' - The user ID of the user that most recently updated the resource.
+--
+-- 'validationResults', 'launchProfile_validationResults' - The list of the latest validation results.
+newLaunchProfile ::
+  LaunchProfile
+newLaunchProfile =
+  LaunchProfile'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ec2SubnetIds = Prelude.Nothing,
+      launchProfileId = Prelude.Nothing,
+      launchProfileProtocolVersions = Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      streamConfiguration = Prelude.Nothing,
+      studioComponentIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      updatedBy = Prelude.Nothing,
+      validationResults = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+launchProfile_arn :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_arn = Lens.lens (\LaunchProfile' {arn} -> arn) (\s@LaunchProfile' {} a -> s {arn = a} :: LaunchProfile)
+
+-- | The ISO timestamp in seconds for when the resource was created.
+launchProfile_createdAt :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.UTCTime)
+launchProfile_createdAt = Lens.lens (\LaunchProfile' {createdAt} -> createdAt) (\s@LaunchProfile' {} a -> s {createdAt = a} :: LaunchProfile) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that created the launch profile.
+launchProfile_createdBy :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_createdBy = Lens.lens (\LaunchProfile' {createdBy} -> createdBy) (\s@LaunchProfile' {} a -> s {createdBy = a} :: LaunchProfile)
+
+-- | A human-readable description of the launch profile.
+launchProfile_description :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_description = Lens.lens (\LaunchProfile' {description} -> description) (\s@LaunchProfile' {} a -> s {description = a} :: LaunchProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Unique identifiers for a collection of EC2 subnets.
+launchProfile_ec2SubnetIds :: Lens.Lens' LaunchProfile (Prelude.Maybe [Prelude.Text])
+launchProfile_ec2SubnetIds = Lens.lens (\LaunchProfile' {ec2SubnetIds} -> ec2SubnetIds) (\s@LaunchProfile' {} a -> s {ec2SubnetIds = a} :: LaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+launchProfile_launchProfileId :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_launchProfileId = Lens.lens (\LaunchProfile' {launchProfileId} -> launchProfileId) (\s@LaunchProfile' {} a -> s {launchProfileId = a} :: LaunchProfile)
+
+-- | The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+launchProfile_launchProfileProtocolVersions :: Lens.Lens' LaunchProfile (Prelude.Maybe [Prelude.Text])
+launchProfile_launchProfileProtocolVersions = Lens.lens (\LaunchProfile' {launchProfileProtocolVersions} -> launchProfileProtocolVersions) (\s@LaunchProfile' {} a -> s {launchProfileProtocolVersions = a} :: LaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | A friendly name for the launch profile.
+launchProfile_name :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_name = Lens.lens (\LaunchProfile' {name} -> name) (\s@LaunchProfile' {} a -> s {name = a} :: LaunchProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The current state.
+launchProfile_state :: Lens.Lens' LaunchProfile (Prelude.Maybe LaunchProfileState)
+launchProfile_state = Lens.lens (\LaunchProfile' {state} -> state) (\s@LaunchProfile' {} a -> s {state = a} :: LaunchProfile)
+
+-- | The status code.
+launchProfile_statusCode :: Lens.Lens' LaunchProfile (Prelude.Maybe LaunchProfileStatusCode)
+launchProfile_statusCode = Lens.lens (\LaunchProfile' {statusCode} -> statusCode) (\s@LaunchProfile' {} a -> s {statusCode = a} :: LaunchProfile)
+
+-- | The status message for the launch profile.
+launchProfile_statusMessage :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_statusMessage = Lens.lens (\LaunchProfile' {statusMessage} -> statusMessage) (\s@LaunchProfile' {} a -> s {statusMessage = a} :: LaunchProfile)
+
+-- | A configuration for a streaming session.
+launchProfile_streamConfiguration :: Lens.Lens' LaunchProfile (Prelude.Maybe StreamConfiguration)
+launchProfile_streamConfiguration = Lens.lens (\LaunchProfile' {streamConfiguration} -> streamConfiguration) (\s@LaunchProfile' {} a -> s {streamConfiguration = a} :: LaunchProfile)
+
+-- | Unique identifiers for a collection of studio components that can be
+-- used with this launch profile.
+launchProfile_studioComponentIds :: Lens.Lens' LaunchProfile (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+launchProfile_studioComponentIds = Lens.lens (\LaunchProfile' {studioComponentIds} -> studioComponentIds) (\s@LaunchProfile' {} a -> s {studioComponentIds = a} :: LaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+launchProfile_tags :: Lens.Lens' LaunchProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+launchProfile_tags = Lens.lens (\LaunchProfile' {tags} -> tags) (\s@LaunchProfile' {} a -> s {tags = a} :: LaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ISO timestamp in seconds for when the resource was updated.
+launchProfile_updatedAt :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.UTCTime)
+launchProfile_updatedAt = Lens.lens (\LaunchProfile' {updatedAt} -> updatedAt) (\s@LaunchProfile' {} a -> s {updatedAt = a} :: LaunchProfile) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that most recently updated the resource.
+launchProfile_updatedBy :: Lens.Lens' LaunchProfile (Prelude.Maybe Prelude.Text)
+launchProfile_updatedBy = Lens.lens (\LaunchProfile' {updatedBy} -> updatedBy) (\s@LaunchProfile' {} a -> s {updatedBy = a} :: LaunchProfile)
+
+-- | The list of the latest validation results.
+launchProfile_validationResults :: Lens.Lens' LaunchProfile (Prelude.Maybe [ValidationResult])
+launchProfile_validationResults = Lens.lens (\LaunchProfile' {validationResults} -> validationResults) (\s@LaunchProfile' {} a -> s {validationResults = a} :: LaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LaunchProfile where
+  parseJSON =
+    Data.withObject
+      "LaunchProfile"
+      ( \x ->
+          LaunchProfile'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "createdBy")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "ec2SubnetIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "launchProfileId")
+            Prelude.<*> ( x
+                            Data..:? "launchProfileProtocolVersions"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "streamConfiguration")
+            Prelude.<*> (x Data..:? "studioComponentIds")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "updatedAt")
+            Prelude.<*> (x Data..:? "updatedBy")
+            Prelude.<*> ( x
+                            Data..:? "validationResults"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable LaunchProfile where
+  hashWithSalt _salt LaunchProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ec2SubnetIds
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` launchProfileProtocolVersions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` streamConfiguration
+      `Prelude.hashWithSalt` studioComponentIds
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` updatedBy
+      `Prelude.hashWithSalt` validationResults
+
+instance Prelude.NFData LaunchProfile where
+  rnf LaunchProfile' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ec2SubnetIds
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf launchProfileProtocolVersions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf streamConfiguration
+      `Prelude.seq` Prelude.rnf studioComponentIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf updatedBy
+      `Prelude.seq` Prelude.rnf validationResults
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileInitialization.hs b/gen/Amazonka/Nimble/Types/LaunchProfileInitialization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileInitialization.hs
@@ -0,0 +1,188 @@
+{-# 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.Nimble.Types.LaunchProfileInitialization
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileInitialization where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.LaunchProfileInitializationActiveDirectory
+import Amazonka.Nimble.Types.LaunchProfileInitializationScript
+import Amazonka.Nimble.Types.LaunchProfilePlatform
+import qualified Amazonka.Prelude as Prelude
+
+-- | A launch profile initialization contains information required for a
+-- workstation or server to connect to a launch profile.
+--
+-- This includes scripts, endpoints, security groups, subnets, and other
+-- configuration.
+--
+-- /See:/ 'newLaunchProfileInitialization' smart constructor.
+data LaunchProfileInitialization = LaunchProfileInitialization'
+  { -- | A @LaunchProfileInitializationActiveDirectory@ resource.
+    activeDirectory :: Prelude.Maybe LaunchProfileInitializationActiveDirectory,
+    -- | The EC2 security groups that control access to the studio component.
+    ec2SecurityGroupIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the protocol that is used by the launch profile.
+    -- The only valid version is \"2021-03-31\".
+    launchProfileProtocolVersion :: Prelude.Maybe Prelude.Text,
+    -- | The launch purpose.
+    launchPurpose :: Prelude.Maybe Prelude.Text,
+    -- | The name for the launch profile.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The platform of the launch platform, either Windows or Linux.
+    platform :: Prelude.Maybe LaunchProfilePlatform,
+    -- | The system initializtion scripts.
+    systemInitializationScripts :: Prelude.Maybe [LaunchProfileInitializationScript],
+    -- | The user initializtion scripts.
+    userInitializationScripts :: Prelude.Maybe [LaunchProfileInitializationScript]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchProfileInitialization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeDirectory', 'launchProfileInitialization_activeDirectory' - A @LaunchProfileInitializationActiveDirectory@ resource.
+--
+-- 'ec2SecurityGroupIds', 'launchProfileInitialization_ec2SecurityGroupIds' - The EC2 security groups that control access to the studio component.
+--
+-- 'launchProfileId', 'launchProfileInitialization_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'launchProfileProtocolVersion', 'launchProfileInitialization_launchProfileProtocolVersion' - The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+--
+-- 'launchPurpose', 'launchProfileInitialization_launchPurpose' - The launch purpose.
+--
+-- 'name', 'launchProfileInitialization_name' - The name for the launch profile.
+--
+-- 'platform', 'launchProfileInitialization_platform' - The platform of the launch platform, either Windows or Linux.
+--
+-- 'systemInitializationScripts', 'launchProfileInitialization_systemInitializationScripts' - The system initializtion scripts.
+--
+-- 'userInitializationScripts', 'launchProfileInitialization_userInitializationScripts' - The user initializtion scripts.
+newLaunchProfileInitialization ::
+  LaunchProfileInitialization
+newLaunchProfileInitialization =
+  LaunchProfileInitialization'
+    { activeDirectory =
+        Prelude.Nothing,
+      ec2SecurityGroupIds = Prelude.Nothing,
+      launchProfileId = Prelude.Nothing,
+      launchProfileProtocolVersion = Prelude.Nothing,
+      launchPurpose = Prelude.Nothing,
+      name = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      systemInitializationScripts = Prelude.Nothing,
+      userInitializationScripts = Prelude.Nothing
+    }
+
+-- | A @LaunchProfileInitializationActiveDirectory@ resource.
+launchProfileInitialization_activeDirectory :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe LaunchProfileInitializationActiveDirectory)
+launchProfileInitialization_activeDirectory = Lens.lens (\LaunchProfileInitialization' {activeDirectory} -> activeDirectory) (\s@LaunchProfileInitialization' {} a -> s {activeDirectory = a} :: LaunchProfileInitialization)
+
+-- | The EC2 security groups that control access to the studio component.
+launchProfileInitialization_ec2SecurityGroupIds :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+launchProfileInitialization_ec2SecurityGroupIds = Lens.lens (\LaunchProfileInitialization' {ec2SecurityGroupIds} -> ec2SecurityGroupIds) (\s@LaunchProfileInitialization' {} a -> s {ec2SecurityGroupIds = a} :: LaunchProfileInitialization) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+launchProfileInitialization_launchProfileId :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe Prelude.Text)
+launchProfileInitialization_launchProfileId = Lens.lens (\LaunchProfileInitialization' {launchProfileId} -> launchProfileId) (\s@LaunchProfileInitialization' {} a -> s {launchProfileId = a} :: LaunchProfileInitialization)
+
+-- | The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+launchProfileInitialization_launchProfileProtocolVersion :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe Prelude.Text)
+launchProfileInitialization_launchProfileProtocolVersion = Lens.lens (\LaunchProfileInitialization' {launchProfileProtocolVersion} -> launchProfileProtocolVersion) (\s@LaunchProfileInitialization' {} a -> s {launchProfileProtocolVersion = a} :: LaunchProfileInitialization)
+
+-- | The launch purpose.
+launchProfileInitialization_launchPurpose :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe Prelude.Text)
+launchProfileInitialization_launchPurpose = Lens.lens (\LaunchProfileInitialization' {launchPurpose} -> launchPurpose) (\s@LaunchProfileInitialization' {} a -> s {launchPurpose = a} :: LaunchProfileInitialization)
+
+-- | The name for the launch profile.
+launchProfileInitialization_name :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe Prelude.Text)
+launchProfileInitialization_name = Lens.lens (\LaunchProfileInitialization' {name} -> name) (\s@LaunchProfileInitialization' {} a -> s {name = a} :: LaunchProfileInitialization) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The platform of the launch platform, either Windows or Linux.
+launchProfileInitialization_platform :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe LaunchProfilePlatform)
+launchProfileInitialization_platform = Lens.lens (\LaunchProfileInitialization' {platform} -> platform) (\s@LaunchProfileInitialization' {} a -> s {platform = a} :: LaunchProfileInitialization)
+
+-- | The system initializtion scripts.
+launchProfileInitialization_systemInitializationScripts :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe [LaunchProfileInitializationScript])
+launchProfileInitialization_systemInitializationScripts = Lens.lens (\LaunchProfileInitialization' {systemInitializationScripts} -> systemInitializationScripts) (\s@LaunchProfileInitialization' {} a -> s {systemInitializationScripts = a} :: LaunchProfileInitialization) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user initializtion scripts.
+launchProfileInitialization_userInitializationScripts :: Lens.Lens' LaunchProfileInitialization (Prelude.Maybe [LaunchProfileInitializationScript])
+launchProfileInitialization_userInitializationScripts = Lens.lens (\LaunchProfileInitialization' {userInitializationScripts} -> userInitializationScripts) (\s@LaunchProfileInitialization' {} a -> s {userInitializationScripts = a} :: LaunchProfileInitialization) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LaunchProfileInitialization where
+  parseJSON =
+    Data.withObject
+      "LaunchProfileInitialization"
+      ( \x ->
+          LaunchProfileInitialization'
+            Prelude.<$> (x Data..:? "activeDirectory")
+            Prelude.<*> (x Data..:? "ec2SecurityGroupIds")
+            Prelude.<*> (x Data..:? "launchProfileId")
+            Prelude.<*> (x Data..:? "launchProfileProtocolVersion")
+            Prelude.<*> (x Data..:? "launchPurpose")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> ( x
+                            Data..:? "systemInitializationScripts"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "userInitializationScripts"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable LaunchProfileInitialization where
+  hashWithSalt _salt LaunchProfileInitialization' {..} =
+    _salt
+      `Prelude.hashWithSalt` activeDirectory
+      `Prelude.hashWithSalt` ec2SecurityGroupIds
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` launchProfileProtocolVersion
+      `Prelude.hashWithSalt` launchPurpose
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` systemInitializationScripts
+      `Prelude.hashWithSalt` userInitializationScripts
+
+instance Prelude.NFData LaunchProfileInitialization where
+  rnf LaunchProfileInitialization' {..} =
+    Prelude.rnf activeDirectory
+      `Prelude.seq` Prelude.rnf ec2SecurityGroupIds
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf launchProfileProtocolVersion
+      `Prelude.seq` Prelude.rnf launchPurpose
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf systemInitializationScripts
+      `Prelude.seq` Prelude.rnf userInitializationScripts
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileInitializationActiveDirectory.hs b/gen/Amazonka/Nimble/Types/LaunchProfileInitializationActiveDirectory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileInitializationActiveDirectory.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LaunchProfileInitializationActiveDirectory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileInitializationActiveDirectory where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.ActiveDirectoryComputerAttribute
+import qualified Amazonka.Prelude as Prelude
+
+-- | The launch profile initialization Active Directory contains information
+-- required for the launch profile to connect to the Active Directory.
+--
+-- /See:/ 'newLaunchProfileInitializationActiveDirectory' smart constructor.
+data LaunchProfileInitializationActiveDirectory = LaunchProfileInitializationActiveDirectory'
+  { -- | A collection of custom attributes for an Active Directory computer.
+    computerAttributes :: Prelude.Maybe (Data.Sensitive [ActiveDirectoryComputerAttribute]),
+    -- | The directory ID of the Directory Service for Microsoft Active Directory
+    -- to access using this launch profile.
+    directoryId :: Prelude.Maybe Prelude.Text,
+    -- | The directory name.
+    directoryName :: Prelude.Maybe Prelude.Text,
+    -- | The DNS IP address.
+    dnsIpAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The name for the organizational unit distinguished name.
+    organizationalUnitDistinguishedName :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a studio component resource.
+    studioComponentId :: Prelude.Maybe Prelude.Text,
+    -- | The name for the studio component.
+    studioComponentName :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchProfileInitializationActiveDirectory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'computerAttributes', 'launchProfileInitializationActiveDirectory_computerAttributes' - A collection of custom attributes for an Active Directory computer.
+--
+-- 'directoryId', 'launchProfileInitializationActiveDirectory_directoryId' - The directory ID of the Directory Service for Microsoft Active Directory
+-- to access using this launch profile.
+--
+-- 'directoryName', 'launchProfileInitializationActiveDirectory_directoryName' - The directory name.
+--
+-- 'dnsIpAddresses', 'launchProfileInitializationActiveDirectory_dnsIpAddresses' - The DNS IP address.
+--
+-- 'organizationalUnitDistinguishedName', 'launchProfileInitializationActiveDirectory_organizationalUnitDistinguishedName' - The name for the organizational unit distinguished name.
+--
+-- 'studioComponentId', 'launchProfileInitializationActiveDirectory_studioComponentId' - The unique identifier for a studio component resource.
+--
+-- 'studioComponentName', 'launchProfileInitializationActiveDirectory_studioComponentName' - The name for the studio component.
+newLaunchProfileInitializationActiveDirectory ::
+  LaunchProfileInitializationActiveDirectory
+newLaunchProfileInitializationActiveDirectory =
+  LaunchProfileInitializationActiveDirectory'
+    { computerAttributes =
+        Prelude.Nothing,
+      directoryId = Prelude.Nothing,
+      directoryName = Prelude.Nothing,
+      dnsIpAddresses =
+        Prelude.Nothing,
+      organizationalUnitDistinguishedName =
+        Prelude.Nothing,
+      studioComponentId =
+        Prelude.Nothing,
+      studioComponentName =
+        Prelude.Nothing
+    }
+
+-- | A collection of custom attributes for an Active Directory computer.
+launchProfileInitializationActiveDirectory_computerAttributes :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe [ActiveDirectoryComputerAttribute])
+launchProfileInitializationActiveDirectory_computerAttributes = Lens.lens (\LaunchProfileInitializationActiveDirectory' {computerAttributes} -> computerAttributes) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {computerAttributes = a} :: LaunchProfileInitializationActiveDirectory) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The directory ID of the Directory Service for Microsoft Active Directory
+-- to access using this launch profile.
+launchProfileInitializationActiveDirectory_directoryId :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe Prelude.Text)
+launchProfileInitializationActiveDirectory_directoryId = Lens.lens (\LaunchProfileInitializationActiveDirectory' {directoryId} -> directoryId) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {directoryId = a} :: LaunchProfileInitializationActiveDirectory)
+
+-- | The directory name.
+launchProfileInitializationActiveDirectory_directoryName :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe Prelude.Text)
+launchProfileInitializationActiveDirectory_directoryName = Lens.lens (\LaunchProfileInitializationActiveDirectory' {directoryName} -> directoryName) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {directoryName = a} :: LaunchProfileInitializationActiveDirectory)
+
+-- | The DNS IP address.
+launchProfileInitializationActiveDirectory_dnsIpAddresses :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe [Prelude.Text])
+launchProfileInitializationActiveDirectory_dnsIpAddresses = Lens.lens (\LaunchProfileInitializationActiveDirectory' {dnsIpAddresses} -> dnsIpAddresses) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {dnsIpAddresses = a} :: LaunchProfileInitializationActiveDirectory) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the organizational unit distinguished name.
+launchProfileInitializationActiveDirectory_organizationalUnitDistinguishedName :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe Prelude.Text)
+launchProfileInitializationActiveDirectory_organizationalUnitDistinguishedName = Lens.lens (\LaunchProfileInitializationActiveDirectory' {organizationalUnitDistinguishedName} -> organizationalUnitDistinguishedName) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {organizationalUnitDistinguishedName = a} :: LaunchProfileInitializationActiveDirectory)
+
+-- | The unique identifier for a studio component resource.
+launchProfileInitializationActiveDirectory_studioComponentId :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe Prelude.Text)
+launchProfileInitializationActiveDirectory_studioComponentId = Lens.lens (\LaunchProfileInitializationActiveDirectory' {studioComponentId} -> studioComponentId) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {studioComponentId = a} :: LaunchProfileInitializationActiveDirectory)
+
+-- | The name for the studio component.
+launchProfileInitializationActiveDirectory_studioComponentName :: Lens.Lens' LaunchProfileInitializationActiveDirectory (Prelude.Maybe Prelude.Text)
+launchProfileInitializationActiveDirectory_studioComponentName = Lens.lens (\LaunchProfileInitializationActiveDirectory' {studioComponentName} -> studioComponentName) (\s@LaunchProfileInitializationActiveDirectory' {} a -> s {studioComponentName = a} :: LaunchProfileInitializationActiveDirectory) Prelude.. Lens.mapping Data._Sensitive
+
+instance
+  Data.FromJSON
+    LaunchProfileInitializationActiveDirectory
+  where
+  parseJSON =
+    Data.withObject
+      "LaunchProfileInitializationActiveDirectory"
+      ( \x ->
+          LaunchProfileInitializationActiveDirectory'
+            Prelude.<$> ( x
+                            Data..:? "computerAttributes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "directoryId")
+            Prelude.<*> (x Data..:? "directoryName")
+            Prelude.<*> (x Data..:? "dnsIpAddresses" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "organizationalUnitDistinguishedName")
+            Prelude.<*> (x Data..:? "studioComponentId")
+            Prelude.<*> (x Data..:? "studioComponentName")
+      )
+
+instance
+  Prelude.Hashable
+    LaunchProfileInitializationActiveDirectory
+  where
+  hashWithSalt
+    _salt
+    LaunchProfileInitializationActiveDirectory' {..} =
+      _salt
+        `Prelude.hashWithSalt` computerAttributes
+        `Prelude.hashWithSalt` directoryId
+        `Prelude.hashWithSalt` directoryName
+        `Prelude.hashWithSalt` dnsIpAddresses
+        `Prelude.hashWithSalt` organizationalUnitDistinguishedName
+        `Prelude.hashWithSalt` studioComponentId
+        `Prelude.hashWithSalt` studioComponentName
+
+instance
+  Prelude.NFData
+    LaunchProfileInitializationActiveDirectory
+  where
+  rnf LaunchProfileInitializationActiveDirectory' {..} =
+    Prelude.rnf computerAttributes
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf directoryName
+      `Prelude.seq` Prelude.rnf dnsIpAddresses
+      `Prelude.seq` Prelude.rnf organizationalUnitDistinguishedName
+      `Prelude.seq` Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf studioComponentName
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileInitializationScript.hs b/gen/Amazonka/Nimble/Types/LaunchProfileInitializationScript.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileInitializationScript.hs
@@ -0,0 +1,146 @@
+{-# 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.Nimble.Types.LaunchProfileInitializationScript
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileInitializationScript 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 launch profile initialization script is used when start streaming
+-- session runs.
+--
+-- /See:/ 'newLaunchProfileInitializationScript' smart constructor.
+data LaunchProfileInitializationScript = LaunchProfileInitializationScript'
+  { -- | An IAM role attached to a Studio Component that gives the studio
+    -- component access to Amazon Web Services resources at anytime while the
+    -- instance is running.
+    runtimeRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The initialization script.
+    script :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | An IAM role attached to Studio Component when the system initialization
+    -- script runs which give the studio component access to Amazon Web
+    -- Services resources when the system initialization script runs.
+    secureInitializationRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a studio component resource.
+    studioComponentId :: Prelude.Maybe Prelude.Text,
+    -- | The name for the studio component.
+    studioComponentName :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchProfileInitializationScript' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'runtimeRoleArn', 'launchProfileInitializationScript_runtimeRoleArn' - An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+--
+-- 'script', 'launchProfileInitializationScript_script' - The initialization script.
+--
+-- 'secureInitializationRoleArn', 'launchProfileInitializationScript_secureInitializationRoleArn' - An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+--
+-- 'studioComponentId', 'launchProfileInitializationScript_studioComponentId' - The unique identifier for a studio component resource.
+--
+-- 'studioComponentName', 'launchProfileInitializationScript_studioComponentName' - The name for the studio component.
+newLaunchProfileInitializationScript ::
+  LaunchProfileInitializationScript
+newLaunchProfileInitializationScript =
+  LaunchProfileInitializationScript'
+    { runtimeRoleArn =
+        Prelude.Nothing,
+      script = Prelude.Nothing,
+      secureInitializationRoleArn =
+        Prelude.Nothing,
+      studioComponentId = Prelude.Nothing,
+      studioComponentName = Prelude.Nothing
+    }
+
+-- | An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+launchProfileInitializationScript_runtimeRoleArn :: Lens.Lens' LaunchProfileInitializationScript (Prelude.Maybe Prelude.Text)
+launchProfileInitializationScript_runtimeRoleArn = Lens.lens (\LaunchProfileInitializationScript' {runtimeRoleArn} -> runtimeRoleArn) (\s@LaunchProfileInitializationScript' {} a -> s {runtimeRoleArn = a} :: LaunchProfileInitializationScript)
+
+-- | The initialization script.
+launchProfileInitializationScript_script :: Lens.Lens' LaunchProfileInitializationScript (Prelude.Maybe Prelude.Text)
+launchProfileInitializationScript_script = Lens.lens (\LaunchProfileInitializationScript' {script} -> script) (\s@LaunchProfileInitializationScript' {} a -> s {script = a} :: LaunchProfileInitializationScript) Prelude.. Lens.mapping Data._Sensitive
+
+-- | An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+launchProfileInitializationScript_secureInitializationRoleArn :: Lens.Lens' LaunchProfileInitializationScript (Prelude.Maybe Prelude.Text)
+launchProfileInitializationScript_secureInitializationRoleArn = Lens.lens (\LaunchProfileInitializationScript' {secureInitializationRoleArn} -> secureInitializationRoleArn) (\s@LaunchProfileInitializationScript' {} a -> s {secureInitializationRoleArn = a} :: LaunchProfileInitializationScript)
+
+-- | The unique identifier for a studio component resource.
+launchProfileInitializationScript_studioComponentId :: Lens.Lens' LaunchProfileInitializationScript (Prelude.Maybe Prelude.Text)
+launchProfileInitializationScript_studioComponentId = Lens.lens (\LaunchProfileInitializationScript' {studioComponentId} -> studioComponentId) (\s@LaunchProfileInitializationScript' {} a -> s {studioComponentId = a} :: LaunchProfileInitializationScript)
+
+-- | The name for the studio component.
+launchProfileInitializationScript_studioComponentName :: Lens.Lens' LaunchProfileInitializationScript (Prelude.Maybe Prelude.Text)
+launchProfileInitializationScript_studioComponentName = Lens.lens (\LaunchProfileInitializationScript' {studioComponentName} -> studioComponentName) (\s@LaunchProfileInitializationScript' {} a -> s {studioComponentName = a} :: LaunchProfileInitializationScript) Prelude.. Lens.mapping Data._Sensitive
+
+instance
+  Data.FromJSON
+    LaunchProfileInitializationScript
+  where
+  parseJSON =
+    Data.withObject
+      "LaunchProfileInitializationScript"
+      ( \x ->
+          LaunchProfileInitializationScript'
+            Prelude.<$> (x Data..:? "runtimeRoleArn")
+            Prelude.<*> (x Data..:? "script")
+            Prelude.<*> (x Data..:? "secureInitializationRoleArn")
+            Prelude.<*> (x Data..:? "studioComponentId")
+            Prelude.<*> (x Data..:? "studioComponentName")
+      )
+
+instance
+  Prelude.Hashable
+    LaunchProfileInitializationScript
+  where
+  hashWithSalt
+    _salt
+    LaunchProfileInitializationScript' {..} =
+      _salt
+        `Prelude.hashWithSalt` runtimeRoleArn
+        `Prelude.hashWithSalt` script
+        `Prelude.hashWithSalt` secureInitializationRoleArn
+        `Prelude.hashWithSalt` studioComponentId
+        `Prelude.hashWithSalt` studioComponentName
+
+instance
+  Prelude.NFData
+    LaunchProfileInitializationScript
+  where
+  rnf LaunchProfileInitializationScript' {..} =
+    Prelude.rnf runtimeRoleArn
+      `Prelude.seq` Prelude.rnf script
+      `Prelude.seq` Prelude.rnf secureInitializationRoleArn
+      `Prelude.seq` Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf studioComponentName
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileMembership.hs b/gen/Amazonka/Nimble/Types/LaunchProfileMembership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileMembership.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LaunchProfileMembership
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileMembership where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.LaunchProfilePersona
+import qualified Amazonka.Prelude as Prelude
+
+-- | Studio admins can use launch profile membership to delegate launch
+-- profile access to studio users in the Nimble Studio portal without
+-- writing or maintaining complex IAM policies. A launch profile member is
+-- a user association from your studio identity source who is granted
+-- permissions to a launch profile.
+--
+-- A launch profile member (type USER) provides the following permissions
+-- to that launch profile:
+--
+-- -   GetLaunchProfile
+--
+-- -   GetLaunchProfileInitialization
+--
+-- -   GetLaunchProfileMembers
+--
+-- -   GetLaunchProfileMember
+--
+-- -   CreateStreamingSession
+--
+-- -   GetLaunchProfileDetails
+--
+-- /See:/ 'newLaunchProfileMembership' smart constructor.
+data LaunchProfileMembership = LaunchProfileMembership'
+  { -- | The ID of the identity store.
+    identityStoreId :: Prelude.Maybe Prelude.Text,
+    -- | The persona.
+    persona :: Prelude.Maybe LaunchProfilePersona,
+    -- | The principal ID.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | The Active Directory Security Identifier for this user, if available.
+    sid :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchProfileMembership' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityStoreId', 'launchProfileMembership_identityStoreId' - The ID of the identity store.
+--
+-- 'persona', 'launchProfileMembership_persona' - The persona.
+--
+-- 'principalId', 'launchProfileMembership_principalId' - The principal ID.
+--
+-- 'sid', 'launchProfileMembership_sid' - The Active Directory Security Identifier for this user, if available.
+newLaunchProfileMembership ::
+  LaunchProfileMembership
+newLaunchProfileMembership =
+  LaunchProfileMembership'
+    { identityStoreId =
+        Prelude.Nothing,
+      persona = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      sid = Prelude.Nothing
+    }
+
+-- | The ID of the identity store.
+launchProfileMembership_identityStoreId :: Lens.Lens' LaunchProfileMembership (Prelude.Maybe Prelude.Text)
+launchProfileMembership_identityStoreId = Lens.lens (\LaunchProfileMembership' {identityStoreId} -> identityStoreId) (\s@LaunchProfileMembership' {} a -> s {identityStoreId = a} :: LaunchProfileMembership)
+
+-- | The persona.
+launchProfileMembership_persona :: Lens.Lens' LaunchProfileMembership (Prelude.Maybe LaunchProfilePersona)
+launchProfileMembership_persona = Lens.lens (\LaunchProfileMembership' {persona} -> persona) (\s@LaunchProfileMembership' {} a -> s {persona = a} :: LaunchProfileMembership)
+
+-- | The principal ID.
+launchProfileMembership_principalId :: Lens.Lens' LaunchProfileMembership (Prelude.Maybe Prelude.Text)
+launchProfileMembership_principalId = Lens.lens (\LaunchProfileMembership' {principalId} -> principalId) (\s@LaunchProfileMembership' {} a -> s {principalId = a} :: LaunchProfileMembership)
+
+-- | The Active Directory Security Identifier for this user, if available.
+launchProfileMembership_sid :: Lens.Lens' LaunchProfileMembership (Prelude.Maybe Prelude.Text)
+launchProfileMembership_sid = Lens.lens (\LaunchProfileMembership' {sid} -> sid) (\s@LaunchProfileMembership' {} a -> s {sid = a} :: LaunchProfileMembership)
+
+instance Data.FromJSON LaunchProfileMembership where
+  parseJSON =
+    Data.withObject
+      "LaunchProfileMembership"
+      ( \x ->
+          LaunchProfileMembership'
+            Prelude.<$> (x Data..:? "identityStoreId")
+            Prelude.<*> (x Data..:? "persona")
+            Prelude.<*> (x Data..:? "principalId")
+            Prelude.<*> (x Data..:? "sid")
+      )
+
+instance Prelude.Hashable LaunchProfileMembership where
+  hashWithSalt _salt LaunchProfileMembership' {..} =
+    _salt
+      `Prelude.hashWithSalt` identityStoreId
+      `Prelude.hashWithSalt` persona
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` sid
+
+instance Prelude.NFData LaunchProfileMembership where
+  rnf LaunchProfileMembership' {..} =
+    Prelude.rnf identityStoreId
+      `Prelude.seq` Prelude.rnf persona
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf sid
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfilePersona.hs b/gen/Amazonka/Nimble/Types/LaunchProfilePersona.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfilePersona.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LaunchProfilePersona
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfilePersona
+  ( LaunchProfilePersona
+      ( ..,
+        LaunchProfilePersona_USER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfilePersona = LaunchProfilePersona'
+  { fromLaunchProfilePersona ::
+      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 LaunchProfilePersona_USER :: LaunchProfilePersona
+pattern LaunchProfilePersona_USER = LaunchProfilePersona' "USER"
+
+{-# COMPLETE
+  LaunchProfilePersona_USER,
+  LaunchProfilePersona'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfilePlatform.hs b/gen/Amazonka/Nimble/Types/LaunchProfilePlatform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfilePlatform.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.Nimble.Types.LaunchProfilePlatform
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfilePlatform
+  ( LaunchProfilePlatform
+      ( ..,
+        LaunchProfilePlatform_LINUX,
+        LaunchProfilePlatform_WINDOWS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfilePlatform = LaunchProfilePlatform'
+  { fromLaunchProfilePlatform ::
+      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 LaunchProfilePlatform_LINUX :: LaunchProfilePlatform
+pattern LaunchProfilePlatform_LINUX = LaunchProfilePlatform' "LINUX"
+
+pattern LaunchProfilePlatform_WINDOWS :: LaunchProfilePlatform
+pattern LaunchProfilePlatform_WINDOWS = LaunchProfilePlatform' "WINDOWS"
+
+{-# COMPLETE
+  LaunchProfilePlatform_LINUX,
+  LaunchProfilePlatform_WINDOWS,
+  LaunchProfilePlatform'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileState.hs b/gen/Amazonka/Nimble/Types/LaunchProfileState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileState.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.Nimble.Types.LaunchProfileState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileState
+  ( LaunchProfileState
+      ( ..,
+        LaunchProfileState_CREATE_FAILED,
+        LaunchProfileState_CREATE_IN_PROGRESS,
+        LaunchProfileState_DELETED,
+        LaunchProfileState_DELETE_FAILED,
+        LaunchProfileState_DELETE_IN_PROGRESS,
+        LaunchProfileState_READY,
+        LaunchProfileState_UPDATE_FAILED,
+        LaunchProfileState_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfileState = LaunchProfileState'
+  { fromLaunchProfileState ::
+      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 LaunchProfileState_CREATE_FAILED :: LaunchProfileState
+pattern LaunchProfileState_CREATE_FAILED = LaunchProfileState' "CREATE_FAILED"
+
+pattern LaunchProfileState_CREATE_IN_PROGRESS :: LaunchProfileState
+pattern LaunchProfileState_CREATE_IN_PROGRESS = LaunchProfileState' "CREATE_IN_PROGRESS"
+
+pattern LaunchProfileState_DELETED :: LaunchProfileState
+pattern LaunchProfileState_DELETED = LaunchProfileState' "DELETED"
+
+pattern LaunchProfileState_DELETE_FAILED :: LaunchProfileState
+pattern LaunchProfileState_DELETE_FAILED = LaunchProfileState' "DELETE_FAILED"
+
+pattern LaunchProfileState_DELETE_IN_PROGRESS :: LaunchProfileState
+pattern LaunchProfileState_DELETE_IN_PROGRESS = LaunchProfileState' "DELETE_IN_PROGRESS"
+
+pattern LaunchProfileState_READY :: LaunchProfileState
+pattern LaunchProfileState_READY = LaunchProfileState' "READY"
+
+pattern LaunchProfileState_UPDATE_FAILED :: LaunchProfileState
+pattern LaunchProfileState_UPDATE_FAILED = LaunchProfileState' "UPDATE_FAILED"
+
+pattern LaunchProfileState_UPDATE_IN_PROGRESS :: LaunchProfileState
+pattern LaunchProfileState_UPDATE_IN_PROGRESS = LaunchProfileState' "UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  LaunchProfileState_CREATE_FAILED,
+  LaunchProfileState_CREATE_IN_PROGRESS,
+  LaunchProfileState_DELETED,
+  LaunchProfileState_DELETE_FAILED,
+  LaunchProfileState_DELETE_IN_PROGRESS,
+  LaunchProfileState_READY,
+  LaunchProfileState_UPDATE_FAILED,
+  LaunchProfileState_UPDATE_IN_PROGRESS,
+  LaunchProfileState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileStatusCode.hs b/gen/Amazonka/Nimble/Types/LaunchProfileStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileStatusCode.hs
@@ -0,0 +1,136 @@
+{-# 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.Nimble.Types.LaunchProfileStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileStatusCode
+  ( LaunchProfileStatusCode
+      ( ..,
+        LaunchProfileStatusCode_ENCRYPTION_KEY_ACCESS_DENIED,
+        LaunchProfileStatusCode_ENCRYPTION_KEY_NOT_FOUND,
+        LaunchProfileStatusCode_INTERNAL_ERROR,
+        LaunchProfileStatusCode_INVALID_INSTANCE_TYPES_PROVIDED,
+        LaunchProfileStatusCode_INVALID_SUBNETS_COMBINATION,
+        LaunchProfileStatusCode_INVALID_SUBNETS_PROVIDED,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_CREATED,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_CREATE_IN_PROGRESS,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_DELETED,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_DELETE_IN_PROGRESS,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATED,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATE_IN_PROGRESS,
+        LaunchProfileStatusCode_LAUNCH_PROFILE_WITH_STREAM_SESSIONS_NOT_DELETED,
+        LaunchProfileStatusCode_STREAMING_IMAGE_NOT_FOUND,
+        LaunchProfileStatusCode_STREAMING_IMAGE_NOT_READY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfileStatusCode = LaunchProfileStatusCode'
+  { fromLaunchProfileStatusCode ::
+      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 LaunchProfileStatusCode_ENCRYPTION_KEY_ACCESS_DENIED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_ENCRYPTION_KEY_ACCESS_DENIED = LaunchProfileStatusCode' "ENCRYPTION_KEY_ACCESS_DENIED"
+
+pattern LaunchProfileStatusCode_ENCRYPTION_KEY_NOT_FOUND :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_ENCRYPTION_KEY_NOT_FOUND = LaunchProfileStatusCode' "ENCRYPTION_KEY_NOT_FOUND"
+
+pattern LaunchProfileStatusCode_INTERNAL_ERROR :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_INTERNAL_ERROR = LaunchProfileStatusCode' "INTERNAL_ERROR"
+
+pattern LaunchProfileStatusCode_INVALID_INSTANCE_TYPES_PROVIDED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_INVALID_INSTANCE_TYPES_PROVIDED = LaunchProfileStatusCode' "INVALID_INSTANCE_TYPES_PROVIDED"
+
+pattern LaunchProfileStatusCode_INVALID_SUBNETS_COMBINATION :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_INVALID_SUBNETS_COMBINATION = LaunchProfileStatusCode' "INVALID_SUBNETS_COMBINATION"
+
+pattern LaunchProfileStatusCode_INVALID_SUBNETS_PROVIDED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_INVALID_SUBNETS_PROVIDED = LaunchProfileStatusCode' "INVALID_SUBNETS_PROVIDED"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_CREATED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_CREATED = LaunchProfileStatusCode' "LAUNCH_PROFILE_CREATED"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_CREATE_IN_PROGRESS :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_CREATE_IN_PROGRESS = LaunchProfileStatusCode' "LAUNCH_PROFILE_CREATE_IN_PROGRESS"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_DELETED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_DELETED = LaunchProfileStatusCode' "LAUNCH_PROFILE_DELETED"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_DELETE_IN_PROGRESS :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_DELETE_IN_PROGRESS = LaunchProfileStatusCode' "LAUNCH_PROFILE_DELETE_IN_PROGRESS"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATED = LaunchProfileStatusCode' "LAUNCH_PROFILE_UPDATED"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATE_IN_PROGRESS :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATE_IN_PROGRESS = LaunchProfileStatusCode' "LAUNCH_PROFILE_UPDATE_IN_PROGRESS"
+
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_WITH_STREAM_SESSIONS_NOT_DELETED :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_LAUNCH_PROFILE_WITH_STREAM_SESSIONS_NOT_DELETED = LaunchProfileStatusCode' "LAUNCH_PROFILE_WITH_STREAM_SESSIONS_NOT_DELETED"
+
+pattern LaunchProfileStatusCode_STREAMING_IMAGE_NOT_FOUND :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_STREAMING_IMAGE_NOT_FOUND = LaunchProfileStatusCode' "STREAMING_IMAGE_NOT_FOUND"
+
+pattern LaunchProfileStatusCode_STREAMING_IMAGE_NOT_READY :: LaunchProfileStatusCode
+pattern LaunchProfileStatusCode_STREAMING_IMAGE_NOT_READY = LaunchProfileStatusCode' "STREAMING_IMAGE_NOT_READY"
+
+{-# COMPLETE
+  LaunchProfileStatusCode_ENCRYPTION_KEY_ACCESS_DENIED,
+  LaunchProfileStatusCode_ENCRYPTION_KEY_NOT_FOUND,
+  LaunchProfileStatusCode_INTERNAL_ERROR,
+  LaunchProfileStatusCode_INVALID_INSTANCE_TYPES_PROVIDED,
+  LaunchProfileStatusCode_INVALID_SUBNETS_COMBINATION,
+  LaunchProfileStatusCode_INVALID_SUBNETS_PROVIDED,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_CREATED,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_CREATE_IN_PROGRESS,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_DELETED,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_DELETE_IN_PROGRESS,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATED,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_UPDATE_IN_PROGRESS,
+  LaunchProfileStatusCode_LAUNCH_PROFILE_WITH_STREAM_SESSIONS_NOT_DELETED,
+  LaunchProfileStatusCode_STREAMING_IMAGE_NOT_FOUND,
+  LaunchProfileStatusCode_STREAMING_IMAGE_NOT_READY,
+  LaunchProfileStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileValidationState.hs b/gen/Amazonka/Nimble/Types/LaunchProfileValidationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileValidationState.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LaunchProfileValidationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileValidationState
+  ( LaunchProfileValidationState
+      ( ..,
+        LaunchProfileValidationState_VALIDATION_FAILED,
+        LaunchProfileValidationState_VALIDATION_FAILED_INTERNAL_SERVER_ERROR,
+        LaunchProfileValidationState_VALIDATION_IN_PROGRESS,
+        LaunchProfileValidationState_VALIDATION_NOT_STARTED,
+        LaunchProfileValidationState_VALIDATION_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfileValidationState = LaunchProfileValidationState'
+  { fromLaunchProfileValidationState ::
+      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 LaunchProfileValidationState_VALIDATION_FAILED :: LaunchProfileValidationState
+pattern LaunchProfileValidationState_VALIDATION_FAILED = LaunchProfileValidationState' "VALIDATION_FAILED"
+
+pattern LaunchProfileValidationState_VALIDATION_FAILED_INTERNAL_SERVER_ERROR :: LaunchProfileValidationState
+pattern LaunchProfileValidationState_VALIDATION_FAILED_INTERNAL_SERVER_ERROR = LaunchProfileValidationState' "VALIDATION_FAILED_INTERNAL_SERVER_ERROR"
+
+pattern LaunchProfileValidationState_VALIDATION_IN_PROGRESS :: LaunchProfileValidationState
+pattern LaunchProfileValidationState_VALIDATION_IN_PROGRESS = LaunchProfileValidationState' "VALIDATION_IN_PROGRESS"
+
+pattern LaunchProfileValidationState_VALIDATION_NOT_STARTED :: LaunchProfileValidationState
+pattern LaunchProfileValidationState_VALIDATION_NOT_STARTED = LaunchProfileValidationState' "VALIDATION_NOT_STARTED"
+
+pattern LaunchProfileValidationState_VALIDATION_SUCCESS :: LaunchProfileValidationState
+pattern LaunchProfileValidationState_VALIDATION_SUCCESS = LaunchProfileValidationState' "VALIDATION_SUCCESS"
+
+{-# COMPLETE
+  LaunchProfileValidationState_VALIDATION_FAILED,
+  LaunchProfileValidationState_VALIDATION_FAILED_INTERNAL_SERVER_ERROR,
+  LaunchProfileValidationState_VALIDATION_IN_PROGRESS,
+  LaunchProfileValidationState_VALIDATION_NOT_STARTED,
+  LaunchProfileValidationState_VALIDATION_SUCCESS,
+  LaunchProfileValidationState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileValidationStatusCode.hs b/gen/Amazonka/Nimble/Types/LaunchProfileValidationStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileValidationStatusCode.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LaunchProfileValidationStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileValidationStatusCode
+  ( LaunchProfileValidationStatusCode
+      ( ..,
+        LaunchProfileValidationStatusCode_VALIDATION_FAILED_INTERNAL_SERVER_ERROR,
+        LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_ACTIVE_DIRECTORY,
+        LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SECURITY_GROUP_ASSOCIATION,
+        LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SUBNET_ROUTE_TABLE_ASSOCIATION,
+        LaunchProfileValidationStatusCode_VALIDATION_FAILED_SUBNET_NOT_FOUND,
+        LaunchProfileValidationStatusCode_VALIDATION_FAILED_UNAUTHORIZED,
+        LaunchProfileValidationStatusCode_VALIDATION_IN_PROGRESS,
+        LaunchProfileValidationStatusCode_VALIDATION_NOT_STARTED,
+        LaunchProfileValidationStatusCode_VALIDATION_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfileValidationStatusCode = LaunchProfileValidationStatusCode'
+  { fromLaunchProfileValidationStatusCode ::
+      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 LaunchProfileValidationStatusCode_VALIDATION_FAILED_INTERNAL_SERVER_ERROR :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INTERNAL_SERVER_ERROR = LaunchProfileValidationStatusCode' "VALIDATION_FAILED_INTERNAL_SERVER_ERROR"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_ACTIVE_DIRECTORY :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_ACTIVE_DIRECTORY = LaunchProfileValidationStatusCode' "VALIDATION_FAILED_INVALID_ACTIVE_DIRECTORY"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SECURITY_GROUP_ASSOCIATION :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SECURITY_GROUP_ASSOCIATION = LaunchProfileValidationStatusCode' "VALIDATION_FAILED_INVALID_SECURITY_GROUP_ASSOCIATION"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SUBNET_ROUTE_TABLE_ASSOCIATION :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SUBNET_ROUTE_TABLE_ASSOCIATION = LaunchProfileValidationStatusCode' "VALIDATION_FAILED_INVALID_SUBNET_ROUTE_TABLE_ASSOCIATION"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_SUBNET_NOT_FOUND :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_SUBNET_NOT_FOUND = LaunchProfileValidationStatusCode' "VALIDATION_FAILED_SUBNET_NOT_FOUND"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_UNAUTHORIZED :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_FAILED_UNAUTHORIZED = LaunchProfileValidationStatusCode' "VALIDATION_FAILED_UNAUTHORIZED"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_IN_PROGRESS :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_IN_PROGRESS = LaunchProfileValidationStatusCode' "VALIDATION_IN_PROGRESS"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_NOT_STARTED :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_NOT_STARTED = LaunchProfileValidationStatusCode' "VALIDATION_NOT_STARTED"
+
+pattern LaunchProfileValidationStatusCode_VALIDATION_SUCCESS :: LaunchProfileValidationStatusCode
+pattern LaunchProfileValidationStatusCode_VALIDATION_SUCCESS = LaunchProfileValidationStatusCode' "VALIDATION_SUCCESS"
+
+{-# COMPLETE
+  LaunchProfileValidationStatusCode_VALIDATION_FAILED_INTERNAL_SERVER_ERROR,
+  LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_ACTIVE_DIRECTORY,
+  LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SECURITY_GROUP_ASSOCIATION,
+  LaunchProfileValidationStatusCode_VALIDATION_FAILED_INVALID_SUBNET_ROUTE_TABLE_ASSOCIATION,
+  LaunchProfileValidationStatusCode_VALIDATION_FAILED_SUBNET_NOT_FOUND,
+  LaunchProfileValidationStatusCode_VALIDATION_FAILED_UNAUTHORIZED,
+  LaunchProfileValidationStatusCode_VALIDATION_IN_PROGRESS,
+  LaunchProfileValidationStatusCode_VALIDATION_NOT_STARTED,
+  LaunchProfileValidationStatusCode_VALIDATION_SUCCESS,
+  LaunchProfileValidationStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LaunchProfileValidationType.hs b/gen/Amazonka/Nimble/Types/LaunchProfileValidationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LaunchProfileValidationType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LaunchProfileValidationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LaunchProfileValidationType
+  ( LaunchProfileValidationType
+      ( ..,
+        LaunchProfileValidationType_VALIDATE_ACTIVE_DIRECTORY_STUDIO_COMPONENT,
+        LaunchProfileValidationType_VALIDATE_NETWORK_ACL_ASSOCIATION,
+        LaunchProfileValidationType_VALIDATE_SECURITY_GROUP_ASSOCIATION,
+        LaunchProfileValidationType_VALIDATE_SUBNET_ASSOCIATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchProfileValidationType = LaunchProfileValidationType'
+  { fromLaunchProfileValidationType ::
+      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 LaunchProfileValidationType_VALIDATE_ACTIVE_DIRECTORY_STUDIO_COMPONENT :: LaunchProfileValidationType
+pattern LaunchProfileValidationType_VALIDATE_ACTIVE_DIRECTORY_STUDIO_COMPONENT = LaunchProfileValidationType' "VALIDATE_ACTIVE_DIRECTORY_STUDIO_COMPONENT"
+
+pattern LaunchProfileValidationType_VALIDATE_NETWORK_ACL_ASSOCIATION :: LaunchProfileValidationType
+pattern LaunchProfileValidationType_VALIDATE_NETWORK_ACL_ASSOCIATION = LaunchProfileValidationType' "VALIDATE_NETWORK_ACL_ASSOCIATION"
+
+pattern LaunchProfileValidationType_VALIDATE_SECURITY_GROUP_ASSOCIATION :: LaunchProfileValidationType
+pattern LaunchProfileValidationType_VALIDATE_SECURITY_GROUP_ASSOCIATION = LaunchProfileValidationType' "VALIDATE_SECURITY_GROUP_ASSOCIATION"
+
+pattern LaunchProfileValidationType_VALIDATE_SUBNET_ASSOCIATION :: LaunchProfileValidationType
+pattern LaunchProfileValidationType_VALIDATE_SUBNET_ASSOCIATION = LaunchProfileValidationType' "VALIDATE_SUBNET_ASSOCIATION"
+
+{-# COMPLETE
+  LaunchProfileValidationType_VALIDATE_ACTIVE_DIRECTORY_STUDIO_COMPONENT,
+  LaunchProfileValidationType_VALIDATE_NETWORK_ACL_ASSOCIATION,
+  LaunchProfileValidationType_VALIDATE_SECURITY_GROUP_ASSOCIATION,
+  LaunchProfileValidationType_VALIDATE_SUBNET_ASSOCIATION,
+  LaunchProfileValidationType'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/LicenseServiceConfiguration.hs b/gen/Amazonka/Nimble/Types/LicenseServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/LicenseServiceConfiguration.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.LicenseServiceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.LicenseServiceConfiguration 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 a license service that is associated with a studio
+-- resource.
+--
+-- /See:/ 'newLicenseServiceConfiguration' smart constructor.
+data LicenseServiceConfiguration = LicenseServiceConfiguration'
+  { -- | The endpoint of the license service that is accessed by the studio
+    -- component resource.
+    endpoint :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LicenseServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpoint', 'licenseServiceConfiguration_endpoint' - The endpoint of the license service that is accessed by the studio
+-- component resource.
+newLicenseServiceConfiguration ::
+  LicenseServiceConfiguration
+newLicenseServiceConfiguration =
+  LicenseServiceConfiguration'
+    { endpoint =
+        Prelude.Nothing
+    }
+
+-- | The endpoint of the license service that is accessed by the studio
+-- component resource.
+licenseServiceConfiguration_endpoint :: Lens.Lens' LicenseServiceConfiguration (Prelude.Maybe Prelude.Text)
+licenseServiceConfiguration_endpoint = Lens.lens (\LicenseServiceConfiguration' {endpoint} -> endpoint) (\s@LicenseServiceConfiguration' {} a -> s {endpoint = a} :: LicenseServiceConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON LicenseServiceConfiguration where
+  parseJSON =
+    Data.withObject
+      "LicenseServiceConfiguration"
+      ( \x ->
+          LicenseServiceConfiguration'
+            Prelude.<$> (x Data..:? "endpoint")
+      )
+
+instance Prelude.Hashable LicenseServiceConfiguration where
+  hashWithSalt _salt LicenseServiceConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` endpoint
+
+instance Prelude.NFData LicenseServiceConfiguration where
+  rnf LicenseServiceConfiguration' {..} =
+    Prelude.rnf endpoint
+
+instance Data.ToJSON LicenseServiceConfiguration where
+  toJSON LicenseServiceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("endpoint" Data..=) Prelude.<$> endpoint]
+      )
diff --git a/gen/Amazonka/Nimble/Types/NewLaunchProfileMember.hs b/gen/Amazonka/Nimble/Types/NewLaunchProfileMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/NewLaunchProfileMember.hs
@@ -0,0 +1,88 @@
+{-# 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.Nimble.Types.NewLaunchProfileMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.NewLaunchProfileMember where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.LaunchProfilePersona
+import qualified Amazonka.Prelude as Prelude
+
+-- | A new member that is added to a launch profile.
+--
+-- /See:/ 'newNewLaunchProfileMember' smart constructor.
+data NewLaunchProfileMember = NewLaunchProfileMember'
+  { -- | The persona.
+    persona :: LaunchProfilePersona,
+    -- | The principal ID.
+    principalId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NewLaunchProfileMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'persona', 'newLaunchProfileMember_persona' - The persona.
+--
+-- 'principalId', 'newLaunchProfileMember_principalId' - The principal ID.
+newNewLaunchProfileMember ::
+  -- | 'persona'
+  LaunchProfilePersona ->
+  -- | 'principalId'
+  Prelude.Text ->
+  NewLaunchProfileMember
+newNewLaunchProfileMember pPersona_ pPrincipalId_ =
+  NewLaunchProfileMember'
+    { persona = pPersona_,
+      principalId = pPrincipalId_
+    }
+
+-- | The persona.
+newLaunchProfileMember_persona :: Lens.Lens' NewLaunchProfileMember LaunchProfilePersona
+newLaunchProfileMember_persona = Lens.lens (\NewLaunchProfileMember' {persona} -> persona) (\s@NewLaunchProfileMember' {} a -> s {persona = a} :: NewLaunchProfileMember)
+
+-- | The principal ID.
+newLaunchProfileMember_principalId :: Lens.Lens' NewLaunchProfileMember Prelude.Text
+newLaunchProfileMember_principalId = Lens.lens (\NewLaunchProfileMember' {principalId} -> principalId) (\s@NewLaunchProfileMember' {} a -> s {principalId = a} :: NewLaunchProfileMember)
+
+instance Prelude.Hashable NewLaunchProfileMember where
+  hashWithSalt _salt NewLaunchProfileMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` persona
+      `Prelude.hashWithSalt` principalId
+
+instance Prelude.NFData NewLaunchProfileMember where
+  rnf NewLaunchProfileMember' {..} =
+    Prelude.rnf persona
+      `Prelude.seq` Prelude.rnf principalId
+
+instance Data.ToJSON NewLaunchProfileMember where
+  toJSON NewLaunchProfileMember' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("persona" Data..= persona),
+            Prelude.Just ("principalId" Data..= principalId)
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/NewStudioMember.hs b/gen/Amazonka/Nimble/Types/NewStudioMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/NewStudioMember.hs
@@ -0,0 +1,88 @@
+{-# 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.Nimble.Types.NewStudioMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.NewStudioMember where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StudioPersona
+import qualified Amazonka.Prelude as Prelude
+
+-- | A new studio user\'s membership.
+--
+-- /See:/ 'newNewStudioMember' smart constructor.
+data NewStudioMember = NewStudioMember'
+  { -- | The persona.
+    persona :: StudioPersona,
+    -- | The principal ID.
+    principalId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NewStudioMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'persona', 'newStudioMember_persona' - The persona.
+--
+-- 'principalId', 'newStudioMember_principalId' - The principal ID.
+newNewStudioMember ::
+  -- | 'persona'
+  StudioPersona ->
+  -- | 'principalId'
+  Prelude.Text ->
+  NewStudioMember
+newNewStudioMember pPersona_ pPrincipalId_ =
+  NewStudioMember'
+    { persona = pPersona_,
+      principalId = pPrincipalId_
+    }
+
+-- | The persona.
+newStudioMember_persona :: Lens.Lens' NewStudioMember StudioPersona
+newStudioMember_persona = Lens.lens (\NewStudioMember' {persona} -> persona) (\s@NewStudioMember' {} a -> s {persona = a} :: NewStudioMember)
+
+-- | The principal ID.
+newStudioMember_principalId :: Lens.Lens' NewStudioMember Prelude.Text
+newStudioMember_principalId = Lens.lens (\NewStudioMember' {principalId} -> principalId) (\s@NewStudioMember' {} a -> s {principalId = a} :: NewStudioMember)
+
+instance Prelude.Hashable NewStudioMember where
+  hashWithSalt _salt NewStudioMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` persona
+      `Prelude.hashWithSalt` principalId
+
+instance Prelude.NFData NewStudioMember where
+  rnf NewStudioMember' {..} =
+    Prelude.rnf persona
+      `Prelude.seq` Prelude.rnf principalId
+
+instance Data.ToJSON NewStudioMember where
+  toJSON NewStudioMember' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("persona" Data..= persona),
+            Prelude.Just ("principalId" Data..= principalId)
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/ScriptParameterKeyValue.hs b/gen/Amazonka/Nimble/Types/ScriptParameterKeyValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/ScriptParameterKeyValue.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.Nimble.Types.ScriptParameterKeyValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.ScriptParameterKeyValue 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 parameter for a studio component script, in the form of a key-value
+-- pair.
+--
+-- /See:/ 'newScriptParameterKeyValue' smart constructor.
+data ScriptParameterKeyValue = ScriptParameterKeyValue'
+  { -- | A script parameter key.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | A script parameter value.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScriptParameterKeyValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'scriptParameterKeyValue_key' - A script parameter key.
+--
+-- 'value', 'scriptParameterKeyValue_value' - A script parameter value.
+newScriptParameterKeyValue ::
+  ScriptParameterKeyValue
+newScriptParameterKeyValue =
+  ScriptParameterKeyValue'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | A script parameter key.
+scriptParameterKeyValue_key :: Lens.Lens' ScriptParameterKeyValue (Prelude.Maybe Prelude.Text)
+scriptParameterKeyValue_key = Lens.lens (\ScriptParameterKeyValue' {key} -> key) (\s@ScriptParameterKeyValue' {} a -> s {key = a} :: ScriptParameterKeyValue)
+
+-- | A script parameter value.
+scriptParameterKeyValue_value :: Lens.Lens' ScriptParameterKeyValue (Prelude.Maybe Prelude.Text)
+scriptParameterKeyValue_value = Lens.lens (\ScriptParameterKeyValue' {value} -> value) (\s@ScriptParameterKeyValue' {} a -> s {value = a} :: ScriptParameterKeyValue)
+
+instance Data.FromJSON ScriptParameterKeyValue where
+  parseJSON =
+    Data.withObject
+      "ScriptParameterKeyValue"
+      ( \x ->
+          ScriptParameterKeyValue'
+            Prelude.<$> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable ScriptParameterKeyValue where
+  hashWithSalt _salt ScriptParameterKeyValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ScriptParameterKeyValue where
+  rnf ScriptParameterKeyValue' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ScriptParameterKeyValue where
+  toJSON ScriptParameterKeyValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/SessionBackupMode.hs b/gen/Amazonka/Nimble/Types/SessionBackupMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/SessionBackupMode.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.Nimble.Types.SessionBackupMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.SessionBackupMode
+  ( SessionBackupMode
+      ( ..,
+        SessionBackupMode_AUTOMATIC,
+        SessionBackupMode_DEACTIVATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SessionBackupMode = SessionBackupMode'
+  { fromSessionBackupMode ::
+      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 SessionBackupMode_AUTOMATIC :: SessionBackupMode
+pattern SessionBackupMode_AUTOMATIC = SessionBackupMode' "AUTOMATIC"
+
+pattern SessionBackupMode_DEACTIVATED :: SessionBackupMode
+pattern SessionBackupMode_DEACTIVATED = SessionBackupMode' "DEACTIVATED"
+
+{-# COMPLETE
+  SessionBackupMode_AUTOMATIC,
+  SessionBackupMode_DEACTIVATED,
+  SessionBackupMode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/SessionPersistenceMode.hs b/gen/Amazonka/Nimble/Types/SessionPersistenceMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/SessionPersistenceMode.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.Nimble.Types.SessionPersistenceMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.SessionPersistenceMode
+  ( SessionPersistenceMode
+      ( ..,
+        SessionPersistenceMode_ACTIVATED,
+        SessionPersistenceMode_DEACTIVATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SessionPersistenceMode = SessionPersistenceMode'
+  { fromSessionPersistenceMode ::
+      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 SessionPersistenceMode_ACTIVATED :: SessionPersistenceMode
+pattern SessionPersistenceMode_ACTIVATED = SessionPersistenceMode' "ACTIVATED"
+
+pattern SessionPersistenceMode_DEACTIVATED :: SessionPersistenceMode
+pattern SessionPersistenceMode_DEACTIVATED = SessionPersistenceMode' "DEACTIVATED"
+
+{-# COMPLETE
+  SessionPersistenceMode_ACTIVATED,
+  SessionPersistenceMode_DEACTIVATED,
+  SessionPersistenceMode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/SharedFileSystemConfiguration.hs b/gen/Amazonka/Nimble/Types/SharedFileSystemConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/SharedFileSystemConfiguration.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.SharedFileSystemConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.SharedFileSystemConfiguration 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 a shared file storage system that is associated
+-- with a studio resource.
+--
+-- /See:/ 'newSharedFileSystemConfiguration' smart constructor.
+data SharedFileSystemConfiguration = SharedFileSystemConfiguration'
+  { -- | The endpoint of the shared file system that is accessed by the studio
+    -- component resource.
+    endpoint :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier for a file system.
+    fileSystemId :: Prelude.Maybe Prelude.Text,
+    -- | The mount location for a shared file system on a Linux virtual
+    -- workstation.
+    linuxMountPoint :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of the file share.
+    shareName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The mount location for a shared file system on a Windows virtual
+    -- workstation.
+    windowsMountDrive :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SharedFileSystemConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpoint', 'sharedFileSystemConfiguration_endpoint' - The endpoint of the shared file system that is accessed by the studio
+-- component resource.
+--
+-- 'fileSystemId', 'sharedFileSystemConfiguration_fileSystemId' - The unique identifier for a file system.
+--
+-- 'linuxMountPoint', 'sharedFileSystemConfiguration_linuxMountPoint' - The mount location for a shared file system on a Linux virtual
+-- workstation.
+--
+-- 'shareName', 'sharedFileSystemConfiguration_shareName' - The name of the file share.
+--
+-- 'windowsMountDrive', 'sharedFileSystemConfiguration_windowsMountDrive' - The mount location for a shared file system on a Windows virtual
+-- workstation.
+newSharedFileSystemConfiguration ::
+  SharedFileSystemConfiguration
+newSharedFileSystemConfiguration =
+  SharedFileSystemConfiguration'
+    { endpoint =
+        Prelude.Nothing,
+      fileSystemId = Prelude.Nothing,
+      linuxMountPoint = Prelude.Nothing,
+      shareName = Prelude.Nothing,
+      windowsMountDrive = Prelude.Nothing
+    }
+
+-- | The endpoint of the shared file system that is accessed by the studio
+-- component resource.
+sharedFileSystemConfiguration_endpoint :: Lens.Lens' SharedFileSystemConfiguration (Prelude.Maybe Prelude.Text)
+sharedFileSystemConfiguration_endpoint = Lens.lens (\SharedFileSystemConfiguration' {endpoint} -> endpoint) (\s@SharedFileSystemConfiguration' {} a -> s {endpoint = a} :: SharedFileSystemConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier for a file system.
+sharedFileSystemConfiguration_fileSystemId :: Lens.Lens' SharedFileSystemConfiguration (Prelude.Maybe Prelude.Text)
+sharedFileSystemConfiguration_fileSystemId = Lens.lens (\SharedFileSystemConfiguration' {fileSystemId} -> fileSystemId) (\s@SharedFileSystemConfiguration' {} a -> s {fileSystemId = a} :: SharedFileSystemConfiguration)
+
+-- | The mount location for a shared file system on a Linux virtual
+-- workstation.
+sharedFileSystemConfiguration_linuxMountPoint :: Lens.Lens' SharedFileSystemConfiguration (Prelude.Maybe Prelude.Text)
+sharedFileSystemConfiguration_linuxMountPoint = Lens.lens (\SharedFileSystemConfiguration' {linuxMountPoint} -> linuxMountPoint) (\s@SharedFileSystemConfiguration' {} a -> s {linuxMountPoint = a} :: SharedFileSystemConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of the file share.
+sharedFileSystemConfiguration_shareName :: Lens.Lens' SharedFileSystemConfiguration (Prelude.Maybe Prelude.Text)
+sharedFileSystemConfiguration_shareName = Lens.lens (\SharedFileSystemConfiguration' {shareName} -> shareName) (\s@SharedFileSystemConfiguration' {} a -> s {shareName = a} :: SharedFileSystemConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The mount location for a shared file system on a Windows virtual
+-- workstation.
+sharedFileSystemConfiguration_windowsMountDrive :: Lens.Lens' SharedFileSystemConfiguration (Prelude.Maybe Prelude.Text)
+sharedFileSystemConfiguration_windowsMountDrive = Lens.lens (\SharedFileSystemConfiguration' {windowsMountDrive} -> windowsMountDrive) (\s@SharedFileSystemConfiguration' {} a -> s {windowsMountDrive = a} :: SharedFileSystemConfiguration)
+
+instance Data.FromJSON SharedFileSystemConfiguration where
+  parseJSON =
+    Data.withObject
+      "SharedFileSystemConfiguration"
+      ( \x ->
+          SharedFileSystemConfiguration'
+            Prelude.<$> (x Data..:? "endpoint")
+            Prelude.<*> (x Data..:? "fileSystemId")
+            Prelude.<*> (x Data..:? "linuxMountPoint")
+            Prelude.<*> (x Data..:? "shareName")
+            Prelude.<*> (x Data..:? "windowsMountDrive")
+      )
+
+instance
+  Prelude.Hashable
+    SharedFileSystemConfiguration
+  where
+  hashWithSalt _salt SharedFileSystemConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpoint
+      `Prelude.hashWithSalt` fileSystemId
+      `Prelude.hashWithSalt` linuxMountPoint
+      `Prelude.hashWithSalt` shareName
+      `Prelude.hashWithSalt` windowsMountDrive
+
+instance Prelude.NFData SharedFileSystemConfiguration where
+  rnf SharedFileSystemConfiguration' {..} =
+    Prelude.rnf endpoint
+      `Prelude.seq` Prelude.rnf fileSystemId
+      `Prelude.seq` Prelude.rnf linuxMountPoint
+      `Prelude.seq` Prelude.rnf shareName
+      `Prelude.seq` Prelude.rnf windowsMountDrive
+
+instance Data.ToJSON SharedFileSystemConfiguration where
+  toJSON SharedFileSystemConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("endpoint" Data..=) Prelude.<$> endpoint,
+            ("fileSystemId" Data..=) Prelude.<$> fileSystemId,
+            ("linuxMountPoint" Data..=)
+              Prelude.<$> linuxMountPoint,
+            ("shareName" Data..=) Prelude.<$> shareName,
+            ("windowsMountDrive" Data..=)
+              Prelude.<$> windowsMountDrive
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StreamConfiguration.hs b/gen/Amazonka/Nimble/Types/StreamConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamConfiguration.hs
@@ -0,0 +1,325 @@
+{-# 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.Nimble.Types.StreamConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.AutomaticTerminationMode
+import Amazonka.Nimble.Types.SessionPersistenceMode
+import Amazonka.Nimble.Types.StreamConfigurationSessionBackup
+import Amazonka.Nimble.Types.StreamConfigurationSessionStorage
+import Amazonka.Nimble.Types.StreamingClipboardMode
+import Amazonka.Nimble.Types.StreamingInstanceType
+import Amazonka.Nimble.Types.VolumeConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | A configuration for a streaming session.
+--
+-- /See:/ 'newStreamConfiguration' smart constructor.
+data StreamConfiguration = StreamConfiguration'
+  { -- | Indicates if a streaming session created from this launch profile should
+    -- be terminated automatically or retained without termination after being
+    -- in a @STOPPED@ state.
+    --
+    -- -   When @ACTIVATED@, the streaming session is scheduled for termination
+    --     after being in the @STOPPED@ state for the time specified in
+    --     @maxStoppedSessionLengthInMinutes@.
+    --
+    -- -   When @DEACTIVATED@, the streaming session can remain in the
+    --     @STOPPED@ state indefinitely.
+    --
+    -- This parameter is only allowed when @sessionPersistenceMode@ is
+    -- @ACTIVATED@. When allowed, the default value for this parameter is
+    -- @DEACTIVATED@.
+    automaticTerminationMode :: Prelude.Maybe AutomaticTerminationMode,
+    -- | The length of time, in minutes, that a streaming session can be active
+    -- before it is stopped or terminated. After this point, Nimble Studio
+    -- automatically terminates or stops the session. The default length of
+    -- time is 690 minutes, and the maximum length of time is 30 days.
+    maxSessionLengthInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | Integer that determines if you can start and stop your sessions and how
+    -- long a session can stay in the @STOPPED@ state. The default value is 0.
+    -- The maximum value is 5760.
+    --
+    -- This field is allowed only when @sessionPersistenceMode@ is @ACTIVATED@
+    -- and @automaticTerminationMode@ is @ACTIVATED@.
+    --
+    -- If the value is set to 0, your sessions can’t be @STOPPED@. If you then
+    -- call @StopStreamingSession@, the session fails. If the time that a
+    -- session stays in the @READY@ state exceeds the
+    -- @maxSessionLengthInMinutes@ value, the session will automatically be
+    -- terminated (instead of @STOPPED@).
+    --
+    -- If the value is set to a positive number, the session can be stopped.
+    -- You can call @StopStreamingSession@ to stop sessions in the @READY@
+    -- state. If the time that a session stays in the @READY@ state exceeds the
+    -- @maxSessionLengthInMinutes@ value, the session will automatically be
+    -- stopped (instead of terminated).
+    maxStoppedSessionLengthInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | Information about the streaming session backup.
+    sessionBackup :: Prelude.Maybe StreamConfigurationSessionBackup,
+    -- | Determine if a streaming session created from this launch profile can
+    -- configure persistent storage. This means that @volumeConfiguration@ and
+    -- @automaticTerminationMode@ are configured.
+    sessionPersistenceMode :: Prelude.Maybe SessionPersistenceMode,
+    -- | The upload storage for a streaming session.
+    sessionStorage :: Prelude.Maybe StreamConfigurationSessionStorage,
+    -- | Custom volume configuration for the root volumes that are attached to
+    -- streaming sessions.
+    --
+    -- This parameter is only allowed when @sessionPersistenceMode@ is
+    -- @ACTIVATED@.
+    volumeConfiguration :: Prelude.Maybe VolumeConfiguration,
+    -- | Allows or deactivates the use of the system clipboard to copy and paste
+    -- between the streaming session and streaming client.
+    clipboardMode :: StreamingClipboardMode,
+    -- | The EC2 instance types that users can select from when launching a
+    -- streaming session with this launch profile.
+    ec2InstanceTypes :: Prelude.NonEmpty StreamingInstanceType,
+    -- | The streaming images that users can select from when launching a
+    -- streaming session with this launch profile.
+    streamingImageIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'automaticTerminationMode', 'streamConfiguration_automaticTerminationMode' - Indicates if a streaming session created from this launch profile should
+-- be terminated automatically or retained without termination after being
+-- in a @STOPPED@ state.
+--
+-- -   When @ACTIVATED@, the streaming session is scheduled for termination
+--     after being in the @STOPPED@ state for the time specified in
+--     @maxStoppedSessionLengthInMinutes@.
+--
+-- -   When @DEACTIVATED@, the streaming session can remain in the
+--     @STOPPED@ state indefinitely.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@. When allowed, the default value for this parameter is
+-- @DEACTIVATED@.
+--
+-- 'maxSessionLengthInMinutes', 'streamConfiguration_maxSessionLengthInMinutes' - The length of time, in minutes, that a streaming session can be active
+-- before it is stopped or terminated. After this point, Nimble Studio
+-- automatically terminates or stops the session. The default length of
+-- time is 690 minutes, and the maximum length of time is 30 days.
+--
+-- 'maxStoppedSessionLengthInMinutes', 'streamConfiguration_maxStoppedSessionLengthInMinutes' - Integer that determines if you can start and stop your sessions and how
+-- long a session can stay in the @STOPPED@ state. The default value is 0.
+-- The maximum value is 5760.
+--
+-- This field is allowed only when @sessionPersistenceMode@ is @ACTIVATED@
+-- and @automaticTerminationMode@ is @ACTIVATED@.
+--
+-- If the value is set to 0, your sessions can’t be @STOPPED@. If you then
+-- call @StopStreamingSession@, the session fails. If the time that a
+-- session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- terminated (instead of @STOPPED@).
+--
+-- If the value is set to a positive number, the session can be stopped.
+-- You can call @StopStreamingSession@ to stop sessions in the @READY@
+-- state. If the time that a session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- stopped (instead of terminated).
+--
+-- 'sessionBackup', 'streamConfiguration_sessionBackup' - Information about the streaming session backup.
+--
+-- 'sessionPersistenceMode', 'streamConfiguration_sessionPersistenceMode' - Determine if a streaming session created from this launch profile can
+-- configure persistent storage. This means that @volumeConfiguration@ and
+-- @automaticTerminationMode@ are configured.
+--
+-- 'sessionStorage', 'streamConfiguration_sessionStorage' - The upload storage for a streaming session.
+--
+-- 'volumeConfiguration', 'streamConfiguration_volumeConfiguration' - Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+--
+-- 'clipboardMode', 'streamConfiguration_clipboardMode' - Allows or deactivates the use of the system clipboard to copy and paste
+-- between the streaming session and streaming client.
+--
+-- 'ec2InstanceTypes', 'streamConfiguration_ec2InstanceTypes' - The EC2 instance types that users can select from when launching a
+-- streaming session with this launch profile.
+--
+-- 'streamingImageIds', 'streamConfiguration_streamingImageIds' - The streaming images that users can select from when launching a
+-- streaming session with this launch profile.
+newStreamConfiguration ::
+  -- | 'clipboardMode'
+  StreamingClipboardMode ->
+  -- | 'ec2InstanceTypes'
+  Prelude.NonEmpty StreamingInstanceType ->
+  -- | 'streamingImageIds'
+  Prelude.NonEmpty Prelude.Text ->
+  StreamConfiguration
+newStreamConfiguration
+  pClipboardMode_
+  pEc2InstanceTypes_
+  pStreamingImageIds_ =
+    StreamConfiguration'
+      { automaticTerminationMode =
+          Prelude.Nothing,
+        maxSessionLengthInMinutes = Prelude.Nothing,
+        maxStoppedSessionLengthInMinutes = Prelude.Nothing,
+        sessionBackup = Prelude.Nothing,
+        sessionPersistenceMode = Prelude.Nothing,
+        sessionStorage = Prelude.Nothing,
+        volumeConfiguration = Prelude.Nothing,
+        clipboardMode = pClipboardMode_,
+        ec2InstanceTypes =
+          Lens.coerced Lens.# pEc2InstanceTypes_,
+        streamingImageIds =
+          Lens.coerced Lens.# pStreamingImageIds_
+      }
+
+-- | Indicates if a streaming session created from this launch profile should
+-- be terminated automatically or retained without termination after being
+-- in a @STOPPED@ state.
+--
+-- -   When @ACTIVATED@, the streaming session is scheduled for termination
+--     after being in the @STOPPED@ state for the time specified in
+--     @maxStoppedSessionLengthInMinutes@.
+--
+-- -   When @DEACTIVATED@, the streaming session can remain in the
+--     @STOPPED@ state indefinitely.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@. When allowed, the default value for this parameter is
+-- @DEACTIVATED@.
+streamConfiguration_automaticTerminationMode :: Lens.Lens' StreamConfiguration (Prelude.Maybe AutomaticTerminationMode)
+streamConfiguration_automaticTerminationMode = Lens.lens (\StreamConfiguration' {automaticTerminationMode} -> automaticTerminationMode) (\s@StreamConfiguration' {} a -> s {automaticTerminationMode = a} :: StreamConfiguration)
+
+-- | The length of time, in minutes, that a streaming session can be active
+-- before it is stopped or terminated. After this point, Nimble Studio
+-- automatically terminates or stops the session. The default length of
+-- time is 690 minutes, and the maximum length of time is 30 days.
+streamConfiguration_maxSessionLengthInMinutes :: Lens.Lens' StreamConfiguration (Prelude.Maybe Prelude.Natural)
+streamConfiguration_maxSessionLengthInMinutes = Lens.lens (\StreamConfiguration' {maxSessionLengthInMinutes} -> maxSessionLengthInMinutes) (\s@StreamConfiguration' {} a -> s {maxSessionLengthInMinutes = a} :: StreamConfiguration)
+
+-- | Integer that determines if you can start and stop your sessions and how
+-- long a session can stay in the @STOPPED@ state. The default value is 0.
+-- The maximum value is 5760.
+--
+-- This field is allowed only when @sessionPersistenceMode@ is @ACTIVATED@
+-- and @automaticTerminationMode@ is @ACTIVATED@.
+--
+-- If the value is set to 0, your sessions can’t be @STOPPED@. If you then
+-- call @StopStreamingSession@, the session fails. If the time that a
+-- session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- terminated (instead of @STOPPED@).
+--
+-- If the value is set to a positive number, the session can be stopped.
+-- You can call @StopStreamingSession@ to stop sessions in the @READY@
+-- state. If the time that a session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- stopped (instead of terminated).
+streamConfiguration_maxStoppedSessionLengthInMinutes :: Lens.Lens' StreamConfiguration (Prelude.Maybe Prelude.Natural)
+streamConfiguration_maxStoppedSessionLengthInMinutes = Lens.lens (\StreamConfiguration' {maxStoppedSessionLengthInMinutes} -> maxStoppedSessionLengthInMinutes) (\s@StreamConfiguration' {} a -> s {maxStoppedSessionLengthInMinutes = a} :: StreamConfiguration)
+
+-- | Information about the streaming session backup.
+streamConfiguration_sessionBackup :: Lens.Lens' StreamConfiguration (Prelude.Maybe StreamConfigurationSessionBackup)
+streamConfiguration_sessionBackup = Lens.lens (\StreamConfiguration' {sessionBackup} -> sessionBackup) (\s@StreamConfiguration' {} a -> s {sessionBackup = a} :: StreamConfiguration)
+
+-- | Determine if a streaming session created from this launch profile can
+-- configure persistent storage. This means that @volumeConfiguration@ and
+-- @automaticTerminationMode@ are configured.
+streamConfiguration_sessionPersistenceMode :: Lens.Lens' StreamConfiguration (Prelude.Maybe SessionPersistenceMode)
+streamConfiguration_sessionPersistenceMode = Lens.lens (\StreamConfiguration' {sessionPersistenceMode} -> sessionPersistenceMode) (\s@StreamConfiguration' {} a -> s {sessionPersistenceMode = a} :: StreamConfiguration)
+
+-- | The upload storage for a streaming session.
+streamConfiguration_sessionStorage :: Lens.Lens' StreamConfiguration (Prelude.Maybe StreamConfigurationSessionStorage)
+streamConfiguration_sessionStorage = Lens.lens (\StreamConfiguration' {sessionStorage} -> sessionStorage) (\s@StreamConfiguration' {} a -> s {sessionStorage = a} :: StreamConfiguration)
+
+-- | Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+streamConfiguration_volumeConfiguration :: Lens.Lens' StreamConfiguration (Prelude.Maybe VolumeConfiguration)
+streamConfiguration_volumeConfiguration = Lens.lens (\StreamConfiguration' {volumeConfiguration} -> volumeConfiguration) (\s@StreamConfiguration' {} a -> s {volumeConfiguration = a} :: StreamConfiguration)
+
+-- | Allows or deactivates the use of the system clipboard to copy and paste
+-- between the streaming session and streaming client.
+streamConfiguration_clipboardMode :: Lens.Lens' StreamConfiguration StreamingClipboardMode
+streamConfiguration_clipboardMode = Lens.lens (\StreamConfiguration' {clipboardMode} -> clipboardMode) (\s@StreamConfiguration' {} a -> s {clipboardMode = a} :: StreamConfiguration)
+
+-- | The EC2 instance types that users can select from when launching a
+-- streaming session with this launch profile.
+streamConfiguration_ec2InstanceTypes :: Lens.Lens' StreamConfiguration (Prelude.NonEmpty StreamingInstanceType)
+streamConfiguration_ec2InstanceTypes = Lens.lens (\StreamConfiguration' {ec2InstanceTypes} -> ec2InstanceTypes) (\s@StreamConfiguration' {} a -> s {ec2InstanceTypes = a} :: StreamConfiguration) Prelude.. Lens.coerced
+
+-- | The streaming images that users can select from when launching a
+-- streaming session with this launch profile.
+streamConfiguration_streamingImageIds :: Lens.Lens' StreamConfiguration (Prelude.NonEmpty Prelude.Text)
+streamConfiguration_streamingImageIds = Lens.lens (\StreamConfiguration' {streamingImageIds} -> streamingImageIds) (\s@StreamConfiguration' {} a -> s {streamingImageIds = a} :: StreamConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON StreamConfiguration where
+  parseJSON =
+    Data.withObject
+      "StreamConfiguration"
+      ( \x ->
+          StreamConfiguration'
+            Prelude.<$> (x Data..:? "automaticTerminationMode")
+            Prelude.<*> (x Data..:? "maxSessionLengthInMinutes")
+            Prelude.<*> (x Data..:? "maxStoppedSessionLengthInMinutes")
+            Prelude.<*> (x Data..:? "sessionBackup")
+            Prelude.<*> (x Data..:? "sessionPersistenceMode")
+            Prelude.<*> (x Data..:? "sessionStorage")
+            Prelude.<*> (x Data..:? "volumeConfiguration")
+            Prelude.<*> (x Data..: "clipboardMode")
+            Prelude.<*> (x Data..: "ec2InstanceTypes")
+            Prelude.<*> (x Data..: "streamingImageIds")
+      )
+
+instance Prelude.Hashable StreamConfiguration where
+  hashWithSalt _salt StreamConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` automaticTerminationMode
+      `Prelude.hashWithSalt` maxSessionLengthInMinutes
+      `Prelude.hashWithSalt` maxStoppedSessionLengthInMinutes
+      `Prelude.hashWithSalt` sessionBackup
+      `Prelude.hashWithSalt` sessionPersistenceMode
+      `Prelude.hashWithSalt` sessionStorage
+      `Prelude.hashWithSalt` volumeConfiguration
+      `Prelude.hashWithSalt` clipboardMode
+      `Prelude.hashWithSalt` ec2InstanceTypes
+      `Prelude.hashWithSalt` streamingImageIds
+
+instance Prelude.NFData StreamConfiguration where
+  rnf StreamConfiguration' {..} =
+    Prelude.rnf automaticTerminationMode
+      `Prelude.seq` Prelude.rnf maxSessionLengthInMinutes
+      `Prelude.seq` Prelude.rnf maxStoppedSessionLengthInMinutes
+      `Prelude.seq` Prelude.rnf sessionBackup
+      `Prelude.seq` Prelude.rnf sessionPersistenceMode
+      `Prelude.seq` Prelude.rnf sessionStorage
+      `Prelude.seq` Prelude.rnf volumeConfiguration
+      `Prelude.seq` Prelude.rnf clipboardMode
+      `Prelude.seq` Prelude.rnf ec2InstanceTypes
+      `Prelude.seq` Prelude.rnf streamingImageIds
diff --git a/gen/Amazonka/Nimble/Types/StreamConfigurationCreate.hs b/gen/Amazonka/Nimble/Types/StreamConfigurationCreate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamConfigurationCreate.hs
@@ -0,0 +1,340 @@
+{-# 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.Nimble.Types.StreamConfigurationCreate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamConfigurationCreate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.AutomaticTerminationMode
+import Amazonka.Nimble.Types.SessionPersistenceMode
+import Amazonka.Nimble.Types.StreamConfigurationSessionBackup
+import Amazonka.Nimble.Types.StreamConfigurationSessionStorage
+import Amazonka.Nimble.Types.StreamingClipboardMode
+import Amazonka.Nimble.Types.StreamingInstanceType
+import Amazonka.Nimble.Types.VolumeConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration for streaming workstations created using this launch
+-- profile.
+--
+-- /See:/ 'newStreamConfigurationCreate' smart constructor.
+data StreamConfigurationCreate = StreamConfigurationCreate'
+  { -- | Indicates if a streaming session created from this launch profile should
+    -- be terminated automatically or retained without termination after being
+    -- in a @STOPPED@ state.
+    --
+    -- -   When @ACTIVATED@, the streaming session is scheduled for termination
+    --     after being in the @STOPPED@ state for the time specified in
+    --     @maxStoppedSessionLengthInMinutes@.
+    --
+    -- -   When @DEACTIVATED@, the streaming session can remain in the
+    --     @STOPPED@ state indefinitely.
+    --
+    -- This parameter is only allowed when @sessionPersistenceMode@ is
+    -- @ACTIVATED@. When allowed, the default value for this parameter is
+    -- @DEACTIVATED@.
+    automaticTerminationMode :: Prelude.Maybe AutomaticTerminationMode,
+    -- | The length of time, in minutes, that a streaming session can be active
+    -- before it is stopped or terminated. After this point, Nimble Studio
+    -- automatically terminates or stops the session. The default length of
+    -- time is 690 minutes, and the maximum length of time is 30 days.
+    maxSessionLengthInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | Integer that determines if you can start and stop your sessions and how
+    -- long a session can stay in the @STOPPED@ state. The default value is 0.
+    -- The maximum value is 5760.
+    --
+    -- This field is allowed only when @sessionPersistenceMode@ is @ACTIVATED@
+    -- and @automaticTerminationMode@ is @ACTIVATED@.
+    --
+    -- If the value is set to 0, your sessions can’t be @STOPPED@. If you then
+    -- call @StopStreamingSession@, the session fails. If the time that a
+    -- session stays in the @READY@ state exceeds the
+    -- @maxSessionLengthInMinutes@ value, the session will automatically be
+    -- terminated (instead of @STOPPED@).
+    --
+    -- If the value is set to a positive number, the session can be stopped.
+    -- You can call @StopStreamingSession@ to stop sessions in the @READY@
+    -- state. If the time that a session stays in the @READY@ state exceeds the
+    -- @maxSessionLengthInMinutes@ value, the session will automatically be
+    -- stopped (instead of terminated).
+    maxStoppedSessionLengthInMinutes :: Prelude.Maybe Prelude.Natural,
+    -- | Configures how streaming sessions are backed up when launched from this
+    -- launch profile.
+    sessionBackup :: Prelude.Maybe StreamConfigurationSessionBackup,
+    -- | Determine if a streaming session created from this launch profile can
+    -- configure persistent storage. This means that @volumeConfiguration@ and
+    -- @automaticTerminationMode@ are configured.
+    sessionPersistenceMode :: Prelude.Maybe SessionPersistenceMode,
+    -- | The upload storage for a streaming workstation that is created using
+    -- this launch profile.
+    sessionStorage :: Prelude.Maybe StreamConfigurationSessionStorage,
+    -- | Custom volume configuration for the root volumes that are attached to
+    -- streaming sessions.
+    --
+    -- This parameter is only allowed when @sessionPersistenceMode@ is
+    -- @ACTIVATED@.
+    volumeConfiguration :: Prelude.Maybe VolumeConfiguration,
+    -- | Allows or deactivates the use of the system clipboard to copy and paste
+    -- between the streaming session and streaming client.
+    clipboardMode :: StreamingClipboardMode,
+    -- | The EC2 instance types that users can select from when launching a
+    -- streaming session with this launch profile.
+    ec2InstanceTypes :: Prelude.NonEmpty StreamingInstanceType,
+    -- | The streaming images that users can select from when launching a
+    -- streaming session with this launch profile.
+    streamingImageIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamConfigurationCreate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'automaticTerminationMode', 'streamConfigurationCreate_automaticTerminationMode' - Indicates if a streaming session created from this launch profile should
+-- be terminated automatically or retained without termination after being
+-- in a @STOPPED@ state.
+--
+-- -   When @ACTIVATED@, the streaming session is scheduled for termination
+--     after being in the @STOPPED@ state for the time specified in
+--     @maxStoppedSessionLengthInMinutes@.
+--
+-- -   When @DEACTIVATED@, the streaming session can remain in the
+--     @STOPPED@ state indefinitely.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@. When allowed, the default value for this parameter is
+-- @DEACTIVATED@.
+--
+-- 'maxSessionLengthInMinutes', 'streamConfigurationCreate_maxSessionLengthInMinutes' - The length of time, in minutes, that a streaming session can be active
+-- before it is stopped or terminated. After this point, Nimble Studio
+-- automatically terminates or stops the session. The default length of
+-- time is 690 minutes, and the maximum length of time is 30 days.
+--
+-- 'maxStoppedSessionLengthInMinutes', 'streamConfigurationCreate_maxStoppedSessionLengthInMinutes' - Integer that determines if you can start and stop your sessions and how
+-- long a session can stay in the @STOPPED@ state. The default value is 0.
+-- The maximum value is 5760.
+--
+-- This field is allowed only when @sessionPersistenceMode@ is @ACTIVATED@
+-- and @automaticTerminationMode@ is @ACTIVATED@.
+--
+-- If the value is set to 0, your sessions can’t be @STOPPED@. If you then
+-- call @StopStreamingSession@, the session fails. If the time that a
+-- session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- terminated (instead of @STOPPED@).
+--
+-- If the value is set to a positive number, the session can be stopped.
+-- You can call @StopStreamingSession@ to stop sessions in the @READY@
+-- state. If the time that a session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- stopped (instead of terminated).
+--
+-- 'sessionBackup', 'streamConfigurationCreate_sessionBackup' - Configures how streaming sessions are backed up when launched from this
+-- launch profile.
+--
+-- 'sessionPersistenceMode', 'streamConfigurationCreate_sessionPersistenceMode' - Determine if a streaming session created from this launch profile can
+-- configure persistent storage. This means that @volumeConfiguration@ and
+-- @automaticTerminationMode@ are configured.
+--
+-- 'sessionStorage', 'streamConfigurationCreate_sessionStorage' - The upload storage for a streaming workstation that is created using
+-- this launch profile.
+--
+-- 'volumeConfiguration', 'streamConfigurationCreate_volumeConfiguration' - Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+--
+-- 'clipboardMode', 'streamConfigurationCreate_clipboardMode' - Allows or deactivates the use of the system clipboard to copy and paste
+-- between the streaming session and streaming client.
+--
+-- 'ec2InstanceTypes', 'streamConfigurationCreate_ec2InstanceTypes' - The EC2 instance types that users can select from when launching a
+-- streaming session with this launch profile.
+--
+-- 'streamingImageIds', 'streamConfigurationCreate_streamingImageIds' - The streaming images that users can select from when launching a
+-- streaming session with this launch profile.
+newStreamConfigurationCreate ::
+  -- | 'clipboardMode'
+  StreamingClipboardMode ->
+  -- | 'ec2InstanceTypes'
+  Prelude.NonEmpty StreamingInstanceType ->
+  -- | 'streamingImageIds'
+  Prelude.NonEmpty Prelude.Text ->
+  StreamConfigurationCreate
+newStreamConfigurationCreate
+  pClipboardMode_
+  pEc2InstanceTypes_
+  pStreamingImageIds_ =
+    StreamConfigurationCreate'
+      { automaticTerminationMode =
+          Prelude.Nothing,
+        maxSessionLengthInMinutes = Prelude.Nothing,
+        maxStoppedSessionLengthInMinutes =
+          Prelude.Nothing,
+        sessionBackup = Prelude.Nothing,
+        sessionPersistenceMode = Prelude.Nothing,
+        sessionStorage = Prelude.Nothing,
+        volumeConfiguration = Prelude.Nothing,
+        clipboardMode = pClipboardMode_,
+        ec2InstanceTypes =
+          Lens.coerced Lens.# pEc2InstanceTypes_,
+        streamingImageIds =
+          Lens.coerced Lens.# pStreamingImageIds_
+      }
+
+-- | Indicates if a streaming session created from this launch profile should
+-- be terminated automatically or retained without termination after being
+-- in a @STOPPED@ state.
+--
+-- -   When @ACTIVATED@, the streaming session is scheduled for termination
+--     after being in the @STOPPED@ state for the time specified in
+--     @maxStoppedSessionLengthInMinutes@.
+--
+-- -   When @DEACTIVATED@, the streaming session can remain in the
+--     @STOPPED@ state indefinitely.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@. When allowed, the default value for this parameter is
+-- @DEACTIVATED@.
+streamConfigurationCreate_automaticTerminationMode :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe AutomaticTerminationMode)
+streamConfigurationCreate_automaticTerminationMode = Lens.lens (\StreamConfigurationCreate' {automaticTerminationMode} -> automaticTerminationMode) (\s@StreamConfigurationCreate' {} a -> s {automaticTerminationMode = a} :: StreamConfigurationCreate)
+
+-- | The length of time, in minutes, that a streaming session can be active
+-- before it is stopped or terminated. After this point, Nimble Studio
+-- automatically terminates or stops the session. The default length of
+-- time is 690 minutes, and the maximum length of time is 30 days.
+streamConfigurationCreate_maxSessionLengthInMinutes :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe Prelude.Natural)
+streamConfigurationCreate_maxSessionLengthInMinutes = Lens.lens (\StreamConfigurationCreate' {maxSessionLengthInMinutes} -> maxSessionLengthInMinutes) (\s@StreamConfigurationCreate' {} a -> s {maxSessionLengthInMinutes = a} :: StreamConfigurationCreate)
+
+-- | Integer that determines if you can start and stop your sessions and how
+-- long a session can stay in the @STOPPED@ state. The default value is 0.
+-- The maximum value is 5760.
+--
+-- This field is allowed only when @sessionPersistenceMode@ is @ACTIVATED@
+-- and @automaticTerminationMode@ is @ACTIVATED@.
+--
+-- If the value is set to 0, your sessions can’t be @STOPPED@. If you then
+-- call @StopStreamingSession@, the session fails. If the time that a
+-- session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- terminated (instead of @STOPPED@).
+--
+-- If the value is set to a positive number, the session can be stopped.
+-- You can call @StopStreamingSession@ to stop sessions in the @READY@
+-- state. If the time that a session stays in the @READY@ state exceeds the
+-- @maxSessionLengthInMinutes@ value, the session will automatically be
+-- stopped (instead of terminated).
+streamConfigurationCreate_maxStoppedSessionLengthInMinutes :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe Prelude.Natural)
+streamConfigurationCreate_maxStoppedSessionLengthInMinutes = Lens.lens (\StreamConfigurationCreate' {maxStoppedSessionLengthInMinutes} -> maxStoppedSessionLengthInMinutes) (\s@StreamConfigurationCreate' {} a -> s {maxStoppedSessionLengthInMinutes = a} :: StreamConfigurationCreate)
+
+-- | Configures how streaming sessions are backed up when launched from this
+-- launch profile.
+streamConfigurationCreate_sessionBackup :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe StreamConfigurationSessionBackup)
+streamConfigurationCreate_sessionBackup = Lens.lens (\StreamConfigurationCreate' {sessionBackup} -> sessionBackup) (\s@StreamConfigurationCreate' {} a -> s {sessionBackup = a} :: StreamConfigurationCreate)
+
+-- | Determine if a streaming session created from this launch profile can
+-- configure persistent storage. This means that @volumeConfiguration@ and
+-- @automaticTerminationMode@ are configured.
+streamConfigurationCreate_sessionPersistenceMode :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe SessionPersistenceMode)
+streamConfigurationCreate_sessionPersistenceMode = Lens.lens (\StreamConfigurationCreate' {sessionPersistenceMode} -> sessionPersistenceMode) (\s@StreamConfigurationCreate' {} a -> s {sessionPersistenceMode = a} :: StreamConfigurationCreate)
+
+-- | The upload storage for a streaming workstation that is created using
+-- this launch profile.
+streamConfigurationCreate_sessionStorage :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe StreamConfigurationSessionStorage)
+streamConfigurationCreate_sessionStorage = Lens.lens (\StreamConfigurationCreate' {sessionStorage} -> sessionStorage) (\s@StreamConfigurationCreate' {} a -> s {sessionStorage = a} :: StreamConfigurationCreate)
+
+-- | Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+streamConfigurationCreate_volumeConfiguration :: Lens.Lens' StreamConfigurationCreate (Prelude.Maybe VolumeConfiguration)
+streamConfigurationCreate_volumeConfiguration = Lens.lens (\StreamConfigurationCreate' {volumeConfiguration} -> volumeConfiguration) (\s@StreamConfigurationCreate' {} a -> s {volumeConfiguration = a} :: StreamConfigurationCreate)
+
+-- | Allows or deactivates the use of the system clipboard to copy and paste
+-- between the streaming session and streaming client.
+streamConfigurationCreate_clipboardMode :: Lens.Lens' StreamConfigurationCreate StreamingClipboardMode
+streamConfigurationCreate_clipboardMode = Lens.lens (\StreamConfigurationCreate' {clipboardMode} -> clipboardMode) (\s@StreamConfigurationCreate' {} a -> s {clipboardMode = a} :: StreamConfigurationCreate)
+
+-- | The EC2 instance types that users can select from when launching a
+-- streaming session with this launch profile.
+streamConfigurationCreate_ec2InstanceTypes :: Lens.Lens' StreamConfigurationCreate (Prelude.NonEmpty StreamingInstanceType)
+streamConfigurationCreate_ec2InstanceTypes = Lens.lens (\StreamConfigurationCreate' {ec2InstanceTypes} -> ec2InstanceTypes) (\s@StreamConfigurationCreate' {} a -> s {ec2InstanceTypes = a} :: StreamConfigurationCreate) Prelude.. Lens.coerced
+
+-- | The streaming images that users can select from when launching a
+-- streaming session with this launch profile.
+streamConfigurationCreate_streamingImageIds :: Lens.Lens' StreamConfigurationCreate (Prelude.NonEmpty Prelude.Text)
+streamConfigurationCreate_streamingImageIds = Lens.lens (\StreamConfigurationCreate' {streamingImageIds} -> streamingImageIds) (\s@StreamConfigurationCreate' {} a -> s {streamingImageIds = a} :: StreamConfigurationCreate) Prelude.. Lens.coerced
+
+instance Prelude.Hashable StreamConfigurationCreate where
+  hashWithSalt _salt StreamConfigurationCreate' {..} =
+    _salt
+      `Prelude.hashWithSalt` automaticTerminationMode
+      `Prelude.hashWithSalt` maxSessionLengthInMinutes
+      `Prelude.hashWithSalt` maxStoppedSessionLengthInMinutes
+      `Prelude.hashWithSalt` sessionBackup
+      `Prelude.hashWithSalt` sessionPersistenceMode
+      `Prelude.hashWithSalt` sessionStorage
+      `Prelude.hashWithSalt` volumeConfiguration
+      `Prelude.hashWithSalt` clipboardMode
+      `Prelude.hashWithSalt` ec2InstanceTypes
+      `Prelude.hashWithSalt` streamingImageIds
+
+instance Prelude.NFData StreamConfigurationCreate where
+  rnf StreamConfigurationCreate' {..} =
+    Prelude.rnf automaticTerminationMode
+      `Prelude.seq` Prelude.rnf maxSessionLengthInMinutes
+      `Prelude.seq` Prelude.rnf maxStoppedSessionLengthInMinutes
+      `Prelude.seq` Prelude.rnf sessionBackup
+      `Prelude.seq` Prelude.rnf sessionPersistenceMode
+      `Prelude.seq` Prelude.rnf sessionStorage
+      `Prelude.seq` Prelude.rnf volumeConfiguration
+      `Prelude.seq` Prelude.rnf clipboardMode
+      `Prelude.seq` Prelude.rnf ec2InstanceTypes
+      `Prelude.seq` Prelude.rnf streamingImageIds
+
+instance Data.ToJSON StreamConfigurationCreate where
+  toJSON StreamConfigurationCreate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("automaticTerminationMode" Data..=)
+              Prelude.<$> automaticTerminationMode,
+            ("maxSessionLengthInMinutes" Data..=)
+              Prelude.<$> maxSessionLengthInMinutes,
+            ("maxStoppedSessionLengthInMinutes" Data..=)
+              Prelude.<$> maxStoppedSessionLengthInMinutes,
+            ("sessionBackup" Data..=) Prelude.<$> sessionBackup,
+            ("sessionPersistenceMode" Data..=)
+              Prelude.<$> sessionPersistenceMode,
+            ("sessionStorage" Data..=)
+              Prelude.<$> sessionStorage,
+            ("volumeConfiguration" Data..=)
+              Prelude.<$> volumeConfiguration,
+            Prelude.Just ("clipboardMode" Data..= clipboardMode),
+            Prelude.Just
+              ("ec2InstanceTypes" Data..= ec2InstanceTypes),
+            Prelude.Just
+              ("streamingImageIds" Data..= streamingImageIds)
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StreamConfigurationSessionBackup.hs b/gen/Amazonka/Nimble/Types/StreamConfigurationSessionBackup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamConfigurationSessionBackup.hs
@@ -0,0 +1,123 @@
+{-# 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.Nimble.Types.StreamConfigurationSessionBackup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamConfigurationSessionBackup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.SessionBackupMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configures how streaming sessions are backed up when launched from this
+-- launch profile.
+--
+-- /See:/ 'newStreamConfigurationSessionBackup' smart constructor.
+data StreamConfigurationSessionBackup = StreamConfigurationSessionBackup'
+  { -- | The maximum number of backups that each streaming session created from
+    -- this launch profile can have.
+    maxBackupsToRetain :: Prelude.Maybe Prelude.Natural,
+    -- | Specifies how artists sessions are backed up.
+    --
+    -- Configures backups for streaming sessions launched with this launch
+    -- profile. The default value is @DEACTIVATED@, which means that backups
+    -- are deactivated. To allow backups, set this value to @AUTOMATIC@.
+    mode :: Prelude.Maybe SessionBackupMode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamConfigurationSessionBackup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxBackupsToRetain', 'streamConfigurationSessionBackup_maxBackupsToRetain' - The maximum number of backups that each streaming session created from
+-- this launch profile can have.
+--
+-- 'mode', 'streamConfigurationSessionBackup_mode' - Specifies how artists sessions are backed up.
+--
+-- Configures backups for streaming sessions launched with this launch
+-- profile. The default value is @DEACTIVATED@, which means that backups
+-- are deactivated. To allow backups, set this value to @AUTOMATIC@.
+newStreamConfigurationSessionBackup ::
+  StreamConfigurationSessionBackup
+newStreamConfigurationSessionBackup =
+  StreamConfigurationSessionBackup'
+    { maxBackupsToRetain =
+        Prelude.Nothing,
+      mode = Prelude.Nothing
+    }
+
+-- | The maximum number of backups that each streaming session created from
+-- this launch profile can have.
+streamConfigurationSessionBackup_maxBackupsToRetain :: Lens.Lens' StreamConfigurationSessionBackup (Prelude.Maybe Prelude.Natural)
+streamConfigurationSessionBackup_maxBackupsToRetain = Lens.lens (\StreamConfigurationSessionBackup' {maxBackupsToRetain} -> maxBackupsToRetain) (\s@StreamConfigurationSessionBackup' {} a -> s {maxBackupsToRetain = a} :: StreamConfigurationSessionBackup)
+
+-- | Specifies how artists sessions are backed up.
+--
+-- Configures backups for streaming sessions launched with this launch
+-- profile. The default value is @DEACTIVATED@, which means that backups
+-- are deactivated. To allow backups, set this value to @AUTOMATIC@.
+streamConfigurationSessionBackup_mode :: Lens.Lens' StreamConfigurationSessionBackup (Prelude.Maybe SessionBackupMode)
+streamConfigurationSessionBackup_mode = Lens.lens (\StreamConfigurationSessionBackup' {mode} -> mode) (\s@StreamConfigurationSessionBackup' {} a -> s {mode = a} :: StreamConfigurationSessionBackup)
+
+instance
+  Data.FromJSON
+    StreamConfigurationSessionBackup
+  where
+  parseJSON =
+    Data.withObject
+      "StreamConfigurationSessionBackup"
+      ( \x ->
+          StreamConfigurationSessionBackup'
+            Prelude.<$> (x Data..:? "maxBackupsToRetain")
+            Prelude.<*> (x Data..:? "mode")
+      )
+
+instance
+  Prelude.Hashable
+    StreamConfigurationSessionBackup
+  where
+  hashWithSalt
+    _salt
+    StreamConfigurationSessionBackup' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxBackupsToRetain
+        `Prelude.hashWithSalt` mode
+
+instance
+  Prelude.NFData
+    StreamConfigurationSessionBackup
+  where
+  rnf StreamConfigurationSessionBackup' {..} =
+    Prelude.rnf maxBackupsToRetain
+      `Prelude.seq` Prelude.rnf mode
+
+instance Data.ToJSON StreamConfigurationSessionBackup where
+  toJSON StreamConfigurationSessionBackup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxBackupsToRetain" Data..=)
+              Prelude.<$> maxBackupsToRetain,
+            ("mode" Data..=) Prelude.<$> mode
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StreamConfigurationSessionStorage.hs b/gen/Amazonka/Nimble/Types/StreamConfigurationSessionStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamConfigurationSessionStorage.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamConfigurationSessionStorage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamConfigurationSessionStorage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StreamingSessionStorageMode
+import Amazonka.Nimble.Types.StreamingSessionStorageRoot
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration for a streaming session’s upload storage.
+--
+-- /See:/ 'newStreamConfigurationSessionStorage' smart constructor.
+data StreamConfigurationSessionStorage = StreamConfigurationSessionStorage'
+  { -- | The configuration for the upload storage root of the streaming session.
+    root :: Prelude.Maybe StreamingSessionStorageRoot,
+    -- | Allows artists to upload files to their workstations. The only valid
+    -- option is @UPLOAD@.
+    mode :: Prelude.NonEmpty StreamingSessionStorageMode
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamConfigurationSessionStorage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'root', 'streamConfigurationSessionStorage_root' - The configuration for the upload storage root of the streaming session.
+--
+-- 'mode', 'streamConfigurationSessionStorage_mode' - Allows artists to upload files to their workstations. The only valid
+-- option is @UPLOAD@.
+newStreamConfigurationSessionStorage ::
+  -- | 'mode'
+  Prelude.NonEmpty StreamingSessionStorageMode ->
+  StreamConfigurationSessionStorage
+newStreamConfigurationSessionStorage pMode_ =
+  StreamConfigurationSessionStorage'
+    { root =
+        Prelude.Nothing,
+      mode = Lens.coerced Lens.# pMode_
+    }
+
+-- | The configuration for the upload storage root of the streaming session.
+streamConfigurationSessionStorage_root :: Lens.Lens' StreamConfigurationSessionStorage (Prelude.Maybe StreamingSessionStorageRoot)
+streamConfigurationSessionStorage_root = Lens.lens (\StreamConfigurationSessionStorage' {root} -> root) (\s@StreamConfigurationSessionStorage' {} a -> s {root = a} :: StreamConfigurationSessionStorage)
+
+-- | Allows artists to upload files to their workstations. The only valid
+-- option is @UPLOAD@.
+streamConfigurationSessionStorage_mode :: Lens.Lens' StreamConfigurationSessionStorage (Prelude.NonEmpty StreamingSessionStorageMode)
+streamConfigurationSessionStorage_mode = Lens.lens (\StreamConfigurationSessionStorage' {mode} -> mode) (\s@StreamConfigurationSessionStorage' {} a -> s {mode = a} :: StreamConfigurationSessionStorage) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    StreamConfigurationSessionStorage
+  where
+  parseJSON =
+    Data.withObject
+      "StreamConfigurationSessionStorage"
+      ( \x ->
+          StreamConfigurationSessionStorage'
+            Prelude.<$> (x Data..:? "root")
+            Prelude.<*> (x Data..: "mode")
+      )
+
+instance
+  Prelude.Hashable
+    StreamConfigurationSessionStorage
+  where
+  hashWithSalt
+    _salt
+    StreamConfigurationSessionStorage' {..} =
+      _salt
+        `Prelude.hashWithSalt` root
+        `Prelude.hashWithSalt` mode
+
+instance
+  Prelude.NFData
+    StreamConfigurationSessionStorage
+  where
+  rnf StreamConfigurationSessionStorage' {..} =
+    Prelude.rnf root `Prelude.seq` Prelude.rnf mode
+
+instance
+  Data.ToJSON
+    StreamConfigurationSessionStorage
+  where
+  toJSON StreamConfigurationSessionStorage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("root" Data..=) Prelude.<$> root,
+            Prelude.Just ("mode" Data..= mode)
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StreamingClipboardMode.hs b/gen/Amazonka/Nimble/Types/StreamingClipboardMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingClipboardMode.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.Nimble.Types.StreamingClipboardMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingClipboardMode
+  ( StreamingClipboardMode
+      ( ..,
+        StreamingClipboardMode_DISABLED,
+        StreamingClipboardMode_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingClipboardMode = StreamingClipboardMode'
+  { fromStreamingClipboardMode ::
+      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 StreamingClipboardMode_DISABLED :: StreamingClipboardMode
+pattern StreamingClipboardMode_DISABLED = StreamingClipboardMode' "DISABLED"
+
+pattern StreamingClipboardMode_ENABLED :: StreamingClipboardMode
+pattern StreamingClipboardMode_ENABLED = StreamingClipboardMode' "ENABLED"
+
+{-# COMPLETE
+  StreamingClipboardMode_DISABLED,
+  StreamingClipboardMode_ENABLED,
+  StreamingClipboardMode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingImage.hs b/gen/Amazonka/Nimble/Types/StreamingImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingImage.hs
@@ -0,0 +1,245 @@
+{-# 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.Nimble.Types.StreamingImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingImage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StreamingImageEncryptionConfiguration
+import Amazonka.Nimble.Types.StreamingImageState
+import Amazonka.Nimble.Types.StreamingImageStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a streaming image resource.
+--
+-- Streaming images are used by studio users to select which operating
+-- system and software they want to use in a Nimble Studio streaming
+-- session.
+--
+-- Amazon provides a number of streaming images that include popular
+-- 3rd-party software.
+--
+-- You can create your own streaming images using an Amazon EC2 machine
+-- image that you create for this purpose. You can also include software
+-- that your users require.
+--
+-- /See:/ 'newStreamingImage' smart constructor.
+data StreamingImage = StreamingImage'
+  { -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+    -- uniquely identifies it. ARNs are unique across all Regions.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A human-readable description of the streaming image.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ID of an EC2 machine image with which to create the streaming image.
+    ec2ImageId :: Prelude.Maybe Prelude.Text,
+    -- | The encryption configuration.
+    encryptionConfiguration :: Prelude.Maybe StreamingImageEncryptionConfiguration,
+    -- | The list of EULAs that must be accepted before a Streaming Session can
+    -- be started using this streaming image.
+    eulaIds :: Prelude.Maybe [Prelude.Text],
+    -- | A friendly name for a streaming image resource.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The owner of the streaming image, either the @studioId@ that contains
+    -- the streaming image, or @amazon@ for images that are provided by Amazon
+    -- Nimble Studio.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the streaming image, either Windows or Linux.
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | The current state.
+    state :: Prelude.Maybe StreamingImageState,
+    -- | The status code.
+    statusCode :: Prelude.Maybe StreamingImageStatusCode,
+    -- | The status message for the streaming image.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the streaming image.
+    streamingImageId :: Prelude.Maybe Prelude.Text,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'streamingImage_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+--
+-- 'description', 'streamingImage_description' - A human-readable description of the streaming image.
+--
+-- 'ec2ImageId', 'streamingImage_ec2ImageId' - The ID of an EC2 machine image with which to create the streaming image.
+--
+-- 'encryptionConfiguration', 'streamingImage_encryptionConfiguration' - The encryption configuration.
+--
+-- 'eulaIds', 'streamingImage_eulaIds' - The list of EULAs that must be accepted before a Streaming Session can
+-- be started using this streaming image.
+--
+-- 'name', 'streamingImage_name' - A friendly name for a streaming image resource.
+--
+-- 'owner', 'streamingImage_owner' - The owner of the streaming image, either the @studioId@ that contains
+-- the streaming image, or @amazon@ for images that are provided by Amazon
+-- Nimble Studio.
+--
+-- 'platform', 'streamingImage_platform' - The platform of the streaming image, either Windows or Linux.
+--
+-- 'state', 'streamingImage_state' - The current state.
+--
+-- 'statusCode', 'streamingImage_statusCode' - The status code.
+--
+-- 'statusMessage', 'streamingImage_statusMessage' - The status message for the streaming image.
+--
+-- 'streamingImageId', 'streamingImage_streamingImageId' - The ID of the streaming image.
+--
+-- 'tags', 'streamingImage_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+newStreamingImage ::
+  StreamingImage
+newStreamingImage =
+  StreamingImage'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ec2ImageId = Prelude.Nothing,
+      encryptionConfiguration = Prelude.Nothing,
+      eulaIds = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      streamingImageId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+streamingImage_arn :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_arn = Lens.lens (\StreamingImage' {arn} -> arn) (\s@StreamingImage' {} a -> s {arn = a} :: StreamingImage)
+
+-- | A human-readable description of the streaming image.
+streamingImage_description :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_description = Lens.lens (\StreamingImage' {description} -> description) (\s@StreamingImage' {} a -> s {description = a} :: StreamingImage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ID of an EC2 machine image with which to create the streaming image.
+streamingImage_ec2ImageId :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_ec2ImageId = Lens.lens (\StreamingImage' {ec2ImageId} -> ec2ImageId) (\s@StreamingImage' {} a -> s {ec2ImageId = a} :: StreamingImage)
+
+-- | The encryption configuration.
+streamingImage_encryptionConfiguration :: Lens.Lens' StreamingImage (Prelude.Maybe StreamingImageEncryptionConfiguration)
+streamingImage_encryptionConfiguration = Lens.lens (\StreamingImage' {encryptionConfiguration} -> encryptionConfiguration) (\s@StreamingImage' {} a -> s {encryptionConfiguration = a} :: StreamingImage)
+
+-- | The list of EULAs that must be accepted before a Streaming Session can
+-- be started using this streaming image.
+streamingImage_eulaIds :: Lens.Lens' StreamingImage (Prelude.Maybe [Prelude.Text])
+streamingImage_eulaIds = Lens.lens (\StreamingImage' {eulaIds} -> eulaIds) (\s@StreamingImage' {} a -> s {eulaIds = a} :: StreamingImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | A friendly name for a streaming image resource.
+streamingImage_name :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_name = Lens.lens (\StreamingImage' {name} -> name) (\s@StreamingImage' {} a -> s {name = a} :: StreamingImage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The owner of the streaming image, either the @studioId@ that contains
+-- the streaming image, or @amazon@ for images that are provided by Amazon
+-- Nimble Studio.
+streamingImage_owner :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_owner = Lens.lens (\StreamingImage' {owner} -> owner) (\s@StreamingImage' {} a -> s {owner = a} :: StreamingImage)
+
+-- | The platform of the streaming image, either Windows or Linux.
+streamingImage_platform :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_platform = Lens.lens (\StreamingImage' {platform} -> platform) (\s@StreamingImage' {} a -> s {platform = a} :: StreamingImage)
+
+-- | The current state.
+streamingImage_state :: Lens.Lens' StreamingImage (Prelude.Maybe StreamingImageState)
+streamingImage_state = Lens.lens (\StreamingImage' {state} -> state) (\s@StreamingImage' {} a -> s {state = a} :: StreamingImage)
+
+-- | The status code.
+streamingImage_statusCode :: Lens.Lens' StreamingImage (Prelude.Maybe StreamingImageStatusCode)
+streamingImage_statusCode = Lens.lens (\StreamingImage' {statusCode} -> statusCode) (\s@StreamingImage' {} a -> s {statusCode = a} :: StreamingImage)
+
+-- | The status message for the streaming image.
+streamingImage_statusMessage :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_statusMessage = Lens.lens (\StreamingImage' {statusMessage} -> statusMessage) (\s@StreamingImage' {} a -> s {statusMessage = a} :: StreamingImage)
+
+-- | The ID of the streaming image.
+streamingImage_streamingImageId :: Lens.Lens' StreamingImage (Prelude.Maybe Prelude.Text)
+streamingImage_streamingImageId = Lens.lens (\StreamingImage' {streamingImageId} -> streamingImageId) (\s@StreamingImage' {} a -> s {streamingImageId = a} :: StreamingImage)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+streamingImage_tags :: Lens.Lens' StreamingImage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+streamingImage_tags = Lens.lens (\StreamingImage' {tags} -> tags) (\s@StreamingImage' {} a -> s {tags = a} :: StreamingImage) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON StreamingImage where
+  parseJSON =
+    Data.withObject
+      "StreamingImage"
+      ( \x ->
+          StreamingImage'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "ec2ImageId")
+            Prelude.<*> (x Data..:? "encryptionConfiguration")
+            Prelude.<*> (x Data..:? "eulaIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "owner")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "streamingImageId")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable StreamingImage where
+  hashWithSalt _salt StreamingImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ec2ImageId
+      `Prelude.hashWithSalt` encryptionConfiguration
+      `Prelude.hashWithSalt` eulaIds
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` streamingImageId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData StreamingImage where
+  rnf StreamingImage' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ec2ImageId
+      `Prelude.seq` Prelude.rnf encryptionConfiguration
+      `Prelude.seq` Prelude.rnf eulaIds
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf streamingImageId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/Nimble/Types/StreamingImageEncryptionConfiguration.hs b/gen/Amazonka/Nimble/Types/StreamingImageEncryptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingImageEncryptionConfiguration.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.Nimble.Types.StreamingImageEncryptionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingImageEncryptionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StreamingImageEncryptionConfigurationKeyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how a streaming image is encrypted.
+--
+-- /See:/ 'newStreamingImageEncryptionConfiguration' smart constructor.
+data StreamingImageEncryptionConfiguration = StreamingImageEncryptionConfiguration'
+  { -- | The ARN for a KMS key that is used to encrypt studio data.
+    keyArn :: Prelude.Maybe Prelude.Text,
+    -- | The type of KMS key that is used to encrypt studio data.
+    keyType :: StreamingImageEncryptionConfigurationKeyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingImageEncryptionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyArn', 'streamingImageEncryptionConfiguration_keyArn' - The ARN for a KMS key that is used to encrypt studio data.
+--
+-- 'keyType', 'streamingImageEncryptionConfiguration_keyType' - The type of KMS key that is used to encrypt studio data.
+newStreamingImageEncryptionConfiguration ::
+  -- | 'keyType'
+  StreamingImageEncryptionConfigurationKeyType ->
+  StreamingImageEncryptionConfiguration
+newStreamingImageEncryptionConfiguration pKeyType_ =
+  StreamingImageEncryptionConfiguration'
+    { keyArn =
+        Prelude.Nothing,
+      keyType = pKeyType_
+    }
+
+-- | The ARN for a KMS key that is used to encrypt studio data.
+streamingImageEncryptionConfiguration_keyArn :: Lens.Lens' StreamingImageEncryptionConfiguration (Prelude.Maybe Prelude.Text)
+streamingImageEncryptionConfiguration_keyArn = Lens.lens (\StreamingImageEncryptionConfiguration' {keyArn} -> keyArn) (\s@StreamingImageEncryptionConfiguration' {} a -> s {keyArn = a} :: StreamingImageEncryptionConfiguration)
+
+-- | The type of KMS key that is used to encrypt studio data.
+streamingImageEncryptionConfiguration_keyType :: Lens.Lens' StreamingImageEncryptionConfiguration StreamingImageEncryptionConfigurationKeyType
+streamingImageEncryptionConfiguration_keyType = Lens.lens (\StreamingImageEncryptionConfiguration' {keyType} -> keyType) (\s@StreamingImageEncryptionConfiguration' {} a -> s {keyType = a} :: StreamingImageEncryptionConfiguration)
+
+instance
+  Data.FromJSON
+    StreamingImageEncryptionConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "StreamingImageEncryptionConfiguration"
+      ( \x ->
+          StreamingImageEncryptionConfiguration'
+            Prelude.<$> (x Data..:? "keyArn")
+            Prelude.<*> (x Data..: "keyType")
+      )
+
+instance
+  Prelude.Hashable
+    StreamingImageEncryptionConfiguration
+  where
+  hashWithSalt
+    _salt
+    StreamingImageEncryptionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` keyArn
+        `Prelude.hashWithSalt` keyType
+
+instance
+  Prelude.NFData
+    StreamingImageEncryptionConfiguration
+  where
+  rnf StreamingImageEncryptionConfiguration' {..} =
+    Prelude.rnf keyArn
+      `Prelude.seq` Prelude.rnf keyType
diff --git a/gen/Amazonka/Nimble/Types/StreamingImageEncryptionConfigurationKeyType.hs b/gen/Amazonka/Nimble/Types/StreamingImageEncryptionConfigurationKeyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingImageEncryptionConfigurationKeyType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingImageEncryptionConfigurationKeyType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingImageEncryptionConfigurationKeyType
+  ( StreamingImageEncryptionConfigurationKeyType
+      ( ..,
+        StreamingImageEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingImageEncryptionConfigurationKeyType = StreamingImageEncryptionConfigurationKeyType'
+  { fromStreamingImageEncryptionConfigurationKeyType ::
+      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 StreamingImageEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY :: StreamingImageEncryptionConfigurationKeyType
+pattern StreamingImageEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY = StreamingImageEncryptionConfigurationKeyType' "CUSTOMER_MANAGED_KEY"
+
+{-# COMPLETE
+  StreamingImageEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY,
+  StreamingImageEncryptionConfigurationKeyType'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingImageState.hs b/gen/Amazonka/Nimble/Types/StreamingImageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingImageState.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.Nimble.Types.StreamingImageState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingImageState
+  ( StreamingImageState
+      ( ..,
+        StreamingImageState_CREATE_FAILED,
+        StreamingImageState_CREATE_IN_PROGRESS,
+        StreamingImageState_DELETED,
+        StreamingImageState_DELETE_FAILED,
+        StreamingImageState_DELETE_IN_PROGRESS,
+        StreamingImageState_READY,
+        StreamingImageState_UPDATE_FAILED,
+        StreamingImageState_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingImageState = StreamingImageState'
+  { fromStreamingImageState ::
+      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 StreamingImageState_CREATE_FAILED :: StreamingImageState
+pattern StreamingImageState_CREATE_FAILED = StreamingImageState' "CREATE_FAILED"
+
+pattern StreamingImageState_CREATE_IN_PROGRESS :: StreamingImageState
+pattern StreamingImageState_CREATE_IN_PROGRESS = StreamingImageState' "CREATE_IN_PROGRESS"
+
+pattern StreamingImageState_DELETED :: StreamingImageState
+pattern StreamingImageState_DELETED = StreamingImageState' "DELETED"
+
+pattern StreamingImageState_DELETE_FAILED :: StreamingImageState
+pattern StreamingImageState_DELETE_FAILED = StreamingImageState' "DELETE_FAILED"
+
+pattern StreamingImageState_DELETE_IN_PROGRESS :: StreamingImageState
+pattern StreamingImageState_DELETE_IN_PROGRESS = StreamingImageState' "DELETE_IN_PROGRESS"
+
+pattern StreamingImageState_READY :: StreamingImageState
+pattern StreamingImageState_READY = StreamingImageState' "READY"
+
+pattern StreamingImageState_UPDATE_FAILED :: StreamingImageState
+pattern StreamingImageState_UPDATE_FAILED = StreamingImageState' "UPDATE_FAILED"
+
+pattern StreamingImageState_UPDATE_IN_PROGRESS :: StreamingImageState
+pattern StreamingImageState_UPDATE_IN_PROGRESS = StreamingImageState' "UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  StreamingImageState_CREATE_FAILED,
+  StreamingImageState_CREATE_IN_PROGRESS,
+  StreamingImageState_DELETED,
+  StreamingImageState_DELETE_FAILED,
+  StreamingImageState_DELETE_IN_PROGRESS,
+  StreamingImageState_READY,
+  StreamingImageState_UPDATE_FAILED,
+  StreamingImageState_UPDATE_IN_PROGRESS,
+  StreamingImageState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingImageStatusCode.hs b/gen/Amazonka/Nimble/Types/StreamingImageStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingImageStatusCode.hs
@@ -0,0 +1,97 @@
+{-# 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.Nimble.Types.StreamingImageStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingImageStatusCode
+  ( StreamingImageStatusCode
+      ( ..,
+        StreamingImageStatusCode_ACCESS_DENIED,
+        StreamingImageStatusCode_INTERNAL_ERROR,
+        StreamingImageStatusCode_STREAMING_IMAGE_CREATE_IN_PROGRESS,
+        StreamingImageStatusCode_STREAMING_IMAGE_DELETED,
+        StreamingImageStatusCode_STREAMING_IMAGE_DELETE_IN_PROGRESS,
+        StreamingImageStatusCode_STREAMING_IMAGE_READY,
+        StreamingImageStatusCode_STREAMING_IMAGE_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status code.
+newtype StreamingImageStatusCode = StreamingImageStatusCode'
+  { fromStreamingImageStatusCode ::
+      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 StreamingImageStatusCode_ACCESS_DENIED :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_ACCESS_DENIED = StreamingImageStatusCode' "ACCESS_DENIED"
+
+pattern StreamingImageStatusCode_INTERNAL_ERROR :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_INTERNAL_ERROR = StreamingImageStatusCode' "INTERNAL_ERROR"
+
+pattern StreamingImageStatusCode_STREAMING_IMAGE_CREATE_IN_PROGRESS :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_STREAMING_IMAGE_CREATE_IN_PROGRESS = StreamingImageStatusCode' "STREAMING_IMAGE_CREATE_IN_PROGRESS"
+
+pattern StreamingImageStatusCode_STREAMING_IMAGE_DELETED :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_STREAMING_IMAGE_DELETED = StreamingImageStatusCode' "STREAMING_IMAGE_DELETED"
+
+pattern StreamingImageStatusCode_STREAMING_IMAGE_DELETE_IN_PROGRESS :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_STREAMING_IMAGE_DELETE_IN_PROGRESS = StreamingImageStatusCode' "STREAMING_IMAGE_DELETE_IN_PROGRESS"
+
+pattern StreamingImageStatusCode_STREAMING_IMAGE_READY :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_STREAMING_IMAGE_READY = StreamingImageStatusCode' "STREAMING_IMAGE_READY"
+
+pattern StreamingImageStatusCode_STREAMING_IMAGE_UPDATE_IN_PROGRESS :: StreamingImageStatusCode
+pattern StreamingImageStatusCode_STREAMING_IMAGE_UPDATE_IN_PROGRESS = StreamingImageStatusCode' "STREAMING_IMAGE_UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  StreamingImageStatusCode_ACCESS_DENIED,
+  StreamingImageStatusCode_INTERNAL_ERROR,
+  StreamingImageStatusCode_STREAMING_IMAGE_CREATE_IN_PROGRESS,
+  StreamingImageStatusCode_STREAMING_IMAGE_DELETED,
+  StreamingImageStatusCode_STREAMING_IMAGE_DELETE_IN_PROGRESS,
+  StreamingImageStatusCode_STREAMING_IMAGE_READY,
+  StreamingImageStatusCode_STREAMING_IMAGE_UPDATE_IN_PROGRESS,
+  StreamingImageStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingInstanceType.hs b/gen/Amazonka/Nimble/Types/StreamingInstanceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingInstanceType.hs
@@ -0,0 +1,126 @@
+{-# 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.Nimble.Types.StreamingInstanceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingInstanceType
+  ( StreamingInstanceType
+      ( ..,
+        StreamingInstanceType_G3_4xlarge,
+        StreamingInstanceType_G3s_xlarge,
+        StreamingInstanceType_G4dn_12xlarge,
+        StreamingInstanceType_G4dn_16xlarge,
+        StreamingInstanceType_G4dn_2xlarge,
+        StreamingInstanceType_G4dn_4xlarge,
+        StreamingInstanceType_G4dn_8xlarge,
+        StreamingInstanceType_G4dn_xlarge,
+        StreamingInstanceType_G5_16xlarge,
+        StreamingInstanceType_G5_2xlarge,
+        StreamingInstanceType_G5_4xlarge,
+        StreamingInstanceType_G5_8xlarge,
+        StreamingInstanceType_G5_xlarge
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingInstanceType = StreamingInstanceType'
+  { fromStreamingInstanceType ::
+      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 StreamingInstanceType_G3_4xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G3_4xlarge = StreamingInstanceType' "g3.4xlarge"
+
+pattern StreamingInstanceType_G3s_xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G3s_xlarge = StreamingInstanceType' "g3s.xlarge"
+
+pattern StreamingInstanceType_G4dn_12xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G4dn_12xlarge = StreamingInstanceType' "g4dn.12xlarge"
+
+pattern StreamingInstanceType_G4dn_16xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G4dn_16xlarge = StreamingInstanceType' "g4dn.16xlarge"
+
+pattern StreamingInstanceType_G4dn_2xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G4dn_2xlarge = StreamingInstanceType' "g4dn.2xlarge"
+
+pattern StreamingInstanceType_G4dn_4xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G4dn_4xlarge = StreamingInstanceType' "g4dn.4xlarge"
+
+pattern StreamingInstanceType_G4dn_8xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G4dn_8xlarge = StreamingInstanceType' "g4dn.8xlarge"
+
+pattern StreamingInstanceType_G4dn_xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G4dn_xlarge = StreamingInstanceType' "g4dn.xlarge"
+
+pattern StreamingInstanceType_G5_16xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G5_16xlarge = StreamingInstanceType' "g5.16xlarge"
+
+pattern StreamingInstanceType_G5_2xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G5_2xlarge = StreamingInstanceType' "g5.2xlarge"
+
+pattern StreamingInstanceType_G5_4xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G5_4xlarge = StreamingInstanceType' "g5.4xlarge"
+
+pattern StreamingInstanceType_G5_8xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G5_8xlarge = StreamingInstanceType' "g5.8xlarge"
+
+pattern StreamingInstanceType_G5_xlarge :: StreamingInstanceType
+pattern StreamingInstanceType_G5_xlarge = StreamingInstanceType' "g5.xlarge"
+
+{-# COMPLETE
+  StreamingInstanceType_G3_4xlarge,
+  StreamingInstanceType_G3s_xlarge,
+  StreamingInstanceType_G4dn_12xlarge,
+  StreamingInstanceType_G4dn_16xlarge,
+  StreamingInstanceType_G4dn_2xlarge,
+  StreamingInstanceType_G4dn_4xlarge,
+  StreamingInstanceType_G4dn_8xlarge,
+  StreamingInstanceType_G4dn_xlarge,
+  StreamingInstanceType_G5_16xlarge,
+  StreamingInstanceType_G5_2xlarge,
+  StreamingInstanceType_G5_4xlarge,
+  StreamingInstanceType_G5_8xlarge,
+  StreamingInstanceType_G5_xlarge,
+  StreamingInstanceType'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingSession.hs b/gen/Amazonka/Nimble/Types/StreamingSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSession.hs
@@ -0,0 +1,482 @@
+{-# 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.Nimble.Types.StreamingSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSession where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.AutomaticTerminationMode
+import Amazonka.Nimble.Types.SessionBackupMode
+import Amazonka.Nimble.Types.SessionPersistenceMode
+import Amazonka.Nimble.Types.StreamingSessionState
+import Amazonka.Nimble.Types.StreamingSessionStatusCode
+import Amazonka.Nimble.Types.VolumeConfiguration
+import Amazonka.Nimble.Types.VolumeRetentionMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | A streaming session is a virtual workstation created using a particular
+-- launch profile.
+--
+-- /See:/ 'newStreamingSession' smart constructor.
+data StreamingSession = StreamingSession'
+  { -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+    -- uniquely identifies it. ARNs are unique across all Regions.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Indicates if a streaming session created from this launch profile should
+    -- be terminated automatically or retained without termination after being
+    -- in a @STOPPED@ state.
+    --
+    -- -   When @ACTIVATED@, the streaming session is scheduled for termination
+    --     after being in the @STOPPED@ state for the time specified in
+    --     @maxStoppedSessionLengthInMinutes@.
+    --
+    -- -   When @DEACTIVATED@, the streaming session can remain in the
+    --     @STOPPED@ state indefinitely.
+    --
+    -- This parameter is only allowed when @sessionPersistenceMode@ is
+    -- @ACTIVATED@. When allowed, the default value for this parameter is
+    -- @DEACTIVATED@.
+    automaticTerminationMode :: Prelude.Maybe AutomaticTerminationMode,
+    -- | Shows the current backup setting of the session.
+    backupMode :: Prelude.Maybe SessionBackupMode,
+    -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that created the streaming session.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The EC2 Instance type used for the streaming session.
+    ec2InstanceType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of backups of a streaming session that you can have.
+    -- When the maximum number of backups is reached, the oldest backup is
+    -- deleted.
+    maxBackupsToRetain :: Prelude.Maybe Prelude.Natural,
+    -- | The user ID of the user that owns the streaming session. The user that
+    -- owns the session will be logging into the session and interacting with
+    -- the virtual workstation.
+    ownedBy :: Prelude.Maybe Prelude.Text,
+    -- | The session ID.
+    sessionId :: Prelude.Maybe Prelude.Text,
+    -- | Determine if a streaming session created from this launch profile can
+    -- configure persistent storage. This means that @volumeConfiguration@ and
+    -- @automaticTerminationMode@ are configured.
+    sessionPersistenceMode :: Prelude.Maybe SessionPersistenceMode,
+    -- | The time the session entered @START_IN_PROGRESS@ state.
+    startedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that started the streaming session.
+    startedBy :: Prelude.Maybe Prelude.Text,
+    -- | The backup ID used to restore a streaming session.
+    startedFromBackupId :: Prelude.Maybe Prelude.Text,
+    -- | The current state.
+    state :: Prelude.Maybe StreamingSessionState,
+    -- | The status code.
+    statusCode :: Prelude.Maybe StreamingSessionStatusCode,
+    -- | The status message for the streaming session.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The time the streaming session will automatically be stopped if the user
+    -- doesn’t stop the session themselves.
+    stopAt :: Prelude.Maybe Data.ISO8601,
+    -- | The time the session entered @STOP_IN_PROGRESS@ state.
+    stoppedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that stopped the streaming session.
+    stoppedBy :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the streaming image.
+    streamingImageId :: Prelude.Maybe Prelude.Text,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The time the streaming session will automatically terminate if not
+    -- terminated by the user.
+    terminateAt :: Prelude.Maybe Data.ISO8601,
+    -- | The ISO timestamp in seconds for when the resource was updated.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that most recently updated the resource.
+    updatedBy :: Prelude.Maybe Prelude.Text,
+    -- | Custom volume configuration for the root volumes that are attached to
+    -- streaming sessions.
+    --
+    -- This parameter is only allowed when @sessionPersistenceMode@ is
+    -- @ACTIVATED@.
+    volumeConfiguration :: Prelude.Maybe VolumeConfiguration,
+    -- | Determine if an EBS volume created from this streaming session will be
+    -- backed up.
+    volumeRetentionMode :: Prelude.Maybe VolumeRetentionMode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'streamingSession_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+--
+-- 'automaticTerminationMode', 'streamingSession_automaticTerminationMode' - Indicates if a streaming session created from this launch profile should
+-- be terminated automatically or retained without termination after being
+-- in a @STOPPED@ state.
+--
+-- -   When @ACTIVATED@, the streaming session is scheduled for termination
+--     after being in the @STOPPED@ state for the time specified in
+--     @maxStoppedSessionLengthInMinutes@.
+--
+-- -   When @DEACTIVATED@, the streaming session can remain in the
+--     @STOPPED@ state indefinitely.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@. When allowed, the default value for this parameter is
+-- @DEACTIVATED@.
+--
+-- 'backupMode', 'streamingSession_backupMode' - Shows the current backup setting of the session.
+--
+-- 'createdAt', 'streamingSession_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'createdBy', 'streamingSession_createdBy' - The user ID of the user that created the streaming session.
+--
+-- 'ec2InstanceType', 'streamingSession_ec2InstanceType' - The EC2 Instance type used for the streaming session.
+--
+-- 'launchProfileId', 'streamingSession_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'maxBackupsToRetain', 'streamingSession_maxBackupsToRetain' - The maximum number of backups of a streaming session that you can have.
+-- When the maximum number of backups is reached, the oldest backup is
+-- deleted.
+--
+-- 'ownedBy', 'streamingSession_ownedBy' - The user ID of the user that owns the streaming session. The user that
+-- owns the session will be logging into the session and interacting with
+-- the virtual workstation.
+--
+-- 'sessionId', 'streamingSession_sessionId' - The session ID.
+--
+-- 'sessionPersistenceMode', 'streamingSession_sessionPersistenceMode' - Determine if a streaming session created from this launch profile can
+-- configure persistent storage. This means that @volumeConfiguration@ and
+-- @automaticTerminationMode@ are configured.
+--
+-- 'startedAt', 'streamingSession_startedAt' - The time the session entered @START_IN_PROGRESS@ state.
+--
+-- 'startedBy', 'streamingSession_startedBy' - The user ID of the user that started the streaming session.
+--
+-- 'startedFromBackupId', 'streamingSession_startedFromBackupId' - The backup ID used to restore a streaming session.
+--
+-- 'state', 'streamingSession_state' - The current state.
+--
+-- 'statusCode', 'streamingSession_statusCode' - The status code.
+--
+-- 'statusMessage', 'streamingSession_statusMessage' - The status message for the streaming session.
+--
+-- 'stopAt', 'streamingSession_stopAt' - The time the streaming session will automatically be stopped if the user
+-- doesn’t stop the session themselves.
+--
+-- 'stoppedAt', 'streamingSession_stoppedAt' - The time the session entered @STOP_IN_PROGRESS@ state.
+--
+-- 'stoppedBy', 'streamingSession_stoppedBy' - The user ID of the user that stopped the streaming session.
+--
+-- 'streamingImageId', 'streamingSession_streamingImageId' - The ID of the streaming image.
+--
+-- 'tags', 'streamingSession_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'terminateAt', 'streamingSession_terminateAt' - The time the streaming session will automatically terminate if not
+-- terminated by the user.
+--
+-- 'updatedAt', 'streamingSession_updatedAt' - The ISO timestamp in seconds for when the resource was updated.
+--
+-- 'updatedBy', 'streamingSession_updatedBy' - The user ID of the user that most recently updated the resource.
+--
+-- 'volumeConfiguration', 'streamingSession_volumeConfiguration' - Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+--
+-- 'volumeRetentionMode', 'streamingSession_volumeRetentionMode' - Determine if an EBS volume created from this streaming session will be
+-- backed up.
+newStreamingSession ::
+  StreamingSession
+newStreamingSession =
+  StreamingSession'
+    { arn = Prelude.Nothing,
+      automaticTerminationMode = Prelude.Nothing,
+      backupMode = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      ec2InstanceType = Prelude.Nothing,
+      launchProfileId = Prelude.Nothing,
+      maxBackupsToRetain = Prelude.Nothing,
+      ownedBy = Prelude.Nothing,
+      sessionId = Prelude.Nothing,
+      sessionPersistenceMode = Prelude.Nothing,
+      startedAt = Prelude.Nothing,
+      startedBy = Prelude.Nothing,
+      startedFromBackupId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      stopAt = Prelude.Nothing,
+      stoppedAt = Prelude.Nothing,
+      stoppedBy = Prelude.Nothing,
+      streamingImageId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      terminateAt = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      updatedBy = Prelude.Nothing,
+      volumeConfiguration = Prelude.Nothing,
+      volumeRetentionMode = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+streamingSession_arn :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_arn = Lens.lens (\StreamingSession' {arn} -> arn) (\s@StreamingSession' {} a -> s {arn = a} :: StreamingSession)
+
+-- | Indicates if a streaming session created from this launch profile should
+-- be terminated automatically or retained without termination after being
+-- in a @STOPPED@ state.
+--
+-- -   When @ACTIVATED@, the streaming session is scheduled for termination
+--     after being in the @STOPPED@ state for the time specified in
+--     @maxStoppedSessionLengthInMinutes@.
+--
+-- -   When @DEACTIVATED@, the streaming session can remain in the
+--     @STOPPED@ state indefinitely.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@. When allowed, the default value for this parameter is
+-- @DEACTIVATED@.
+streamingSession_automaticTerminationMode :: Lens.Lens' StreamingSession (Prelude.Maybe AutomaticTerminationMode)
+streamingSession_automaticTerminationMode = Lens.lens (\StreamingSession' {automaticTerminationMode} -> automaticTerminationMode) (\s@StreamingSession' {} a -> s {automaticTerminationMode = a} :: StreamingSession)
+
+-- | Shows the current backup setting of the session.
+streamingSession_backupMode :: Lens.Lens' StreamingSession (Prelude.Maybe SessionBackupMode)
+streamingSession_backupMode = Lens.lens (\StreamingSession' {backupMode} -> backupMode) (\s@StreamingSession' {} a -> s {backupMode = a} :: StreamingSession)
+
+-- | The ISO timestamp in seconds for when the resource was created.
+streamingSession_createdAt :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.UTCTime)
+streamingSession_createdAt = Lens.lens (\StreamingSession' {createdAt} -> createdAt) (\s@StreamingSession' {} a -> s {createdAt = a} :: StreamingSession) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that created the streaming session.
+streamingSession_createdBy :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_createdBy = Lens.lens (\StreamingSession' {createdBy} -> createdBy) (\s@StreamingSession' {} a -> s {createdBy = a} :: StreamingSession)
+
+-- | The EC2 Instance type used for the streaming session.
+streamingSession_ec2InstanceType :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_ec2InstanceType = Lens.lens (\StreamingSession' {ec2InstanceType} -> ec2InstanceType) (\s@StreamingSession' {} a -> s {ec2InstanceType = a} :: StreamingSession)
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+streamingSession_launchProfileId :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_launchProfileId = Lens.lens (\StreamingSession' {launchProfileId} -> launchProfileId) (\s@StreamingSession' {} a -> s {launchProfileId = a} :: StreamingSession)
+
+-- | The maximum number of backups of a streaming session that you can have.
+-- When the maximum number of backups is reached, the oldest backup is
+-- deleted.
+streamingSession_maxBackupsToRetain :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Natural)
+streamingSession_maxBackupsToRetain = Lens.lens (\StreamingSession' {maxBackupsToRetain} -> maxBackupsToRetain) (\s@StreamingSession' {} a -> s {maxBackupsToRetain = a} :: StreamingSession)
+
+-- | The user ID of the user that owns the streaming session. The user that
+-- owns the session will be logging into the session and interacting with
+-- the virtual workstation.
+streamingSession_ownedBy :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_ownedBy = Lens.lens (\StreamingSession' {ownedBy} -> ownedBy) (\s@StreamingSession' {} a -> s {ownedBy = a} :: StreamingSession)
+
+-- | The session ID.
+streamingSession_sessionId :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_sessionId = Lens.lens (\StreamingSession' {sessionId} -> sessionId) (\s@StreamingSession' {} a -> s {sessionId = a} :: StreamingSession)
+
+-- | Determine if a streaming session created from this launch profile can
+-- configure persistent storage. This means that @volumeConfiguration@ and
+-- @automaticTerminationMode@ are configured.
+streamingSession_sessionPersistenceMode :: Lens.Lens' StreamingSession (Prelude.Maybe SessionPersistenceMode)
+streamingSession_sessionPersistenceMode = Lens.lens (\StreamingSession' {sessionPersistenceMode} -> sessionPersistenceMode) (\s@StreamingSession' {} a -> s {sessionPersistenceMode = a} :: StreamingSession)
+
+-- | The time the session entered @START_IN_PROGRESS@ state.
+streamingSession_startedAt :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.UTCTime)
+streamingSession_startedAt = Lens.lens (\StreamingSession' {startedAt} -> startedAt) (\s@StreamingSession' {} a -> s {startedAt = a} :: StreamingSession) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that started the streaming session.
+streamingSession_startedBy :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_startedBy = Lens.lens (\StreamingSession' {startedBy} -> startedBy) (\s@StreamingSession' {} a -> s {startedBy = a} :: StreamingSession)
+
+-- | The backup ID used to restore a streaming session.
+streamingSession_startedFromBackupId :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_startedFromBackupId = Lens.lens (\StreamingSession' {startedFromBackupId} -> startedFromBackupId) (\s@StreamingSession' {} a -> s {startedFromBackupId = a} :: StreamingSession)
+
+-- | The current state.
+streamingSession_state :: Lens.Lens' StreamingSession (Prelude.Maybe StreamingSessionState)
+streamingSession_state = Lens.lens (\StreamingSession' {state} -> state) (\s@StreamingSession' {} a -> s {state = a} :: StreamingSession)
+
+-- | The status code.
+streamingSession_statusCode :: Lens.Lens' StreamingSession (Prelude.Maybe StreamingSessionStatusCode)
+streamingSession_statusCode = Lens.lens (\StreamingSession' {statusCode} -> statusCode) (\s@StreamingSession' {} a -> s {statusCode = a} :: StreamingSession)
+
+-- | The status message for the streaming session.
+streamingSession_statusMessage :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_statusMessage = Lens.lens (\StreamingSession' {statusMessage} -> statusMessage) (\s@StreamingSession' {} a -> s {statusMessage = a} :: StreamingSession)
+
+-- | The time the streaming session will automatically be stopped if the user
+-- doesn’t stop the session themselves.
+streamingSession_stopAt :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.UTCTime)
+streamingSession_stopAt = Lens.lens (\StreamingSession' {stopAt} -> stopAt) (\s@StreamingSession' {} a -> s {stopAt = a} :: StreamingSession) Prelude.. Lens.mapping Data._Time
+
+-- | The time the session entered @STOP_IN_PROGRESS@ state.
+streamingSession_stoppedAt :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.UTCTime)
+streamingSession_stoppedAt = Lens.lens (\StreamingSession' {stoppedAt} -> stoppedAt) (\s@StreamingSession' {} a -> s {stoppedAt = a} :: StreamingSession) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that stopped the streaming session.
+streamingSession_stoppedBy :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_stoppedBy = Lens.lens (\StreamingSession' {stoppedBy} -> stoppedBy) (\s@StreamingSession' {} a -> s {stoppedBy = a} :: StreamingSession)
+
+-- | The ID of the streaming image.
+streamingSession_streamingImageId :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_streamingImageId = Lens.lens (\StreamingSession' {streamingImageId} -> streamingImageId) (\s@StreamingSession' {} a -> s {streamingImageId = a} :: StreamingSession)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+streamingSession_tags :: Lens.Lens' StreamingSession (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+streamingSession_tags = Lens.lens (\StreamingSession' {tags} -> tags) (\s@StreamingSession' {} a -> s {tags = a} :: StreamingSession) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time the streaming session will automatically terminate if not
+-- terminated by the user.
+streamingSession_terminateAt :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.UTCTime)
+streamingSession_terminateAt = Lens.lens (\StreamingSession' {terminateAt} -> terminateAt) (\s@StreamingSession' {} a -> s {terminateAt = a} :: StreamingSession) Prelude.. Lens.mapping Data._Time
+
+-- | The ISO timestamp in seconds for when the resource was updated.
+streamingSession_updatedAt :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.UTCTime)
+streamingSession_updatedAt = Lens.lens (\StreamingSession' {updatedAt} -> updatedAt) (\s@StreamingSession' {} a -> s {updatedAt = a} :: StreamingSession) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that most recently updated the resource.
+streamingSession_updatedBy :: Lens.Lens' StreamingSession (Prelude.Maybe Prelude.Text)
+streamingSession_updatedBy = Lens.lens (\StreamingSession' {updatedBy} -> updatedBy) (\s@StreamingSession' {} a -> s {updatedBy = a} :: StreamingSession)
+
+-- | Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+streamingSession_volumeConfiguration :: Lens.Lens' StreamingSession (Prelude.Maybe VolumeConfiguration)
+streamingSession_volumeConfiguration = Lens.lens (\StreamingSession' {volumeConfiguration} -> volumeConfiguration) (\s@StreamingSession' {} a -> s {volumeConfiguration = a} :: StreamingSession)
+
+-- | Determine if an EBS volume created from this streaming session will be
+-- backed up.
+streamingSession_volumeRetentionMode :: Lens.Lens' StreamingSession (Prelude.Maybe VolumeRetentionMode)
+streamingSession_volumeRetentionMode = Lens.lens (\StreamingSession' {volumeRetentionMode} -> volumeRetentionMode) (\s@StreamingSession' {} a -> s {volumeRetentionMode = a} :: StreamingSession)
+
+instance Data.FromJSON StreamingSession where
+  parseJSON =
+    Data.withObject
+      "StreamingSession"
+      ( \x ->
+          StreamingSession'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "automaticTerminationMode")
+            Prelude.<*> (x Data..:? "backupMode")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "createdBy")
+            Prelude.<*> (x Data..:? "ec2InstanceType")
+            Prelude.<*> (x Data..:? "launchProfileId")
+            Prelude.<*> (x Data..:? "maxBackupsToRetain")
+            Prelude.<*> (x Data..:? "ownedBy")
+            Prelude.<*> (x Data..:? "sessionId")
+            Prelude.<*> (x Data..:? "sessionPersistenceMode")
+            Prelude.<*> (x Data..:? "startedAt")
+            Prelude.<*> (x Data..:? "startedBy")
+            Prelude.<*> (x Data..:? "startedFromBackupId")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "stopAt")
+            Prelude.<*> (x Data..:? "stoppedAt")
+            Prelude.<*> (x Data..:? "stoppedBy")
+            Prelude.<*> (x Data..:? "streamingImageId")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "terminateAt")
+            Prelude.<*> (x Data..:? "updatedAt")
+            Prelude.<*> (x Data..:? "updatedBy")
+            Prelude.<*> (x Data..:? "volumeConfiguration")
+            Prelude.<*> (x Data..:? "volumeRetentionMode")
+      )
+
+instance Prelude.Hashable StreamingSession where
+  hashWithSalt _salt StreamingSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` automaticTerminationMode
+      `Prelude.hashWithSalt` backupMode
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` ec2InstanceType
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` maxBackupsToRetain
+      `Prelude.hashWithSalt` ownedBy
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` sessionPersistenceMode
+      `Prelude.hashWithSalt` startedAt
+      `Prelude.hashWithSalt` startedBy
+      `Prelude.hashWithSalt` startedFromBackupId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` stopAt
+      `Prelude.hashWithSalt` stoppedAt
+      `Prelude.hashWithSalt` stoppedBy
+      `Prelude.hashWithSalt` streamingImageId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` terminateAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` updatedBy
+      `Prelude.hashWithSalt` volumeConfiguration
+      `Prelude.hashWithSalt` volumeRetentionMode
+
+instance Prelude.NFData StreamingSession where
+  rnf StreamingSession' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf automaticTerminationMode
+      `Prelude.seq` Prelude.rnf backupMode
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf ec2InstanceType
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf maxBackupsToRetain
+      `Prelude.seq` Prelude.rnf ownedBy
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf sessionPersistenceMode
+      `Prelude.seq` Prelude.rnf startedAt
+      `Prelude.seq` Prelude.rnf startedBy
+      `Prelude.seq` Prelude.rnf startedFromBackupId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf stopAt
+      `Prelude.seq` Prelude.rnf stoppedAt
+      `Prelude.seq` Prelude.rnf stoppedBy
+      `Prelude.seq` Prelude.rnf streamingImageId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf terminateAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf
+        updatedBy
+      `Prelude.seq` Prelude.rnf
+        volumeConfiguration
+      `Prelude.seq` Prelude.rnf
+        volumeRetentionMode
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionBackup.hs b/gen/Amazonka/Nimble/Types/StreamingSessionBackup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionBackup.hs
@@ -0,0 +1,190 @@
+{-# 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.Nimble.Types.StreamingSessionBackup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionBackup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StreamingSessionState
+import Amazonka.Nimble.Types.StreamingSessionStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the streaming session backup.
+--
+-- /See:/ 'newStreamingSessionBackup' smart constructor.
+data StreamingSessionBackup = StreamingSessionBackup'
+  { -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+    -- uniquely identifies it. ARNs are unique across all Regions.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the backup.
+    backupId :: Prelude.Maybe Prelude.Text,
+    -- | The ISO timestamp in for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the launch profile which allowed the backups for the streaming
+    -- session.
+    launchProfileId :: Prelude.Maybe Prelude.Text,
+    -- | The user ID of the user that owns the streaming session.
+    ownedBy :: Prelude.Maybe Prelude.Text,
+    -- | The streaming session ID for the @StreamingSessionBackup@.
+    sessionId :: Prelude.Maybe Prelude.Text,
+    state :: Prelude.Maybe StreamingSessionState,
+    -- | The status code.
+    statusCode :: Prelude.Maybe StreamingSessionStatusCode,
+    -- | The status message for the streaming session backup.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingSessionBackup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'streamingSessionBackup_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+--
+-- 'backupId', 'streamingSessionBackup_backupId' - The ID of the backup.
+--
+-- 'createdAt', 'streamingSessionBackup_createdAt' - The ISO timestamp in for when the resource was created.
+--
+-- 'launchProfileId', 'streamingSessionBackup_launchProfileId' - The ID of the launch profile which allowed the backups for the streaming
+-- session.
+--
+-- 'ownedBy', 'streamingSessionBackup_ownedBy' - The user ID of the user that owns the streaming session.
+--
+-- 'sessionId', 'streamingSessionBackup_sessionId' - The streaming session ID for the @StreamingSessionBackup@.
+--
+-- 'state', 'streamingSessionBackup_state' - Undocumented member.
+--
+-- 'statusCode', 'streamingSessionBackup_statusCode' - The status code.
+--
+-- 'statusMessage', 'streamingSessionBackup_statusMessage' - The status message for the streaming session backup.
+--
+-- 'tags', 'streamingSessionBackup_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+newStreamingSessionBackup ::
+  StreamingSessionBackup
+newStreamingSessionBackup =
+  StreamingSessionBackup'
+    { arn = Prelude.Nothing,
+      backupId = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      launchProfileId = Prelude.Nothing,
+      ownedBy = Prelude.Nothing,
+      sessionId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+streamingSessionBackup_arn :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.Text)
+streamingSessionBackup_arn = Lens.lens (\StreamingSessionBackup' {arn} -> arn) (\s@StreamingSessionBackup' {} a -> s {arn = a} :: StreamingSessionBackup)
+
+-- | The ID of the backup.
+streamingSessionBackup_backupId :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.Text)
+streamingSessionBackup_backupId = Lens.lens (\StreamingSessionBackup' {backupId} -> backupId) (\s@StreamingSessionBackup' {} a -> s {backupId = a} :: StreamingSessionBackup)
+
+-- | The ISO timestamp in for when the resource was created.
+streamingSessionBackup_createdAt :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.UTCTime)
+streamingSessionBackup_createdAt = Lens.lens (\StreamingSessionBackup' {createdAt} -> createdAt) (\s@StreamingSessionBackup' {} a -> s {createdAt = a} :: StreamingSessionBackup) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the launch profile which allowed the backups for the streaming
+-- session.
+streamingSessionBackup_launchProfileId :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.Text)
+streamingSessionBackup_launchProfileId = Lens.lens (\StreamingSessionBackup' {launchProfileId} -> launchProfileId) (\s@StreamingSessionBackup' {} a -> s {launchProfileId = a} :: StreamingSessionBackup)
+
+-- | The user ID of the user that owns the streaming session.
+streamingSessionBackup_ownedBy :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.Text)
+streamingSessionBackup_ownedBy = Lens.lens (\StreamingSessionBackup' {ownedBy} -> ownedBy) (\s@StreamingSessionBackup' {} a -> s {ownedBy = a} :: StreamingSessionBackup)
+
+-- | The streaming session ID for the @StreamingSessionBackup@.
+streamingSessionBackup_sessionId :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.Text)
+streamingSessionBackup_sessionId = Lens.lens (\StreamingSessionBackup' {sessionId} -> sessionId) (\s@StreamingSessionBackup' {} a -> s {sessionId = a} :: StreamingSessionBackup)
+
+-- | Undocumented member.
+streamingSessionBackup_state :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe StreamingSessionState)
+streamingSessionBackup_state = Lens.lens (\StreamingSessionBackup' {state} -> state) (\s@StreamingSessionBackup' {} a -> s {state = a} :: StreamingSessionBackup)
+
+-- | The status code.
+streamingSessionBackup_statusCode :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe StreamingSessionStatusCode)
+streamingSessionBackup_statusCode = Lens.lens (\StreamingSessionBackup' {statusCode} -> statusCode) (\s@StreamingSessionBackup' {} a -> s {statusCode = a} :: StreamingSessionBackup)
+
+-- | The status message for the streaming session backup.
+streamingSessionBackup_statusMessage :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe Prelude.Text)
+streamingSessionBackup_statusMessage = Lens.lens (\StreamingSessionBackup' {statusMessage} -> statusMessage) (\s@StreamingSessionBackup' {} a -> s {statusMessage = a} :: StreamingSessionBackup)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+streamingSessionBackup_tags :: Lens.Lens' StreamingSessionBackup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+streamingSessionBackup_tags = Lens.lens (\StreamingSessionBackup' {tags} -> tags) (\s@StreamingSessionBackup' {} a -> s {tags = a} :: StreamingSessionBackup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON StreamingSessionBackup where
+  parseJSON =
+    Data.withObject
+      "StreamingSessionBackup"
+      ( \x ->
+          StreamingSessionBackup'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "backupId")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "launchProfileId")
+            Prelude.<*> (x Data..:? "ownedBy")
+            Prelude.<*> (x Data..:? "sessionId")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable StreamingSessionBackup where
+  hashWithSalt _salt StreamingSessionBackup' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` backupId
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` ownedBy
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData StreamingSessionBackup where
+  rnf StreamingSessionBackup' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf backupId
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf ownedBy
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionState.hs b/gen/Amazonka/Nimble/Types/StreamingSessionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionState.hs
@@ -0,0 +1,117 @@
+{-# 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.Nimble.Types.StreamingSessionState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionState
+  ( StreamingSessionState
+      ( ..,
+        StreamingSessionState_CREATE_FAILED,
+        StreamingSessionState_CREATE_IN_PROGRESS,
+        StreamingSessionState_DELETED,
+        StreamingSessionState_DELETE_FAILED,
+        StreamingSessionState_DELETE_IN_PROGRESS,
+        StreamingSessionState_READY,
+        StreamingSessionState_START_FAILED,
+        StreamingSessionState_START_IN_PROGRESS,
+        StreamingSessionState_STOPPED,
+        StreamingSessionState_STOP_FAILED,
+        StreamingSessionState_STOP_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The streaming session state.
+newtype StreamingSessionState = StreamingSessionState'
+  { fromStreamingSessionState ::
+      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 StreamingSessionState_CREATE_FAILED :: StreamingSessionState
+pattern StreamingSessionState_CREATE_FAILED = StreamingSessionState' "CREATE_FAILED"
+
+pattern StreamingSessionState_CREATE_IN_PROGRESS :: StreamingSessionState
+pattern StreamingSessionState_CREATE_IN_PROGRESS = StreamingSessionState' "CREATE_IN_PROGRESS"
+
+pattern StreamingSessionState_DELETED :: StreamingSessionState
+pattern StreamingSessionState_DELETED = StreamingSessionState' "DELETED"
+
+pattern StreamingSessionState_DELETE_FAILED :: StreamingSessionState
+pattern StreamingSessionState_DELETE_FAILED = StreamingSessionState' "DELETE_FAILED"
+
+pattern StreamingSessionState_DELETE_IN_PROGRESS :: StreamingSessionState
+pattern StreamingSessionState_DELETE_IN_PROGRESS = StreamingSessionState' "DELETE_IN_PROGRESS"
+
+pattern StreamingSessionState_READY :: StreamingSessionState
+pattern StreamingSessionState_READY = StreamingSessionState' "READY"
+
+pattern StreamingSessionState_START_FAILED :: StreamingSessionState
+pattern StreamingSessionState_START_FAILED = StreamingSessionState' "START_FAILED"
+
+pattern StreamingSessionState_START_IN_PROGRESS :: StreamingSessionState
+pattern StreamingSessionState_START_IN_PROGRESS = StreamingSessionState' "START_IN_PROGRESS"
+
+pattern StreamingSessionState_STOPPED :: StreamingSessionState
+pattern StreamingSessionState_STOPPED = StreamingSessionState' "STOPPED"
+
+pattern StreamingSessionState_STOP_FAILED :: StreamingSessionState
+pattern StreamingSessionState_STOP_FAILED = StreamingSessionState' "STOP_FAILED"
+
+pattern StreamingSessionState_STOP_IN_PROGRESS :: StreamingSessionState
+pattern StreamingSessionState_STOP_IN_PROGRESS = StreamingSessionState' "STOP_IN_PROGRESS"
+
+{-# COMPLETE
+  StreamingSessionState_CREATE_FAILED,
+  StreamingSessionState_CREATE_IN_PROGRESS,
+  StreamingSessionState_DELETED,
+  StreamingSessionState_DELETE_FAILED,
+  StreamingSessionState_DELETE_IN_PROGRESS,
+  StreamingSessionState_READY,
+  StreamingSessionState_START_FAILED,
+  StreamingSessionState_START_IN_PROGRESS,
+  StreamingSessionState_STOPPED,
+  StreamingSessionState_STOP_FAILED,
+  StreamingSessionState_STOP_IN_PROGRESS,
+  StreamingSessionState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionStatusCode.hs b/gen/Amazonka/Nimble/Types/StreamingSessionStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionStatusCode.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingSessionStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionStatusCode
+  ( StreamingSessionStatusCode
+      ( ..,
+        StreamingSessionStatusCode_ACTIVE_DIRECTORY_DOMAIN_JOIN_ERROR,
+        StreamingSessionStatusCode_AMI_VALIDATION_ERROR,
+        StreamingSessionStatusCode_DECRYPT_STREAMING_IMAGE_ERROR,
+        StreamingSessionStatusCode_INITIALIZATION_SCRIPT_ERROR,
+        StreamingSessionStatusCode_INSUFFICIENT_CAPACITY,
+        StreamingSessionStatusCode_INTERNAL_ERROR,
+        StreamingSessionStatusCode_NETWORK_CONNECTION_ERROR,
+        StreamingSessionStatusCode_NETWORK_INTERFACE_ERROR,
+        StreamingSessionStatusCode_STREAMING_SESSION_CREATE_IN_PROGRESS,
+        StreamingSessionStatusCode_STREAMING_SESSION_DELETED,
+        StreamingSessionStatusCode_STREAMING_SESSION_DELETE_IN_PROGRESS,
+        StreamingSessionStatusCode_STREAMING_SESSION_READY,
+        StreamingSessionStatusCode_STREAMING_SESSION_STARTED,
+        StreamingSessionStatusCode_STREAMING_SESSION_START_IN_PROGRESS,
+        StreamingSessionStatusCode_STREAMING_SESSION_STOPPED,
+        StreamingSessionStatusCode_STREAMING_SESSION_STOP_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingSessionStatusCode = StreamingSessionStatusCode'
+  { fromStreamingSessionStatusCode ::
+      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 StreamingSessionStatusCode_ACTIVE_DIRECTORY_DOMAIN_JOIN_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_ACTIVE_DIRECTORY_DOMAIN_JOIN_ERROR = StreamingSessionStatusCode' "ACTIVE_DIRECTORY_DOMAIN_JOIN_ERROR"
+
+pattern StreamingSessionStatusCode_AMI_VALIDATION_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_AMI_VALIDATION_ERROR = StreamingSessionStatusCode' "AMI_VALIDATION_ERROR"
+
+pattern StreamingSessionStatusCode_DECRYPT_STREAMING_IMAGE_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_DECRYPT_STREAMING_IMAGE_ERROR = StreamingSessionStatusCode' "DECRYPT_STREAMING_IMAGE_ERROR"
+
+pattern StreamingSessionStatusCode_INITIALIZATION_SCRIPT_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_INITIALIZATION_SCRIPT_ERROR = StreamingSessionStatusCode' "INITIALIZATION_SCRIPT_ERROR"
+
+pattern StreamingSessionStatusCode_INSUFFICIENT_CAPACITY :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_INSUFFICIENT_CAPACITY = StreamingSessionStatusCode' "INSUFFICIENT_CAPACITY"
+
+pattern StreamingSessionStatusCode_INTERNAL_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_INTERNAL_ERROR = StreamingSessionStatusCode' "INTERNAL_ERROR"
+
+pattern StreamingSessionStatusCode_NETWORK_CONNECTION_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_NETWORK_CONNECTION_ERROR = StreamingSessionStatusCode' "NETWORK_CONNECTION_ERROR"
+
+pattern StreamingSessionStatusCode_NETWORK_INTERFACE_ERROR :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_NETWORK_INTERFACE_ERROR = StreamingSessionStatusCode' "NETWORK_INTERFACE_ERROR"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_CREATE_IN_PROGRESS :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_CREATE_IN_PROGRESS = StreamingSessionStatusCode' "STREAMING_SESSION_CREATE_IN_PROGRESS"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_DELETED :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_DELETED = StreamingSessionStatusCode' "STREAMING_SESSION_DELETED"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_DELETE_IN_PROGRESS :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_DELETE_IN_PROGRESS = StreamingSessionStatusCode' "STREAMING_SESSION_DELETE_IN_PROGRESS"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_READY :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_READY = StreamingSessionStatusCode' "STREAMING_SESSION_READY"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_STARTED :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_STARTED = StreamingSessionStatusCode' "STREAMING_SESSION_STARTED"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_START_IN_PROGRESS :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_START_IN_PROGRESS = StreamingSessionStatusCode' "STREAMING_SESSION_START_IN_PROGRESS"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_STOPPED :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_STOPPED = StreamingSessionStatusCode' "STREAMING_SESSION_STOPPED"
+
+pattern StreamingSessionStatusCode_STREAMING_SESSION_STOP_IN_PROGRESS :: StreamingSessionStatusCode
+pattern StreamingSessionStatusCode_STREAMING_SESSION_STOP_IN_PROGRESS = StreamingSessionStatusCode' "STREAMING_SESSION_STOP_IN_PROGRESS"
+
+{-# COMPLETE
+  StreamingSessionStatusCode_ACTIVE_DIRECTORY_DOMAIN_JOIN_ERROR,
+  StreamingSessionStatusCode_AMI_VALIDATION_ERROR,
+  StreamingSessionStatusCode_DECRYPT_STREAMING_IMAGE_ERROR,
+  StreamingSessionStatusCode_INITIALIZATION_SCRIPT_ERROR,
+  StreamingSessionStatusCode_INSUFFICIENT_CAPACITY,
+  StreamingSessionStatusCode_INTERNAL_ERROR,
+  StreamingSessionStatusCode_NETWORK_CONNECTION_ERROR,
+  StreamingSessionStatusCode_NETWORK_INTERFACE_ERROR,
+  StreamingSessionStatusCode_STREAMING_SESSION_CREATE_IN_PROGRESS,
+  StreamingSessionStatusCode_STREAMING_SESSION_DELETED,
+  StreamingSessionStatusCode_STREAMING_SESSION_DELETE_IN_PROGRESS,
+  StreamingSessionStatusCode_STREAMING_SESSION_READY,
+  StreamingSessionStatusCode_STREAMING_SESSION_STARTED,
+  StreamingSessionStatusCode_STREAMING_SESSION_START_IN_PROGRESS,
+  StreamingSessionStatusCode_STREAMING_SESSION_STOPPED,
+  StreamingSessionStatusCode_STREAMING_SESSION_STOP_IN_PROGRESS,
+  StreamingSessionStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionStorageMode.hs b/gen/Amazonka/Nimble/Types/StreamingSessionStorageMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionStorageMode.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingSessionStorageMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionStorageMode
+  ( StreamingSessionStorageMode
+      ( ..,
+        StreamingSessionStorageMode_UPLOAD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingSessionStorageMode = StreamingSessionStorageMode'
+  { fromStreamingSessionStorageMode ::
+      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 StreamingSessionStorageMode_UPLOAD :: StreamingSessionStorageMode
+pattern StreamingSessionStorageMode_UPLOAD = StreamingSessionStorageMode' "UPLOAD"
+
+{-# COMPLETE
+  StreamingSessionStorageMode_UPLOAD,
+  StreamingSessionStorageMode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionStorageRoot.hs b/gen/Amazonka/Nimble/Types/StreamingSessionStorageRoot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionStorageRoot.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingSessionStorageRoot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionStorageRoot 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 upload storage root location (folder) on streaming workstations
+-- where files are uploaded.
+--
+-- /See:/ 'newStreamingSessionStorageRoot' smart constructor.
+data StreamingSessionStorageRoot = StreamingSessionStorageRoot'
+  { -- | The folder path in Linux workstations where files are uploaded.
+    linux :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The folder path in Windows workstations where files are uploaded.
+    windows :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingSessionStorageRoot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'linux', 'streamingSessionStorageRoot_linux' - The folder path in Linux workstations where files are uploaded.
+--
+-- 'windows', 'streamingSessionStorageRoot_windows' - The folder path in Windows workstations where files are uploaded.
+newStreamingSessionStorageRoot ::
+  StreamingSessionStorageRoot
+newStreamingSessionStorageRoot =
+  StreamingSessionStorageRoot'
+    { linux =
+        Prelude.Nothing,
+      windows = Prelude.Nothing
+    }
+
+-- | The folder path in Linux workstations where files are uploaded.
+streamingSessionStorageRoot_linux :: Lens.Lens' StreamingSessionStorageRoot (Prelude.Maybe Prelude.Text)
+streamingSessionStorageRoot_linux = Lens.lens (\StreamingSessionStorageRoot' {linux} -> linux) (\s@StreamingSessionStorageRoot' {} a -> s {linux = a} :: StreamingSessionStorageRoot) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The folder path in Windows workstations where files are uploaded.
+streamingSessionStorageRoot_windows :: Lens.Lens' StreamingSessionStorageRoot (Prelude.Maybe Prelude.Text)
+streamingSessionStorageRoot_windows = Lens.lens (\StreamingSessionStorageRoot' {windows} -> windows) (\s@StreamingSessionStorageRoot' {} a -> s {windows = a} :: StreamingSessionStorageRoot) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON StreamingSessionStorageRoot where
+  parseJSON =
+    Data.withObject
+      "StreamingSessionStorageRoot"
+      ( \x ->
+          StreamingSessionStorageRoot'
+            Prelude.<$> (x Data..:? "linux")
+            Prelude.<*> (x Data..:? "windows")
+      )
+
+instance Prelude.Hashable StreamingSessionStorageRoot where
+  hashWithSalt _salt StreamingSessionStorageRoot' {..} =
+    _salt
+      `Prelude.hashWithSalt` linux
+      `Prelude.hashWithSalt` windows
+
+instance Prelude.NFData StreamingSessionStorageRoot where
+  rnf StreamingSessionStorageRoot' {..} =
+    Prelude.rnf linux `Prelude.seq` Prelude.rnf windows
+
+instance Data.ToJSON StreamingSessionStorageRoot where
+  toJSON StreamingSessionStorageRoot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("linux" Data..=) Prelude.<$> linux,
+            ("windows" Data..=) Prelude.<$> windows
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionStream.hs b/gen/Amazonka/Nimble/Types/StreamingSessionStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionStream.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingSessionStream
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionStream where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StreamingSessionStreamState
+import Amazonka.Nimble.Types.StreamingSessionStreamStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | A stream is an active connection to a streaming session, enabling a
+-- studio user to control the streaming session using a compatible client.
+-- Streaming session streams are compatible with the NICE DCV web client,
+-- included in the Nimble Studio portal, or the NICE DCV desktop client.
+--
+-- /See:/ 'newStreamingSessionStream' smart constructor.
+data StreamingSessionStream = StreamingSessionStream'
+  { -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that created the streaming session stream.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The ISO timestamp in seconds for when the resource expires.
+    expiresAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that owns the streaming session. The user that
+    -- owns the session will be logging into the session and interacting with
+    -- the virtual workstation.
+    ownedBy :: Prelude.Maybe Prelude.Text,
+    -- | The current state.
+    state :: Prelude.Maybe StreamingSessionStreamState,
+    -- | The streaming session stream status code.
+    statusCode :: Prelude.Maybe StreamingSessionStreamStatusCode,
+    -- | The stream ID.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The URL to connect to this stream using the DCV client.
+    url :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingSessionStream' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'streamingSessionStream_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'createdBy', 'streamingSessionStream_createdBy' - The user ID of the user that created the streaming session stream.
+--
+-- 'expiresAt', 'streamingSessionStream_expiresAt' - The ISO timestamp in seconds for when the resource expires.
+--
+-- 'ownedBy', 'streamingSessionStream_ownedBy' - The user ID of the user that owns the streaming session. The user that
+-- owns the session will be logging into the session and interacting with
+-- the virtual workstation.
+--
+-- 'state', 'streamingSessionStream_state' - The current state.
+--
+-- 'statusCode', 'streamingSessionStream_statusCode' - The streaming session stream status code.
+--
+-- 'streamId', 'streamingSessionStream_streamId' - The stream ID.
+--
+-- 'url', 'streamingSessionStream_url' - The URL to connect to this stream using the DCV client.
+newStreamingSessionStream ::
+  StreamingSessionStream
+newStreamingSessionStream =
+  StreamingSessionStream'
+    { createdAt =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      expiresAt = Prelude.Nothing,
+      ownedBy = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The ISO timestamp in seconds for when the resource was created.
+streamingSessionStream_createdAt :: Lens.Lens' StreamingSessionStream (Prelude.Maybe Prelude.UTCTime)
+streamingSessionStream_createdAt = Lens.lens (\StreamingSessionStream' {createdAt} -> createdAt) (\s@StreamingSessionStream' {} a -> s {createdAt = a} :: StreamingSessionStream) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that created the streaming session stream.
+streamingSessionStream_createdBy :: Lens.Lens' StreamingSessionStream (Prelude.Maybe Prelude.Text)
+streamingSessionStream_createdBy = Lens.lens (\StreamingSessionStream' {createdBy} -> createdBy) (\s@StreamingSessionStream' {} a -> s {createdBy = a} :: StreamingSessionStream)
+
+-- | The ISO timestamp in seconds for when the resource expires.
+streamingSessionStream_expiresAt :: Lens.Lens' StreamingSessionStream (Prelude.Maybe Prelude.UTCTime)
+streamingSessionStream_expiresAt = Lens.lens (\StreamingSessionStream' {expiresAt} -> expiresAt) (\s@StreamingSessionStream' {} a -> s {expiresAt = a} :: StreamingSessionStream) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that owns the streaming session. The user that
+-- owns the session will be logging into the session and interacting with
+-- the virtual workstation.
+streamingSessionStream_ownedBy :: Lens.Lens' StreamingSessionStream (Prelude.Maybe Prelude.Text)
+streamingSessionStream_ownedBy = Lens.lens (\StreamingSessionStream' {ownedBy} -> ownedBy) (\s@StreamingSessionStream' {} a -> s {ownedBy = a} :: StreamingSessionStream)
+
+-- | The current state.
+streamingSessionStream_state :: Lens.Lens' StreamingSessionStream (Prelude.Maybe StreamingSessionStreamState)
+streamingSessionStream_state = Lens.lens (\StreamingSessionStream' {state} -> state) (\s@StreamingSessionStream' {} a -> s {state = a} :: StreamingSessionStream)
+
+-- | The streaming session stream status code.
+streamingSessionStream_statusCode :: Lens.Lens' StreamingSessionStream (Prelude.Maybe StreamingSessionStreamStatusCode)
+streamingSessionStream_statusCode = Lens.lens (\StreamingSessionStream' {statusCode} -> statusCode) (\s@StreamingSessionStream' {} a -> s {statusCode = a} :: StreamingSessionStream)
+
+-- | The stream ID.
+streamingSessionStream_streamId :: Lens.Lens' StreamingSessionStream (Prelude.Maybe Prelude.Text)
+streamingSessionStream_streamId = Lens.lens (\StreamingSessionStream' {streamId} -> streamId) (\s@StreamingSessionStream' {} a -> s {streamId = a} :: StreamingSessionStream)
+
+-- | The URL to connect to this stream using the DCV client.
+streamingSessionStream_url :: Lens.Lens' StreamingSessionStream (Prelude.Maybe Prelude.Text)
+streamingSessionStream_url = Lens.lens (\StreamingSessionStream' {url} -> url) (\s@StreamingSessionStream' {} a -> s {url = a} :: StreamingSessionStream) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON StreamingSessionStream where
+  parseJSON =
+    Data.withObject
+      "StreamingSessionStream"
+      ( \x ->
+          StreamingSessionStream'
+            Prelude.<$> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "createdBy")
+            Prelude.<*> (x Data..:? "expiresAt")
+            Prelude.<*> (x Data..:? "ownedBy")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "streamId")
+            Prelude.<*> (x Data..:? "url")
+      )
+
+instance Prelude.Hashable StreamingSessionStream where
+  hashWithSalt _salt StreamingSessionStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` expiresAt
+      `Prelude.hashWithSalt` ownedBy
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData StreamingSessionStream where
+  rnf StreamingSessionStream' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf expiresAt
+      `Prelude.seq` Prelude.rnf ownedBy
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf url
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionStreamState.hs b/gen/Amazonka/Nimble/Types/StreamingSessionStreamState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionStreamState.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingSessionStreamState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionStreamState
+  ( StreamingSessionStreamState
+      ( ..,
+        StreamingSessionStreamState_CREATE_FAILED,
+        StreamingSessionStreamState_CREATE_IN_PROGRESS,
+        StreamingSessionStreamState_DELETED,
+        StreamingSessionStreamState_DELETE_FAILED,
+        StreamingSessionStreamState_DELETE_IN_PROGRESS,
+        StreamingSessionStreamState_READY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingSessionStreamState = StreamingSessionStreamState'
+  { fromStreamingSessionStreamState ::
+      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 StreamingSessionStreamState_CREATE_FAILED :: StreamingSessionStreamState
+pattern StreamingSessionStreamState_CREATE_FAILED = StreamingSessionStreamState' "CREATE_FAILED"
+
+pattern StreamingSessionStreamState_CREATE_IN_PROGRESS :: StreamingSessionStreamState
+pattern StreamingSessionStreamState_CREATE_IN_PROGRESS = StreamingSessionStreamState' "CREATE_IN_PROGRESS"
+
+pattern StreamingSessionStreamState_DELETED :: StreamingSessionStreamState
+pattern StreamingSessionStreamState_DELETED = StreamingSessionStreamState' "DELETED"
+
+pattern StreamingSessionStreamState_DELETE_FAILED :: StreamingSessionStreamState
+pattern StreamingSessionStreamState_DELETE_FAILED = StreamingSessionStreamState' "DELETE_FAILED"
+
+pattern StreamingSessionStreamState_DELETE_IN_PROGRESS :: StreamingSessionStreamState
+pattern StreamingSessionStreamState_DELETE_IN_PROGRESS = StreamingSessionStreamState' "DELETE_IN_PROGRESS"
+
+pattern StreamingSessionStreamState_READY :: StreamingSessionStreamState
+pattern StreamingSessionStreamState_READY = StreamingSessionStreamState' "READY"
+
+{-# COMPLETE
+  StreamingSessionStreamState_CREATE_FAILED,
+  StreamingSessionStreamState_CREATE_IN_PROGRESS,
+  StreamingSessionStreamState_DELETED,
+  StreamingSessionStreamState_DELETE_FAILED,
+  StreamingSessionStreamState_DELETE_IN_PROGRESS,
+  StreamingSessionStreamState_READY,
+  StreamingSessionStreamState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StreamingSessionStreamStatusCode.hs b/gen/Amazonka/Nimble/Types/StreamingSessionStreamStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StreamingSessionStreamStatusCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StreamingSessionStreamStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StreamingSessionStreamStatusCode
+  ( StreamingSessionStreamStatusCode
+      ( ..,
+        StreamingSessionStreamStatusCode_INTERNAL_ERROR,
+        StreamingSessionStreamStatusCode_NETWORK_CONNECTION_ERROR,
+        StreamingSessionStreamStatusCode_STREAM_CREATE_IN_PROGRESS,
+        StreamingSessionStreamStatusCode_STREAM_DELETED,
+        StreamingSessionStreamStatusCode_STREAM_DELETE_IN_PROGRESS,
+        StreamingSessionStreamStatusCode_STREAM_READY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamingSessionStreamStatusCode = StreamingSessionStreamStatusCode'
+  { fromStreamingSessionStreamStatusCode ::
+      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 StreamingSessionStreamStatusCode_INTERNAL_ERROR :: StreamingSessionStreamStatusCode
+pattern StreamingSessionStreamStatusCode_INTERNAL_ERROR = StreamingSessionStreamStatusCode' "INTERNAL_ERROR"
+
+pattern StreamingSessionStreamStatusCode_NETWORK_CONNECTION_ERROR :: StreamingSessionStreamStatusCode
+pattern StreamingSessionStreamStatusCode_NETWORK_CONNECTION_ERROR = StreamingSessionStreamStatusCode' "NETWORK_CONNECTION_ERROR"
+
+pattern StreamingSessionStreamStatusCode_STREAM_CREATE_IN_PROGRESS :: StreamingSessionStreamStatusCode
+pattern StreamingSessionStreamStatusCode_STREAM_CREATE_IN_PROGRESS = StreamingSessionStreamStatusCode' "STREAM_CREATE_IN_PROGRESS"
+
+pattern StreamingSessionStreamStatusCode_STREAM_DELETED :: StreamingSessionStreamStatusCode
+pattern StreamingSessionStreamStatusCode_STREAM_DELETED = StreamingSessionStreamStatusCode' "STREAM_DELETED"
+
+pattern StreamingSessionStreamStatusCode_STREAM_DELETE_IN_PROGRESS :: StreamingSessionStreamStatusCode
+pattern StreamingSessionStreamStatusCode_STREAM_DELETE_IN_PROGRESS = StreamingSessionStreamStatusCode' "STREAM_DELETE_IN_PROGRESS"
+
+pattern StreamingSessionStreamStatusCode_STREAM_READY :: StreamingSessionStreamStatusCode
+pattern StreamingSessionStreamStatusCode_STREAM_READY = StreamingSessionStreamStatusCode' "STREAM_READY"
+
+{-# COMPLETE
+  StreamingSessionStreamStatusCode_INTERNAL_ERROR,
+  StreamingSessionStreamStatusCode_NETWORK_CONNECTION_ERROR,
+  StreamingSessionStreamStatusCode_STREAM_CREATE_IN_PROGRESS,
+  StreamingSessionStreamStatusCode_STREAM_DELETED,
+  StreamingSessionStreamStatusCode_STREAM_DELETE_IN_PROGRESS,
+  StreamingSessionStreamStatusCode_STREAM_READY,
+  StreamingSessionStreamStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/Studio.hs b/gen/Amazonka/Nimble/Types/Studio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/Studio.hs
@@ -0,0 +1,298 @@
+{-# 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.Nimble.Types.Studio
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.Studio where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StudioEncryptionConfiguration
+import Amazonka.Nimble.Types.StudioState
+import Amazonka.Nimble.Types.StudioStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a studio resource.
+--
+-- A studio is the core resource used with Nimble Studio. You must create a
+-- studio first, before any other resource type can be created. All other
+-- resources you create and manage in Nimble Studio are contained within a
+-- studio.
+--
+-- When creating a studio, you must provides two IAM roles for use with the
+-- Nimble Studio portal. These roles are assumed by your users when they
+-- log in to the Nimble Studio portal via IAM Identity Center and your
+-- identity source.
+--
+-- The user role must have the @AmazonNimbleStudio-StudioUser@ managed
+-- policy attached for the portal to function properly.
+--
+-- The admin role must have the @AmazonNimbleStudio-StudioAdmin@ managed
+-- policy attached for the portal to function properly.
+--
+-- Your studio roles must trust the @identity.nimble.amazonaws.com@ service
+-- principal to function properly.
+--
+-- /See:/ 'newStudio' smart constructor.
+data Studio = Studio'
+  { -- | The IAM role that studio admins assume when logging in to the Nimble
+    -- Studio portal.
+    adminRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+    -- uniquely identifies it. ARNs are unique across all Regions.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | A friendly name for the studio.
+    displayName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The Amazon Web Services Region where the studio resource is located.
+    homeRegion :: Prelude.Maybe Prelude.Text,
+    -- | The IAM Identity Center application client ID used to integrate with IAM
+    -- Identity Center. This ID allows IAM Identity Center users to log in to
+    -- Nimble Studio portal.
+    ssoClientId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the studio resource.
+    state :: Prelude.Maybe StudioState,
+    -- | Status codes that provide additional detail on the studio state.
+    statusCode :: Prelude.Maybe StudioStatusCode,
+    -- | Additional detail on the studio state.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Configuration of the encryption method that is used for the studio.
+    studioEncryptionConfiguration :: Prelude.Maybe StudioEncryptionConfiguration,
+    -- | The unique identifier for a studio resource. In Nimble Studio, all other
+    -- resources are contained in a studio resource.
+    studioId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the studio, as included in the URL when accessing it in the
+    -- Nimble Studio portal.
+    studioName :: Prelude.Maybe Prelude.Text,
+    -- | The address of the web page for the studio.
+    studioUrl :: Prelude.Maybe Prelude.Text,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ISO timestamp in seconds for when the resource was updated.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The IAM role that studio users assume when logging in to the Nimble
+    -- Studio portal.
+    userRoleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Studio' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adminRoleArn', 'studio_adminRoleArn' - The IAM role that studio admins assume when logging in to the Nimble
+-- Studio portal.
+--
+-- 'arn', 'studio_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+--
+-- 'createdAt', 'studio_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'displayName', 'studio_displayName' - A friendly name for the studio.
+--
+-- 'homeRegion', 'studio_homeRegion' - The Amazon Web Services Region where the studio resource is located.
+--
+-- 'ssoClientId', 'studio_ssoClientId' - The IAM Identity Center application client ID used to integrate with IAM
+-- Identity Center. This ID allows IAM Identity Center users to log in to
+-- Nimble Studio portal.
+--
+-- 'state', 'studio_state' - The current state of the studio resource.
+--
+-- 'statusCode', 'studio_statusCode' - Status codes that provide additional detail on the studio state.
+--
+-- 'statusMessage', 'studio_statusMessage' - Additional detail on the studio state.
+--
+-- 'studioEncryptionConfiguration', 'studio_studioEncryptionConfiguration' - Configuration of the encryption method that is used for the studio.
+--
+-- 'studioId', 'studio_studioId' - The unique identifier for a studio resource. In Nimble Studio, all other
+-- resources are contained in a studio resource.
+--
+-- 'studioName', 'studio_studioName' - The name of the studio, as included in the URL when accessing it in the
+-- Nimble Studio portal.
+--
+-- 'studioUrl', 'studio_studioUrl' - The address of the web page for the studio.
+--
+-- 'tags', 'studio_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'updatedAt', 'studio_updatedAt' - The ISO timestamp in seconds for when the resource was updated.
+--
+-- 'userRoleArn', 'studio_userRoleArn' - The IAM role that studio users assume when logging in to the Nimble
+-- Studio portal.
+newStudio ::
+  Studio
+newStudio =
+  Studio'
+    { adminRoleArn = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      homeRegion = Prelude.Nothing,
+      ssoClientId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      studioEncryptionConfiguration = Prelude.Nothing,
+      studioId = Prelude.Nothing,
+      studioName = Prelude.Nothing,
+      studioUrl = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      userRoleArn = Prelude.Nothing
+    }
+
+-- | The IAM role that studio admins assume when logging in to the Nimble
+-- Studio portal.
+studio_adminRoleArn :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_adminRoleArn = Lens.lens (\Studio' {adminRoleArn} -> adminRoleArn) (\s@Studio' {} a -> s {adminRoleArn = a} :: Studio)
+
+-- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+studio_arn :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_arn = Lens.lens (\Studio' {arn} -> arn) (\s@Studio' {} a -> s {arn = a} :: Studio)
+
+-- | The ISO timestamp in seconds for when the resource was created.
+studio_createdAt :: Lens.Lens' Studio (Prelude.Maybe Prelude.UTCTime)
+studio_createdAt = Lens.lens (\Studio' {createdAt} -> createdAt) (\s@Studio' {} a -> s {createdAt = a} :: Studio) Prelude.. Lens.mapping Data._Time
+
+-- | A friendly name for the studio.
+studio_displayName :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_displayName = Lens.lens (\Studio' {displayName} -> displayName) (\s@Studio' {} a -> s {displayName = a} :: Studio) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The Amazon Web Services Region where the studio resource is located.
+studio_homeRegion :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_homeRegion = Lens.lens (\Studio' {homeRegion} -> homeRegion) (\s@Studio' {} a -> s {homeRegion = a} :: Studio)
+
+-- | The IAM Identity Center application client ID used to integrate with IAM
+-- Identity Center. This ID allows IAM Identity Center users to log in to
+-- Nimble Studio portal.
+studio_ssoClientId :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_ssoClientId = Lens.lens (\Studio' {ssoClientId} -> ssoClientId) (\s@Studio' {} a -> s {ssoClientId = a} :: Studio)
+
+-- | The current state of the studio resource.
+studio_state :: Lens.Lens' Studio (Prelude.Maybe StudioState)
+studio_state = Lens.lens (\Studio' {state} -> state) (\s@Studio' {} a -> s {state = a} :: Studio)
+
+-- | Status codes that provide additional detail on the studio state.
+studio_statusCode :: Lens.Lens' Studio (Prelude.Maybe StudioStatusCode)
+studio_statusCode = Lens.lens (\Studio' {statusCode} -> statusCode) (\s@Studio' {} a -> s {statusCode = a} :: Studio)
+
+-- | Additional detail on the studio state.
+studio_statusMessage :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_statusMessage = Lens.lens (\Studio' {statusMessage} -> statusMessage) (\s@Studio' {} a -> s {statusMessage = a} :: Studio)
+
+-- | Configuration of the encryption method that is used for the studio.
+studio_studioEncryptionConfiguration :: Lens.Lens' Studio (Prelude.Maybe StudioEncryptionConfiguration)
+studio_studioEncryptionConfiguration = Lens.lens (\Studio' {studioEncryptionConfiguration} -> studioEncryptionConfiguration) (\s@Studio' {} a -> s {studioEncryptionConfiguration = a} :: Studio)
+
+-- | The unique identifier for a studio resource. In Nimble Studio, all other
+-- resources are contained in a studio resource.
+studio_studioId :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_studioId = Lens.lens (\Studio' {studioId} -> studioId) (\s@Studio' {} a -> s {studioId = a} :: Studio)
+
+-- | The name of the studio, as included in the URL when accessing it in the
+-- Nimble Studio portal.
+studio_studioName :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_studioName = Lens.lens (\Studio' {studioName} -> studioName) (\s@Studio' {} a -> s {studioName = a} :: Studio)
+
+-- | The address of the web page for the studio.
+studio_studioUrl :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_studioUrl = Lens.lens (\Studio' {studioUrl} -> studioUrl) (\s@Studio' {} a -> s {studioUrl = a} :: Studio)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+studio_tags :: Lens.Lens' Studio (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+studio_tags = Lens.lens (\Studio' {tags} -> tags) (\s@Studio' {} a -> s {tags = a} :: Studio) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ISO timestamp in seconds for when the resource was updated.
+studio_updatedAt :: Lens.Lens' Studio (Prelude.Maybe Prelude.UTCTime)
+studio_updatedAt = Lens.lens (\Studio' {updatedAt} -> updatedAt) (\s@Studio' {} a -> s {updatedAt = a} :: Studio) Prelude.. Lens.mapping Data._Time
+
+-- | The IAM role that studio users assume when logging in to the Nimble
+-- Studio portal.
+studio_userRoleArn :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text)
+studio_userRoleArn = Lens.lens (\Studio' {userRoleArn} -> userRoleArn) (\s@Studio' {} a -> s {userRoleArn = a} :: Studio)
+
+instance Data.FromJSON Studio where
+  parseJSON =
+    Data.withObject
+      "Studio"
+      ( \x ->
+          Studio'
+            Prelude.<$> (x Data..:? "adminRoleArn")
+            Prelude.<*> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "displayName")
+            Prelude.<*> (x Data..:? "homeRegion")
+            Prelude.<*> (x Data..:? "ssoClientId")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "studioEncryptionConfiguration")
+            Prelude.<*> (x Data..:? "studioId")
+            Prelude.<*> (x Data..:? "studioName")
+            Prelude.<*> (x Data..:? "studioUrl")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "updatedAt")
+            Prelude.<*> (x Data..:? "userRoleArn")
+      )
+
+instance Prelude.Hashable Studio where
+  hashWithSalt _salt Studio' {..} =
+    _salt
+      `Prelude.hashWithSalt` adminRoleArn
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` homeRegion
+      `Prelude.hashWithSalt` ssoClientId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` studioEncryptionConfiguration
+      `Prelude.hashWithSalt` studioId
+      `Prelude.hashWithSalt` studioName
+      `Prelude.hashWithSalt` studioUrl
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` userRoleArn
+
+instance Prelude.NFData Studio where
+  rnf Studio' {..} =
+    Prelude.rnf adminRoleArn
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf homeRegion
+      `Prelude.seq` Prelude.rnf ssoClientId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf studioEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf studioId
+      `Prelude.seq` Prelude.rnf studioName
+      `Prelude.seq` Prelude.rnf studioUrl
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf userRoleArn
diff --git a/gen/Amazonka/Nimble/Types/StudioComponent.hs b/gen/Amazonka/Nimble/Types/StudioComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponent.hs
@@ -0,0 +1,346 @@
+{-# 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.Nimble.Types.StudioComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.ScriptParameterKeyValue
+import Amazonka.Nimble.Types.StudioComponentConfiguration
+import Amazonka.Nimble.Types.StudioComponentInitializationScript
+import Amazonka.Nimble.Types.StudioComponentState
+import Amazonka.Nimble.Types.StudioComponentStatusCode
+import Amazonka.Nimble.Types.StudioComponentSubtype
+import Amazonka.Nimble.Types.StudioComponentType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A studio component represents a network resource to be used by a
+-- studio\'s users and workflows. A typical studio contains studio
+-- components for each of the following: render farm, Active Directory,
+-- licensing, and file system.
+--
+-- Access to a studio component is managed by specifying security groups
+-- for the resource, as well as its endpoint.
+--
+-- A studio component also has a set of initialization scripts that are
+-- returned by @GetLaunchProfileInitialization@. These initialization
+-- scripts run on streaming sessions when they start. They provide users
+-- with flexibility in controlling how the studio resources are configured
+-- on a streaming session.
+--
+-- /See:/ 'newStudioComponent' smart constructor.
+data StudioComponent = StudioComponent'
+  { -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+    -- uniquely identifies it. ARNs are unique across all Regions.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The configuration of the studio component, based on component type.
+    configuration :: Prelude.Maybe StudioComponentConfiguration,
+    -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that created the studio component.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | A human-readable description for the studio component resource.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The EC2 security groups that control access to the studio component.
+    ec2SecurityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Initialization scripts for studio components.
+    initializationScripts :: Prelude.Maybe [StudioComponentInitializationScript],
+    -- | A friendly name for the studio component resource.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | An IAM role attached to a Studio Component that gives the studio
+    -- component access to Amazon Web Services resources at anytime while the
+    -- instance is running.
+    runtimeRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Parameters for the studio component scripts.
+    scriptParameters :: Prelude.Maybe (Data.Sensitive [ScriptParameterKeyValue]),
+    -- | An IAM role attached to Studio Component when the system initialization
+    -- script runs which give the studio component access to Amazon Web
+    -- Services resources when the system initialization script runs.
+    secureInitializationRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The current state.
+    state :: Prelude.Maybe StudioComponentState,
+    -- | The status code.
+    statusCode :: Prelude.Maybe StudioComponentStatusCode,
+    -- | The status message for the studio component.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a studio component resource.
+    studioComponentId :: Prelude.Maybe Prelude.Text,
+    -- | The specific subtype of a studio component.
+    subtype :: Prelude.Maybe StudioComponentSubtype,
+    -- | A collection of labels, in the form of key-value pairs, that apply to
+    -- this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of the studio component.
+    type' :: Prelude.Maybe StudioComponentType,
+    -- | The ISO timestamp in seconds for when the resource was updated.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that most recently updated the resource.
+    updatedBy :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StudioComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'studioComponent_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+--
+-- 'configuration', 'studioComponent_configuration' - The configuration of the studio component, based on component type.
+--
+-- 'createdAt', 'studioComponent_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'createdBy', 'studioComponent_createdBy' - The user ID of the user that created the studio component.
+--
+-- 'description', 'studioComponent_description' - A human-readable description for the studio component resource.
+--
+-- 'ec2SecurityGroupIds', 'studioComponent_ec2SecurityGroupIds' - The EC2 security groups that control access to the studio component.
+--
+-- 'initializationScripts', 'studioComponent_initializationScripts' - Initialization scripts for studio components.
+--
+-- 'name', 'studioComponent_name' - A friendly name for the studio component resource.
+--
+-- 'runtimeRoleArn', 'studioComponent_runtimeRoleArn' - An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+--
+-- 'scriptParameters', 'studioComponent_scriptParameters' - Parameters for the studio component scripts.
+--
+-- 'secureInitializationRoleArn', 'studioComponent_secureInitializationRoleArn' - An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+--
+-- 'state', 'studioComponent_state' - The current state.
+--
+-- 'statusCode', 'studioComponent_statusCode' - The status code.
+--
+-- 'statusMessage', 'studioComponent_statusMessage' - The status message for the studio component.
+--
+-- 'studioComponentId', 'studioComponent_studioComponentId' - The unique identifier for a studio component resource.
+--
+-- 'subtype', 'studioComponent_subtype' - The specific subtype of a studio component.
+--
+-- 'tags', 'studioComponent_tags' - A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+--
+-- 'type'', 'studioComponent_type' - The type of the studio component.
+--
+-- 'updatedAt', 'studioComponent_updatedAt' - The ISO timestamp in seconds for when the resource was updated.
+--
+-- 'updatedBy', 'studioComponent_updatedBy' - The user ID of the user that most recently updated the resource.
+newStudioComponent ::
+  StudioComponent
+newStudioComponent =
+  StudioComponent'
+    { arn = Prelude.Nothing,
+      configuration = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ec2SecurityGroupIds = Prelude.Nothing,
+      initializationScripts = Prelude.Nothing,
+      name = Prelude.Nothing,
+      runtimeRoleArn = Prelude.Nothing,
+      scriptParameters = Prelude.Nothing,
+      secureInitializationRoleArn = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusCode = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      studioComponentId = Prelude.Nothing,
+      subtype = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      updatedBy = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) that is assigned to a studio resource and
+-- uniquely identifies it. ARNs are unique across all Regions.
+studioComponent_arn :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_arn = Lens.lens (\StudioComponent' {arn} -> arn) (\s@StudioComponent' {} a -> s {arn = a} :: StudioComponent)
+
+-- | The configuration of the studio component, based on component type.
+studioComponent_configuration :: Lens.Lens' StudioComponent (Prelude.Maybe StudioComponentConfiguration)
+studioComponent_configuration = Lens.lens (\StudioComponent' {configuration} -> configuration) (\s@StudioComponent' {} a -> s {configuration = a} :: StudioComponent)
+
+-- | The ISO timestamp in seconds for when the resource was created.
+studioComponent_createdAt :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.UTCTime)
+studioComponent_createdAt = Lens.lens (\StudioComponent' {createdAt} -> createdAt) (\s@StudioComponent' {} a -> s {createdAt = a} :: StudioComponent) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that created the studio component.
+studioComponent_createdBy :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_createdBy = Lens.lens (\StudioComponent' {createdBy} -> createdBy) (\s@StudioComponent' {} a -> s {createdBy = a} :: StudioComponent)
+
+-- | A human-readable description for the studio component resource.
+studioComponent_description :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_description = Lens.lens (\StudioComponent' {description} -> description) (\s@StudioComponent' {} a -> s {description = a} :: StudioComponent) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The EC2 security groups that control access to the studio component.
+studioComponent_ec2SecurityGroupIds :: Lens.Lens' StudioComponent (Prelude.Maybe [Prelude.Text])
+studioComponent_ec2SecurityGroupIds = Lens.lens (\StudioComponent' {ec2SecurityGroupIds} -> ec2SecurityGroupIds) (\s@StudioComponent' {} a -> s {ec2SecurityGroupIds = a} :: StudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | Initialization scripts for studio components.
+studioComponent_initializationScripts :: Lens.Lens' StudioComponent (Prelude.Maybe [StudioComponentInitializationScript])
+studioComponent_initializationScripts = Lens.lens (\StudioComponent' {initializationScripts} -> initializationScripts) (\s@StudioComponent' {} a -> s {initializationScripts = a} :: StudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | A friendly name for the studio component resource.
+studioComponent_name :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_name = Lens.lens (\StudioComponent' {name} -> name) (\s@StudioComponent' {} a -> s {name = a} :: StudioComponent) Prelude.. Lens.mapping Data._Sensitive
+
+-- | An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+studioComponent_runtimeRoleArn :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_runtimeRoleArn = Lens.lens (\StudioComponent' {runtimeRoleArn} -> runtimeRoleArn) (\s@StudioComponent' {} a -> s {runtimeRoleArn = a} :: StudioComponent)
+
+-- | Parameters for the studio component scripts.
+studioComponent_scriptParameters :: Lens.Lens' StudioComponent (Prelude.Maybe [ScriptParameterKeyValue])
+studioComponent_scriptParameters = Lens.lens (\StudioComponent' {scriptParameters} -> scriptParameters) (\s@StudioComponent' {} a -> s {scriptParameters = a} :: StudioComponent) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+studioComponent_secureInitializationRoleArn :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_secureInitializationRoleArn = Lens.lens (\StudioComponent' {secureInitializationRoleArn} -> secureInitializationRoleArn) (\s@StudioComponent' {} a -> s {secureInitializationRoleArn = a} :: StudioComponent)
+
+-- | The current state.
+studioComponent_state :: Lens.Lens' StudioComponent (Prelude.Maybe StudioComponentState)
+studioComponent_state = Lens.lens (\StudioComponent' {state} -> state) (\s@StudioComponent' {} a -> s {state = a} :: StudioComponent)
+
+-- | The status code.
+studioComponent_statusCode :: Lens.Lens' StudioComponent (Prelude.Maybe StudioComponentStatusCode)
+studioComponent_statusCode = Lens.lens (\StudioComponent' {statusCode} -> statusCode) (\s@StudioComponent' {} a -> s {statusCode = a} :: StudioComponent)
+
+-- | The status message for the studio component.
+studioComponent_statusMessage :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_statusMessage = Lens.lens (\StudioComponent' {statusMessage} -> statusMessage) (\s@StudioComponent' {} a -> s {statusMessage = a} :: StudioComponent)
+
+-- | The unique identifier for a studio component resource.
+studioComponent_studioComponentId :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_studioComponentId = Lens.lens (\StudioComponent' {studioComponentId} -> studioComponentId) (\s@StudioComponent' {} a -> s {studioComponentId = a} :: StudioComponent)
+
+-- | The specific subtype of a studio component.
+studioComponent_subtype :: Lens.Lens' StudioComponent (Prelude.Maybe StudioComponentSubtype)
+studioComponent_subtype = Lens.lens (\StudioComponent' {subtype} -> subtype) (\s@StudioComponent' {} a -> s {subtype = a} :: StudioComponent)
+
+-- | A collection of labels, in the form of key-value pairs, that apply to
+-- this resource.
+studioComponent_tags :: Lens.Lens' StudioComponent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+studioComponent_tags = Lens.lens (\StudioComponent' {tags} -> tags) (\s@StudioComponent' {} a -> s {tags = a} :: StudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of the studio component.
+studioComponent_type :: Lens.Lens' StudioComponent (Prelude.Maybe StudioComponentType)
+studioComponent_type = Lens.lens (\StudioComponent' {type'} -> type') (\s@StudioComponent' {} a -> s {type' = a} :: StudioComponent)
+
+-- | The ISO timestamp in seconds for when the resource was updated.
+studioComponent_updatedAt :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.UTCTime)
+studioComponent_updatedAt = Lens.lens (\StudioComponent' {updatedAt} -> updatedAt) (\s@StudioComponent' {} a -> s {updatedAt = a} :: StudioComponent) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that most recently updated the resource.
+studioComponent_updatedBy :: Lens.Lens' StudioComponent (Prelude.Maybe Prelude.Text)
+studioComponent_updatedBy = Lens.lens (\StudioComponent' {updatedBy} -> updatedBy) (\s@StudioComponent' {} a -> s {updatedBy = a} :: StudioComponent)
+
+instance Data.FromJSON StudioComponent where
+  parseJSON =
+    Data.withObject
+      "StudioComponent"
+      ( \x ->
+          StudioComponent'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "configuration")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "createdBy")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> ( x
+                            Data..:? "ec2SecurityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "initializationScripts"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "runtimeRoleArn")
+            Prelude.<*> ( x
+                            Data..:? "scriptParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "secureInitializationRoleArn")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusCode")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "studioComponentId")
+            Prelude.<*> (x Data..:? "subtype")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "updatedAt")
+            Prelude.<*> (x Data..:? "updatedBy")
+      )
+
+instance Prelude.Hashable StudioComponent where
+  hashWithSalt _salt StudioComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ec2SecurityGroupIds
+      `Prelude.hashWithSalt` initializationScripts
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` runtimeRoleArn
+      `Prelude.hashWithSalt` scriptParameters
+      `Prelude.hashWithSalt` secureInitializationRoleArn
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` studioComponentId
+      `Prelude.hashWithSalt` subtype
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` updatedBy
+
+instance Prelude.NFData StudioComponent where
+  rnf StudioComponent' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ec2SecurityGroupIds
+      `Prelude.seq` Prelude.rnf initializationScripts
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf runtimeRoleArn
+      `Prelude.seq` Prelude.rnf scriptParameters
+      `Prelude.seq` Prelude.rnf secureInitializationRoleArn
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf subtype
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf updatedBy
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentConfiguration.hs b/gen/Amazonka/Nimble/Types/StudioComponentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentConfiguration.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioComponentConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.ActiveDirectoryConfiguration
+import Amazonka.Nimble.Types.ComputeFarmConfiguration
+import Amazonka.Nimble.Types.LicenseServiceConfiguration
+import Amazonka.Nimble.Types.SharedFileSystemConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration of the studio component, based on component type.
+--
+-- /See:/ 'newStudioComponentConfiguration' smart constructor.
+data StudioComponentConfiguration = StudioComponentConfiguration'
+  { -- | The configuration for a Directory Service for Microsoft Active Directory
+    -- studio resource.
+    activeDirectoryConfiguration :: Prelude.Maybe ActiveDirectoryConfiguration,
+    -- | The configuration for a render farm that is associated with a studio
+    -- resource.
+    computeFarmConfiguration :: Prelude.Maybe ComputeFarmConfiguration,
+    -- | The configuration for a license service that is associated with a studio
+    -- resource.
+    licenseServiceConfiguration :: Prelude.Maybe LicenseServiceConfiguration,
+    -- | The configuration for a shared file storage system that is associated
+    -- with a studio resource.
+    sharedFileSystemConfiguration :: Prelude.Maybe SharedFileSystemConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StudioComponentConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeDirectoryConfiguration', 'studioComponentConfiguration_activeDirectoryConfiguration' - The configuration for a Directory Service for Microsoft Active Directory
+-- studio resource.
+--
+-- 'computeFarmConfiguration', 'studioComponentConfiguration_computeFarmConfiguration' - The configuration for a render farm that is associated with a studio
+-- resource.
+--
+-- 'licenseServiceConfiguration', 'studioComponentConfiguration_licenseServiceConfiguration' - The configuration for a license service that is associated with a studio
+-- resource.
+--
+-- 'sharedFileSystemConfiguration', 'studioComponentConfiguration_sharedFileSystemConfiguration' - The configuration for a shared file storage system that is associated
+-- with a studio resource.
+newStudioComponentConfiguration ::
+  StudioComponentConfiguration
+newStudioComponentConfiguration =
+  StudioComponentConfiguration'
+    { activeDirectoryConfiguration =
+        Prelude.Nothing,
+      computeFarmConfiguration = Prelude.Nothing,
+      licenseServiceConfiguration = Prelude.Nothing,
+      sharedFileSystemConfiguration =
+        Prelude.Nothing
+    }
+
+-- | The configuration for a Directory Service for Microsoft Active Directory
+-- studio resource.
+studioComponentConfiguration_activeDirectoryConfiguration :: Lens.Lens' StudioComponentConfiguration (Prelude.Maybe ActiveDirectoryConfiguration)
+studioComponentConfiguration_activeDirectoryConfiguration = Lens.lens (\StudioComponentConfiguration' {activeDirectoryConfiguration} -> activeDirectoryConfiguration) (\s@StudioComponentConfiguration' {} a -> s {activeDirectoryConfiguration = a} :: StudioComponentConfiguration)
+
+-- | The configuration for a render farm that is associated with a studio
+-- resource.
+studioComponentConfiguration_computeFarmConfiguration :: Lens.Lens' StudioComponentConfiguration (Prelude.Maybe ComputeFarmConfiguration)
+studioComponentConfiguration_computeFarmConfiguration = Lens.lens (\StudioComponentConfiguration' {computeFarmConfiguration} -> computeFarmConfiguration) (\s@StudioComponentConfiguration' {} a -> s {computeFarmConfiguration = a} :: StudioComponentConfiguration)
+
+-- | The configuration for a license service that is associated with a studio
+-- resource.
+studioComponentConfiguration_licenseServiceConfiguration :: Lens.Lens' StudioComponentConfiguration (Prelude.Maybe LicenseServiceConfiguration)
+studioComponentConfiguration_licenseServiceConfiguration = Lens.lens (\StudioComponentConfiguration' {licenseServiceConfiguration} -> licenseServiceConfiguration) (\s@StudioComponentConfiguration' {} a -> s {licenseServiceConfiguration = a} :: StudioComponentConfiguration)
+
+-- | The configuration for a shared file storage system that is associated
+-- with a studio resource.
+studioComponentConfiguration_sharedFileSystemConfiguration :: Lens.Lens' StudioComponentConfiguration (Prelude.Maybe SharedFileSystemConfiguration)
+studioComponentConfiguration_sharedFileSystemConfiguration = Lens.lens (\StudioComponentConfiguration' {sharedFileSystemConfiguration} -> sharedFileSystemConfiguration) (\s@StudioComponentConfiguration' {} a -> s {sharedFileSystemConfiguration = a} :: StudioComponentConfiguration)
+
+instance Data.FromJSON StudioComponentConfiguration where
+  parseJSON =
+    Data.withObject
+      "StudioComponentConfiguration"
+      ( \x ->
+          StudioComponentConfiguration'
+            Prelude.<$> (x Data..:? "activeDirectoryConfiguration")
+            Prelude.<*> (x Data..:? "computeFarmConfiguration")
+            Prelude.<*> (x Data..:? "licenseServiceConfiguration")
+            Prelude.<*> (x Data..:? "sharedFileSystemConfiguration")
+      )
+
+instance
+  Prelude.Hashable
+    StudioComponentConfiguration
+  where
+  hashWithSalt _salt StudioComponentConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` activeDirectoryConfiguration
+      `Prelude.hashWithSalt` computeFarmConfiguration
+      `Prelude.hashWithSalt` licenseServiceConfiguration
+      `Prelude.hashWithSalt` sharedFileSystemConfiguration
+
+instance Prelude.NFData StudioComponentConfiguration where
+  rnf StudioComponentConfiguration' {..} =
+    Prelude.rnf activeDirectoryConfiguration
+      `Prelude.seq` Prelude.rnf computeFarmConfiguration
+      `Prelude.seq` Prelude.rnf licenseServiceConfiguration
+      `Prelude.seq` Prelude.rnf sharedFileSystemConfiguration
+
+instance Data.ToJSON StudioComponentConfiguration where
+  toJSON StudioComponentConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("activeDirectoryConfiguration" Data..=)
+              Prelude.<$> activeDirectoryConfiguration,
+            ("computeFarmConfiguration" Data..=)
+              Prelude.<$> computeFarmConfiguration,
+            ("licenseServiceConfiguration" Data..=)
+              Prelude.<$> licenseServiceConfiguration,
+            ("sharedFileSystemConfiguration" Data..=)
+              Prelude.<$> sharedFileSystemConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentInitializationScript.hs b/gen/Amazonka/Nimble/Types/StudioComponentInitializationScript.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentInitializationScript.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioComponentInitializationScript
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentInitializationScript where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.LaunchProfilePlatform
+import Amazonka.Nimble.Types.StudioComponentInitializationScriptRunContext
+import qualified Amazonka.Prelude as Prelude
+
+-- | Initialization scripts for studio components.
+--
+-- /See:/ 'newStudioComponentInitializationScript' smart constructor.
+data StudioComponentInitializationScript = StudioComponentInitializationScript'
+  { -- | The version number of the protocol that is used by the launch profile.
+    -- The only valid version is \"2021-03-31\".
+    launchProfileProtocolVersion :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the initialization script, either Windows or Linux.
+    platform :: Prelude.Maybe LaunchProfilePlatform,
+    -- | The method to use when running the initialization script.
+    runContext :: Prelude.Maybe StudioComponentInitializationScriptRunContext,
+    -- | The initialization script.
+    script :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StudioComponentInitializationScript' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfileProtocolVersion', 'studioComponentInitializationScript_launchProfileProtocolVersion' - The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+--
+-- 'platform', 'studioComponentInitializationScript_platform' - The platform of the initialization script, either Windows or Linux.
+--
+-- 'runContext', 'studioComponentInitializationScript_runContext' - The method to use when running the initialization script.
+--
+-- 'script', 'studioComponentInitializationScript_script' - The initialization script.
+newStudioComponentInitializationScript ::
+  StudioComponentInitializationScript
+newStudioComponentInitializationScript =
+  StudioComponentInitializationScript'
+    { launchProfileProtocolVersion =
+        Prelude.Nothing,
+      platform = Prelude.Nothing,
+      runContext = Prelude.Nothing,
+      script = Prelude.Nothing
+    }
+
+-- | The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+studioComponentInitializationScript_launchProfileProtocolVersion :: Lens.Lens' StudioComponentInitializationScript (Prelude.Maybe Prelude.Text)
+studioComponentInitializationScript_launchProfileProtocolVersion = Lens.lens (\StudioComponentInitializationScript' {launchProfileProtocolVersion} -> launchProfileProtocolVersion) (\s@StudioComponentInitializationScript' {} a -> s {launchProfileProtocolVersion = a} :: StudioComponentInitializationScript)
+
+-- | The platform of the initialization script, either Windows or Linux.
+studioComponentInitializationScript_platform :: Lens.Lens' StudioComponentInitializationScript (Prelude.Maybe LaunchProfilePlatform)
+studioComponentInitializationScript_platform = Lens.lens (\StudioComponentInitializationScript' {platform} -> platform) (\s@StudioComponentInitializationScript' {} a -> s {platform = a} :: StudioComponentInitializationScript)
+
+-- | The method to use when running the initialization script.
+studioComponentInitializationScript_runContext :: Lens.Lens' StudioComponentInitializationScript (Prelude.Maybe StudioComponentInitializationScriptRunContext)
+studioComponentInitializationScript_runContext = Lens.lens (\StudioComponentInitializationScript' {runContext} -> runContext) (\s@StudioComponentInitializationScript' {} a -> s {runContext = a} :: StudioComponentInitializationScript)
+
+-- | The initialization script.
+studioComponentInitializationScript_script :: Lens.Lens' StudioComponentInitializationScript (Prelude.Maybe Prelude.Text)
+studioComponentInitializationScript_script = Lens.lens (\StudioComponentInitializationScript' {script} -> script) (\s@StudioComponentInitializationScript' {} a -> s {script = a} :: StudioComponentInitializationScript) Prelude.. Lens.mapping Data._Sensitive
+
+instance
+  Data.FromJSON
+    StudioComponentInitializationScript
+  where
+  parseJSON =
+    Data.withObject
+      "StudioComponentInitializationScript"
+      ( \x ->
+          StudioComponentInitializationScript'
+            Prelude.<$> (x Data..:? "launchProfileProtocolVersion")
+            Prelude.<*> (x Data..:? "platform")
+            Prelude.<*> (x Data..:? "runContext")
+            Prelude.<*> (x Data..:? "script")
+      )
+
+instance
+  Prelude.Hashable
+    StudioComponentInitializationScript
+  where
+  hashWithSalt
+    _salt
+    StudioComponentInitializationScript' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchProfileProtocolVersion
+        `Prelude.hashWithSalt` platform
+        `Prelude.hashWithSalt` runContext
+        `Prelude.hashWithSalt` script
+
+instance
+  Prelude.NFData
+    StudioComponentInitializationScript
+  where
+  rnf StudioComponentInitializationScript' {..} =
+    Prelude.rnf launchProfileProtocolVersion
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf runContext
+      `Prelude.seq` Prelude.rnf script
+
+instance
+  Data.ToJSON
+    StudioComponentInitializationScript
+  where
+  toJSON StudioComponentInitializationScript' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("launchProfileProtocolVersion" Data..=)
+              Prelude.<$> launchProfileProtocolVersion,
+            ("platform" Data..=) Prelude.<$> platform,
+            ("runContext" Data..=) Prelude.<$> runContext,
+            ("script" Data..=) Prelude.<$> script
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentInitializationScriptRunContext.hs b/gen/Amazonka/Nimble/Types/StudioComponentInitializationScriptRunContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentInitializationScriptRunContext.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.Nimble.Types.StudioComponentInitializationScriptRunContext
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentInitializationScriptRunContext
+  ( StudioComponentInitializationScriptRunContext
+      ( ..,
+        StudioComponentInitializationScriptRunContext_SYSTEM_INITIALIZATION,
+        StudioComponentInitializationScriptRunContext_USER_INITIALIZATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StudioComponentInitializationScriptRunContext = StudioComponentInitializationScriptRunContext'
+  { fromStudioComponentInitializationScriptRunContext ::
+      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 StudioComponentInitializationScriptRunContext_SYSTEM_INITIALIZATION :: StudioComponentInitializationScriptRunContext
+pattern StudioComponentInitializationScriptRunContext_SYSTEM_INITIALIZATION = StudioComponentInitializationScriptRunContext' "SYSTEM_INITIALIZATION"
+
+pattern StudioComponentInitializationScriptRunContext_USER_INITIALIZATION :: StudioComponentInitializationScriptRunContext
+pattern StudioComponentInitializationScriptRunContext_USER_INITIALIZATION = StudioComponentInitializationScriptRunContext' "USER_INITIALIZATION"
+
+{-# COMPLETE
+  StudioComponentInitializationScriptRunContext_SYSTEM_INITIALIZATION,
+  StudioComponentInitializationScriptRunContext_USER_INITIALIZATION,
+  StudioComponentInitializationScriptRunContext'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentState.hs b/gen/Amazonka/Nimble/Types/StudioComponentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentState.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioComponentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentState
+  ( StudioComponentState
+      ( ..,
+        StudioComponentState_CREATE_FAILED,
+        StudioComponentState_CREATE_IN_PROGRESS,
+        StudioComponentState_DELETED,
+        StudioComponentState_DELETE_FAILED,
+        StudioComponentState_DELETE_IN_PROGRESS,
+        StudioComponentState_READY,
+        StudioComponentState_UPDATE_FAILED,
+        StudioComponentState_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The current state of the studio component resource.
+--
+-- While a studio component is being created, modified, or deleted, its
+-- state will be @CREATE_IN_PROGRESS@, @UPDATE_IN_PROGRESS@, or
+-- @DELETE_IN_PROGRESS@.
+--
+-- These are called /transition states/.
+--
+-- No modifications may be made to the studio component while it is in a
+-- transition state.
+--
+-- If creation of the resource fails, the state will change to
+-- @CREATE_FAILED@. The resource @StatusCode@ and @StatusMessage@ will
+-- provide more information of why creation failed. The resource in this
+-- state will automatically be deleted from your account after a period of
+-- time.
+--
+-- If updating the resource fails, the state will change to
+-- @UPDATE_FAILED@. The resource @StatusCode@ and @StatusMessage@ will
+-- provide more information of why the update failed. The resource will be
+-- returned to the state it was in when the update request was invoked.
+--
+-- If deleting the resource fails, the state will change to
+-- @DELETE_FAILED@. The resource @StatusCode@ and @StatusMessage@ will
+-- provide more information of why the update failed. The resource will be
+-- returned to the state it was in when the update request was invoked.
+-- After the resource is deleted successfully, it will change to the
+-- @DELETED@ state. The resource will no longer count against service
+-- quotas and cannot be used or acted upon any futher. It will be removed
+-- from your account after a period of time.
+newtype StudioComponentState = StudioComponentState'
+  { fromStudioComponentState ::
+      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 StudioComponentState_CREATE_FAILED :: StudioComponentState
+pattern StudioComponentState_CREATE_FAILED = StudioComponentState' "CREATE_FAILED"
+
+pattern StudioComponentState_CREATE_IN_PROGRESS :: StudioComponentState
+pattern StudioComponentState_CREATE_IN_PROGRESS = StudioComponentState' "CREATE_IN_PROGRESS"
+
+pattern StudioComponentState_DELETED :: StudioComponentState
+pattern StudioComponentState_DELETED = StudioComponentState' "DELETED"
+
+pattern StudioComponentState_DELETE_FAILED :: StudioComponentState
+pattern StudioComponentState_DELETE_FAILED = StudioComponentState' "DELETE_FAILED"
+
+pattern StudioComponentState_DELETE_IN_PROGRESS :: StudioComponentState
+pattern StudioComponentState_DELETE_IN_PROGRESS = StudioComponentState' "DELETE_IN_PROGRESS"
+
+pattern StudioComponentState_READY :: StudioComponentState
+pattern StudioComponentState_READY = StudioComponentState' "READY"
+
+pattern StudioComponentState_UPDATE_FAILED :: StudioComponentState
+pattern StudioComponentState_UPDATE_FAILED = StudioComponentState' "UPDATE_FAILED"
+
+pattern StudioComponentState_UPDATE_IN_PROGRESS :: StudioComponentState
+pattern StudioComponentState_UPDATE_IN_PROGRESS = StudioComponentState' "UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  StudioComponentState_CREATE_FAILED,
+  StudioComponentState_CREATE_IN_PROGRESS,
+  StudioComponentState_DELETED,
+  StudioComponentState_DELETE_FAILED,
+  StudioComponentState_DELETE_IN_PROGRESS,
+  StudioComponentState_READY,
+  StudioComponentState_UPDATE_FAILED,
+  StudioComponentState_UPDATE_IN_PROGRESS,
+  StudioComponentState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentStatusCode.hs b/gen/Amazonka/Nimble/Types/StudioComponentStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentStatusCode.hs
@@ -0,0 +1,119 @@
+{-# 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.Nimble.Types.StudioComponentStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentStatusCode
+  ( StudioComponentStatusCode
+      ( ..,
+        StudioComponentStatusCode_ACTIVE_DIRECTORY_ALREADY_EXISTS,
+        StudioComponentStatusCode_ENCRYPTION_KEY_ACCESS_DENIED,
+        StudioComponentStatusCode_ENCRYPTION_KEY_NOT_FOUND,
+        StudioComponentStatusCode_INTERNAL_ERROR,
+        StudioComponentStatusCode_STUDIO_COMPONENT_CREATED,
+        StudioComponentStatusCode_STUDIO_COMPONENT_CREATE_IN_PROGRESS,
+        StudioComponentStatusCode_STUDIO_COMPONENT_DELETED,
+        StudioComponentStatusCode_STUDIO_COMPONENT_DELETE_IN_PROGRESS,
+        StudioComponentStatusCode_STUDIO_COMPONENT_UPDATED,
+        StudioComponentStatusCode_STUDIO_COMPONENT_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The current status of the studio component resource.
+--
+-- When the resource is in the @READY@ state, the status code signals what
+-- the last mutation made to the resource was.
+--
+-- When the resource is in a @CREATE_FAILED@, @UPDATE_FAILED@, or
+-- @DELETE_FAILED@ state, the status code signals what went wrong and why
+-- the mutation failed.
+newtype StudioComponentStatusCode = StudioComponentStatusCode'
+  { fromStudioComponentStatusCode ::
+      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 StudioComponentStatusCode_ACTIVE_DIRECTORY_ALREADY_EXISTS :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_ACTIVE_DIRECTORY_ALREADY_EXISTS = StudioComponentStatusCode' "ACTIVE_DIRECTORY_ALREADY_EXISTS"
+
+pattern StudioComponentStatusCode_ENCRYPTION_KEY_ACCESS_DENIED :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_ENCRYPTION_KEY_ACCESS_DENIED = StudioComponentStatusCode' "ENCRYPTION_KEY_ACCESS_DENIED"
+
+pattern StudioComponentStatusCode_ENCRYPTION_KEY_NOT_FOUND :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_ENCRYPTION_KEY_NOT_FOUND = StudioComponentStatusCode' "ENCRYPTION_KEY_NOT_FOUND"
+
+pattern StudioComponentStatusCode_INTERNAL_ERROR :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_INTERNAL_ERROR = StudioComponentStatusCode' "INTERNAL_ERROR"
+
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_CREATED :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_CREATED = StudioComponentStatusCode' "STUDIO_COMPONENT_CREATED"
+
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_CREATE_IN_PROGRESS :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_CREATE_IN_PROGRESS = StudioComponentStatusCode' "STUDIO_COMPONENT_CREATE_IN_PROGRESS"
+
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_DELETED :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_DELETED = StudioComponentStatusCode' "STUDIO_COMPONENT_DELETED"
+
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_DELETE_IN_PROGRESS :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_DELETE_IN_PROGRESS = StudioComponentStatusCode' "STUDIO_COMPONENT_DELETE_IN_PROGRESS"
+
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_UPDATED :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_UPDATED = StudioComponentStatusCode' "STUDIO_COMPONENT_UPDATED"
+
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_UPDATE_IN_PROGRESS :: StudioComponentStatusCode
+pattern StudioComponentStatusCode_STUDIO_COMPONENT_UPDATE_IN_PROGRESS = StudioComponentStatusCode' "STUDIO_COMPONENT_UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  StudioComponentStatusCode_ACTIVE_DIRECTORY_ALREADY_EXISTS,
+  StudioComponentStatusCode_ENCRYPTION_KEY_ACCESS_DENIED,
+  StudioComponentStatusCode_ENCRYPTION_KEY_NOT_FOUND,
+  StudioComponentStatusCode_INTERNAL_ERROR,
+  StudioComponentStatusCode_STUDIO_COMPONENT_CREATED,
+  StudioComponentStatusCode_STUDIO_COMPONENT_CREATE_IN_PROGRESS,
+  StudioComponentStatusCode_STUDIO_COMPONENT_DELETED,
+  StudioComponentStatusCode_STUDIO_COMPONENT_DELETE_IN_PROGRESS,
+  StudioComponentStatusCode_STUDIO_COMPONENT_UPDATED,
+  StudioComponentStatusCode_STUDIO_COMPONENT_UPDATE_IN_PROGRESS,
+  StudioComponentStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentSubtype.hs b/gen/Amazonka/Nimble/Types/StudioComponentSubtype.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentSubtype.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioComponentSubtype
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentSubtype
+  ( StudioComponentSubtype
+      ( ..,
+        StudioComponentSubtype_AMAZON_FSX_FOR_LUSTRE,
+        StudioComponentSubtype_AMAZON_FSX_FOR_WINDOWS,
+        StudioComponentSubtype_AWS_MANAGED_MICROSOFT_AD,
+        StudioComponentSubtype_CUSTOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StudioComponentSubtype = StudioComponentSubtype'
+  { fromStudioComponentSubtype ::
+      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 StudioComponentSubtype_AMAZON_FSX_FOR_LUSTRE :: StudioComponentSubtype
+pattern StudioComponentSubtype_AMAZON_FSX_FOR_LUSTRE = StudioComponentSubtype' "AMAZON_FSX_FOR_LUSTRE"
+
+pattern StudioComponentSubtype_AMAZON_FSX_FOR_WINDOWS :: StudioComponentSubtype
+pattern StudioComponentSubtype_AMAZON_FSX_FOR_WINDOWS = StudioComponentSubtype' "AMAZON_FSX_FOR_WINDOWS"
+
+pattern StudioComponentSubtype_AWS_MANAGED_MICROSOFT_AD :: StudioComponentSubtype
+pattern StudioComponentSubtype_AWS_MANAGED_MICROSOFT_AD = StudioComponentSubtype' "AWS_MANAGED_MICROSOFT_AD"
+
+pattern StudioComponentSubtype_CUSTOM :: StudioComponentSubtype
+pattern StudioComponentSubtype_CUSTOM = StudioComponentSubtype' "CUSTOM"
+
+{-# COMPLETE
+  StudioComponentSubtype_AMAZON_FSX_FOR_LUSTRE,
+  StudioComponentSubtype_AMAZON_FSX_FOR_WINDOWS,
+  StudioComponentSubtype_AWS_MANAGED_MICROSOFT_AD,
+  StudioComponentSubtype_CUSTOM,
+  StudioComponentSubtype'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentSummary.hs b/gen/Amazonka/Nimble/Types/StudioComponentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentSummary.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioComponentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StudioComponentSubtype
+import Amazonka.Nimble.Types.StudioComponentType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The studio component\'s summary.
+--
+-- /See:/ 'newStudioComponentSummary' smart constructor.
+data StudioComponentSummary = StudioComponentSummary'
+  { -- | The ISO timestamp in seconds for when the resource was created.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that created the studio component.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name for the studio component.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier for a studio component resource.
+    studioComponentId :: Prelude.Maybe Prelude.Text,
+    -- | The specific subtype of a studio component.
+    subtype :: Prelude.Maybe StudioComponentSubtype,
+    -- | The type of the studio component.
+    type' :: Prelude.Maybe StudioComponentType,
+    -- | The ISO timestamp in seconds for when the resource was updated.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The user ID of the user that most recently updated the resource.
+    updatedBy :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StudioComponentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'studioComponentSummary_createdAt' - The ISO timestamp in seconds for when the resource was created.
+--
+-- 'createdBy', 'studioComponentSummary_createdBy' - The user ID of the user that created the studio component.
+--
+-- 'description', 'studioComponentSummary_description' - The description.
+--
+-- 'name', 'studioComponentSummary_name' - The name for the studio component.
+--
+-- 'studioComponentId', 'studioComponentSummary_studioComponentId' - The unique identifier for a studio component resource.
+--
+-- 'subtype', 'studioComponentSummary_subtype' - The specific subtype of a studio component.
+--
+-- 'type'', 'studioComponentSummary_type' - The type of the studio component.
+--
+-- 'updatedAt', 'studioComponentSummary_updatedAt' - The ISO timestamp in seconds for when the resource was updated.
+--
+-- 'updatedBy', 'studioComponentSummary_updatedBy' - The user ID of the user that most recently updated the resource.
+newStudioComponentSummary ::
+  StudioComponentSummary
+newStudioComponentSummary =
+  StudioComponentSummary'
+    { createdAt =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      studioComponentId = Prelude.Nothing,
+      subtype = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      updatedBy = Prelude.Nothing
+    }
+
+-- | The ISO timestamp in seconds for when the resource was created.
+studioComponentSummary_createdAt :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.UTCTime)
+studioComponentSummary_createdAt = Lens.lens (\StudioComponentSummary' {createdAt} -> createdAt) (\s@StudioComponentSummary' {} a -> s {createdAt = a} :: StudioComponentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that created the studio component.
+studioComponentSummary_createdBy :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.Text)
+studioComponentSummary_createdBy = Lens.lens (\StudioComponentSummary' {createdBy} -> createdBy) (\s@StudioComponentSummary' {} a -> s {createdBy = a} :: StudioComponentSummary)
+
+-- | The description.
+studioComponentSummary_description :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.Text)
+studioComponentSummary_description = Lens.lens (\StudioComponentSummary' {description} -> description) (\s@StudioComponentSummary' {} a -> s {description = a} :: StudioComponentSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name for the studio component.
+studioComponentSummary_name :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.Text)
+studioComponentSummary_name = Lens.lens (\StudioComponentSummary' {name} -> name) (\s@StudioComponentSummary' {} a -> s {name = a} :: StudioComponentSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier for a studio component resource.
+studioComponentSummary_studioComponentId :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.Text)
+studioComponentSummary_studioComponentId = Lens.lens (\StudioComponentSummary' {studioComponentId} -> studioComponentId) (\s@StudioComponentSummary' {} a -> s {studioComponentId = a} :: StudioComponentSummary)
+
+-- | The specific subtype of a studio component.
+studioComponentSummary_subtype :: Lens.Lens' StudioComponentSummary (Prelude.Maybe StudioComponentSubtype)
+studioComponentSummary_subtype = Lens.lens (\StudioComponentSummary' {subtype} -> subtype) (\s@StudioComponentSummary' {} a -> s {subtype = a} :: StudioComponentSummary)
+
+-- | The type of the studio component.
+studioComponentSummary_type :: Lens.Lens' StudioComponentSummary (Prelude.Maybe StudioComponentType)
+studioComponentSummary_type = Lens.lens (\StudioComponentSummary' {type'} -> type') (\s@StudioComponentSummary' {} a -> s {type' = a} :: StudioComponentSummary)
+
+-- | The ISO timestamp in seconds for when the resource was updated.
+studioComponentSummary_updatedAt :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.UTCTime)
+studioComponentSummary_updatedAt = Lens.lens (\StudioComponentSummary' {updatedAt} -> updatedAt) (\s@StudioComponentSummary' {} a -> s {updatedAt = a} :: StudioComponentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The user ID of the user that most recently updated the resource.
+studioComponentSummary_updatedBy :: Lens.Lens' StudioComponentSummary (Prelude.Maybe Prelude.Text)
+studioComponentSummary_updatedBy = Lens.lens (\StudioComponentSummary' {updatedBy} -> updatedBy) (\s@StudioComponentSummary' {} a -> s {updatedBy = a} :: StudioComponentSummary)
+
+instance Data.FromJSON StudioComponentSummary where
+  parseJSON =
+    Data.withObject
+      "StudioComponentSummary"
+      ( \x ->
+          StudioComponentSummary'
+            Prelude.<$> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "createdBy")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "studioComponentId")
+            Prelude.<*> (x Data..:? "subtype")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "updatedAt")
+            Prelude.<*> (x Data..:? "updatedBy")
+      )
+
+instance Prelude.Hashable StudioComponentSummary where
+  hashWithSalt _salt StudioComponentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` studioComponentId
+      `Prelude.hashWithSalt` subtype
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` updatedBy
+
+instance Prelude.NFData StudioComponentSummary where
+  rnf StudioComponentSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf subtype
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf updatedBy
diff --git a/gen/Amazonka/Nimble/Types/StudioComponentType.hs b/gen/Amazonka/Nimble/Types/StudioComponentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioComponentType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioComponentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioComponentType
+  ( StudioComponentType
+      ( ..,
+        StudioComponentType_ACTIVE_DIRECTORY,
+        StudioComponentType_COMPUTE_FARM,
+        StudioComponentType_CUSTOM,
+        StudioComponentType_LICENSE_SERVICE,
+        StudioComponentType_SHARED_FILE_SYSTEM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StudioComponentType = StudioComponentType'
+  { fromStudioComponentType ::
+      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 StudioComponentType_ACTIVE_DIRECTORY :: StudioComponentType
+pattern StudioComponentType_ACTIVE_DIRECTORY = StudioComponentType' "ACTIVE_DIRECTORY"
+
+pattern StudioComponentType_COMPUTE_FARM :: StudioComponentType
+pattern StudioComponentType_COMPUTE_FARM = StudioComponentType' "COMPUTE_FARM"
+
+pattern StudioComponentType_CUSTOM :: StudioComponentType
+pattern StudioComponentType_CUSTOM = StudioComponentType' "CUSTOM"
+
+pattern StudioComponentType_LICENSE_SERVICE :: StudioComponentType
+pattern StudioComponentType_LICENSE_SERVICE = StudioComponentType' "LICENSE_SERVICE"
+
+pattern StudioComponentType_SHARED_FILE_SYSTEM :: StudioComponentType
+pattern StudioComponentType_SHARED_FILE_SYSTEM = StudioComponentType' "SHARED_FILE_SYSTEM"
+
+{-# COMPLETE
+  StudioComponentType_ACTIVE_DIRECTORY,
+  StudioComponentType_COMPUTE_FARM,
+  StudioComponentType_CUSTOM,
+  StudioComponentType_LICENSE_SERVICE,
+  StudioComponentType_SHARED_FILE_SYSTEM,
+  StudioComponentType'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioEncryptionConfiguration.hs b/gen/Amazonka/Nimble/Types/StudioEncryptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioEncryptionConfiguration.hs
@@ -0,0 +1,100 @@
+{-# 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.Nimble.Types.StudioEncryptionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioEncryptionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StudioEncryptionConfigurationKeyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of the encryption method that is used for the studio.
+--
+-- /See:/ 'newStudioEncryptionConfiguration' smart constructor.
+data StudioEncryptionConfiguration = StudioEncryptionConfiguration'
+  { -- | The ARN for a KMS key that is used to encrypt studio data.
+    keyArn :: Prelude.Maybe Prelude.Text,
+    -- | The type of KMS key that is used to encrypt studio data.
+    keyType :: StudioEncryptionConfigurationKeyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StudioEncryptionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyArn', 'studioEncryptionConfiguration_keyArn' - The ARN for a KMS key that is used to encrypt studio data.
+--
+-- 'keyType', 'studioEncryptionConfiguration_keyType' - The type of KMS key that is used to encrypt studio data.
+newStudioEncryptionConfiguration ::
+  -- | 'keyType'
+  StudioEncryptionConfigurationKeyType ->
+  StudioEncryptionConfiguration
+newStudioEncryptionConfiguration pKeyType_ =
+  StudioEncryptionConfiguration'
+    { keyArn =
+        Prelude.Nothing,
+      keyType = pKeyType_
+    }
+
+-- | The ARN for a KMS key that is used to encrypt studio data.
+studioEncryptionConfiguration_keyArn :: Lens.Lens' StudioEncryptionConfiguration (Prelude.Maybe Prelude.Text)
+studioEncryptionConfiguration_keyArn = Lens.lens (\StudioEncryptionConfiguration' {keyArn} -> keyArn) (\s@StudioEncryptionConfiguration' {} a -> s {keyArn = a} :: StudioEncryptionConfiguration)
+
+-- | The type of KMS key that is used to encrypt studio data.
+studioEncryptionConfiguration_keyType :: Lens.Lens' StudioEncryptionConfiguration StudioEncryptionConfigurationKeyType
+studioEncryptionConfiguration_keyType = Lens.lens (\StudioEncryptionConfiguration' {keyType} -> keyType) (\s@StudioEncryptionConfiguration' {} a -> s {keyType = a} :: StudioEncryptionConfiguration)
+
+instance Data.FromJSON StudioEncryptionConfiguration where
+  parseJSON =
+    Data.withObject
+      "StudioEncryptionConfiguration"
+      ( \x ->
+          StudioEncryptionConfiguration'
+            Prelude.<$> (x Data..:? "keyArn")
+            Prelude.<*> (x Data..: "keyType")
+      )
+
+instance
+  Prelude.Hashable
+    StudioEncryptionConfiguration
+  where
+  hashWithSalt _salt StudioEncryptionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyArn
+      `Prelude.hashWithSalt` keyType
+
+instance Prelude.NFData StudioEncryptionConfiguration where
+  rnf StudioEncryptionConfiguration' {..} =
+    Prelude.rnf keyArn
+      `Prelude.seq` Prelude.rnf keyType
+
+instance Data.ToJSON StudioEncryptionConfiguration where
+  toJSON StudioEncryptionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("keyArn" Data..=) Prelude.<$> keyArn,
+            Prelude.Just ("keyType" Data..= keyType)
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/StudioEncryptionConfigurationKeyType.hs b/gen/Amazonka/Nimble/Types/StudioEncryptionConfigurationKeyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioEncryptionConfigurationKeyType.hs
@@ -0,0 +1,72 @@
+{-# 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.Nimble.Types.StudioEncryptionConfigurationKeyType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioEncryptionConfigurationKeyType
+  ( StudioEncryptionConfigurationKeyType
+      ( ..,
+        StudioEncryptionConfigurationKeyType_AWS_OWNED_KEY,
+        StudioEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of KMS key that is used to encrypt studio data.
+newtype StudioEncryptionConfigurationKeyType = StudioEncryptionConfigurationKeyType'
+  { fromStudioEncryptionConfigurationKeyType ::
+      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 StudioEncryptionConfigurationKeyType_AWS_OWNED_KEY :: StudioEncryptionConfigurationKeyType
+pattern StudioEncryptionConfigurationKeyType_AWS_OWNED_KEY = StudioEncryptionConfigurationKeyType' "AWS_OWNED_KEY"
+
+pattern StudioEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY :: StudioEncryptionConfigurationKeyType
+pattern StudioEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY = StudioEncryptionConfigurationKeyType' "CUSTOMER_MANAGED_KEY"
+
+{-# COMPLETE
+  StudioEncryptionConfigurationKeyType_AWS_OWNED_KEY,
+  StudioEncryptionConfigurationKeyType_CUSTOMER_MANAGED_KEY,
+  StudioEncryptionConfigurationKeyType'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioMembership.hs b/gen/Amazonka/Nimble/Types/StudioMembership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioMembership.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioMembership
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioMembership where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.StudioPersona
+import qualified Amazonka.Prelude as Prelude
+
+-- | A studio member is an association of a user from your studio identity
+-- source to elevated permissions that they are granted in the studio.
+--
+-- When you add a user to your studio using the Nimble Studio console, they
+-- are given access to the studio\'s IAM Identity Center application and
+-- are given access to log in to the Nimble Studio portal. These users have
+-- the permissions provided by the studio\'s user IAM role and do not
+-- appear in the studio membership collection. Only studio admins appear in
+-- studio membership.
+--
+-- When you add a user to studio membership with the ADMIN persona, upon
+-- logging in to the Nimble Studio portal, they are granted permissions
+-- specified by the Studio\'s Admin IAM role.
+--
+-- /See:/ 'newStudioMembership' smart constructor.
+data StudioMembership = StudioMembership'
+  { -- | The ID of the identity store.
+    identityStoreId :: Prelude.Maybe Prelude.Text,
+    -- | The persona.
+    persona :: Prelude.Maybe StudioPersona,
+    -- | The principal ID.
+    principalId :: Prelude.Maybe Prelude.Text,
+    -- | The Active Directory Security Identifier for this user, if available.
+    sid :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StudioMembership' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityStoreId', 'studioMembership_identityStoreId' - The ID of the identity store.
+--
+-- 'persona', 'studioMembership_persona' - The persona.
+--
+-- 'principalId', 'studioMembership_principalId' - The principal ID.
+--
+-- 'sid', 'studioMembership_sid' - The Active Directory Security Identifier for this user, if available.
+newStudioMembership ::
+  StudioMembership
+newStudioMembership =
+  StudioMembership'
+    { identityStoreId =
+        Prelude.Nothing,
+      persona = Prelude.Nothing,
+      principalId = Prelude.Nothing,
+      sid = Prelude.Nothing
+    }
+
+-- | The ID of the identity store.
+studioMembership_identityStoreId :: Lens.Lens' StudioMembership (Prelude.Maybe Prelude.Text)
+studioMembership_identityStoreId = Lens.lens (\StudioMembership' {identityStoreId} -> identityStoreId) (\s@StudioMembership' {} a -> s {identityStoreId = a} :: StudioMembership)
+
+-- | The persona.
+studioMembership_persona :: Lens.Lens' StudioMembership (Prelude.Maybe StudioPersona)
+studioMembership_persona = Lens.lens (\StudioMembership' {persona} -> persona) (\s@StudioMembership' {} a -> s {persona = a} :: StudioMembership)
+
+-- | The principal ID.
+studioMembership_principalId :: Lens.Lens' StudioMembership (Prelude.Maybe Prelude.Text)
+studioMembership_principalId = Lens.lens (\StudioMembership' {principalId} -> principalId) (\s@StudioMembership' {} a -> s {principalId = a} :: StudioMembership)
+
+-- | The Active Directory Security Identifier for this user, if available.
+studioMembership_sid :: Lens.Lens' StudioMembership (Prelude.Maybe Prelude.Text)
+studioMembership_sid = Lens.lens (\StudioMembership' {sid} -> sid) (\s@StudioMembership' {} a -> s {sid = a} :: StudioMembership)
+
+instance Data.FromJSON StudioMembership where
+  parseJSON =
+    Data.withObject
+      "StudioMembership"
+      ( \x ->
+          StudioMembership'
+            Prelude.<$> (x Data..:? "identityStoreId")
+            Prelude.<*> (x Data..:? "persona")
+            Prelude.<*> (x Data..:? "principalId")
+            Prelude.<*> (x Data..:? "sid")
+      )
+
+instance Prelude.Hashable StudioMembership where
+  hashWithSalt _salt StudioMembership' {..} =
+    _salt
+      `Prelude.hashWithSalt` identityStoreId
+      `Prelude.hashWithSalt` persona
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` sid
+
+instance Prelude.NFData StudioMembership where
+  rnf StudioMembership' {..} =
+    Prelude.rnf identityStoreId
+      `Prelude.seq` Prelude.rnf persona
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf sid
diff --git a/gen/Amazonka/Nimble/Types/StudioPersona.hs b/gen/Amazonka/Nimble/Types/StudioPersona.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioPersona.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.StudioPersona
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioPersona
+  ( StudioPersona
+      ( ..,
+        StudioPersona_ADMINISTRATOR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StudioPersona = StudioPersona'
+  { fromStudioPersona ::
+      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 StudioPersona_ADMINISTRATOR :: StudioPersona
+pattern StudioPersona_ADMINISTRATOR = StudioPersona' "ADMINISTRATOR"
+
+{-# COMPLETE
+  StudioPersona_ADMINISTRATOR,
+  StudioPersona'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioState.hs b/gen/Amazonka/Nimble/Types/StudioState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioState.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.Nimble.Types.StudioState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioState
+  ( StudioState
+      ( ..,
+        StudioState_CREATE_FAILED,
+        StudioState_CREATE_IN_PROGRESS,
+        StudioState_DELETED,
+        StudioState_DELETE_FAILED,
+        StudioState_DELETE_IN_PROGRESS,
+        StudioState_READY,
+        StudioState_UPDATE_FAILED,
+        StudioState_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StudioState = StudioState'
+  { fromStudioState ::
+      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 StudioState_CREATE_FAILED :: StudioState
+pattern StudioState_CREATE_FAILED = StudioState' "CREATE_FAILED"
+
+pattern StudioState_CREATE_IN_PROGRESS :: StudioState
+pattern StudioState_CREATE_IN_PROGRESS = StudioState' "CREATE_IN_PROGRESS"
+
+pattern StudioState_DELETED :: StudioState
+pattern StudioState_DELETED = StudioState' "DELETED"
+
+pattern StudioState_DELETE_FAILED :: StudioState
+pattern StudioState_DELETE_FAILED = StudioState' "DELETE_FAILED"
+
+pattern StudioState_DELETE_IN_PROGRESS :: StudioState
+pattern StudioState_DELETE_IN_PROGRESS = StudioState' "DELETE_IN_PROGRESS"
+
+pattern StudioState_READY :: StudioState
+pattern StudioState_READY = StudioState' "READY"
+
+pattern StudioState_UPDATE_FAILED :: StudioState
+pattern StudioState_UPDATE_FAILED = StudioState' "UPDATE_FAILED"
+
+pattern StudioState_UPDATE_IN_PROGRESS :: StudioState
+pattern StudioState_UPDATE_IN_PROGRESS = StudioState' "UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  StudioState_CREATE_FAILED,
+  StudioState_CREATE_IN_PROGRESS,
+  StudioState_DELETED,
+  StudioState_DELETE_FAILED,
+  StudioState_DELETE_IN_PROGRESS,
+  StudioState_READY,
+  StudioState_UPDATE_FAILED,
+  StudioState_UPDATE_IN_PROGRESS,
+  StudioState'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/StudioStatusCode.hs b/gen/Amazonka/Nimble/Types/StudioStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/StudioStatusCode.hs
@@ -0,0 +1,157 @@
+{-# 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.Nimble.Types.StudioStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.StudioStatusCode
+  ( StudioStatusCode
+      ( ..,
+        StudioStatusCode_AWS_SSO_ACCESS_DENIED,
+        StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIRED,
+        StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIR_IN_PROGRESS,
+        StudioStatusCode_AWS_SSO_NOT_ENABLED,
+        StudioStatusCode_AWS_STS_REGION_DISABLED,
+        StudioStatusCode_ENCRYPTION_KEY_ACCESS_DENIED,
+        StudioStatusCode_ENCRYPTION_KEY_NOT_FOUND,
+        StudioStatusCode_INTERNAL_ERROR,
+        StudioStatusCode_ROLE_COULD_NOT_BE_ASSUMED,
+        StudioStatusCode_ROLE_NOT_OWNED_BY_STUDIO_OWNER,
+        StudioStatusCode_STUDIO_CREATED,
+        StudioStatusCode_STUDIO_CREATE_IN_PROGRESS,
+        StudioStatusCode_STUDIO_DELETED,
+        StudioStatusCode_STUDIO_DELETE_IN_PROGRESS,
+        StudioStatusCode_STUDIO_UPDATED,
+        StudioStatusCode_STUDIO_UPDATE_IN_PROGRESS,
+        StudioStatusCode_STUDIO_WITH_LAUNCH_PROFILES_NOT_DELETED,
+        StudioStatusCode_STUDIO_WITH_STREAMING_IMAGES_NOT_DELETED,
+        StudioStatusCode_STUDIO_WITH_STUDIO_COMPONENTS_NOT_DELETED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status code.
+newtype StudioStatusCode = StudioStatusCode'
+  { fromStudioStatusCode ::
+      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 StudioStatusCode_AWS_SSO_ACCESS_DENIED :: StudioStatusCode
+pattern StudioStatusCode_AWS_SSO_ACCESS_DENIED = StudioStatusCode' "AWS_SSO_ACCESS_DENIED"
+
+pattern StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIRED :: StudioStatusCode
+pattern StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIRED = StudioStatusCode' "AWS_SSO_CONFIGURATION_REPAIRED"
+
+pattern StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIR_IN_PROGRESS :: StudioStatusCode
+pattern StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIR_IN_PROGRESS = StudioStatusCode' "AWS_SSO_CONFIGURATION_REPAIR_IN_PROGRESS"
+
+pattern StudioStatusCode_AWS_SSO_NOT_ENABLED :: StudioStatusCode
+pattern StudioStatusCode_AWS_SSO_NOT_ENABLED = StudioStatusCode' "AWS_SSO_NOT_ENABLED"
+
+pattern StudioStatusCode_AWS_STS_REGION_DISABLED :: StudioStatusCode
+pattern StudioStatusCode_AWS_STS_REGION_DISABLED = StudioStatusCode' "AWS_STS_REGION_DISABLED"
+
+pattern StudioStatusCode_ENCRYPTION_KEY_ACCESS_DENIED :: StudioStatusCode
+pattern StudioStatusCode_ENCRYPTION_KEY_ACCESS_DENIED = StudioStatusCode' "ENCRYPTION_KEY_ACCESS_DENIED"
+
+pattern StudioStatusCode_ENCRYPTION_KEY_NOT_FOUND :: StudioStatusCode
+pattern StudioStatusCode_ENCRYPTION_KEY_NOT_FOUND = StudioStatusCode' "ENCRYPTION_KEY_NOT_FOUND"
+
+pattern StudioStatusCode_INTERNAL_ERROR :: StudioStatusCode
+pattern StudioStatusCode_INTERNAL_ERROR = StudioStatusCode' "INTERNAL_ERROR"
+
+pattern StudioStatusCode_ROLE_COULD_NOT_BE_ASSUMED :: StudioStatusCode
+pattern StudioStatusCode_ROLE_COULD_NOT_BE_ASSUMED = StudioStatusCode' "ROLE_COULD_NOT_BE_ASSUMED"
+
+pattern StudioStatusCode_ROLE_NOT_OWNED_BY_STUDIO_OWNER :: StudioStatusCode
+pattern StudioStatusCode_ROLE_NOT_OWNED_BY_STUDIO_OWNER = StudioStatusCode' "ROLE_NOT_OWNED_BY_STUDIO_OWNER"
+
+pattern StudioStatusCode_STUDIO_CREATED :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_CREATED = StudioStatusCode' "STUDIO_CREATED"
+
+pattern StudioStatusCode_STUDIO_CREATE_IN_PROGRESS :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_CREATE_IN_PROGRESS = StudioStatusCode' "STUDIO_CREATE_IN_PROGRESS"
+
+pattern StudioStatusCode_STUDIO_DELETED :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_DELETED = StudioStatusCode' "STUDIO_DELETED"
+
+pattern StudioStatusCode_STUDIO_DELETE_IN_PROGRESS :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_DELETE_IN_PROGRESS = StudioStatusCode' "STUDIO_DELETE_IN_PROGRESS"
+
+pattern StudioStatusCode_STUDIO_UPDATED :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_UPDATED = StudioStatusCode' "STUDIO_UPDATED"
+
+pattern StudioStatusCode_STUDIO_UPDATE_IN_PROGRESS :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_UPDATE_IN_PROGRESS = StudioStatusCode' "STUDIO_UPDATE_IN_PROGRESS"
+
+pattern StudioStatusCode_STUDIO_WITH_LAUNCH_PROFILES_NOT_DELETED :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_WITH_LAUNCH_PROFILES_NOT_DELETED = StudioStatusCode' "STUDIO_WITH_LAUNCH_PROFILES_NOT_DELETED"
+
+pattern StudioStatusCode_STUDIO_WITH_STREAMING_IMAGES_NOT_DELETED :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_WITH_STREAMING_IMAGES_NOT_DELETED = StudioStatusCode' "STUDIO_WITH_STREAMING_IMAGES_NOT_DELETED"
+
+pattern StudioStatusCode_STUDIO_WITH_STUDIO_COMPONENTS_NOT_DELETED :: StudioStatusCode
+pattern StudioStatusCode_STUDIO_WITH_STUDIO_COMPONENTS_NOT_DELETED = StudioStatusCode' "STUDIO_WITH_STUDIO_COMPONENTS_NOT_DELETED"
+
+{-# COMPLETE
+  StudioStatusCode_AWS_SSO_ACCESS_DENIED,
+  StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIRED,
+  StudioStatusCode_AWS_SSO_CONFIGURATION_REPAIR_IN_PROGRESS,
+  StudioStatusCode_AWS_SSO_NOT_ENABLED,
+  StudioStatusCode_AWS_STS_REGION_DISABLED,
+  StudioStatusCode_ENCRYPTION_KEY_ACCESS_DENIED,
+  StudioStatusCode_ENCRYPTION_KEY_NOT_FOUND,
+  StudioStatusCode_INTERNAL_ERROR,
+  StudioStatusCode_ROLE_COULD_NOT_BE_ASSUMED,
+  StudioStatusCode_ROLE_NOT_OWNED_BY_STUDIO_OWNER,
+  StudioStatusCode_STUDIO_CREATED,
+  StudioStatusCode_STUDIO_CREATE_IN_PROGRESS,
+  StudioStatusCode_STUDIO_DELETED,
+  StudioStatusCode_STUDIO_DELETE_IN_PROGRESS,
+  StudioStatusCode_STUDIO_UPDATED,
+  StudioStatusCode_STUDIO_UPDATE_IN_PROGRESS,
+  StudioStatusCode_STUDIO_WITH_LAUNCH_PROFILES_NOT_DELETED,
+  StudioStatusCode_STUDIO_WITH_STREAMING_IMAGES_NOT_DELETED,
+  StudioStatusCode_STUDIO_WITH_STUDIO_COMPONENTS_NOT_DELETED,
+  StudioStatusCode'
+  #-}
diff --git a/gen/Amazonka/Nimble/Types/ValidationResult.hs b/gen/Amazonka/Nimble/Types/ValidationResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/ValidationResult.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.ValidationResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.ValidationResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types.LaunchProfileValidationState
+import Amazonka.Nimble.Types.LaunchProfileValidationStatusCode
+import Amazonka.Nimble.Types.LaunchProfileValidationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The launch profile validation result.
+--
+-- /See:/ 'newValidationResult' smart constructor.
+data ValidationResult = ValidationResult'
+  { -- | The current state.
+    state :: LaunchProfileValidationState,
+    -- | The status code. This will contain the failure reason if the state is
+    -- @VALIDATION_FAILED@.
+    statusCode :: LaunchProfileValidationStatusCode,
+    -- | The status message for the validation result.
+    statusMessage :: Prelude.Text,
+    -- | The type of the validation result.
+    type' :: LaunchProfileValidationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidationResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'validationResult_state' - The current state.
+--
+-- 'statusCode', 'validationResult_statusCode' - The status code. This will contain the failure reason if the state is
+-- @VALIDATION_FAILED@.
+--
+-- 'statusMessage', 'validationResult_statusMessage' - The status message for the validation result.
+--
+-- 'type'', 'validationResult_type' - The type of the validation result.
+newValidationResult ::
+  -- | 'state'
+  LaunchProfileValidationState ->
+  -- | 'statusCode'
+  LaunchProfileValidationStatusCode ->
+  -- | 'statusMessage'
+  Prelude.Text ->
+  -- | 'type''
+  LaunchProfileValidationType ->
+  ValidationResult
+newValidationResult
+  pState_
+  pStatusCode_
+  pStatusMessage_
+  pType_ =
+    ValidationResult'
+      { state = pState_,
+        statusCode = pStatusCode_,
+        statusMessage = pStatusMessage_,
+        type' = pType_
+      }
+
+-- | The current state.
+validationResult_state :: Lens.Lens' ValidationResult LaunchProfileValidationState
+validationResult_state = Lens.lens (\ValidationResult' {state} -> state) (\s@ValidationResult' {} a -> s {state = a} :: ValidationResult)
+
+-- | The status code. This will contain the failure reason if the state is
+-- @VALIDATION_FAILED@.
+validationResult_statusCode :: Lens.Lens' ValidationResult LaunchProfileValidationStatusCode
+validationResult_statusCode = Lens.lens (\ValidationResult' {statusCode} -> statusCode) (\s@ValidationResult' {} a -> s {statusCode = a} :: ValidationResult)
+
+-- | The status message for the validation result.
+validationResult_statusMessage :: Lens.Lens' ValidationResult Prelude.Text
+validationResult_statusMessage = Lens.lens (\ValidationResult' {statusMessage} -> statusMessage) (\s@ValidationResult' {} a -> s {statusMessage = a} :: ValidationResult)
+
+-- | The type of the validation result.
+validationResult_type :: Lens.Lens' ValidationResult LaunchProfileValidationType
+validationResult_type = Lens.lens (\ValidationResult' {type'} -> type') (\s@ValidationResult' {} a -> s {type' = a} :: ValidationResult)
+
+instance Data.FromJSON ValidationResult where
+  parseJSON =
+    Data.withObject
+      "ValidationResult"
+      ( \x ->
+          ValidationResult'
+            Prelude.<$> (x Data..: "state")
+            Prelude.<*> (x Data..: "statusCode")
+            Prelude.<*> (x Data..: "statusMessage")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable ValidationResult where
+  hashWithSalt _salt ValidationResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusCode
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ValidationResult where
+  rnf ValidationResult' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusCode
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/Nimble/Types/VolumeConfiguration.hs b/gen/Amazonka/Nimble/Types/VolumeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/VolumeConfiguration.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.Types.VolumeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.VolumeConfiguration 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
+
+-- | Custom volume configuration for the root volumes that are attached to
+-- streaming sessions.
+--
+-- This parameter is only allowed when @sessionPersistenceMode@ is
+-- @ACTIVATED@.
+--
+-- /See:/ 'newVolumeConfiguration' smart constructor.
+data VolumeConfiguration = VolumeConfiguration'
+  { -- | The number of I\/O operations per second for the root volume that is
+    -- attached to streaming session.
+    iops :: Prelude.Maybe Prelude.Natural,
+    -- | The size of the root volume that is attached to the streaming session.
+    -- The root volume size is measured in GiBs.
+    size :: Prelude.Maybe Prelude.Natural,
+    -- | The throughput to provision for the root volume that is attached to the
+    -- streaming session. The throughput is measured in MiB\/s.
+    throughput :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iops', 'volumeConfiguration_iops' - The number of I\/O operations per second for the root volume that is
+-- attached to streaming session.
+--
+-- 'size', 'volumeConfiguration_size' - The size of the root volume that is attached to the streaming session.
+-- The root volume size is measured in GiBs.
+--
+-- 'throughput', 'volumeConfiguration_throughput' - The throughput to provision for the root volume that is attached to the
+-- streaming session. The throughput is measured in MiB\/s.
+newVolumeConfiguration ::
+  VolumeConfiguration
+newVolumeConfiguration =
+  VolumeConfiguration'
+    { iops = Prelude.Nothing,
+      size = Prelude.Nothing,
+      throughput = Prelude.Nothing
+    }
+
+-- | The number of I\/O operations per second for the root volume that is
+-- attached to streaming session.
+volumeConfiguration_iops :: Lens.Lens' VolumeConfiguration (Prelude.Maybe Prelude.Natural)
+volumeConfiguration_iops = Lens.lens (\VolumeConfiguration' {iops} -> iops) (\s@VolumeConfiguration' {} a -> s {iops = a} :: VolumeConfiguration)
+
+-- | The size of the root volume that is attached to the streaming session.
+-- The root volume size is measured in GiBs.
+volumeConfiguration_size :: Lens.Lens' VolumeConfiguration (Prelude.Maybe Prelude.Natural)
+volumeConfiguration_size = Lens.lens (\VolumeConfiguration' {size} -> size) (\s@VolumeConfiguration' {} a -> s {size = a} :: VolumeConfiguration)
+
+-- | The throughput to provision for the root volume that is attached to the
+-- streaming session. The throughput is measured in MiB\/s.
+volumeConfiguration_throughput :: Lens.Lens' VolumeConfiguration (Prelude.Maybe Prelude.Natural)
+volumeConfiguration_throughput = Lens.lens (\VolumeConfiguration' {throughput} -> throughput) (\s@VolumeConfiguration' {} a -> s {throughput = a} :: VolumeConfiguration)
+
+instance Data.FromJSON VolumeConfiguration where
+  parseJSON =
+    Data.withObject
+      "VolumeConfiguration"
+      ( \x ->
+          VolumeConfiguration'
+            Prelude.<$> (x Data..:? "iops")
+            Prelude.<*> (x Data..:? "size")
+            Prelude.<*> (x Data..:? "throughput")
+      )
+
+instance Prelude.Hashable VolumeConfiguration where
+  hashWithSalt _salt VolumeConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` throughput
+
+instance Prelude.NFData VolumeConfiguration where
+  rnf VolumeConfiguration' {..} =
+    Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf throughput
+
+instance Data.ToJSON VolumeConfiguration where
+  toJSON VolumeConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("iops" Data..=) Prelude.<$> iops,
+            ("size" Data..=) Prelude.<$> size,
+            ("throughput" Data..=) Prelude.<$> throughput
+          ]
+      )
diff --git a/gen/Amazonka/Nimble/Types/VolumeRetentionMode.hs b/gen/Amazonka/Nimble/Types/VolumeRetentionMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Types/VolumeRetentionMode.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.Nimble.Types.VolumeRetentionMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Nimble.Types.VolumeRetentionMode
+  ( VolumeRetentionMode
+      ( ..,
+        VolumeRetentionMode_DELETE,
+        VolumeRetentionMode_RETAIN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeRetentionMode = VolumeRetentionMode'
+  { fromVolumeRetentionMode ::
+      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 VolumeRetentionMode_DELETE :: VolumeRetentionMode
+pattern VolumeRetentionMode_DELETE = VolumeRetentionMode' "DELETE"
+
+pattern VolumeRetentionMode_RETAIN :: VolumeRetentionMode
+pattern VolumeRetentionMode_RETAIN = VolumeRetentionMode' "RETAIN"
+
+{-# COMPLETE
+  VolumeRetentionMode_DELETE,
+  VolumeRetentionMode_RETAIN,
+  VolumeRetentionMode'
+  #-}
diff --git a/gen/Amazonka/Nimble/UntagResource.hs b/gen/Amazonka/Nimble/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/UntagResource.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.Nimble.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the tags for a resource.
+module Amazonka.Nimble.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.Nimble.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'
+  { -- | Identifies the Amazon Resource Name(ARN) key from which you are removing
+    -- tags.
+    resourceArn :: Prelude.Text,
+    -- | One or more tag keys. Specify only the tag keys, not the tag values.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - Identifies the Amazon Resource Name(ARN) key from which you are removing
+-- tags.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - One or more tag keys. Specify only the tag keys, not the tag values.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | Identifies the Amazon Resource Name(ARN) key from which you are removing
+-- tags.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | One or more tag keys. Specify only the tag keys, not the tag values.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat
+      ["/2020-08-01/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/Nimble/UpdateLaunchProfile.hs b/gen/Amazonka/Nimble/UpdateLaunchProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/UpdateLaunchProfile.hs
@@ -0,0 +1,283 @@
+{-# 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.Nimble.UpdateLaunchProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a launch profile.
+module Amazonka.Nimble.UpdateLaunchProfile
+  ( -- * Creating a Request
+    UpdateLaunchProfile (..),
+    newUpdateLaunchProfile,
+
+    -- * Request Lenses
+    updateLaunchProfile_clientToken,
+    updateLaunchProfile_description,
+    updateLaunchProfile_launchProfileProtocolVersions,
+    updateLaunchProfile_name,
+    updateLaunchProfile_streamConfiguration,
+    updateLaunchProfile_studioComponentIds,
+    updateLaunchProfile_launchProfileId,
+    updateLaunchProfile_studioId,
+
+    -- * Destructuring the Response
+    UpdateLaunchProfileResponse (..),
+    newUpdateLaunchProfileResponse,
+
+    -- * Response Lenses
+    updateLaunchProfileResponse_launchProfile,
+    updateLaunchProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLaunchProfile' smart constructor.
+data UpdateLaunchProfile = UpdateLaunchProfile'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The version number of the protocol that is used by the launch profile.
+    -- The only valid version is \"2021-03-31\".
+    launchProfileProtocolVersions :: Prelude.Maybe [Prelude.Text],
+    -- | The name for the launch profile.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | A configuration for a streaming session.
+    streamConfiguration :: Prelude.Maybe StreamConfigurationCreate,
+    -- | Unique identifiers for a collection of studio components that can be
+    -- used with this launch profile.
+    studioComponentIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLaunchProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateLaunchProfile_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'description', 'updateLaunchProfile_description' - The description.
+--
+-- 'launchProfileProtocolVersions', 'updateLaunchProfile_launchProfileProtocolVersions' - The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+--
+-- 'name', 'updateLaunchProfile_name' - The name for the launch profile.
+--
+-- 'streamConfiguration', 'updateLaunchProfile_streamConfiguration' - A configuration for a streaming session.
+--
+-- 'studioComponentIds', 'updateLaunchProfile_studioComponentIds' - Unique identifiers for a collection of studio components that can be
+-- used with this launch profile.
+--
+-- 'launchProfileId', 'updateLaunchProfile_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'studioId', 'updateLaunchProfile_studioId' - The studio ID.
+newUpdateLaunchProfile ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  UpdateLaunchProfile
+newUpdateLaunchProfile pLaunchProfileId_ pStudioId_ =
+  UpdateLaunchProfile'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      launchProfileProtocolVersions = Prelude.Nothing,
+      name = Prelude.Nothing,
+      streamConfiguration = Prelude.Nothing,
+      studioComponentIds = Prelude.Nothing,
+      launchProfileId = pLaunchProfileId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+updateLaunchProfile_clientToken :: Lens.Lens' UpdateLaunchProfile (Prelude.Maybe Prelude.Text)
+updateLaunchProfile_clientToken = Lens.lens (\UpdateLaunchProfile' {clientToken} -> clientToken) (\s@UpdateLaunchProfile' {} a -> s {clientToken = a} :: UpdateLaunchProfile)
+
+-- | The description.
+updateLaunchProfile_description :: Lens.Lens' UpdateLaunchProfile (Prelude.Maybe Prelude.Text)
+updateLaunchProfile_description = Lens.lens (\UpdateLaunchProfile' {description} -> description) (\s@UpdateLaunchProfile' {} a -> s {description = a} :: UpdateLaunchProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The version number of the protocol that is used by the launch profile.
+-- The only valid version is \"2021-03-31\".
+updateLaunchProfile_launchProfileProtocolVersions :: Lens.Lens' UpdateLaunchProfile (Prelude.Maybe [Prelude.Text])
+updateLaunchProfile_launchProfileProtocolVersions = Lens.lens (\UpdateLaunchProfile' {launchProfileProtocolVersions} -> launchProfileProtocolVersions) (\s@UpdateLaunchProfile' {} a -> s {launchProfileProtocolVersions = a} :: UpdateLaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the launch profile.
+updateLaunchProfile_name :: Lens.Lens' UpdateLaunchProfile (Prelude.Maybe Prelude.Text)
+updateLaunchProfile_name = Lens.lens (\UpdateLaunchProfile' {name} -> name) (\s@UpdateLaunchProfile' {} a -> s {name = a} :: UpdateLaunchProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A configuration for a streaming session.
+updateLaunchProfile_streamConfiguration :: Lens.Lens' UpdateLaunchProfile (Prelude.Maybe StreamConfigurationCreate)
+updateLaunchProfile_streamConfiguration = Lens.lens (\UpdateLaunchProfile' {streamConfiguration} -> streamConfiguration) (\s@UpdateLaunchProfile' {} a -> s {streamConfiguration = a} :: UpdateLaunchProfile)
+
+-- | Unique identifiers for a collection of studio components that can be
+-- used with this launch profile.
+updateLaunchProfile_studioComponentIds :: Lens.Lens' UpdateLaunchProfile (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateLaunchProfile_studioComponentIds = Lens.lens (\UpdateLaunchProfile' {studioComponentIds} -> studioComponentIds) (\s@UpdateLaunchProfile' {} a -> s {studioComponentIds = a} :: UpdateLaunchProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+updateLaunchProfile_launchProfileId :: Lens.Lens' UpdateLaunchProfile Prelude.Text
+updateLaunchProfile_launchProfileId = Lens.lens (\UpdateLaunchProfile' {launchProfileId} -> launchProfileId) (\s@UpdateLaunchProfile' {} a -> s {launchProfileId = a} :: UpdateLaunchProfile)
+
+-- | The studio ID.
+updateLaunchProfile_studioId :: Lens.Lens' UpdateLaunchProfile Prelude.Text
+updateLaunchProfile_studioId = Lens.lens (\UpdateLaunchProfile' {studioId} -> studioId) (\s@UpdateLaunchProfile' {} a -> s {studioId = a} :: UpdateLaunchProfile)
+
+instance Core.AWSRequest UpdateLaunchProfile where
+  type
+    AWSResponse UpdateLaunchProfile =
+      UpdateLaunchProfileResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateLaunchProfileResponse'
+            Prelude.<$> (x Data..?> "launchProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLaunchProfile where
+  hashWithSalt _salt UpdateLaunchProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` launchProfileProtocolVersions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` streamConfiguration
+      `Prelude.hashWithSalt` studioComponentIds
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData UpdateLaunchProfile where
+  rnf UpdateLaunchProfile' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf launchProfileProtocolVersions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf streamConfiguration
+      `Prelude.seq` Prelude.rnf studioComponentIds
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders UpdateLaunchProfile where
+  toHeaders UpdateLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON UpdateLaunchProfile where
+  toJSON UpdateLaunchProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("launchProfileProtocolVersions" Data..=)
+              Prelude.<$> launchProfileProtocolVersions,
+            ("name" Data..=) Prelude.<$> name,
+            ("streamConfiguration" Data..=)
+              Prelude.<$> streamConfiguration,
+            ("studioComponentIds" Data..=)
+              Prelude.<$> studioComponentIds
+          ]
+      )
+
+instance Data.ToPath UpdateLaunchProfile where
+  toPath UpdateLaunchProfile' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId
+      ]
+
+instance Data.ToQuery UpdateLaunchProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLaunchProfileResponse' smart constructor.
+data UpdateLaunchProfileResponse = UpdateLaunchProfileResponse'
+  { -- | The launch profile.
+    launchProfile :: Prelude.Maybe LaunchProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLaunchProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchProfile', 'updateLaunchProfileResponse_launchProfile' - The launch profile.
+--
+-- 'httpStatus', 'updateLaunchProfileResponse_httpStatus' - The response's http status code.
+newUpdateLaunchProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLaunchProfileResponse
+newUpdateLaunchProfileResponse pHttpStatus_ =
+  UpdateLaunchProfileResponse'
+    { launchProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The launch profile.
+updateLaunchProfileResponse_launchProfile :: Lens.Lens' UpdateLaunchProfileResponse (Prelude.Maybe LaunchProfile)
+updateLaunchProfileResponse_launchProfile = Lens.lens (\UpdateLaunchProfileResponse' {launchProfile} -> launchProfile) (\s@UpdateLaunchProfileResponse' {} a -> s {launchProfile = a} :: UpdateLaunchProfileResponse)
+
+-- | The response's http status code.
+updateLaunchProfileResponse_httpStatus :: Lens.Lens' UpdateLaunchProfileResponse Prelude.Int
+updateLaunchProfileResponse_httpStatus = Lens.lens (\UpdateLaunchProfileResponse' {httpStatus} -> httpStatus) (\s@UpdateLaunchProfileResponse' {} a -> s {httpStatus = a} :: UpdateLaunchProfileResponse)
+
+instance Prelude.NFData UpdateLaunchProfileResponse where
+  rnf UpdateLaunchProfileResponse' {..} =
+    Prelude.rnf launchProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/UpdateLaunchProfileMember.hs b/gen/Amazonka/Nimble/UpdateLaunchProfileMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/UpdateLaunchProfileMember.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.UpdateLaunchProfileMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a user persona in launch profile membership.
+module Amazonka.Nimble.UpdateLaunchProfileMember
+  ( -- * Creating a Request
+    UpdateLaunchProfileMember (..),
+    newUpdateLaunchProfileMember,
+
+    -- * Request Lenses
+    updateLaunchProfileMember_clientToken,
+    updateLaunchProfileMember_launchProfileId,
+    updateLaunchProfileMember_persona,
+    updateLaunchProfileMember_principalId,
+    updateLaunchProfileMember_studioId,
+
+    -- * Destructuring the Response
+    UpdateLaunchProfileMemberResponse (..),
+    newUpdateLaunchProfileMemberResponse,
+
+    -- * Response Lenses
+    updateLaunchProfileMemberResponse_member,
+    updateLaunchProfileMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLaunchProfileMember' smart constructor.
+data UpdateLaunchProfileMember = UpdateLaunchProfileMember'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the launch profile used to control access from the streaming
+    -- session.
+    launchProfileId :: Prelude.Text,
+    -- | The persona.
+    persona :: LaunchProfilePersona,
+    -- | The principal ID. This currently supports a IAM Identity Center UserId.
+    principalId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLaunchProfileMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateLaunchProfileMember_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'launchProfileId', 'updateLaunchProfileMember_launchProfileId' - The ID of the launch profile used to control access from the streaming
+-- session.
+--
+-- 'persona', 'updateLaunchProfileMember_persona' - The persona.
+--
+-- 'principalId', 'updateLaunchProfileMember_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
+--
+-- 'studioId', 'updateLaunchProfileMember_studioId' - The studio ID.
+newUpdateLaunchProfileMember ::
+  -- | 'launchProfileId'
+  Prelude.Text ->
+  -- | 'persona'
+  LaunchProfilePersona ->
+  -- | 'principalId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  UpdateLaunchProfileMember
+newUpdateLaunchProfileMember
+  pLaunchProfileId_
+  pPersona_
+  pPrincipalId_
+  pStudioId_ =
+    UpdateLaunchProfileMember'
+      { clientToken =
+          Prelude.Nothing,
+        launchProfileId = pLaunchProfileId_,
+        persona = pPersona_,
+        principalId = pPrincipalId_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+updateLaunchProfileMember_clientToken :: Lens.Lens' UpdateLaunchProfileMember (Prelude.Maybe Prelude.Text)
+updateLaunchProfileMember_clientToken = Lens.lens (\UpdateLaunchProfileMember' {clientToken} -> clientToken) (\s@UpdateLaunchProfileMember' {} a -> s {clientToken = a} :: UpdateLaunchProfileMember)
+
+-- | The ID of the launch profile used to control access from the streaming
+-- session.
+updateLaunchProfileMember_launchProfileId :: Lens.Lens' UpdateLaunchProfileMember Prelude.Text
+updateLaunchProfileMember_launchProfileId = Lens.lens (\UpdateLaunchProfileMember' {launchProfileId} -> launchProfileId) (\s@UpdateLaunchProfileMember' {} a -> s {launchProfileId = a} :: UpdateLaunchProfileMember)
+
+-- | The persona.
+updateLaunchProfileMember_persona :: Lens.Lens' UpdateLaunchProfileMember LaunchProfilePersona
+updateLaunchProfileMember_persona = Lens.lens (\UpdateLaunchProfileMember' {persona} -> persona) (\s@UpdateLaunchProfileMember' {} a -> s {persona = a} :: UpdateLaunchProfileMember)
+
+-- | The principal ID. This currently supports a IAM Identity Center UserId.
+updateLaunchProfileMember_principalId :: Lens.Lens' UpdateLaunchProfileMember Prelude.Text
+updateLaunchProfileMember_principalId = Lens.lens (\UpdateLaunchProfileMember' {principalId} -> principalId) (\s@UpdateLaunchProfileMember' {} a -> s {principalId = a} :: UpdateLaunchProfileMember)
+
+-- | The studio ID.
+updateLaunchProfileMember_studioId :: Lens.Lens' UpdateLaunchProfileMember Prelude.Text
+updateLaunchProfileMember_studioId = Lens.lens (\UpdateLaunchProfileMember' {studioId} -> studioId) (\s@UpdateLaunchProfileMember' {} a -> s {studioId = a} :: UpdateLaunchProfileMember)
+
+instance Core.AWSRequest UpdateLaunchProfileMember where
+  type
+    AWSResponse UpdateLaunchProfileMember =
+      UpdateLaunchProfileMemberResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateLaunchProfileMemberResponse'
+            Prelude.<$> (x Data..?> "member")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLaunchProfileMember where
+  hashWithSalt _salt UpdateLaunchProfileMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` launchProfileId
+      `Prelude.hashWithSalt` persona
+      `Prelude.hashWithSalt` principalId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData UpdateLaunchProfileMember where
+  rnf UpdateLaunchProfileMember' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf launchProfileId
+      `Prelude.seq` Prelude.rnf persona
+      `Prelude.seq` Prelude.rnf principalId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders UpdateLaunchProfileMember where
+  toHeaders UpdateLaunchProfileMember' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON UpdateLaunchProfileMember where
+  toJSON UpdateLaunchProfileMember' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("persona" Data..= persona)]
+      )
+
+instance Data.ToPath UpdateLaunchProfileMember where
+  toPath UpdateLaunchProfileMember' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/launch-profiles/",
+        Data.toBS launchProfileId,
+        "/membership/",
+        Data.toBS principalId
+      ]
+
+instance Data.ToQuery UpdateLaunchProfileMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLaunchProfileMemberResponse' smart constructor.
+data UpdateLaunchProfileMemberResponse = UpdateLaunchProfileMemberResponse'
+  { -- | The updated member.
+    member :: Prelude.Maybe LaunchProfileMembership,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLaunchProfileMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'member', 'updateLaunchProfileMemberResponse_member' - The updated member.
+--
+-- 'httpStatus', 'updateLaunchProfileMemberResponse_httpStatus' - The response's http status code.
+newUpdateLaunchProfileMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLaunchProfileMemberResponse
+newUpdateLaunchProfileMemberResponse pHttpStatus_ =
+  UpdateLaunchProfileMemberResponse'
+    { member =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated member.
+updateLaunchProfileMemberResponse_member :: Lens.Lens' UpdateLaunchProfileMemberResponse (Prelude.Maybe LaunchProfileMembership)
+updateLaunchProfileMemberResponse_member = Lens.lens (\UpdateLaunchProfileMemberResponse' {member} -> member) (\s@UpdateLaunchProfileMemberResponse' {} a -> s {member = a} :: UpdateLaunchProfileMemberResponse)
+
+-- | The response's http status code.
+updateLaunchProfileMemberResponse_httpStatus :: Lens.Lens' UpdateLaunchProfileMemberResponse Prelude.Int
+updateLaunchProfileMemberResponse_httpStatus = Lens.lens (\UpdateLaunchProfileMemberResponse' {httpStatus} -> httpStatus) (\s@UpdateLaunchProfileMemberResponse' {} a -> s {httpStatus = a} :: UpdateLaunchProfileMemberResponse)
+
+instance
+  Prelude.NFData
+    UpdateLaunchProfileMemberResponse
+  where
+  rnf UpdateLaunchProfileMemberResponse' {..} =
+    Prelude.rnf member
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/UpdateStreamingImage.hs b/gen/Amazonka/Nimble/UpdateStreamingImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/UpdateStreamingImage.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Nimble.UpdateStreamingImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update streaming image.
+module Amazonka.Nimble.UpdateStreamingImage
+  ( -- * Creating a Request
+    UpdateStreamingImage (..),
+    newUpdateStreamingImage,
+
+    -- * Request Lenses
+    updateStreamingImage_clientToken,
+    updateStreamingImage_description,
+    updateStreamingImage_name,
+    updateStreamingImage_streamingImageId,
+    updateStreamingImage_studioId,
+
+    -- * Destructuring the Response
+    UpdateStreamingImageResponse (..),
+    newUpdateStreamingImageResponse,
+
+    -- * Response Lenses
+    updateStreamingImageResponse_streamingImage,
+    updateStreamingImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateStreamingImage' smart constructor.
+data UpdateStreamingImage = UpdateStreamingImage'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name for the streaming image.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The streaming image ID.
+    streamingImageId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStreamingImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateStreamingImage_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'description', 'updateStreamingImage_description' - The description.
+--
+-- 'name', 'updateStreamingImage_name' - The name for the streaming image.
+--
+-- 'streamingImageId', 'updateStreamingImage_streamingImageId' - The streaming image ID.
+--
+-- 'studioId', 'updateStreamingImage_studioId' - The studio ID.
+newUpdateStreamingImage ::
+  -- | 'streamingImageId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  UpdateStreamingImage
+newUpdateStreamingImage pStreamingImageId_ pStudioId_ =
+  UpdateStreamingImage'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      streamingImageId = pStreamingImageId_,
+      studioId = pStudioId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+updateStreamingImage_clientToken :: Lens.Lens' UpdateStreamingImage (Prelude.Maybe Prelude.Text)
+updateStreamingImage_clientToken = Lens.lens (\UpdateStreamingImage' {clientToken} -> clientToken) (\s@UpdateStreamingImage' {} a -> s {clientToken = a} :: UpdateStreamingImage)
+
+-- | The description.
+updateStreamingImage_description :: Lens.Lens' UpdateStreamingImage (Prelude.Maybe Prelude.Text)
+updateStreamingImage_description = Lens.lens (\UpdateStreamingImage' {description} -> description) (\s@UpdateStreamingImage' {} a -> s {description = a} :: UpdateStreamingImage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name for the streaming image.
+updateStreamingImage_name :: Lens.Lens' UpdateStreamingImage (Prelude.Maybe Prelude.Text)
+updateStreamingImage_name = Lens.lens (\UpdateStreamingImage' {name} -> name) (\s@UpdateStreamingImage' {} a -> s {name = a} :: UpdateStreamingImage) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The streaming image ID.
+updateStreamingImage_streamingImageId :: Lens.Lens' UpdateStreamingImage Prelude.Text
+updateStreamingImage_streamingImageId = Lens.lens (\UpdateStreamingImage' {streamingImageId} -> streamingImageId) (\s@UpdateStreamingImage' {} a -> s {streamingImageId = a} :: UpdateStreamingImage)
+
+-- | The studio ID.
+updateStreamingImage_studioId :: Lens.Lens' UpdateStreamingImage Prelude.Text
+updateStreamingImage_studioId = Lens.lens (\UpdateStreamingImage' {studioId} -> studioId) (\s@UpdateStreamingImage' {} a -> s {studioId = a} :: UpdateStreamingImage)
+
+instance Core.AWSRequest UpdateStreamingImage where
+  type
+    AWSResponse UpdateStreamingImage =
+      UpdateStreamingImageResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateStreamingImageResponse'
+            Prelude.<$> (x Data..?> "streamingImage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateStreamingImage where
+  hashWithSalt _salt UpdateStreamingImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` streamingImageId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData UpdateStreamingImage where
+  rnf UpdateStreamingImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf streamingImageId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders UpdateStreamingImage where
+  toHeaders UpdateStreamingImage' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON UpdateStreamingImage where
+  toJSON UpdateStreamingImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateStreamingImage where
+  toPath UpdateStreamingImage' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/streaming-images/",
+        Data.toBS streamingImageId
+      ]
+
+instance Data.ToQuery UpdateStreamingImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateStreamingImageResponse' smart constructor.
+data UpdateStreamingImageResponse = UpdateStreamingImageResponse'
+  { streamingImage :: Prelude.Maybe StreamingImage,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStreamingImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'streamingImage', 'updateStreamingImageResponse_streamingImage' - Undocumented member.
+--
+-- 'httpStatus', 'updateStreamingImageResponse_httpStatus' - The response's http status code.
+newUpdateStreamingImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateStreamingImageResponse
+newUpdateStreamingImageResponse pHttpStatus_ =
+  UpdateStreamingImageResponse'
+    { streamingImage =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateStreamingImageResponse_streamingImage :: Lens.Lens' UpdateStreamingImageResponse (Prelude.Maybe StreamingImage)
+updateStreamingImageResponse_streamingImage = Lens.lens (\UpdateStreamingImageResponse' {streamingImage} -> streamingImage) (\s@UpdateStreamingImageResponse' {} a -> s {streamingImage = a} :: UpdateStreamingImageResponse)
+
+-- | The response's http status code.
+updateStreamingImageResponse_httpStatus :: Lens.Lens' UpdateStreamingImageResponse Prelude.Int
+updateStreamingImageResponse_httpStatus = Lens.lens (\UpdateStreamingImageResponse' {httpStatus} -> httpStatus) (\s@UpdateStreamingImageResponse' {} a -> s {httpStatus = a} :: UpdateStreamingImageResponse)
+
+instance Prelude.NFData UpdateStreamingImageResponse where
+  rnf UpdateStreamingImageResponse' {..} =
+    Prelude.rnf streamingImage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/UpdateStudio.hs b/gen/Amazonka/Nimble/UpdateStudio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/UpdateStudio.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.Nimble.UpdateStudio
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a Studio resource.
+--
+-- Currently, this operation only supports updating the displayName of your
+-- studio.
+module Amazonka.Nimble.UpdateStudio
+  ( -- * Creating a Request
+    UpdateStudio (..),
+    newUpdateStudio,
+
+    -- * Request Lenses
+    updateStudio_adminRoleArn,
+    updateStudio_clientToken,
+    updateStudio_displayName,
+    updateStudio_userRoleArn,
+    updateStudio_studioId,
+
+    -- * Destructuring the Response
+    UpdateStudioResponse (..),
+    newUpdateStudioResponse,
+
+    -- * Response Lenses
+    updateStudioResponse_httpStatus,
+    updateStudioResponse_studio,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateStudio' smart constructor.
+data UpdateStudio = UpdateStudio'
+  { -- | The IAM role that Studio Admins will assume when logging in to the
+    -- Nimble Studio portal.
+    adminRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A friendly name for the studio.
+    displayName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The IAM role that Studio Users will assume when logging in to the Nimble
+    -- Studio portal.
+    userRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStudio' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adminRoleArn', 'updateStudio_adminRoleArn' - The IAM role that Studio Admins will assume when logging in to the
+-- Nimble Studio portal.
+--
+-- 'clientToken', 'updateStudio_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'displayName', 'updateStudio_displayName' - A friendly name for the studio.
+--
+-- 'userRoleArn', 'updateStudio_userRoleArn' - The IAM role that Studio Users will assume when logging in to the Nimble
+-- Studio portal.
+--
+-- 'studioId', 'updateStudio_studioId' - The studio ID.
+newUpdateStudio ::
+  -- | 'studioId'
+  Prelude.Text ->
+  UpdateStudio
+newUpdateStudio pStudioId_ =
+  UpdateStudio'
+    { adminRoleArn = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      userRoleArn = Prelude.Nothing,
+      studioId = pStudioId_
+    }
+
+-- | The IAM role that Studio Admins will assume when logging in to the
+-- Nimble Studio portal.
+updateStudio_adminRoleArn :: Lens.Lens' UpdateStudio (Prelude.Maybe Prelude.Text)
+updateStudio_adminRoleArn = Lens.lens (\UpdateStudio' {adminRoleArn} -> adminRoleArn) (\s@UpdateStudio' {} a -> s {adminRoleArn = a} :: UpdateStudio)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+updateStudio_clientToken :: Lens.Lens' UpdateStudio (Prelude.Maybe Prelude.Text)
+updateStudio_clientToken = Lens.lens (\UpdateStudio' {clientToken} -> clientToken) (\s@UpdateStudio' {} a -> s {clientToken = a} :: UpdateStudio)
+
+-- | A friendly name for the studio.
+updateStudio_displayName :: Lens.Lens' UpdateStudio (Prelude.Maybe Prelude.Text)
+updateStudio_displayName = Lens.lens (\UpdateStudio' {displayName} -> displayName) (\s@UpdateStudio' {} a -> s {displayName = a} :: UpdateStudio) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The IAM role that Studio Users will assume when logging in to the Nimble
+-- Studio portal.
+updateStudio_userRoleArn :: Lens.Lens' UpdateStudio (Prelude.Maybe Prelude.Text)
+updateStudio_userRoleArn = Lens.lens (\UpdateStudio' {userRoleArn} -> userRoleArn) (\s@UpdateStudio' {} a -> s {userRoleArn = a} :: UpdateStudio)
+
+-- | The studio ID.
+updateStudio_studioId :: Lens.Lens' UpdateStudio Prelude.Text
+updateStudio_studioId = Lens.lens (\UpdateStudio' {studioId} -> studioId) (\s@UpdateStudio' {} a -> s {studioId = a} :: UpdateStudio)
+
+instance Core.AWSRequest UpdateStudio where
+  type AWSResponse UpdateStudio = UpdateStudioResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateStudioResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "studio")
+      )
+
+instance Prelude.Hashable UpdateStudio where
+  hashWithSalt _salt UpdateStudio' {..} =
+    _salt
+      `Prelude.hashWithSalt` adminRoleArn
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` userRoleArn
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData UpdateStudio where
+  rnf UpdateStudio' {..} =
+    Prelude.rnf adminRoleArn
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf userRoleArn
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders UpdateStudio where
+  toHeaders UpdateStudio' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON UpdateStudio where
+  toJSON UpdateStudio' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("adminRoleArn" Data..=) Prelude.<$> adminRoleArn,
+            ("displayName" Data..=) Prelude.<$> displayName,
+            ("userRoleArn" Data..=) Prelude.<$> userRoleArn
+          ]
+      )
+
+instance Data.ToPath UpdateStudio where
+  toPath UpdateStudio' {..} =
+    Prelude.mconcat
+      ["/2020-08-01/studios/", Data.toBS studioId]
+
+instance Data.ToQuery UpdateStudio where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateStudioResponse' smart constructor.
+data UpdateStudioResponse = UpdateStudioResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about a studio.
+    studio :: Studio
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStudioResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateStudioResponse_httpStatus' - The response's http status code.
+--
+-- 'studio', 'updateStudioResponse_studio' - Information about a studio.
+newUpdateStudioResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'studio'
+  Studio ->
+  UpdateStudioResponse
+newUpdateStudioResponse pHttpStatus_ pStudio_ =
+  UpdateStudioResponse'
+    { httpStatus = pHttpStatus_,
+      studio = pStudio_
+    }
+
+-- | The response's http status code.
+updateStudioResponse_httpStatus :: Lens.Lens' UpdateStudioResponse Prelude.Int
+updateStudioResponse_httpStatus = Lens.lens (\UpdateStudioResponse' {httpStatus} -> httpStatus) (\s@UpdateStudioResponse' {} a -> s {httpStatus = a} :: UpdateStudioResponse)
+
+-- | Information about a studio.
+updateStudioResponse_studio :: Lens.Lens' UpdateStudioResponse Studio
+updateStudioResponse_studio = Lens.lens (\UpdateStudioResponse' {studio} -> studio) (\s@UpdateStudioResponse' {} a -> s {studio = a} :: UpdateStudioResponse)
+
+instance Prelude.NFData UpdateStudioResponse where
+  rnf UpdateStudioResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf studio
diff --git a/gen/Amazonka/Nimble/UpdateStudioComponent.hs b/gen/Amazonka/Nimble/UpdateStudioComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/UpdateStudioComponent.hs
@@ -0,0 +1,356 @@
+{-# 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.Nimble.UpdateStudioComponent
+-- 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 studio component resource.
+module Amazonka.Nimble.UpdateStudioComponent
+  ( -- * Creating a Request
+    UpdateStudioComponent (..),
+    newUpdateStudioComponent,
+
+    -- * Request Lenses
+    updateStudioComponent_clientToken,
+    updateStudioComponent_configuration,
+    updateStudioComponent_description,
+    updateStudioComponent_ec2SecurityGroupIds,
+    updateStudioComponent_initializationScripts,
+    updateStudioComponent_name,
+    updateStudioComponent_runtimeRoleArn,
+    updateStudioComponent_scriptParameters,
+    updateStudioComponent_secureInitializationRoleArn,
+    updateStudioComponent_subtype,
+    updateStudioComponent_type,
+    updateStudioComponent_studioComponentId,
+    updateStudioComponent_studioId,
+
+    -- * Destructuring the Response
+    UpdateStudioComponentResponse (..),
+    newUpdateStudioComponentResponse,
+
+    -- * Response Lenses
+    updateStudioComponentResponse_studioComponent,
+    updateStudioComponentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateStudioComponent' smart constructor.
+data UpdateStudioComponent = UpdateStudioComponent'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If you don’t specify a client token, the
+    -- Amazon Web Services SDK automatically generates a client token and uses
+    -- it for the request to ensure idempotency.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The configuration of the studio component, based on component type.
+    configuration :: Prelude.Maybe StudioComponentConfiguration,
+    -- | The description.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The EC2 security groups that control access to the studio component.
+    ec2SecurityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Initialization scripts for studio components.
+    initializationScripts :: Prelude.Maybe [StudioComponentInitializationScript],
+    -- | The name for the studio component.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | An IAM role attached to a Studio Component that gives the studio
+    -- component access to Amazon Web Services resources at anytime while the
+    -- instance is running.
+    runtimeRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Parameters for the studio component scripts.
+    scriptParameters :: Prelude.Maybe (Data.Sensitive [ScriptParameterKeyValue]),
+    -- | An IAM role attached to Studio Component when the system initialization
+    -- script runs which give the studio component access to Amazon Web
+    -- Services resources when the system initialization script runs.
+    secureInitializationRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The specific subtype of a studio component.
+    subtype :: Prelude.Maybe StudioComponentSubtype,
+    -- | The type of the studio component.
+    type' :: Prelude.Maybe StudioComponentType,
+    -- | The studio component ID.
+    studioComponentId :: Prelude.Text,
+    -- | The studio ID.
+    studioId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStudioComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateStudioComponent_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+--
+-- 'configuration', 'updateStudioComponent_configuration' - The configuration of the studio component, based on component type.
+--
+-- 'description', 'updateStudioComponent_description' - The description.
+--
+-- 'ec2SecurityGroupIds', 'updateStudioComponent_ec2SecurityGroupIds' - The EC2 security groups that control access to the studio component.
+--
+-- 'initializationScripts', 'updateStudioComponent_initializationScripts' - Initialization scripts for studio components.
+--
+-- 'name', 'updateStudioComponent_name' - The name for the studio component.
+--
+-- 'runtimeRoleArn', 'updateStudioComponent_runtimeRoleArn' - An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+--
+-- 'scriptParameters', 'updateStudioComponent_scriptParameters' - Parameters for the studio component scripts.
+--
+-- 'secureInitializationRoleArn', 'updateStudioComponent_secureInitializationRoleArn' - An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+--
+-- 'subtype', 'updateStudioComponent_subtype' - The specific subtype of a studio component.
+--
+-- 'type'', 'updateStudioComponent_type' - The type of the studio component.
+--
+-- 'studioComponentId', 'updateStudioComponent_studioComponentId' - The studio component ID.
+--
+-- 'studioId', 'updateStudioComponent_studioId' - The studio ID.
+newUpdateStudioComponent ::
+  -- | 'studioComponentId'
+  Prelude.Text ->
+  -- | 'studioId'
+  Prelude.Text ->
+  UpdateStudioComponent
+newUpdateStudioComponent
+  pStudioComponentId_
+  pStudioId_ =
+    UpdateStudioComponent'
+      { clientToken =
+          Prelude.Nothing,
+        configuration = Prelude.Nothing,
+        description = Prelude.Nothing,
+        ec2SecurityGroupIds = Prelude.Nothing,
+        initializationScripts = Prelude.Nothing,
+        name = Prelude.Nothing,
+        runtimeRoleArn = Prelude.Nothing,
+        scriptParameters = Prelude.Nothing,
+        secureInitializationRoleArn = Prelude.Nothing,
+        subtype = Prelude.Nothing,
+        type' = Prelude.Nothing,
+        studioComponentId = pStudioComponentId_,
+        studioId = pStudioId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If you don’t specify a client token, the
+-- Amazon Web Services SDK automatically generates a client token and uses
+-- it for the request to ensure idempotency.
+updateStudioComponent_clientToken :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe Prelude.Text)
+updateStudioComponent_clientToken = Lens.lens (\UpdateStudioComponent' {clientToken} -> clientToken) (\s@UpdateStudioComponent' {} a -> s {clientToken = a} :: UpdateStudioComponent)
+
+-- | The configuration of the studio component, based on component type.
+updateStudioComponent_configuration :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe StudioComponentConfiguration)
+updateStudioComponent_configuration = Lens.lens (\UpdateStudioComponent' {configuration} -> configuration) (\s@UpdateStudioComponent' {} a -> s {configuration = a} :: UpdateStudioComponent)
+
+-- | The description.
+updateStudioComponent_description :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe Prelude.Text)
+updateStudioComponent_description = Lens.lens (\UpdateStudioComponent' {description} -> description) (\s@UpdateStudioComponent' {} a -> s {description = a} :: UpdateStudioComponent) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The EC2 security groups that control access to the studio component.
+updateStudioComponent_ec2SecurityGroupIds :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe [Prelude.Text])
+updateStudioComponent_ec2SecurityGroupIds = Lens.lens (\UpdateStudioComponent' {ec2SecurityGroupIds} -> ec2SecurityGroupIds) (\s@UpdateStudioComponent' {} a -> s {ec2SecurityGroupIds = a} :: UpdateStudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | Initialization scripts for studio components.
+updateStudioComponent_initializationScripts :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe [StudioComponentInitializationScript])
+updateStudioComponent_initializationScripts = Lens.lens (\UpdateStudioComponent' {initializationScripts} -> initializationScripts) (\s@UpdateStudioComponent' {} a -> s {initializationScripts = a} :: UpdateStudioComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the studio component.
+updateStudioComponent_name :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe Prelude.Text)
+updateStudioComponent_name = Lens.lens (\UpdateStudioComponent' {name} -> name) (\s@UpdateStudioComponent' {} a -> s {name = a} :: UpdateStudioComponent) Prelude.. Lens.mapping Data._Sensitive
+
+-- | An IAM role attached to a Studio Component that gives the studio
+-- component access to Amazon Web Services resources at anytime while the
+-- instance is running.
+updateStudioComponent_runtimeRoleArn :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe Prelude.Text)
+updateStudioComponent_runtimeRoleArn = Lens.lens (\UpdateStudioComponent' {runtimeRoleArn} -> runtimeRoleArn) (\s@UpdateStudioComponent' {} a -> s {runtimeRoleArn = a} :: UpdateStudioComponent)
+
+-- | Parameters for the studio component scripts.
+updateStudioComponent_scriptParameters :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe [ScriptParameterKeyValue])
+updateStudioComponent_scriptParameters = Lens.lens (\UpdateStudioComponent' {scriptParameters} -> scriptParameters) (\s@UpdateStudioComponent' {} a -> s {scriptParameters = a} :: UpdateStudioComponent) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An IAM role attached to Studio Component when the system initialization
+-- script runs which give the studio component access to Amazon Web
+-- Services resources when the system initialization script runs.
+updateStudioComponent_secureInitializationRoleArn :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe Prelude.Text)
+updateStudioComponent_secureInitializationRoleArn = Lens.lens (\UpdateStudioComponent' {secureInitializationRoleArn} -> secureInitializationRoleArn) (\s@UpdateStudioComponent' {} a -> s {secureInitializationRoleArn = a} :: UpdateStudioComponent)
+
+-- | The specific subtype of a studio component.
+updateStudioComponent_subtype :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe StudioComponentSubtype)
+updateStudioComponent_subtype = Lens.lens (\UpdateStudioComponent' {subtype} -> subtype) (\s@UpdateStudioComponent' {} a -> s {subtype = a} :: UpdateStudioComponent)
+
+-- | The type of the studio component.
+updateStudioComponent_type :: Lens.Lens' UpdateStudioComponent (Prelude.Maybe StudioComponentType)
+updateStudioComponent_type = Lens.lens (\UpdateStudioComponent' {type'} -> type') (\s@UpdateStudioComponent' {} a -> s {type' = a} :: UpdateStudioComponent)
+
+-- | The studio component ID.
+updateStudioComponent_studioComponentId :: Lens.Lens' UpdateStudioComponent Prelude.Text
+updateStudioComponent_studioComponentId = Lens.lens (\UpdateStudioComponent' {studioComponentId} -> studioComponentId) (\s@UpdateStudioComponent' {} a -> s {studioComponentId = a} :: UpdateStudioComponent)
+
+-- | The studio ID.
+updateStudioComponent_studioId :: Lens.Lens' UpdateStudioComponent Prelude.Text
+updateStudioComponent_studioId = Lens.lens (\UpdateStudioComponent' {studioId} -> studioId) (\s@UpdateStudioComponent' {} a -> s {studioId = a} :: UpdateStudioComponent)
+
+instance Core.AWSRequest UpdateStudioComponent where
+  type
+    AWSResponse UpdateStudioComponent =
+      UpdateStudioComponentResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateStudioComponentResponse'
+            Prelude.<$> (x Data..?> "studioComponent")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateStudioComponent where
+  hashWithSalt _salt UpdateStudioComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ec2SecurityGroupIds
+      `Prelude.hashWithSalt` initializationScripts
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` runtimeRoleArn
+      `Prelude.hashWithSalt` scriptParameters
+      `Prelude.hashWithSalt` secureInitializationRoleArn
+      `Prelude.hashWithSalt` subtype
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` studioComponentId
+      `Prelude.hashWithSalt` studioId
+
+instance Prelude.NFData UpdateStudioComponent where
+  rnf UpdateStudioComponent' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ec2SecurityGroupIds
+      `Prelude.seq` Prelude.rnf initializationScripts
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf runtimeRoleArn
+      `Prelude.seq` Prelude.rnf scriptParameters
+      `Prelude.seq` Prelude.rnf secureInitializationRoleArn
+      `Prelude.seq` Prelude.rnf subtype
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf studioComponentId
+      `Prelude.seq` Prelude.rnf studioId
+
+instance Data.ToHeaders UpdateStudioComponent where
+  toHeaders UpdateStudioComponent' {..} =
+    Prelude.mconcat
+      [ "X-Amz-Client-Token" Data.=# clientToken,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToJSON UpdateStudioComponent where
+  toJSON UpdateStudioComponent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("configuration" Data..=) Prelude.<$> configuration,
+            ("description" Data..=) Prelude.<$> description,
+            ("ec2SecurityGroupIds" Data..=)
+              Prelude.<$> ec2SecurityGroupIds,
+            ("initializationScripts" Data..=)
+              Prelude.<$> initializationScripts,
+            ("name" Data..=) Prelude.<$> name,
+            ("runtimeRoleArn" Data..=)
+              Prelude.<$> runtimeRoleArn,
+            ("scriptParameters" Data..=)
+              Prelude.<$> scriptParameters,
+            ("secureInitializationRoleArn" Data..=)
+              Prelude.<$> secureInitializationRoleArn,
+            ("subtype" Data..=) Prelude.<$> subtype,
+            ("type" Data..=) Prelude.<$> type'
+          ]
+      )
+
+instance Data.ToPath UpdateStudioComponent where
+  toPath UpdateStudioComponent' {..} =
+    Prelude.mconcat
+      [ "/2020-08-01/studios/",
+        Data.toBS studioId,
+        "/studio-components/",
+        Data.toBS studioComponentId
+      ]
+
+instance Data.ToQuery UpdateStudioComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateStudioComponentResponse' smart constructor.
+data UpdateStudioComponentResponse = UpdateStudioComponentResponse'
+  { -- | Information about the studio component.
+    studioComponent :: Prelude.Maybe StudioComponent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStudioComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'studioComponent', 'updateStudioComponentResponse_studioComponent' - Information about the studio component.
+--
+-- 'httpStatus', 'updateStudioComponentResponse_httpStatus' - The response's http status code.
+newUpdateStudioComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateStudioComponentResponse
+newUpdateStudioComponentResponse pHttpStatus_ =
+  UpdateStudioComponentResponse'
+    { studioComponent =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the studio component.
+updateStudioComponentResponse_studioComponent :: Lens.Lens' UpdateStudioComponentResponse (Prelude.Maybe StudioComponent)
+updateStudioComponentResponse_studioComponent = Lens.lens (\UpdateStudioComponentResponse' {studioComponent} -> studioComponent) (\s@UpdateStudioComponentResponse' {} a -> s {studioComponent = a} :: UpdateStudioComponentResponse)
+
+-- | The response's http status code.
+updateStudioComponentResponse_httpStatus :: Lens.Lens' UpdateStudioComponentResponse Prelude.Int
+updateStudioComponentResponse_httpStatus = Lens.lens (\UpdateStudioComponentResponse' {httpStatus} -> httpStatus) (\s@UpdateStudioComponentResponse' {} a -> s {httpStatus = a} :: UpdateStudioComponentResponse)
+
+instance Prelude.NFData UpdateStudioComponentResponse where
+  rnf UpdateStudioComponentResponse' {..} =
+    Prelude.rnf studioComponent
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Nimble/Waiters.hs b/gen/Amazonka/Nimble/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Nimble/Waiters.hs
@@ -0,0 +1,419 @@
+{-# 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.Nimble.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.Nimble.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Nimble.GetLaunchProfile
+import Amazonka.Nimble.GetStreamingImage
+import Amazonka.Nimble.GetStreamingSession
+import Amazonka.Nimble.GetStreamingSessionStream
+import Amazonka.Nimble.GetStudio
+import Amazonka.Nimble.GetStudioComponent
+import Amazonka.Nimble.Lens
+import Amazonka.Nimble.Types
+import qualified Amazonka.Prelude as Prelude
+
+-- | Polls 'Amazonka.Nimble.GetLaunchProfile' every 5 seconds until a successful state is reached. An error is returned after 150 failed checks.
+newLaunchProfileDeleted :: Core.Wait GetLaunchProfile
+newLaunchProfileDeleted =
+  Core.Wait
+    { Core.name = "LaunchProfileDeleted",
+      Core.attempts = 150,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETED"
+            Core.AcceptSuccess
+            ( getLaunchProfileResponse_launchProfile
+                Prelude.. Lens._Just
+                Prelude.. launchProfile_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( getLaunchProfileResponse_launchProfile
+                Prelude.. Lens._Just
+                Prelude.. launchProfile_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetLaunchProfile' every 5 seconds until a successful state is reached. An error is returned after 150 failed checks.
+newLaunchProfileReady :: Core.Wait GetLaunchProfile
+newLaunchProfileReady =
+  Core.Wait
+    { Core.name = "LaunchProfileReady",
+      Core.attempts = 150,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchAll
+            "READY"
+            Core.AcceptSuccess
+            ( getLaunchProfileResponse_launchProfile
+                Prelude.. Lens._Just
+                Prelude.. launchProfile_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( getLaunchProfileResponse_launchProfile
+                Prelude.. Lens._Just
+                Prelude.. launchProfile_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "UPDATE_FAILED"
+            Core.AcceptFailure
+            ( getLaunchProfileResponse_launchProfile
+                Prelude.. Lens._Just
+                Prelude.. launchProfile_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStreamingImage' every 2 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newStreamingImageDeleted :: Core.Wait GetStreamingImage
+newStreamingImageDeleted =
+  Core.Wait
+    { Core.name = "StreamingImageDeleted",
+      Core.attempts = 60,
+      Core.delay = 2,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETED"
+            Core.AcceptSuccess
+            ( getStreamingImageResponse_streamingImage
+                Prelude.. Lens._Just
+                Prelude.. streamingImage_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( getStreamingImageResponse_streamingImage
+                Prelude.. Lens._Just
+                Prelude.. streamingImage_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStreamingImage' every 2 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newStreamingImageReady :: Core.Wait GetStreamingImage
+newStreamingImageReady =
+  Core.Wait
+    { Core.name = "StreamingImageReady",
+      Core.attempts = 60,
+      Core.delay = 2,
+      Core.acceptors =
+        [ Core.matchAll
+            "READY"
+            Core.AcceptSuccess
+            ( getStreamingImageResponse_streamingImage
+                Prelude.. Lens._Just
+                Prelude.. streamingImage_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( getStreamingImageResponse_streamingImage
+                Prelude.. Lens._Just
+                Prelude.. streamingImage_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "UPDATE_FAILED"
+            Core.AcceptFailure
+            ( getStreamingImageResponse_streamingImage
+                Prelude.. Lens._Just
+                Prelude.. streamingImage_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStreamingSession' every 5 seconds until a successful state is reached. An error is returned after 180 failed checks.
+newStreamingSessionDeleted :: Core.Wait GetStreamingSession
+newStreamingSessionDeleted =
+  Core.Wait
+    { Core.name = "StreamingSessionDeleted",
+      Core.attempts = 180,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETED"
+            Core.AcceptSuccess
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStreamingSession' every 10 seconds until a successful state is reached. An error is returned after 180 failed checks.
+newStreamingSessionReady :: Core.Wait GetStreamingSession
+newStreamingSessionReady =
+  Core.Wait
+    { Core.name = "StreamingSessionReady",
+      Core.attempts = 180,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "READY"
+            Core.AcceptSuccess
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "START_FAILED"
+            Core.AcceptFailure
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStreamingSession' every 5 seconds until a successful state is reached. An error is returned after 180 failed checks.
+newStreamingSessionStopped :: Core.Wait GetStreamingSession
+newStreamingSessionStopped =
+  Core.Wait
+    { Core.name = "StreamingSessionStopped",
+      Core.attempts = 180,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchAll
+            "STOPPED"
+            Core.AcceptSuccess
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "STOP_FAILED"
+            Core.AcceptFailure
+            ( getStreamingSessionResponse_session
+                Prelude.. Lens._Just
+                Prelude.. streamingSession_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStreamingSessionStream' every 5 seconds until a successful state is reached. An error is returned after 30 failed checks.
+newStreamingSessionStreamReady :: Core.Wait GetStreamingSessionStream
+newStreamingSessionStreamReady =
+  Core.Wait
+    { Core.name =
+        "StreamingSessionStreamReady",
+      Core.attempts = 30,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchAll
+            "READY"
+            Core.AcceptSuccess
+            ( getStreamingSessionStreamResponse_stream
+                Prelude.. Lens._Just
+                Prelude.. streamingSessionStream_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( getStreamingSessionStreamResponse_stream
+                Prelude.. Lens._Just
+                Prelude.. streamingSessionStream_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStudioComponent' every 1 seconds until a successful state is reached. An error is returned after 120 failed checks.
+newStudioComponentDeleted :: Core.Wait GetStudioComponent
+newStudioComponentDeleted =
+  Core.Wait
+    { Core.name = "StudioComponentDeleted",
+      Core.attempts = 120,
+      Core.delay = 1,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETED"
+            Core.AcceptSuccess
+            ( getStudioComponentResponse_studioComponent
+                Prelude.. Lens._Just
+                Prelude.. studioComponent_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( getStudioComponentResponse_studioComponent
+                Prelude.. Lens._Just
+                Prelude.. studioComponent_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStudioComponent' every 2 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newStudioComponentReady :: Core.Wait GetStudioComponent
+newStudioComponentReady =
+  Core.Wait
+    { Core.name = "StudioComponentReady",
+      Core.attempts = 60,
+      Core.delay = 2,
+      Core.acceptors =
+        [ Core.matchAll
+            "READY"
+            Core.AcceptSuccess
+            ( getStudioComponentResponse_studioComponent
+                Prelude.. Lens._Just
+                Prelude.. studioComponent_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( getStudioComponentResponse_studioComponent
+                Prelude.. Lens._Just
+                Prelude.. studioComponent_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "UPDATE_FAILED"
+            Core.AcceptFailure
+            ( getStudioComponentResponse_studioComponent
+                Prelude.. Lens._Just
+                Prelude.. studioComponent_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStudio' every 2 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newStudioDeleted :: Core.Wait GetStudio
+newStudioDeleted =
+  Core.Wait
+    { Core.name = "StudioDeleted",
+      Core.attempts = 60,
+      Core.delay = 2,
+      Core.acceptors =
+        [ Core.matchAll
+            "DELETED"
+            Core.AcceptSuccess
+            ( getStudioResponse_studio
+                Prelude.. studio_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "DELETE_FAILED"
+            Core.AcceptFailure
+            ( getStudioResponse_studio
+                Prelude.. studio_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.Nimble.GetStudio' every 2 seconds until a successful state is reached. An error is returned after 60 failed checks.
+newStudioReady :: Core.Wait GetStudio
+newStudioReady =
+  Core.Wait
+    { Core.name = "StudioReady",
+      Core.attempts = 60,
+      Core.delay = 2,
+      Core.acceptors =
+        [ Core.matchAll
+            "READY"
+            Core.AcceptSuccess
+            ( getStudioResponse_studio
+                Prelude.. studio_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "CREATE_FAILED"
+            Core.AcceptFailure
+            ( getStudioResponse_studio
+                Prelude.. studio_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "UPDATE_FAILED"
+            Core.AcceptFailure
+            ( getStudioResponse_studio
+                Prelude.. studio_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
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.Nimble
+import Test.Amazonka.Nimble.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Nimble"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/Nimble.hs b/test/Test/Amazonka/Gen/Nimble.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Nimble.hs
@@ -0,0 +1,1018 @@
+{-# 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.Nimble
+-- Copyright   : (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.Nimble where
+
+import Amazonka.Nimble
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Nimble.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAcceptEulas $
+--             newAcceptEulas
+--
+--         , requestCreateLaunchProfile $
+--             newCreateLaunchProfile
+--
+--         , requestCreateStreamingImage $
+--             newCreateStreamingImage
+--
+--         , requestCreateStreamingSession $
+--             newCreateStreamingSession
+--
+--         , requestCreateStreamingSessionStream $
+--             newCreateStreamingSessionStream
+--
+--         , requestCreateStudio $
+--             newCreateStudio
+--
+--         , requestCreateStudioComponent $
+--             newCreateStudioComponent
+--
+--         , requestDeleteLaunchProfile $
+--             newDeleteLaunchProfile
+--
+--         , requestDeleteLaunchProfileMember $
+--             newDeleteLaunchProfileMember
+--
+--         , requestDeleteStreamingImage $
+--             newDeleteStreamingImage
+--
+--         , requestDeleteStreamingSession $
+--             newDeleteStreamingSession
+--
+--         , requestDeleteStudio $
+--             newDeleteStudio
+--
+--         , requestDeleteStudioComponent $
+--             newDeleteStudioComponent
+--
+--         , requestDeleteStudioMember $
+--             newDeleteStudioMember
+--
+--         , requestGetEula $
+--             newGetEula
+--
+--         , requestGetLaunchProfile $
+--             newGetLaunchProfile
+--
+--         , requestGetLaunchProfileDetails $
+--             newGetLaunchProfileDetails
+--
+--         , requestGetLaunchProfileInitialization $
+--             newGetLaunchProfileInitialization
+--
+--         , requestGetLaunchProfileMember $
+--             newGetLaunchProfileMember
+--
+--         , requestGetStreamingImage $
+--             newGetStreamingImage
+--
+--         , requestGetStreamingSession $
+--             newGetStreamingSession
+--
+--         , requestGetStreamingSessionBackup $
+--             newGetStreamingSessionBackup
+--
+--         , requestGetStreamingSessionStream $
+--             newGetStreamingSessionStream
+--
+--         , requestGetStudio $
+--             newGetStudio
+--
+--         , requestGetStudioComponent $
+--             newGetStudioComponent
+--
+--         , requestGetStudioMember $
+--             newGetStudioMember
+--
+--         , requestListEulaAcceptances $
+--             newListEulaAcceptances
+--
+--         , requestListEulas $
+--             newListEulas
+--
+--         , requestListLaunchProfileMembers $
+--             newListLaunchProfileMembers
+--
+--         , requestListLaunchProfiles $
+--             newListLaunchProfiles
+--
+--         , requestListStreamingImages $
+--             newListStreamingImages
+--
+--         , requestListStreamingSessionBackups $
+--             newListStreamingSessionBackups
+--
+--         , requestListStreamingSessions $
+--             newListStreamingSessions
+--
+--         , requestListStudioComponents $
+--             newListStudioComponents
+--
+--         , requestListStudioMembers $
+--             newListStudioMembers
+--
+--         , requestListStudios $
+--             newListStudios
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutLaunchProfileMembers $
+--             newPutLaunchProfileMembers
+--
+--         , requestPutStudioMembers $
+--             newPutStudioMembers
+--
+--         , requestStartStreamingSession $
+--             newStartStreamingSession
+--
+--         , requestStartStudioSSOConfigurationRepair $
+--             newStartStudioSSOConfigurationRepair
+--
+--         , requestStopStreamingSession $
+--             newStopStreamingSession
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateLaunchProfile $
+--             newUpdateLaunchProfile
+--
+--         , requestUpdateLaunchProfileMember $
+--             newUpdateLaunchProfileMember
+--
+--         , requestUpdateStreamingImage $
+--             newUpdateStreamingImage
+--
+--         , requestUpdateStudio $
+--             newUpdateStudio
+--
+--         , requestUpdateStudioComponent $
+--             newUpdateStudioComponent
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAcceptEulas $
+--             newAcceptEulasResponse
+--
+--         , responseCreateLaunchProfile $
+--             newCreateLaunchProfileResponse
+--
+--         , responseCreateStreamingImage $
+--             newCreateStreamingImageResponse
+--
+--         , responseCreateStreamingSession $
+--             newCreateStreamingSessionResponse
+--
+--         , responseCreateStreamingSessionStream $
+--             newCreateStreamingSessionStreamResponse
+--
+--         , responseCreateStudio $
+--             newCreateStudioResponse
+--
+--         , responseCreateStudioComponent $
+--             newCreateStudioComponentResponse
+--
+--         , responseDeleteLaunchProfile $
+--             newDeleteLaunchProfileResponse
+--
+--         , responseDeleteLaunchProfileMember $
+--             newDeleteLaunchProfileMemberResponse
+--
+--         , responseDeleteStreamingImage $
+--             newDeleteStreamingImageResponse
+--
+--         , responseDeleteStreamingSession $
+--             newDeleteStreamingSessionResponse
+--
+--         , responseDeleteStudio $
+--             newDeleteStudioResponse
+--
+--         , responseDeleteStudioComponent $
+--             newDeleteStudioComponentResponse
+--
+--         , responseDeleteStudioMember $
+--             newDeleteStudioMemberResponse
+--
+--         , responseGetEula $
+--             newGetEulaResponse
+--
+--         , responseGetLaunchProfile $
+--             newGetLaunchProfileResponse
+--
+--         , responseGetLaunchProfileDetails $
+--             newGetLaunchProfileDetailsResponse
+--
+--         , responseGetLaunchProfileInitialization $
+--             newGetLaunchProfileInitializationResponse
+--
+--         , responseGetLaunchProfileMember $
+--             newGetLaunchProfileMemberResponse
+--
+--         , responseGetStreamingImage $
+--             newGetStreamingImageResponse
+--
+--         , responseGetStreamingSession $
+--             newGetStreamingSessionResponse
+--
+--         , responseGetStreamingSessionBackup $
+--             newGetStreamingSessionBackupResponse
+--
+--         , responseGetStreamingSessionStream $
+--             newGetStreamingSessionStreamResponse
+--
+--         , responseGetStudio $
+--             newGetStudioResponse
+--
+--         , responseGetStudioComponent $
+--             newGetStudioComponentResponse
+--
+--         , responseGetStudioMember $
+--             newGetStudioMemberResponse
+--
+--         , responseListEulaAcceptances $
+--             newListEulaAcceptancesResponse
+--
+--         , responseListEulas $
+--             newListEulasResponse
+--
+--         , responseListLaunchProfileMembers $
+--             newListLaunchProfileMembersResponse
+--
+--         , responseListLaunchProfiles $
+--             newListLaunchProfilesResponse
+--
+--         , responseListStreamingImages $
+--             newListStreamingImagesResponse
+--
+--         , responseListStreamingSessionBackups $
+--             newListStreamingSessionBackupsResponse
+--
+--         , responseListStreamingSessions $
+--             newListStreamingSessionsResponse
+--
+--         , responseListStudioComponents $
+--             newListStudioComponentsResponse
+--
+--         , responseListStudioMembers $
+--             newListStudioMembersResponse
+--
+--         , responseListStudios $
+--             newListStudiosResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutLaunchProfileMembers $
+--             newPutLaunchProfileMembersResponse
+--
+--         , responsePutStudioMembers $
+--             newPutStudioMembersResponse
+--
+--         , responseStartStreamingSession $
+--             newStartStreamingSessionResponse
+--
+--         , responseStartStudioSSOConfigurationRepair $
+--             newStartStudioSSOConfigurationRepairResponse
+--
+--         , responseStopStreamingSession $
+--             newStopStreamingSessionResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateLaunchProfile $
+--             newUpdateLaunchProfileResponse
+--
+--         , responseUpdateLaunchProfileMember $
+--             newUpdateLaunchProfileMemberResponse
+--
+--         , responseUpdateStreamingImage $
+--             newUpdateStreamingImageResponse
+--
+--         , responseUpdateStudio $
+--             newUpdateStudioResponse
+--
+--         , responseUpdateStudioComponent $
+--             newUpdateStudioComponentResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAcceptEulas :: AcceptEulas -> TestTree
+requestAcceptEulas =
+  req
+    "AcceptEulas"
+    "fixture/AcceptEulas.yaml"
+
+requestCreateLaunchProfile :: CreateLaunchProfile -> TestTree
+requestCreateLaunchProfile =
+  req
+    "CreateLaunchProfile"
+    "fixture/CreateLaunchProfile.yaml"
+
+requestCreateStreamingImage :: CreateStreamingImage -> TestTree
+requestCreateStreamingImage =
+  req
+    "CreateStreamingImage"
+    "fixture/CreateStreamingImage.yaml"
+
+requestCreateStreamingSession :: CreateStreamingSession -> TestTree
+requestCreateStreamingSession =
+  req
+    "CreateStreamingSession"
+    "fixture/CreateStreamingSession.yaml"
+
+requestCreateStreamingSessionStream :: CreateStreamingSessionStream -> TestTree
+requestCreateStreamingSessionStream =
+  req
+    "CreateStreamingSessionStream"
+    "fixture/CreateStreamingSessionStream.yaml"
+
+requestCreateStudio :: CreateStudio -> TestTree
+requestCreateStudio =
+  req
+    "CreateStudio"
+    "fixture/CreateStudio.yaml"
+
+requestCreateStudioComponent :: CreateStudioComponent -> TestTree
+requestCreateStudioComponent =
+  req
+    "CreateStudioComponent"
+    "fixture/CreateStudioComponent.yaml"
+
+requestDeleteLaunchProfile :: DeleteLaunchProfile -> TestTree
+requestDeleteLaunchProfile =
+  req
+    "DeleteLaunchProfile"
+    "fixture/DeleteLaunchProfile.yaml"
+
+requestDeleteLaunchProfileMember :: DeleteLaunchProfileMember -> TestTree
+requestDeleteLaunchProfileMember =
+  req
+    "DeleteLaunchProfileMember"
+    "fixture/DeleteLaunchProfileMember.yaml"
+
+requestDeleteStreamingImage :: DeleteStreamingImage -> TestTree
+requestDeleteStreamingImage =
+  req
+    "DeleteStreamingImage"
+    "fixture/DeleteStreamingImage.yaml"
+
+requestDeleteStreamingSession :: DeleteStreamingSession -> TestTree
+requestDeleteStreamingSession =
+  req
+    "DeleteStreamingSession"
+    "fixture/DeleteStreamingSession.yaml"
+
+requestDeleteStudio :: DeleteStudio -> TestTree
+requestDeleteStudio =
+  req
+    "DeleteStudio"
+    "fixture/DeleteStudio.yaml"
+
+requestDeleteStudioComponent :: DeleteStudioComponent -> TestTree
+requestDeleteStudioComponent =
+  req
+    "DeleteStudioComponent"
+    "fixture/DeleteStudioComponent.yaml"
+
+requestDeleteStudioMember :: DeleteStudioMember -> TestTree
+requestDeleteStudioMember =
+  req
+    "DeleteStudioMember"
+    "fixture/DeleteStudioMember.yaml"
+
+requestGetEula :: GetEula -> TestTree
+requestGetEula =
+  req
+    "GetEula"
+    "fixture/GetEula.yaml"
+
+requestGetLaunchProfile :: GetLaunchProfile -> TestTree
+requestGetLaunchProfile =
+  req
+    "GetLaunchProfile"
+    "fixture/GetLaunchProfile.yaml"
+
+requestGetLaunchProfileDetails :: GetLaunchProfileDetails -> TestTree
+requestGetLaunchProfileDetails =
+  req
+    "GetLaunchProfileDetails"
+    "fixture/GetLaunchProfileDetails.yaml"
+
+requestGetLaunchProfileInitialization :: GetLaunchProfileInitialization -> TestTree
+requestGetLaunchProfileInitialization =
+  req
+    "GetLaunchProfileInitialization"
+    "fixture/GetLaunchProfileInitialization.yaml"
+
+requestGetLaunchProfileMember :: GetLaunchProfileMember -> TestTree
+requestGetLaunchProfileMember =
+  req
+    "GetLaunchProfileMember"
+    "fixture/GetLaunchProfileMember.yaml"
+
+requestGetStreamingImage :: GetStreamingImage -> TestTree
+requestGetStreamingImage =
+  req
+    "GetStreamingImage"
+    "fixture/GetStreamingImage.yaml"
+
+requestGetStreamingSession :: GetStreamingSession -> TestTree
+requestGetStreamingSession =
+  req
+    "GetStreamingSession"
+    "fixture/GetStreamingSession.yaml"
+
+requestGetStreamingSessionBackup :: GetStreamingSessionBackup -> TestTree
+requestGetStreamingSessionBackup =
+  req
+    "GetStreamingSessionBackup"
+    "fixture/GetStreamingSessionBackup.yaml"
+
+requestGetStreamingSessionStream :: GetStreamingSessionStream -> TestTree
+requestGetStreamingSessionStream =
+  req
+    "GetStreamingSessionStream"
+    "fixture/GetStreamingSessionStream.yaml"
+
+requestGetStudio :: GetStudio -> TestTree
+requestGetStudio =
+  req
+    "GetStudio"
+    "fixture/GetStudio.yaml"
+
+requestGetStudioComponent :: GetStudioComponent -> TestTree
+requestGetStudioComponent =
+  req
+    "GetStudioComponent"
+    "fixture/GetStudioComponent.yaml"
+
+requestGetStudioMember :: GetStudioMember -> TestTree
+requestGetStudioMember =
+  req
+    "GetStudioMember"
+    "fixture/GetStudioMember.yaml"
+
+requestListEulaAcceptances :: ListEulaAcceptances -> TestTree
+requestListEulaAcceptances =
+  req
+    "ListEulaAcceptances"
+    "fixture/ListEulaAcceptances.yaml"
+
+requestListEulas :: ListEulas -> TestTree
+requestListEulas =
+  req
+    "ListEulas"
+    "fixture/ListEulas.yaml"
+
+requestListLaunchProfileMembers :: ListLaunchProfileMembers -> TestTree
+requestListLaunchProfileMembers =
+  req
+    "ListLaunchProfileMembers"
+    "fixture/ListLaunchProfileMembers.yaml"
+
+requestListLaunchProfiles :: ListLaunchProfiles -> TestTree
+requestListLaunchProfiles =
+  req
+    "ListLaunchProfiles"
+    "fixture/ListLaunchProfiles.yaml"
+
+requestListStreamingImages :: ListStreamingImages -> TestTree
+requestListStreamingImages =
+  req
+    "ListStreamingImages"
+    "fixture/ListStreamingImages.yaml"
+
+requestListStreamingSessionBackups :: ListStreamingSessionBackups -> TestTree
+requestListStreamingSessionBackups =
+  req
+    "ListStreamingSessionBackups"
+    "fixture/ListStreamingSessionBackups.yaml"
+
+requestListStreamingSessions :: ListStreamingSessions -> TestTree
+requestListStreamingSessions =
+  req
+    "ListStreamingSessions"
+    "fixture/ListStreamingSessions.yaml"
+
+requestListStudioComponents :: ListStudioComponents -> TestTree
+requestListStudioComponents =
+  req
+    "ListStudioComponents"
+    "fixture/ListStudioComponents.yaml"
+
+requestListStudioMembers :: ListStudioMembers -> TestTree
+requestListStudioMembers =
+  req
+    "ListStudioMembers"
+    "fixture/ListStudioMembers.yaml"
+
+requestListStudios :: ListStudios -> TestTree
+requestListStudios =
+  req
+    "ListStudios"
+    "fixture/ListStudios.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutLaunchProfileMembers :: PutLaunchProfileMembers -> TestTree
+requestPutLaunchProfileMembers =
+  req
+    "PutLaunchProfileMembers"
+    "fixture/PutLaunchProfileMembers.yaml"
+
+requestPutStudioMembers :: PutStudioMembers -> TestTree
+requestPutStudioMembers =
+  req
+    "PutStudioMembers"
+    "fixture/PutStudioMembers.yaml"
+
+requestStartStreamingSession :: StartStreamingSession -> TestTree
+requestStartStreamingSession =
+  req
+    "StartStreamingSession"
+    "fixture/StartStreamingSession.yaml"
+
+requestStartStudioSSOConfigurationRepair :: StartStudioSSOConfigurationRepair -> TestTree
+requestStartStudioSSOConfigurationRepair =
+  req
+    "StartStudioSSOConfigurationRepair"
+    "fixture/StartStudioSSOConfigurationRepair.yaml"
+
+requestStopStreamingSession :: StopStreamingSession -> TestTree
+requestStopStreamingSession =
+  req
+    "StopStreamingSession"
+    "fixture/StopStreamingSession.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateLaunchProfile :: UpdateLaunchProfile -> TestTree
+requestUpdateLaunchProfile =
+  req
+    "UpdateLaunchProfile"
+    "fixture/UpdateLaunchProfile.yaml"
+
+requestUpdateLaunchProfileMember :: UpdateLaunchProfileMember -> TestTree
+requestUpdateLaunchProfileMember =
+  req
+    "UpdateLaunchProfileMember"
+    "fixture/UpdateLaunchProfileMember.yaml"
+
+requestUpdateStreamingImage :: UpdateStreamingImage -> TestTree
+requestUpdateStreamingImage =
+  req
+    "UpdateStreamingImage"
+    "fixture/UpdateStreamingImage.yaml"
+
+requestUpdateStudio :: UpdateStudio -> TestTree
+requestUpdateStudio =
+  req
+    "UpdateStudio"
+    "fixture/UpdateStudio.yaml"
+
+requestUpdateStudioComponent :: UpdateStudioComponent -> TestTree
+requestUpdateStudioComponent =
+  req
+    "UpdateStudioComponent"
+    "fixture/UpdateStudioComponent.yaml"
+
+-- Responses
+
+responseAcceptEulas :: AcceptEulasResponse -> TestTree
+responseAcceptEulas =
+  res
+    "AcceptEulasResponse"
+    "fixture/AcceptEulasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptEulas)
+
+responseCreateLaunchProfile :: CreateLaunchProfileResponse -> TestTree
+responseCreateLaunchProfile =
+  res
+    "CreateLaunchProfileResponse"
+    "fixture/CreateLaunchProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLaunchProfile)
+
+responseCreateStreamingImage :: CreateStreamingImageResponse -> TestTree
+responseCreateStreamingImage =
+  res
+    "CreateStreamingImageResponse"
+    "fixture/CreateStreamingImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStreamingImage)
+
+responseCreateStreamingSession :: CreateStreamingSessionResponse -> TestTree
+responseCreateStreamingSession =
+  res
+    "CreateStreamingSessionResponse"
+    "fixture/CreateStreamingSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStreamingSession)
+
+responseCreateStreamingSessionStream :: CreateStreamingSessionStreamResponse -> TestTree
+responseCreateStreamingSessionStream =
+  res
+    "CreateStreamingSessionStreamResponse"
+    "fixture/CreateStreamingSessionStreamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStreamingSessionStream)
+
+responseCreateStudio :: CreateStudioResponse -> TestTree
+responseCreateStudio =
+  res
+    "CreateStudioResponse"
+    "fixture/CreateStudioResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStudio)
+
+responseCreateStudioComponent :: CreateStudioComponentResponse -> TestTree
+responseCreateStudioComponent =
+  res
+    "CreateStudioComponentResponse"
+    "fixture/CreateStudioComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStudioComponent)
+
+responseDeleteLaunchProfile :: DeleteLaunchProfileResponse -> TestTree
+responseDeleteLaunchProfile =
+  res
+    "DeleteLaunchProfileResponse"
+    "fixture/DeleteLaunchProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLaunchProfile)
+
+responseDeleteLaunchProfileMember :: DeleteLaunchProfileMemberResponse -> TestTree
+responseDeleteLaunchProfileMember =
+  res
+    "DeleteLaunchProfileMemberResponse"
+    "fixture/DeleteLaunchProfileMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLaunchProfileMember)
+
+responseDeleteStreamingImage :: DeleteStreamingImageResponse -> TestTree
+responseDeleteStreamingImage =
+  res
+    "DeleteStreamingImageResponse"
+    "fixture/DeleteStreamingImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStreamingImage)
+
+responseDeleteStreamingSession :: DeleteStreamingSessionResponse -> TestTree
+responseDeleteStreamingSession =
+  res
+    "DeleteStreamingSessionResponse"
+    "fixture/DeleteStreamingSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStreamingSession)
+
+responseDeleteStudio :: DeleteStudioResponse -> TestTree
+responseDeleteStudio =
+  res
+    "DeleteStudioResponse"
+    "fixture/DeleteStudioResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStudio)
+
+responseDeleteStudioComponent :: DeleteStudioComponentResponse -> TestTree
+responseDeleteStudioComponent =
+  res
+    "DeleteStudioComponentResponse"
+    "fixture/DeleteStudioComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStudioComponent)
+
+responseDeleteStudioMember :: DeleteStudioMemberResponse -> TestTree
+responseDeleteStudioMember =
+  res
+    "DeleteStudioMemberResponse"
+    "fixture/DeleteStudioMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStudioMember)
+
+responseGetEula :: GetEulaResponse -> TestTree
+responseGetEula =
+  res
+    "GetEulaResponse"
+    "fixture/GetEulaResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEula)
+
+responseGetLaunchProfile :: GetLaunchProfileResponse -> TestTree
+responseGetLaunchProfile =
+  res
+    "GetLaunchProfileResponse"
+    "fixture/GetLaunchProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLaunchProfile)
+
+responseGetLaunchProfileDetails :: GetLaunchProfileDetailsResponse -> TestTree
+responseGetLaunchProfileDetails =
+  res
+    "GetLaunchProfileDetailsResponse"
+    "fixture/GetLaunchProfileDetailsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLaunchProfileDetails)
+
+responseGetLaunchProfileInitialization :: GetLaunchProfileInitializationResponse -> TestTree
+responseGetLaunchProfileInitialization =
+  res
+    "GetLaunchProfileInitializationResponse"
+    "fixture/GetLaunchProfileInitializationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLaunchProfileInitialization)
+
+responseGetLaunchProfileMember :: GetLaunchProfileMemberResponse -> TestTree
+responseGetLaunchProfileMember =
+  res
+    "GetLaunchProfileMemberResponse"
+    "fixture/GetLaunchProfileMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLaunchProfileMember)
+
+responseGetStreamingImage :: GetStreamingImageResponse -> TestTree
+responseGetStreamingImage =
+  res
+    "GetStreamingImageResponse"
+    "fixture/GetStreamingImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStreamingImage)
+
+responseGetStreamingSession :: GetStreamingSessionResponse -> TestTree
+responseGetStreamingSession =
+  res
+    "GetStreamingSessionResponse"
+    "fixture/GetStreamingSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStreamingSession)
+
+responseGetStreamingSessionBackup :: GetStreamingSessionBackupResponse -> TestTree
+responseGetStreamingSessionBackup =
+  res
+    "GetStreamingSessionBackupResponse"
+    "fixture/GetStreamingSessionBackupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStreamingSessionBackup)
+
+responseGetStreamingSessionStream :: GetStreamingSessionStreamResponse -> TestTree
+responseGetStreamingSessionStream =
+  res
+    "GetStreamingSessionStreamResponse"
+    "fixture/GetStreamingSessionStreamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStreamingSessionStream)
+
+responseGetStudio :: GetStudioResponse -> TestTree
+responseGetStudio =
+  res
+    "GetStudioResponse"
+    "fixture/GetStudioResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStudio)
+
+responseGetStudioComponent :: GetStudioComponentResponse -> TestTree
+responseGetStudioComponent =
+  res
+    "GetStudioComponentResponse"
+    "fixture/GetStudioComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStudioComponent)
+
+responseGetStudioMember :: GetStudioMemberResponse -> TestTree
+responseGetStudioMember =
+  res
+    "GetStudioMemberResponse"
+    "fixture/GetStudioMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStudioMember)
+
+responseListEulaAcceptances :: ListEulaAcceptancesResponse -> TestTree
+responseListEulaAcceptances =
+  res
+    "ListEulaAcceptancesResponse"
+    "fixture/ListEulaAcceptancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEulaAcceptances)
+
+responseListEulas :: ListEulasResponse -> TestTree
+responseListEulas =
+  res
+    "ListEulasResponse"
+    "fixture/ListEulasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEulas)
+
+responseListLaunchProfileMembers :: ListLaunchProfileMembersResponse -> TestTree
+responseListLaunchProfileMembers =
+  res
+    "ListLaunchProfileMembersResponse"
+    "fixture/ListLaunchProfileMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListLaunchProfileMembers)
+
+responseListLaunchProfiles :: ListLaunchProfilesResponse -> TestTree
+responseListLaunchProfiles =
+  res
+    "ListLaunchProfilesResponse"
+    "fixture/ListLaunchProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListLaunchProfiles)
+
+responseListStreamingImages :: ListStreamingImagesResponse -> TestTree
+responseListStreamingImages =
+  res
+    "ListStreamingImagesResponse"
+    "fixture/ListStreamingImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStreamingImages)
+
+responseListStreamingSessionBackups :: ListStreamingSessionBackupsResponse -> TestTree
+responseListStreamingSessionBackups =
+  res
+    "ListStreamingSessionBackupsResponse"
+    "fixture/ListStreamingSessionBackupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStreamingSessionBackups)
+
+responseListStreamingSessions :: ListStreamingSessionsResponse -> TestTree
+responseListStreamingSessions =
+  res
+    "ListStreamingSessionsResponse"
+    "fixture/ListStreamingSessionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStreamingSessions)
+
+responseListStudioComponents :: ListStudioComponentsResponse -> TestTree
+responseListStudioComponents =
+  res
+    "ListStudioComponentsResponse"
+    "fixture/ListStudioComponentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStudioComponents)
+
+responseListStudioMembers :: ListStudioMembersResponse -> TestTree
+responseListStudioMembers =
+  res
+    "ListStudioMembersResponse"
+    "fixture/ListStudioMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStudioMembers)
+
+responseListStudios :: ListStudiosResponse -> TestTree
+responseListStudios =
+  res
+    "ListStudiosResponse"
+    "fixture/ListStudiosResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStudios)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutLaunchProfileMembers :: PutLaunchProfileMembersResponse -> TestTree
+responsePutLaunchProfileMembers =
+  res
+    "PutLaunchProfileMembersResponse"
+    "fixture/PutLaunchProfileMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutLaunchProfileMembers)
+
+responsePutStudioMembers :: PutStudioMembersResponse -> TestTree
+responsePutStudioMembers =
+  res
+    "PutStudioMembersResponse"
+    "fixture/PutStudioMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutStudioMembers)
+
+responseStartStreamingSession :: StartStreamingSessionResponse -> TestTree
+responseStartStreamingSession =
+  res
+    "StartStreamingSessionResponse"
+    "fixture/StartStreamingSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartStreamingSession)
+
+responseStartStudioSSOConfigurationRepair :: StartStudioSSOConfigurationRepairResponse -> TestTree
+responseStartStudioSSOConfigurationRepair =
+  res
+    "StartStudioSSOConfigurationRepairResponse"
+    "fixture/StartStudioSSOConfigurationRepairResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartStudioSSOConfigurationRepair)
+
+responseStopStreamingSession :: StopStreamingSessionResponse -> TestTree
+responseStopStreamingSession =
+  res
+    "StopStreamingSessionResponse"
+    "fixture/StopStreamingSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopStreamingSession)
+
+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)
+
+responseUpdateLaunchProfile :: UpdateLaunchProfileResponse -> TestTree
+responseUpdateLaunchProfile =
+  res
+    "UpdateLaunchProfileResponse"
+    "fixture/UpdateLaunchProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLaunchProfile)
+
+responseUpdateLaunchProfileMember :: UpdateLaunchProfileMemberResponse -> TestTree
+responseUpdateLaunchProfileMember =
+  res
+    "UpdateLaunchProfileMemberResponse"
+    "fixture/UpdateLaunchProfileMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLaunchProfileMember)
+
+responseUpdateStreamingImage :: UpdateStreamingImageResponse -> TestTree
+responseUpdateStreamingImage =
+  res
+    "UpdateStreamingImageResponse"
+    "fixture/UpdateStreamingImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateStreamingImage)
+
+responseUpdateStudio :: UpdateStudioResponse -> TestTree
+responseUpdateStudio =
+  res
+    "UpdateStudioResponse"
+    "fixture/UpdateStudioResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateStudio)
+
+responseUpdateStudioComponent :: UpdateStudioComponentResponse -> TestTree
+responseUpdateStudioComponent =
+  res
+    "UpdateStudioComponentResponse"
+    "fixture/UpdateStudioComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateStudioComponent)
diff --git a/test/Test/Amazonka/Nimble.hs b/test/Test/Amazonka/Nimble.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Nimble.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Nimble
+-- Copyright   : (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.Nimble
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Nimble/Internal.hs b/test/Test/Amazonka/Nimble/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Nimble/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Nimble.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.Nimble.Internal where
